UReCoRe Logo

WarCraft2

Vorwort zur KI Programmierung in WarCraft 2

In den vergangenen 20 Jahren habe ich mich ab und an auch intensiv mit dem Mapping und der KI Programmierung von WarCraft 2 befasst. Die Computergegner im normalen Mehrspielermodus sind im Original nicht besonders klug. Einigermaßen erfahrene Spieler können sie somit leicht besiegen. Natürlich unterliegen diese KI's (Künstliche Intelligenz) einigen Bedingungen bzw. technischen Einschränkungen. Außerdem kommt es auch immer auf die Map an auf der man sie einsetzt. Eine schlechte Map kann auch die beste KI nicht zum guten Gegner machen. Es gibt einige Kniffe und Tricks zu beachten wenn man einen guten Computergegner haben will.

Nachfolgend erkläre ich euch wie man sich seine eigene KI erschaffen kann. Diese könnt ihr dann als euren Computergegner einsetzen. Auch als verbündeter Spieler an eurer Seite können sie funktionieren. Es gibt aber eine Reihe von Bedingungen, die sie erfüllen müssen damit alles gut klappt. Noch ist mir niemand begegnet, der sich auch heute noch mit der KI Programmierung von WarCraft 2 beschäftigt. Vermutlich weil sich keiner mehr die Mühe macht es selbst herauszufinden. Was ich bis heute an Erkenntnissen sammeln konnte findet ihr also auf dieser Seite. Es ist übrigens eine große Hilfe wenn ihr Englisch versteht. Das setze ich hier einfach mal voraus.

Wichtige Downloads und erforderliche Spieldaten

Zuerst bekommt ihr alles an Tools was nötig ist damit ihr eure eigene KI erstellen und mit ihr spielen könnt.

Außerdem benötigt ihr WarCraft 2 als MS-DOS Version und WarCraft 2 Battle.net für Windows. Beides muss auf die aktuellste Version gepatcht werden sobald ihr es installiert habt. Die MS-DOS Version benötigt ihr für den Mapeditor PUDDraft, welcher um Längen besser als das Original ist. Ich benutze nur PUDDraft und in diesem Tutorial wird er als Mapeditor eingesetzt.

Die MS-DOS Version von WarCraft 2 Tides of Darkness bekommt ihr z.B. online als Vollversion auf dieser Seite zu kaufen: www.old-games.com
Dort zahlt man für einen Tag einen kleinen Betrag via PayPal und kann sich Vollversionen alter Spiele downloaden. Auch WarCraft 2 aber ohne Erweiterung. Die "Beyond the Dark Portal" Erweiterung müsst ihr von anderer Stelle erhalten. Schaut mal auf eBay vorbei oder fragt Google. Originalspiel und Erweiterung müssen natürlich in derselben Sprache vorliegen.

Wie sieht die KI in WarCraft 2 überhaupt aus?

Um das Mysterium um die KI mal etwas zu lüften zeige ich euch erstmal wie so eine KI überhaupt aussieht und wie sie in etwa funktioniert. Ich habe zwar schon einige KI's programmiert aber auch ich bin keiner der Originalprogrammierer von Blizzard. Außerdem gibt's in der Hilfedatei des Programms WarDraft noch genauere Beschreibungen der einzelnen Befehle. Aber die wichtigsten Informationen gebe ich euch doch schon dazu.

Wer von euch schon mal eine Map mit Computergegner erstellt hat weiss ja, dass es 4 unterschiedliche Standard KI's gibt. Landangriff, Seeangriff, Luftangriff und Passiv. Nachfolgend zeige ich euch die Original KI's und daneben meine Version. Dazu gibts dann jeweils ein paar Sätze zur Erklärung.

Originale KI für Landangriff Meine KI für Landangriff
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                           
    build townhall               
    build lumbermill             
    build barracks               
    peasants     = 1             
    wait_peasants                
    peasants     = 9             
    footmen      = 3             
    size_land    = 3             
    wait_land                    
    size_land    = 1             
    attk_land                    
    sleep 500
    build blacksmith             
    footmen      = 4             
    archers      = 2             
    size_land    = 5             
    wait_land                    
    size_land    = 3             
    attk_land                    
    sleep 500
    upgrd up_footmen_B1          
    upgrd up_footmen_A1          
    upgrd up_arrow_1             
    upgrd up_footmen_B2          
    upgrd up_footmen_A2          
    upgrd up_arrow_2             
    build barracks               
    footmen      = 6             
    archers      = 3             
    size_land    = 6             
    wait_land                    
    size_land    = 4             
    attk_land                    
    sleep 500
    peasants     = 15            
    ballistas    = 1             
    size_land    = 7             
    wait_land                    
    size_land    = 5             
    attk_land                    
    sleep 500
    upgrd up_keep                
    wait_keep                    
    size_land    = 7             
    wait_land                    
    size_land    = 5             
    attk_land                    
    sleep 500
    build townhall               
    build stables                
    footmen      = 2             
    archers      = 4             
    knights      = 8             
    ballistas    = 2             
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    sleep 500
    build tower                  
    build tower                  
    build barracks               
    upgrd up_castle              
    peasants     = 19            
    wait_castle                  
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    sleep 500
    build tower                  
    build tower                  
    build church                 
    upgrd up_paladins            
    learn sp_paladin_A           
    learn sp_paladin_B           
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    sleep 500
    build tower                  
    build tower                  
    build magetower              
    learn sp_mage_D              
    learn sp_mage_E              
    mages        = 3             
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    sleep 500
    learn sp_mage_A              
    build tower                  
    build tower                  
    learn sp_mage_C              
    mages        = 6             
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    sleep 500
    build aviary                 
    gryphons     = 1             
    size_air     = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    attk_air                     
    sleep 500
    upgrd up_rangers             
    upgrd up_rangers_A           
    learn sp_mage_B              
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    attk_air                     
    sleep 500
    build townhall               
    build tower                  
    build tower                  
    build inventor               
    upgrd up_rangers_B           
    size_land    = 9             
    wait_land                    
    size_land    = 7             
    attk_land                    
    attk_air                     
    sleep 500
    build tower                  
    build tower                  
    upgrd up_rangers_C           
    upgrd up_ballistas_1         
    build tower                  
    build tower                  
    upgrd up_ballistas_2         
    build tower                  
    build tower                  
    peasants     = 25            
