[Scummvm-tracker] [ScummVM] #10835: QFG4: Mage stuck unable to cast spells in endgame crystal room
ScummVM
trac at scummvm.org
Mon Dec 31 05:40:14 CET 2018
#10835: QFG4: Mage stuck unable to cast spells in endgame crystal room
--------------------------------+----------------------------
Reporter: Vhati | Owner: (none)
Type: defect | Status: new
Priority: high | Component: Engine: SCI
Resolution: | Keywords: SCI32 original
Game: Quest for Glory 4 |
--------------------------------+----------------------------
Comment (by Vhati):
@sluicebox:
> What do you mean by moving project off crystal and onto the room?
\\
\\
From [https://bugs.scummvm.org/ticket/10835#comment:8 comments] 8 and 9...
> Another error: If, after killing Ad Avis, you use the lingering Force
Bolt cursor to shoot the crystal... Then shoot the room...
> [...]
> There's only one instance of project getting recycled. All setScript()
calls should be on the same object to avoid zombie references.
On reflection, I'd written that patch before tackling the ProjObj timing.
project was getting stuck at the time, lingering on the room. After
shooting crystal, it was throwing an exception, with references to the
same object on crystal and the room causing an already disposed object to
be disposed again.
When given time to complete, project disposes itself properly. So in
theory, a good ProjObj patch would ensure project is off the room before
it'd appear on crystal. It wouldn't matter that it's sometimes scheduled
in different places if they're not simultaneous. So I wouldn't need that
patch.
\\
\\
@sluicebox:
> Won't setting sMessages as avis' script dispose sUltimateJoke
Running ScummVM's master branch... If you blast Ad Avis while he's
laughing at the joke, he will stop laughing and sMessages takes control of
his sprite. Both scripts do run concurrently in different places, although
sUltimateJoke is idling until its insta-kill.
\\
\\
> and prevent [sUltimateJoke] form expiring too?
sUltimateJoke's countdown never has time to expire in the CD edition. It
only had a chance to trigger its insta-kill in the floppy because it was
competing against a separate ridiculously long timer, which was arguably
erroneous since the CD edition shortened that.
IMO sUltimateJoke's timer shouldn't be a concern. I'd even remove it but
writing a patch to do would be an unnecessary effort.
\\
\\
@sluicebox:
> I changed sAdavisDies from hero's script to the room's script to force
project's disposal even if it got interrupted
I came to the conclusion that project needs to end naturally.
Better than dealing with the fallout from an interruption, as you've
witnessed.
\\
\\
> reassigning things so that project can complete while sMessages runs
creates others
I don't see sMessages as that big a deal. What it does is brief. It just
doesn't clean up after itself when it completes. It just shouldn't be on
the room. midBlast or avis is fine.
\\
\\
> For the death animation I just added a local2 test to sTimeItOut state
1.
I rather like what I came up with for #10844 (reducing literals to a
formula to make room for the local2 check).
I'm not especially enthusiastic about varying ProjObj speed. I mean I
think it'll work, but the way I made room there (reducing y:'s (g0_hero
view?) switch to a simple if-else) made the patch longer than I'd like.
A fixed hero cycleSpeed in project would be nice, but I didn't see room at
the end to restore the original value.
--
Ticket URL: <https://bugs.scummvm.org/ticket/10835#comment:18>
ScummVM <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list