Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Axis & Allies 1942 Online is now available in Early Access! Buy it on Steam. The FAQ is available.
New Premium Module: Tyrants of the Moonsea! Read More
Attention, new and old users! Please read the new rules of conduct for the forums, and we hope you enjoy your stay!

Siege of Dragonspear: Indecisive Thieves

ThacoBellThacoBell Member Posts: 9,570
Made it to SoD for the first time in the new patch, and something odd is happening. Every single thief character (excpet my charname, oddly) refuses to detect traps. It blinks on and offevery round, and makes it impossible to detect anything. This happens even with all AI turned off. And whenever the ability switches, the character stops whatever else they were doing, like walking. My charname is does not have points in detect traps so this is a little problematic. I'm playing BG1+SoD on PC, but this issue never arose in the BG1 portion. Only after getting transferred to SoD did this happen. I'm using mods, but my mod list changes very little, if at all, between playthoughs, and I've never seen this before.

Comments

  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 18,857
    The zip you have attached doesn't contain all the needed files:

    BALDUR.bmp
    PORT0.bmp
    PORT1.bmp
    PORT2.bmp
    PORT3.bmp
    PORT4.bmp
    PORT5.bmp

    typo_tilly
  • ThacoBellThacoBell Member Posts: 9,570
    Uh, where are those files located? I zipped up my save.

  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 18,857
    Then there's something wrong with your save, if those 2 files are the only files in your save. It might explain what is happening. Are you sure your game is verified?

  • ThacoBellThacoBell Member Posts: 9,570
    What do you mean by verified? Here's the entire sod save directory, if that helps.

  • ThacoBellThacoBell Member Posts: 9,570
    Is my runthrough just borked?

  • BubbBubb Member Posts: 677
    edited November 2018
    @ThacoBell: Julius is correct that every single one of your save games is missing the BMP files... which is weird. However, all of the game's actual data is stored in the two files that are there, so those files being gone really won't affect anything.

    When I load up your game everything is fine, though it does take an abnormally long time to load. The GAM file is around 6 times larger than they normally are... and Near Infinity stutters like hell trying to read it. At first glance I can't see anything obviously wrong, but the bloated file size and long loading times seems to suggest some corruption somewhere.

    What mods were you using, out of curiosity? If you could upload your WeiDU.log it would be helpful :)

    Edit: Scratch the corruption idea; the large file size is simply from what I believe is Might and Guile adding 500+ effects to certain NPCs.

    Post edited by Bubb on
    ThacoBell
  • ThacoBellThacoBell Member Posts: 9,570
    Sure, I don't know why it would be acting weird, and it loads almost instantly for me. Maybe I should repair my install?

  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 18,857
    Yes, please, try to repair your install. This is what I meant by "verify" the game: make a clean install, please, and test.

    ThacoBell
  • ThacoBellThacoBell Member Posts: 9,570
    edited November 2018
    I've done a clean re-install and the detect traps stuttering is still happening.

    *edit*

    Aw crap, its a mod.

    *edit*
    And its not the one new mod I was trying out. Sigh.

  • ThacoBellThacoBell Member Posts: 9,570
    Ever since patch 2.5, all of my saves lack the screenshot in the little box. It happens even without mods. So something isn't installing correctly.

  • ThacoBellThacoBell Member Posts: 9,570
    Found the problem. It only happend to be my favorite mod. Should I make a separate topic for the missing files in my savegames?

  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 18,857
    @ThacoBell Now when you've defined that this is a mod (just as I thought), please follow up with the mod maker (s) about this issue.

  • ArthasArthas Member Posts: 957
    edited November 2018
    Would you kindly tell the name of the mod instead of calling "the mod", "my preferite mod", etc etc?

    Ludwig_II
  • ThacoBellThacoBell Member Posts: 9,570
  • BubbBubb Member Posts: 677
    @ThacoBell: A little later, I know. I saw you poking around, and I thought I'd look at it again. I can't track it down to Might and Guile though; I simply can't get it to happen, even if I follow your install to a T.

    If you want to keep troubleshooting it here, you can install the attached mod, selecting the "Without the G3'BGII Fixpack" option. The mod will pop up above a creature's head the script block they are currently running. The script that appears when detect traps turns off should be the culprit...

    If you could, please attach the offending script so I can look at it :)

    Or, if you don't want to continue here, just tell me to shut up and I'll get out of your hair, :lol:

    Credit goes to the respective authors for the troubleshooting mod, I only edited it slightly to display the script block over the respective creature instead of Player1.

    JuliusBorisovThacoBell
  • ThacoBellThacoBell Member Posts: 9,570
    @Bubb The thing is, I KNOW its MG. I ran a complete fresh install, and everything works. I install JUST MG, and the script wonkiness starts up immediately. If its something that wants to happen just to me for whatever reason, well crap.

  • ThacoBellThacoBell Member Posts: 9,570
    @Bubb Okay I went ahead and ran it and this is what I get, "Running Block 122 of BDGLINTC.BCS"

    Oh wait, there's more than one. "Running Block 3 of DPLAYER2.BCS"

    It looks like Block 3 is running first, followed by block 122.

    Bubb
  • BubbBubb Member Posts: 677
    @ThacoBell: BDGLINTC is his Advanced AI script, and since you said it happens even with Party AI off, that shouldn't be the culprit, (though, it running when nothing is happening is weird). DPLAYER2, on the other hand, should not be running constantly.

    Could you zip up those two files out of your override folder and attach it here? I don't know what those blocks are without looking at the files themselves :)

  • ThacoBellThacoBell Member Posts: 9,570
  • BubbBubb Member Posts: 677
    @ThacoBell: I got it. DPLAYER2 really wants party members in SoD to have a specifics value of NORMAL, while Might and Guile sets the value to D5_NO_UMD to prevent certain characters from using scrolls / wands.

    I've attached a fixed version of DPLAYER2 which should prevent the offending block from changing the Specifics value... There might be side effects in the SoD AI, because your Specifics value isn't what it expects it to be, but I believe this is the best I can do.

    You should uninstall the debug mod, and then drop the attached file into your override. :)

    typo_tillyThacoBell
  • ThacoBellThacoBell Member Posts: 9,570
    @Bubb many thanks!

    @subtledoctor You may find this useful.

  • ArdanisArdanis Member Posts: 1,638
    edited December 2018
    DPLAYER2 sets specifics to clear whatever values party members may have been assigned by SoD's main plot scripts. Basically it's just to avoid interaction with SoD's AI system (see BDSHOUT for what specifics it uses) - I don't think it really was happening, so it's more like a precaution.

    typo_tilly
  • subtledoctorsubtledoctor Member Posts: 11,217
    Ardanis said:

    DPLAYER2 sets specifics to clear whatever values party members may have been assigned by SoD's main plot scripts. Basically it's just to avoid interaction with SoD's AI system (see BDSHOUT for what specifics it uses) - I don't think it really was happening, so it's more like a precaution.

    Shouldn't that just happen once, upon joining the party, rather than constantly every few seconds? Couldn't it set a local variable once done, so it doesn't keep doing it?

    For that matter, rather than forcing the value to NORMAL, shouldn't it set it to NORMAL only if it is set to some particular value that would interact with SoD AI? Seems like it would be easy enough to include more specific conditions in the trigger...

    typo_tilly
  • ArdanisArdanis Member Posts: 1,638
    edited December 2018
    Shouldn't that just happen once, upon joining the party

    You mean injecting it into every JoinParty() action block, and missing some, instead of doing it at the bottleneck point? My experience with setting up the go-to-camp routine, which had to be done manually, says it's a pretty bad idea and should be avoided if possible :)

    For that matter, rather than forcing the value to NORMAL, shouldn't it set it to NORMAL only if it is set to some particular value that would interact with SoD AI? Seems like it would be easy enough to include more specific conditions in the trigger...

    I said it before, but specifics really shouldn't be used for any purpose other than AI grouping. First, because it's a single field that can contain a single value, so you already have compatibility problem with other mods trying this approach. Second, specifics are coded into InMyGroup() trigger, so it's a good practice to null them when they aren't explicitly needed, instead of keeping track of increasing number of events where they are used and manually confirming there'll be no issues.

    You obviously can edit DPLAYER2 to only run that block when it's using values checked by AI, but I don't exactly feel it's something to fix in the core game, for ease of maintenance as outlined above.

    Note, btw, that kicking NPCs out of party in SoD will put them back into its AI system and set their specifics to 10 (party-friendly ally, see BDPARTY, which is set by DPLAYER2), and it can go on indefinitely. And I think a few times it may be set to something hostile in break-up dialog, though in this case you probably wouldn't have worry much about their scroll usability.

  • ArdanisArdanis Member Posts: 1,638
    Bubb's solution should be fine.

    I'm gonna assume D5_NO_UMD is automatically assigned to free value in specific.ids at install time, so adding this to tp2 should fix the issue:
    COPY_EXISTING dplayer2.bcs override
      DECOMPILE_AND_PATCH BEGIN
        REPLACE_TEXTUALLY ~OR(2)[%LNL%%MNL%%WNL%%TAB% ]+!Specifics(Myself,\(1\|NORMAL\))[%LNL%%MNL%%WNL%%TAB% ]+!Global("bd_joined","locals",0)~
        ~!Specifics(Myself,D5_NO_UMD)
        OR(2)
      	!Specifics(Myself,NORMAL)
    	!Global("bd_joined","locals",0)~
      END
    Based on the stutter, I'm also gonna assume you forcefully set specifics to D5_NO_UMD when character is in party and doesn't have it set, and don't need to keep a track of such character when they're not in party - meaning BDPARTY setting it to 10 shouldn't concern you. If it's not the case, though, let me know - I'll see what can be done.

  • subtledoctorsubtledoctor Member Posts: 11,217
    edited December 2018
    Ardanis said:

    I'm gonna assume D5_NO_UMD is automatically assigned to free value in specific.ids at install time, so adding this to tp2 should fix the issue:

    COPY_EXISTING dplayer2.bcs override
      DECOMPILE_AND_PATCH BEGIN
        REPLACE_TEXTUALLY ~OR(2)[%LNL%%MNL%%WNL%%TAB% ]+!Specifics(Myself,\(1\|NORMAL\))[%LNL%%MNL%%WNL%%TAB% ]+!Global("bd_joined","locals",0)~
        ~!Specifics(Myself,D5_NO_UMD)
        OR(2)
      	!Specifics(Myself,NORMAL)
    	!Global("bd_joined","locals",0)~
      END
    Yes. Thanks for that. I've never really understood what DPLAYER2.BCS is or how it works, so troubleshooting this is hard.
    Ardanis said:

    I'm also gonna assume you forcefully set specifics to D5_NO_UMD when character is in party and doesn't have it set, and don't need to keep a track of such character when they're not in party - meaning BDPARTY setting it to 10 shouldn't concern you. If it's not the case, though, let me know - I'll see what can be done.

    The SPECIFIC value is set to d5_no_umd via spell applied to thieves via their kit abilities tables. I thought that should be fine because 1] such tables are not applied to non-party NPCs (barring SCS*) and 2] SPECIFIC values should not matter for NPCs in the party since they are not subject to AI scripts.

    Obviously I thought wrong. I could/should make the change conditional on some factor(s), but being done through a spell meabs I am limited to conditions that can be defined in splprot.2da.

    * As of SCS v32, spells I add to clab tables no longer need to be evaluated for application to non-joinable NPCs. This means it's feasible to abandon opcode 319 and SPECIFIC values for Use Scrolls, and go back to using opcode 180. The remaining downside there is that opcode 180 doesn't apply red borders to items restricted from use. Which, by the way, what's up with that? I found an old thread from like 2012 in which Beamdog devs mentioned it, and the conclusion seemed to be something like "yeah, items affected by opcode 180 should get red borders" but all this time later, it was never fixed. What's up with that?

  • ArdanisArdanis Member Posts: 1,638
    edited December 2018
    I've never really understood what DPLAYER2.BCS is or how it works, so troubleshooting this is hard.

    A kind of "party" script, one of the few that are set/run via hard code. This is how creature's scripts are adjusted when they join/leave the party:
    // removal from party:
    //
    // OVERRIDE -> // no change
    // CLASS -> NONE
    // RACE -> NONE
    // GENERAL -> WTASIGHT
    // DEFAULT -> // no change

    // joining the party:
    //
    // OVERRIDE -> // no change
    // CLASS -> DEFAULT // i think it's advanced AI now instead...
    // RACE -> NONE
    // GENERAL -> NONE
    // DEFAULT -> DPLAYER2



    The SPECIFIC value is set to d5_no_umd via spell applied to thieves via their kit abilities tables.

    Ah, so it not reset by script then? In that case, if you want to stick to specifics then use this instead of the previous snippet, this should handle the reset if characters leave/rejoin. On your end, the spell in CLAB will need to additionally set the D5_NOUMD local to 1 (opcode 309 only handles up to eight characters as internal effect, if you want the second underscore then use external EFF).
    COPY_EXISTING dplayer2.bcs override
      DECOMPILE_AND_PATCH BEGIN
        REPLACE_TEXTUALLY ~THEN[%WNL%%LNL%%MNL%%TAB% ]+RESPONSE[%TAB% ]+#100[%WNL%%LNL%%MNL%%TAB% ]+ChangeSpecifics(Myself,\(1\|NORMAL\))~
        ~
      !Specifics(Myself,D5_NO_UMD)
      Switch("D5_NOUMD","locals")
    THEN
      RESPONSE #0
        ChangeSpecifics(Myself,NORMAL)
        SetGlobal("bd_joined","locals",0)
        SetGlobal("bd_npc_camp","locals",0)
      RESPONSE #1
        ChangeSpecifics(Myself,D5_NO_UMD)~
      END

    subtledoctor
Sign In or Register to comment.