Loop:
    size_land    = 11            
    wait_land                    
    size_land    = 9             
    attk_land                    
    attk_air                     
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 5000    
    rt_zeppelins       = 5000    
    rt_gryphons        = 1000    
    rt_dragons         = 1000    
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 1       
    rt_deathknights    = 1       
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 100     
    rt_up_fortress     = 100     
    rt_castlepeasants  = 100     
    rt_fortresspeons   = 100     
    rate 34            = disabled
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                     
    build townhall               
    peasants     = 36            
    build barracks               
    footmen      = 4             
    ptys_land    = 1             
    size_land    = 4             
    wait_land                    
    size_land    = 1             
    attk_land                    
    sleep 360
    build barracks               
    build barracks               
    footmen      = 6             
    ptys_land    = 1             
    size_land    = 6             
    wait_land                    
    size_land    = 2             
    attk_land                    
    build lumbermill             
    build blacksmith             
    build tower                  
    build tower                  
    upgrd up_keep                
    upgrd up_footmen_A1          
    upgrd up_arrow_1             
    footmen      = 9             
    ptys_land    = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 3             
    attk_land                    
    wait_keep                    
    sleep 500
    build townhall               
    peasants     = 36            
    build barracks               
    footmen      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build tower                  
    build tower                  
    upgrd up_footmen_B1          
    upgrd up_arrow_2             
    build stables                
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    upgrd up_castle              
    build lumbermill             
    build blacksmith             
    wait_castle                  
    knights      = 10            
    archers      = 5             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build church                 
    upgrd up_rangers             
    upgrd up_paladins            
    build tower                  
    build tower                  
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build barracks               
    build barracks               
    upgrd up_rangers_A           
    upgrd up_rangers_B           
    upgrd up_rangers_C           
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    learn sp_paladin_A           
    learn sp_paladin_B           
    upgrd up_footmen_A2          
    upgrd up_footmen_B2          
    build townhall               
    build barracks               
    build tower                  
    peasants     = 36            
    upgrd up_ballistas_1         
    upgrd up_ballistas_2         
    sleep 500
Loop:
    knights      = 16            
    archers      = 9             
    ballistas    = 3             
    peasants     = 1             
    ptys_land    = 1             
    size_land    = 28            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build tower                  
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 5000    
    rt_zeppelins       = 5000    
    rt_gryphons        = 100     
    rt_dragons         = 100     
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 100     
    rt_deathknights    = 100     
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 1       
    rt_up_fortress     = 1       
    rt_castlepeasants  = 1       
    rt_fortresspeons   = 1       
    rate 34            = disabled
Wie ihr seht besteht die KI aus einer einfachen Abfolge von Befehlen. Genauere Informationen findet ihr in den PDF Dokumenten, die ihr weiter oben herunterladen könnt. Die Artikel aus der WarDraft Hilfedatei.

Meine Version ist von Beginn an aggressiver und bildet mehr Arbeiter aus denn die braucht der Computer wirklich massenweise damit es flüssig läuft. Außerdem baut meine KI keine Magier und Flugeinheiten. Wenn die KI erstmal Magier hat greift sie hauptsächlich nur noch damit an und die Soldaten, Bogenschützen und Ritter bleiben meistens in der Basis stehen. Im Original bildet die KI auch Flugeinheiten für den Kampf aus. Meine KI beschränkt sich rein auf den Landangriff ohne Magier. Hinzu kommt, dass ich die Aufwertungen der Waffen etc. mehr im Ablauf verteile und etwas später starten lasse damit der Computer schneller angreift. Zu viele Aufwertungen direkt nacheinander verlangsamen die KI unglaublich. Entweder ihr verteilt sie gut oder lasst sie am Ende durchführen vor dem Loop. Übrigens ist der Loop der Abschluss des Ablaufs der KI. Was dort steht wird immer wiederholt solange das Spiel läuft nachdem alle vorherigen Befehle erledigt wurden.

Grundlegende Informationen zur KI

Auf den ersten Blick erkennt man, dass meine KI weniger Zeilen benötigt. Das hat zwei Gründe. Erstens habe ich einige unnötige Befehlszeilen ausgelassen und zweitens ist meine KI etwas kompakter geschrieben.

Diese Programmabläufe stellen nur das grobe Muster dar anhand der sich die KI orientiert. Es sagt nur aus welche Gebäude und Einheiten der Computer bauen soll. Außerdem welche Upgrades durchgeführt und wann Pausen gemacht werden sollen. Die Reihenfolge wird auch angegeben. Von oben nach unten arbeitet er alle Aufgaben ab so gut es ihm seine Möglichkeiten im Spiel erlauben.

Daraus folgt was ihr ihm nicht befehlen könnt:
- Explizite Steuerung seiner Einheiten wie z.B. welche Arbeiter er für welche Aufgaben er einsetzt.
- An welcher Stelle er seine Gebäude platziert. Das macht die KI automatisch nach einem Muster und je nachdem wie viel Platz sie auf der Map hat.
- Wie viel Gold, Holz und Öl er genau sammeln soll.
- Außerdem baut er keine Explodier-Gnome/Goblins aufgrund eines Bugs. Er kann Gebirge und Wald also nicht sprengen um zu euch oder zu einer Rohstoffquelle zu kommen.
- Bauernhöfe erstellt er selbst nach Bedarf. Daher stehen sie auch nicht im Programm, wie ihr oben sehen könnt.
- Wall (Mauern) baut der Computer ebenfalls nicht. Er hat auch keine Ahnung, dass man sie zerstören kann. Seine Einheiten bleiben davor stehen. Fernkämpfer haben da zwar Vorteile aber auch die könnt ihr leicht aufhalten. Wenn ihr also einen echten Kampf sucht baut keinen Wall.

