Add more drop options and change how they work.
This commit is contained in:
		
							parent
							
								
									80c735c6e0
								
							
						
					
					
						commit
						fc558b5488
					
				| 
						 | 
					@ -40,9 +40,16 @@ Choose between a few randomizer options:
 | 
				
			||||||
Select the rotation rules:
 | 
					Select the rotation rules:
 | 
				
			||||||
- ARS1: Classic ARS from TGM1 and TGM2.
 | 
					- ARS1: Classic ARS from TGM1 and TGM2.
 | 
				
			||||||
- ARS2: ARS from TGM3.
 | 
					- ARS2: ARS from TGM3.
 | 
				
			||||||
 | 
					- NES: No kicks.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Drop Mode
 | 
					### Drop Mode
 | 
				
			||||||
Select whether up performs a sonic drop, a hard drop, or nothing at all.
 | 
					Choose how the up and down buttons act:
 | 
				
			||||||
 | 
					- FIRM: Up drops to the bottom but does not lock until you are in neutral position. Down locks.
 | 
				
			||||||
 | 
					- SNIC: Like FIRM, but thre is no neutral lock.
 | 
				
			||||||
 | 
					- HARD: Up drops and locks. Down does not lock until you go neutral when the piece is grounded.
 | 
				
			||||||
 | 
					- LOCK: Like HARD but down locks.
 | 
				
			||||||
 | 
					- NONE: Up does nothing. Down locks.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Speed Curve
 | 
					### Speed Curve
 | 
				
			||||||
Select between several speed curves including the DMGTRIS default speed curve, TGM1, TGM3, as well as DEATH and SHIRASE mode. In addition there's a "CHILL" curve for when you just want to enjoy some tetris. It doesn't speed up very fast at all.
 | 
					Select between several speed curves including the DMGTRIS default speed curve, TGM1, TGM3, as well as DEATH and SHIRASE mode. In addition there's a "CHILL" curve for when you just want to enjoy some tetris. It doesn't speed up very fast at all.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								bin/DMGTRIS.GBC
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/DMGTRIS.GBC
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -61,8 +61,9 @@ CHARMAP "[", 129
 | 
				
			||||||
CHARMAP "]", 130
 | 
					CHARMAP "]", 130
 | 
				
			||||||
CHARMAP "/", 128
 | 
					CHARMAP "/", 128
 | 
				
			||||||
CHARMAP "-", 127
 | 
					CHARMAP "-", 127
 | 
				
			||||||
CHARMAP "|", 126
 | 
					CHARMAP "#", 126
 | 
				
			||||||
CHARMAP "#", 125
 | 
					CHARMAP ".", 216
 | 
				
			||||||
 | 
					CHARMAP ":", 222
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "Static Data", ROMX, BANK[1]
 | 
					SECTION "Static Data", ROMX, BANK[1]
 | 
				
			||||||
| 
						 | 
					@ -83,9 +84,12 @@ sOption1::
 | 
				
			||||||
sOption2::
 | 
					sOption2::
 | 
				
			||||||
    db "ARS1"
 | 
					    db "ARS1"
 | 
				
			||||||
    db "ARS2"
 | 
					    db "ARS2"
 | 
				
			||||||
 | 
					    db " NES"
 | 
				
			||||||
sOption3::
 | 
					sOption3::
 | 
				
			||||||
 | 
					    db "FIRM"
 | 
				
			||||||
    db "SNIC"
 | 
					    db "SNIC"
 | 
				
			||||||
    db "HARD"
 | 
					    db "HARD"
 | 
				
			||||||
 | 
					    db "LOCK"
 | 
				
			||||||
    db "NONE"
 | 
					    db "NONE"
 | 
				
			||||||
sOption4::
 | 
					sOption4::
 | 
				
			||||||
    db "DMGT"
 | 
					    db "DMGT"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,6 +58,7 @@ hDownFrames: ds 1
 | 
				
			||||||
hAwardDownBonus: ds 1
 | 
					hAwardDownBonus: ds 1
 | 
				
			||||||
hStalePiece: ds 1
 | 
					hStalePiece: ds 1
 | 
				
			||||||
hBravo: ds 1
 | 
					hBravo: ds 1
 | 
				
			||||||
 | 
					hShouldLockIfGrounded: ds 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "Field Functions", ROM0
 | 
					SECTION "Field Functions", ROM0
 | 
				
			||||||
| 
						 | 
					@ -528,6 +529,7 @@ TrySpawnPiece::
 | 
				
			||||||
    ldh [hDownFrames], a
 | 
					    ldh [hDownFrames], a
 | 
				
			||||||
    ldh [hAwardDownBonus], a
 | 
					    ldh [hAwardDownBonus], a
 | 
				
			||||||
    ldh [hLockDelayForce], a
 | 
					    ldh [hLockDelayForce], a
 | 
				
			||||||
 | 
					    ldh [hShouldLockIfGrounded], a
 | 
				
			||||||
    ldh a, [hCurrentLockDelay]
 | 
					    ldh a, [hCurrentLockDelay]
 | 
				
			||||||
    ldh [hCurrentLockDelayRemaining], a
 | 
					    ldh [hCurrentLockDelayRemaining], a
 | 
				
			||||||
    ldh a, [hCurrentFramesPerGravityTick]
 | 
					    ldh a, [hCurrentFramesPerGravityTick]
 | 
				
			||||||
| 
						 | 
					@ -576,8 +578,6 @@ TrySpawnPiece::
 | 
				
			||||||
    jp CanPieceFitFast
 | 
					    jp CanPieceFitFast
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ; Draws the piece onto the field.
 | 
					    ; Draws the piece onto the field.
 | 
				
			||||||
    ; B is the tile.
 | 
					    ; B is the tile.
 | 
				
			||||||
    ; DE should point to the piece's rotation state data.
 | 
					    ; DE should point to the piece's rotation state data.
 | 
				
			||||||
| 
						 | 
					@ -820,6 +820,11 @@ FieldProcess::
 | 
				
			||||||
    ; Try kicks if the piece isn't I or O. And in the case of J L and T, only if the blocked side is the left or right.
 | 
					    ; Try kicks if the piece isn't I or O. And in the case of J L and T, only if the blocked side is the left or right.
 | 
				
			||||||
.maybekick
 | 
					.maybekick
 | 
				
			||||||
    ld c, a
 | 
					    ld c, a
 | 
				
			||||||
 | 
					    ; No kicks for NES mode.
 | 
				
			||||||
 | 
					    ld a, [wRotModeState]
 | 
				
			||||||
 | 
					    cp a, ROT_MODE_NES
 | 
				
			||||||
 | 
					    jp z, .norot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ldh a, [hCurrentPiece]
 | 
					    ldh a, [hCurrentPiece]
 | 
				
			||||||
    ; O pieces never kick, obviously.
 | 
					    ; O pieces never kick, obviously.
 | 
				
			||||||
    cp a, PIECE_O
 | 
					    cp a, PIECE_O
 | 
				
			||||||
| 
						 | 
					@ -1193,19 +1198,26 @@ FieldProcess::
 | 
				
			||||||
    cp a, 20
 | 
					    cp a, 20
 | 
				
			||||||
    jr z, .postdrop
 | 
					    jr z, .postdrop
 | 
				
			||||||
    ldh a, [hUpState]
 | 
					    ldh a, [hUpState]
 | 
				
			||||||
    cp a, 0
 | 
					    cp a, 1
 | 
				
			||||||
    jr z, .postdrop
 | 
					    jr nz, .postdrop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; What kind, if any?
 | 
					    ; What kind, if any?
 | 
				
			||||||
    ld a, [wDropModeState]
 | 
					    ld a, [wDropModeState]
 | 
				
			||||||
    cp a, DROP_MODE_NONE
 | 
					    cp a, DROP_MODE_NONE
 | 
				
			||||||
    jr z, .postdrop
 | 
					    jr z, .postdrop
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_LOCK
 | 
				
			||||||
 | 
					    jr z, .harddrop
 | 
				
			||||||
    cp a, DROP_MODE_HARD
 | 
					    cp a, DROP_MODE_HARD
 | 
				
			||||||
    jr z, .harddrop
 | 
					    jr z, .harddrop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Sonic drop.
 | 
					    ; Sonic drop.
 | 
				
			||||||
.sonicdrop
 | 
					.sonicdrop
 | 
				
			||||||
 | 
					    ld a, [wDropModeState]
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_SNIC
 | 
				
			||||||
 | 
					    jr z, :+
 | 
				
			||||||
    ld a, $FF
 | 
					    ld a, $FF
 | 
				
			||||||
 | 
					    ldh [hShouldLockIfGrounded], a
 | 
				
			||||||
 | 
					:   ld a, $FF
 | 
				
			||||||
    ldh [hAwardDownBonus], a
 | 
					    ldh [hAwardDownBonus], a
 | 
				
			||||||
    ld a, 20
 | 
					    ld a, 20
 | 
				
			||||||
    ldh [hWantedG], a
 | 
					    ldh [hWantedG], a
 | 
				
			||||||
