Howdy, Stranger!

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


Dark Dreams of Furiae - a new module for NWN:EE! Buy now
Attention, new and old users! Please read the new rules of conduct for the forums, and we hope you enjoy your stay!

IESDP unknowns



  • devSindevSin Member Posts: 32
    Thanks again for looking into all this.

    I'll get in touch with Fred, and some updated builds of Near Infinity will hopefully be floating around the usual places in the coming week.

  • FredSRichardsonFredSRichardson Member Posts: 442
    @Ascension64 - Thanks! It's nice to be a part of all the excitement =)

  • cmorgancmorgan Member Posts: 707
  • CuvCuv Member, Developer Posts: 2,535
    Splendiferous!!!! Thanks FSR

  • lansounetlansounet Member Posts: 1,182
    edited July 2012
    This might be old news but I have a question about item effects and "unknown" values you can see with NI if an experienced modder can enlighten me.

    I was modding an item - a helmet - trying to add a thac0 bonus effect (278) but the thac0 wasn't updating correctly and would randomly be applied/removed. So I compared the effect with other modded items using that opcode and they all had that unknown value set to 00 00 00 00 00 00 00 77, I did that on my item and now it works correctly for some reason which seems undocumented so far.

    Is it known what these unknown values do now with what the devs have provided about ITM file format?
    How did previous modders find out that they had to set it that way for the effect to work? I couldn't see the difference when using DLTCEP.

    Since the item I used for comparison was from IR (Trueblood Ioun Stone) maybe @Ardanis or @Demivrgvs can shed some light?

    EDIT : Well it doesn't work anymore so I'll just stick with base thac0 bonus. What am I doing wrong with effect 278?

    Here's what I'm experiencing exactly with effect 278 :

    Naked character with 18 base thac0, equip the helm with +1 thac0, go to record screen, the thac0 shows 17 then quickly changes to 18 everytime I load the record screen. While the helm is equipped I'll equip anything in another slot, let's say a pearl necklace, in record screen the thac0 is now 17 and doesn't change. Reequip the helm and thac0 is bugged again.

    BOTTOM LINE : This is pretty much a non-issue as the bonus to attack rolls is applied correctly even if the record screen value flickers. Moreover I can't reproduce it on vanilla installation so it might very well be a mod thing (TobEx maybe) or my shitty modding as I can't reproduce it with IR item.

    Post edited by lansounet on
  • WispWisp Member Posts: 1,102
    lansounet said:

    So I compared the effect with other modded items using that opcode and they all had that unknown value set to 00 00 00 00 00 00 00 77, I did that on my item and now it works correctly for some reason which seems undocumented so far.

    That sounds like the resource field. It has no (known) relevance for this opcode and the non-zero value is most likely junk left over by the Bioware toolset. By all appearances, they did a lot of copying and pasting, so a lot of the junk values will identical to other junk values in corresponding fields.

    As for why the opcode does not work, I have no idea off-hand, but you might want to post all the parameters you used (timing, target, etc.)

  • lansounetlansounet Member Posts: 1,182
    Thanks for the answer about the unknown field.
    For my item I'm using regular equipped-item effect stuff : Target self, timing instant/while equipped, increment type, duration 0, probability 1 100%, no dispel/bypass resistance, power 0...

  • DemivrgvsDemivrgvs Member Posts: 315
    As Wisp says the non-zero value isn't on purpose, and shouldn't matter at all. Actually within Revisions mods I tried to remove all those spurious non-zero values when re-doing all itm and spl files from scratch, but some of them seem to re-appear for no apparent reason.

    Anyway, I never noticed the little issue you've discovered, but if IR items are not affected by this "flickering value" issue just copy/paste the opcode from IR's itm when you want to create your own items or spells. ;)

  • ShadowSmugglerShadowSmuggler Member Posts: 44
    Imagine the work that could have been done if we had this info when TeamBG was alive.. oh the dreams and possibilities!

  • AndreaColomboAndreaColombo Member Posts: 5,326
    edited August 2012
    A modder, who will remain anonymous for the time being is totally @jcompton, asked: "please document in some level of detail exactly how the banter system works."

    Any insights, @ScottBrooks, @Coriander, or @Nathan?

    Post edited by AndreaColombo on
  • jcomptonjcompton Member Posts: 157
    Heh, I'm not sure why I'm being anonymized.

    To be more specific: We understand that INTERDIA.2DA associates an additional DLG with a party member, and we understand that Interact() causes an INTERDIA-associated DLG to be considered.

    What we've never been entirely clear about is precisely how the engine goes about deciding "It's time for a banter!" and what steps it takes when it decides that it's banter time.

  • AndreaColomboAndreaColombo Member Posts: 5,326
    I said the modder is anonymous because in the other thread you said the question comes from "a companion", whose name I do not know :-)

  • jcomptonjcompton Member Posts: 157
    Ah, no, "companion" referred to the fact that it was a second, related question.

  • AndreaColomboAndreaColombo Member Posts: 5,326
    I see. My bad, then: I shall edit my post :)

  • lansounetlansounet Member Posts: 1,182
    Another question that might be common knowledge but IESDP doesn't give any details about it :

    StartTimer() and/or TimerExpired don't seem to work in dialogues actions/triggers. Or maybe it is reset when an NPC is kicked out of party? I stumbled upon this when trying to debug why Finch rejoining dialogue would never work.

    First the D file action when telling her to go away is StartTimer("SomeLongVariable",60) and state trigger for rejoin dialogue is TimerExpired("SomeLongVariable"). Apparently the variable is either too long or it should always be an integer with no quotation marks, WeiDU doesn't give any error when compiling it but checking it with NI shows the variable as 0 - StartTimer(0,60) / TimerExpired(0).

    Second it doesn't work at all in game -even after various attempts at changing the Timer ID - but replacing timer stuff with SetGlobalTimer("WhateverVar","LOCALS",60) / GlobalTimerExpired("WhateverVar","LOCALS") works.

    Any insight from a modder at least?

  • CamDawgCamDawg Member, Developer Posts: 3,420
    From the IESDP (emphasis mine):
    This action starts a timer local to the active creature. The timer is measured in seconds, and the timer value is not saved in save games. The timer is checked with the TimerExpired trigger.
    So it might work in limited testing, but it really should be a GlobalTimer.

  • lansounetlansounet Member Posts: 1,182
    I know this won't work if she EscapeAreaMove() or I leave area/game if it's not a GlobalTimer.
    I mean even if I just kick her out of the group, stay next to her for the timer duration and try to talk to her, the state Global("FinchInParty","GLOBAL",0) TimerExpired() won't work and I get a "Finch has nothing to say."

  • CamDawgCamDawg Member, Developer Posts: 3,420
    I don't think I've ever seen those timers used outside of combat scripts because they can be lost so easily. A global timer (even of the LOCALS variety) gets stored in the save game and is a helluva lot more robust.

  • lansounetlansounet Member Posts: 1,182
    Indeed it's also used in some area scripts. I just wanted confirmation from an experienced modder that this was a bad dialogue action to use. I'll wrap this up for the BWP Fixpack (and its BGT compatibility fix) until someone (if not Bons) picks it up for an update.

  • CamDawgCamDawg Member, Developer Posts: 3,420
    I think Bons is long gone, but a ping for @jcompton may get it into the official release at some point.

  • CuvCuv Member, Developer Posts: 2,535
    @lansounet I have never tried to use those in dlgs... but can test a few things and get back to you:)

  • lansounetlansounet Member Posts: 1,182
    You don't really have to, I've tried various stuff already like moving the action to the last state instead of being attached to the response. Anyway it's only used for Finch NPC afaik and is more irritating than serving any important purpose (why prevent the player to re-recruit her for 1 minute after kickout?)

  • PhazicPhazic Member Posts: 1
    @Iansounet As background to the problem that the timer was supposed to be solving, originally Finch initiated the dialogue that triggers the rejoin request. This seemed to trigger if Finch was in the same area and not necessarily in LOS of the player. This resulted in a infinite request by Finch to join the party until the player managed to leave the area or had her join.

    The proposed solution to this was to add a See check and a timer so that the player had enough time to get out of visible range before she solicited the player. These fixes were incorporated into the BWP Fixpack albeit appear to have broken the rejoin dialogue altogether.

    Ideally it would've been better to address the issue of why Finch was constantly starting dialogue with the player outside of party, but that appears to be fixed now too.

    This thread at the PP forums has more background:

    I think the IEDSP could be clearer in its example for StartTimer/TimerExpired since it uses strings for the timer id and the function definitions indicate to use I:ID* which should be integer values only. NearInifnity gives a compile error when trying to compile the script with a string argument.

    Fiddled around with this some more and it seems like StartTimer works fine inside a DLG but TimerExpired is never true when used as a state or response trigger. This seems to be the case regardless if the timer was started by the dialogue or from within a script.

  • lansounetlansounet Member Posts: 1,182
    edited August 2012
    Thanks for this, it makes more sense if the TimerExpired was used in Finch's script for her to initiate dialogue but that appears to be pre v3? And the BWP is trying to fix something not broken because the fix was made for an earlier version?
    Phazic said:

    Fiddled around with this some more and it seems like StartTimer works fine inside a DLG but TimerExpired is never true when used as a state or response trigger. This seems to be the case regardless if the timer was started by the dialogue or from within a script.

    This was my original point, thanks for confirmation.

  • lansounetlansounet Member Posts: 1,182
    edited August 2012
    Disregard. The post below about parameter 1 and 2 behaviour with effect opcode #42 are still worth mentionning.

    Post edited by lansounet on
  • lansounetlansounet Member Posts: 1,182
    edited August 2012
    Effect opcode #42 needs its description updated in both DLTCEP and IESDP (at least clarify in IESDP)

    - When using "Spell Level" 0, the "Slot Amount Modifier" level value is 1 for level 1, 2 for level 2, 3 for level 3, 4 for level 4, etc... instead of the exponential increase used for "Spell Level"

    - For a static increase of x spells at y level, you enter the desired amount of bonus slots in "Slot Amount Modifier" field, and in "Spell Level" you enter 1 for lvl 1, 2 for lvl 2, 4 for lvl 3, 8 for lvl 4, 16 for lvl 5, and so forth.

    I've been experiencing an issue with wizard slots when loading a game where a character has an item with "double spell slots per level", and another item with "+ x spells at level y". I was looking at it the wrong way, it looks more like an issue about the order in which item effects are loaded. My ring with "double spells" was accounted for before my cape and necklace with "+ x spells".

    Is it made mention of this order anywhere?

    Post edited by lansounet on
Sign In or Register to comment.