Jump to content

JediMindTrix

Members
  • Content Count

    71
  • Joined

  • Last visited

About JediMindTrix

  1. agb1, your first concern could be easily be resolved by adding delayed onset 'display string' spell effects and adding a few new strings to the .tlk to alert the player when their time is almost up. Reviewing the .dlg file, I believe that the code would only trigger when you choose to become the slayer/ravager and not when the dialog actually opens, so it doesn't need to ignore anything as it only starts when the dialog exits out. Because there is no way I could determine by going through the BGII Spell Effects on the IESDP to tell the damage effects to 'stop' from applying when you shift back to Human form. They're delayed onset, and will fire no matter what form you are in, and seems to pierce the damage resistance End Slayer Change applies to stop this from happening in the first place (which in itself is sloppy as it means you would be immune to the damage from things such as Horrid Wilting in the interrim). EE has the means to Remove Effects by Resource which effectively resolves this. Unfortunately, there is no such thing, that I was able to find in the IESDP or am otherwise aware of, in the original BG2/TOB engine. If you can find one that I missed, by all means, I'd be happy to go that route.
  2. I won't assume everyone is familiar with this bug so I'll describe it now: In the Ascension mod, if you turn into the slayer, you will begin to take damage after a set amount of time until it kills you outright. The intention was for this effect to stop when you switch back to Human form, however this does not occur. Instead, it'll kill you anyway. Ascension tried setting your magic damage resistance to 100% for a short duration but it doesn't appear to work as intended in either version (and is kind of sloppy anyway). This has persisted all the way since it's last release by Gaider way back in the early 2000's. After determining there isn't a viable means to fix it in both EE and the original Bioware versions (There is an easy method in EE but it doesn't work the original), I determined that it'd be better to handle it by scripting. This was my general idea: 1) Remove damage effects from all .spls. 2) Introduce a variable jmt#slay into the mix. Using the 'End Slayer Form' (spin718 I believe) innate ability would set this 2. Slayer2, 3, 4 and spin823.spl's would set this to 1. 3) Introduce code into player1.dlg that waits 60 seconds, then checks to see if jmt#slay = 1. If =1, then kills player. Maybe add a few seconds to account for time player spends choosing between dialog options. This is a vague idea of what I want to do: IF ~Global("Slayer10","GLOBAL",1) !Global("FinalFight","AR6200",4) !Global("MelStillImmortal","AR6200",2)~ THEN BEGIN 27 // from: SAY #55324 IF ~~ THEN REPLY #55326 DO ~SetGlobal("Slayer10","GLOBAL",0)~ EXIT IF ~XPLT(Player1,2000001)~ THEN REPLY #61320 DO ~IncrementGlobal("SlayerDeath","GLOBAL",1) SetGlobal("Slayer10","GLOBAL",2) SetGlobal("jmt#slay","GLOBAL",1) SetGlobalTimer("TheSlayerTimer","GLOBAL",60) ReputationInc(-1) Wait(60) IF Global("jmt#slay","GLOBAL", 1) THEN Kill(Myself) I am pretty sure however it won't necessarily work this way, or even install correctly in Weidu (The multiple IF's that I want to mean different things being a likely source of problems.) As I don't really know all too much about IE scripting or .d Do's and Don'ts I was hoping for some guidance!
  3. I'm sorry. Until I posted the 'I opted to restructure the code into creature override scripts' you were correct.
  4. Pardon me for not double-checking whether a new update was released for a program I downloaded only a few months ago that has until now served without error.
  5. Weidu seemed to assume parameter1 = 0 without defining it, but yes I am using an older version. Thanks for the heads up about the update, I'd assumed this was the latest version (2015/7/17)
  6. On the left is the file that was converted into patching- below is the patch code, and on the left is the result. Is this normal behavior for Near Infinity or Weidu? Where else can I expect this 'reversal'? Link below http://postimg.org/image/k8i2xe2jp/
  7. UPDATE: IF //All enemies are dead, Imoen resolved, Balthazar Dead Die() Global("JMT#WV1","AR6200",2) //Current first wave count OR(2) Global("BalthazarFights","GLOBAL",0) //Balthazar did not fight with you StateCheck("balth2",15) //Balthazar died OR(2) Global("ImoenBackToHuman","GLOBAL",2) //Imoen Survived Global("JMT#IMD","AR6200",1) //Imoen's dead! !Exists([ENEMY]) //No summons around THEN RESPONSE #100 IncrementGlobal("JMT#WV1","AR6200",1) //Final increment SetGlobal("FinalFight","AR6200",4) //Set to pre-bridge dialog END IF //All enemies are dead, Imoen resolved, Balthazar is ally DIE() Global("JMT#WV1","AR6200",2) Global("BalthazarFights","Global",1) OR(2) Global("ImoenBackToHuman","GLOBAL",2) //Imoen Survived Global("JMT#IMD","AR6200",1) //Imoen's dead! !Exists([ENEMY]) THEN RESPONSE #100 IncrementGlobal("JMT#WV1","AR6200",1) SetGlobal("FinalFight","AR6200",4) ActionOverride("balth2",StartDialogueNoSet(Player1)) END IF //All enemies are dead, Imoen resolved, Bodhi is ally (no balthazar) Die() Global("JMT#WV1","AR6200",2) Global("BodhiFights","GLOBAL",1) OR(2) Global("ImoenBackToHuman","GLOBAL",2) //Imoen Survived Global("JMT#IMD","AR6200",1) //Imoen's dead! !Exists([ENEMY]) THEN RESPONSE #100 IncrementGlobal("JMT#WV1","AR6200",1) SetGlobal("FinalFight","AR6200",4) END IF //If none of the above are true, increment death count by 1 Die() //STATE_REALLY_DEAD THEN RESPONSE #100 IncrementGlobal("JMT#WV1","AR6200",1) END EDIT: Solved! Player dialog is forced from the area script, which triggers whenever a variable is set. IF Global("FinalFight","AR6200",4) OR(2) Global("BalthazarFights","Global",0) Global("JMT#BD","AR6200",1) THEN RESPONSE #100 ClearAllActions() Wait(1) ActionOverride(Player1,StartDialog("player1",Player1)) //Start dialog END
  8. I opted to restructure the way those variables are applied by moving them into creature override scripts. Each one looks like this, except for Imoen's which I haven't fully realized yet as it will involve messing with a dialog file. IF //Everybody, including Bodhi and Balthazar is dead Global("JMT#WV1","AR6200",4) Global("SetForceWalkwayTimer","AR6200",0) OR(2) Global("BalthazarFights","GLOBAL",0) StateCheck("balth2",15) !Exists([ENEMY]) THEN RESPONSE #100 ActionOverride(Player1, DisplayStringHead(Myself,49764)) SetGlobal("FinalFight","AR6200",4) ActionOverride(Player1,StartDialogOverride("player1",Player1)) END IF //Every enemy is dead and Bodhi is ally, assumes balthazar and bodhi can't both fight with you Global("JMT#WV1","AR6200",3) Global("BodhiFights","GLOBAL",1) !Exists([ENEMY]) THEN RESPONSE #100 ActionOverride(Player1, DisplayStringHead(Myself,49764)) SetGlobal("FinalFight","AR6200",4) ActionOverride(Player1,StartDialogOverride("player1",Player1)) END IF //Everybody is dead, Balthazar is ally Global("JMT#WV1","AR6200",4) Global("BalthazarFights","Global",1) !Exists([ENEMY]) THEN RESPONSE #100 ActionOverride(Player1, DisplayStringHead(Myself,49764)) SetGlobal("FinalFight","AR6200",4) ActionOverride("balth2",StartDialogOverride("balth2",Player1)) END IF Die() //STATE_REALLY_DEAD THEN RESPONSE #100 IncrementGlobal("JMT#WV1","AR6200",1) END I also tried a version with IF Die at the top with a Continue() command. The global JMT#WV1 is incremented successfully on creature death 95% of the time. However, the other three code blocks are not triggering. EDIT: Likely this is because the dead creature's script stops parsing after the Die function.
  9. 4032 (hasSpell something) is supposed to be 15(state_really_dead). Changing this did not fix the issue. Can you put a check at the top of a creature's override or default script that goes something like... IF StateCheck(Myself, 15) //STATE_REALLY_DEAD THEN RESPONSE #100 IncrementGlobal("JMT#WV1","AR6200",1) ActionOverride(DisplayStringHead(Myself,49766),Player1)) Continue() END and have the codeblock fire when a creature dies?
  10. I am investigating this bug report and after several hours of testing have determined that for some reason, the conditions in the following codeblock(s) are only being checked a single time: (Pardon the commenting) IF StateCheck("finiren",4032) // finiren //Irenicus is dead OR(2) StateCheck("finbodh",4032) // finbodh //And Bodhi is dead Global("BodhiFights","GLOBAL",1) //OR Bodhi is fighting StateCheck("finsolar",4032) // finsolar //And Solar is dead !Exists([ENEMY]) //And no enemies exist Global("SetForceWalkwayTimer","AR6200",0) //Timer not set Global("FinalFight","AR6200",3) //FinalFight 3 THEN RESPONSE #100 SetGlobal("SetForceWalkwayTimer","AR6200",1) //ForceWalkway SetGlobalTimer("ForceWalkway","AR6200",30) //Forcebridges timer END IF GlobalTimerExpired("ForceWalkway","AR6200") //Failsafe measure timer set Global("FinalFight","AR6200",3) THEN RESPONSE #100 SetGlobal("FinalFight","AR6200",5) //Forces bridges to appear END IF Delay(3) //Wait 3 seconds StateCheck("finiren",4032) // finiren //Irenicus died OR(2) StateCheck("finbodh",4032) // finbodh //And Bodhi died Global("BodhiFights","GLOBAL",1) //OR sided with player StateCheck("finsolar",4032) // finsolar //And Solar is dead !Exists([ENEMY]) //And no more enemies exist (Imoen/summons check?) Global("BalthazarFights","GLOBAL",1) //And Balthazar is fighting with player !StateCheck("balth2",4032) // balth2 //And Balthazar is not dead or stunned etc !StateCheck("balth2",STATE_STUNNED) // balth2 !StateCheck("balth2",STATE_SLEEPING) // balth2 !StateCheck("balth2",STATE_SILENCED) // balth2 !StateCheck("balth2",STATE_CONFUSED) // balth2 OR(2) // Global("ImoenBackToHuman","GLOBAL",2) //And Imoen Back StateCheck("Imoen2",4032) // Imoen2 //OR Imoen Died Global("FinalFight","AR6200",3) //AND finalfight is 3 THEN RESPONSE #100 SetGlobal("FinalFight","AR6200",4) ActionOverride("balth2",Dialog(Player1)) END IF Delay(3) //Wait 3 seconds StateCheck("finiren",4032) // finiren //Check Irenicus death OR(2) //OR next 2 StateCheck("finbodh",4032) // finbodh //Bodhi is dead Global("BodhiFights","GLOBAL",1) //Bodhi fought by players side StateCheck("finsolar",4032) // finsolar //and Solar is dead !Exists([ENEMY]) //and There are no enemies in AR6200 OR(6) //OR Global("BalthazarFights","GLOBAL",0) //Balthazar did not fight by players side StateCheck("balth2",4032) // balth2 //Balathazar is dead StateCheck("balth2",STATE_STUNNED) // balth2 //Various balthazar states StateCheck("balth2",STATE_SLEEPING) // balth2 StateCheck("balth2",STATE_SILENCED) // balth2 StateCheck("balth2",STATE_CONFUSED) // balth2 OR(2) //OR Global("ImoenBackToHuman","GLOBAL",2) //Imoen made it back to Human StateCheck("Imoen2",4032) // Imoen2 //But she died Global("FinalFight","AR6200",3) //And global is 3 THEN RESPONSE #100 SetGlobal("FinalFight","AR6200",4) // ActionOverride(Player1,StartDialogue("player1",Player1)) END My test procedure and results: Frankly, I am at a loss on what could cause this. I do not believe any code blocks in AR6200 are returning true and causing the script to start over before it reaches the relevant code that is responsible for creating the bridges that allow progression in Ascension, by virtue of my 2nd tests success. Instead, it feels like AR6200 is only firing a single time. My knowledge on how the area scripts function, how often they are called, etc - is very limited, and I was hoping for any insights into solving this confounding problem?
  11. Hey, thank you Gwendolyne! This helps tremendously.
  12. So there is no way to patch Dark Taint to not be broken xD Thanks!
  13. Copying and patching 1 file ... [./override/BHAAL2B.spl] loaded, 3506 bytes WARNING: no effects altered on BHAAL2B.spl ~BHAAL2B.spl~ ~override~ // Dark Taint, 0 effect(s) altered WARNING: no effects altered on BHAAL2B.spl ~BHAAL2B.spl~ ~override~ // Dark Taint, 0 effect(s) altered WARNING: no effects altered on BHAAL2B.spl ~BHAAL2B.spl~ ~override~ // Dark Taint, 0 effect(s) altered WARNING: no effects altered on BHAAL2B.spl ~BHAAL2B.spl~ ~override~ // Dark Taint, 0 effect(s) altered WARNING: no effects altered on BHAAL2B.spl ~BHAAL2B.spl~ ~override~ // Dark Taint, 0 effect(s) altered WARNING: no effects altered on BHAAL2B.spl ~BHAAL2B.spl~ ~override~ // Dark Taint, 0 effect(s) altered Copying and patching 1 file ... [ascension/bhlspwnpwr/bh3b1.eff] loaded, 272 bytes override/bh3b2.eff copied to ascension/backup/4/bh3b2.eff, 272 bytes Copied [ascension/bhlspwnpwr/bh3b1.eff] to [override/bh3b2.eff] Copying and patching 1 file ... [ascension/bhlspwnpwr/bh3b1.eff] loaded, 272 bytes override/bh3b3.eff copied to ascension/backup/4/bh3b3.eff, 272 bytes Copied [ascension/bhlspwnpwr/bh3b1.eff] to [override/bh3b3.eff] Copying and patching 1 file ... [ascension/bhlspwnpwr/bh3b1.eff] loaded, 272 bytes override/bh3b4.eff copied to ascension/backup/4/bh3b4.eff, 272 bytes Copied [ascension/bhlspwnpwr/bh3b1.eff] to [override/bh3b4.eff] Copying and patching 1 file ... [ascension/bhlspwnpwr/bh3b1.eff] loaded, 272 bytes override/bh3b5.eff copied to ascension/backup/4/bh3b5.eff, 272 bytes Copied [ascension/bhlspwnpwr/bh3b1.eff] to [override/bh3b5.eff] Copying and patching 1 file ... [ascension/bhlspwnpwr/bh3b1.eff] loaded, 272 bytes override/balth01a.eff copied to ascension/backup/4/balth01a.eff, 272 bytes Copied [ascension/bhlspwnpwr/bh3b1.eff] to [override/balth01a.eff] Processing quests and journals [./override/bgee.sql] loaded, 49865 bytes override/bgee.sql copied to ascension/backup/4/bgee.sql, 49865 bytes
  14. Trying to use undefined returns a "cannot convert to integer" error. LPF ALTER_EFFECT //Level 1 - 9 slow INT_VAR check_globals = 0 check_headers = 1 header_type = 1 header = 1 multi_match = 1 verbose = 1 match_opcode = 40 match_target = UNDEFINED match_power = UNDEFINED match_parameter1 = UNDEFINED match_parameter2 = UNDEFINED match_timing = UNDEFINED match_resist_dispel = UNDEFINED match_duration = UNDEFINED match_probability1 = UNDEFINED match_probability2 = UNDEFINED match_dicenumber = UNDEFINED match_dicesize = UNDEFINED match_savingthrow = UNDEFINED match_savebonus = UNDEFINED match_special = UNDEFINED match_resource = UNDEFINED savebonus = (0 - 2) END EDIT: Even this returns a warning: LPF ALTER_EFFECT //Level 1 - 9 slow INT_VAR check_globals = 0 check_headers = 1 header_type = 1 header = 1 multi_match = 1 verbose = 1 match_opcode = 40 match_target = 2 match_power = 6 match_parameter1 = 0 match_parameter2 = 0 match_timing = 0 match_resist_dispel = 1 match_duration = 12 match_probability1 = 100 match_probability2 = 0 match_dicenumber = 0 match_dicesize = 0 match_savingthrow = 2 match_savebonus = 0 match_special = 0 match_resource = 0 opcode = 40 target = 2 power = 6 parameter1 = 0 parameter2 = 0 timing = 0 resist_dispel = 1 duration = 12 probability1 = 100 probability2 = 0 dicenumber = 0 dicesize = 0 savingthrow = 0 savebonus = (0 - 2) special = 0 STR_VAR resource = 0 END
×
×
  • Create New...