| 
						 | 
					@ -1215,6 +1227,11 @@ FieldProcess::
 | 
				
			||||||
    jr nz, .grav
 | 
					    jr nz, .grav
 | 
				
			||||||
    ldh a, [hCurrentFramesPerGravityTick]
 | 
					    ldh a, [hCurrentFramesPerGravityTick]
 | 
				
			||||||
    ldh [hTicksUntilG], a
 | 
					    ldh [hTicksUntilG], a
 | 
				
			||||||
 | 
					    ld a, [wDropModeState]
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_SNIC
 | 
				
			||||||
 | 
					    jr z, .grav
 | 
				
			||||||
 | 
					    ld a, $FF
 | 
				
			||||||
 | 
					    ldh [hShouldLockIfGrounded], a
 | 
				
			||||||
    jr .grav
 | 
					    jr .grav
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Hard drop.
 | 
					    ; Hard drop.
 | 
				
			||||||
| 
						 | 
					@ -1250,6 +1267,11 @@ FieldProcess::
 | 
				
			||||||
    ldh [hDownFrames], a
 | 
					    ldh [hDownFrames], a
 | 
				
			||||||
    ld a, 1
 | 
					    ld a, 1
 | 
				
			||||||
    ldh [hTicksUntilG], a
 | 
					    ldh [hTicksUntilG], a
 | 
				
			||||||
 | 
					    ld a, [wDropModeState]
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_HARD
 | 
				
			||||||
 | 
					    jr nz, :+
 | 
				
			||||||
 | 
					    ld a, $FF
 | 
				
			||||||
 | 
					    ldh [hShouldLockIfGrounded], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Gravity?
 | 
					    ; Gravity?
 | 
				
			||||||
:   ldh a, [hTicksUntilG]
 | 
					:   ldh a, [hTicksUntilG]
 | 
				
			||||||
| 
						 | 
					@ -1302,7 +1324,7 @@ FieldProcess::
 | 
				
			||||||
    call GetPieceDataFast
 | 
					    call GetPieceDataFast
 | 
				
			||||||
    call CanPieceFitFast
 | 
					    call CanPieceFitFast
 | 
				
			||||||
    cp a, $FF
 | 
					    cp a, $FF
 | 
				
			||||||
    jr z, .notgrounded
 | 
					    jp z, .notgrounded
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; We're grounded.
 | 
					    ; We're grounded.
 | 
				
			||||||
.grounded
 | 
					.grounded
 | 
				
			||||||
| 
						 | 
					@ -1330,20 +1352,57 @@ FieldProcess::
 | 
				
			||||||
.postcheckforfirmdropsound
 | 
					.postcheckforfirmdropsound
 | 
				
			||||||
    ldh a, [hDownState]
 | 
					    ldh a, [hDownState]
 | 
				
			||||||
    cp a, 0
 | 
					    cp a, 0
 | 
				
			||||||
    jr z, .dontforcelock
 | 
					    jr z, .neutralcheck
 | 
				
			||||||
    ldh a, [hCurrentGravityPerTick]
 | 
					
 | 
				
			||||||
 | 
					    ; Don't lock on down for hard drop mode immediately.
 | 
				
			||||||
 | 
					    ld a, [wDropModeState]
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_HARD
 | 
				
			||||||
 | 
					    jr nz, :+
 | 
				
			||||||
 | 
					    ld a, $FF
 | 
				
			||||||
 | 
					    ldh [hShouldLockIfGrounded], a
 | 
				
			||||||
 | 
					    jr .dontforcelock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; Lock on down in modes <20G.
 | 
				
			||||||
 | 
					:   ldh a, [hCurrentGravityPerTick]
 | 
				
			||||||
    cp a, 20
 | 
					    cp a, 20
 | 
				
			||||||
    jr nz, .forcelock
 | 
					    jr nz, .forcelock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; In 20G mode, only lock if down has been pressed for exactly 1 frame.
 | 
				
			||||||
    ldh a, [hDownState]
 | 
					    ldh a, [hDownState]
 | 
				
			||||||
    cp a, 1
 | 
					    cp a, 1
 | 
				
			||||||
 | 
					    jr z, .forcelock
 | 
				
			||||||
 | 
					    jr .dontforcelock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; If the down button is not held, check if we're neutral and if that should lock.
 | 
				
			||||||
 | 
					.neutralcheck
 | 
				
			||||||
 | 
					    ldh a, [hShouldLockIfGrounded]
 | 
				
			||||||
 | 
					    cp a, 0
 | 
				
			||||||
 | 
					    jr z, .dontforcelock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; Check for neutral.
 | 
				
			||||||
 | 
					    ldh a, [hUpState]
 | 
				
			||||||
 | 
					    cp a, 0
 | 
				
			||||||
 | 
					    jr nz, .dontforcelock
 | 
				
			||||||
 | 
					    ldh a, [hLeftState]
 | 
				
			||||||
 | 
					    cp a, 0
 | 
				
			||||||
 | 
					    jr nz, .dontforcelock
 | 
				
			||||||
 | 
					    ldh a, [hRightState]
 | 
				
			||||||
 | 
					    cp a, 0
 | 
				
			||||||
    jr nz, .dontforcelock
 | 
					    jr nz, .dontforcelock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; Lock on neutral for a few modes.
 | 
				
			||||||
 | 
					    ld a, [wDropModeState]
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_FIRM
 | 
				
			||||||
 | 
					    jr z, .forcelock
 | 
				
			||||||
 | 
					    cp a, DROP_MODE_HARD
 | 
				
			||||||
 | 
					    jr z, .forcelock
 | 
				
			||||||
 | 
					    jr .dontforcelock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Set the lock delay to 0 and save it.
 | 
					    ; Set the lock delay to 0 and save it.
 | 
				
			||||||
.forcelock
 | 
					.forcelock
 | 
				
			||||||
    ld a, 0
 | 
					    xor a, a
 | 
				
			||||||
    ldh [hCurrentLockDelayRemaining], a
 | 
					    ldh [hCurrentLockDelayRemaining], a
 | 
				
			||||||
    jr .checklockdelay
 | 
					    jr .dolock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Load the lock delay.
 | 
					    ; Load the lock delay.
 | 
				
			||||||
    ; Decrement it by one and save it.
 | 
					    ; Decrement it by one and save it.
 | 
				
			||||||
| 
						 | 
					@ -1380,6 +1439,8 @@ FieldProcess::
 | 
				
			||||||
.notgrounded
 | 
					.notgrounded
 | 
				
			||||||
    ldh a, [hCurrentLockDelay]
 | 
					    ldh a, [hCurrentLockDelay]
 | 
				
			||||||
    ldh [hCurrentLockDelayRemaining], a
 | 
					    ldh [hCurrentLockDelayRemaining], a
 | 
				
			||||||
 | 
					    xor a, a
 | 
				
			||||||
 | 
					    ldh [hShouldLockIfGrounded], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; **************************************************************
 | 
					    ; **************************************************************
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,13 +23,6 @@ INCLUDE "hardware.inc"
 | 
				
			||||||
INCLUDE "structs.asm"
 | 
					INCLUDE "structs.asm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; PPU modes:
 | 
					 | 
				
			||||||
; - 0: HBlank
 | 
					 | 
				
			||||||
; - 1: VBlank
 | 
					 | 
				
			||||||
; - 2: OAM Scan
 | 
					 | 
				
			||||||
; - 3: Drawing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; Waits for PPU mode to be 0 or 1.
 | 
					; Waits for PPU mode to be 0 or 1.
 | 
				
			||||||
; We don't wait for 2 because it's super short and impractical to do much of anything in.
 | 
					; We don't wait for 2 because it's super short and impractical to do much of anything in.
 | 
				
			||||||
MACRO wait_vram
 | 
					MACRO wait_vram
 | 
				
			||||||
| 
						 | 
					@ -93,11 +86,14 @@ MACRO lb
 | 
				
			||||||
    ld \1, (LOW(\2) << 8) | LOW(\3)
 | 
					    ld \1, (LOW(\2) << 8) | LOW(\3)
 | 
				
			||||||
ENDM
 | 
					ENDM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Magic bytes for save files.
 | 
				
			||||||
DEF SAVE_MAGIC_0        EQU "D"
 | 
					DEF SAVE_MAGIC_0        EQU "D"
 | 
				
			||||||
DEF SAVE_MAGIC_1        EQU "M"
 | 
					DEF SAVE_MAGIC_1        EQU "M"
 | 
				
			||||||
