Kleines Modding Tutorial

Modvorstellungen und weiteres

Moderator: Moderatoren

Civil
Tessaricus
Tessaricus
Beiträge: 397
Registriert: 19. Januar 2014 22:33

Kleines Modding Tutorial

Beitragvon Civil » 29. Juni 2016 11:50

Da es meines Wissens nach kein deutschsprachiges Tutorial gibt und ich bei Steam gefragt wurde, wie man denn einen Fokusbaum ummoddet, dachte ich mir, ich erstelle mal für die Allgemeinheit ein kleines Tutorial.

Ihr werdet lernen:
- wie man ein neues Land erstellt
- wie man neue Start Divisionen festlegt
- wie man neue Ideologien erstellt
- wie man einen neuen Fokusbaum erstellt
- wie man Events schreibt
- wie man neue Ideen erstellen kann
- wie man Ressourcen & Gebäude von Provinzen verändert

1. Erste Schritte
Als erstes solltet ihr euch natürlich Gedanken machen, was ihr überhaupt verändern wollt. Dann startet ihr das Spiel und geht im Launcher auf den Modreiter, dann auf Mod Werkzeuge und 'erstellt' dort eure Mod. Das Spiel erstellt nun unter Dokumente/Paradox Interactive/Hearts of Iron IV/mod einen Ordner mit dem Namen eurer Mod sowie eine Textdatei, in welcher alle wichtigen Informationen zu eurer Mod angegeben sind, wie z.B. die benötigte Version und die Kategorien.

Nun ist es noch sinnvoll, sich ein vernünftiges Notepad herunterzuladen. Ich benutze dafür Atom, welches u.a. auch im Modding Wiki zu Hearts of Iron IV empfohlen wird. Eventuell müsst ihr bei der Installation kurz euer Antiviren Programm ausschalten.
Ebenfalls könnt ihr schon mal den Debug Modus im Spiel aktivieren. Dazu klickt ihr mit der rechten Maustaste in Steam auf HoI 4, wählt Eigenschaften aus und klickt dann auf Startoptionen festlegen. Hier fügt ihr nun -debug an. Der Debug Modus hilft euch, schnell Daten im Spiel zu finden und zeigt euch zu 95% an, wenn etwas nicht läuft, warum es nicht läuft. Wobei diese Meldung immer mit Vorsicht zu genießen ist und man ggf. alles selber testen sollte, da manchmal Fehler aus dem Nichts herbeigezaubert werden und selbst bei einer ungemoddeten Version Fehler auftauchen.
Für das bearbeiten von Grafiken solltet ihr euch GIMP downloaden (sofern ihr nicht bereits ein anderes Programm nutzt) sowie ein Plugin dafür, welches .dds Dateien öffnen und bearbeiten kann.

2. Ein Land erstellen
Passend zum Brexit werden wir nun Schottland erstellen. Als erstes bauen wir dafür eine Grundlegende Ordnerstruktur auf. Fettgedruckte Ordner sind hierbei 'Hauptordner', kursiv gedruckte befinden sich in diesen Ordnern.

common
countries
country_tags
ideas

history
countries
states
units

localisation

gfx
flags
medium
small
leaders

Nun erstellen wir unter history/countries die .txt Datei SCO - Schottland. SCO ist hierbei der vom Land genutzte Tag und darf nicht noch einmal exisitieren. Wir schauen also im gleichen Ordner beim Spiel nach und sehen, dass dieser Tag noch ungenutzt ist.

Der Inhalt dieser Datei sieht nun so aus:

Code: Alles auswählen

### Alles was hinter einer Raute steht, hat für das Spiel keine Bedeutung.
# Penis

capital = 121  # Die Hauptstadt des Landes. Den Wert finden wir, wenn wir das Spiel im Debug Modus starten, auf Nudge! klicken und dann auf States und über die gewünschte Provinz fahren.

oob = "SCO_1936" # Gibt dem Spiel an, welche Templates existieren und ob sowie wo bereits Divisionen stehen. Dazu später mehr.

set_technology = {   # Die Starttechnologien
   infantry_weapons = 1
   gwtank = 1
   basic_light_tank = 1
}

1939.1.1 = {   # Alles relevante für den 1939 Start steht hier und ist für uns erst einmal uninteressant und deshalb nicht enthalten

   }

