Difference between revisions of "SCUMM/NES"

From ScummVM :: Wiki
Jump to navigation Jump to search
(→‎Sound: add sound format data)
(→‎Known Issues: this one was fixed in Trac#2536)
 
(17 intermediate revisions by 6 users not shown)
Line 1: Line 1:
== General ==
The NES version is supported (American, European, Swedish, French, German, Spanish, Italian). Please note the beta version is not supported.
The Famicom version (Japanese) is not supported as it does not use the SCUMM engine.
== Things To Do ==
== Things To Do ==
=== Inventory ===
* Make inventory work
=== Engine Verification ===
=== Engine Verification ===
* Verify functions:
* Verify functions:
Line 40: Line 43:
*** clearState01
*** clearState01
*** drawObject
*** drawObject
*** pickupObject * checking
*** pickupObject * partially checked
*** loadRoomWithEgo * unchecked
*** loadRoomWithEgo * unchecked
*** setBitVar * unchecked
*** setBitVar * unchecked
*** getBitVar * unchecked
*** getBitVar * unchecked
*** setOwnerOf * unchecked
*** setOwnerOf * unchecked
*** delay * unchecked
*** delay
*** walkActorToObject * unchecked
*** walkActorToObject * unchecked
*** putActorAtObject * unchecked
*** putActorAtObject * unchecked
*** walkActorTo * unchecked
*** walkActorTo * unchecked
*** setActorElevation * unchecked
*** setActorElevation * different - does not multiply elevation by 2, takes it as-is
*** putActor * unchecked
*** putActor * unchecked
*** setObjPreposition * unchecked
*** setObjPreposition * different - does nothing at all
*** getObjPreposition * unchecked
*** getObjPreposition
*** doSentence * unchecked
*** doSentence * partially checked
*** drawSentence * unchecked
*** drawSentence * unchecked
*** cutscene * unchecked
*** cutscene * difference - also saves _currentScript and clears some click-related vars
*** endCutscene * unchecked
*** endCutscene * difference - clears the _currentScript var saved in cutscene
*** setCameraAt * unchecked
*** setCameraAt * difference - sets camera to Panning mode, not Normal mode
*** panCameraTo * unchecked
*** panCameraTo * difference - no mention of camera._movingToActor
*** cursorCommand * unchecked
*** cursorCommand
*** getActorX * unchecked
*** getActorX
*** getActorY * unchecked
*** getActorY
*** getActorElevation * unchecked
*** getActorElevation * different - does not divide elevation by 2, returns it as-is
*** getActorWalkBox * unchecked
*** getActorWalkBox
*** animateActor * unchecked
*** animateActor * unchecked
*** lights * partially checked
*** setObjectName * unchecked
*** setObjectName * unchecked
*** saveLoadGame * unchecked
*** resourceRoutines * different - does nothing at all
*** resourceRoutines * unchecked
*** restart * unchecked
*** restart * unchecked
*** setBoxFlags * unchecked
*** setBoxFlags
*** verbOps * unchecked
*** verbOps * different - no case for 0xFF (verb on/off), sets fewer vars
*** roomOps * unchecked
*** roomOps * different - lacks case 2 (room color)
*** actorOps * unchecked
*** actorOps
*** actorFromPos * unchecked
*** actorFromPos * unchecked
*** findObject * unchecked
*** findObject * unchecked
Line 96: Line 99:
*** getDist * unchecked
*** getDist * unchecked
*** getClosestObjActor * unchecked
*** getClosestObjActor * unchecked
*** getRandomNr * unchecked
*** getRandomNr
*** getActorMoving * unchecked
*** getActorMoving
*** isSoundRunning * unchecked
*** isSoundRunning
*** isScriptRunning * unchecked
*** isScriptRunning
*** delayVariable * unchecked
*** delayVariable
*** stopSound * unchecked
*** stopSound
*** startMusic/startSound * unchecked
*** startMusic/startSound
*** walkActorToActor * unchecked
*** walkActorToActor * unchecked
*** putActorInRoom * unchecked
*** putActorInRoom * unchecked
*** actorFollowCamera * unchecked
*** actorFollowCamera * unchecked
*** getActorCostume * unchecked
*** getActorCostume
*** getActorRoom * unchecked
*** getActorRoom
*** getActorFacing * unchecked
*** getActorFacing
*** faceActor * unchecked
*** faceActor * unchecked
*** lights * unchecked
*** saveLoadGame
*** stopMusic * unchecked
*** stopMusic * different - only stops music track


=== Graphics ===
=== Graphics ===
Line 121: Line 124:
* Somehow add static MM logo and LucasArts logo (needs to be done before engine initializes)
* Somehow add static MM logo and LucasArts logo (needs to be done before engine initializes)


=== Sound ===
== Known Issues ==
* Sound
* Moving the cursor in the verb/inventory area will 'select' objects in the room if they touch the top of the room (example: stairs)
 
* Text wrapping doesn't work for the sentence bar (it moves down 1 pixel, right in the middle of the word; needs to wrap at name/word boundaries)
Sound Format:
* Walking and talking at the same time doesn't work - stop walking while talking and your mouth will not move, stop talking while walking and you start sliding across the room.
uint16 length (added by extract util)
* Clicking in the top 16 pixels of the screen (above the subtitle bar) crashes the program.
uint8 slot - specifies which slot the sound plays in - 2 for music, 0/1/4 for sound effects (slot 4 attempts to play in slot 2 only if there is no music playing)
* Walkboxes have some bugs - in some cases, you can walk through corners. This appears to be a bug with all V1-V2 games.
uint8 type - 10 (0x0C) for sound effects, 100 (0x64) for music
* The 'maniac mansion' logo scroll during the intro gets stuck due to a camera issue (original engine expects screen to be 224 wide, but in ScummVM it's 256 wide so it can't scroll far enough).
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
[FF] - terminate sound
[FE] - loop back to beginning
 
Type 100 data:
uint8 auxLen - specifies length of some sort of auxiliary data
uint8 auxdata[auxLen] - a long sequence of small numbers, slowly incrementing
uint8 unknown[] - haven't decoded yet

Latest revision as of 11:41, 1 September 2024

General

The NES version is supported (American, European, Swedish, French, German, Spanish, Italian). Please note the beta version is not supported.

The Famicom version (Japanese) is not supported as it does not use the SCUMM engine.

Things To Do

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 * partially checked
      • loadRoomWithEgo * unchecked
      • setBitVar * unchecked
      • getBitVar * unchecked
      • setOwnerOf * unchecked
      • delay
      • walkActorToObject * unchecked
      • putActorAtObject * unchecked
      • walkActorTo * unchecked
      • setActorElevation * different - does not multiply elevation by 2, takes it as-is
      • putActor * unchecked
      • setObjPreposition * different - does nothing at all
      • getObjPreposition
      • doSentence * partially checked
      • drawSentence * unchecked
      • cutscene * difference - also saves _currentScript and clears some click-related vars
      • endCutscene * difference - clears the _currentScript var saved in cutscene
      • setCameraAt * difference - sets camera to Panning mode, not Normal mode
      • panCameraTo * difference - no mention of camera._movingToActor
      • cursorCommand
      • getActorX
      • getActorY
      • getActorElevation * different - does not divide elevation by 2, returns it as-is
      • getActorWalkBox
      • animateActor * unchecked
      • lights * partially checked
      • setObjectName * unchecked
      • resourceRoutines * different - does nothing at all
      • restart * unchecked
      • setBoxFlags
      • verbOps * different - no case for 0xFF (verb on/off), sets fewer vars
      • roomOps * different - lacks case 2 (room color)
      • actorOps
      • 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
      • getActorMoving
      • isSoundRunning
      • isScriptRunning
      • delayVariable
      • stopSound
      • startMusic/startSound
      • walkActorToActor * unchecked
      • putActorInRoom * unchecked
      • actorFollowCamera * unchecked
      • getActorCostume
      • getActorRoom
      • getActorFacing
      • faceActor * unchecked
      • saveLoadGame
      • stopMusic * different - only stops music track

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)

Known Issues

  • Moving the cursor in the verb/inventory area will 'select' objects in the room if they touch the top of the room (example: stairs)
  • Text wrapping doesn't work for the sentence bar (it moves down 1 pixel, right in the middle of the word; needs to wrap at name/word boundaries)
  • Walking and talking at the same time doesn't work - stop walking while talking and your mouth will not move, stop talking while walking and you start sliding across the room.
  • Clicking in the top 16 pixels of the screen (above the subtitle bar) crashes the program.
  • Walkboxes have some bugs - in some cases, you can walk through corners. This appears to be a bug with all V1-V2 games.
  • The 'maniac mansion' logo scroll during the intro gets stuck due to a camera issue (original engine expects screen to be 224 wide, but in ScummVM it's 256 wide so it can't scroll far enough).