Inventory
Engine Verification
- Verify functions:
- ScummEngine::runInputScript()
- V2 opcodes:
- beginOverride
- waitForMessage
- waitForSentence
- waitForActor
- assignVarWordIndirect
- assignVarByte
- addIndirect
- subIndirect
- add
- subtract
- isLessEqual
- isGreaterEqual
- isLess
- isGreater
- ifClassOfIs
- startScript
- chainScript
- ifNotState08
- ifState08
- ifNotState04
- ifState04
- ifState02
- ifNotState02
- ifNotState01
- ifState01
- setState08 * does not appear to request redraw (as clearState08 does)
- clearState08
- setState04
- clearState04
- setState02
- clearState02
- setState01
- clearState01
- drawObject
- pickupObject * checking
- loadRoomWithEgo * unchecked
- setBitVar * unchecked
- getBitVar * unchecked
- setOwnerOf * unchecked
- delay * unchecked
- walkActorToObject * unchecked
- putActorAtObject * unchecked
- walkActorTo * unchecked
- setActorElevation * unchecked
- putActor * unchecked
- setObjPreposition * unchecked
- getObjPreposition * unchecked
- doSentence * unchecked
- drawSentence * unchecked
- cutscene * unchecked
- endCutscene * unchecked
- setCameraAt * unchecked
- panCameraTo * unchecked
- cursorCommand * unchecked
- getActorX * unchecked
- getActorY * unchecked
- getActorElevation * unchecked
- getActorWalkBox * unchecked
- animateActor * unchecked
- setObjectName * unchecked
- saveLoadGame * unchecked
- resourceRoutines * unchecked
- restart * unchecked
- setBoxFlags * unchecked
- verbOps * unchecked
- roomOps * unchecked
- actorOps * unchecked
- actorFromPos * unchecked
- findObject * unchecked
- switchCostumeSet
- V5 opcodes:
- jumpRelative * unchecked
- stopObjectCode * unchecked
- breakHere * unchecked
- setVarRange * unchecked
- move * unchecked
- increment * unchecked
- decrement * unchecked
- equalZero * unchecked
- notEqualZero * unchecked
- isNotEqual
- isEqual
- stopScript * unchecked
- pseudoRoom * unchecked
- loadRoom * unchecked
- getObjectOwner * unchecked
- printEgo * unchecked
- print * unchecked
- getDist * unchecked
- getClosestObjActor * unchecked
- getRandomNr * unchecked
- getActorMoving * unchecked
- isSoundRunning * unchecked
- isScriptRunning * unchecked
- delayVariable * unchecked
- stopSound * unchecked
- startMusic/startSound * unchecked
- walkActorToActor * unchecked
- putActorInRoom * unchecked
- actorFollowCamera * unchecked
- getActorCostume * unchecked
- getActorRoom * unchecked
- getActorFacing * unchecked
- faceActor * unchecked
- lights * unchecked
- stopMusic * unchecked
Graphics
- Flashlight shape
- Gray room palette in flashlight mode
Scripts
- Fix freeze after scrolling Maniac Manion logo
- Somehow add static MM logo and LucasArts logo (needs to be done before engine initializes)
Sound
Sound Format:
uint16 length (added by extract util)
uint8 slot - specifies which slot the sound plays in - 2 for music, 0/1/4 for sound effects
- slot 4 sound effects appear to play in slot 0, but only if no music is playing?
uint8 type - 10 (0x0A) for sound effects, 100 (0x64) for music
uint8 data[]
Type 10 data:
[03/07/0B/0F] - next 4 bytes is data for sound channel 0/1/2/3 (square1, square2, triangle, noise)
[10] - next byte is a number of frames to wait before processing the next update
[FE] - loop back to beginning
[FF] - terminate sound
Type 100 data:
uint8 auxLen - specifies length of auxiliary data blocks
uint8 noteInstrs[auxLen] - Specifies the instrument of each predefined note
uint8 noteFreqs[auxLen] - Specifies the pitch of each predefined note
uint8 music[]:
00 thru (auxLen-1) - start playing a note using the specified instrument at the specified pitch
auxLen thru (auxLen+15) - update the note playing in the specified instrument (?)
(auxLen+16) thru 0xFF - delay N-auxLen-16 frames before parsing next byte
[FE] - loop back to beginning
[FF] - terminate sound
There are a total of 16 instruments, spread out over the 4 NES sound channels using the following mapping:
A total of 28 commands exist within the sound engine, each tied to one or more instruments.
Sound channels: (00 = square A, 01 = square B, 02 = triangle, 03 = noise)
* 00 00 00 00 00 00 00 01 01 01 02 02 01 03 03 03
Start commands:
* 05 03 06 08 0B 01 01 1A 16 06 04 17 02 10 0E 0D
Update (?) commands:
* 0F 00 00 09 00 14 15 00 00 00 1B 1B 0F 0F 0F 0F