set_politics = {      # die Beliebtheitswerte der Parteien

   parties = {
      democratic = {
         popularity = 0
      }

      fascism = {
         popularity = 15
      }
      
      communism = {
         popularity = 10
         #banned = no #default is no
      }
      
      neutrality = {
         popularity = 75
      }
   }
   
   ruling_party = neutrality   # die Regierungspartei
   last_election = "1936.1.1"   # die letzte Wahl
   election_frequency = 48   # dauer der Amtszeit in Monaten
   elections_allowed = no   # Zulassung bzw. Nichtzulassung von Wahlen
}

# Der Chef des Landes
create_country_leader = {
   name = "Max Mustermann"
   #desc = "POLITICS_MOHAMMED_ZAHIR_SHAH_DESC"   # Beschreibung des Anführers, hier von Afghanistan. Ich habe ehrlich gesagt keine Ahnung, wo ich die finde und halte es auch nicht für sonderlich wichtig, weshalb ich es mit einer Raute weglasse.
   picture = "gfx/leaders/Portrait_Max_Mustermann.dds" # zu finden unter gfx/leaders
   expire = "1965.1.1"      # das Todesdatum
   ideology = despotism      # Ideologie des Leaders
   traits = {            # besondere Eigenschaften
      #
   }
}


create_corps_commander = {         # Generäle vom Land
   name = "Max Mustermann sein Bruder"
   portrait_path = "gfx/leaders/Europe/Portrait_Europe_Generic_land_3.dds"      # das Bild, in dem Fall ein generisches
   traits = { desert_fox }   # Fähigkeiten vom General, hier der für Schottland typische Wüstenfuchs
   skill = 4            # Fähigkeit des Generals
}


Als Codierung hierbei immer UTF8 wählen.

Nun brauchen wir noch eine Datei, welche dem Land eine Farbe sowie einen Grafikstil für Gebäude etc zuweißt.
Diese Datei heißt schottland.txt und ist unter common/countries zu finden.

Code: Alles auswählen

graphical_culture = western_european_gfx
graphical_culture_2d = western_european_2d   

color = { 10 50 10 }      # Farbe RotGrünBlau


Nun kopieren wir aus dem Spielordner unter common/country_tags die sich darin befinde Datei 00_countries in den gleichen Ordner unserer Mod und fügen unten an

Code: Alles auswählen

SCO = "countries/Schottland.txt"


Unser Land existiert jetzt, hat aber noch keinerlei Gebiete. Dafür suchen wir wieder im Nudge! Modus die ID's von den Staaten raus, suchen die Staaten dann unter history/states im Spielordner und kopieren sie in den gleichnamigen Ordner unserer Mod und bearbeiten die Dateien wie folgt:

Code: Alles auswählen


state={
   id=121            
   name="STATE_121" # Lothian
   manpower = 1431624      # Bevölkerung
   
   state_category = city      # Gebietart
   
   resources={         # Rohstoffe
      steel = 20         # 20 Stahl, welche vorher nicht da waren
   }

   history={
      owner = SCO         # Besitzer
      victory_points = { 9392 10 }   #Siegpunkte einzelner Provinzen
      victory_points = { 6300 1 }
      buildings = {         #Gebäude
         infrastructure = 7
         industrial_complex = 1
         dockyard = 1
         air_base = 3
         6300 = {
            naval_base = 5
            }
         9392 = {
         bunker = 10            # Edingburgh ist nun befestigt
      }
      }
      add_core_of = SCO            # Wer einen Kern besetzt. Steht hier nichts, wird der Staat als Kolonialstaat gewertet
   }

   provinces={                  # zum Staat gehörende Provinzen
      159 6300 9314 9383 9392 11378
   }
}



Jetzt existiert Schottland, jedoch noch ohne Armee. Dafür gehen wir in den Ordner history/units und erstellen die vorher erwähnte Datei SCO_1936

Code: Alles auswählen

