Difference between revisions of "SCUMM/NES"

From ScummVM :: Wiki
Jump to navigation Jump to search
Line 134: Line 134:
 
  [03/07/0B/0F] - next 4 bytes is data for sound channel 0/1/2/3 (square1, square2, triangle, noise)
 
  [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
 
  [10] - next byte is a number of frames to wait before processing the next update
 +
[FE] - loop back to beginning
 
  [FF] - terminate sound
 
  [FF] - terminate sound
[FE] - loop back to beginning
 
  
 
  Type 100 data:
 
  Type 100 data:
  uint8 auxLen - specifies length of some sort of auxiliary data
+
  uint8 auxLen - specifies length of auxiliary data blocks
  uint8 auxdata1[auxLen] - a long sequence of small numbers, slowly incrementing
+
  uint8 noteInstrs[auxLen] - Specifies the instrument of each predefined note
  uint8 auxdata2[auxLen] - another sequence of numbers ranging from 00-3F
+
  uint8 noteFreqs[auxLen] - Specifies the pitch of each predefined note
  uint8 unknown[] - haven't decoded yet
+
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
 
  [FF] - terminate sound
  [FE] - loop back to beginning
+
 
 +
  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

Revision as of 07:15, 6 April 2005

Things To Do

Inventory

  • Make inventory work

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
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