Opened 18 years ago

Closed 18 years ago

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

Download all attachments as: .zip

Change History (16)

by eriktorbjorn, 18 years ago

Attachment: indy3.s20 added

Savegame outside the guard's room

by eriktorbjorn, 18 years ago

Attachment: snapshot1.png added

Screenshot

by eriktorbjorn, 18 years ago

Attachment: snapshot2.png added

Screenshot

comment:1 by SF/khalek, 18 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, 18 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, 18 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, 18 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, 18 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, 18 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, 18 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, 18 years ago

Summary: INDY3: Headless guardINDY3: Levitating guard

comment:9 by fingolfin, 18 years ago

I did restrict the hack. Does it help?

comment:10 by fingolfin, 18 years ago

Resolution: fixed
Status: newclosed

comment:11 by fingolfin, 18 years ago

Khalek says it's fixed now.

comment:12 by fingolfin, 18 years ago

Owner: set to fingolfin

comment:13 by digitall, 2 years ago

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