Opened 6 years ago
Closed 6 years ago
#10605 closed defect (fixed)
ZVISION: ZGI: Stuck on the burning doll screen
Reported by: | eriktorbjorn | Owned by: | eriktorbjorn |
---|---|---|---|
Priority: | normal | Component: | Engine: ZVision |
Version: | Keywords: | ||
Cc: | Game: | Zork Grand Inquisitor |
Description
If you bring up the inventory screen after lighting the inquisitor doll on fire before anyone has yelled "Fire! Fire!", you will get stuck on that screen. This appears to be yet another script bug.
In pe.scr, there is the following:
puzzle:17159 { # pe_fire_on_the_box criteria { [17160] = 1 # pe5e_fire_fire } results { action:assign(17160, 0) # pe5e_fire_fire action:timer:17161(15) # pe_fire } } puzzle:17162 { # pe_fire_reset criteria { [17161] > 10 # pe_fire } results { action:add(17161, -10) # pe_fire action:timer:17161([17161]) # pe_fire action:assign(17162, 0) # pe_fire_reset } flags { once_per_inst } } puzzle:17163 { # pe_play_alarm_vo criteria { [17161] = 2 # pe_fire } results { action:assign(17161, 0) # pe_fire action:crossfade(01011 01012 -1 0 55 0 500) # NULL action:kill(01011) # voice_over action:assign(01013, 16) # person_talking action:universe_music:01011(0 pe5eh03p.raw 0 [17155]) # pe_guard_current_volume } }
So the timer starts at 15, and as long as it's > 10 it will count down by 10. When it times out, it's automagically set to 2, which triggers the "Fire! Fire!" sound.
But if the time is killed prematurely, it will write the remaining time into the state value, like this:
TimerNode::~TimerNode() { if (_key != StateKey_NotSet) _engine->getScriptManager()->setStateValue(_key, 2); int32 timeLeft = _timeLeft / (_engine->getGameId() == GID_NEMESIS ? 1000 : 100); if (timeLeft > 0) _engine->getScriptManager()->setStateValue(_key, timeLeft); // If timer was stopped by stop or kill }
So if the timer is killed while the remaining time is less than 10, the timer will stop counting down.
Attachments (1)
Change History (5)
by , 6 years ago
Attachment: | zgi-win.003 added |
---|
comment:1 by , 6 years ago
I'm not sure what the correct solution is, but assuming that the timer handling in general is correct I guess replacing the criteria for 17162 (pe_fire_reset) so that it counts down as long as the timer is > 0 (but not the magic value 2) things should be fine.
Perhaps the timer node should also never write 1 as remaining time, but rather set it to 2 in that case? If so, it should be enough to change the criteria to > 2.
comment:2 by , 6 years ago
Component: | --Unset-- → Engine: ZVision |
---|---|
Game: | → Zork Grand Inquisitor |
comment:3 by , 6 years ago
My workaround [1] was accepted while I was on vacation, so this bug should be fixed now.
comment:4 by , 6 years ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Savegame before lighting the doll on fire.