Jump to content

Removing actors from .are files - compatibility?


jastey

Recommended Posts

Hi, if I use this to remove a cre from an are file:

 

COPY_EXISTING ~AR8009.ARE~ ~override~
PATCH_IF (SOURCE_SIZE > 0x11b) BEGIN
READ_SHORT 0x54 "JA#OFF_ACT"
WRITE_LONG "JA#OFF_ACT" + (0x110 * 15) + 0x38 0x00000000 //Remove Phandalyn
END
BUT_ONLY

 

is there the risk that the offsets (or whatever) are wrong if another mod added a custom cre to this area before my mod gets installed? Differently phrased: Is this syntax compatible in all cases or do I risk messing the are in some way / removing the wrong cre etc.?

 

(Code is taken from Jarl's Adventure Pack, I am evaluating compatibility. No intend to put blame or patronize)

Link to comment

Hi, if I use this to remove a cre from an are file:

 

COPY_EXISTING ~AR8009.ARE~ ~override~

PATCH_IF (SOURCE_SIZE > 0x11b) BEGIN

READ_SHORT 0x54 "JA#OFF_ACT"

WRITE_LONG "JA#OFF_ACT" + (0x110 * 15) + 0x38 0x00000000 //Remove Phandalyn

END

BUT_ONLY

 

is there the risk that the offsets (or whatever) are wrong if another mod added a custom cre to this area before my mod gets installed? Differently phrased: Is this syntax compatible in all cases or do I risk messing the are in some way / removing the wrong cre etc.?

 

(Code is taken from Jarl's Adventure Pack, I am evaluating compatibility. No intend to put blame or patronize)

My concern is that Phandalyn is that over-vigilant paladin in Baldur's Gate who reacts to evil party members. At least two mods use this character in their plot. Removing such vanilla creatures creates issues. Jarl's removal of creatures already created mod incompatibilities.

Otherwise a safe way would be to give him a script name and remove him via area script.

Link to comment

jastey, do you really need to remove the cre from the are, or simply disable it for a while?

 

I used a code to disable the 6 paladins when you enter Winsdpear Hill and re-able them once you have finished a new quest for the fairy Queen Vaelasa. Otherwise the Firkraag quest timer would have not allowed CHARNAME to perform my own quest.

If you need it, I can share it with pleasure.

Link to comment

Gwendolyne: The above syntax is for BG1 part, though, I think (and from Jarl's mod). But I'd be very interested in your code for anything Windspear Hill-related, just to make sure the Ajantis start quest makes sense. I do not change the knights in the Windspear Hills but the Ajantis mod changes the dropped dead bodies (to be able to remove them) and detects the knight's death (to trigger a mod event). I'm very interested in making this compatible in case there is a problem.

 

Roxanne: I do see the problem. Jarl's mod places the PHANDA.CRE into Elfsong tavern but gives him a cutsom script name.

 

Do you have other reports about incompatibilities? I still haven't given up hope to turn Jarl's very nice additions into something compatible. It's not so easy, though, as the mod prefers to edit .are files directly and makes use of ALTER_TRANS a lot.

 

(I'd still be interested in my original question from someone who can read this READ_SHORT WRITE_LONG language.)

Link to comment

Hi, if I use this to remove a cre from an are file:

 

COPY_EXISTING ~AR8009.ARE~ ~override~

PATCH_IF (SOURCE_SIZE > 0x11b) BEGIN

READ_SHORT 0x54 "JA#OFF_ACT"

WRITE_LONG "JA#OFF_ACT" + (0x110 * 15) + 0x38 0x00000000 //Remove Phandalyn

END

BUT_ONLY

 

is there the risk that the offsets (or whatever) are wrong if another mod added a custom cre to this area before my mod gets installed? Differently phrased: Is this syntax compatible in all cases or do I risk messing the are in some way / removing the wrong cre etc.?

 

(Code is taken from Jarl's Adventure Pack, I am evaluating compatibility. No intend to put blame or patronize)

While it's unlikely that someone is going to insert an actor into the file and this would work just fine, it's a little safer to loop through the actors:

COPY_EXISTING ~ar8009.are~ ~override~
  READ_LONG  0x54 actor_off
  READ_SHORT 0x58 actor_num
  FOR (index = 0 ; index < actor_num ; ++index) BEGIN
    READ_ASCII (actor_off + 0x80 + (index * 0x110)) cre_file
    PATCH_IF ("%cre_file%" STRING_COMPARE_CASE "phanda" = 0) BEGIN // phandalyn's creature file
      WRITE_LONG (actor_off + 0x38 + (index * 0x110)) 0
    END
  END
  BUT_ONLY

... but I'll second Roxanne and Gwendolyn--try to only temporarily disable him just long enough for your mod to do what it needs to do. You could respawn him via the area script later, or even skip the area file modifications altogether by having his script activate/deactivate him as needed.

Link to comment

... but I'll second Roxanne and Gwendolyn--try to only temporarily disable him just long enough for your mod to do what it needs to do. You could respawn him via the area script later, or even skip the area file modifications altogether by having his script activate/deactivate him as needed.

My suggestion would be to disable the other actors via an area script after something happens, and then after that the area script would re-enable the actors back to the area. I myself might use the move_to_area to do this kinda stuff.
Link to comment

I know for sure that Sirene NPC interacts with Phandalyn and also Jen'lig (from my own EET mod). Furthermore there is another guy in the Inn near the Ducal Palace who makes references to Phandalyn and triggers some party dialogues.

Removing Phandalyn makes all of that obsolete (maybe other stuff I do not know as well.)

 

As for Jarl - yes he replaces some vanilla NPCs by mod NPCs with different script names. He also removes somebody from the Friendly Arm and other things I do not remember right away. There was some compatibility analysis done a while back for BGT, I cannot say if this is still valid.

 

There is also a mod in BG2 which removes such a prominent NPC as Pip in a council members house and thus makes other mods fail. I quote this just as an example that removing vanilla NPCs can do more harm than just changing the .are file. But probably you have good reason to do so.

Link to comment

Gwendolyne: The above syntax is for BG1 part, though, I think (and from Jarl's mod). But I'd be very interested in your code for anything Windspear Hill-related, just to make sure the Ajantis start quest makes sense. I do not change the knights in the Windspear Hills but the Ajantis mod changes the dropped dead bodies (to be able to remove them) and detects the knight's death (to trigger a mod event). I'm very interested in making this compatible in case there is a problem.

 

 

I understood well your coding was for BG1 but I think the principles are the same. ;)

 

First of all, I checked in about 500 mods all the references to PALKNI01_5, AR1200.are and AR1200.bcs to be sure my code would not break anything. Then :

LAM ~GW_DEF_AREA_OFFSETS~                                                // Macro defining the offsets of all area elements.

COPY_EXISTING ~AR1200.are~ ~override/GW1200.are~
    PATCH_IF (SOURCE_SIZE > GW_area_min_size) THEN BEGIN
        LPF ~GW_READ_AREA_STRUCTURE~ RET GW_actor_num GW_actor_off END    // I read the needed offsets value.
        FOR (i = 0 ; i < GW_actor_num ; ++i) BEGIN
            SET exists_cre        = 0
            SET index_to_delete    = 0
            READ_ASCII ("%GW_actor_off%" + 0x80 + ("%GW_act_size%" * i)) "GW_Cre_file"
            PATCH_MATCH "%GW_Cre_file%" WITH
                PALKNI01 BEGIN    index_to_delete = i
                                exists_cre = 1
                                READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI01_X
                                READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI01_Y
                                READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI01_F END
                PALKNI02 BEGIN    index_to_delete = i
                                exists_cre = 1
                                READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI02_X
                                READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI02_Y
                                READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI02_F END
                PALKNI03 BEGIN    index_to_delete = i
                                exists_cre = 1
                                READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI03_X
                                READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI03_Y
                                READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI03_F END
                PALKNI04 BEGIN    index_to_delete = i
                                exists_cre = 1
                                READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI04_X
                                READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI04_Y
                                READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI04_F END
                PALKNI05 BEGIN    index_to_delete = i
                                exists_cre = 1
                                READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI05_X
                                READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI05_Y
                                READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI05_F END
                DEFAULT
            END
            PATCH_IF (exists_cre = 1) BEGIN            // If the creature exists in are file, I delete it.
                LPF fj_are_structure INT_VAR fj_delete_mode = index_to_delete STR_VAR fj_structure_type = actor END
                SET i = 0 - 1                        // index reinitialization (we have deleted one actor).
                READ_SHORT GW_act_nb "GW_actor_num"
            END
        END    // of looping through actors
    END        // of PATCH_IF (SOURCE_SIZE > GW_area_min_size)

BUT_ONLY

with those libraries I wrote because I was fed up with finding the right value of each offset in every line of code:

 

 

 

/* ================================================================ *
 * MACRO GW_DEF_AREA_OFFSETS : DEFINE general offsets in ARE. files *
 * ---------------------------------------------------------------- *
 * Used by 290_Cartes.tph & by function GW_READ_AREA_STRUCTURE.     *
 * ================================================================ */

DEFINE_ACTION_MACRO ~GW_DEF_AREA_OFFSETS~
BEGIN

    OUTER_SET GW_area_min_size    = 0x11b    // Area minimum size
    OUTER_SET GW_are_flag1_of    = 0x14     // Area flag (AREAFLAG.IDS) = bit 0: Save allowed - bit 1: Tutorial area (not BG1) - bit 2: Dead magic zone - bit 3: Dream
    OUTER_SET GW_are_flag2_of    = 0x48     // Area flags (AREATYPE.IDS) = bit 0: Outdoor - bit 1: Day/night - bit 2: Weather - bit 3: City - bit 4: Forest - bit 5: Dungeon - bit 6: Extended night - bit 7: Can rest indoors
    OUTER_SET GW_act_of            = 0x54     // Offset to actors
    OUTER_SET GW_act_nb            = 0x58    // Count of actors
    OUTER_SET GW_act_size        = 0x110    // Size of actors cection
    OUTER_SET GW_reg_nb            = 0x5a    // Count of regions
    OUTER_SET GW_reg_of            = 0x5c    // Offset to regions
    OUTER_SET GW_reg_size        = 0xc4    // Size of regions section
    OUTER_SET GW_reg_text_of    = 0x64     // Offset to Information text (for info points)
    OUTER_SET GW_spa_of            = 0x60    // Offset to spawn points
    OUTER_SET GW_spa_nb            = 0x64    // Count of spawn points
    OUTER_SET GW_spa_size        = 0xc8    // Size of spawn points section
    OUTER_SET GW_ent_of            = 0x68    // Offset to entrances
    OUTER_SET GW_ent_nb            = 0x6c    // Count of entrances
    OUTER_SET GW_ent_size        = 0x68    // Size of entrances section
    OUTER_SET GW_con_of            = 0x70    // Offset to containers
    OUTER_SET GW_con_nb            = 0x74    // Count of containers
    OUTER_SET GW_con_size        = 0xc0    // Size of containers section
    OUTER_SET GW_con_string_of    = 0x84    // Offset to Lockpick string
    OUTER_SET GW_itm_nb            = 0x76    // Count of items
    OUTER_SET GW_itm_of            = 0x78    // Offset to items
    OUTER_SET GW_itm_size        = 0x14    // Size of items section
    OUTER_SET GW_ver_of            = 0x7c    // Offset to vertices
    OUTER_SET GW_ver_nb            = 0x80    // Count of vertices
    OUTER_SET GW_ver_size        = 0x4    // Size of vertices section                    - size of one set of X, Y coordinates
    OUTER_SET GW_amb_nb            = 0x82    // Count of ambients
    OUTER_SET GW_amb_of            = 0x84    // Offset to ambients
    OUTER_SET GW_amb_size        = 0xd4    // Size of ambients section
    OUTER_SET GW_var_of            = 0x88    // Offset to variables                        - not used in PS:T
    OUTER_SET GW_var_nb            = 0x8c    // Count of variables                        - not used in PS:T
    OUTER_SET GW_var_size        = 0x54    // Size of variables section                - not used in PS:T ou 0x50 IESPD
/*    0x0090     2 (word)     Offset to tiled object flags
    0x0092     2 (word)     Count of tiled object flags
    OUTER_SET GW_til_flag_of    = 0x90    // Offset to tiled object flags
    OUTER_SET GW_til_flag_nb    = 0x92    // Count of tiled object flags */
    OUTER_SET GW_are_sc            = 0x94    // Area script
/*    0x009c     4 (dword)     Size of explored bitmask */
    OUTER_SET GW_exp_of            = 0xa0    // Offset to explored bitmask                - no count, offset only
    OUTER_SET GW_exp_size        = 0x0    // Size of explored bitmask section            - not applicable    - no count, offset only
    OUTER_SET GW_dor_nb            = 0xa4    // Count of doors
    OUTER_SET GW_dor_of            = 0xa8    // Offset to doors
    OUTER_SET GW_dor_size        = 0xc8    // Size of doors section
    OUTER_SET GW_dor_string_of    = 0x98    // Offset to Lockpick string
    OUTER_SET GW_ani_nb            = 0xac    // Count of animations
    OUTER_SET GW_ani_of            = 0xb0    // Offset to animation
    OUTER_SET GW_ani_size        = 0x4c    // Size of animations section
    OUTER_SET GW_til_nb            = 0xb4    // Count of tiled objects                    - not used in PS:T
    OUTER_SET GW_til_of            = 0xb8    // Offset to tiled objects                    - not used in PS:T
    OUTER_SET GW_til_size        = 0x6c    // Size of tiled objects section 0            - not used in PS:T
    OUTER_SET GW_sng_of            = 0xbc    // Offset to song entries                    - no count, offset only
    OUTER_SET GW_sng_size        = 0x90    // Size of songs section                    - no count, offset only
    OUTER_SET GW_res_of            = 0xc0    // Offset to rest interruptions                - no count, offset only
    OUTER_SET GW_res_size        = 0xe4    // Size of rest interruptions                - no count, offset only
    OUTER_SET GW_not_of            = 0xc4    // Offset of the automap notes section        - not used in PS:T : 0xFFFFFFFF
    OUTER_SET GW_not_nb            = 0xc8    // Count of the automap notes section        - not used in PS:T
    OUTER_SET GW_not_size        = 0x34    // Size of  Automap notes section            - not used in PS:T
    OUTER_SET GW_PjT_of            = 0xcc    // Offset to the Projectile Traps section    - only used in BG2?
    OUTER_SET GW_PjT_nb            = 0xd0    // Count of the Projectile Traps section    - only used in BG2?
    OUTER_SET GW_PjT_size        = 0x1a    // Size of Projectile Traps section            - only used in BG2? ou 0x1C IESDP
    OUTER_SET GW_rest_movD_of    = 0xd4    // BG2: ToB - Rest movie (day)
    OUTER_SET GW_rest_movN_of    = 0xdc    // BG2: ToB - Rest movie (night)

END    // of DEFINE_ACTION_MACRO


/* ========================================================================== *
 * FONCTION GW_READ_AREA_STRUCTURE : READ the value of the ARE needed offsets *
 * -------------------------------------------------------------------------- *
 * Used by 290_Cartes.tph from macro GW_DEF_AREA_OFFSETS.                     *
 * ========================================================================== */

DEFINE_PATCH_FUNCTION ~GW_READ_AREA_STRUCTURE~
//    STR_VAR GW_area = ""    // area file ==> unused
    RET    GW_are_flag1        // Area flag (AREAFLAG.IDS) = bit 0: Save allowed - bit 1: Tutorial area (not BG1) - bit 2: Dead magic zone - bit 3: Dream
        GW_are_flag2        // Area flags (AREATYPE.IDS) = bit 0: Outdoor - bit 1: Day/night - bit 2: Weather - bit 3: City - bit 4: Forest - bit 5: Dungeon - bit 6: Extended night - bit 7: Can rest indoors
        GW_actor_num        // Count of actors
        GW_actor_off        // Offset to actors
        GW_region_num        // Count of regions
        GW_region_off        // Offset to regions
        GW_spawn_off        // Offset to spawn points
        GW_spawn_num        // Count of spawn points
        GW_ent_off            // Offset to entrances
        GW_ent_num            // Count of entrances
        GW_cont_off            // Offset to containers
        GW_cont_num            // Count of containers
        GW_item_num            // Count of items
        GW_item_off            // Offset to items
        GW_vert_off            // Offset to vertices
        GW_vert_num            // Count of vertices
        GW_amb_num            // Count of ambients
        GW_amb_off            // Offset to ambients
        GW-var-off            // Offset to variables                        - not used in PS:T
        GW_var_num            // Count of variables                        - not used in PS:T
        GW_are_script        // Area script
//        GW_explo_off        // Offset to explored bitmask                - no count, offset only
        GW_door_num            // Count of doors
        GW_door_off            // Offset to doors
        GW_anim_num            // Count of animations
        GW_anim_off            // Offset to animation
        GW_tiles_num        // Count of tiled objects                    - not used in PS:T
        GW_tiles_off        // Offset to tiled objects                    - not used in PS:T
        GW_song_off            // Offset to song entries
        GW_rest_off            // Offset to rest interruptions
        GW_notes_off        // Offset of the automap notes section        - not used in PS:T : 0xFFFFFFFF
        GW_notes_num        // Count of the automap notes section        - not used in PS:T
        GW_ProjTp-off        // Offset to the Projectile Traps section    - only used in BG2?
        GW_ProjTp-num        // Count of the Projectile Traps section    - only used in BG2?
        GW_movieD            // BG2: ToB - Rest movie (day)
        GW_movieN            // BG2: ToB - Rest movie (night)
BEGIN

    READ_LONG  GW_are_flag1_of "GW_are_flag1"    // Area flag (AREAFLAG.IDS) = bit 0: Save allowed - bit 1: Tutorial area (not BG1) - bit 2: Dead magic zone - bit 3: Dream
    READ_SHORT GW_are_flag2_of "GW_are_flag2"    // Area flags (AREATYPE.IDS) = bit 0: Outdoor - bit 1: Day/night - bit 2: Weather - bit 3: City - bit 4: Forest - bit 5: Dungeon - bit 6: Extended night - bit 7: Can rest indoors
    READ_LONG  GW_act_of "GW_actor_off"            // Offset to actors
    READ_SHORT GW_act_nb "GW_actor_num"            // Count of actors
    READ_SHORT GW_reg_nb "GW_region_num"        // Count of regions
    READ_LONG  GW_reg_of "GW_region_off"        // Offset to regions
    READ_LONG  GW_spa_of "GW_spawn_off"            // Offset to spawn points
    READ_LONG  GW_spa_nb "GW_spawn_num"            // Count of spawn points
    READ_LONG  GW_ent_of "GW_ent_off"            // Offset to entrances
    READ_LONG  GW_ent_nb "GW_ent_num"            // Count of entrances
    READ_LONG  GW_con_of "GW_cont_off"            // Offset to containers
    READ_SHORT GW_con_nb "GW_cont_num"            // Count of containers
    READ_SHORT GW_itm_nb "GW_item_num"            // Count of items
    READ_LONG  GW_itm_of "GW_item_off"            // Offset to items
    READ_LONG  GW_ver_of "GW_vert_off"            // Offset to vertices
    READ_SHORT GW_ver_nb "GW_vert_num"            // Count of vertices
    READ_SHORT GW_amb_nb "GW_amb_num"            // Count of ambients
    READ_LONG  GW_amb_of "GW_amb_off"            // Offset to ambients
    READ_LONG  GW_var_of "GW-var-off"            // Offset to variables                        - not used in PS:T
    READ_LONG  GW_var_nb "GW_var_num"            // Count of variables                        - not used in PS:T
    READ_ASCII GW_are_sc "GW_are_script" (8)    // Area script
//    READ_LONG  GW_exp_of "GW_explo_off"            // Offset to explored bitmask                - no count, offset only
//    SET GW_explo_num    = 1                        // Only 1 Explored Bitmap section per area    - This isn't really needed.
    READ_LONG  GW_dor_nb "GW_door_num"            // Count of doors
    READ_LONG  GW_dor_of "GW_door_off"            // Offset to doors
    READ_LONG  GW_ani_nb "GW_anim_num"            // Count of animations
    READ_LONG  GW_ani_of "GW_anim_off"            // Offset to animation
    READ_LONG  GW_til_nb "GW_tiles_num"            // Count of tiled objects                    - not used in PS:T
    READ_LONG  GW_til_of "GW_tiles_off"            // Offset to tiled objects                    - not used in PS:T
//    SET GW_song_num        = 1                        // Only 1 song section per area                - This isn't really needed.
    READ_LONG  GW_sng_of "GW_song_off"            // Offset to song entries
//    SET GW_rest_num        = 1                        // Only 1 rest section per area                - This isn't really needed.
    READ_LONG  GW_res_of "GW_rest_off"            // Offset to rest interruptions
    READ_LONG  GW_not_of "GW_notes_off"            // Offset of the automap notes section        - not used in PS:T : 0xFFFFFFFF
    READ_LONG  GW_not_nb "GW_notes_num"            // Count of the automap notes section        - not used in PS:T
    READ_LONG  GW_PjT_of "GW_ProjTp-off"        // Offset to the Projectile Traps section    - only used in BG2?
    READ_LONG  GW_PjT_nb "GW_ProjTp-num"        // Count of the Projectile Traps section    - only used in BG2?
    READ_ASCII GW_rest_movD_of "GW_movieD" (8)    // BG2: ToB - Rest movie (day)
    READ_ASCII GW_rest_movN_of "GW_movieN" (8)    // BG2: ToB - Rest movie (night)

END    // of DEFINE_PATCH_FUNCTION

 

 

 

Then, the paladins only appear in AR1200 once you have spoke to Firkraag.

<<<<<<<< .../Diamant_Eternel/inlined/GWCL1200.baf
IF
  Global("GWCLTalkedtoFirkraag","GLOBAL",1)        // Variable added to FIRKRA01.dlg
  Global("GWCL1200PaladinsSpawn","AR1200",0)
THEN
  RESPONSE #100
    SetGlobal("GWCL200PaladinsSpawn","AR1200",1)
    CreateCreature("PALKNI01",[%PALKNI01_X%.%PALKNI01_Y%],%PALKNI01_F%)
    CreateCreature("PALKNI02",[%PALKNI02_X%.%PALKNI02_Y%],%PALKNI02_F%)
    CreateCreature("PALKNI03",[%PALKNI03_X%.%PALKNI03_Y%],%PALKNI03_F%)
    CreateCreature("PALKNI04",[%PALKNI04_X%.%PALKNI04_Y%],%PALKNI04_F%)
    CreateCreature("PALKNI05",[%PALKNI05_X%.%PALKNI05_Y%],%PALKNI05_F%)
    Continue()
END
>>>>>>>>
ACTION_IF FILE_EXISTS_IN_GAME ~AR1200.bcs~ THEN BEGIN
    EXTEND_TOP ~AR1200.bcs~ ~.../Diamant_Eternel/inlined/GWCL1200.baf~ EVALUATE_BUFFER
END ELSE BEGIN
    COMPILE EVALUATE_BUFFER ~.../Diamant_Eternel/inlined/GWCL1200.baf~ ~override/AR1200.bcs~
END

The result in game: when you quit Irenicus Lair, a textscreen warns CHARNAME that the Dryad quest is the highest priority. If you go there before having spoken to Firkraag, you won't be welcomed by the paladins and can bring the acorn to Vaelasa who will propose you a new quest. One it is done, the paladins will appear where they were supposed to be if you speak to Firkraag.

 

If you don't want to delete the creatures, you can change the lines

          LPF fj_are_structure INT_VAR fj_delete_mode = index_to_delete STR_VAR fj_structure_type = actor END
          SET i = 0 - 1                        // index reinitialization (we have deleted one actor).
          READ_SHORT GW_act_nb "GW_actor_num"

with the code provided by CamDawg or with this

          LPF fj_are_structure INT_VAR fj_expiry = 0 STR_VAR fj_structure_type = actor fj_cre_resref = EVAL "%GW_Cre_file%" END
Link to comment

Thank you for your answers.

 

Yes, I agree that it's bad for compatibility. All I am doing currently is updating Jarl's mod with an English translation and am planning to do bugfixes. I was also planning on scripting it more compatible but this would be a lot of work so I am not sure I'll do that. Jarl's mod also adds actors by patching are files, and also inserts trigger points but not by fj_are_structure but handmade macros. I don't think I have the motivation to update that, especially since I am not sure I understand everything that's done.

 

Gwendolyn: In Ajantis I am doing REPLACE_TEXTUALLY in the AR1200.bcs to replace the general "deadb01" with custom dead bodies that have unique script names. For Ajantis, the PC would kill the knights first, then enter Firkraag's lair, get the portral, and free the knights. With your mod installed, the PC would first get the portal, free the (real) knights, and then have the fight in the Windspear Hills - this doesn't make sense, so we have a compatibility problem. Why do you need the PC to talk to Fierkraag first?

Link to comment

Yes, I agree that it's bad for compatibility. All I am doing currently is updating Jarl's mod with an English translation and am planning to do bugfixes.

If that's the case... do you have the files in a access-able place, so people can look at them ? Not that I would do it, but someone of the other people in this thread could look at them, thinker along and so forth.
Link to comment

Gwendolyn: In Ajantis I am doing REPLACE_TEXTUALLY in the AR1200.bcs to replace the general "deadb01" with custom dead bodies that have unique script names. For Ajantis, the PC would kill the knights first, then enter Firkraag's lair, get the portral, and free the knights. With your mod installed, the PC would first get the portal, free the (real) knights, and then have the fight in the Windspear Hills - this doesn't make sense, so we have a compatibility problem. Why do you need the PC to talk to Fierkraag first?

 

Argh...

The first part (removing the paladins) seems to be compatible. I will have a look at your code and see if it is possible to add in my script one of your variables that would prevent the paladins spawning if your mod is installed.

 

I need to disable them because of the timer before the death of Windspear child that is not compatible with my own timer to rescue a unicorn in Umar Hill.

Link to comment

(But if your timer starts after talking to Fierkraag, Garren's child is already rescued?... ) Disabling the normal game event just doesn't sound like the simplest option but rather like a can of worms, compatibility-wise, especially since the first meeting dialogue with Fiejraag is about the deceit he played? Does your mod change all that?

 

It is definitely not compatible with the order of occurrances I have in mind for the Ajantis mod. -I'll think about it. I could move the person who hands over the portable portal so he spawns more or less directly after the knight incident. It would leave the question about what will happen to all the "what did you do to my fiancé" reply options I put into the dialogue with Firkraag. What changes does your mod do to Fierkraag's dialogue?

 

What do you mean you want to add one of my variables to prevent the paladins spawning if my mod is installed, or do I get that sentence wrong?

Link to comment

I mean if I let the events as they should occur when you first enter AR1200, without Ajantis installed, you must fight the polymorphed paladins, then meet Garren and see its child kidnapped. Then a time counter starts. My mod introduces another counter once you give back the acorn to the fairy queen. And it is impossible to fulfill the two quests without sacrificing one of them. That's the reason why I disabled the fight against the paladins when you enter AR1200.

 

The only thing I added to Firkra01.dlg is

ADD_TRANS_ACTION FIRKRA01 BEGIN 0 END BEGIN END ~SetGlobal("GWCLTalkedtoFirkraag","GLOBAL",1)~

and I wrote in the readme that you must go to Windspear Hill as soon as possible without speaking to Firkraag in the Copper Coronet.

 

I had a quick look at your code and maybe those variables could be used not to spawn again the paladins:

      SetGlobal("C#AjantisKoerperEingesammelt","GLOBAL",2)
      SetGlobal("C#AjantisPCInWindspeerHills","GLOBAL",1)

But the best is to install your mod and mine and see what happens, then find a way to make them compatible.

I will let you know when I find a solution. It would be very shameful if I released something incompatible. ;)

 

And if I can't find one, I will change my dialogs and write something with no immediate urgency.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...