Folgende Dinge solltet ihr auch über die KI wissen:
- Der Computergegner wird niemals bewusst Wald in eine bestimmte Richtung abholzen weil er so an eine Goldmine oder zu euch kommt. Er holzt in nächster Nähe ab. Auch wenn ihm das Platz für seine Gebäude bringen würde macht er es nicht. Angenommen er hat genug Holz für den Bau aber nicht ausreichend Platz weil Bäume im Weg sind dann wird er diese nicht für den Bau abholzen weil er auf dem Konto schon genug Holz hat.
- Er steuert seine Einheiten nach Luftlinie. Selbst wenn es einen Weg zu euch gibt werden seine Einheiten ihn nicht unbedingt finden. Ich habe festgestellt, dass sie bis zu einer bestimmten Toleranzgrenze auch kleine Umwege in Kauf nehmen. Das müsst ihr selbst herausfinden wenn ihr eine Map erstellt. Das gilt auch für die Transporter auf Wasser mit denen er Landeinheiten transportiert. Er sucht den kürzesten Luftweg zur Küste aber das muss nicht zwingend bedeuten, dass er so auch zu euch gelangt. Achtet auf gut darauf bei der Erstellung eurer Map.
- In einer Seeschlacht baut der Computer seine Hafengebäude nur zu einer Küstenseite. Es ist ein Bug im Spiel. Er baut seine Hafengebäude nur an südlichen Küsten. Dort wo das Wasser südlich vom Land gelegen ist. Weiter unten seht ihr dazu Screenshots.
- Er sammelt seine Kämpfer am Haupthaus solange bis seine Angriffstruppe bereit und komplett ist.
- Wenn er euer Verbündeter ist wird er seine Kämpfer erst zu eurem Haupthaus schicken und von dort aus zum Feind. Er muss also zu euch gelangen können denn sonst nützt er euch nichts.
- In einer Map wo ihr mehrere verbündete Computerspieler habt wird es mit hoher Wahrscheinlichkeit zu Kämpfen zwischen euren verbündeten Computerspielern kommen. Sie sind zwar dem Spieler freundlich gesinnt aber untereinander feindlich. Jede verbündete KI kämpft für dich und gegen alle anderen.
- Ein Computer kann sofern seine KI es ihm befiehlt auch mehrere Haupthäuser bauen. Er sucht sich dabei immer die nächst gelegene Goldmine aus aber die muss für seine Arbeiter auch erstmal erreichbar sein. Seine Gebäude baut er dann teilweise an beiden Standpunkten auf und je nach Kampfgeschehen baut er verlorene Gebäude auch komplett an der neuen Basis wieder auf. Aber an neuen Goldminen muss auch beachtet werden, dass er dort gute Startbedingungen vorfindet. Dazu mehr weiter unten im Tutorial.

Ein paar Grundregeln zur Startposition und zu ihrem Verhalten solltet ihr auch erhalten. Nachfolgend erkläre ich euch ein paar wichtige Fakten zur Startposition des Computergegners. Diese Regeln gelten für alle KI's. Egal ob Landangriff oder Seeangriff.

Startposition des Computergegners auf der Map

Bevor ihr mit der KI beginnt muss zunächst die Map angepasst werden. Sicher denkt ihr es ist gut wenn der Computer möglichst viel Platz vor der Goldmine hat. Das ist zum Teil ein Irrtum. Auf den nachfolgenden Screenshots zeige ich euch wie eine schlechte Startposition aussieht und wie eine gute gestaltet sein muss.

Zuerst die schlechte Startposition bevor die Basis der KI aufgebaut ist. Sein Arbeiter steht nah bei der Goldmine und sein Haupthaus kann er auch ganz in der Nähe der Goldmine aufbauen. Es ist viel Platz um alle Gebäude zu errichten.

So. Nun ist seine Basis aufgebaut und ihr seht was passiert. Der Computer hat immer die Angewohnheit die Bauernhöfe rund um sein Haupthaus zu bauen. Das kann ihn behindern. Hinzu kommt, dass er seine Kämpfer am Haupthaus parkt bis der nächste Angriff beginnt und er seine Truppen komplett hat. Eine KI braucht immer viele Arbeiter und die müssen zwischen Goldmine und Haupthaus frei laufen können. Das alles klappt aber nicht wenn er sich selbst zustellt und seine Bauernhöfe alles blockieren. Wenn das passiert stoppt die KI im Ablauf und kann nicht weitermachen. Ihr müsstet ihn angreifen und einige Bauernhöfe und Einheiten zerstören damit die KI im Ablauf weitermacht. Diese Methode ist aber sehr schlecht.
Jetzt zeige ich euch wie man es richtig macht. Der Computer baut immer nach einem internen Muster, welches ihr nicht sehen könnt. Er platziert seine Gebäude immer mit 2 Plätzen Abstand voneinander mit Ausnahme der Bauernhöfe. Dieses unsichtbare Muster wendet er auf jeder Map an. Ihr könnt das nicht verhindern aber die Umgebung der Map so anpassen, dass er an gewissen Stellen nicht bauen kann um sein Muster umzusetzen. Wenn z.B. um die Goldmine mehr rauer Boden ist kann er nicht darauf bauen. Ihr müsst den Boden so platzieren, dass er sein Haupthaus bauen kann aber nichts unmittelbar darum.  Außerdem ist es optimal wenn die Goldmine östlich vom Haupthaus liegt, da so die Arbeiter freien Weg haben.
Nachfolgend seht ihr wie seine Basis in dieser Version aussieht. Da er seine Bauernhöfe nicht direkt um das Haupthaus bauen kann versucht er es so nah wie möglich anhand seines unsichtbaren Musters. Die Folge ist, dass ihn zumindest seine Gebäude nicht behindern. Natürlich wird er weiterhin seine Kampfeinheiten beim Haupthaus parken aber nun ist ja genug Platz damit auch die Arbeiter durchkommen. Die KI kann in ihrem Ablauf ohne Probleme weitermachen sofern auch sonst genug Platz für seine Gebäude vorhanden ist und er z.B. genug Gold, Öl und Holz abbauen kann. Um den unmittelbaren Platz der Goldmine muss also zwar genug Platz für sein Haupthaus sein aber auch rauer Boden damit er sich nicht zubauen kann.
Egal ob die KI als euer Gegner oder Verbündeter agieren soll; sie muss zu Beginn gute Startbedingungen haben. Achtet darauf, dass Gegner und Verbündete möglichst ohne große Umwege zu euch laufen können. Das klappt nur durch Tests eurer Map.
Jetzt kommen noch Tipps für Maps mit Seeschlachten. Ich habe eine Map speziell dafür entwickelt mit optimalen Startbedingungen für den Computer. Auch dort liegt die Goldmine östlich am Rand der Map vom Platz für das Haupthaus des Computers. Er hat keine große Möglichkeit es mit Gebäuden nach seinem Muster zu verbauen. Wenn es in eurer KI programmiert ist wird er auch ein zweites und drittes Haupthaus bauen sofern er andere Goldminen in Reichweite hat, die auch genug Platz bieten um ein Haupthaus nach seinem Muster zu platzieren. Seine Arbeiter müssen natürlich auch dort hinlaufen können.
Außerdem müsst ihr beachten, dass der Computer seine Hafengebäude nur an südlichen Küsten baut. Niemals an nördlichen Küsten. Das ist ein Bug im Spiel denke ich. Daher müsst ihr eure Map auch so bauen. Außerdem sollte die Ölquelle viel Abstand zur Küste haben, da seine Schiffe sich sonst selbst im Weg sind.
Hier noch ein Bild wie man es NICHT in der Map gestalten sollte. Daran denken, dass der Computer niemals an nördlichen Küsten bauen wird.
Seht mal wie es im Spiel dann aussieht. Der Computer hat die Angewohnheit seine Landeinheiten oben links am Haupthaus zu sammeln. Der rechte Teil bleibt frei. Daher ist es besser wenn die Goldmine östlich liegt. Bei den Hafengebäuden sollte viel Platz zwischen Küste und Ölquelle sein. Seine Kampfschiffe parkt er gerne direkt vor dem Hafen oder lässt sie zwischen Ölquelle und Hafen patroullieren was natürlich die Öltanker behindert. Daher sollte viel Platz vorhanden sein und in eurer KI ist es sinnvoll mehrere Häfen bauen zu lassen.
   
