Scripting: Historische Events + Spezifikationen (M2TW)

  • Ich dacht mir ich schreib mal wieder ein Tutorial:


    In diesem werde ich erläutern wie man ein einfaches historisches Event scriptet, verschiedene, einfache, Bedingungen hinzufügt und dann noch ein paar Spezifikationen einbaut, etwa das direkte Zoomen zu einer Position, dass Spawnen von Armeen etc..
    Hinweis vorweg: monitor_conditions verwende ich hier nur, weil das Tutorial an Anfänger und unerfahrene gerichtet ist. Erfahrene Scripter werden wissen, in welchen speziellen Fällen monitor_conditions nötig sind. Für Anfänger reichen aber monitor_conditions, da sie recht simpel sind. Sobald man über etwas Erfahrung verfügt sollte man aber recht schnell zu monitor_event wechseln.
    Was man braucht:


    ----------------------------------
    campaign_script.txt ---> ([...]\Medieval II Total War\mods\[...]\data\world\maps\campaign\imperial_campaign
    historic_events.txt ---> ([...]\Medieval II Total War\mods\[...]\data\text
    Maus + Tastatur
    Personal Computer
    Modfolder, eigene Mod oder Retrofit , entpacktes Vanilla
    Hände ---> (Sollten an deinen Armen irgendwie befestigt sein: [...]\Torso\Arme\Hände)
    ----------------------------------


    Nun gut, legen wir los:


    Man öffnet die campaign_script.txt und fügt dies ein:

    Code
    monitor_conditions I_TurnNumber = 1
    historic_event test
    terminate_monitor
    end_monitor


    ----------------------------------
    I_TurnNumber = "Runde in der das Event kommen soll"
    Die Bedingung, hier in welcher Runde das Event kommen soll, weitere Bedingungen die Erfüllt werden müssten, werden hinzugefügt mit "and".
    historic_event test

    Was ausgeführt werden soll wenn die Bedingung (condition) erfüllt wird, hier eine historische Eventnachricht, die in den Dateien den Identifikationsnamen test verwendet.
    ----------------------------------
    Hinweis: Die Zahl hinter "I_TurnNumber =" gibt die Anzahl der gespielten Runden wieder, da die Kampagne in Runde 1 startet müsst ihr für ein Event was Runde 50 kommen soll 49 angeben.
    ----------------------------------
    Damit unser Event Ingame nun auch kommt und es keinen sauberen CtD geben soll.(Wenn, glücklicherweise mit Logeintrag wenn es daran liegt.) müssen wir noch folgendes tun:
    Erstmal vielleicht einen Kaffe trinken nach dieser Anstrengung, danach aber auf jeden Fall die historic_events öffnen un folgendes hinzufügen:


    Code
    {TEST_BODY}Test-Text    
    {TEST_TITLE}Test - Titel


    Wichtig ist: Genau der gleiche Name wie im campaign_script angegeben, nur Groß geschrieben und danach _TITLE oder _BODY.
    Übrigens: Einen Absatz macht man mit \n und eine Leerzeile mit \n\n.
    ----------------------------------
    Dies wäre die einfachste Form eines Events Ingame, eine einfache Nachricht, die in einer bestimmten Runde im Spiel erscheint, hier in der Zweiten. Dabei käme sie für jede Fraktion.
    ----------------------------------
    Das reicht uns natürlich nicht, wir wollen das Event auch für eine Fraktion spezifizieren, also tun wir folgendes:


    Code
    monitor_conditions I_TurnNumber = 1
    and I_LocalFaction denmark
    historic_event test
    terminate_monitor
    end_monitor


    and I_LocalFaction denmark


    Diese Zeile fügt die Bedingung hinzu, dass man eine Bestimmte Fraktion spielt, hier Dänemark.
    Die "Labels" der Fraktionen, die man angeben muss, sind folgende:


    [spoil]Crusades
    egypt turks antioch jerusalem byzantium slave venice mongols


    Americas
    spain aztecs chichimeca tlaxcalans tarascans apachean mayans slave england


    Britannia
    france norway scotland england ireland wales


    Teutonic
    teutonic_order lithuania hre denmark poland novgorod slave venice


    M2TW
    sicily milan denmark egypt scotland aztecs turks france hre england portugal poland byzantium moors russia spain hungary papal_states slave


    (Danke an Ladegos für die "freiwilige" zur Verfügung Stellung, entommen aus diesem Post.)
    [/spoil]
    ----------------------------------
    Als weitere Bedingung könnte man noch hinzufügen, dass die jeweilige Fraktion eine bestimmte Stadt hält:


    Code
    monitor_conditions I_TurnNumber = 1
    and I_LocalFaction denmark
    and I_SettlementOwner Arhus = denmark
    historic_event test
    terminate_monitor
    end_monitor


    and I_SettlementOwner Arhus = denmark


    Oben bereits erwähnte, zusätzliche Bedingung. Arhus, Name der betreffenden Stadt. Name der Fraktion die die Stadt halten muss, denmark in diesem Fall.
    ----------------------------------
    Das wars auch erstmal an "Standard"-Bedingungen. Es gibt da natürlich noch einige weitere, aber die 3 sollten erstmal genügen.
    ----------------------------------
    Da wird jetzt aber oben leider nur ein Standard Bild haben und das natürlich auch ändern wollen machen wir folgendes:
    Wir gehen in den Pfad:
    ([...]:\SEGA\Medieval II Total War\mods\[...]\data\ui\southern_european\eventpics\)
    Und dort können wir ein tga-Bildchen reinmachen das genau den gleichen Namen haben muss wie das historic_event, in diesem Fall: test.
    Fertig, Eventbilder brauchen nur bei southern_european rein.
    ----------------------------------
    Kommen wir zu weiteren Auswirkungen, neben dem historischen Event wollen wir aber noch dass es zu einem Bevölkerungsabzug kommt:


    Code
    monitor_conditions I_TurnNumber = 1
    historic_event test
    console_command add_population Arhus, -700
    terminate_monitor
    end_monitor


    console_command add_population Arhus, -700


    Exakter Name der betreffenden Stadt, hier Arhus. Anzahl der abgezogenen Bewohner, macht das Minus weg wenn ihr einen Bevölkerungszuwachs erreichen wollt.
    ----------------------------------
    Wollt ihr gerne eine Armee spawnen könnt ihr folgendes machen:



    faction hre
    character random_name, named character, age 45, x 240, y 164, direction N
    traits LoyaltyStarter 1 , GoodCommander 2 , ReligionStarter 1
    unit NE Bodyguard exp 8 armour 0 weapon_lvl 0
    unit Town Militia exp 5 armour 0 weapon_lvl 0


    Entsprechende Fraktion, Hier ein zufälliger Name, Koordinate mit Ausrichtung, hier Norden.


    Dadrunter finden sich noch ein paar Traits, dann beginnt die auflistung der genauen EInheiten.
    Den genauen Script-Eintrag oben aus dem Code-Fenster entnehmen, dort kann man aber leider nichts Farbig machen.
    ----------------------------------
    Diese X und Y Angabe lässt sich Ingame leicht herausfinden, auch mit Gimp gibt es eine Möglichkeit, leider vergess ich dort aber immer welche Zahlen man abziehen muss von der unten angegebenen Position, desshalb hier die Ingame-Variante:
    Haltet den Mauszeiger direkt über die Position die ihr haben wollt und öffnet mit "ö" die Konsole. Tippt dort ein:
    show_cursorstat
    Umgehend werden euch dann alle nötigen Info´s angezeigt, neben dem Regionsnamen auch die passende Position des Mauszeigers auf der X und Y - Achse.
    ----------------------------------
    Kommen wir noch zu ein paar netten Features, wie etwa den Zoom der Kamera auf eine bestimmte Position:


    Code
    monitor_conditions I_TurnNumber = 1
    historic_event test
    snap_strat_camera 206, 110
    terminate_monitor
    end_monitor


    snap_strat_camera 206, 110


    Gibt die genaue Koordinate an. Zoomt die Kamera direkt dorthin, hier kann man auch "move" verwenden, dann wird die Kamera bei Auslösung des Scripts langsam dorthin bewegt, Nachteil: Bewegt der Spieler die Maus an den Bildschirmrand oder drückt die Pfeiltasten wird diese Bewegung abgebrochen.
    ----------------------------------
    Nun können wir so toll die Kamera an eine Position bewegen, doch ist sie vom Nebel des Krieges verdeckt und der Spieler sieht nichts außer Schwarz, kein Problem:


    Code
    monitor_conditions I_TurnNumber = 1
    historic_event test
    reveal_tile 206, 110
    terminate_monitor
    end_monitor


    reveal_tile 206, 110


    Wiedermals die genaue Position.
    Dieser Befehl deckt die entsprechende Position auf und lässt sie auch immer sichtbar.
    ----------------------------------
    Es gibt noch viele, viele weitere Auswirkungen, diese alle zu erklären würde aber den Rahmen deutlich sprengen...
    ----------------------------------
    Bei Fragen, Kritik, Anmerkungen oder auch Todesdrohungen bitte Pn an mich oder in diesem Thread schreiben!


    Ich hoffe es hat euch gefallen :)


    Diskussionen und Fragen bitte hier!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!