Opened 18 years ago

Closed 17 years ago

Last modified 2 years ago

#7263 closed enhancement

support comi demo

Reported by: SF/khalek Owned by: cyxx
Priority: normal Component: Engine: SCUMM
Version: Keywords:
Cc: Game: Monkey Island 3


It would be nice if the comi demo could be supported or at least not cause scummvm to segfault. is the web version that doesn't come with smush files.

Ticket imported from: #690559. Ticket imported from: feature-requests/79.

Change History (10)

comment:1 by fingolfin, 18 years ago

A .exe? I think some windows user will have to do that :-)

comment:2 by SF/khalek, 18 years ago

The exe might be a self extracting zip file I can't remember. In any event if yourself or anyone else feels like looking at this I can upload a zip of the webdemo (about 18 meg or so)

backtrace is as follows #0 0x402c519a in mallopt () from /lib/ #1 0x402c4172 in free () from /lib/ #2 0x08072fce in ~NutRenderer (this=0x403688a0) at scumm/nut_renderer.cpp:34 #3 0x080606f9 in CharsetRendererNut (this=0x81836e0, vm=0x403688a0) at scumm/charset.cpp:403 #4 0x0804e964 in Scumm::scummInit() (this=0x8164b50) at scumm/scummvm.cpp:224

comment:3 by fingolfin, 18 years ago

What is the status of this now?

comment:4 by SF/khalek, 18 years ago

still a few issues * music doesn't work * text seems to be spaced rather widely... * long pause between dialogue lines * guybrush dissapears after he picks up the oar or if the intro is skipped * can't pickup hook/use cannon and as a result can't finish the demo

comment:5 by fingolfin, 17 years ago

What is the status of this item?

comment:6 by cyxx, 17 years ago

I think I found something interesting regarding the "guybrush disappears if intro is skipped" issue.

If intro is skipped, a call to o6_putActorAtObject() is made, which calls getObjectXYPos(). If we dump some values in this function, we get : imhd->v8.hotspot[state].x = 237 imhd->v8.hotspot[state].y = 1195461961

The y_hotspot seems obviously wrong.

If we look at the disassembly of this function, we can see that these values are computed like this : x_h = *(uint32 *)((const byte *)imhd + 8 * state + 0x44) y_h = *(uint32 *)((const byte *)imhd + 8 * state + 0x48)

If we compare with the ImageHeader structure defined in scumm/object.h, we see that the offsets don't match.

As I am not familiar at all with the Scumm engine, the only possible explanation I can found is that they added a 4 bytes field to that structure in the interpreter bundled with the full game.

Below is a (very hackish) patch ; with it, I have been able to finish the demo without experiencing any glitches. Of course, this shouldn't be committed, that's just a proof :) ff

comment:7 by fingolfin, 17 years ago

Good catch, cyx. I applied a refined patch to CVS.

comment:8 by fingolfin, 17 years ago

COMI demo indeed works fine now.

comment:9 by fingolfin, 17 years ago

Owner: set to cyxx
Status: newclosed

comment:10 by digitall, 2 years ago

Component: Engine: SCUMM
Game: Monkey Island 3
Note: See TracTickets for help on using tickets.