Jump to content

Pause and drop Cheat Fix


Recommended Posts

If the script for AR0602.BCS took the stuff before the SmallWait(4), it would be almost impossible to prevent the items from going away. Edit: tested this, it is still possible. Now to test it as OnCreation(). - hm; that seems to kill things badly with all the testing being done. Moving the stuff to a bare OnCreation() at the start of the script worked, though; but that, of course, destroys all the stuff before the checks can be made for Drizzt Items and the Golden pantaloons. Ah, that did it. Taking the non-OnCration() stuff out of the way, then having all the testing be OnCreation(), I was not able to pause to drop items.

 

In addition, it seems that the IMPORT01.2DA/IMPORT03.2DA lists don't actually work: they always put the default item. Correcting that bug is a major scripting workaround effort. I've got that done, too, now. It might be a good thing to set Illych's script to WEAR that nice armor your torturer let him have, rather than his crummy leather?

 

Also, in a purely stylistic change, the Setting of Chapter to 1 should occur with the NewGame, not the item grabbing.

 

And the Trigger to move the screen to a specific point when Imoen is in the party would be better placed in Imoen's dialog on joining. The current placement in this script is a bad hack.

Link to comment
If the script for AR0602.BCS took the stuff before the SmallWait(4), it would be almost impossible to prevent the items from going away.  Edit: tested this, it is still possible.  Now to test it as OnCreation(). - hm; that seems to kill things badly with all the testing being done.  Moving the stuff to a bare OnCreation() at the start of the script worked, though; but that, of course, destroys all the stuff before the checks can be made for Drizzt Items and the Golden pantaloons.  Ah, that did it.  Taking the non-OnCration() stuff out of the way, then having all the testing be OnCreation(), I was not able to pause to drop items. 

This sounds like a substantial rewrite for little benefit. Not saying we shouldn't remove the exploit, but I think something like using CopyGroundPilesTo to move ground items to a non-available area (corner of one of the dream cuscene areas?) might be simpler--dropping it right before/after the DestroyAllEquipment calls might do it. Players could still drop their stuff but they'd lose it just the same.

 

In addition, it seems that the IMPORT01.2DA/IMPORT03.2DA lists don't actually work: they always put the default item.  Correcting that bug is a major scripting workaround effort.  I've got that done, too, now.  It might be a good thing to set Illych's script to WEAR that nice armor your torturer let him have, rather than his crummy leather?

Err, import01 and import03 work just dandy. I do like the idea of Ilyich actually using his imported armor though.

 

Also, in a purely stylistic change, the Setting of Chapter to 1 should occur with the NewGame, not the item grabbing.

 

And the Trigger to move the screen to a specific point when Imoen is in the party would be better placed in Imoen's dialog on joining.  The current placement in this script is a bad hack.

Sorry, these are both cosmetic changes.

Link to comment
This sounds like a substantial rewrite for little benefit. Not saying we shouldn't remove the exploit, but I think something like using CopyGroundPilesTo to move ground items to a non-available area (corner of one of the dream cuscene areas?) might be simpler--dropping it right before/after the DestroyAllEquipment calls might do it. Players could still drop their stuff but they'd lose it just the same.

Ah, except with the slight problem that it doesn't remove the pile.

Link to comment
If the script for AR0602.BCS took the stuff before the SmallWait(4), it would be almost impossible to prevent the items from going away.  Edit: tested this, it is still possible.  Now to test it as OnCreation(). - hm; that seems to kill things badly with all the testing being done.  Moving the stuff to a bare OnCreation() at the start of the script worked, though; but that, of course, destroys all the stuff before the checks can be made for Drizzt Items and the Golden pantaloons.  Ah, that did it.  Taking the non-OnCration() stuff out of the way, then having all the testing be OnCreation(), I was not able to pause to drop items. 

