Jump to content

a.greene

Members
  • Posts

    78
  • Joined

  • Last visited

Posts posted by a.greene

  1. I'm trying to set up a melee hit effect that lowers morale by one with each hit. 

    I'm trying to use opcode 23 but I note in BGEE and BG2EE it's labeled as reset morale while in IWDEE it's labeled as bonus morale.

    According to Nearinfinity  parameter 1 and 2 of opcode 23 are unused in BGEE/BG2E, this I'm unsure how to set it up, any assistance would be appreciated.

    Cheers

    Adam

  2. @jmerry I ended up using the following, although suggestions are always appreciated..

    BEGIN ~Restore Two-Handed Spear Damage (PnP)~
    
    ACTION_IF FILE_EXISTS_IN_GAME ~enginest.2da~ BEGIN
    
    COPY_EXISTING_REGEXP "^.+\.itm" override
    PATCH_IF SOURCE_SIZE > 0x71 BEGIN
    READ_BYTE 0x31 prof
    READ_SHORT 0x1c type
    PATCH_IF (prof = 98) BEGIN	
    LPF ALTER_ITEM_HEADER INT_VAR header_type = 1 dicesize = 8 dicenumber = 1 END
    FOR (index = 0x54 ; index >= 0x50 ; index -= 4) BEGIN
    READ_LONG index valid
    PATCH_IF (valid < 2147483646) AND (valid >= 0) BEGIN
    READ_STRREF index description
    PATCH_IF (~%description%~ STRING_CONTAINS_REGEXP ~1d6~) = 0 BEGIN
    INNER_PATCH_SAVE new_desc ~%description%~ BEGIN
    REPLACE_TEXTUALLY ~1d6~ ~1d8~ END
    SAY_EVALUATED index ~%new_desc%~
    END
    END
    END
    END
    END
    END

     

  3. Good morning I'm trying to increase the damage for all spears from 1d6 to 1d8, for some reason while I'm copying all spears the patch is failing to change the dice size? Any ideas?

    Thank you

    BEGIN ~Restore Two-Handed Spear Damage (PnP)~
    
    ACTION_IF FILE_EXISTS_IN_GAME ~enginest.2da~ BEGIN
    
    COPY_EXISTING_REGEXP ~SPER.*\.ITM~ ~override~
    PATCH_IF SOURCE_SIZE > 0x2d3 BEGIN        
    LPF ALTER_ITEM_HEADER INT_VAR header_type = 1 dicesize = 8 END
    END
    END
  4. I've tried to extended a AR1900.bcs with the following code, but on Tazok's death, Kivan's dialog block is intermittently (unpredictably) being triggered...

    IF
    InParty("Kivan")
    Global("CanKillTazok","GLOBAL",0)
    HasItem("MIHP1","Tazok")
    THEN
    RESPONSE #100
    SetGlobal("CanKillTazok","GLOBAL",1)
    ActionOverride("tazok",DestroyItem("MIHP1"))
    END
    
    IF
    Global("FoughtTazok","GLOBAL",0)
    HPPercentLT("Tazok",50)
    THEN
    RESPONSE #100
    ClearAllActions()
    StartDialogueNoSet([PC])
    END
    
    IF
    InParty("Kivan")
    !Dead("kivan")
    Dead("Tazok")
    Global("TazokDead","GLOBAL",0)
    THEN
    RESPONSE #100
    Wait(2)
    ActionOverride("Kivan",StartDialogueNoSet([PC]))
    SetGlobal("TazokDead","GLOBAL",1)
    END

    I have similarly added the following to Kivan's dialog file

    APPEND ~KIVANJ~
    
    IF WEIGHT #-1 ~
    
    Global("TazokDead","GLOBAL",0)~ 
    THEN BEGIN TazokDead
    SAY #32796 //It is done. Deheriana, amin liy, esta aul i' haly en' Arvandor. May you find peace... and I find acceptance.
    IF ~~ 
    THEN DO ~
    EraseJournalEntry(32894)
    EraseJournalEntry(27212) 
    EraseJournalEntry(32760) 
    AddJournalEntry(%Kivan's bandit hunt 
    Kivan was finally able to avenge his wife. May Deheriana find peace and Kivan find acceptance.%,QUEST_DONE)
    SetGlobal("TazokDead","GLOBAL",1)
    SetGlobal("bd_tazok_dead","AR0125",1)~ 
    EXIT
    END
    END

    I have attached the relevant files for review, any assistance would be greatly appreciated.

    Cheers,

    a.

    Setup-Kivan.tp2 AR1900.baf Kivan.d

  5. 9 hours ago, marchitek said:

    I don't have much experience with CRE files, but I think there is some sort of "death variable" aka "script name" field (offset 0x280), that should be the same for all versions of same being (so to say). For all Kivans CREs you mentioned this field is "KIVAN". So I guess long, but most proper way, would be to check all CREs in game and patch if script name is "KIVAN". At least it seems like good starting point to me. :) 

    ***

    Roughly something like this:

    COPY_EXISTING_REGEXP GLOB ~.+\.CRE~ ~override~
          READ_ASCII DEATHVAR "dv" (32) NULL
          PATCH_IF (~%dv%~ STR_EQ ~KIVAN~) BEGIN
          	// do things here
          END
          BUT_ONLY

    (Prepared based on: https://github.com/K4thos/IE-code-repository/blob/master/joinable_npc_array.tpa )

    Thank you

  6. 14 hours ago, jmerry said:

    Not your attempted regexp, certainly. That's bad syntax; you're using a reserved character in a spot that really needs it escaped. ~kivan.*\.CRE~ would do what you're intending and catch any of kivan.CRE, kivan4.CRE, kivan6.CRE, kivanity.CRE, et cetera. Can you assume that all of those are versions of Kivan? In base BGEE/BG2EE, only the three versions of Kivan start their filenames with kivan, so this comes down to what mods will do.

    Will mods add new creatures associated with Kivan that aren't him but have filenames starting with kivan? Will they add new versions of him that have filenames starting with kivan? If it's the former, then you're better off with the explicit list, unless you have a check somewhere in the patches you run on these. If it's the latter, you're better off with the regexp. Or maybe a mod adds a new version of Kivan that doesn't have a filename starting with kivan, and you want to affect that too - that calls for a third option.

    What sort of third option? Build an array and iterate over it. Run whatever checks you need while you build the array of Kivans, then do an ACTION_PHP_EACH and COPY_EXISTING based on the array elements inside it.

    Thank you

  7. If I wanted to edit all instances of Kivan's creature file would it be best (cleanest) to use:
     

    COPY_EXISTING ~kivan.CRE~ ~override~
                  ~kivan4.CRE~ ~override~
                  ~kivan6.CRE~ ~override~
                                   
    or 
    
    COPY_EXISTING_REGEXP GLOB ~kivan.*.CRE~ ~override~
    
    or
    
    something else?

     

  8. I'm trying to restrict a kensai's ability to use magical items weapons via the following (edited)

    COPY_EXISTING_REGEXP "^.+\.itm" override					
      PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN					
        READ_LONG 0x64 ex_off
        READ_SHORT 0x68 ex_co
        READ_LONG 0x60 enchantment				
        PATCH_IF enchantment > 0 BEGIN						
          READ_BYTE  0x2f "use"
          WRITE_BYTE 0x2f ("%use%" BOR 0b00000100)					
        END
      END

    Would it be possible to use the magical item flag instead of enchantment > 0? If so could someone assist me in re-writing this?

    Thank you

    Cheers,

    a.

  9. 17 minutes ago, subtledoctor said:

    2) You applied a bonus via the "Melee weapon damage modifier" opcode and you are testing with no weapon equipped.

    Well that is annoying but thank you for your reply, I can confirm that even if I add a melee weapon, the bonus damage is still not applied, thus it appears to be your first point around implementation of the EE UI.

  10. I recently edited the SPCL141.spl file and changed THAC0 bonus (278) and Attack damage bonus (73) to Melee THAC0 bonus (284) and Melee weapon damage modifier (285) and subsequently noticed that Melee weapon damage modifier (285) does not display correctly in the inventory screen (see attached), it should display a +2 bonus in the damage field. Interestingly, melee THAC0 bonus displays correctly. 

    1851751850_Meleeweapondamage.thumb.jpg.e8783d649c605d64849ea24cd9525117.jpg

  11. On 1/19/2023 at 10:45 AM, subtledoctor said:

    Would seem wiser to improve the description, rather than change the way the game works when the way it works seems to be a clear design choice.

    (If I was designing this game, all kit abilities would stop at level 20, along with level-dependent spell effects. HLAs are there to provide further development after that. The way the game treats spells and abilities at epic levels is fairly haphazard. But, not necessarily a bug.)

    Playing devils advocate, are we sure that the the description is not actually correct and the CLAB file is incorrect?

×
×
  • Create New...