[Scummvm-tracker] [ScummVM] #10814: QFG4: Crash in cave when fighting Pit Horror below the tightrope

Vhati trac at scummvm.org
Thu Nov 22 03:39:00 CET 2018


#10814: QFG4: Crash in cave when fighting Pit Horror below the tightrope
--------------------------------+-------------------------
  Reporter:  Vhati              |      Owner:  (none)
      Type:  defect             |     Status:  new
  Priority:  normal             |  Component:  Engine: SCI
Resolution:                     |   Keywords:  SCI32
      Game:  Quest for Glory 4  |
--------------------------------+-------------------------

Comment (by Vhati):

 @m-kiewitz:
 > It looks to me as if it's g188_egoSpell, that is returning an object.

 I thought the onMe(x, y) would do hit detection and return a boolean?
 SCI Companion highlights the inner OnMe brown: it's asking the kernel to
 handle it.

 Digging up g188_egoSpell's class...

 script 38 - sActor::onMe()
 {{{
 (method (onMe param1 param2)
         (OnMe param1 param2 self (& signal skipCheck))
 )
 }}}
 \\
 \\
 In any case, the error is complaining about a bitwise operator.
 (| a b) is a bitwise operator.
 (or a b) is a conditional operator.
 \\
 \\
 Debugger's "registers" command reports pc=002e:0410 when the error occurs.
 {{{
 002e:0404: 78             push1
 002e:0405: 72 10 00       lofsa horror[1694]
 002e:0408: 36             push
 002e:0409: 43 0a 02 00    callk SetNowSeen[a],  0002
 002e:040d: 36             push
 002e:040e: 35 01          ldi   01
 002e:0410: 14             or
 }}}
 It's doing a bitwise OR between what I'd expect to be the kernel call's
 result and 1.

 Breaking just after the call, acc=002e:1694, which is the address of
 horror. The kernel is either leaving the accumulator untouched - horror
 was the last thing in acc - or the kernel is returning the object it was
 given.

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


More information about the Scummvm-tracker mailing list