Username:    Password:    Login
Main  Secrets  Links  Specs  Articles  Forum  News  Downloads  Utilities  SCUMM?  Games  Demos  Contact
Main  Secrets  Links  Specs  Articles  Forum  News  Downloads  Utilities  SCUMM?  Games  Demos  Contact

SCUMM file format specifications and documentation

The Really Useful SCUMM etc. Info File
Maniac Mansion .lfl-files
Additional .lfl info
AKOS format
Preliminary SAN documentation
Monkey Island 1 & 2 costume format
Monkey Island 2 costume format
Monkey Island 2 SCUMM opcodes
SCUMM index files
.bun file format
.lab file format
EMI .lab file format
EMI .til file format
GF/EMI .laf fonts file format
EMI mesh specs

(download file)


Monkey Island 2 SCUMM opcodes
=============================

Variable range       [0-0x31F]
variables are wordsize.

Local variable range [0-0x10]
Local variables are wordsize.

Bit variable range   [0-0xFF]
NOTE: Bit variables are wordsize and only take values 0 or 1!

Varbits
=======
Variables now take control bits (known as varbits) in their highbyte.
The meanings of the varbits are as follows:

 Hex  Binary  Decimal Function
  80 10000000   128   Var is a Bit variable.
  40 01000000    64   Var is a Local variable.
  20 00100000    32   Var is relative and takes another parameter
                      as a pointer.
                      NOTE: if bit 5 in the parameter is set aswell
                            then the parameter denotes a Var(parameter)

Examples
--------
1A aa bb cc dd              MOV Var(bbaa)=ddcc
1A aa 2b cc dd ee ff        MOV Var(baa+ddcc),ffee
1A aa 2b cc 2d ee ff        MOV Var(baa+Var(dcc)),ffee
1A aa 4b cc dd              MOV Localvar(baa),ddcc
1A aa 8b cc dd              MOV Bitvar(baa),ddcc

9A aa 2b cc 2d ee 2f gg hh  MOV Var(baa+Var(dcc)),Var(fee+Var(hhgg))
9A aa 2b cc dd ee 4f        MOV Var(baa+ddcc),Localvar(fee)

-----------------------------------------------------------------------
pickUp (object nr, room nr) *
===========================

Removes the object from the designated room and adds it to the inventory.
If the room nr is zero, the object is taken from the current room.

25 pickUp (word(a), byte(b))
65 pickUp (word(a), var(b))
A5 pickUp (var(a), byte(b))
E5 pickUp (var(a), var(b))
-----------------------------------------------------------------------
stopScript *
==========

Stops the current script.

00 stopScript
A0 stopScript
-----------------------------------------------------------------------
print *
=====

Print a scumm-string to screen.
The string contains all kinds of control codes that haven't been looked
into. Probably has to do with x,y-pos, color etc etc

A scumm-string allways ends with 0xff.

14 byte(a) string
94 var(a) string
-----------------------------------------------------------------------
cursor *
======

Cursor commands.

2C 01 cursor.On
2C 02 cursor.Off
2C 05 cursor.Inc (cursor is incremented???)
2C 06 cursor.Dec (cursor is decremented???)
-----------------------------------------------------------------------
getActorCostume(var number, actor number) *
=========================================

Gets the costume nr of the given actor and stores it in a var.

71 getActorCostume (var(a), byte(b))
F1 getActorCostume (var(a), var(b))
-----------------------------------------------------------------------
chainScript(script number) *
==========================

Stops the active script, loads the given script and starts executing that one.

42 chainScript (byte(a))
C2 chainScript (var(a))
-----------------------------------------------------------------------
getActorLocation(var number, actor number) *
==========================================

Gets the room number of the specified actor is in and stores it in the
specified variable.

03 getActorLocation (var(a), byte(b))
83 getActorLocation (var(a), var(b))
-----------------------------------------------------------------------
walkActorTo(actor number, x-pos, y-pos) *
=======================================

Lets the actor walk towards x-pos, y-pos.

1E walkActorTo (byte(a), word(b), word(c))
3E walkActorTo (byte(a), word(b), var(c))
5E walkActorTo (byte(a), var(b), word(c))
7E walkActorTo (byte(a), var(b), var(c))
9E walkActorTo (var(a), word(b), word(c))
BE walkActorTo (var(a), word(b), var(c))
DE walkActorTo (var(a), var(b), word(c))
FE walkActorTo (var(a), var(b), var(c))
-----------------------------------------------------------------------
putActor (actor number, x-pos, y-pos) *
=====================================