Ihr seht es gibt einiges zu beachten damit eine KI auch gut arbeiten kann. Wenn die Map nicht gut vorbereitet ist dann kann die KI nicht ordentlich arbeiten.

Weitere KI Abläufe

Nachfolgend liste ich die übrigen KI Abläufe auf. Links stehen jeweils die Originale und rechts meine Version.

Originale KI für Seeangriff Meine KI für Seeangriff
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                               
    build townhall               
    build lumbermill             
    build barracks               
    peasants     = 1             
    wait_peasants                
    peasants     = 9             
    footmen      = 3             
    size_land    = 3             
    wait_land                    
    build shipyard               
    upgrd up_keep                
    build refinery               
    build inventor               
    peasants     = 15            
    tankers      = 1             
    wait_keep                    
    tankers      = 3             
    submarines   = 3             
    size_water   = 3             
    wait_water                   
    attk_water                   
    sleep 500
    build foundry                
    upgrd up_shiparmor_1         
    upgrd up_shiparmor_2         
    submarines   = 4             
    size_water   = 4             
    wait_water                   
    attk_water                   
    sleep 500
    build shipyard               
    build blacksmith             
    submarines   = 5             
    size_water   = 5             
    wait_water                   
    flyers       = 1             
    attk_water                   
    sleep 500
    upgrd up_ballistas_1         
    build stables                
    flyers       = 3             
    submarines   = 0             
    battleships  = 2             
    destroyers   = 2             
    ballistas    = 1             
    size_water   = 4             
    sleep 3000
    wait_water                   
    attk_water                   
    sleep 500
    battleships  = 3             
    destroyers   = 3             
    ballistas    = 2             
    size_water   = 6             
    wait_water                   
    transports   = 1             
    size_water   = 5             
    attk_water                   
    sleep 500
    upgrd up_ballistas_2         
    upgrd up_shipcannons_1       
    battleships  = 4             
    destroyers   = 3             
    ballistas    = 3             
    knights      = 1             
    size_water   = 7             
    wait_water                   
    size_water   = 6             
    attk_water                   
    sleep 500
    upgrd up_shipcannons_2       
    build townhall               
    tankers      = 4             
    battleships  = 5             
    destroyers   = 4             
    knights      = 2             
    size_water   = 8             
    wait_water                   
    size_water   = 7             
    attk_water                   
    sleep 500
    build shipyard               
    upgrd up_footmen_B1          
    upgrd up_footmen_B2          
    upgrd up_footmen_A1          
    upgrd up_footmen_A2          
    tankers      = 5             
    battleships  = 6             
    destroyers   = 5             
    knights      = 3             
    size_water   = 10            
    wait_water                   
    size_water   = 9             
    attk_water                   
    sleep 500
    battleships  = 7             
    destroyers   = 6             
    ballistas    = 4             
    knights      = 4             
    size_water   = 12            
    wait_water                   
    size_water   = 11            
    attk_water                   
    sleep 500
    transports   = 2             
    size_land    = 6             
Loop:
    size_water   = 4             
    wait_water                   
    wait_land                    
    size_water   = 13            
    attk_water                   
    attk_land                    
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 500     
    rt_zeppelins       = 500     
    rt_gryphons        = 1000    
    rt_dragons         = 1000    
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 1       
    rt_deathknights    = 1       
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 100     
    rt_up_fortress     = 100     
    rt_castlepeasants  = 100     
    rt_fortresspeons   = 100     
    rate 34            = disabled
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                     
    build townhall               
    peasants     = 36            
    build lumbermill             
    build barracks               
    build shipyard               
    tankers      = 6             
    sleep 360
    build foundry                
    build refinery               
    transports   = 4             
    upgrd up_keep                
    build barracks               
    build barracks               
    footmen      = 6             
    ptys_land    = 1             
    size_land    = 6             
    wait_land                    
    size_land    = 2             
    attk_land                    
    build blacksmith             
    build tower                  
    build tower                  
    upgrd up_footmen_A1          
    upgrd up_arrow_1             
    footmen      = 9             
    ptys_land    = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 3             
    attk_land                    
    wait_keep                    
    build shipyard               
    build shipyard               
    tankers      = 6             
    destroyers   = 3             
    battleships  = 3             
    sleep 500
    build townhall               
    peasants     = 36            
    build barracks               
    footmen      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build tower                  
    build tower                  
    upgrd up_footmen_B1          
    upgrd up_arrow_2             
    build stables                
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build inventor               
    upgrd up_castle              
    submarines   = 3             
    tankers      = 3             
    build lumbermill             
    build blacksmith             
    wait_castle                  
    knights      = 10            
    archers      = 5             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build church                 
    upgrd up_rangers             
    upgrd up_paladins            
    build magetower              
    learn sp_mage_A              
    learn sp_mage_B              
    build tower                  
    build tower                  
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build magetower              
    learn sp_mage_C              
    build magetower              
    build barracks               
    build barracks               
    upgrd up_rangers_A           
    upgrd up_rangers_B           
    upgrd up_rangers_C           
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    learn sp_mage_D              
    learn sp_mage_E              
    learn sp_paladin_A           
    learn sp_paladin_B           
    upgrd up_footmen_A2          
    upgrd up_footmen_B2          
    build aviary                 
    build aviary                 
    build townhall               
    mages        = 3             
    peasants     = 36            
    upgrd up_ballistas_1         
    upgrd up_ballistas_2         
    build shipyard               
    sleep 500
