Opened 18 years ago
Closed 18 years ago
Last modified 18 years ago
#2026 closed defect (fixed)
MI1VGA: Guybrush turns into a rowboat
|Reported by:||SF/florob||Owned by:||fingolfin|
|Cc:||Game:||Monkey Island 1|
Windows XP ScummVM 0.8.0CVS (May 14 2005 19:12:08) Features compiled in: Vorbis MP3 zLib MPEG2 compiled with msys/mingw (if that matters). Didn't occur in 0.7.1
If you go to the monkey head on Monkey Island and leave it again you become become a row boat above the Island (and don't have to get the paddle anymore). I attached a savegame where you just have to leave the Monkey head.
Ticket imported from: #1202029. Ticket imported from: bugs/2026.
Change History (14)
by , 18 years ago
comment:1 by , 18 years ago
Just adding a note that it appears the savegame is for the German version. (I can't test it since I only have the English version myself.)
comment:2 by , 18 years ago
become VS get...
florob probably confused those terms, after reading the post it seems Guybrush doesn't become a rowbout, but it gets enabled... just to clarify (can't test, am at work)
(in linguistics, this is called a "false friend", words that sound the same in 2 languages but mean different things)
comment:3 by , 18 years ago
no, I actually meant to say become: OK, that is not really true, because he only sits in the rowboat, but it's not like he only gets it (that would be the paddles are suddenly there). To test this you could also use boot param 5 ("./scummvm.exe -d0 -b 5 monkeyvga") go to the monkey head and leave it again.
comment:4 by , 18 years ago
Interesting. The entry script of room 5 determines based on the result of getActorWalkBox(VAR_EGO) whether Guybrush should be the rowboat or not. Now, apparently something changed the walkbox behaviour recently. it used to work perfectly in 0.7.x and older.
comment:5 by , 18 years ago
|Summary:||MI1VGA: Guybrush becomes a rowboat → MI1VGA: Guybrush turns into a rowboat|
comment:6 by , 18 years ago
Reverting the change made between version 1.402 and 1.403 of scumm.cpp in startScene() fixes the problem. Might be good to recheck if it's really scumm 5+ specific.
comment:7 by , 18 years ago
|Priority:||normal → high|
comment:8 by , 18 years ago
Ah indeed. Yeah it is more likely that hte code is valid for what we call "V4+". Note that our "_version" does not exactly correspond to the versions used by LucasArts, as listed on <http://wiki.scummvm.org/ index.php/SCUMM_Versions>
comment:9 by , 18 years ago
That change is definately correct, in earlier games that section of code doesn't exist in startScene(). Earlier games have similar code in o_loadRoomWithEgo() only. So while that change to startScene() triggered the bug, the real problem must be elsewhere.
comment:10 by , 18 years ago
In ScummVM we set the actor to position 0,0 in the new room, at the start of o_loadRoomWithEgo(), where did those zero values come from ?
The original games set the actor position to the last values of _xPos and _yPos (Global variables). _xPos and _yPos are used by several functions but aren't set specifically by o_loadRoomWithEgo().
comment:11 by , 18 years ago
I found the answer, by comparing SCUMM versions. SCUMM6 onwards (In ScummVM) sets the actor position to 0,0 in o_loadRoomWithEgo().
So it looks like there is a difference with that putActor() call in o_loadRoomWithEgo() in SCUMM5 and earlier (In ScummVM), which we are missing.
comment:12 by , 18 years ago
Fixed in CVS. The solution I used is to use a->_pos.x/y instead of 0/0 in loadRoomWithEgo. While that isn't 100% true to the originall, it (a) works and (b) is what was done in scummvm 0.1.0 & 0.2.0.
Thanks for the input, Kirben & cyx.
comment:13 by , 18 years ago
|Status:||new → closed|
Savegame (with CVS 14.5.2005)