#6680 INDY3: 'What is' command glitch in the Library

open
nobody
None
5
2014-08-22
2014-07-10
douglas
No

mingw-w64-stable-c36867d1
1.7.0pre-24-gc36867d (64-bit)
on Windows 7 64-bit

At the library in Venice, if you use the 'What is' command and hover the pointer over the librarian, it says he is Irene. Irene is a different character earlier in the game (Jones' secretary at the college), so that name is incorrect.
This glitch happens in both the EGA version and VGA remake of Indiana Jones 3 in ScummVM.
When I tried it in DOSBox, the What is command didn't say anything about the librarian.

I've included saves for both versions in ScummVM, and a save of the EGA version I took in DOSBox with the original .exe

1 Attachments

Discussion

  • douglas
    douglas
    2014-07-11

    I found another occurrence of this glitch in the Brunwald Castle.
    After you knock out the Nazi, if you use the 'What is' command on him, it will say he is Irene too.
    Again, this happens in both the EGA and VGA versions in ScummVM. This glitch does not happen in the original game.
    I've included ScummVM saves for both versions, and a regular save for the VGA version (Due to a glitch with DOSBox I wasn't able to also get a regular save for the EGA version)

     
  • I can reproduce this with the VGA version. I don't have the EGA version, and I wasn't able to reproduce it with the Mac version. (I'll have to look into why that one works after I finish writing this.)

    This seems to only happen if you have met Irene at the beginning of the game. If you just rush off to Venice as quickly as possible, it doesn't.

    What seems to be happening is that internally, both Irene and the librarian are actor number 10, just with different costumes. When you enter Irene's room (room 3), the entry script sets up actor 10 like this:

    [0014] (13) ActorOps(10,[Costume(5),TalkColor(2),Sound(6),Name("Irene")]);
    [0024] (5D) setClass(10,[0,150,149,141]);
    [0034] (2D) putActorInRoom(10,3);
    [0037] (01) putActor(10,174,83);
    [003D] (11) animateCostume(10,250);

    When you exit, it simply does:

    [0000] (5D) setClass(10,[0]);

    When you enter the library (room 16), it sets up actor 10 like this:

    [0013] (5D) setClass(10,[150,148]);
    [001D] (2D) putActorInRoom(10,16);
    [0020] (01) putActor(10,271,118);
    [0026] (0C) Resource.loadSound(6);
    [0029] (13) ActorOps(10,[Costume(74),Sound(6),Width(20)]);
    [0032] (11) animateCostume(10,250);
    [0035] (11) animateCostume(10,3);

    And when you leave:

    [0000] (5D) setClass(10,[0]);

    So at the library, it does not explicitly set any name for the actor. According to the comments in o5_setClass(), "Class '0' means: clear all class data". For actors this does clear some additional things, but the actor name isn't part of the actor data type, it's an entirely separate type of resource.

    The glitch seems to go away if I add _res->nukeResource(rtActorName, obj) to that part of o5_setClass(), but I don't know if it's the right thing to do.

     
  • In the Mac version, for whatever reason it seems that the "What is" command doesn't even try to display the name of actor 10 in the library.