division_template = {            # Wie der Name schon sagt, ein Divisions Template
   name = "Highlander"

   regiments = {            # Die Regimer von links oben nach rechts unten, hier eine normale 3x3 Infanteriedivision
      infantry = { x = 0 y = 0 }   
      infantry = { x = 0 y = 1 }
      infantry = { x = 0 y = 2 }
      infantry = { x = 1 y = 0 }
      infantry = { x = 1 y = 1 }
      infantry = { x = 1 y = 2 }
      infantry = { x = 2 y = 0 }
      infantry = { x = 2 y = 1 }
      infantry = { x = 2 y = 2 }
   
   }
   priority = 2            # Priorität, in diesem Fall Elite
}


units = {                  # im Feld stehende Einheiten
      division = {
      name = "Highlander Infanterie"
      location = 9392          # Edinburgh
      division_template = "Highlander"
      start_experience_factor = 0.3   # Starterfahrung, hier Stufe 3
   }
   

}

### Starting Equipment ###   # was eben in der Produktion ist
instant_effect = {
   add_equipment_production = {
      equipment = {
         type = infantry_equipment_0
         creator = "SCO"
      }
      requested_factories = 1
      progress = 0.28
      efficiency = 100
   }
}


Was nun noch fehlt, sind Minister. Da wir faul sind und erstmal nur ein spielbares Land kreieren möchten, kopieren wir die Minister von Luxemburg. Wir erstellen dafür im Ordner ideas die .txt Datei Schottland und fügen folgende Daten dort ein, wobei wir mit strg+f LUX durch SCO ersetzen.

Code: Alles auswählen


ideas = {
political_advisor = {

      SCO_pierre_dupong = {

         picture = generic_political_advisor_europe_1

         allowed = {
            original_tag = SCO
         }

         traits = { silent_workhorse }      # Fähigkeit
      }

      SCO_martin_karp = {

         picture = generic_political_advisor_europe_2

         allowed = {
            original_tag = SCO
         }

         traits = { war_industrialist }
      }

      SCO_pierre_krier = {

         picture = generic_political_advisor_europe_3

         allowed = {
            original_tag = SCO
         }

         traits = { captain_of_industry }
      }
   }
   # MILUXARY
   army_chief = {

      SCO_emile_speller = {

         picture = generic_army_europe_1

         allowed = {
            original_tag = SCO
         }

         traits = { army_chief_defensive_2 }      # die 2 steht für Experte. 1 Ist Spezialist und 3 Genie

         ai_will_do = {
            factor = 1
         }
      }

      SCO_alexander_von_falkenhausen = {

         picture = generic_army_europe_2

         allowed = {
            original_tag = SCO
         }

         traits = { army_chief_offensive_2 }      

         ai_will_do = {
            factor = 1
         }
      }
   }

   air_chief = {

      SCO_guillaume_soisson = {

         picture = generic_air_europe_3

         allowed = {
            original_tag = SCO
         }

         traits = { air_air_combat_training_2 }

         ai_will_do = {
            factor = 1
         }
      }

      SCO_nicholas_diedrich = {

         picture = generic_air_europe_1

         allowed = {
            original_tag = SCO
         }

         traits = { air_chief_ground_support_2 }

         ai_will_do = {
            factor = 1
         }
      }

   }

   navy_chief = {

      SCO_paul_medinger = {

         picture = generic_navy_europe_3

         allowed = {
            original_tag = SCO
         }

         traits = { navy_chief_decisive_battle_2 }

         ai_will_do = {
            factor = 1
         }
      }

      SCO_henri_ahnen = {

         picture = generic_navy_europe_1

         allowed = {
            original_tag = SCO
         }

         traits = { navy_chief_maneuver_2 }

         ai_will_do = {
            factor = 1
         }
      }
   }

   high_command = {

      SCO_dayan_moshe = {

         picture = generic_army_europe_3

         allowed = {
            original_tag = SCO
         }

         traits = { army_infantry_3 }

         ai_will_do = {
            factor = 1
         }
      }

      SCO_aloyse_glodt = {

         picture = generic_air_europe_2

         allowed = {
            original_tag = SCO
         }

         traits = { army_armored_2 }

         ai_will_do = {
            factor = 1
         }
      }

      SCO_damien_roeser = {

         picture = generic_air_europe_2

         allowed = {
            original_tag = SCO
         }

         traits = { air_air_superiority_2 }

         ai_will_do = {
            factor = 1
         }
      }

      SCO_pierre_fischbach = {

         picture = generic_navy_europe_1

         allowed = {
            original_tag = SCO
         }

         traits = { navy_fleet_logistics_2 }

         ai_will_do = {
            factor = 1
         }
      }
   }

   theorist = {

      SCO_alex_federspiel = {

         picture = generic_army_europe_1

         allowed = {
            original_tag = SCO
         }

         research_bonus = {
            land_doctrine = 0.07
         }

         traits = { military_theorist }
      }

      SCO_nicolas_de_dixmude = {

         picture = generic_air_europe_1

         allowed = {
            original_tag = SCO
         }

         research_bonus = {
            air_doctrine = 0.07
         }

         traits = { air_warfare_theorist }
      }

      SCO_florent_destriveaux = {

         picture = generic_navy_europe_1

         allowed = {
            original_tag = SCO
         }

         research_bonus = {
            naval_doctrine = 0.07
         }

         traits = { naval_theorist }
      }
   }

}
}