This sounds like a substantial rewrite for little benefit. Not saying we shouldn't remove the exploit, but I think something like using CopyGroundPilesTo to move ground items to a non-available area (corner of one of the dream cuscene areas?) might be simpler--dropping it right before/after the DestroyAllEquipment calls might do it. Players could still drop their stuff but they'd lose it just the same.

As it turns out, that part of the fix entails just moving the non-startup code after it, making all the startup code have OnCreation(); because it happens before anything is allowed, they can't pause while it's running.

CopyGroundItems() is an ugly hack to work around doing it right.

 

In addition, it seems that the IMPORT01.2DA/IMPORT03.2DA lists don't actually work: they always put the default item.  Correcting that bug is a major scripting workaround effort.  I've got that done, too, now.  It might be a good thing to set Illych's script to WEAR that nice armor your torturer let him have, rather than his crummy leather?

Err, import01 and import03 work just dandy. I do like the idea of Ilyich actually using his imported armor though.

Hm, I was unable to get MISC72, MISC73 or RING25 to replace HELM07 when I had them in my imported character's inventory. Same thing with IMPORT01 items, Like PLAT02. Perhaps I have some strange version of the executable, or maybe it has something to do with using Windows XP Home. It actually matters little: if a bug appears for ANYONE, and van be fixed with no real impact in a manner that will work for EVERYONE, shouldn't it be fixed?

Link to comment
Hm, I was unable to get MISC72, MISC73 or RING25 to replace HELM07 when I had them in my imported character's inventory.  Same thing with IMPORT01 items, Like PLAT02.  Perhaps I have some strange version of the executable, or maybe it has something to do with using Windows XP Home.  It actually matters little: if a bug appears for ANYONE, and van be fixed with no real impact in a manner that will work for EVERYONE, shouldn't it be fixed?

Are you actually importing from BG? Try the attached chr file; this is what I used to test this locally. Ilyich should end up with the Studded Leather of Missile Attraction and the Horn of Kazgaroth will be in the bookshelf where the Helm of Balduran ususally lives.

horntest.rar

Link to comment
Hm, I was unable to get MISC72, MISC73 or RING25 to replace HELM07 when I had them in my imported character's inventory.  Same thing with IMPORT01 items, Like PLAT02.  Perhaps I have some strange version of the executable, or maybe it has something to do with using Windows XP Home.  It actually matters little: if a bug appears for ANYONE, and van be fixed with no real impact in a manner that will work for EVERYONE, shouldn't it be fixed?

Are you actually importing from BG? Try the attached chr file; this is what I used to test this locally. Ilyich should end up with the Studded Leather of Missile Attraction and the Horn of Kazgaroth will be in the bookshelf where the Helm of Balduran ususally lives.

 

Hm. I went back to the shipped script, and it worked fine. Must be the Cal-culator and /or Teleport mods, which both added code to AR0602.bcs

 

Um, I'll go stand over here... never mind that bit :-)

 

But let's see about modding the ILYICH.BCS to have him use any of those good Armors.

 

Some code like this I would expect to do the job, but doesn't somehow.

 

IF
   Global("SwappedArmor","LOCALS",0)
   HasItem("CHAN03",MYSELF)
THEN
    RESPONSE #100
          SetGlobal("SwappedArmor","LOCALS",1)
          UseItemSlot("CHAN03",SLOT_ARMOR)
END

Link to comment

You would need FillSlot(), and it would overwrite his current armor.

 

