[Modding] Anwesenheit von Kreaturen in einer Area

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.620
Ok, man kann ja festlegen, dass eine Kreatur nicht immer in einer Area vorhanden ist (von den Uhrzeiten her). Sind immer Slots von einer Stunde, die bei der halben Stunde beginnen.

Jetzt gibt es Ulcaster. Und der hat da eine total unregelmässige Anwesenheit und ist immer wieder für einen Slot oder mehrere abwesend (und ich dachte immer, das läge an seinem randomwalk-Skript, dass man ihn nicht findet).

So, und jetzt die Frage: wie kann ich das per Mod ändern? Man müsste die Area patchen (AR3900) und dort den Actor (Actor3). Und ich habe keine Ahnung, wie das gehen sollte. Wer weiß hier mehr?

Es im NI zu fixen wäre jetzt nicht das Problem... da gibt es schönes Menü mit "Select all" ;)

Hier mal noch zum Spaß und Haare raufen die Abwesenheitsslots:
01:30
05:30
07:30
10:30
13:30
15:30
20:30
22:30
Ich seh da echt kein Muster... Oder es ist etwas bei der EET schief gelaufen bei der Konversion der Area...
 

Jarl

Senior Member
Registriert
28.04.2006
Beiträge
997
Lustigerweise habe ich das in einer Mod gemacht :)

Hier der Code:

COPY_EXISTING ~%FishermansLake%.ARE~ ~override~
PATCH_IF (SOURCE_SIZE > 0x11b) BEGIN
READ_SHORT 0x54 "OFF_ACT"
WRITE_BYTE "OFF_ACT" + (0x110 * 11) + 0x40 0b0011000000
WRITE_BYTE "OFF_ACT" + (0x110 * 11) + 0x41 0b0011111111
WRITE_BYTE "OFF_ACT" + (0x110 * 11) + 0x42 0b0000011111
WRITE_BYTE "OFF_ACT" + (0x110 * 11) + 0x43 0b0000000000
END
BUT_ONLY

actor.png

In meinem Beispiel soll Actor 11 nicht mehr nachts erscheinen, sondern nur noch tagsüber.

An EET liegt das mit Ulcaster nicht, ist bei meiner BGEE auch so.
 

Anhänge

  • actor.png
    actor.png
    40,1 KB · Aufrufe: 2

Argent

Senior Member
Registriert
13.07.2010
Beiträge
274
So, und jetzt die Frage: wie kann ich das per Mod ändern? Man müsste die Area patchen (AR3900) und dort den Actor (Actor3). Und ich habe keine Ahnung, wie das gehen sollte. Wer weiß hier mehr?
Wenn nur die fehlenden Slots geschlossen werden sollen, dann sollte dieser Code funktionieren:
Code:
COPY_EXISTING ~AR3900.ARE~ ~override~
  READ_LONG 0x54 ofs_actors
  READ_SHORT 0x58 num_actors
  // zur Sicherheit werden alle Actor-Strukturen durchlaufen
  FOR (i = 0; i < num_actors; ++i) BEGIN
    SET ofs = ofs_actors + i * 272
    READ_ASCII ofs name (32) NULL
    // gefunden?
    PATCH_IF (~%name%~ STR_EQ ~Ulcaster~) BEGIN
      WRITE_LONG (ofs + 0x40) (THIS | 0xffffff)   // setzt alle Slots auf 1
      SET i = num_actors  // Schleifenabbruch erzwingen
    END
  END
BUT_ONLY

Bei EET, Tutu oder BGT müssen auch die Namen der ARE-Datei angepasst werden.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.620
Habe es mit Argents Skript probiert. Hat funktioniert ;) Danke!
 
Oben