Loop:
    transports   = 3             
    knights      = 16            
    archers      = 3             
    ballistas    = 3             
    peasants     = 1             
    mages        = 6             
    gryphons     = 3             
    destroyers   = 2             
    battleships  = 2             
    submarines   = 2             
    tankers      = 1             
    ptys_land    = 1             
    size_land    = 24            
    wait_land                    
    size_land    = 6             
    attk_land                    
    ptys_air     = 1             
    size_air     = 3             
    wait_air                     
    attk_air                     
    build tower                  
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 5000    
    rt_zeppelins       = 5000    
    rt_gryphons        = 100     
    rt_dragons         = 100     
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 100     
    rt_deathknights    = 100     
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 1       
    rt_up_fortress     = 1       
    rt_castlepeasants  = 1       
    rt_fortresspeons   = 1       
    rate 34            = disabled
So, hier gibt es einige große Unterschiede zwischen der originalen Seenagriff KI und meiner Version. Ich habe versucht eine KI zu erschaffen, die zu Land, Luft und See angreift. Auch hier lasse ich die KI von Beginn an massenweise Arbeiter erstellen. Die KI bildet diese Arbeiter im Laufe des Spiels aus. Also während sie die nächsten Befehle erledigt. Außerdem habe ich meine KI so programmiert, dass sie möglichst schnell Transporter baut und einige Soldaten zum Gegner bringt. Alles weitere könnt ihr ja selbst gut erkennen. Meine KI hier ist lange nicht perfekt aber schon ganz gut wenn sie ordentliche Startbedingungen in der Map bekommt. Wenn es mal jemand schafft eine KI zu schreiben, die effektiv, schnell und konsequent auf allen Wegen angreift dann lasst es mich wissen.
Originale KI für Luftangriff Meine KI für Luftangriff
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                              
    build townhall               
    build lumbermill             
    build barracks               
    peasants     = 1             
    wait_peasants                
    peasants     = 9             
    footmen      = 2             
    size_land    = 2             
    wait_land                    
    build blacksmith             
    upgrd up_keep                
    peasants     = 15            
    archers      = 3             
    wait_keep                    
    build stables                
    build tower                  
    build tower                  
    upgrd up_castle              
    wait_castle                  
    build aviary                 
    gryphons     = 1             
    ptys_air     = 1             
    size_air     = 1             
    wait_air                     
    ptys_air     = 1             
    size_air     = 1             
    attk_air                     
    sleep 500
    build townhall               
    build tower                  
    build aviary                 
    gryphons     = 2             
    ptys_air     = 1             
    size_air     = 2             
    wait_air                     
    build townhall               
    build tower                  
    build aviary                 
    peasants     = 20            
    ptys_air     = 1             
    size_air     = 2             
    attk_air                     
    sleep 500
    build tower                  
    build tower                  
    gryphons     = 3             
    ptys_air     = 1             
    size_air     = 3             
    wait_air                     
    ptys_air     = 2             
    size_air     = 1             
    attk_air                     
    sleep 500
    build tower                  
    build tower                  
    gryphons     = 4             
    ptys_air     = 1             
    size_air     = 4             
    wait_air                     
    ptys_air     = 1             
    size_air     = 2             
    attk_air                     
    sleep 500
    build tower                  
    build tower                  
    gryphons     = 5             
    ptys_air     = 1             
    size_air     = 5             
    wait_air                     
    ptys_air     = 2             
    size_air     = 1             
    attk_air                     
    sleep 500
    build tower                  
    build tower                  
    gryphons     = 6             
    ptys_air     = 1             
    size_air     = 6             
    wait_air                     
    ptys_air     = 2             
    size_air     = 2             
    attk_air                     
    sleep 500
    build tower                  
    build tower                  
    gryphons     = 7             
    ptys_air     = 1             
    size_air     = 7             
    wait_air                     
    ptys_air     = 2             
    size_air     = 2             
    attk_air                     
    sleep 500
    build tower                  
    build all_items
    gryphons     = 8             
    ptys_air     = 1             
    size_air     = 8             
    wait_air                     
    ptys_air     = 3             
    size_air     = 2             
    attk_air                     
    sleep 500
    gryphons     = 9             
    ptys_air     = 1             
    size_air     = 9             
    wait_air                     
    ptys_air     = 4             
    size_air     = 2             
    attk_air                     
    sleep 500