Locally, I give him an undroppable CHAN03 (I always start fresh, so the import doesn't matter), but that won't help the fixpack. We could do one for each item, but at that point, I'd question somewhat whether it's actually a bug (he could just be safekeeping the item, much as Malaaq, whom you wouldn't expect to actually be using the item).

 

heh, always nice to have your equiptment, after being tortured for who knows how long by an insane mage
No, but I've never been able to reproduce any occurrence of being able to pause before NEWGAME runs, and as such, am slightly wary of altering the new game init code.
Link to comment
You would need FillSlot(), and it would overwrite his current armor.

 

Locally, I give him an undroppable CHAN03 (I always start fresh, so the import doesn't matter), but that won't help the fixpack. We could do one for each item, but at that point, I'd question somewhat whether it's actually a bug (he could just be safekeeping the item, much as Malaaq, whom you wouldn't expect to actually be using the item).

True, but unlike Malaaq he's also actively patrolling--in crappy leather armor no less.

 

Devil's Advocate here. :) I'd like to hear more from other folks on this one.

 

No, but I've never been able to reproduce any occurrence of being able to pause before NEWGAME runs, and as such, am slightly wary of altering the new game init code.

This may be a PC-only quirk--I find it's fairly easy to pull this off.

Link to comment
This may be a PC-only quirk--I find it's fairly easy to pull this off.
Possibly. Or I've just changed so much stuff that it really isn't even Baldur's Gate II anymore. I never can tell.

 

If 99% of the players can pause their game, drop their inventory, and then pick it up, then it's incredibly stupid. Changing the init code is probably going to wreak havoc on every other mod that wants to do something different when starting a new game, though (we might break Game-Be-Gone! NOOOoooooooo!).

Link to comment
This may be a PC-only quirk--I find it's fairly easy to pull this off.
Possibly. Or I've just changed so much stuff that it really isn't even Baldur's Gate II anymore. I never can tell.

 

If 99% of the players can pause their game, drop their inventory, and then pick it up, then it's incredibly stupid. Changing the init code is probably going to wreak havoc on every other mod that wants to do something different when starting a new game, though (we might break Game-Be-Gone! NOOOoooooooo!).

Yeah, The Pause and drop is especially easy, there is a 4-second pause after it sends the stuff off. This is after NewGame is set, but before the DestroyAllItems sequence. unfortunately, even putting the SmallWait AFTER gives you enough time, as the script runs through the earlier stuff. But OnCreation() does it before the GUI starts.

 

Proper behaviour is for events which should always take place upon the players first entering an area to have the following things:

 

IF

OnCreation()

Variable check, in case it's created a second time (savegame lost the file?)

THEN

RESPONSE#100

Variable set

>stuff to do<

Continue()

END

 

If everyone did that, there would never BE any problems with init coe messing up init sequences.

Link to comment

SmallWait() is in ticks (the AI refresh rate, 1/15 a second). So the pause in that block is only 4/15 a second, and wouldn't make a difference whether it came before or after DestroyAllEquipment().

 

OnCreation() fires every time a resource is legitimately loaded (in this case, either starting a new game, transitioning to the area through the AR0603 portal, or loading a saved game), so the variables would be necessary.

 

Possibly easier would be to make Player1 unselectable while all the init code runs, but I wouldn't favor it if Player1 isn't then selected after NEWGAME (the intro cutscene), as is the default behavior.

Link to comment
You would need FillSlot(), and it would overwrite his current armor.

Actually, this:

IF
   Global("SwappedArmor","LOCALS",0)
   OR(5)
        HasItem("CHAN03",Myself)
        HasItem("CHAN07",Myself)
        HasItem("PLAT02",Myself)
        HasItem("LEAT03",Myself)
        HasItem("LEAT06",Myself)
THEN
   RESPONSE #100
       SetGlobal("SwappedArmor","LOCALS",1)
       FillSlot(SLOT_ARMOR)
END

Leaves the LEAT01 in inventory. Which is silly - why would he bother carrying it around - but, heh, who cares, he won't be overloaded. The important thing is he's using the spiffy armor.

 

AC 1 Ilyich :-) Now he starts being a bit of a chore to kill :-)

Link to comment
Possibly easier would be to make Player1 unselectable while all the init code runs, but I wouldn't favor it if Player1 isn't then selected after NEWGAME (the intro cutscene), as is the default behavior.

This works but Player1 is not selected after the cutscene. I'm in favor of it anyway--closing the exploit, IMO, outweighs the inconvenience.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...