[Scummvm-tracker] [ScummVM] #10615: QFG4: Tentacle doesn't retract after crossing pit at start of game

ScummVM trac at scummvm.org
Thu Dec 27 04:10:42 CET 2018


#10615: QFG4: Tentacle doesn't retract after crossing pit at start of game
--------------------------------+-------------------------
  Reporter:  2Mourty            |      Owner:  (none)
      Type:  defect             |     Status:  new
  Priority:  normal             |  Component:  Engine: SCI
Resolution:                     |   Keywords:  Tentacle
      Game:  Quest for Glory 4  |
--------------------------------+-------------------------

Comment (by Vhati):

 To recap
 * All the other scripts are fine.
 * Mage sLevitateOverPit is solved by giving it fixed speed.
 * Fighter crossByHand originally had a fixed speed but drains stamina
 during the crossing, which makes setting a new slower speed problematic.
 \\
 \\
 script 710 - crossByHand::doit()
 {{{
 (method (doit)
         (super doit: &rest)
         (if (== state 2) (g0_hero useStamina: 1))
 )
 }}}
 Stamina only drains in state 2, the crossing itself!

 If I delay in state 3, there's no drain.
 \\
 \\
 script 710 - crossByHand::changeState()
 {{{
 (3
         (if (not (proc0_4 392))  # Never crossed before.
                 (proc0_2 392)

                 # "You just barely made it across the pit."
                 (g91_gloryMessager say: 10 6 32 0 self)
         else
                 (self cue:)
         )
 )
 (4
         (if (not (proc0_4 101)) ((tentacle script?) cue:))
 # ...
 )
 }}}
 \\
 \\
 > By itself "cycles" won't delay [...] MoveTo is already cueing self. If I
 decline to pass self [as a caller arg], it won't cue().

 Messing with MoveTo was a bad idea.
 Nevertheless, the principle can be applied to say().

 The code above advances in two different ways: a callback from say() or a
 self-cue().
 \\
 \\
 Fighter Patch
 {{{
 (3
         (if (not (proc0_4 392))  # Never crossed before.
                 (proc0_2 392)

                 # Last arg is null instead of self.
                 (g91_gloryMessager say: 10 6 32 0 0)

         # Use cycles to advance, not say() or a self-cue.
         (= cycles 32)
 )
 (4
         (if (not (proc0_4 101)) ((tentacle script?) cue:))
 # ...
 )
 }}}

 Fighter crosses as usual, draining the normal amount of stamina. There's a
 message at the end. Then hero hangs on the rope for a moment longer, cues
 tentacle, and dismounts.

-- 
Ticket URL: <https://bugs.scummvm.org/ticket/10615#comment:16>
ScummVM <https://bugs.scummvm.org>
ScummVM


More information about the Scummvm-tracker mailing list