Spielerisch ist unser Land jetzt fertig, jedoch fehlt das optische Gewand, wie Name, Fahne und Bild für unseren Boss.

Für den Namen gehen wir im Spielordner unter localisation und kopieren für die deutsche Version die Datei countries_l_german.yml in den gleichnamigen Modordner und setzen unten an:

Code: Alles auswählen

 SCO_fascism:0 "Schottisches Reich"
 SCO_fascism_DEF:0 "Das Schottische Reich"
 SCO_fascism_ADJ:0 "Schottisch"
 SCO_communism:0 "Volksrepublik Schottland"
 SCO_communism_DEF:0 "Die Volksrepublik Schottland"
 SCO_communism_ADJ:0 "Schottisch"
 SCO_democratic:0 "Republik Schottland"
 SCO_democratic_DEF:0 "Die Republik Schottland"
 SCO_democratic_ADJ:0 "Schottisch"
 SCO_neutrality:0 "Schottland"
 SCO_neutrality_DEF:0 "Schottland"
 SCO_neutrality_ADJ:0 "Schottisch"
 


Nun müssen wir eine Fahne einfügen unter gfx/flags im Format 82x52 und als .tga Datei. Insgesamt tun wir das 4 mal, sprich für jede Ideologie eine.
Solltet ihr mit GIMP arbeiten, müsst ihr beim speichern den Haken unter RLE-Kompression rausnehmen.
SCO_communism.tga
SCO_fascism.tga
SCO_democratic.tga
SCO_neutrality.tga

Das Ganze wiederholt ihr dann, einmal für den Ordner Small (10x7) und einmal für Medium (41x26).

Für den Boss packen wir nun unter gfx/leaders die Datei Portrait_Max_Mustermann.dds (156x210)

Nun haben wir ein in der Theorie spielbares Land, wobei uns für die Praxis noch Militärfabriken fehlen, doch dazu kommen wir später. Wie wir bei den Bildern sehen können, stehen auch noch britische Truppen im Land. Dies könnten wir, sofern es uns stören würde, beheben, in dem wir unter history/units aus dem Hauptspiel die ENG_1936 Datei einsetzen, die Divisionen raussuchen und dann löschen bzw. umstellen.

Bilder (Öffnen)
Bild

Bild

3. Neue Ideologien
Wofür braucht man eigentlich eine neue Ideologie? Dies kann sinnvoll sein, wenn wir via Ereignis den Namen eines Landes ändern wollen oder aber auch, wenn wir verhindern möchten, dass Länder ohne gemeinsamen Feind eine Fraktion beitreten.

Gehen wir davon aus, dass wir neben Schottland nun auch Wales erstellt haben und sich beide in einer Fraktion befinden. Auch gehen wir davon aus, dass beide Länder faschistisch sind. Würde die schottische KI nun in Irland einmaschieren und zur gleichen Zeit führt Ungarn Krieg gegen Rumänien, so würde Ungarn wahrscheinlich der Fraktion beitreten, wenn gleich es für Schottland keinerlei nutzen hätte, da Ungarn keinerlei Verbindung zum Mehr hat.

Als erstes erstellen wir nun im Ordner common den Ordner ideologies und kopieren den Inhalt des gleichnamigen Ordners des Hauptspiels in diesen neuen Ordner und fügen vor der letzten } folgendes ein:

