Opened 21 years ago

Closed 20 years ago

Last modified 5 years ago

#7263 closed feature request

support comi demo

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

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

comment:2 by SF/khalek, 21 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/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 by fingolfin, 21 years ago

What is the status of this now?

comment:4 by SF/khalek, 21 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, 20 years ago

What is the status of this item?

comment:6 by cyxx, 20 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 :)

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

comment:7 by fingolfin, 20 years ago

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

comment:8 by fingolfin, 20 years ago

COMI demo indeed works fine now.

comment:9 by fingolfin, 20 years ago

Owner: set to cyxx
Status: newclosed

comment:10 by digitall, 5 years ago

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