DEF SAVE_MAGIC_2        EQU "G"
 | 
					DEF SAVE_MAGIC_2        EQU "G"
 | 
				
			||||||
DEF SAVE_MAGIC_3        EQU "3"
 | 
					DEF SAVE_MAGIC_3        EQU "5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Some useful palettes.
 | 
				
			||||||
DEF PALETTE_REGULAR     EQU %11100100
 | 
					DEF PALETTE_REGULAR     EQU %11100100
 | 
				
			||||||
DEF PALETTE_INVERTED    EQU %00011011
 | 
					DEF PALETTE_INVERTED    EQU %00011011
 | 
				
			||||||
DEF PALETTE_MONO_0      EQU %11111111
 | 
					DEF PALETTE_MONO_0      EQU %11111111
 | 
				
			||||||
| 
						 | 
					@ -113,6 +109,7 @@ DEF PALETTE_LIGHTER_1   EQU %10010000
 | 
				
			||||||
DEF PALETTE_LIGHTER_2   EQU %01000000
 | 
					DEF PALETTE_LIGHTER_2   EQU %01000000
 | 
				
			||||||
DEF PALETTE_LIGHTER_3   EQU %00000000
 | 
					DEF PALETTE_LIGHTER_3   EQU %00000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Sprite base positions.
 | 
				
			||||||
DEF NEXT_BASE_X         EQU 115
 | 
					DEF NEXT_BASE_X         EQU 115
 | 
				
			||||||
DEF NEXT_BASE_Y         EQU 40
 | 
					DEF NEXT_BASE_Y         EQU 40
 | 
				
			||||||
DEF HOLD_BASE_X         EQU 115
 | 
					DEF HOLD_BASE_X         EQU 115
 | 
				
			||||||
| 
						 | 
					@ -123,8 +120,7 @@ DEF LEVEL_BASE_X        EQU 120
 | 
				
			||||||
DEF CLEVEL_BASE_Y       EQU 136
 | 
					DEF CLEVEL_BASE_Y       EQU 136
 | 
				
			||||||
DEF NLEVEL_BASE_Y       EQU 148
 | 
					DEF NLEVEL_BASE_Y       EQU 148
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEF SCURVE_ENTRY_SIZE   EQU 8
 | 
					; Piece names
 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF PIECE_I             EQU 0
 | 
					DEF PIECE_I             EQU 0
 | 
				
			||||||
DEF PIECE_Z             EQU 1
 | 
					DEF PIECE_Z             EQU 1
 | 
				
			||||||
DEF PIECE_S             EQU 2
 | 
					DEF PIECE_S             EQU 2
 | 
				
			||||||
| 
						 | 
					@ -132,8 +128,8 @@ DEF PIECE_J             EQU 3
 | 
				
			||||||
DEF PIECE_L             EQU 4
 | 
					DEF PIECE_L             EQU 4
 | 
				
			||||||
DEF PIECE_O             EQU 5
 | 
					DEF PIECE_O             EQU 5
 | 
				
			||||||
DEF PIECE_T             EQU 6
 | 
					DEF PIECE_T             EQU 6
 | 
				
			||||||
DEF PIECE_NONE          EQU 255
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Sound effect names
 | 
				
			||||||
DEF SFX_IRS             EQU $80
 | 
					DEF SFX_IRS             EQU $80
 | 
				
			||||||
DEF SFX_IHS             EQU 10
 | 
					DEF SFX_IHS             EQU 10
 | 
				
			||||||
DEF SFX_LINE_CLEAR      EQU 11
 | 
					DEF SFX_LINE_CLEAR      EQU 11
 | 
				
			||||||
| 
						 | 
					@ -145,50 +141,11 @@ DEF SFX_RANKUP          EQU 16
 | 
				
			||||||
DEF SFX_READYGO         EQU 17
 | 
					DEF SFX_READYGO         EQU 17
 | 
				
			||||||
DEF MUSIC_MENU          EQU $EE
 | 
					DEF MUSIC_MENU          EQU $EE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEF STACK_SIZE          EQU 64
 | 
					; Tile data offsets
 | 
				
			||||||
DEF GAME_OVER_R10       EQU 133
 | 
					DEF GAME_OVER_R10       EQU 133
 | 
				
			||||||
DEF GAME_OVER_R12       EQU 153
 | 
					DEF GAME_OVER_R12       EQU 153
 | 
				
			||||||
DEF GAME_OVER_R14       EQU 173
 | 
					DEF GAME_OVER_R14       EQU 173
 | 
				
			||||||
DEF GAME_OVER_OTHER     EQU 131
 | 
					DEF GAME_OVER_OTHER     EQU 131
 | 
				
			||||||
DEF LEADY_TIME          EQU 80
 | 
					 | 
				
			||||||
DEF GO_TIME             EQU 40
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF BUTTON_MODE_NORM    EQU 0
 | 
					 | 
				
			||||||
DEF BUTTON_MODE_INVR    EQU 1
 | 
					 | 
				
			||||||
DEF BUTTON_MODE_COUNT   EQU 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF TILE_RNG_MODE_BASE  EQU 217
 | 
					 | 
				
			||||||
DEF RNG_MODE_TGM1       EQU 0
 | 
					 | 
				
			||||||
DEF RNG_MODE_TGM2       EQU 1
 | 
					 | 
				
			||||||
DEF RNG_MODE_TGM3       EQU 2
 | 
					 | 
				
			||||||
DEF RNG_MODE_HELL       EQU 3
 | 
					 | 
				
			||||||
DEF RNG_MODE_NES        EQU 4
 | 
					 | 
				
			||||||
DEF RNG_MODE_COUNT      EQU 5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF TILE_ROT_MODE_BASE  EQU 225
 | 
					 | 
				
			||||||
DEF ROT_MODE_ARS        EQU 0
 | 
					 | 
				
			||||||
DEF ROT_MODE_ARSTI      EQU 1
 | 
					 | 
				
			||||||
DEF ROT_MODE_COUNT      EQU 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF TILE_DROP_MODE_BASE EQU 229
 | 
					 | 
				
			||||||
DEF DROP_MODE_SONIC     EQU 0
 | 
					 | 
				
			||||||
DEF DROP_MODE_HARD      EQU 1
 | 
					 | 
				
			||||||
DEF DROP_MODE_NONE      EQU 2
 | 
					 | 
				
			||||||
DEF DROP_MODE_COUNT     EQU 3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF SCURVE_DMGT         EQU 0
 | 
					 | 
				
			||||||
DEF SCURVE_TGM1         EQU 1
 | 
					 | 
				
			||||||
DEF SCURVE_TGM3         EQU 2
 | 
					 | 
				
			||||||
DEF SCURVE_DEAT         EQU 3
 | 
					 | 
				
			||||||
DEF SCURVE_SHIR         EQU 4
 | 
					 | 
				
			||||||
DEF SCURVE_CHIL         EQU 5
 | 
					 | 
				
			||||||
DEF SCURVE_COUNT        EQU 6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF TILE_HIG_MODE_BASE  EQU 232
 | 
					 | 
				
			||||||
DEF HIG_MODE_OFF        EQU 0
 | 
					 | 
				
			||||||
DEF HIG_MODE_ON         EQU 1
 | 
					 | 
				
			||||||
DEF HIG_MODE_COUNT      EQU 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEF TILE_FIELD_EMPTY    EQU 4
 | 
					DEF TILE_FIELD_EMPTY    EQU 4
 | 
				
			||||||
DEF TILE_PIECE_0        EQU 10
 | 
					DEF TILE_PIECE_0        EQU 10
 | 
				
			||||||
DEF TILE_0              EQU 66
 | 
					DEF TILE_0              EQU 66
 | 
				
			||||||
| 
						 | 
					@ -197,6 +154,52 @@ DEF TILE_GHOST          EQU 125
 | 
				
			||||||
DEF TILE_SELECTED       EQU 193
 | 
					DEF TILE_SELECTED       EQU 193
 | 
				
			||||||