Code: Alles auswählen


   celtic = {      # id der Ideologie

      types = {

         despotism  = {      # unter Formen. Haben meines Wissens nach im Moment keinerlei Bedeutung für das Spiel.
         }

         oligarchism  = {
         }

         moderatism = {
         }

         centrism = {
         }
      }

      dynamic_faction_names = {
         "FACTION_NAME_NONALIGNED_1"      # hier könnte man dynamische Fraktionsnamen einsetzen, worauf wir erstmal verzichten
         "FACTION_NAME_NONALIGNED_2"
         "FACTION_NAME_NONALIGNED_3"
         "FACTION_NAME_NONALIGNED_4"
         "FACTION_NAME_NONALIGNED_5"
      }

      color = { 20 60 20 }                  #die Farbe der Ideologie

# nun kommt alles, was die Fraktion definiert. In diesem Fall ist es eine Kopie der Neutralen Ideologie. Ich denke der Inhalt muss nicht erklärt werden, da er recht einleuchtend ist.
      war_impact_on_world_tension = 0.25      #no major danger
      faction_impact_on_world_tension = 0.1

      rules = {
         can_force_government = no
         can_puppet = no
         can_send_volunteers = no
      }

      modifiers = {
         #increased_influence_factor = 0.3 #30% easier to influence
         generate_wargoal_tension = 0.5
         join_faction_tension = 0.4
         lend_lease_tension = 0.4
         send_volunteers_tension = 0.4
         guarantee_tension = 0.4
         drift_defence_factor = -0.3
      }

      faction_modifiers = {
      }

      can_be_boosted = no

      ai_neutral = yes #
   }



So, nun haben wir auch eine neue Ideologie, welche später Verwendung findet.


4. Fokusbaum, Ideen & Events
Für einen neuen Fokus Baum erstellen wir erstmal im Ordner common den Ordner national_focus, wo die Datei schottland.txt rein kommt.

Code: Alles auswählen


focus_tree = {
   id = scottish_focus

   country = {
      factor = 0

      modifier = {
         add = 10
         tag = SCO
      }
   }

   default = no




  focus = {   # der Beginn eines neuen Fokus'
  id = sco_mil # die ID. sollte einzigartig sein, der rest ist egal, kann also auch der Namen eurer Mutter sein mit einer Zahl dahinter.
  icon = GFX_goal_generic_construct_mil_factory  #das Icon, in dem Fall das generische Militärfabrik Icon
  x = 2
  y = 0
  ### die Poisition im Fokusbaum
  cost = 10 # die Dauer. 1 = 7 Tage, 10 = 70 usw.

  completion_reward = {      # die Belohung.
    121 = {                  # Provinz, wo die Fabrik hinkommt

      add_extra_state_shared_building_slots = 5 # fügt 5 neue bauplätze hinzu

      ### fügt 5 neue Fabrik sofort in der Provinz hinzu
      add_building_construction = {
        type = arms_factory
        level = 5
        instant_build = yes
      }
    }
}
}

### Keltenpower ###

focus = {
id = sco_cel
icon = GFX_goal_generic_more_territorial_claims
x = 2
y = 1
prerequisite = { focus = sco_mil }  # Vorraussetzungen. Braucht man mehre, wiederholt man die Zeile, bei entweder oder fügt man in der Klammer einfach noch einmal focus = xyz ein
cost = 10

completion_reward = {
set_politics = { ruling_party = celtic elections_allowed = no } # die celtic Ideologie übernimmt nun das Ruder
 set_political_party = { ideology = celtic popularity = 50 }   # die celtic Ideologie hat nun eine Beliebtheit von 50%
}
}
}



Nun machen wir beim Fokusbaum erst einmal Pause und erstellen eine neue Idee, auf die wir dann zurückgreifen können.

Dafür setzen wir im Ordner ideas in der Datei schottland.txt zwischen ideas und political_advisator

Code: Alles auswählen


