HOW TO PLAY: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
Line 1: Line 1:
[[File:howtoplay_nam.png|thumb|A "scripted" how-to-play screen.]]
[[File:howtoplay_nam.png|thumb|A "scripted" how-to-play screen.]]


The HOW_TO_PLAY ($C00474) [[system ROM]] call builds and animates an "how to play" screen from a command list. Not all games use this call.
The HOW_TO_PLAY ($C00474) [[system ROM]] call builds and animates an "how to play" screen from a command list. Only a few games use this call.


The graphics are set up using the [[fix layer]] with hardcoded tile numbers (todo: tilemaps).
The graphics are set up using the [[fix layer]] with hardcoded tile numbers (todo: get tilemaps).


=Command list=
=Command list=


The command list starts at $10F300 (how many bytes reserved ?).
The command list must be loaded at $10F300 (how many bytes reserved ?).


Each command is a longword (4 bytes):
Each command is a longword (4 bytes):
Line 23: Line 23:


* If the parameter byte is less than $FF: Set a loop counter to that value
* If the parameter byte is less than $FF: Set a loop counter to that value
* If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the setup command until it reaches 0
* If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the previous setup command until it reaches 0


==Type 1: Joystick state==
==Type 1: Joystick state==
Line 51: Line 51:
}}
}}


If followed by a null command ($0.l) the next 16-bit word specifies a number of frame to wait before executing the next command.
If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command.


==Type 2: Buttons state==
==Type 2: Buttons state==
Line 73: Line 73:
}}
}}


If followed by a null command ($0.l) the next 16-bit word specifies a number of frame to wait before executing the next command.
If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command.


==Any other type: Text update==
==Any other type: Text update==


The longword value is a point to a [[MESS_OUT]] data buffer.
The longword value is a pointer to a [[MESS_OUT]] data buffer.


This command is '''always''' followed by a 16-bit word value which specifies a number of frame to wait before executing the next command.
This command is '''always''' followed by a 16-bit word value which specifies a number of frames to wait before executing the next command.


=Example=
=Example=
Line 118: Line 118:
* [[Baseball Stars Professional]]
* [[Baseball Stars Professional]]
* [[Mahjong Kyo Retsuden]]
* [[Mahjong Kyo Retsuden]]
* ...


[[Category:Code]]
[[Category:Code]]
[[Category:BIOS calls]]
[[Category:BIOS calls]]

Revision as of 00:06, 13 June 2017

A "scripted" how-to-play screen.

The HOW_TO_PLAY ($C00474) system ROM call builds and animates an "how to play" screen from a command list. Only a few games use this call.

The graphics are set up using the fix layer with hardcoded tile numbers (todo: get tilemaps).

Command list

The command list must be loaded at $10F300 (how many bytes reserved ?).

Each command is a longword (4 bytes):

  • The rightmost byte is the command parameter
  • The next byte is the command type (0~3)
  • If the command type isn't recognized, the longword is processed as being a pointer to a MESS OUT data buffer
  • The end command is $00000000
00000000 00000000 000000TT PPPPPPPP

Type 0: Loop control

  • If the parameter byte is less than $FF: Set a loop counter to that value
  • If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the previous setup command until it reaches 0

Type 1: Joystick state

Sets the color of each joystick direction arrow.

  • 1 is light blue (pressed)
  • 0 is dark blue (released)
Bit 7 6 5 4 3 2 1 0
Def Up-Right Right Down-Right Down Down-Left Left Up-Left Up

If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command.

Type 2: Buttons state

Sets the state of each button.

  • 1 is pressed
  • 0 is released
Bit 7 6 5 4 3 2 1 0
Def - D C B A

If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command.

Any other type: Text update

The longword value is a pointer to a MESS_OUT data buffer.

This command is always followed by a 16-bit word value which specifies a number of frames to wait before executing the next command.

Example

NAM-1975 sets up the following command list:

0000 0200    All buttons released
0000 01FF    All arrows highlighted
0010 F3E2    MESS_OUT write "NAM 1975" "CONTROL HERO AND CURSOR"
0004         Wait 4 frames
0000 000C    Init loop counter to 12
0000 0100    All arrows cleared       <--------------,
0000 0000    Wait...                                 |
0008         ...8 frames                             |
0000 01FF    All arrows highlighted                  |
0000 0000    Wait...                                 |
0008         ...8 frames                             |
0000 00FF    Loop back (blink all arrows 12 times) --'
0000 0201    A button is pressed
0000 0100    All arrows cleared
0010 F418    MESS_OUT write "MACHINE GUN"
0004         Wait 4 frames
0000 000C    Init loop counter to 12
0000 0200    All buttons released     <--------------,
0000 0000    Wait...                                 |
0008         ...8 frames                             |
0000 0201    A button is pressed                     |
0000 0000    Wait...                                 |
0008         ...8 frames                             |
0000 00FF    Loop back (blink A button 12 times) ----'
...

List of games known to use HOW_TO_PLAY