DEF TILE_UNSELECTED     EQU 194
 | 
					DEF TILE_UNSELECTED     EQU 194
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Button mode.
 | 
				
			||||||
 | 
					DEF BUTTON_MODE_NORM    EQU 0
 | 
				
			||||||
 | 
					DEF BUTTON_MODE_INVR    EQU 1
 | 
				
			||||||
 | 
					DEF BUTTON_MODE_COUNT   EQU 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; RNG mode.
 | 
				
			||||||
 | 
					DEF TILE_RNG_MODE_BASE  EQU 218
 | 
				
			||||||
 | 
					DEF RNG_MODE_TGM1       EQU 0
 | 
				
			||||||
 | 
					DEF RNG_MODE_TGM2       EQU 1
 | 
				
			||||||
 | 
					DEF RNG_MODE_TGM3       EQU 2
 | 
				
			||||||
 | 
					DEF RNG_MODE_HELL       EQU 3
 | 
				
			||||||
 | 
					DEF RNG_MODE_NES        EQU 4
 | 
				
			||||||
 | 
					DEF RNG_MODE_COUNT      EQU 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Rotation mode.
 | 
				
			||||||
 | 
					DEF TILE_ROT_MODE_BASE  EQU 223
 | 
				
			||||||
 | 
					DEF ROT_MODE_ARS        EQU 0
 | 
				
			||||||
 | 
					DEF ROT_MODE_ARSTI      EQU 1
 | 
				
			||||||
 | 
					DEF ROT_MODE_NES        EQU 2
 | 
				
			||||||
 | 
					DEF ROT_MODE_COUNT      EQU 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Drop mode.
 | 
				
			||||||
 | 
					DEF TILE_DROP_MODE_BASE EQU 226
 | 
				
			||||||
 | 
					DEF DROP_MODE_FIRM      EQU 0
 | 
				
			||||||
 | 
					DEF DROP_MODE_SNIC      EQU 1
 | 
				
			||||||
 | 
					DEF DROP_MODE_HARD      EQU 2
 | 
				
			||||||
 | 
					DEF DROP_MODE_LOCK      EQU 3
 | 
				
			||||||
 | 
					DEF DROP_MODE_NONE      EQU 4
 | 
				
			||||||
 | 
					DEF DROP_MODE_COUNT     EQU 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Speed curve selection.
 | 
				
			||||||
 | 
					DEF SCURVE_DMGT         EQU 0
 | 
				
			||||||
 | 
					DEF SCURVE_TGM1         EQU 1
 | 
				
			||||||
 | 
					DEF SCURVE_TGM3         EQU 2
 | 
				
			||||||
 | 
					DEF SCURVE_DEAT         EQU 3
 | 
				
			||||||
 | 
					DEF SCURVE_SHIR         EQU 4
 | 
				
			||||||
 | 
					DEF SCURVE_CHIL         EQU 5
 | 
				
			||||||
 | 
					DEF SCURVE_COUNT        EQU 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; 20G mode.
 | 
				
			||||||
 | 
					DEF TILE_HIG_MODE_BASE  EQU 231
 | 
				
			||||||
 | 
					DEF HIG_MODE_OFF        EQU 0
 | 
				
			||||||
 | 
					DEF HIG_MODE_ON         EQU 1
 | 
				
			||||||
 | 
					DEF HIG_MODE_COUNT      EQU 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; VRAM Offsets for title screen tiles
 | 
				
			||||||
DEF TITLE_OPTIONS       EQU 7
 | 
					DEF TITLE_OPTIONS       EQU 7
 | 
				
			||||||
DEF TITLE_OPTION_0      EQU $98E0
 | 
					DEF TITLE_OPTION_0      EQU $98E0
 | 
				
			||||||
DEF TITLE_OPTION_1      EQU $9920
 | 
					DEF TITLE_OPTION_1      EQU $9920
 | 
				
			||||||
| 
						 | 
					@ -207,16 +210,33 @@ DEF TITLE_OPTION_5      EQU $9A20
 | 
				
			||||||
DEF TITLE_OPTION_6      EQU $9A60
 | 
					DEF TITLE_OPTION_6      EQU $9A60
 | 
				
			||||||
DEF TITLE_OPTION_OFFSET EQU 15
 | 
					DEF TITLE_OPTION_OFFSET EQU 15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; VRAM Offsets for gameplay tiles
 | 
				
			||||||
DEF FIELD_RNG           EQU $9852
 | 
					DEF FIELD_RNG           EQU $9852
 | 
				
			||||||
DEF FIELD_ROT           EQU $9892
 | 
					DEF FIELD_ROT           EQU $9892
 | 
				
			||||||
DEF FIELD_DROP          EQU $9912
 | 
					DEF FIELD_DROP          EQU $9912
 | 
				
			||||||
DEF FIELD_HIG           EQU $9952
 | 
					DEF FIELD_HIG           EQU $9952
 | 
				
			||||||
DEF FIELD_TOP_LEFT      EQU $9800+1
 | 
					DEF FIELD_TOP_LEFT      EQU $9800+1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Gameplay definitions.
 | 
				
			||||||
 | 
					DEF LEADY_TIME          EQU 80
 | 
				
			||||||
 | 
					DEF GO_TIME             EQU 40
 | 
				
			||||||
 | 
					DEF PIECE_SPAWN_X       EQU 5
 | 
				
			||||||
 | 
					DEF PIECE_SPAWN_Y       EQU 3
 | 
				
			||||||
 | 
					DEF ROTATION_STATE_DEF  EQU 0
 | 
				
			||||||
 | 
					DEF ROTATION_STATE_CW   EQU 1
 | 
				
			||||||
 | 
					DEF ROTATION_STATE_180  EQU 2
 | 
				
			||||||
 | 
					DEF ROTATION_STATE_CCW  EQU 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Game states. (Let these increase by 3)
 | 
				
			||||||
 | 
					DEF STATE_TITLE         EQU 0
 | 
				
			||||||
 | 
					DEF STATE_GAMEPLAY      EQU 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Other
 | 
				
			||||||
 | 
					DEF STACK_SIZE          EQU 64
 | 
				
			||||||
DEF EASTER_0            EQU $9845
 | 
					DEF EASTER_0            EQU $9845
 | 
				
			||||||
DEF EASTER_1            EQU $9865
 | 
					DEF EASTER_1            EQU $9865
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; Magic location for bank id.
 | 
				
			||||||
DEF rBANKID             EQU $4007
 | 
					DEF rBANKID             EQU $4007
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
ENDC
 | 
					ENDC
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,15 +23,14 @@ INCLUDE "globals.asm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "High Input Variables", HRAM
 | 
					SECTION "High Input Variables", HRAM
 | 
				
			||||||
hUpState::     ds 1
 | 
					hUpState::         ds 1
 | 
				
			||||||
hDownState::   ds 1
 | 
					hDownState::       ds 1
 | 
				
			||||||
hLeftState::   ds 1
 | 
					hLeftState::       ds 1
 | 
				
			||||||
hRightState::  ds 1
 | 
					hRightState::      ds 1
 | 
				
			||||||
hAState::      ds 1
 | 
					hAState::          ds 1
 | 
				
			||||||
hBState::      ds 1
 | 
					hBState::          ds 1
 | 
				
			||||||
hStartState::  ds 1
 | 
					hStartState::      ds 1
 | 
				
			||||||
hSelectState:: ds 1
 | 
					hSelectState::     ds 1
 | 
				
			||||||
hDASCharge::   ds 1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,37 +45,10 @@ InputInit::
 | 
				
			||||||
    ldh [hBState], a
 | 
					    ldh [hBState], a
 | 
				
			||||||
    ldh [hStartState], a
 | 
					    ldh [hStartState], a
 | 
				
			||||||
    ldh [hSelectState], a
 | 
					    ldh [hSelectState], a
 | 
				
			||||||
    ldh [hDASCharge], a
 | 
					 | 
				
			||||||
    ret
 | 
					    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GetInput::
 | 
					GetInput::
 | 
				
			||||||
    ; Check if the left state > DAS charge.
 | 
					 | 
				
			||||||
    ldh a, [hLeftState]
 | 
					 | 
				
			||||||
    ld b, a
 | 
					 | 
				
			||||||
    ldh a, [hDASCharge]
 | 
					 | 
				
			||||||
    cp a, b
 | 
					 | 
				
			||||||
    ; If so, save the new DAS charge.
 | 
					 | 
				
			||||||
    jr nc, :+
 | 
					 | 
				
			||||||
    ld a, b
 | 
					 | 
				
			||||||
    ;ldh [hDASCharge], a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ; Check if the right state > DAS charge.
 | 
					 | 
				
			||||||
:   ldh a, [hRightState]
 | 
					 | 
				
			||||||
    ld b, a
 | 
					 | 
				
			||||||
    ldh a, [hDASCharge]
 | 
					 | 
				
			||||||
    cp a, b
 | 
					 | 
				
			||||||
    ; If so, save the new DAS charge.
 | 
					 | 
				
			||||||
    jr nc, :+
 | 
					 | 
				
			||||||
    ld a, b
 | 
					 | 
				
			||||||
    ;ldh [hDASCharge], a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ; There's an overflow risk here if the DAS charge is 255.
 | 
					 | 
				
			||||||
:   cp a, $FF
 | 
					 | 
				
			||||||
    jr nz, .btns
 | 
					 | 
				
			||||||
    dec a
 | 
					 | 
				
			||||||
    ldh [hDASCharge], a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ; Get the button state.
 | 
					    ; Get the button state.
 | 
				
			||||||
.btns
 | 
					.btns
 | 
				
			||||||
    ld a, P1F_GET_BTN
 | 
					    ld a, P1F_GET_BTN
 | 
				
			||||||