country = {
      celticop = {

         allowed = {
            always = no
         }

         allowed_civil_war = {
            always = yes
         }

         removal_cost = -1

         picture = generic_morale_bonus      # das Bild, hier von den Politkommisaren

         modifier = {
            conscription = 0.05         #5% rekutierbare Bevölkerung
                 army_morale_factor = 0.1      #10% Moral
            army_core_attack_factor = 0.2   # 20% Angriff & Verteidigung in Kerngebieten
            army_core_defence_factor = 0.2
         }

      }



Nun weiter im Fokusbaum

Code: Alles auswählen



### Keltischer Nationalismus ###

focus = {
id = sco_nat
icon = GFX_goal_generic_demand_territory
x = 1
y = 2
prerequisite = { focus = sco_cel }
mutually_exclusive = { focus = sco_union }  # schließt sich gegenseitig mit einem anderen Fokus aus
cost = 10

completion_reward = {
add_ideas = celticop
}
}



Jetzt schreiben wir ein Event, welches Irland mit Schottland vereint und die Briten zwingt, Nordirland abzutreten. Dies kopeln wir dann an den Fokusbaum.

Dazu erstellen wir im Modordner den Ordner events und dort die Datei schottland.txt

Code: Alles auswählen


add_namespace = schottland #auf kleinschreibung achten

country_event = {
   id = schottland.1       # muss ein Unikat sein
   title = schottland.1.t
   desc = schottland.1.d
   #picture =             # hier könnte man ein Bild einfügen

   is_triggered_only = yes   # gibt an, dass das Event nur über den Fokusbaum ausgelöst wird

   option = {            # wir könnten mehre Optionen hinzufügen. In diesem Fall machen wir nur eine und die KI hat keine Möglichkeit nein zusagen
name = schottland.1.a
      113= {
         if = {
            limit = { is_owned_by = IRE }      # sofern Ireland den Staat kontrolliert, bekommen wir einen Kern
            add_core_of = SCO
         }
      }
   SCO = {transfer_state = 113 }      # sofern dies gegeben ist, bekommen wir den Staat
      134 = {
         if = {
            limit = { is_owned_by = IRE }
            add_core_of = SCO
         }
      }
   SCO = {transfer_state = 134 }
      135 = {
         if = {
            limit = { is_owned_by = IRE }
            add_core_of = SCO
         }
      }
   SCO = {transfer_state = 135 }

        SCO = { annex_country = { target = IRE transfer_troops = yes } }   # wir anektieren Irland und bekomme die Truppen
        
              119 = {
         if = {
            limit = { is_owned_by = ENG }
            add_core_of = SCO
         }
      }
   SCO = {transfer_state = 119 }
}



So, fertig ist unser Event. Nun bauen wir dies noch schnell in den Fokusbaum ein.

Code: Alles auswählen



### Keltische Union ###

focus = {
id = sco_union
icon = GFX_goal_anschluss
x = 3
y = 2
prerequisite = { focus = sco_cel }
mutually_exclusive = { focus = sco_nat }
cost = 10

available = {   # gibt an, wann der Fokus verfügbar ist
            is_puppet = no   
            has_army_manpower = { size > 300 }  # wir brauchen mindestens 300 tapfere Schotten, um die Briten zu zwingen Nordirland abzugeben sowie Irland zu anektieren.
         }

completion_reward = {

IRE = {
          country_event = schottland.1
        }

ENG = {
        country_event = schottland.1 }

}
}
}



Nun müssen wir noch die localisation bearbeiten, was ich jedoch nicht noch einmal erkläre. Die relevanten datein sind events_I_german,yml, focus_I_german.yml, ideas_I_german.yml sowie parties_I_german.yml.

Schnell noch ein Bild in den Modordner packen für Steam und in der Textdatei zum Mod picture="name.endung" einfügen, alles noch einmal testen und dann ab in den Workshop.

So und nun ist das Ganze auf Steam. =)

Steam
Bilder (Öffnen)
Bild

Bild


Nun haben wir eine fertige Mod. Bitte berücksichtigt, dass ich selbst noch ein Anfänger bin und es eventuell effektiviere Wege gibt als den meinen. Es funktioniert so jedoch alles.
Ebenfalls habe ich einige Dinge bewusst weggelassen, wie z.B. den Schwerpunkt der KI, Newsmeldungen uvm. Mit dieser Grundlage solltet ihr euch allerdings diese Dinge selbst aneignen können, sofern ihr einfach mal in den Spieldateien nachseht.

Ich hoffe mal das ein paar Leute damit etwas anfangen können.