[Modding] Einfügen von Area-Bams in bestehende Areas: Uhrzeiten anpassen

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.303
Ich möchte in die Area 0600.are von BG1EE einen neuen Zugang in die Abwasserkanäle einfügen. Dazu habe ich zwei bams erstellt - eines für tagsüber, eines für nachts.
Ich patche das bam über folgenden Code:
Code:
COPY_EXISTING ~%WBaldursGate%.are~ ~override~
 LPF fj_are_structure
    INT_VAR
    fj_loc_x       = 293
    fj_loc_y       = 2001
    fj_schedule    = 0b0b11111111111100000000
    fj_flags       = 0x00001101
    STR_VAR
    fj_structure_type = animation
    fj_name           = AC#EXFPD
    fj_bam_resref     = ~AC#FP600~
  END
 LPF fj_are_structure
    INT_VAR
    fj_loc_x       = 293
    fj_loc_y       = 2001
    fj_schedule    = 0b00111111000000001110000011111111 
    fj_flags       = 0x00001101
    STR_VAR
    fj_structure_type = animation
    fj_name           = AC#EXFPN
    fj_bam_resref     = ~AC#FP60N~
  END
  LPF fj_are_structure
    INT_VAR
    fj_type         = 2    //travel
    fj_box_left     = 238
    fj_box_top      = 1966
    fj_box_right    = 314
    fj_box_bottom   = 2040
    fj_cursor_idx   = 28   //stairs
    fj_vertex_0     = 238 + (1966 << 16)
    fj_vertex_1     = 314 + (1966 << 16)
    fj_vertex_2     = 314 + (2040 << 16)
    fj_vertex_3     = 238 + (2040 << 16)
    fj_flags        = 0b0000000000000100  //full party required, autosave
    STR_VAR
    fj_structure_type   = region
    fj_name             = Trac#fp1
    fj_destination_area = AC#FP1
    fj_destination_name = Ex0600
  END
    LPF fj_are_structure
    INT_VAR
    fj_loc_x       = 382
    fj_loc_y       = 1999
    fj_orientation = 12   //East
    STR_VAR
    fj_structure_type = entrance
    fj_name           = EXAC#FP1
  END
BUT_ONLY_IF_IT_CHANGES

Problem: Die Uhrzeiten werden nicht richtig angezeigt. Ich verstehe, dass fj_schedule im Binärformat eingegeben werden muss.
In NI erstelle ich den richtigen Zeitplan, im Spiel läufts, ich lasse mir in NI alles als Binärdatei anzeigen, kopiere es in o.g. Code, aber es ist nicht die richtige Uhrzeit. Was mache ich falsch?
 

Argent

Senior Member
Registriert
13.07.2010
Beiträge
274
Problem: Die Uhrzeiten werden nicht richtig angezeigt. Ich verstehe, dass fj_schedule im Binärformat eingegeben werden muss.
Nein, muss es nicht. Das Feld für Uhrzeit ist auch nur ein gewöhnlicher numerischer Wert. Die Binärdarstellung hilft nur beim Leseverständnis. Für noch mehr Leseverständnis könnte man auch die Bitkonstanten von WeiDU nutzen (z.B. "BIT0 | BIT1 | BIT2" für die ersten drei gesetzten Bits). Ansonsten kannst du auch die Uhrzeit in NI konfigurieren und dann die Darstellung des Felds als Dezimalzahl (oder Hexadezimalzahl) auswählen. Dieser Wert kann dann für "fj_schedule" benutzt werden.

Übrigens, die Binärdarstellung in NI wird byteweise gruppiert und angezeigt. Da kommt dann noch die systemspezifische Byte-Reihenfolge von Multibyte-Werten ins Spiel. Da die Infinity Engine "little-endian" nutzt, müssen die Binärgruppen in umgekehrter Reihenfolge zusammengesetzt werden (z.b. die Bitgruppe "11111111 00000000" in NI wird zu "0b0000000011111111" in der Binärdarstellung im WeiDU Code).

Ich sehe auch noch einen Syntaxfehler im Code. Der erste Wert für "fj_schedule" beinhaltet ein "0b" zu viel.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.303
Ich sehe auch noch einen Syntaxfehler im Code. Der erste Wert für "fj_schedule" beinhaltet ein "0b" zu viel.
Ist korrigiert.
Übrigens, die Binärdarstellung in NI wird byteweise gruppiert und angezeigt. Da kommt dann noch die systemspezifische Byte-Reihenfolge von Multibyte-Werten ins Spiel. Da die Infinity Engine "little-endian" nutzt, müssen die Binärgruppen in umgekehrter Reihenfolge zusammengesetzt werden (z.b. die Bitgruppe "11111111 00000000" in NI wird zu "0b0000000011111111" in der Binärdarstellung im WeiDU Code).
Das war es! Jetzt funktioniert es. :)
Nein, muss es nicht. Das Feld für Uhrzeit ist auch nur ein gewöhnlicher numerischer Wert. Die Binärdarstellung hilft nur beim Leseverständnis. Für noch mehr Leseverständnis könnte man auch die Bitkonstanten von WeiDU nutzen (z.B. "BIT0 | BIT1 | BIT2" für die ersten drei gesetzten Bits). Ansonsten kannst du auch die Uhrzeit in NI konfigurieren und dann die Darstellung des Felds als Dezimalzahl (oder Hexadezimalzahl) auswählen. Dieser Wert kann dann für "fj_schedule" benutzt werden.
Das wusste ich auch nicht. Danke!

Vielen Dank für deine Hilfe!
 
Oben