Skip to content

[MOD] EEex (v0.10.2-alpha)

18911131448

Comments

  • BubbBubb Member Posts: 1,005
    edited March 2019
    @Myrag: Oh, wow, yeah that is crashing. Looks like something to do with my extended stats system is failing when shape shifting a creature. Probably just at wrong register reference or something...

    Have you experienced any crashes that don't involve shape shifting?
  • OlvynChuruOlvynChuru Member Posts: 3,079
    I messed around with the new wild surge opcode, and it works great! There is one bug, though it's probably not your fault: choosing a wild surge that makes you roll additional time(s) on the wild surge table crashes the game, even if the character is a wild mage. But that's not a huge deal, since there are plenty of other cool wild surge options to choose from (cast spell twice, cast spell as an area of effect, cast spell with no save).

    I do have one more request regarding the wild surge opcode. Would it be possible to make another feature of that opcode (or a new opcode) that disables the graphic effects of the wild surges?

    By "graphic effects," I mean:

    * the random visual effects created when there's a wild surge
    * the string saying "Wild Surge: whatever"
    * and the sound effects that play when there's a wild surge

    The gameplay effects of the wild surge should stay unchanged.

    This would allow me use the wild surge opcode in contexts that have nothing to do with wild surges (e.g. a spell you cast on enemies to make their spells target the wrong creature, or an overpowered Enoll Eva's Duplication-type spell that lets you cast your spells twice).

    As always, thank you for all you've done! :)
  • UlbUlb Member Posts: 295
    @Bubb
    I think there are still other crashes going on.
    I've had a crash at Dragonspear right when the bomb at the second gate exploded (that was still with 5.0 but no shapeshifting involved) and I had one just now with 5.1 down in the catacombs @Korgan's quest right when I triggered the chain lightning trap.
  • MyragMyrag Member Posts: 328
    @Bubb Cheers. I will test soon enough and will let you know.

    I'm not sure if other crashes were related to shapeshifting or not since it was mid fight. It took me a while to connect the dots and after reverting to v3 everything stopped. I thought it was SCS v32 RC10 which I installed lately.

    I will install v5.X soon and will pay attention to any suspicious effects.
  • BubbBubb Member Posts: 1,005
    @Bubb would it be possible to modify WSPECIAL.2da so that it includes a crit range modifier (akin to the one found in STYLBONU.2da) and a weapon die size modifer?

    The latter could accept values ranging from, say, -4 to +4 (that's completely arbitrary). Say you set it to +1 for Grand Mastery: A character with Grand Mastery in long sword would roll 1d10 instead of 1d8 for damage when wielding a long sword (the long sword die size would increase by a factor of 1, from 1d8 to 1d10.)

    Likewise, setting the modifer to -1 would decrease the die size by one factor (e.g. a long sword would roll 1d6.)

    @AndreaColombo: Just wanted to post here to say that I hear you, and have been working on it. I didn't initially respond because I thought I could whip it out fast; that didn't happen. (Not so much that it's a hard thing to do, just my time has been required elsewhere...)
  • AndreaColomboAndreaColombo Member Posts: 5,530
    @Bubb - Thank you so much! I, of all people, can certainly relate to a busy RL; just knowing it’s on your radar fills me with glee :)
  • bob_vengbob_veng Member Posts: 2,308
    wow, awesome and useful
  • AndreaColomboAndreaColombo Member Posts: 5,530
    So, when the red bar is full, the cyclic action takes place again? Then the bar goes until the next time it occurs, and so on.

    I get the blue bar is kind of your aura cleansing measurement (when the bar is full, your aura is cleansed and you can cast again.)

    But how does the yellow bar work, exactly?

    (I agree it’s a kickass feature, by the way.)
  • ALIENALIEN Member Posts: 1,271
    Bubb wrote: »
    Fun with timer visualization:

    - Top bar (red) represents modal actions that are cyclic, (detect traps / illusions and turn undead, etc.).
    - Middle bar (yellow) represents spells that occur on intervals, such as contingencies and globe of blades.
    - Bottom bar (blue) represents the spell cooldown timer; the bar being full when a spell can be cast.

    Och man, I was dreaming about this for years!
  • FlashburnFlashburn Member Posts: 1,847
    That's way better than the timer for modal actions that I suggested a while back. I like it.
  • OlvynChuruOlvynChuru Member Posts: 3,079
    Ooh nice!

    Does the yellow bar work with Static Charge? It would be great to know when the next 32d8 damage bolt is going to strike. :)
  • kjeronkjeron Member Posts: 2,368
    OlvynChuru wrote: »
    Does the yellow bar work with Static Charge? It would be great to know when the next 32d8 damage bolt is going to strike. :)
    I don't think it would.
    Static Charge utilizes a timer more similar to poison/disease, than to contingencies. It default is just once/round instead of once/second.
  • RaduzielRaduziel Member Posts: 4,714
    This timer is especially useful for no reloaders.

    Great job, @Bubb !
  • GrammarsaladGrammarsalad Member Posts: 2,582
    :o:)
  • BubbBubb Member Posts: 1,005
    edited March 2019
    Just got back from being away all weekend, sorry for not replying sooner :). Since you guys like the timer bars so much I'll make them into an INI option in the next release.


    But how does the yellow bar work, exactly?

    When the yellow bar resets from 100% to 0% contingencies and simple-interval spells like Globe of Blades will fire.


    OlvynChuru wrote: »
    Does the yellow bar work with Static Charge? It would be great to know when the next 32d8 damage bolt is going to strike. :)

    The yellow bar doesn't include the more complex interval spells, (the one's whose interval can be changed via opcode parameters and other effects), because there would be no standard way of displaying what time they execute. The only way I can think of would be to overlay a vertical bar on the yellow progression to signify that some effect will execute at that time, but that doesn't take into account effects that take place over long intervals.

    Regarding the scripting idea: This is the kind of thing I've wanted to do ever since I had an inkling of EEex, I just didn't know enough to know what would help.

    I've found the main trigger evaluation loop in the exe, and have looked at the OR trigger to see how a trigger that modifies subsequent evaluation works...

    Instead of invoking the behavior by an object, I think a trigger would be nicer, that then stores the first matched cre; maybe like this:
    IF
        EEex_MatchTarget(6)
            General(ConditionObject,HUMANOID)
            !EEex_IsImmuneToOpcode(ConditionObject,175)
            !ImmuneToSpellLevel(ConditionObject,2)
            !CheckStat(ConditionObject,4,WIZARD_SPELL_IMMUNITY)
            CheckStatLT(ConditionObject,75,RESISTMAGIC)
            !StateCheck(ConditionObject,STATE_IMPROVEDINVISIBILITY)
    THEN
        RESPONSE #100
            Spell(EEex_MatchedTarget,CLERIC_HOLD_PERSON)
    END
    

    - EEex_MatchTarget would only return true if it found a valid target
    - EEex_MatchedTarget is an object that is set on a per-creature basis by EEex_MatchTarget

    Hows that look? It will be tricky to hijack the trigger evaluation, so it could take me a while.

    Regarding the instant attack idea, I haven't looked, but I suspect it will be very hard to implement. Attack timing is one of the most arcane systems in the engine, and if I can't simply call an already-defined "attack now" function, it might not be possible without breaking something else.
  • UlbUlb Member Posts: 295
    edited March 2019
    Bubb wrote: »
    @Ulb: I can't reproduce either of the crashes. Do you have any save games where you can reliably cause them to occur? In any case, please send the .dmp files my way.

    @Bubb I think I've found a reproducible crash, though with a heavy modded game, there is of course no saying whether EEx is really responsible or not..

    The crash consistently occures when triggering the cloud kill trap in the little circular room with the iron lever/wheel in the middle, right before Gaal's room down in the sewers. I can pause and ctrl-y the mist creatures but the second the could kill projectile hits, the game crashes.

    I did not find any .dmp files in my BG directory, so I'm not sure what I'm supposed to send you exactly.
  • David77David77 Member Posts: 30
    These coloured bars are very cool.
    Reading though this thread a bit, installing the MOD and checking out what I have so far (im a bit new to mod technicalities) am I right in saying they are not something I can use yet? Like this is just the Modder experimenting but its not actually 'in' the eeex. alpha released so far?

    Any illuminated advance would be appreciated, otherwise I will keep reading!
    Thanks
  • MyragMyrag Member Posts: 328
    @Bubb You are really changing stuff that remained impossible for so many years. This stuff opens up so many possibilities.

    What is your vision regarding those cooldown bars? Next to portraits for each character? One for selected charater? Above head for party like HP bars on TAB?
  • OlvynChuruOlvynChuru Member Posts: 3,079
    I was thinking of experimenting with the new InvokeLua opcode. But I'm wondering, what data is passed to the parameters of the function called by the opcode? Is it the actorID of the target of the opcode? Or is there something else? It would also be cool for Parameter1 and Parameter2 of the opcode to be passed to the function as well.
  • BubbBubb Member Posts: 1,005
    edited March 2019
    @Ulb: Can't reproduce that one either. I think one of your other mods might be acting up, unless it's some weird event that EEex + another mod that is responsible. And btw, if the crash dumps aren't appearing in your game folder, they are probably in:
    C:\Users\username\Documents\Infinity Engine - Enhanced Edition\crash
    



    @David77: Correct; the colored timer bars are not yet in EEex, I was just showcasing the concept here. I'll have them included in the next release though, whenever that may be :)



    @Myrag: I honestly don't know the best place to put them. I think having a bar for every player portrait would clutter the screen; above the sprite's heads might be good, but that would require some extra work to get right. Any suggestions on where exactly to implement them would be appreciated.



    @OlvynChuru: Two memory addresses are passed to the function: The first is the effectData, aka the opcode structure that was run. The second is the creatureData, aka the creature structure of the target... this will always be a sprite; if a door or such is targeted the opcode won't function.
    function B3_OPTES(effectData, creatureData)
        local targetID = EEex_ReadDword(creatureData + 0x34)
        local param1 = EEex_ReadDword(effectData + 0x18)
        local param2 = EEex_ReadDword(effectData + 0x1C)
        local special = EEex_ReadDword(effectData + 0x44)
    end
    

    In later EEex versions I'll probably standardize all these random memory addresses into userdata types, which include built-in functions / fields that allow safe access to structure contents, instead of requiring the use of arbitrary memory read operations.

    Also note that timing modes are a little wacky with this opcode - or I should say, this opcode really shines a light on the wacky way opcodes are applied. If you do an Infinity_DisplayString in the body, you will notice that the opcode can be applied several times, and sometimes seemingly randomly. For consistent results, I would recommend using Instant / Limited with a duration of 0.
  • kjeronkjeron Member Posts: 2,368
    Not sure how feasible these positions would be:

    For the modals - a bottom-top color unfill over the modal buttons on the actionbar.
    For the spell/item timer - similar over the actionbar buttons (cast spell, use item).
    For the contingency timer - rotary/clock around/behind the Quickloot button.
    Bubb wrote: »
    Also note that timing modes are a little wacky with this opcode - or I should say, this opcode really shines a light on the wacky way opcodes are applied. If you do an Infinity_DisplayString in the body, you will notice that the opcode can be applied several times, and sometimes seemingly randomly. For consistent results, I would recommend using Instant / Limited with a duration of 0.
    I know opcode 215 can do something similar, when using a non-looping animation. The animation will repeat whenever you start casting a spell or get hit, but won't won't repeat if it's currently playing.
  • UlbUlb Member Posts: 295
    @Bubb That's weird because switching between 0.5.1 and 0.3.0 turns the crashes on/off for me. Maybe it is not just EEx but something else plays a role (like a characxter having detect invisibility).

    I found the .dmp files, will upload tonight or tomorrow..
  • AndreaColomboAndreaColombo Member Posts: 5,530
    For bar positions, I assume maximum utility is when they’re shown for individual characters as opposed to the whole party or a subset of it.

    Why not make them appear where your GIF shows them, but only when a single party member is selected? Each party member will have their own timings anyway, so a combined line wouldn’t work.

    An exception could be made for the red line; it might make sense to display it for the rogue even when other party members are selected (provided that he was using an ability,) although that would pose a challenge in the case of multiple rogues in the party at the same time.
  • bob_vengbob_veng Member Posts: 2,308
    i think thin verical bars next to the portrait would be the best

    appearing for all characters all the time, toggleable
  • AndreaColomboAndreaColombo Member Posts: 5,530
    bob_veng wrote: »
    mockup:
    m9g82h8ur0iu.png

    Man, this would have “kickass feature” written all over!
Sign In or Register to comment.