mirror of
https://github.com/pret/pokepinball.git
synced 2025-02-18 20:29:16 +00:00
625 lines
14 KiB
NASM
Executable File
625 lines
14 KiB
NASM
Executable File
|
|
SECTION "WRAM Bank 0", WRAM0
|
|
|
|
wc000::
|
|
ds $400
|
|
|
|
wMonAnimatedCollisionMask:: ; 0xc400
|
|
ds $80
|
|
|
|
ds $80
|
|
|
|
wcBottomMessageText:: ; 0xc500
|
|
ds $200
|
|
|
|
wStageCollisionMap:: ; 0xc700
|
|
; Collision data for each tile for the current stage.
|
|
ds $300
|
|
|
|
ds $600
|
|
|
|
SECTION "WRAM Bank 1", WRAMX, BANK[1]
|
|
|
|
wOAMBuffer:: ; d000
|
|
; buffer for OAM data. Copied to OAM by DMA
|
|
ds 4 * 40
|
|
|
|
ds $160
|
|
|
|
wPaletteData:: ; 0xd200
|
|
; 16 palette definitions
|
|
ds $100
|
|
|
|
wPartyMons:: ; 0xd300
|
|
; List of pokemon in the player's party.
|
|
; When a pokemon is caught, it's appended to this list.
|
|
; When a pokemon is evolved, the pokemon's evolution replaces its entry in the list.
|
|
ds $160
|
|
|
|
wNumPartyMons:: ; ; 0xd460
|
|
; Number of pokemon in the wPartyMons list.
|
|
ds 1
|
|
|
|
ds 9
|
|
|
|
wScore:: ; 0xd46a
|
|
; player's current score
|
|
ds 6
|
|
|
|
ds $e
|
|
|
|
wBallType:: ; 0xd47e
|
|
; PokeBall, Great Ball, Ultra Ball, or Master Ball
|
|
ds 1
|
|
wBallTypeCounter:: ; 0xd47f
|
|
; two-byte counter that represents how many frames remain until the Ball uprade goes down to the next level.
|
|
ds 2
|
|
wBallTypeBackup:: ; 0xd481
|
|
; Holds the ball type during bonus stages, since they always use a regular pokeball.
|
|
ds 1
|
|
|
|
ds $1f
|
|
|
|
wBallSaverIconOn:: ; 0xd4a1
|
|
; The blue Ball Saver icon is illuminated when this byte is non-zero.
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wBallSaverTimerFrames:: ; 0xd4a3
|
|
; Count the number of frames until wBallSaverTimerSeconds should be decremented
|
|
ds 1
|
|
wBallSaverTimerSeconds:: ; 0xd4a4
|
|
; Remaining seconds for Ball Saver
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wBallSaverTimerFramesBackup:: ; 0xd4a6
|
|
; Used to store a backup of wBallSaverTimerFrames
|
|
ds 1
|
|
wBallSaverTimerSecondsBackup:: ; 0xd4a7
|
|
; Used to store a backup of wBallSaverTimerSeconds
|
|
ds 1
|
|
|
|
|
|
ds 4
|
|
|
|
wCurrentStage:: ; 0xd4ac
|
|
ds 1
|
|
|
|
ds 2
|
|
|
|
wStageCollisionState:: ; 0xd4af
|
|
; Stores the current collision state id for the stage
|
|
; For example, the Red stage can have different collision states when
|
|
; the Ditto lane is open, or when there is a wall above the Voltorbs.
|
|
ds 1
|
|
|
|
ds 3
|
|
|
|
wBallXPos:: ; 0xd4b3
|
|
; x coordinate of the center of the pokeball
|
|
; little-endian word
|
|
; Most-significant byte is the pixel, and least-significant byte is fraction of a pixel
|
|
ds 2
|
|
|
|
wBallYPos:: ; 0xd4b5
|
|
; y coordinate of the center of the pokeball
|
|
; little-endian word
|
|
; Most-significant byte is the pixel, and least-significant byte is fraction of a pixel
|
|
ds 2
|
|
|
|
wPreviousBallXPos:: ; 0xd4b7
|
|
; x coordinate of the center of the pokeball in the previous frame
|
|
; little-endian word
|
|
; Most-significant byte is the pixel, and least-significant byte is fraction of a pixel
|
|
ds 2
|
|
|
|
wPreviousBallYPos:: ; 0xd4b9
|
|
; y coordinate of the center of the pokeball in the previous frame
|
|
; little-endian word
|
|
; Most-significant byte is the pixel, and least-significant byte is fraction of a pixel
|
|
ds 2
|
|
|
|
wBallXVelocity:: ; 0xd4bb
|
|
; little-endian word
|
|
; This is added to wBallXPos every frame.
|
|
ds 2
|
|
|
|
wBallYVelocity:: ; 0xd4bd
|
|
; little-endian word
|
|
; This is added to wBallYPos every frame.
|
|
ds 2
|
|
|
|
ds 4
|
|
|
|
wBallSpin:: ; 0xd4c3
|
|
ds 1
|
|
wBallRotation:: ; 0xd4c4
|
|
; wBallSpin is added to this every frame
|
|
ds 1
|
|
|
|
ds $1c
|
|
|
|
wInitialMapSelectionIndex:: ; 0xd4e1
|
|
; index to keep track of the spinning map selection at the start of a new game
|
|
ds 1
|
|
|
|
ds $d
|
|
|
|
ds 1
|
|
|
|
wLeftMapMoveCounter:: ; 0xd4f0
|
|
; Diglett or Poliwag counter that counts to three to trigger a Map Move
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wRightMapMoveCounter:: ; 0xd4f2
|
|
; Diglett or Psyduck counter that counts to three to trigger a Map Move\
|
|
ds 1
|
|
|
|
wLeftMapMoveDiglettAnimationCounter:: ; 0xd4f3
|
|
; Counter that loops to control the left-side map move diglett head bobbing animation
|
|
ds 1
|
|
wLeftMapMoveDiglettFrame:: ; 0xd4f4
|
|
; Contains frame for map move diglett head bobbing animation
|
|
ds 1
|
|
wRightMapMoveDiglettAnimationCounter :: ; 0xd4f5
|
|
; Counter that loops to control the left-side map move diglett head bobbing animation
|
|
ds 1
|
|
wRightMapMoveDiglettFrame:: ; 0xd4f6
|
|
; Contains frame for map move diglett head bobbing animation
|
|
ds 1
|
|
|
|
ds $38
|
|
|
|
wIndicatorStates:: ; 0xd52f
|
|
; Each byte represents the status of each possible indicator on the stage.
|
|
; An indicator is a blinking icon telling the player to hit the pinball in
|
|
; a certain area. For example, when the Cloyster can be entered in the Blue
|
|
; Stage, the blue right arrow will starting blinking in the bottom half of that
|
|
; stage.
|
|
ds $13
|
|
|
|
wLeftAlleyTrigger:: ; 0xd542
|
|
; Set to $1 when ball passes over the bottom-left corner of the Blue/Red field top screen
|
|
; It's used to determine if the Ball was hit up the left side alley.
|
|
ds 1
|
|
wLeftAlleyCount:: ; 0xd543
|
|
; Increments when the Ball travels up the left alley.
|
|
; When the count is 3, evolution mode can be triggered.
|
|
ds 1
|
|
wRightAlleyTrigger:: ; 0xd544
|
|
; Set to $1 when Ball passes over the bottom-right corner of the Blue/Red field top screen
|
|
; It's used to determine if the Ball was hit up the right side alley.
|
|
ds 1
|
|
wRightAlleyCount:: ; 0xd545
|
|
; Increments when the Ball travels up the right alley.
|
|
; When the count is 2, Catch 'Em Mode can be triggered.
|
|
; If the count is 3, the current map's rare pokemon will be used for Catch 'Em Mode.
|
|
ds 1
|
|
wSecondaryLeftAlleyTrigger:: ; 0xd546
|
|
; Set to $1 when Ball passes over the bottom of the skinny alley between the left alley and Staryu button on the Red Field top screen.
|
|
; It's used to determine if the Ball was hit up the Red Stage's secondary left-side alley.
|
|
ds 1
|
|
|
|
ds 3
|
|
|
|
wCurrentMap:: ; 0xd54a
|
|
; Current map during play. See map_constants.asm
|
|
ds 1
|
|
|
|
wInSpecialMode:: ; 0xd54b
|
|
; Set to non-zero when things like Catch 'em Mode or Map Move mode start.
|
|
ds 1
|
|
|
|
ds 4
|
|
|
|
wSpecialMode:: ; 0xd550
|
|
; wInSpecialMode must be non-zero to activate this.
|
|
; 0 = Catch Em Mode
|
|
; 1 = Evolution Mode
|
|
; 2 = Map Move Mode
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wCurrentEvolutionMon:: ; 0xd552
|
|
; Current mon id for Evolution Mode.
|
|
; It stores (mon id - 1).
|
|
ds 1
|
|
wCurrentEvolutionType:: ; 0xd553
|
|
; Evolution type for the current mon in Evolution Mode.
|
|
; See evolution_type_constants.asm
|
|
ds 1
|
|
|
|
ds 7
|
|
|
|
wRareMonsFlag:: ; 0xd55b
|
|
; Gets set to $8 when the rare mons should be used for catch 'em mode. $8 is then doubled to add $10 to the base address of the map's wild mons table.
|
|
ds 1
|
|
|
|
ds $1d
|
|
|
|
wCurrentCatchEmMon:: ; 0xd579
|
|
; Current mon id for CatchEm Mode.
|
|
; It stores (mon id - 1).
|
|
ds 1
|
|
|
|
wTimerSeconds:: ; 0xd57a
|
|
ds 1
|
|
wTimerMinutes:: ; 0xd57b
|
|
ds 1
|
|
wTimerFrames:: ; 0xd57c
|
|
ds 1
|
|
|
|
ds $43
|
|
|
|
wNumMonHits:: ; 0xd5c0
|
|
; Number of times the wild pokemon has been hit in Catch'em mode
|
|
ds 1
|
|
|
|
ds $6e
|
|
|
|
; Number of times the Mewtwo Bonus stage has been defeated.
|
|
; Counts up at most to 2, and is reset if Mew is encountered.
|
|
wNumMewtwoBonusCompletions:: ; 0xd62f
|
|
ds 1
|
|
|
|
ds $e
|
|
|
|
wBlueStageForceFieldDirection:: ; 0xd63e
|
|
; Controls the direction of the arrow force field in between Cloyster and Slowpoke in the Blue Stage.
|
|
; $0 = up
|
|
; $1 = right
|
|
; $2 = down
|
|
; $3 = left
|
|
ds 1
|
|
|
|
ds $aa
|
|
|
|
wMeowthAnimationFrameCounter:: ; 0xd6e9
|
|
; Counts down. When it hits 0, the next animation frame happens.
|
|
ds 1
|
|
|
|
ds 3
|
|
|
|
wMeowthXPosition:: ; 0xd6ed
|
|
ds 1
|
|
wMeowthYPosition:: ; 0xd6ee
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wMeowthXMovement:: ; 0xd6f0
|
|
; Used to move meowth horizontally.
|
|
; Value is $01 when moving right.
|
|
; Value is $ff when moving left.
|
|
ds 1
|
|
wMeowthYMovement:: ; 0xd6f1
|
|
; Used to move meowth vertically.
|
|
; Value is $01 when moving down.
|
|
; Value is $ff when moving up.
|
|
ds 1
|
|
|
|
ds $1d
|
|
|
|
wMeowthStageBonusCounter:: ; 0xd70f
|
|
; Keeps track of how many bonus points you get from collecting a coin.
|
|
; The bonus increases by 1 each time you collect a coin.
|
|
; If Meowth is hit, the bonus resets to 0.
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wMeowthStageScore:: ; 0xd711
|
|
; Number of Meowth coins collected.
|
|
ds 1
|
|
|
|
ds $2b
|
|
|
|
wDiglettStates:: ; 0xd73d
|
|
; Each diglett has a sprite state 1 - 5.
|
|
; The animation wiggles back and forth.
|
|
; $0 = diglett has been hit
|
|
; $1 = hiding in hole
|
|
; $2 = straight up
|
|
; $3 = leaning left
|
|
; $4 = straight up
|
|
; $5 = leaning right
|
|
; $6 = getting hit
|
|
ds 31
|
|
|
|
wCurrentDiglett:: ; 0xd75c
|
|
; Keeps track of which diglett is being updated.
|
|
ds 1
|
|
|
|
wDiglettsInitializedFlag:: ; 0xd75d
|
|
; bit 0 is set after all digletts have been initialized
|
|
ds 1
|
|
|
|
wDiglettInitDelayCounter:: ; 0xd75e
|
|
; used to faciliate how fast the digletts are initialized
|
|
ds 1
|
|
|
|
ds 2
|
|
|
|
wDugtrioAnimationFrameCounter:: ; 0xd761
|
|
; wDugtrioAnimationFrame is incremented when this counter hits zero. The counter loops repeatedly.
|
|
ds 1
|
|
wDugtrioAnimationFrame:: ; 0xd762
|
|
ds 1
|
|
wDugtrioAnimationFrame2:: ; 0xd763
|
|
; Loops from 0-2 repeatedly at the same page as wDugtrioAnimationFrame.
|
|
ds 1
|
|
|
|
wDugrioState:: ; 0xd764
|
|
; Similar function as wDiglettStates.
|
|
; $0 = Dugtrio hasn't appeared yet
|
|
; $1 = 3 healthy dugtrio
|
|
; $2 = Getting hit first time
|
|
; $3 = 2 healthy dugtrio
|
|
; $4 = Getting hit second time
|
|
; $5 = 1 healthy dugtrio
|
|
; $6 = Getting hit third time
|
|
; $7 = Disappearing
|
|
ds 1
|
|
|
|
ds $3c
|
|
|
|
wLeftTiltCounter:: ; 0xd7a1
|
|
; Counts up to 3 and back down to time the left tilt animation
|
|
ds 1
|
|
wLeftTiltReset:: ; 0xd7a2
|
|
; Set to $1 when the left tilt button has been held down long enough
|
|
ds 1
|
|
wRightTiltCounter:: ; 0xd7a3
|
|
; Counts up to 3 and back down to time the right tilt animation
|
|
ds 1
|
|
wRightTiltReset:: ; 0xd7a4
|
|
; Set to $1 when the right tilt button has been held down long enough
|
|
ds 1
|
|
wUpperTiltCounter:: ; 0xd7a5
|
|
; Counts up to 3 and back down to time the upper tilt animation
|
|
ds 1
|
|
wUpperTiltReset:: ; 0xd7a6
|
|
; Set to $1 when the upper tilt button has been held down long enough
|
|
ds 1
|
|
|
|
wLeftTiltPushing:: ; 0xd7a7
|
|
; Set to $1 when the left tilt is in the first half of its animation
|
|
ds 1
|
|
wRightTiltPushing:: ; 0xd7a8
|
|
; Set to $1 when the right tilt is in the first half of its animation
|
|
ds 1
|
|
wUpperTiltPushing:: ; 0xd7a9
|
|
; Set to $1 when the upper tilt is in the first half of its animation
|
|
ds 1
|
|
|
|
ds 15
|
|
|
|
wFlipperCollision:: ; 0xd7b9
|
|
; Set to $1 when the ball is colliding with a flipper
|
|
ds 1
|
|
|
|
ds 9
|
|
|
|
wSubTileBallXPos:: ; 0xd7c3
|
|
ds 1
|
|
wSubTileBallYPos:: ; 0xd7c4
|
|
ds 1
|
|
|
|
wUpperLeftCollisionAttribute:: ; 0xd7c5
|
|
ds 1
|
|
wLowerLeftCollisionAttribute:: ; 0xd7c6
|
|
ds 1
|
|
wUpperRightCollisionAttribute:: ; 0xd7c7
|
|
ds 1
|
|
wLowerRightCollisionAttribute:: ; 0xd7c8
|
|
ds 1
|
|
|
|
ds $23
|
|
|
|
wStageCollisionMapPointer:: ; 0xd7ec
|
|
; pointer to the current collision map (always points to wStageCollisionMapPointer, except when loading new attributes)
|
|
ds 2
|
|
wStageCollisionMapBank:: ; 0xd7ee
|
|
; holds bank of current collision map (always $00, except when loading new attributes)
|
|
ds 1
|
|
|
|
wStageCollisionMasksPointer:: ; 0xd7ef
|
|
; Pointer to the current collision masks array
|
|
ds 2
|
|
wStageCollisionMasksBank:: ; 0xd7f1
|
|
; Holds bank of current collision masks array
|
|
ds 1
|
|
|
|
ds 7
|
|
|
|
wInGameMenuIndex:: ; 0xd7f9
|
|
ds 1
|
|
|
|
ds $61
|
|
|
|
wCurrentSongBank:: ; 0xd85b
|
|
ds 1
|
|
|
|
ds $95
|
|
|
|
wCurrentScreen:: ; 0xd8f1
|
|
; The game is driven by state machines. This is the current screen.
|
|
ds 1
|
|
wScreenState:: ; 0xd8f2
|
|
; The game is driven by state machines. This is the current state for the current screen.
|
|
ds 1
|
|
|
|
ds 22
|
|
|
|
wTitleScreenCursorSelection:: ; 0xd909
|
|
; 0 = Game Start
|
|
; 1 = PokeDex
|
|
; 2 = Option
|
|
ds 1
|
|
|
|
wTitleScreenGameStartCursorSelection:: ; 0xd90a
|
|
; 0 = New Game
|
|
; 1 = Continue
|
|
ds 1
|
|
|
|
ds 1
|
|
|
|
wTitleScreenBlinkAnimationFrame:: ; 0xd90c
|
|
; Pikachu's blinking animation is looped through frames. This keeps track of the current frame.
|
|
ds 1
|
|
|
|
wTitleScreenBlinkAnimationCounter:: ; 0xd90d
|
|
; Counts down. When it hits 0, wTitleScreenBlinkAnimationFrame is incremented.
|
|
ds 1
|
|
|
|
wTitleScreenBouncingBallAnimationFrame:: ; 0xd90e
|
|
; The bouncing Pokeball on the title screen has a 6-frame animation. This keeps track of the current frame.
|
|
ds 1
|
|
|
|
wTitleScreenPokeballAnimationCounter:: ; 0xd90f
|
|
ds 1
|
|
|
|
ds 2
|
|
|
|
wFieldSelectBlinkingBorderTimer:: ; 0xd912
|
|
; Number of frames to blink the field select screen border after the player chooses a field.
|
|
ds 1
|
|
|
|
wSelectedFieldIndex:: ; d913
|
|
; $0 if player is hovering cursor over Red Stage
|
|
; $1 if player is hovering cursor over Blue Stage
|
|
ds 1
|
|
|
|
wFieldSelectBlinkingBorderFrame:: ; 0xd914
|
|
; The blinking border's current animation frame.
|
|
ds 1
|
|
|
|
ds 5
|
|
|
|
wSoundTestCurrentBackgroundMusic:: ; d91a
|
|
ds 1
|
|
wSoundTextCurrentSoundEffect:: ; 0xd91b
|
|
ds 1
|
|
|
|
ds 44
|
|
|
|
wKeyConfigs:: ; 0xd948
|
|
; each function map to two joypad buttons (see joy_constants.asm)
|
|
wKeyConfigBallStart:: ; 0xd948
|
|
ds 2
|
|
wKeyConfigLeftFlipper:: ; 0xd94a
|
|
ds 2
|
|
wKeyConfigRightFlipper:: ; 0xd94c
|
|
ds 2
|
|
wKeyConfigLeftTilt:: ; 0xd94e
|
|
ds 2
|
|
wKeyConfigRightTilt:: ; 0xd950
|
|
ds 2
|
|
wKeyConfigUpperTilt:: ; 0xd952
|
|
ds 2
|
|
wKeyConfigMenu:: ; 0xd954
|
|
ds 2
|
|
|
|
ds 3
|
|
|
|
wCurPokedexIndex:: ; 0xd959
|
|
; Stores the mon index of which pokemon the cursor is on in the Pokedex screen.
|
|
ds 1
|
|
wPokedexOffset:: ; 0xd95a
|
|
; Stores the number of pokedex entries that are above the current displayed pokemon entries.
|
|
ds 1
|
|
|
|
ds 7
|
|
|
|
wPokedexFlags:: ; 0xd962
|
|
; Each pokemon is represented by one byte in the normal Pokedex order
|
|
; byte == 0: mon hasn't been seen
|
|
; byte == 1: mon has been seen
|
|
; byte >= 2: mon has been captured
|
|
ds 151
|
|
wNumPokemonSeen:: ; 0xd9f9
|
|
ds 2
|
|
wNumPokemonOwned:: ; 0xd9fb
|
|
ds 2
|
|
|
|
wRedHighScores:: ; 0xd9fd
|
|
wRedHighScore1Points:: ; 0xd9fd
|
|
ds 6
|
|
wRedHighScore1Name:: ; 0xda03
|
|
ds 3
|
|
ds 4
|
|
|
|
wRedHighScore2Points:: ; 0xda0a
|
|
ds 6
|
|
wRedHighScore2Name:: ; 0xda10
|
|
ds 3
|
|
ds 4
|
|
|
|
wRedHighScore3Points:: ; 0xda17
|
|
ds 6
|
|
wRedHighScore3Name:: ; 0xda1d
|
|
ds 3
|
|
ds 4
|
|
|
|
wRedHighScore4Points:: ; 0xda24
|
|
ds 6
|
|
wRedHighScore4Name:: ; 0xda2a
|
|
ds 3
|
|
ds 4
|
|
|
|
wRedHighScore5Points:: ; 0xda31
|
|
ds 6
|
|
wRedHighScore5Name:: ; 0xda37
|
|
ds 3
|
|
ds 4
|
|
|
|
wBlueHighScores:: ; 0xda3e
|
|
wBlueHighScore1Points:: ; 0xda3e
|
|
ds 6
|
|
wBlueHighScore1Name:: ; 0xda44
|
|
ds 3
|
|
ds 4
|
|
|
|
wBlueHighScore2Points:: ; 0xda4b
|
|
ds 6
|
|
wBlueHighScore2Name:: ; 0xda52
|
|
ds 3
|
|
ds 4
|
|
|
|
wBlueHighScore3Points:: ; 0xda58
|
|
ds 6
|
|
wBlueHighScore3Name:: ; 0xda5e
|
|
ds 3
|
|
ds 4
|
|
|
|
wBlueHighScore4Points:: ; 0xda65
|
|
ds 6
|
|
wBlueHighScore4Name:: ; 0xda6b
|
|
ds 3
|
|
ds 4
|
|
|
|
wBlueHighScore5Points:: ; 0xda72
|
|
ds 6
|
|
wBlueHighScore5Name:: ; 0xda78
|
|
ds 3
|
|
ds 4
|
|
|
|
ds 4
|
|
|
|
wHighScoresStage:: ; 0xda83
|
|
; Current stage's high scores.
|
|
; 0 = Red Stage
|
|
; 1 = Blue stage
|
|
ds 1
|
|
|
|
wHighScoresArrowAnimationCounter:: ; 0xda84
|
|
; Counts up to $28 and wraps around to $0 to control the animation of the
|
|
; arrows in the bottom corner of the high scores screen.
|
|
ds 1
|