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

Description

It would be nice if the comi demo could be supported or
at least not cause scummvm to segfault.

ftp://ftp.lucasarts.com/demos/pc/cursedemo.exe 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/libc.so.6
#1 0x402c4172 in free () from /lib/libc.so.6
#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 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
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 :)

http://membres.lycos.fr/cyxdown/scummvm/comidemo_imhd.di
ff

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.