Opened 16 years ago

Closed 15 years ago

Last modified 9 months ago

#7263 closed enhancement

support comi demo

Reported by: SF/khalek Owned by: cyxx
Priority: normal Component: Engine: SCUMM
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 Changed 16 years ago by fingolfin

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

comment:2 Changed 16 years ago by SF/khalek

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
#3 0x080606f9 in CharsetRendererNut (this=0x81836e0,
vm=0x403688a0) at scumm/charset.cpp:403
#4 0x0804e964 in Scumm::scummInit() (this=0x8164b50) at

comment:3 Changed 16 years ago by fingolfin

What is the status of this now?

comment:4 Changed 16 years ago by SF/khalek

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 Changed 15 years ago by fingolfin

What is the status of this item?

comment:6 Changed 15 years ago by cyxx

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

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 :)

comment:7 Changed 15 years ago by fingolfin

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

comment:8 Changed 15 years ago by fingolfin

COMI demo indeed works fine now.

comment:9 Changed 15 years ago by fingolfin

Owner: set to cyxx
Status: newclosed

comment:10 Changed 9 months ago by digitall

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