| 
						 | 
					@ -187,7 +159,7 @@ GetInput::
 | 
				
			||||||
    xor a, a
 | 
					    xor a, a
 | 
				
			||||||
    ldh [hDownState], a
 | 
					    ldh [hDownState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Read left button. If it's just been pressed, restore the held DAS charge.
 | 
					    ; Read left button.
 | 
				
			||||||
.readLeft
 | 
					.readLeft
 | 
				
			||||||
    bit 1, b
 | 
					    bit 1, b
 | 
				
			||||||
    jr nz, .clearLeft
 | 
					    jr nz, .clearLeft
 | 
				
			||||||
| 
						 | 
					@ -195,42 +167,41 @@ GetInput::
 | 
				
			||||||
    ldh a, [hLeftState]
 | 
					    ldh a, [hLeftState]
 | 
				
			||||||
    cp a, $FF
 | 
					    cp a, $FF
 | 
				
			||||||
    jr z, .readRight
 | 
					    jr z, .readRight
 | 
				
			||||||
    cp a, 0
 | 
					    inc a
 | 
				
			||||||
    jr nz, :+
 | 
					 | 
				
			||||||
    ldh a, [hDASCharge]
 | 
					 | 
				
			||||||
:   inc a
 | 
					 | 
				
			||||||
    ldh [hLeftState], a
 | 
					    ldh [hLeftState], a
 | 
				
			||||||
    jr .readRight
 | 
					    jr .readRight
 | 
				
			||||||
.clearLeft
 | 
					.clearLeft
 | 
				
			||||||
    xor a, a
 | 
					    xor a, a
 | 
				
			||||||
    ldh [hLeftState], a
 | 
					    ldh [hLeftState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Read right button. If it's just been pressed, restore the held DAS charge.
 | 
					    ; Read right button.
 | 
				
			||||||
.readRight
 | 
					.readRight
 | 
				
			||||||
    bit 0, b
 | 
					    bit 0, b
 | 
				
			||||||
    jr nz, .clearRight
 | 
					    jr nz, .clearRight
 | 
				
			||||||
.setRight
 | 
					.setRight
 | 
				
			||||||
    ldh a, [hRightState]
 | 
					    ldh a, [hRightState]
 | 
				
			||||||
    cp a, $FF
 | 
					    cp a, $FF
 | 
				
			||||||
    jr z, .checkDAS
 | 
					    jr z, .priorities
 | 
				
			||||||
    cp a, 0
 | 
					    inc a
 | 
				
			||||||
    jr nz, :+
 | 
					 | 
				
			||||||
    ldh a, [hDASCharge]
 | 
					 | 
				
			||||||
:   inc a
 | 
					 | 
				
			||||||
    ldh [hRightState], a
 | 
					    ldh [hRightState], a
 | 
				
			||||||
    jr .checkDAS
 | 
					    jr .priorities
 | 
				
			||||||
.clearRight
 | 
					.clearRight
 | 
				
			||||||
    xor a, a
 | 
					    xor a, a
 | 
				
			||||||
    ldh [hRightState], a
 | 
					    ldh [hRightState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; If none of the four directions are pressed, reset the DAS charge.
 | 
					    ; If left or right are pressed, zero out up and down.
 | 
				
			||||||
.checkDAS
 | 
					.priorities
 | 
				
			||||||
    ld a, b
 | 
					    ldh a, [hRightState]
 | 
				
			||||||
    or a, $F0
 | 
					    cp a, 0
 | 
				
			||||||
    cp a, $FF
 | 
					    jr nz, .zero
 | 
				
			||||||
    ret nz
 | 
					    ldh a, [hLeftState]
 | 
				
			||||||
 | 
					    cp a, 0
 | 
				
			||||||
 | 
					    ret z
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.zero
 | 
				
			||||||
    xor a, a
 | 
					    xor a, a
 | 
				
			||||||
    ldh [hDASCharge], a
 | 
					    ldh [hUpState], a
 | 
				
			||||||
 | 
					    ldh [hDownState], a
 | 
				
			||||||
    ret
 | 
					    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										27
									
								
								src/main.asm
								
								
								
								
							
							
						
						
									
										27
									
								
								src/main.asm
								
								
								
								
							| 
						 | 
					@ -126,21 +126,36 @@ EventLoop::
 | 
				
			||||||
    call HandleTimers
 | 
					    call HandleTimers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Call the current state's event handler.
 | 
					    ; Call the current state's event handler.
 | 
				
			||||||
    ld b, 0
 | 
					    ld hl, .eventloopjumps
 | 
				
			||||||
    ldh a, [hGameState]
 | 
					    ldh a, [hGameState]
 | 
				
			||||||
    cp a, b
 | 
					    ld b, 0
 | 
				
			||||||
    jp nz, GamePlayEventLoopHandler
 | 
					    ld c, a
 | 
				
			||||||
 | 
					    add hl, bc
 | 
				
			||||||
 | 
					    jp hl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.eventloopjumps
 | 
				
			||||||
    jp TitleEventLoopHandler
 | 
					    jp TitleEventLoopHandler
 | 
				
			||||||
 | 
					    jp GamePlayEventLoopHandler
 | 
				
			||||||
EventLoopPostHandler::
 | 
					EventLoopPostHandler::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Wait for vblank.
 | 
					    ; Wait for vblank.
 | 
				
			||||||
    wait_vblank
 | 
					    wait_vblank
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Do OAM DMA.
 | 
					    ; Do OAM DMA.
 | 
				
			||||||
    ; This will chain jump into the vblank handler.
 | 
					    call hOAMDMA
 | 
				
			||||||
    jp hOAMDMA
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; The VBlank Handler is expected to end with jr EventLoop.
 | 
					    ; Call the current state's vblank handler.
 | 
				
			||||||
 | 
					    ld hl, .vblankjumps
 | 
				
			||||||
 | 
					    ldh a, [hGameState]
 | 
				
			||||||
 | 
					    ld b, 0
 | 
				
			||||||
 | 
					    ld c, a
 | 
				
			||||||
 | 
					    add hl, bc
 | 
				
			||||||
 | 
					    jp hl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.vblankjumps
 | 
				
			||||||
 | 
					    jp TitleVBlankHandler
 | 
				
			||||||
 | 
					    jp BlitField
 | 
				
			||||||
 | 
					    ; The VBlank Handler is expected to end with jp EventLoop.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENDC
 | 
					ENDC
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -28,8 +28,8 @@ Tiles::
 | 
				
			||||||
    DB $67,$1F,$67,$1F,$67,$1F,$00,$00
 | 
					    DB $67,$1F,$67,$1F,$67,$1F,$00,$00
 | 
				
			||||||
    DB $E6,$F8,$E6,$F8,$E6,$F8,$E6,$F8
 | 
					    DB $E6,$F8,$E6,$F8,$E6,$F8,$E6,$F8
 | 
				
			||||||
    DB $E6,$F8,$E6,$F8,$E6,$F8,$00,$00
 | 
					    DB $E6,$F8,$E6,$F8,$E6,$F8,$00,$00
 | 
				
			||||||
 | 
					    DB $00,$00,$00,$00,$00,$00,$10,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$01,$00,$00,$00
 | 
					 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$FF,$FF,$FF
 | 
					    DB $00,$00,$00,$00,$00,$FF,$FF,$FF
 | 
				
			||||||
    DB $00,$FF,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$FF,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$FF,$FF,$FF,$00
 | 
					    DB $00,$00,$00,$00,$FF,$FF,$FF,$00
 | 
				
			||||||
| 
						 | 
					@ -44,8 +44,8 @@ Tiles::
 | 
				
			||||||
    DB $66,$BD,$7E,$99,$00,$FF,$00,$00
 | 
					    DB $66,$BD,$7E,$99,$00,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5
 | 
					    DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5
 | 
				
			||||||
    DB $36,$C9,$6C,$93,$00,$FF,$00,$00
 | 
					    DB $36,$C9,$6C,$93,$00,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$00,$BD,$3C,$81,$00,$81
 | 
					    DB $00,$FF,$42,$BD,$7E,$81,$7E,$81
 | 
				
			||||||
    DB $3C,$81,$00,$BD,$00,$FF,$00,$00
 | 
					    DB $7E,$81,$42,$BD,$00,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81
 | 
					    DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81
 | 
				
			||||||
    DB $5A,$A5,$3C,$C3,$00,$FF,$00,$00
 | 
					    DB $5A,$A5,$3C,$C3,$00,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD
 | 
					    DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD
 | 
				
			||||||
| 
						 | 
					@ -58,8 +58,8 @@ Tiles::
 | 
				
			||||||
    DB $E7,$BD,$FF,$99,$FF,$FF,$00,$00
 | 
					    DB $E7,$BD,$FF,$99,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $FF,$FF,$B7,$C9,$ED,$93,$DB,$A5
 | 
					    DB $FF,$FF,$B7,$C9,$ED,$93,$DB,$A5
 | 
				
			||||||
    DB $B7,$C9,$ED,$93,$FF,$FF,$00,$00
 | 
					    DB $B7,$C9,$ED,$93,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $FF,$FF,$81,$BD,$BD,$81,$81,$81
 | 
					    DB $FF,$FF,$C3,$BD,$FF,$81,$FF,$81
 | 
				
			||||||
    DB $BD,$81,$81,$BD,$FF,$FF,$00,$00
 | 
					    DB $FF,$81,$C3,$BD,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $FF,$FF,$BD,$C3,$DB,$A5,$FF,$81
 | 
					    DB $FF,$FF,$BD,$C3,$DB,$A5,$FF,$81
 | 
				
			||||||
    DB $DB,$A5,$BD,$C3,$FF,$FF,$00,$00
 | 
					    DB $DB,$A5,$BD,$C3,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $FF,$FF,$DB,$A5,$C3,$BD,$C3,$BD
 | 
					    DB $FF,$FF,$DB,$A5,$C3,$BD,$C3,$BD
 | 
				
			||||||
| 
						 | 
					@ -72,8 +72,8 @@ Tiles::
 | 
				
			||||||
    DB $66,$BD,$FE,$BB,$FF,$FF,$00,$00
 | 
					    DB $66,$BD,$FE,$BB,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5
 | 
					    DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5
 | 
				
			||||||
    DB $36,$C9,$EE,$BB,$FF,$FF,$00,$00
 | 
					    DB $36,$C9,$EE,$BB,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$00,$BD,$3C,$81,$00,$81
 | 
					    DB $00,$FF,$42,$BD,$7E,$81,$7E,$81
 | 
				
			||||||
    DB $3C,$81,$AA,$BF,$FF,$FF,$00,$00
 | 
					    DB $7E,$81,$EA,$BF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81
 | 
					    DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81
 | 
				
			||||||
    DB $5A,$A5,$BE,$EB,$FF,$FF,$00,$00
 | 
					    DB $5A,$A5,$BE,$EB,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD
 | 
					    DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD
 | 
				
			||||||
| 
						 | 
					@ -86,8 +86,8 @@ Tiles::
 | 
				
			||||||
    DB $EE,$BF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $EE,$BF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5
 | 
					    DB $00,$FF,$36,$C9,$6C,$93,$5A,$A5
 | 
				
			||||||
    DB $BE,$EB,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $BE,$EB,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$00,$BD,$3C,$81,$00,$81
 | 
					    DB $00,$FF,$42,$BD,$7E,$81,$7E,$81
 | 
				
			||||||
    DB $BE,$AB,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FE,$AB,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81
 | 
					    DB $00,$FF,$3C,$C3,$5A,$A5,$7E,$81
 | 
				
			||||||
    DB $FA,$AF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FA,$AF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD
 | 
					    DB $00,$FF,$5A,$A5,$42,$BD,$42,$BD
 | 
				
			||||||
| 
						 | 
					@ -100,7 +100,7 @@ Tiles::
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$36,$C9,$6C,$93,$FA,$AF
 | 
					    DB $00,$FF,$36,$C9,$6C,$93,$FA,$AF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$00,$BD,$3C,$81,$AA,$AB
 | 
					    DB $00,$FF,$42,$BD,$7E,$81,$FE,$AB
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$3C,$C3,$5A,$A5,$FE,$AB
 | 
					    DB $00,$FF,$3C,$C3,$5A,$A5,$FE,$AB
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ Tiles::
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$36,$C9,$EE,$BB,$FF,$FF
 | 
					    DB $00,$FF,$36,$C9,$EE,$BB,$FF,$FF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$00,$BD,$BE,$AB,$FF,$FF
 | 
					    DB $00,$FF,$42,$BD,$FE,$AB,$FF,$FF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$3C,$C3,$FA,$AF,$FF,$FF
 | 
					    DB $00,$FF,$3C,$C3,$FA,$AF,$FF,$FF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
| 
						 | 
					@ -128,7 +128,7 @@ Tiles::
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$BE,$EB,$FF,$FF,$FF,$FF
 | 
					    DB $00,$FF,$BE,$EB,$FF,$FF,$FF,$FF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$AA,$BF,$FF,$FF,$FF,$FF
 | 
					    DB $00,$FF,$EA,$BF,$FF,$FF,$FF,$FF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $00,$FF,$BE,$EB,$FF,$FF,$FF,$FF
 | 
					    DB $00,$FF,$BE,$EB,$FF,$FF,$FF,$FF
 | 
				
			||||||
    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
					    DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
| 
						 | 
					@ -272,10 +272,10 @@ Tiles::
 | 
				
			||||||
    DB $00,$FF,$55,$FF,$FF,$FF,$00,$00
 | 
					    DB $00,$FF,$55,$FF,$FF,$FF,$00,$00
 | 
				
			||||||
    DB $DB,$E7,$A5,$C3,$42,$81,$81,$00
 | 
					    DB $DB,$E7,$A5,$C3,$42,$81,$81,$00
 | 
				
			||||||
    DB $42,$81,$A5,$C3,$DB,$E7,$00,$00
 | 
					    DB $42,$81,$A5,$C3,$DB,$E7,$00,$00
 | 
				
			||||||
    DB $10,$10,$38,$38,$7C,$7C,$10,$10
 | 
					    DB $44,$44,$FE,$FE,$44,$44,$44,$44
 | 
				
			||||||
    DB $7C,$7C,$38,$38,$10,$10,$00,$00
 | 
					    DB $44,$44,$FE,$FE,$44,$44,$00,$00
 | 
				
			||||||
    DB $00,$00,$28,$28,$6C,$6C,$FE,$FE
 | 
					    DB $00,$00,$00,$00,$00,$00,$3C,$3C
 | 
				
			||||||
    DB $6C,$6C,$28,$28,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$18,$18,$18,$18,$30,$30
 | 
					    DB $00,$00,$18,$18,$18,$18,$30,$30
 | 
				
			||||||
    DB $30,$30,$60,$60,$60,$60,$00,$00
 | 
					    DB $30,$30,$60,$60,$60,$60,$00,$00
 | 
				
			||||||
    DB $F0,$F0,$C0,$C0,$C0,$C0,$C0,$C0
 | 
					    DB $F0,$F0,$C0,$C0,$C0,$C0,$C0,$C0
 | 
				
			||||||
| 
						 | 
					@ -453,7 +453,9 @@ Tiles::
 | 
				
			||||||
    DB $C6,$C6,$6C,$6C,$38,$38,$38,$38
 | 
					    DB $C6,$C6,$6C,$6C,$38,$38,$38,$38
 | 
				
			||||||
    DB $6C,$6C,$C6,$C6,$00,$00,$00,$00
 | 
					    DB $6C,$6C,$C6,$C6,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$30,$30,$30,$30,$00,$00
 | 
				
			||||||
 | 
					    DB $00,$00,$30,$30,$30,$30,$00,$00
 | 
				
			||||||
 | 
					    DB $00,$00,$30,$30,$30,$30,$00,$00
 | 
				
			||||||
    DB $00,$75,$00,$47,$00,$55,$00,$55
 | 
					    DB $00,$75,$00,$47,$00,$55,$00,$55
 | 
				
			||||||
    DB $00,$75,$00,$00,$00,$3E,$00,$00
 | 
					    DB $00,$75,$00,$00,$00,$3E,$00,$00
 | 
				
			||||||
    DB $00,$75,$00,$47,$00,$55,$00,$55
 | 
					    DB $00,$75,$00,$47,$00,$55,$00,$55
 | 
				
			||||||
| 
						 | 
					@ -464,24 +466,20 @@ Tiles::
 | 
				
			||||||
    DB $00,$3E,$00,$2A,$00,$00,$00,$00
 | 
					    DB $00,$3E,$00,$2A,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$FF,$20,$81,$76,$81
 | 
					    DB $00,$00,$00,$FF,$20,$81,$76,$81
 | 
				
			||||||
    DB $20,$81,$00,$FF,$00,$00,$00,$00
 | 
					    DB $20,$81,$00,$FF,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$28,$28,$10,$10
 | 
					 | 
				
			||||||
    DB $28,$28,$00,$00,$00,$00,$00,$00
 | 
					 | 
				
			||||||
    DB $00,$00,$00,$00,$28,$28,$10,$10
 | 
					 | 
				
			||||||
    DB $28,$28,$00,$00,$00,$00,$00,$00
 | 
					 | 
				
			||||||
    DB $00,$00,$00,$00,$28,$28,$10,$10
 | 
					 | 
				
			||||||
    DB $28,$28,$00,$00,$00,$00,$00,$00
 | 
					 | 
				
			||||||
    DB $00,$26,$00,$55,$00,$76,$00,$55
 | 
					    DB $00,$26,$00,$55,$00,$76,$00,$55
 | 
				
			||||||
    DB $00,$55,$00,$00,$00,$3E,$00,$00
 | 
					    DB $00,$55,$00,$00,$00,$3E,$00,$00
 | 
				
			||||||
    DB $00,$26,$00,$55,$00,$76,$00,$55
 | 
					    DB $00,$26,$00,$55,$00,$76,$00,$55
 | 
				
			||||||
    DB $00,$55,$00,$00,$00,$36,$00,$00
 | 
					    DB $00,$55,$00,$00,$00,$36,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$28,$28,$10,$10
 | 
					    DB $00,$00,$00,$FF,$20,$81,$76,$81
 | 
				
			||||||
    DB $28,$28,$00,$00,$00,$00,$00,$00
 | 
					    DB $20,$81,$00,$FF,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$28,$28,$10,$10
 | 
					    DB $02,$70,$02,$40,$02,$60,$07,$40
 | 
				
			||||||
    DB $28,$28,$00,$00,$00,$00,$00,$00
 | 
					    DB $07,$40,$02,$00,$00,$1F,$00,$00
 | 
				
			||||||
    DB $02,$70,$02,$40,$02,$70,$07,$10
 | 
					    DB $02,$70,$02,$40,$02,$70,$07,$10
 | 
				
			||||||
    DB $07,$70,$02,$00,$00,$1F,$00,$00
 | 
					    DB $07,$70,$02,$00,$00,$1F,$00,$00
 | 
				
			||||||
    DB $02,$50,$02,$50,$02,$70,$07,$50
 | 
					    DB $02,$50,$02,$50,$02,$70,$07,$50
 | 
				
			||||||
    DB $07,$50,$02,$00,$00,$1F,$00,$00
 | 
					    DB $07,$50,$02,$00,$00,$1F,$00,$00
 | 
				
			||||||
 | 
					    DB $02,$40,$02,$40,$02,$40,$07,$40
 | 
				
			||||||
 | 
					    DB $07,$70,$02,$00,$00,$1F,$00,$00
 | 
				
			||||||
    DB $02,$50,$02,$50,$02,$20,$07,$50
 | 
					    DB $02,$50,$02,$50,$02,$20,$07,$50
 | 
				
			||||||
    DB $07,$50,$02,$00,$00,$1F,$00,$00
 | 
					    DB $07,$50,$02,$00,$00,$1F,$00,$00
 | 
				
			||||||
    DB $00,$3E,$02,$61,$04,$51,$24,$49
 | 
					    DB $00,$3E,$02,$61,$04,$51,$24,$49
 | 
				
			||||||
| 
						 | 
					@ -508,10 +506,12 @@ Tiles::
 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$E8,$00,$A8,$00,$A8,$00,$A8
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$EE,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$EA,$00,$8E,$00,$EA,$00,$2A
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $00,$EA,$00,$00,$00,$00,$00,$00
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
 | 
					    DB $00,$00,$00,$00,$00,$00,$00,$00
 | 
				
			||||||
    DB $03,$03,$04,$04,$08,$08,$0D,$08
 | 
					    DB $03,$03,$04,$04,$08,$08,$0D,$08
 | 
				
			||||||
    DB $0B,$09,$0D,$08,$0F,$08,$00,$00
 | 
					    DB $0B,$09,$0D,$08,$0F,$08,$00,$00
 | 
				
			||||||
    DB $06,$05,$03,$03,$00,$00,$0F,$0F
 | 
					    DB $06,$05,$03,$03,$00,$00,$0F,$0F
 | 
				
			||||||
| 
						 | 
					@ -528,8 +528,8 @@ Tiles::
 | 
				
			||||||
    DB $82,$82,$82,$82,$EC,$EC,$00,$00
 | 
					    DB $82,$82,$82,$82,$EC,$EC,$00,$00
 | 
				
			||||||
    DB $44,$44,$CA,$CA,$4A,$4A,$4A,$4A
 | 
					    DB $44,$44,$CA,$CA,$4A,$4A,$4A,$4A
 | 
				
			||||||
    DB $4A,$4A,$4A,$4A,$E4,$E4,$00,$00
 | 
					    DB $4A,$4A,$4A,$4A,$E4,$E4,$00,$00
 | 
				
			||||||
    DB $CE,$CE,$28,$28,$28,$28,$4C,$4C
 | 
					    DB $C6,$C6,$28,$28,$28,$28,$4E,$4E
 | 
				
			||||||
    DB $82,$82,$82,$82,$EC,$EC,$00,$00
 | 
					    DB $8A,$8A,$8A,$8A,$EC,$EC,$00,$00
 | 
				
			||||||
    DB $08,$08,$1C,$1C,$30,$30,$3C,$3C
 | 
					    DB $08,$08,$1C,$1C,$30,$30,$3C,$3C
 | 
				
			||||||
    DB $3C,$3C,$1C,$1C,$14,$14,$00,$00
 | 
					    DB $3C,$3C,$1C,$1C,$14,$14,$00,$00
 | 
				
			||||||
TilesEnd::
 | 
					TilesEnd::
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,12 +65,8 @@ OAMDMA::
 | 
				
			||||||
:       dec a
 | 
					:       dec a
 | 
				
			||||||
        jr nz, :-
 | 
					        jr nz, :-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ; Jump to the current state's vblank handler.
 | 
					        ; Return
 | 
				
			||||||
        ld b, 0
 | 
					        ret
 | 
				
			||||||
        ldh a, [hGameState]
 | 
					 | 
				
			||||||
        cp a, b
 | 
					 | 
				
			||||||
        jp nz, BlitField
 | 
					 | 
				
			||||||
        jp TitleVBlankHandler
 | 
					 | 
				
			||||||
    ENDL
 | 
					    ENDL
 | 
				
			||||||
OAMDMAEnd::
 | 
					OAMDMAEnd::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,7 +59,7 @@ InitializeSRAM:
 | 
				
			||||||
    ld [rRotModeState], a
 | 
					    ld [rRotModeState], a
 | 
				
			||||||
    ld [wRotModeState], a
 | 
					    ld [wRotModeState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ld a, DROP_MODE_SONIC
 | 
					    ld a, DROP_MODE_FIRM
 | 
				
			||||||
    ld [rDropModeState], a
 | 
					    ld [rDropModeState], a
 | 
				
			||||||
    ld [wDropModeState], a
 | 
					    ld [wDropModeState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,15 +23,15 @@ INCLUDE "globals.asm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEF MODE_LEADY              EQU 0
 | 
					DEF MODE_LEADY              EQU 0
 | 
				
			||||||
DEF MODE_GO                 EQU 1
 | 
					DEF MODE_GO                 EQU 3
 | 
				
			||||||
DEF MODE_POSTGO             EQU 2
 | 
					DEF MODE_POSTGO             EQU 6
 | 
				
			||||||
DEF MODE_PREFETCHED_PIECE   EQU 4
 | 
					DEF MODE_PREFETCHED_PIECE   EQU 9
 | 
				
			||||||
DEF MODE_SPAWN_PIECE        EQU 5
 | 
					DEF MODE_SPAWN_PIECE        EQU 12
 | 
				
			||||||
DEF MODE_PIECE_IN_MOTION    EQU 6
 | 
					DEF MODE_PIECE_IN_MOTION    EQU 15
 | 
				
			||||||
DEF MODE_DELAY              EQU 7
 | 
					DEF MODE_DELAY              EQU 18
 | 
				
			||||||
DEF MODE_GAME_OVER          EQU 8
 | 
					DEF MODE_GAME_OVER          EQU 21
 | 
				
			||||||
DEF MODE_PRE_GAME_OVER      EQU 9
 | 
					DEF MODE_PRE_GAME_OVER      EQU 24
 | 
				
			||||||
DEF MODE_PAUSED             EQU 10
 | 
					DEF MODE_PAUSED             EQU 27
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "High Gameplay Variables", HRAM
 | 
					SECTION "High Gameplay Variables", HRAM
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ SwitchToGameplay::
 | 
				
			||||||
    call GBCGameplayInit
 | 
					    call GBCGameplayInit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Install the event loop handlers.
 | 
					    ; Install the event loop handlers.
 | 
				
			||||||
    ld a, 1
 | 
					    ld a, STATE_GAMEPLAY
 | 
				
			||||||
    ldh [hGameState], a
 | 
					    ldh [hGameState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; And turn the LCD back on before we start.
 | 
					    ; And turn the LCD back on before we start.
 | 
				
			||||||
| 
						 | 
					@ -132,28 +132,24 @@ SwitchToGameplay::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GamePlayEventLoopHandler::
 | 
					GamePlayEventLoopHandler::
 | 
				
			||||||
    ; What mode are we in?
 | 
					    ; What mode are we in?
 | 
				
			||||||
 | 
					    ld hl, .modejumps
 | 
				
			||||||
    ldh a, [hMode]
 | 
					    ldh a, [hMode]
 | 
				
			||||||
    cp MODE_LEADY
 | 
					    ld b, 0
 | 
				
			||||||
    jr z, leadyMode
 | 
					    ld c, a
 | 
				
			||||||
    cp MODE_GO
 | 
					    add hl, bc
 | 
				
			||||||
    jr z, goMode
 | 
					    jp hl
 | 
				
			||||||
    cp MODE_POSTGO
 | 
					 | 
				
			||||||
    jr z, postGoMode
 | 
					 | 
				
			||||||
    cp MODE_PREFETCHED_PIECE
 | 
					 | 
				
			||||||
    jr z, prefetchedPieceMode
 | 
					 | 
				
			||||||
    cp MODE_SPAWN_PIECE
 | 
					 | 
				
			||||||
    jp z, spawnPieceMode
 | 
					 | 
				
			||||||
    cp MODE_PIECE_IN_MOTION
 | 
					 | 
				
			||||||
    jp z, pieceInMotionMode
 | 
					 | 
				
			||||||
    cp MODE_DELAY
 | 
					 | 
				
			||||||
    jp z, delayMode
 | 
					 | 
				
			||||||
    cp MODE_PRE_GAME_OVER
 | 
					 | 
				
			||||||
    jp z, preGameOverMode
 | 
					 | 
				
			||||||
    cp MODE_GAME_OVER
 | 
					 | 
				
			||||||
    jp z, gameOverMode
 | 
					 | 
				
			||||||
    cp MODE_PAUSED
 | 
					 | 
				
			||||||
    jp z, pauseMode
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.modejumps
 | 
				
			||||||
 | 
					    jp leadyMode
 | 
				
			||||||
 | 
					    jp goMode
 | 
				
			||||||
 | 
					    jp postGoMode
 | 
				
			||||||
 | 
					    jp prefetchedPieceMode
 | 
				
			||||||
 | 
					    jp spawnPieceMode
 | 
				
			||||||
 | 
					    jp pieceInMotionMode
 | 
				
			||||||
 | 
					    jp delayMode
 | 
				
			||||||
 | 
					    jp gameOverMode
 | 
				
			||||||
 | 
					    jp preGameOverMode
 | 
				
			||||||
 | 
					    jp pauseMode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Draw "READY" and wait a bit.
 | 
					    ; Draw "READY" and wait a bit.
 | 
				
			||||||
leadyMode:
 | 
					leadyMode:
 | 
				
			||||||
| 
						 | 
					@ -210,11 +206,11 @@ prefetchedPieceMode:
 | 
				
			||||||
    ; A piece will spawn in the middle, at the top of the screen, not rotated by default.
 | 
					    ; A piece will spawn in the middle, at the top of the screen, not rotated by default.
 | 
				
			||||||
    ld a, $FF
 | 
					    ld a, $FF
 | 
				
			||||||
    ldh [hRequestedJingle], a
 | 
					    ldh [hRequestedJingle], a
 | 
				
			||||||
    ld a, 5
 | 
					    ld a, PIECE_SPAWN_X
 | 
				
			||||||
    ldh [hCurrentPieceX], a
 | 
					    ldh [hCurrentPieceX], a
 | 
				
			||||||
    ld a, 3
 | 
					    ld a, PIECE_SPAWN_Y
 | 
				
			||||||
    ldh [hCurrentPieceY], a
 | 
					    ldh [hCurrentPieceY], a
 | 
				
			||||||
    xor a, a
 | 
					    xor a, a ; ROTATION_STATE_DEF
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
    ldh [hHoldSpent], a
 | 
					    ldh [hHoldSpent], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -252,7 +248,7 @@ prefetchedPieceMode:
 | 
				
			||||||
    ld a, $FF
 | 
					    ld a, $FF
 | 
				
			||||||
    ldh [hAState], a
 | 
					    ldh [hAState], a
 | 
				
			||||||
.cp1
 | 
					.cp1
 | 
				
			||||||
    ld a, 3
 | 
					    ld a, ROTATION_STATE_CCW
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
    ldh a, [hNextPiece]
 | 
					    ldh a, [hNextPiece]
 | 
				
			||||||
    ld b, a
 | 
					    ld b, a
 | 
				
			||||||
| 
						 | 
					@ -279,7 +275,7 @@ prefetchedPieceMode:
 | 
				
			||||||
    ld a, $FF
 | 
					    ld a, $FF
 | 
				
			||||||
    ldh [hBState], a
 | 
					    ldh [hBState], a
 | 
				
			||||||
.cp2
 | 
					.cp2
 | 
				
			||||||
    ld a, 1
 | 
					    ld a, ROTATION_STATE_CW
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
    ldh a, [hNextPiece]
 | 
					    ldh a, [hNextPiece]
 | 
				
			||||||
    ld b, a
 | 
					    ld b, a
 | 
				
			||||||
| 
						 | 
					@ -338,10 +334,11 @@ pieceInMotionMode:
 | 
				
			||||||
    cp a, $FF
 | 
					    cp a, $FF
 | 
				
			||||||
    jr z, :+
 | 
					    jr z, :+
 | 
				
			||||||
    ; Reset position and rotation.
 | 
					    ; Reset position and rotation.
 | 
				
			||||||
    ld a, 5
 | 
					    ld a, PIECE_SPAWN_X
 | 
				
			||||||
    ldh [hCurrentPieceX], a
 | 
					    ldh [hCurrentPieceX], a
 | 
				
			||||||
    ld a, 3
 | 
					    ld a, PIECE_SPAWN_Y
 | 
				
			||||||
    ldh [hCurrentPieceY], a
 | 
					    ldh [hCurrentPieceY], a
 | 
				
			||||||
 | 
					    xor a, a ; ROTATION_STATE_DEF
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
    call DoHold
 | 
					    call DoHold
 | 
				
			||||||
    ld a, MODE_SPAWN_PIECE
 | 
					    ld a, MODE_SPAWN_PIECE
 | 
				
			||||||
| 
						 | 
					@ -622,7 +619,7 @@ DoHold:
 | 
				
			||||||
    ld a, $FF
 | 
					    ld a, $FF
 | 
				
			||||||
    ldh [hAState], a
 | 
					    ldh [hAState], a
 | 
				
			||||||
.cp3
 | 
					.cp3
 | 
				
			||||||
    ld a, 3
 | 
					    ld a, ROTATION_STATE_CCW
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
    call SFXKill
 | 
					    call SFXKill
 | 
				
			||||||
    ld a, SFX_IRS | SFX_IHS
 | 
					    ld a, SFX_IRS | SFX_IHS
 | 
				
			||||||
| 
						 | 
					@ -647,7 +644,7 @@ DoHold:
 | 
				
			||||||
    ld a, $FF
 | 
					    ld a, $FF
 | 
				
			||||||
    ldh [hBState], a
 | 
					    ldh [hBState], a
 | 
				
			||||||
.cp4
 | 
					.cp4
 | 
				
			||||||
    ld a, 1
 | 
					    ld a, ROTATION_STATE_CW
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
    call SFXKill
 | 
					    call SFXKill
 | 
				
			||||||
    ld a, SFX_IRS | SFX_IHS
 | 
					    ld a, SFX_IRS | SFX_IHS
 | 
				
			||||||
| 
						 | 
					@ -658,7 +655,7 @@ DoHold:
 | 
				
			||||||
    call SFXKill
 | 
					    call SFXKill
 | 
				
			||||||
    ld a, SFX_IHS
 | 
					    ld a, SFX_IHS
 | 
				
			||||||
    call SFXEnqueue
 | 
					    call SFXEnqueue
 | 
				
			||||||
    ld a, 0
 | 
					    xor a, a ; ROTATION_STATE_DEF
 | 
				
			||||||
    ldh [hCurrentPieceRotationState], a
 | 
					    ldh [hCurrentPieceRotationState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.doHoldOperation
 | 
					.doHoldOperation
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,8 +115,10 @@ SwitchToTitle::
 | 
				
			||||||
    call GBCTitleInit
 | 
					    call GBCTitleInit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Install the event loop handlers.
 | 
					    ; Install the event loop handlers.
 | 
				
			||||||
    ld a, 0
 | 
					    ld a, STATE_TITLE
 | 
				
			||||||
    ldh [hGameState], a
 | 
					    ldh [hGameState], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    xor a, a
 | 
				
			||||||
    ld [wSelected], a
 | 
					    ld [wSelected], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; And turn the LCD back on before we start.
 | 
					    ; And turn the LCD back on before we start.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue