Skip to content

BG1NPC Bug Report and Discussion Thread

1246735

Comments

  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    The state # in the dialog that the interjection hooks into.

    If you open a dialog in NearInfinity or DLTCEP, you'll see that each line in the dialog file is a "state". The state # is a just an integer index, starting at 0.
    elminster
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25

    The state # in the dialog that the interjection hooks into.

    If you open a dialog in NearInfinity or DLTCEP, you'll see that each line in the dialog file is a "state". The state # is a just an integer index, starting at 0.

    OK, so it doesn't refer to an enumeration somewhere, like "State 8 = Sleepy".
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    No. It's lines of dialog. For example...

    AJANTP, State 0: "No doubt you have returned to your senses and wish to continue our glorious fight against evil! A wise and fortuitous decision."

    AJANTP, State 1: "As it should be! Let us go!"

    etc..
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25
    Oh, neat. Interjection injection. >_> To make a coding joke.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    For a full explanation of how dialog files are structured, take a look at this from the WeiDU README:

    http://www.weidu.org/~thebigg/README-WeiDU.html#sec4
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25
    Thanks! 2 more questions...

    What happens when there is a conflict - say, 2 interjections for the same NPC on the same "State" #? Or more simply, if 2 diff party members could both say something to an NPC, who "wins"?

    Why are there situations that seem highly unlikely- such as Shar-teel commenting on meeting Montaron for the first time? I can't see a new player running over to her location to recruit her before going to FAI. It's not the only example of that, there are quite a few others. Are they meant to amuse the folks who rush to pick up favorite party members out of the normal order of things?
  • AstroBryGuyAstroBryGuy Member Posts: 3,437

    Thanks! 2 more questions...

    What happens when there is a conflict - say, 2 interjections for the same NPC on the same "State" #? Or more simply, if 2 diff party members could both say something to an NPC, who "wins"?

    A state can have multiple transitions. Here is an example state from BASSIL.DLG with BG1NPC installed.
    IF WEIGHT #1 /* Triggers after states #: 14 even though they appear after this state */
    ~NumberOfTimesTalkedTo(0)
    ~ THEN BEGIN 0 // from:
    SAY #74262 /* ~Heh Hurh Heh! Oh brother Thurm, why not grace our ears with a ripping tale of the old days? Always a delight!~ */
    IF ~~ THEN EXTERN ~_ZOMBIE~ 0
    IF ~Global("X#BASSIL0","GLOBAL",0)
    InParty("ajantis")
    InMyArea("ajantis")
    !StateCheck("ajantis",CD_STATE_NOTVALID)
    !Global("X#AjantisBassilusQuest","GLOBAL",1)
    ~ THEN DO ~SetGlobal("X#BASSIL0","GLOBAL",1)~ EXTERN ~_AJANTJ~ 256
    IF ~Global("X#BASSIL0","GLOBAL",0)
    InParty("ajantis")
    InMyArea("ajantis")
    !StateCheck("ajantis",CD_STATE_NOTVALID)
    Global("X#AjantisBassilusQuest","GLOBAL",1)
    ~ THEN DO ~SetGlobal("X#BASSIL0","GLOBAL",1)~ EXTERN ~_AJANTJ~ 257
    IF ~Global("X#BASSIL0","GLOBAL",0)
    InParty("garrick")
    InMyArea("garrick")
    !StateCheck("garrick",CD_STATE_NOTVALID)
    ~ THEN DO ~SetGlobal("X#BASSIL0","GLOBAL",1)~ EXTERN ~_GARRIJ~ 187
    IF ~Global("X#BASSIL0","GLOBAL",0)
    InParty("edwin")
    InMyArea("edwin")
    !StateCheck("edwin",CD_STATE_NOTVALID)
    ~ THEN DO ~SetGlobal("X#BASSIL0","GLOBAL",1)~ EXTERN ~_EDWINJ~ 169
    END
    The transitions are evaluated from the bottom up. So, first Edwin makes an interjection (if he's present), then it checks for Garrick and finally for Ajantis to make interjections. If none are present, it does the default transition, which is to go to ZOMBIE.DLG, state 0.

    In a properly done interjection, the transitions above the interjection will be copied so that they can happen as well. This is normally done using the WeiDU command INTERJECT_COPY_TRANS. It creates a new interjection on the dialog state but also copies the transition list to the new dialog state. For example, note that Edwin's state 169 copies the transitions above it, so that Garrick and Ajantis can still make their interjections.
    IF ~~ THEN BEGIN 169 // from: _BASSIL:0.4
    SAY #103391 /* ~Brilliant. Brother Thurm's performance was just the thing I was longing for the entire day... , I urge you to execute this lot, before we have the chance to enjoy the sounds produced by the vocal cords of the undead.~ */
    IF ~~ THEN EXTERN ~_ZOMBIE~ 0
    IF ~ InParty("ajantis")
    InMyArea("ajantis")
    !StateCheck("ajantis",CD_STATE_NOTVALID)
    !Global("X#AjantisBassilusQuest","GLOBAL",1)
    ~ THEN EXTERN ~_AJANTJ~ 256
    IF ~ InParty("ajantis")
    InMyArea("ajantis")
    !StateCheck("ajantis",CD_STATE_NOTVALID)
    Global("X#AjantisBassilusQuest","GLOBAL",1)
    ~ THEN EXTERN ~_AJANTJ~ 257
    IF ~ InParty("garrick")
    InMyArea("garrick")
    !StateCheck("garrick",CD_STATE_NOTVALID)
    ~ THEN EXTERN ~_GARRIJ~ 187
    END
    @LiamEsler wrote a great tutorial on coding interjections.

    http://www.shsforums.net/topic/36995-coding-interjections/

    Why are there situations that seem highly unlikely- such as Shar-teel commenting on meeting Montaron for the first time? I can't see a new player running over to her location to recruit her before going to FAI. It's not the only example of that, there are quite a few others. Are they meant to amuse the folks who rush to pick up favorite party members out of the normal order of things?

    Because the author of that bit of dialog wanted to. :smile:
    MusignyDuchessOfKvetch
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25
    Thank you. I was mostly interested in what sort of unconventional behavior to expect (esp with those non-cannon party members), and I can never resist looking "under the hood".

    I ended up installing SCS for the Shar-Teel/Viconia starting locations, which makes the early game interjections make more sense, anyway - considering how popular SCS once was (is?). However, I believe that installation of that script functionality may require starting a new game, alas.
  • tmcdtmcd Member, Translator (NDA) Posts: 13
    edited July 2015
    Sometimes I see this text showing up on my log entries when I'm on Friendly Arm Inn:
    "A textbook double cross. Excellent. (The simian is trainable after all. Perhaps I can mold him to my own advantage.)" anyone know what is it?
    Searching the web I traced the text to this mod, but did not find out anything else about that.
    This just curiosity, no problem or stuff like that.

    Edit: Just figured out more stuff about that. That text show up as the name of the bard in Friendly Arm Inn, IDK if thishappens on other inns. It's a small problem and prolly due to the recent reinstallation I did, something like that. I asked beacouse i thought it was a easter egg or something...
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25
    It's definitely an Edwin line of some sort. And if you're getting it as an NPC name, there's some memory/pointer corruption going on, likely from not doing a truly clean de-install last time. AFAIK the major dialogue changing mods update things like Dialog.tlk, by injecting lots of new content into this binary file, ergo - stuff is out of sync. Either your TLK file is expecting something to be where it's not, or vice versa, you have a mod expecting your TLK file to have specific content at a certain position. So it's reading Edwin dialogue as an NPC name.

    This problem is likely going to cause more serious issues down the road... I'd look at fixing things now before you end up in the Nashkel Mines wiht the Kobolds all talking about their giant space hamsters.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    tmcd said:

    Sometimes I see this text showing up on my log entries when I'm on Friendly Arm Inn:
    "A textbook double cross. Excellent. (The simian is trainable after all. Perhaps I can mold him to my own advantage.)" anyone know what is it?
    Searching the web I traced the text to this mod, but did not find out anything else about that.
    This just curiosity, no problem or stuff like that.

    Edit: Just figured out more stuff about that. That text show up as the name of the bard in Friendly Arm Inn, IDK if thishappens on other inns. It's a small problem and prolly due to the recent reinstallation I did, something like that. I asked beacouse i thought it was a easter egg or something...

    Did you load a saved game from before the re-installation? That's the most likely cause for this sort of problem.

    The game stores all text (dialog, names, item descriptions, etc..) in a file called DIALOG.TLK. Items, creatures, dialog files, etc.. do not contain the strings themselves, they contain indexes to reference the string in the DIALOG.TLK file. When you install a mod, it adds strings to the DIALOG.TLK.

    A saved game stores copies of the creature files for areas you've visited, including the string references for their names. So, if you load an old save game on a new installation, the indexes can easily be referencing the wrong string.
  • tmcdtmcd Member, Translator (NDA) Posts: 13
    Yes that is the problem. You guys are right. I reinstalled wrongly which resulted in the errors. I tried unistalling the game and reinstalling the same mods using the same order but that did not solve the problem completely. But it seems more stable now. I don't know how to completely solve the problem, so I'm gonna go through with this save and see where that gets me. Hopefully it'll end up all right.
    That should teach me to treat the mods in this game better, I was underestimating the changes they made on the game files, treating as a simple dlc expansion install\uninstall. I should have remembered the rules of dealing with mods from Skyrim STEP guide. Thank you guys for all your help. Next time it'll be better, I'll make sure of it.
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25
    I've found that with heavily modded games you can never quite hit the same note twice in a row. With BGEE it was even weirder because they changed core folder structure a few times it seems, and of course BGEE has some major diffs from other versions in how the files themselves are structured internally.

    Pity the poor modders, who now have to account for BG1 vanilla, Tutu, TotSC BG1, BGEE and a few other variants.

    I keep a log of what mods I use, the install order, and the VERSION of both the mods and the game, noting any mid-game patching done as well (though mid game patching can be lethal in and of itself). The Weidu logs are really nice for this, but keeping backups of them is essential.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    tmcd said:

    Yes that is the problem. You guys are right. I reinstalled wrongly which resulted in the errors. I tried unistalling the game and reinstalling the same mods using the same order but that did not solve the problem completely. But it seems more stable now. I don't know how to completely solve the problem, so I'm gonna go through with this save and see where that gets me. Hopefully it'll end up all right.
    That should teach me to treat the mods in this game better, I was underestimating the changes they made on the game files, treating as a simple dlc expansion install\uninstall. I should have remembered the rules of dealing with mods from Skyrim STEP guide. Thank you guys for all your help. Next time it'll be better, I'll make sure of it.

    Unfortunately, if you have a save from before the re-install, there is no way to fix the string issue. It will only affect creatures in areas you visited. So, if your save is early in the game, the problems should be minimal.
  • ErstarrungErstarrung Member Posts: 51
    Perhaps this is a completely silly question, but I found this in the change notes for v22:

    * Kagain's Caravan Quest: Cross-mod compatibility with Thimberling's Skie mod.

    What is Thimberling's Skie mod? - I've never heard of that mod and even Google can't help me (or I'm blind). Could someone (@AstroBryGuy perhaps?) kindly provide a link to the mod?
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    Actually, that should be Thimblerig. My brain always wants to write Thimberling... Whoops! :blush:

    It's in development, AFAIK. See here for more information.

    http://gibberlings3.net/forums/index.php?showtopic=18915&p=233997
  • DuchessOfKvetchDuchessOfKvetch Member Posts: 25
    edited July 2015
    EDIT: Never mind, it appears as though the custom items get xferred to my PC, so all is well. Interesting!

    Not sure what particular incompatibility causes this behavior, but I have both a scroll case and a potion bag (the deep convenience containers). If I have one on an NPC that I have temporarily dismissed to wait at their favorite inn, when I recruit them back, the container, and all its contents, are POOFED. I learned to be wary of disappearing inventory objects early on - even in vanilla games of other RPGS - so it did not surprise me too much.

    I don't know if the custom item is from SCS or BGEE, but surely you are familiar with these containers and might be able to report on if it's a bug or some feature of EE that is a known annoyance.
  • ErstarrungErstarrung Member Posts: 51

    Actually, that should be Thimblerig. My brain always wants to write Thimberling... Whoops! :blush:

    It's in development, AFAIK. See here for more information.

    http://gibberlings3.net/forums/index.php?showtopic=18915&p=233997

    Thanks for the info... As I always liked Skie despite her being sadly underdeveloped, so I wish Thimblerig all the best for her work...
  • markzakumarkzaku Member Posts: 34
    Hi,

    I'm attempting to do Rasaad's quest line at the moment, and I'm at the point where I need to meet with Sorren at the Blade and Stars tavern. Except Sorren isn't there, but several NPCs from BG1NPC are. (I believe they're for Tiax's quest.)

    In any case, I was wondering if the BG1NPC's are somehow interfering with Sorren spawning. I've reloaded the game and tried starting the quest over again, but Sorren never seems to want to spawn. (The global RASAAD_PLOT is also listed as 3 for me, which I believe is the right value for Sorren to show up.)

    Any help would be appreciated. Thanks!
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    edited July 2015
    It shouldn't be. The script block to add Karris & friends is added after the Sorrem script blocks in AR0106.BCS. So, the Sorrem blocks fire first.

    What is the value of GetGlobal("SORREM_SPAWN","AR0106")? And is Rasaad in your party and alive?
  • markzakumarkzaku Member Posts: 34
    edited July 2015
    GetGlobal("SORREM_SPAWN","AR0106")
    lua: call expression not a function
    Active Stack:
    Active Stack:

    That's the message I receive when I enter GetGlobal("SORREM_SPAWN","AR0106") in the console. And yes, Rasaad is in my party and alive.

    Edit: Nevermind, I was entering the command incorrectly, I think. (Sorry, I'm pretty new to this.)

    CLUAConsole:GetGlobal("SORREM_SPAWN","AR0106")

    After typing that instead, I get this message: Global: SORREM_SPAWN AR0106Does not exist
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    edited July 2015
    Are you on 2nd floor of the Blade and Stars when you check the variable? Forgot to mention that you need to be there to check this variable since it's a local variable for the area.
  • markzakumarkzaku Member Posts: 34
    Yeah, I am. I still receive the "Global: SORREM_SPAWN AR0106Does not exist" message.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    You could manually spawn SORREM:

    C:CreateCreature("RSSORREM")
    C:SetGlobal("SORREM_SPAWN","AR0106",1)

    I'd also be interested to see your AR0106.BCS from your override directory. I can't think of why the script block isn't firing. I don't think it would be the Tiax Quest (it is added to the end of AR0106.BCS, so it shouldn't interfere).
  • markzakumarkzaku Member Posts: 34
    Thank you so much for your help! I uploaded the file you requested.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    Everything worked fine on a test run. Sorrem appeared at the table. Maybe you missed him?

    image
  • markzakumarkzaku Member Posts: 34
    Unfortunately, no. This is what the tavern looks like before I spawn Sorrem through the console.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    edited July 2015
    Hmmmm... I can't think of any other reason that Sorrem is not spawning. The script is firing (otherwise Karris wouldn't be there), and your AR0106.BCS works on my test install. Are you sure RASAAD_PLOT is 3?

    EDIT: One other idea. Move AR0106.BCS out of your override directory (don't delete it, just temporarily move it to the desktop or something). Then, re-open the game and see if Sorrem appears.
  • markzakumarkzaku Member Posts: 34
    I moved the AR0106.BCS out, loaded up my game, and went to the tavern. Sorrem still wasn't there; the only two NPCs on the second floor were Maple Willow Aspen and one Commoner.

    This is what RASAAD_PLOT looks like in EE Keeper. I haven't checked the value in-game, but I assume EE Keeper is detecting it correctly.

    Thank you again, too, for helping me! I apologize if my bug had nothing to do with BG1NPC and if I made you waste your time for nothing.
  • AstroBryGuyAstroBryGuy Member Posts: 3,437
    I'm at a loss, but if Sorrem isn't appearing with the modified script removed, then, yeah, something else is wrong. Sorry I couldn't help figure it out.
Sign In or Register to comment.