Loop:
    gryphons     = 11            
    ptys_air     = 1             
    size_air     = 11            
    wait_air                     
    ptys_air     = 5             
    size_air     = 2             
    attk_air                     
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 5000    
    rt_zeppelins       = 5000    
    rt_gryphons        = 1       
    rt_dragons         = 1       
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 1       
    rt_deathknights    = 1       
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 100     
    rt_up_fortress     = 100     
    rt_castlepeasants  = 100     
    rt_fortresspeons   = 100     
    rate 34            = disabled
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                     
    build townhall               
    peasants     = 36            
    build barracks               
    footmen      = 4             
    ptys_land    = 1             
    size_land    = 4             
    wait_land                    
    size_land    = 1             
    attk_land                    
    sleep 360
    build barracks               
    build barracks               
    footmen      = 6             
    ptys_land    = 1             
    size_land    = 6             
    wait_land                    
    size_land    = 2             
    attk_land                    
    build lumbermill             
    build blacksmith             
    build tower                  
    build tower                  
    upgrd up_keep                
    upgrd up_footmen_A1          
    upgrd up_arrow_1             
    footmen      = 9             
    ptys_land    = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 3             
    attk_land                    
    wait_keep                    
    sleep 500
    build townhall               
    peasants     = 36            
    build barracks               
    footmen      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build tower                  
    build tower                  
    upgrd up_footmen_B1          
    upgrd up_arrow_2             
    build stables                
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build inventor               
    upgrd up_castle              
    build lumbermill             
    build blacksmith             
    wait_castle                  
    knights      = 10            
    archers      = 5             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build church                 
    upgrd up_rangers             
    upgrd up_paladins            
    build tower                  
    build tower                  
    build aviary                 
    build aviary                 
    build aviary                 
    ptys_air     = 1             
    size_air     = 3             
    wait_air                     
    attk_air                     
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build barracks               
    build barracks               
    upgrd up_rangers_A           
    upgrd up_rangers_B           
    upgrd up_rangers_C           
    build aviary                 
    build aviary                 
    build aviary                 
    ptys_air     = 1             
    size_air     = 6             
    wait_air                     
    attk_air                     
    sleep 500
    knights      = 9             
    archers      = 3             
    ptys_land    = 1             
    size_land    = 12            
    wait_land                    
    size_land    = 3             
    attk_land                    
    learn sp_paladin_A           
    learn sp_paladin_B           
    upgrd up_footmen_A2          
    upgrd up_footmen_B2          
    build aviary                 
    build aviary                 
    build aviary                 
    ptys_air     = 1             
    size_air     = 9             
    wait_air                     
    attk_air                     
    build townhall               
    peasants     = 36            
    upgrd up_ballistas_1         
    upgrd up_ballistas_2         
    sleep 500
Loop:
    knights      = 9             
    archers      = 12            
    ballistas    = 1             
    peasants     = 1             
    gryphons     = 3             
    ptys_land    = 1             
    size_land    = 24            
    wait_land                    
    size_land    = 6             
    attk_land                    
    ptys_air     = 1             
    size_air     = 9             
    wait_air                     
    attk_air                     
    build tower                  
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 5000    
    rt_zeppelins       = 5000    
    rt_gryphons        = 100     
    rt_dragons         = 100     
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 100     
    rt_deathknights    = 100     
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 1       
    rt_up_fortress     = 1       
    rt_castlepeasants  = 1       
    rt_fortresspeons   = 1       
    rate 34            = disabled
Bei dem Luftangriff in meiner KI setze ich auch Landeinheiten ein, da Greifen / Drachen bekanntlich teuer sind und lange brauchen um ausgebildet zu werden. Außerdem ist der Computer so ganz ohne Landeinheiten doch im Nachteil.
Originale KI für Passiv Meine KI für Passiv
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_off                    
    aggr_low                               
    peasants     = 2             
    tankers      = 1             
Loop:
    sleep 65535
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = disabled
    rt_Obarracksfolk   = disabled
    rt_paladins        = disabled
    rt_ogremages       = disabled
    rt_Hguardtower     = disabled
    rt_Oguardtower     = disabled
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = disabled
    rt_zeppelins       = disabled
    rt_gryphons        = disabled
    rt_dragons         = disabled
    rt_Hships          = disabled
    rt_Oships          = disabled
    rt_peasants        = 100     
    rt_peons           = 100     
    rt_up_archers      = disabled
    rt_up_axethrowers  = disabled
    rt_Hup_shipcannons = disabled
    rt_Oup_shipcannons = disabled
    rt_mages           = disabled
    rt_deathknights    = disabled
    rt_Hup_weapons     = disabled
    rt_Oup_weapons     = disabled
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = disabled
    rt_up_fortress     = disabled
    rt_castlepeasants  = disabled
    rt_fortresspeons   = disabled
    rate 34            = disabled
#include aidefs.inc

Program:
    build nothing                
    reset_land                   
    reset_water                  
    reset_air                    
    strat_on                     
    aggr_low                     
    build townhall               
    peasants     = 36            
    build barracks               
    footmen      = 4             
    ptys_land    = 1             
    size_land    = 4             
    wait_land                    
    size_land    = 1             
    attk_land                    
    sleep 360
    footmen      = 9             
    ptys_land    = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 3             
    attk_land                    
    build lumbermill             
    build blacksmith             
    build tower                  
    build tower                  
    build barracks               
    build barracks               
    footmen      = 9             
    ptys_land    = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 3             
    attk_land                    
    upgrd up_keep                
    build lumbermill             
    build blacksmith             
    wait_keep                    
    build stables                
    build barracks               
    build tower                  
    build tower                  
    sleep 500
    footmen      = 9             
    ptys_land    = 1             
    size_land    = 9             
    wait_land                    
    size_land    = 3             
    attk_land                    
    upgrd up_footmen_A1          
    upgrd up_arrow_1             
    upgrd up_footmen_B1          
    upgrd up_arrow_2             
    upgrd up_footmen_A2          
    upgrd up_footmen_B2          
    upgrd up_ballistas_1         
    upgrd up_ballistas_2         
    build barracks               
    build tower                  
    build tower                  
    sleep 500
    peasants     = 36            
Loop:
    knights      = 12            
    archers      = 8             
    ballistas    = 2             
    peasants     = 1             
    ptys_land    = 1             
    size_land    = 24            
    wait_land                    
    size_land    = 3             
    attk_land                    
    build tower                  
    sleep 500
    goto Loop

Rates:
    rate 0             = disabled
    rate 1             = disabled
    rt_Hbarracksfolk   = 1       
    rt_Obarracksfolk   = 1       
    rt_paladins        = 1       
    rt_ogremages       = 1       
    rt_Hguardtower     = 1       
    rt_Oguardtower     = 1       
    rate 8             = disabled
    rate 9             = disabled
    rt_flyers          = 5000    
    rt_zeppelins       = 5000    
    rt_gryphons        = 100     
    rt_dragons         = 100     
    rt_Hships          = 1       
    rt_Oships          = 1       
    rt_peasants        = 1       
    rt_peons           = 1       
    rt_up_archers      = 1       
    rt_up_axethrowers  = 1       
    rt_Hup_shipcannons = 1       
    rt_Oup_shipcannons = 1       
    rt_mages           = 100     
    rt_deathknights    = 100     
    rt_Hup_weapons     = 1       
    rt_Oup_weapons     = 1       
    rate 26            = disabled
    rate 27            = disabled
    rate 28            = disabled
    rate 29            = disabled
    rt_up_castle       = 1       
    rt_up_fortress     = 1       
    rt_castlepeasants  = 1       
    rt_fortresspeons   = 1       
    rate 34            = disabled
