Opened 16 years ago

Closed 16 years ago

Last modified 7 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 16 years ago.
Savegame outside the guard's room
snapshot1.png (30.2 KB) - added by eriktorbjorn 16 years ago.
Screenshot
snapshot2.png (30.3 KB) - added by eriktorbjorn 16 years ago.
Screenshot

Download all attachments as: .zip

Change History (16)

Changed 16 years ago by eriktorbjorn

Attachment: indy3.s20 added

Savegame outside the guard's room

Changed 16 years ago by eriktorbjorn

Attachment: snapshot1.png added

Screenshot

Changed 16 years ago by eriktorbjorn

Attachment: snapshot2.png added

Screenshot

comment:1 Changed 16 years ago by SF/khalek

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 Changed 16 years ago by SF/ender

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 Changed 16 years ago by eriktorbjorn

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 Changed 16 years ago by fingolfin

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 Changed 16 years ago by SF/khalek

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

comment:6 Changed 16 years ago by eriktorbjorn

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 Changed 16 years ago by fingolfin

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 Changed 16 years ago by fingolfin

Summary: INDY3: Headless guardINDY3: Levitating guard

comment:9 Changed 16 years ago by fingolfin

I did restrict the hack. Does it help?

comment:10 Changed 16 years ago by fingolfin

Resolution: fixed
Status: newclosed

comment:11 Changed 16 years ago by fingolfin

Khalek says it's fixed now.

comment:12 Changed 16 years ago by fingolfin

Owner: set to fingolfin

comment:13 Changed 7 months ago by digitall

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