Positions the actor at x-pos, y-pos in the actor's current room location.

01 putActor(byte(a), word(b), word(c))
21 putActor(byte(a), word(b), var(c))
41 putActor(byte(a), var(b), word(c))
61 putActor(byte(a), var(b), var(c))
81 putActor(var(a), word(b), word(c))
A1 putActor(var(a), word(b), var(c))
C1 putActor(var(a), var(b), word(c))
E1 putActor(var(a), var(b), var(c))
-----------------------------------------------------------------------
isGreaterEqual a,b *
==================

Var(a)>=b?
if a>=b execute the next instruction, else branch to current offset+c.

04 isGreaterEqual (var(a), word(b)), word(c)
84 isGreaterEqual (var(a), var(b)), word(c)
-----------------------------------------------------------------------
isNotEqual a,b *
==============

Var(a)<>b?
if a<>b execute the next instruction, else branch to current offset+c.

08 isNotEqual (var(a), word(b)), word(c)
88 isNotEqual (var(a), var(b)), word(c)
-----------------------------------------------------------------------
getObjectState a,b *
==================

The state of object(b) is stored in var(a).

0F getObjectState (var(a), word(b))
8F getObjectState (var(a), var(b))
-----------------------------------------------------------------------
getObjectOwner a,b *
==================

The owner of object(b) is stored in var(a).

10 getObjectOwner (var(a), word(b))
90 getObjectOwner (var(a), var(b))
-----------------------------------------------------------------------
and a,b *
=======

var(a)=var(a) and b

17 and (var(a), word(b))
97 and (var(a), var(b))
-----------------------------------------------------------------------
jumpRelative a *
==============

Jump a bytes forward (or backward).
Counted from the offset of the next instruction.

18 jumpRelative a
-----------------------------------------------------------------------
move a,b *
========

Stores the value of b in var(a).

1A move (var(a), word(b))
9A move (var(a), var(b))
-----------------------------------------------------------------------
multiply a,b *
============

Multiplies var(a) with b.

1B multiply (var(a), word(b))
9B multiply (var(a), var(b))
-----------------------------------------------------------------------
equalZero a *
===========

If var(a)==0 execute the next instruction, else branch to current offset+b.

28 equalZero (var(a)),word(b)
-----------------------------------------------------------------------
lessOrEqual a,b *
===============

if var(a)=b execute next instruction, else branch to current offset+c. 

78 isGreater (var(a), word(b))
F8 isGreater (var(a), var(b))
-----------------------------------------------------------------------
notEqualZero a *
==============

If var(a)<>0 execute next instruction, else branch to current offset+b.

A8 notEqualZero (var(a)), word(b)
-----------------------------------------------------------------------
decrement a *
===========

Var(a) is decremented by 1.

C6 decrement (var(a))
-----------------------------------------------------------------------

Internals:

ds:2492 script structures (total size=360 bytes, structure size=18 bytes)

 20 scripts running concurrently

 2492 word scriptOfs
 2494 word scriptSeg
 2496 word 
 2498 word
 249A word scriptNumber  (0:no script else number of global script)
 249C byte scriptStatus  (0:stopped
                          1
                          2:running
 249D byte
 249E byte
 249F byte
 24A0 byte
 24A1 byte
 24A2 byte activeCutScene (0:no cutscene

ds:261C (total size ?, structure size=30 bytes)
ds:4ADA object table (total size, struc size 2 bytes)

 bit 87654321
     |||||--> object owner (actornr)
     |-->     object state     

ds:4D1E cutscene structures (total size 20 bytes=

 4D1E word
 4D20 word

ds:4D3A object structure (total size 256 bytes=
ds:4E2A (total size 5 bytes=
ds:6C6C inventorylist (size 160 bytes, 80 items)

 6C6C word objectNr (0:position empty)

ds:71E0 scumm variables (total size 1602 bytes, 801 items)

Scumm Var Nr     Function
-------------------------
10               contains current drive number
37               Text speed
39		 Debug mode
44		 x-position of cursor
45		 y-position of cursor
49		 current video mode
51               contains disk medium (0:floppy 1:fixed disk)
57               contains last pressed keyboard char
67		 mouse present (0:no 1:yes)
68		 machine speed
69		 video speed
scumm.mixnmojo.com

RANDOM ARTICLE
Article


Google THIS SITE
Web
scumm.mixnmojo.com


FEATURED PROGRAM
SCUMM Revisited screenshot
SCUMM Revisited



HOT LINKS
ScummVM
Quick & Easy
SCUMM Hacking Forum
mixnmojo.com