Die originale passive KI macht wortwörtlich nichts. Sie können auf der Map im Editor eine ganze Basis aufbauen und ihr Kampfeinheiten geben und Arbeiter (die als aktiv markiert werden müssen) damit sie zumindest Rohstoffe sammelt. Sie wird ihre Gebäude reparieren wenn sie Schaden nehmen aber sonst nichts. Meine passive KI ist eine abgespeckte Version des Landangriffs. Sehr kurz gehalten und darauf fixiert schnell anzugreifen. Probiert mal gegen 2-3 Computergegner mit dieser KI zu bestehen. Das ist ein gutes Überlebenstraining im Spiel :-)

Praktische Installation und Nutzung der eigenen KI in der WarCraft 2 Battle.net Edition

Jetzt kommen wir zur praktischen Installation. Wie bringe ich meine KI also konkret in das Spiel um sie als Gegner oder Verbündeter einzusetzen? Ich gehe davon aus ihr habt alle Tools und Spieldaten wie oben erklärt vorliegen. Dann können wir beginnen.

Schritt 1 - Backup und Ordnung schaffen

Da wir an den Spieldaten arbeiten werden macht eine Kopie des WarCraft 2 Ordners bevor ihr etwas verändert. Dann legt euch einen Unterordner dort an in dem ihr die ganzen Tools ordentlich ablegt. 

Schritt 2 - WinMPQ und rez\ai.bin

Zuerst brauchen wir jetzt die Datei in der alle KI Programme gespeichert sind. Startet jetzt dazu WinMPQ und öffnet die Optionen. Dort tragt ihr bei "File Lists" die "war2_data.txt" ein wie im Screenshot.





Dann öffnet ihr die Datei "War2Dat.mpq" aus eurem WarCraft 2 Battle.net Ordner. Das sieht dann so aus wenn ihr sie geöffnet habt:



Dann scrollt ihr runter bis zu dem Eintrag "rez\ai.bin". Diesen Eintrag wählt ihr an und klickt auf "Extract" um die Datei aus dem MPQ Archiv abzuspeichern.

Schritt 3 - WarDraft und der AI Editor

Jetzt müssen wir die ai.bin mit dem AI Editor aus WarDraft bearbeiten. Start dazu WarDraft und öffnet den AI Editor.


Jetzt klickt ihr unten auf "Load" und wählt die ai.bin Datei aus.



Das sieht dann so aus. Euch wird standardmässig zuerst die Landangriff KI angezeigt.



In dem Feld "Select AI" könnt ihr auswählen welche KI ihr betrachten wollt. Ihr werdet feststellen, dass dort auch ganz viele andere KI's abgelegt sind. Für den Einzelspielermodus muss es ja auch für jede Mission welche geben, die steuern was der Gegner dort machen soll.

Wählt z.B. die "Land Attack" KI aus und klickt auf den Knopf "Create source code from selected AI". Daraufhin wird euch die KI als eine Textdatei im "Compiler" angezeigt, die ihr bearbeiten und abspeichern könnt. Außerdem könnt ihr in dem Fenster eine Textdatei laden in der sich schon eine fertige KI befindet.

Angenommen ihr habt nun eine eigene KI fertig und wollt sie benutzen dann müsst ihr sie dort laden. Wird sie dann angezeigt klickt ihr auf den Knopf rechts mit dem Ausrufezeichen. Damit übertragt ihr die KI bzw. lasst sie kompilieren.

Daraufhin sieht das Fenster wieder wie vorher aus im Bereich "View AIs" und im Feld "Select AI" steht als Eintrag "Custom (compiled) AI". Dann wählt ihr im Feld "Select AI" wieder den Eintrag "Land Attack" und klickt rechts auf den Knopf "Replace selected AI with compiled AI". Damit wird jetzt eure eigene KI genommen und anstelle der originalen KI platziert. Ihr ersetzt also die vorher gespeicherte KI durch eure. Man kann nämlich keine neuen Einträge hinzuschreiben. Also muss man immer eine andere KI durch die eigene ersetzen. Natürlich könnt ihr das auch für die Seeangriff und Luftangriff oder jede andere machen falls ihr mehrere unterschiedliche eurer eigenen KI's im Spiel nutzen wollt. Wenn ihr z.B. auf einer Map zwei Gegner habt wobei der eine nach eurer Landangriff KI und der andere nach eurer Luftangriff KI handeln soll. In dem Fall müsst ihr natürlich beide KI's in die "ai.bin" Datei eintragen.

Also nochmal zur Sicherheit. In dem Tab "Compiler" könnt ihr die KI Programme selbst bearbeiten, speichern, laden und übertragen lassen damit sie als "Custom (compiled) AI" angezeigt wird. Es geht da also um einfache Textdateien in denen die ganzen Befehle stehen. Wenn ich eigene KI's schreibe dann benutze ich den Texteditor Notepad++ und lade diese Textdatei dann mit dem "Compiler" hier in das Programm. Ihr könnt zuerst eine originale KI als Source Code anzeigen lassen durch die Funktion "Create source code from selected AI" oder eine eigene KI aus einer Textdatei laden und diese nehmen um den Eintrag "Land Attack" zu ersetzen. Dann könnt ihr weitermachen und eine zweite Textdatei laden, sie übertragen (kompilieren) damit sie dann als "Custom (compiled) AI" da steht und mit ihr z.B. den Eintrag "Sea Attack" ersetzen. Und immer so weiter. Später im Mapeditor PUDDraft wählt ihr bei Spielereinstellungen eben diese KI aus für den Computer. Im Grunde könntet ihr auch eine zweite Landangriff KI schreiben und sie anstelle der Seeangriff KI platzieren. So könntet ihr im Spiel direkt den Unterschied sehen wenn ihr mit dem Cheat die ganze Map anzeigen lasst. Ich mache das auch ab und an. So kann man gut testen und sehen welcher Ablauf der bessere ist. Nur durch viele Tests kann eine KI gut werden. Nach dem Prinzip "Try and error".

