Opened 17 years ago

Closed 16 years ago

Last modified 12 months ago

#618 closed defect (fixed)

INDY3: Levitating guard

Reported by: eriktorbjorn Owned by: fingolfin
Priority: normal Component: Engine: SCUMM
Keywords: Cc:
Game: Indiana Jones 3

Description

The drunken guard in Castle Brunwald is often drawn
without his head, and if you fight him he starts to
levitate. This happens both with 0.3.0b and recent CVS
snapshots.

Ticket imported from: #650736. Ticket imported from: bugs/618.

Attachments (3)

indy3.s20 (30.8 KB ) - added by eriktorbjorn 17 years ago.
Savegame outside the guard's room
snapshot1.png (30.2 KB ) - added by eriktorbjorn 17 years ago.
Screenshot
snapshot2.png (30.3 KB ) - added by eriktorbjorn 17 years ago.
Screenshot

Download all attachments as: .zip

Change History (16)

by eriktorbjorn, 17 years ago

Attachment: indy3.s20 added

Savegame outside the guard's room

by eriktorbjorn, 17 years ago

Attachment: snapshot1.png added

Screenshot

by eriktorbjorn, 17 years ago

Attachment: snapshot2.png added

Screenshot

comment:1 by SF/khalek, 17 years ago

This could actually be due to endy's hack to prevent indy
and a few other characters being headless or just an
instance it didn't touch. We need to find a nice correct fix...

see startAnimActor() in actor.cpp currently around line 460
for the fixme

comment:2 by SF/ender, 17 years ago

Well, it's not DUE to the hack, it's just a case that the hack
doesn't prevent.

Yes, a proper fix would be oh-so-nice... but both myself and Yaz
have spent considerable time trying to find the cause of the actor
animation problems, and failed.

comment:3 by eriktorbjorn, 17 years ago

Right. The existing Indy 3 anti-decapitation hack only
remaps frame 3 to initFrame, as far as I can see. With the
drunken guard it seems to be frames 6 and 7 that, for
whatever reason, are lacking a head.

I think I did figure out what's causing the guard to
levitate, though. It appears to be script 37 that controls
his movements, and this is what it does:

[0024] (C3) Local[0] = getActorX(Var[219])
[0029] (A3) Local[1] = getActorY(Var[219])
[002E] (BA) Local[0] -= Var[221];
[0033] (F8) if (Local[0] < Var[222]) {
[003A] (5A) Local[0] += 8;
[003F] (**) }
[003F] (C4) if (Local[0] > Var[223]) {
[0046] (3A) Local[0] -= 8;
[004B] (**) }
[004B] (E1) putActor(Var[219],Local[0],Local[1])

Which would be fine, except there's an Indy 3 hack in
o5_getActorY() that makes the result one less than it should
be. Apparently this is to fix bug #636433. I haven't gotten
far enough to know anything about that one though.

comment:4 by fingolfin, 17 years ago

I removed the indy 3 head hack today, it's not needed anymore. I
wonder if this problem got any better, too. Sadly the attached save
game doesn't work for me, so I can't verify it.

comment:5 by SF/khalek, 17 years ago

he seems to have his head now but still levitates when you
fight him. I assume thats a different bug though...

comment:6 by eriktorbjorn, 17 years ago

As mentioned below, the levitation is probably because of
another Indy 3 hack in o5_getActorY(). But I haven't looked
at this in a long time now...

comment:7 by fingolfin, 17 years ago

Maybe the hack in o5_getActorY() can be restricted to the room where it is
needed only.. or maybe it is not even needed anymore even there?

comment:8 by fingolfin, 17 years ago

Summary: INDY3: Headless guardINDY3: Levitating guard

comment:9 by fingolfin, 16 years ago

I did restrict the hack. Does it help?

comment:10 by fingolfin, 16 years ago

Resolution: fixed
Status: newclosed

comment:11 by fingolfin, 16 years ago

Khalek says it's fixed now.

comment:12 by fingolfin, 16 years ago

Owner: set to fingolfin

comment:13 by digitall, 12 months ago

Component: Engine: SCUMM
Game: Indiana Jones 3
Note: See TracTickets for help on using tickets.