SCUMM/NES

From ScummVM :: Wiki
Jump to navigation Jump to search

General

The NES version is supported(American, European, Swedish, French, German, Spanish, Italian).

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.
  • After you select your characters and hit start, the first sound that gets played is 'chirping crickets' instead of 'pickup item'. This may be due to improper handling of o2_stopMusic()
  • 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).