[Modding] Neue Portrait-Icons für Zaubersprüche einfügen

Vlan

Member
Registriert
27.09.2019
Beiträge
44
Hallo,
ich will einen neuen Zauberspreich ins Spiel einfügen der meinen Mitstreitern einen neues Status-Effekt gibt. Dieser soll natürlich auch im Portrait und im Charakterblatt (inklsusive "Zauberspruch-Name") als kleines Icon angezeigt werden. Problem nur ist, wie füge ich ein neues Icon ins Spiel ein? Ich weiß, dass Statdesc.2da dafür zuständig ist, aber nur String-Text und nächste Zahl einfügen reichen nicht aus, da keine Grafik mit dem Statuseffekt so assoziiert werden kann (Spiel nimmt eine wilkürliche Grafik die falsch ist). Heißt also, dass ich das wahrscheinlich mit weidu machen muss? Würde mich über Hilfe gern freuen!

-Vlan
 

Argent

Senior Member
Registriert
13.07.2010
Beiträge
202
Das kommt auf die Spiele-Engine an. Wenn es für die Enhanced Editions gemacht werden soll, dann ist es relativ einfach. Erstelle eine neue BAM mit einem einzigen Frame, das die Portraitgrafik repräsentiert und füge eine neue Zeile zu STATDESC.2DA hinzu, z.B.
Code:
APPEND ~STATDESC.2DA~ ~206         26136       SPPR111D~ UNLESS ~SPPR111D~
Der erste Wert in der STATDESC.2DA ist eine laufende Nummer, welche den Icon-Index repräsentiert (sollte dynamisch ermittelt werden). Der zweite Wert ist die Strref für den Effektnamen. Der dritte Wert ist die Resref der BAM-Datei.

Für die Original-Engine ist es sehr viel komplizierter, da man dynamisch die Grafik in die STATES.BAM hineinpatchen muss. Das wäre selbst für WeiDU-Experten eine echte Herausforderung. Im ungünstigsten Fall ist die BAM-Datei bereits voll und kann nicht mehr erweitert werden, da nur max. 256 Grafikeinträge zulässig sind und die ersten 65 Einträge bereits von der Engine reserviert sind.
 
Zuletzt bearbeitet:

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.425
Wobei man mit UNLESS prüfen sollte, ob der Eintrag mit der laufenden Nummer nicht schon existiert, weil man den ansonsten überschreibt, oder?
 

Argent

Senior Member
Registriert
13.07.2010
Beiträge
202
Wobei man mit UNLESS prüfen sollte, ob der Eintrag mit der laufenden Nummer nicht schon existiert, weil man den ansonsten überschreibt, oder?
Stimmt. Mein Codebeispiel war etwas missverständlich, da er nur den Tabelleneintrag beinhaltete. Ich habe ihn mal durch einen entsprechenden WeiDU-Befehl ersetzt.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.212
Oh, das ist ein toller Thread! Zwei Fragen hierzu:
- Wie kann ich das richtige neue Icon dann mit dem Opcode "Display portrait icon" zuordnen?
- Wie kann ich die laufende Icon-Nummer dynamisch ermitteln?
 

Argent

Senior Member
Registriert
13.07.2010
Beiträge
202
Die laufende Nummer in STATDESC.2DA ist einfach ein Index, der von 0 an nach oben gezählt wird. Den nächsten freien Index kann man am schnellsten ermitteln, in dem man die Anzahl Zeilen in STATDESC.2DA ermittelt und die drei Header-Zeilen abzieht, z.B. so:
Code:
COPY_EXISTING ~STATDESC.2DA~ ~override~
  COUNT_2DA_ROWS num_rows 1
  SET next_free_index = num_rows - 3
BUT_ONLY

Diesen Wert kann man dann direkt als Index für Opcode 142 nutzen.
 

Vlan

Member
Registriert
27.09.2019
Beiträge
44
Also das Problem ist ein etwas größeres. Hatte mir gestern nochmal ein wenig Zeit genommen um mir mein Problem genauer anzugucken und dabei ist das herausgekommen:

https://www.gibberlings3.net/forums...ortrait-display-icons-problem-to-bgt-classic/

Gibt drei Dateien die dafür zuständig sind:

STATEDESC.2DA (Namen die beim OP Code Effekt angezeigt werden)
STATES.BAM (255 Plätze für die Icons die auf dem Portrait im Spiel angezeigt werden)
STATES2.BAM (255 Plätze für die Icons die auf dem Charakterblatt im Spiel angezeigt werden)

Mein Problem ist, dass STATES.BAM und STATES2.BAM, warum auch immer, bei dem 64 Zyklus anfangen (64 Zyklus wäre der 1. Eintrag in STATEDESC.2DA, also Dire Charm) und mir somit kein Platz mehr geben neue Icons einzufügen (da sich schon 190 Icons im Spiel befinden -> 64+190=254). Zyklen 0-63 in den BAM-Dateien, die ich theoretisch benutzen könnten, sind leer. Und ich weiß auch nicht, wie man dem Spiel beibringen kann, dass es nicht beim 64 Zyklus sondern beim nullten anfangen soll. Ich habe versucht die benutzten Zyklen einfach nach vorne zu schieben und die ersten 63 daran zu hängen, hat natürlich nicht geklappt. Ich könnte in der STATEDESC.2DA 63 neue Einträge am Anfang erstellen, aber erstens weiß ich nicht ob das klappen wird, und zweitens wenn doch, dann müsste ich trotzdem jeden Zauberspruch im SPiel durchforsten und dort den Eintrag auf den neuen Eintrag im OP Code ändern. Was utopisch wäre.

Ich gehe mal stark davon aus, dass ich das irgendwie mit weidu lösen muss. Ich glaube ich hatte auch eine Mod installiert die neue Icons einfügt, aber ich habe keine Ahnung welche das war.
 

Vlan

Member
Registriert
27.09.2019
Beiträge
44
Das kommt auf die Spiele-Engine an. Wenn es für die Enhanced Editions gemacht werden soll, dann ist es relativ einfach. Erstelle eine neue BAM mit einem einzigen Frame, das die Portraitgrafik repräsentiert und füge eine neue Zeile zu STATDESC.2DA hinzu, z.B.
Code:
APPEND ~STATDESC.2DA~ ~206         26136       SPPR111D~ UNLESS ~SPPR111D~
Der erste Wert in der STATDESC.2DA ist eine laufende Nummer, welche den Icon-Index repräsentiert (sollte dynamisch ermittelt werden). Der zweite Wert ist die Strref für den Effektnamen. Der dritte Wert ist die Resref der BAM-Datei.

Für die Original-Engine ist es sehr viel komplizierter, da man dynamisch die Grafik in die STATES.BAM hineinpatchen muss. Das wäre selbst für WeiDU-Experten eine echte Herausforderung. Im ungünstigsten Fall ist die BAM-Datei bereits voll und kann nicht mehr erweitert werden, da nur max. 256 Grafikeinträge zulässig sind und die ersten 65 Einträge bereits von der Engine reserviert sind.
Oh wow, gerade erst gelesen. Oh man, wirklich schade. Danke für die Antwort!
 
Oben