[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