Wenn ihr eure KI nun entsprechend anstelle der originalen KI platziert habt klickt ihr auf den Knopf "Save" um die "ai.bin" Datei abzuspeichern.

Schritt 4 - "ai.bin" wieder importieren

Jetzt haben wir die Quelldatei "ai.bin" fertig bearbeitet aber sie muss wieder importiert werden in die Spieldaten von WarCraft 2. Dazu beenden wir WarDraft und starten wieder WinMPQ.

Öffnet jetzt mit WinMPQ wieder die Datei "War2Dat.mpq" und scrollt runter bis zu "rez\ai.bin". Löscht diesen Eintrag jetzt via Rechtsklick und dann auf "Delete".

Als nächstes importieren wir unsere neue "ai.bin". Klickt dazu auf den Knopf "Add" und wählt eure neue Quelldatei aus.



Jetzt öffnet sich ein neues Fenster in WinMPQ und da müsst ihr wie im Screenshot zu sehen folgendes eintragen: rez\
Klickt dann OK und ihr habt die neue Quelldatei erfolgreich importiert.



Nun beendet ihr WinMPQ einfach. Extra abspeichern ist nicht notwendig.

Schritt 5 - Map mit PUDDraft für KI vorbereiten

Jetzt starten wir den Mapeditor PUDDraft. Wenn ihr PUDDraft bei euch zum ersten Mal startet wird er fragen wo die "War2.exe" liegt. Dazu müsst ihr in den Ordner wo eure MS-DOS Version von WarCraft 2 gespeichert ist gehen und dort diese Datei wählen. Dann öffnet sich der Editor.

Falls ihr zwei kleine Fehlermeldungen bekommt könnt ihr die einfach schliessen. Die haben nichts für uns zu bedeuten.

Klickt oben auf das Menü "File" und öffnet die Map "No-Hide-Times_1v1.pud". Das ist eine Map für Land- und Luftangriffe im 1 gegen 1 Modus. Also nur ihr und der Computergegner. Weiter oben habt ihr ja schon Ausschnitte von der Map gesehen. Dies ist eine fertige Map von mir und ich will euch nur mal zeigen wie gute Startbedingungen aussehen. Außerdem könnt ihr sie für Tests eurer eigenen KI's benutzen.

Geht mal oben auf das Menü "Player" und dann auf "Player Properties". Dann seht ihr eine Liste mit allen Spielern. Ihr könnt sehen welche Rasse jeder hat. Außerdem seht ihr welcher Spieler als Computergegner markiert ist und dahinter welche KI er verwenden soll. Wenn ihr vorhin also eure Landangriff KI importiert habt und hier im Editor auch der Eintrag steht wohin ihr die KI gespeichert habt dann wird sie im Spiel vom Computer verwendet. Also in WarDraft (AI Editor) habt ihr eure KI kompiliert und die "Land Attack" KI durch eure ersetzt. Das bedeutet wenn ihr jetzt in PUDDraft für den Computer Landangriff wählt dann wird eure KI benutzt. Hier seht ihr wie Spieler 6 (schwarz) als Computergegner mit der KI Landangriff eingestellt ist. Alle anderen sind "Human"; also normale Spieler sofern die Starteinheiten (1x Arbeiter und Startmarkierung) platziert sind.



Falls ihr einen verbündeten Computerspieler haben wollt müsst ihr den betreffenden Spieler nicht auf "Computer" sondern auf "Rescue(Active)" stellen. Denkt daran, dass dann natürlich noch ein normaler Computergegner hinzukommen muss. Hier habe ich den Computergegner nun zum Verbündeten gemacht.



Damit ihr einen verbündeten Computerspieler habt und einen Computergegner müsste das dann so aussehen. Da ist Nr. 6 euer verbündeter Computerspieler und Nr. 7 der Computergegner. Denkt daran, dass euer Verbündeter seine Kampfeinheiten immer erst zu eurem Haupthaus schickt und dann erst zum Gegner!



Dann schauen wir nochmal kurz ob alle zum Start genug Rohstoffe haben über das Menü "Player" und "Starting Conditions". Natürlich muss jeder mindestens so viel Rohstoffe haben, dass er sein Haupthaus bauen kann. Auf einer reinen Landkarte ohne Wasser muss jeder auch Öl haben denn sonst kann man einige Aufwertungen nicht durchführen und das würde die KI stoppen.



Klickt jetzt mal oben in der Symbolleiste auf die Lupe und geht zur Startposition von Spieler Nr. 6. Klickt den Arbeiter an. Dann seht ihr, dass er auf "Active" steht. Das ist wichtig! Wenn das nicht so ist dann macht der Computer mit dieser Einheit nämlich gar nichts. Also achtet immer darauf, dass die Einheiten des Computers aktiv sind.


 

Schritt 6 - WarCraft 2 Battle.net Edition starten

Jetzt starten wir das Spiel um zu sehen wie die KI arbeitet. Wir wählen "Spiel gegen Computer".



Dann wählen wir "eigenes Szenario".



Jetzt müssen wir die Karte auswählen und stellen alles auf "Karten-Vorgabe". Dann beginnen wir das Spiel.

Nach wenigen Minuten können wir im Spiel sehen wie der Computergegner beginnt seine Basis aufzubauen und dank der guten Startbedingungen baut er seine Bauernhöfe nicht direkt am Haupthaus.

Anmerkung für Mehrspielermodus

Ihr könnt eure neue KI auch im Mehrspielermodus via LAN gemeinsam bekämpfen. Aber dazu brauchen alle Spieler natürlich exakt die gleiche "War2Dat.mpq" in der eure "ai.bin" mit eurer KI abgespeichert ist. Ich habe das schon mal via Battle.net online versucht aber es hat leider nicht geklappt.

Ich wünsche euch jetzt viel Spaß und Erfolg! Wenn ihr gute neue KI's programmiert habt dann zeigt sie mir doch einfach mal oder macht ein YouTube Video dazu.

 

Kontakt

Fragen, Anregungen, Ideen sind herzlich willkommen! Organisatorische & geschäftliche Anliegen bitte via E-Mail.

Facebook Fanseite
E-Mail
Skype

Über uns

Björn Jaborek
Initiator des UReCoRe
Initiator des UReCoRe
 

Projektseiten

MegaMan CME
Facebook Fanseite


Chose your language: