Opened 16 years ago

Closed 16 years ago

Last modified 16 years ago

#832 closed defect (fixed)

FOA: Invalid actor

Reported by: SF/grandepuffo Owned by: fingolfin
Priority: normal Component: Engine: SCUMM
Keywords: script Cc:
Game: Indiana Jones 4

Description

In room 222 (crashed door, robot and chain), crossing
the door causes scummvm to entering console, showing
the following log

Loading room 222
loadResource(Script,23)
loadResource(Room,94)
loadResource(Script,33)
loadResource(Script,19)
loadResource(Script,45)
loadResource(Script,10)
loadResource(Script,131)
(94:206:0x15FFA): Invalid actor 205 in
o5_getActorRoom(94:206:0x15FFA): Invalid
actor 205 in o5_getActorRoom!

i'm using today (05/30/2003) cvs snapshot (0.4.2cvs)

Ticket imported from: #746349. Ticket imported from: bugs/832.

Attachments (1)

atlantis.s11 (84.9 KB) - added by SF/grandepuffo 16 years ago.
Savegame just before the crash

Download all attachments as: .zip

Change History (9)

comment:1 Changed 16 years ago by SF/grandepuffo

Summary: Invalid actorINDY4: Invalid actor

Changed 16 years ago by SF/grandepuffo

Attachment: atlantis.s11 added

Savegame just before the crash

comment:2 Changed 16 years ago by fingolfin

I can't even load this savegame. Was it made with a non-english version of
FOA by chance (your name sounds italian :-)

comment:3 Changed 16 years ago by fingolfin

Owner: set to fingolfin

comment:4 Changed 16 years ago by fingolfin

Found my own savegame for that place to reproduce the problem.

comment:5 Changed 16 years ago by fingolfin

This seems to be either a bug in the FOA scripts, or we have a bug in our
script engine. Script 206 (in room 94) is run from script 200, like this:

...
[0019] (10) Var[442] = getObjectOwner(586)
[001E] (2A) startScript(201,[Var[442]])
[0024] (6A) startScript(206,[Var[442]])
...

The problem is that script 201 gets to run first, and it changes the value of
Var[442], so by the time script 206 is invoked, it gets a bad value as param.

So, either:
1) A script bug, and we should just "ignore" it
2) An engine bug, several things possible:
2a) Maybe high vars should be "buffered", kind of like local vars? That
seems odd... but then again it seems odd to use a global var like 442 for
something which is clearly a local business
2b) Maybe we shouldn't be running script 201/206 immediately but rather
just queue them for running. But that seems very unlikely.

Var[442] is really used a lot for temporary results, in many scripts. I wonder
why they didn't use a localvar instead. Maybe this was kind of a
"TEMP_REGISTER" variable or so.

comment:6 Changed 16 years ago by fingolfin

Keywords: script added
Owner: fingolfin deleted
Summary: INDY4: Invalid actorFOA: Invalid actor

comment:7 Changed 16 years ago by fingolfin

Put a workaround into CVS; but I don't like this a bit, hm...

comment:8 Changed 16 years ago by fingolfin

Owner: set to fingolfin
Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.