Redo SFX engine & speed curves.
This commit is contained in:
		
							parent
							
								
									c6f5cf66b9
								
							
						
					
					
						commit
						f46488e19d
					
				|  | @ -107,6 +107,9 @@ sOption3:: | ||||||
|     db "NONE" |     db "NONE" | ||||||
| sOption4:: | sOption4:: | ||||||
|     db "DMGT" |     db "DMGT" | ||||||
|  |     db "TGM1" | ||||||
|  |     db "DEAT" | ||||||
|  |     db "SHIR" | ||||||
| sOption5:: | sOption5:: | ||||||
|     db "  NO" |     db "  NO" | ||||||
|     db " YES" |     db " YES" | ||||||
|  | @ -136,6 +139,158 @@ sPieceYOffsets::    ; How to draw each piece. Y-offsets of the sprites. | ||||||
|     db 0, 7, 0, 7   ; O |     db 0, 7, 0, 7   ; O | ||||||
|     db 0, 0, 7, 0   ; T |     db 0, 0, 7, 0   ; T | ||||||
| 
 | 
 | ||||||
|  | sTGM1SpeedCurve:: | ||||||
|  |     dw $0000, 0, $0100 | ||||||
|  |     db 1, 64 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0030, 30, $0100 | ||||||
|  |     db 1, 42 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0035, 35, $0100 | ||||||
|  |     db 1, 32 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0040, 40, $0100 | ||||||
|  |     db 1, 25 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0060, 60, $0100 | ||||||
|  |     db 1, 16 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0070, 70, $0100 | ||||||
|  |     db 1, 8 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0080, 80, $0100 | ||||||
|  |     db 1, 5 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0100, 100, $0200 | ||||||
|  |     db 1, 3 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0160, 160, $0200 | ||||||
|  |     db 1, 2 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0200, 200, $0300 | ||||||
|  |     db 1, 64 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0220, 220, $0300 | ||||||
|  |     db 1, 8 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0230, 230, $0300 | ||||||
|  |     db 1, 4 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0233, 233, $0300 | ||||||
|  |     db 1, 3 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0236, 236, $0300 | ||||||
|  |     db 1, 2 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0251, 251, $0300 | ||||||
|  |     db 1, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0300, 300, $0400 | ||||||
|  |     db 2, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0330, 330, $0400 | ||||||
|  |     db 3, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0360, 360, $0400 | ||||||
|  |     db 4, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0400, 400, $0500 | ||||||
|  |     db 5, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0420, 420, $0500 | ||||||
|  |     db 4, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0450, 450, $0500 | ||||||
|  |     db 3, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  |     dw $0500, 500, $0600 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 30, 16, 30, 41 | ||||||
|  | 
 | ||||||
|  | sTGM1SpeedCurveEnd:: | ||||||
|  |     dw $FFFF | ||||||
|  | 
 | ||||||
|  | sDEATSpeedCurve:: | ||||||
|  |     dw $0000, 0, $0100 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 18, 12, 30, 12 | ||||||
|  | 
 | ||||||
|  |     dw $0100, 0, $0200 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 14, 12, 25, 6 | ||||||
|  | 
 | ||||||
|  |     dw $0200, 0, $0300 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 14, 11, 20, 6 | ||||||
|  | 
 | ||||||
|  |     dw $0300, 0, $0400 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 8, 10, 18, 6 | ||||||
|  | 
 | ||||||
|  |     dw $0400, 0, $0500 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 7, 8, 14, 5 | ||||||
|  | 
 | ||||||
|  |     dw $0500, 0, $0600 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 6, 8, 14, 4 | ||||||
|  | 
 | ||||||
|  | sDEATSpeedCurveEnd:: | ||||||
|  |     dw $FFFF | ||||||
|  | 
 | ||||||
|  | sSHIRSpeedCurve:: | ||||||
|  |     dw $0000, 0, $0100 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 12, 10, 18, 6 | ||||||
|  | 
 | ||||||
|  |     dw $0100, 100, $0200 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 12, 8, 18, 5 | ||||||
|  | 
 | ||||||
|  |     dw $0200, 200, $0300 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 12, 8, 16, 4 | ||||||
|  | 
 | ||||||
|  |     dw $0300, 300, $0400 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 6, 8, 14, 4 | ||||||
|  | 
 | ||||||
|  |     dw $0500, 500, $0600 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 6, 6, 12, 2 | ||||||
|  | 
 | ||||||
|  |     dw $1100, 1100, $1200 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 6, 6, 10, 2 | ||||||
|  | 
 | ||||||
|  |     dw $1200, 1200, $1300 | ||||||
|  |     db 20, 1 | ||||||
|  |     db 6, 6, 8, 2 | ||||||
|  | 
 | ||||||
|  | sSHIRSpeedCurveEnd:: | ||||||
|  |     dw $FFFF | ||||||
|  | 
 | ||||||
| sSpeedCurve::           ; Speed curve of the game. | sSpeedCurve::           ; Speed curve of the game. | ||||||
|     dw $0000, 0, $0100  ; Level 0000 |     dw $0000, 0, $0100  ; Level 0000 | ||||||
|     db 1, 16            ; 1G every 16 frames |     db 1, 16            ; 1G every 16 frames | ||||||
|  |  | ||||||
|  | @ -1255,6 +1255,9 @@ FieldProcess:: | ||||||
|     ldh [hCurrentPieceY], a |     ldh [hCurrentPieceY], a | ||||||
|     xor a, a |     xor a, a | ||||||
|     ldh [hCurrentLockDelayRemaining], a |     ldh [hCurrentLockDelayRemaining], a | ||||||
|  |     ldh a, [hCurrentGravityPerTick] | ||||||
|  |     cp a, 1 | ||||||
|  |     jp nz, .draw | ||||||
|     call SFXKill |     call SFXKill | ||||||
|     ld a, SFX_LOCK |     ld a, SFX_LOCK | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|  | @ -1339,8 +1342,11 @@ FieldProcess:: | ||||||
| .playfirmdropsound | .playfirmdropsound | ||||||
|     ldh a, [hCurrentLockDelay] |     ldh a, [hCurrentLockDelay] | ||||||
|     ldh [hCurrentLockDelayRemaining], a |     ldh [hCurrentLockDelayRemaining], a | ||||||
|  |     ldh a, [hCurrentGravityPerTick] | ||||||
|  |     cp a, 1 | ||||||
|  |     jr nz, .postcheckforfirmdropsound | ||||||
|     call SFXKill |     call SFXKill | ||||||
|     ld a, SFX_MOVE |     ld a, SFX_LAND | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
| 
 | 
 | ||||||
|     ; If the down button is held, lock. |     ; If the down button is held, lock. | ||||||
|  | @ -1385,6 +1391,9 @@ FieldProcess:: | ||||||
| 
 | 
 | ||||||
|     ; Play the locking sound and draw the piece. |     ; Play the locking sound and draw the piece. | ||||||
| .dolock | .dolock | ||||||
|  |     ldh a, [hCurrentGravityPerTick] | ||||||
|  |     cp a, 1 | ||||||
|  |     jr nz, .draw | ||||||
|     call SFXKill |     call SFXKill | ||||||
|     ld a, SFX_LOCK |     ld a, SFX_LOCK | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|  | @ -1915,11 +1924,14 @@ FieldDelay:: | ||||||
|     ret nz |     ret nz | ||||||
| 
 | 
 | ||||||
|     call ClearLines |     call ClearLines | ||||||
|  |     ldh a, [hCurrentGravityPerTick] | ||||||
|  |     cp a, 1 | ||||||
|  |     jr nz, :+ | ||||||
|     call SFXKill |     call SFXKill | ||||||
|     ld a, SFX_DROP |     ld a, SFX_LINE_CLEAR | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
| 
 | 
 | ||||||
|     ldh a, [hCurrentARE] | :   ldh a, [hCurrentARE] | ||||||
|     ldh [hRemainingDelay], a |     ldh [hRemainingDelay], a | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -130,15 +130,15 @@ DEF PIECE_O             EQU 5 | ||||||
| DEF PIECE_T             EQU 6 | DEF PIECE_T             EQU 6 | ||||||
| DEF PIECE_NONE          EQU 255 | DEF PIECE_NONE          EQU 255 | ||||||
| 
 | 
 | ||||||
| DEF SFX_IRS             EQU 7 | DEF SFX_IRS             EQU $80 | ||||||
| DEF SFX_DROP            EQU 8 | DEF SFX_IHS             EQU 10 | ||||||
| DEF SFX_LOCK            EQU 9 | DEF SFX_LINE_CLEAR      EQU 11 | ||||||
| DEF SFX_BELL            EQU 10 | DEF SFX_LAND            EQU 12 | ||||||
| DEF SFX_MOVE            EQU 11 | DEF SFX_LOCK            EQU 13 | ||||||
| DEF SFX_RANK_UP         EQU 12 | DEF SFX_LEVELLOCK       EQU 14 | ||||||
| DEF SFX_LEVEL_UP        EQU 13 | DEF SFX_LEVELUP         EQU 15 | ||||||
| DEF SFX_IHS             EQU 14 | DEF SFX_RANKUP          EQU 16 | ||||||
| DEF SFX_READY_GO        EQU 15 | DEF SFX_READYGO         EQU 17 | ||||||
| 
 | 
 | ||||||
| DEF STACK_SIZE          EQU 64 | DEF STACK_SIZE          EQU 64 | ||||||
| DEF GAME_OVER_R10       EQU 133 | DEF GAME_OVER_R10       EQU 133 | ||||||
|  | @ -172,7 +172,10 @@ DEF DROP_MODE_NONE      EQU 2 | ||||||
| DEF DROP_MODE_COUNT     EQU 3 | DEF DROP_MODE_COUNT     EQU 3 | ||||||
| 
 | 
 | ||||||
| DEF SCURVE_DMGT         EQU 0 | DEF SCURVE_DMGT         EQU 0 | ||||||
| DEF SCURVE_COUNT        EQU 1 | DEF SCURVE_TGM1         EQU 1 | ||||||
|  | DEF SCURVE_DEAT         EQU 2 | ||||||
|  | DEF SCURVE_SHIR         EQU 3 | ||||||
|  | DEF SCURVE_COUNT        EQU 4 | ||||||
| 
 | 
 | ||||||
| DEF TILE_HIG_MODE_BASE  EQU 232 | DEF TILE_HIG_MODE_BASE  EQU 232 | ||||||
| DEF HIG_MODE_OFF        EQU 0 | DEF HIG_MODE_OFF        EQU 0 | ||||||
|  |  | ||||||
|  | @ -192,7 +192,7 @@ LevelUp:: | ||||||
|     ldh [hCLevel+2], a |     ldh [hCLevel+2], a | ||||||
|     ldh [hCLevel+3], a |     ldh [hCLevel+3], a | ||||||
|     call DoSpeedUp |     call DoSpeedUp | ||||||
|     ld a, SFX_RANK_UP |     ld a, SFX_RANKUP | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|     ret |     ret | ||||||
| 
 | 
 | ||||||
|  | @ -221,7 +221,7 @@ LevelUp:: | ||||||
|     jr nz, .checkspeedup |     jr nz, .checkspeedup | ||||||
|     ld a, $FF |     ld a, $FF | ||||||
|     ldh [hRequiresLineClear], a |     ldh [hRequiresLineClear], a | ||||||
|     ld a, SFX_BELL |     ld a, SFX_LEVELLOCK | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|     jr .leveljinglemaybe |     jr .leveljinglemaybe | ||||||
| 
 | 
 | ||||||
|  | @ -257,7 +257,7 @@ LevelUp:: | ||||||
|     jr nz, .leveljinglemaybe |     jr nz, .leveljinglemaybe | ||||||
|     ld a, $FF |     ld a, $FF | ||||||
|     ldh [hRequiresLineClear], a |     ldh [hRequiresLineClear], a | ||||||
|     ld a, SFX_BELL |     ld a, SFX_LEVELLOCK | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
| 
 | 
 | ||||||
| .leveljinglemaybe | .leveljinglemaybe | ||||||
|  | @ -266,7 +266,7 @@ LevelUp:: | ||||||
|     ldh a, [hCLevel+1] |     ldh a, [hCLevel+1] | ||||||
|     cp a, b |     cp a, b | ||||||
|     jr z, .checkspeedup |     jr z, .checkspeedup | ||||||
|     ld a, SFX_LEVEL_UP |     ld a, SFX_LEVELUP | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
| 
 | 
 | ||||||
| .checkspeedup | .checkspeedup | ||||||
|  |  | ||||||
|  | @ -187,7 +187,6 @@ sfx_names = [ | ||||||
|     "sSFXLevelLock", |     "sSFXLevelLock", | ||||||
|     "sSFXLevelUp", |     "sSFXLevelUp", | ||||||
|     "sSFXRankUp", |     "sSFXRankUp", | ||||||
|     "sSFXIHS", |  | ||||||
|     "sSFXReadyGo", |     "sSFXReadyGo", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -185,7 +185,7 @@ IncreaseScore:: | ||||||
|     ; If it has, reset the score. |     ; If it has, reset the score. | ||||||
|     xor a, a |     xor a, a | ||||||
|     ldh [hScore], a |     ldh [hScore], a | ||||||
|     ld a, SFX_RANK_UP |     ld a, SFX_RANKUP | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|     ret |     ret | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										1440
									
								
								src/sfx.asm
								
								
								
								
							
							
						
						
									
										1440
									
								
								src/sfx.asm
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -41,10 +41,10 @@ hCurrentPieceY:: ds 1 | ||||||
| hCurrentPieceRotationState:: ds 1 | hCurrentPieceRotationState:: ds 1 | ||||||
| hHeldPiece:: ds 1 | hHeldPiece:: ds 1 | ||||||
| hHoldSpent:: ds 1 | hHoldSpent:: ds 1 | ||||||
| hSkipJingle: ds 1 |  | ||||||
| hMode: ds 1 | hMode: ds 1 | ||||||
| hModeCounter: ds 1 | hModeCounter: ds 1 | ||||||
| hPrePause: ds 1 | hPrePause: ds 1 | ||||||
|  | hRequestedJingle: ds 1 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| SECTION "Gameplay Functions", ROM0 | SECTION "Gameplay Functions", ROM0 | ||||||
|  | @ -158,7 +158,7 @@ leadyMode: | ||||||
|     cp a, LEADY_TIME |     cp a, LEADY_TIME | ||||||
|     jr nz, :+ |     jr nz, :+ | ||||||
|     call SFXKill |     call SFXKill | ||||||
|     ld a, SFX_READY_GO |     ld a, SFX_READYGO | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|     ldh a, [hModeCounter] |     ldh a, [hModeCounter] | ||||||
| :   dec a | :   dec a | ||||||
|  | @ -205,12 +205,13 @@ postGoMode: | ||||||
|     ; Fetch the next piece. |     ; Fetch the next piece. | ||||||
| prefetchedPieceMode: | 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 | ||||||
|  |     ldh [hRequestedJingle], a | ||||||
|     ld a, 5 |     ld a, 5 | ||||||
|     ldh [hCurrentPieceX], a |     ldh [hCurrentPieceX], a | ||||||
|     ld a, 3 |     ld a, 3 | ||||||
|     ldh [hCurrentPieceY], a |     ldh [hCurrentPieceY], a | ||||||
|     xor a, a |     xor a, a | ||||||
|     ldh [hSkipJingle], a |  | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
|     ldh [hHoldSpent], a |     ldh [hHoldSpent], a | ||||||
| 
 | 
 | ||||||
|  | @ -219,10 +220,14 @@ prefetchedPieceMode: | ||||||
| .checkIHS | .checkIHS | ||||||
|     ldh a, [hSelectState] |     ldh a, [hSelectState] | ||||||
|     cp a, 0 |     cp a, 0 | ||||||
|     jr z, .checkIRSA |     jr z, .loaddefaultjingle | ||||||
|     call DoHold |     call DoHold | ||||||
|     ; Holding does its own IRS check. |     jr .postjingle | ||||||
|     jr .checkJingle | 
 | ||||||
|  |     ; Enqueue the jingle. | ||||||
|  | .loaddefaultjingle | ||||||
|  |     ldh a, [hNextPiece] | ||||||
|  |     ldh [hRequestedJingle], a | ||||||
| 
 | 
 | ||||||
|     ; Check if IRS is requested. |     ; Check if IRS is requested. | ||||||
|     ; Apply the rotation if so. |     ; Apply the rotation if so. | ||||||
|  | @ -246,8 +251,12 @@ prefetchedPieceMode: | ||||||
| .cp1 | .cp1 | ||||||
|     ld a, 3 |     ld a, 3 | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
|  |     ldh a, [hNextPiece] | ||||||
|  |     ld b, a | ||||||
|     ld a, SFX_IRS |     ld a, SFX_IRS | ||||||
|     call SFXEnqueue |     or a, b | ||||||
|  |     ldh [hRequestedJingle], a | ||||||
|  |     jr .postjingle | ||||||
| 
 | 
 | ||||||
| .checkIRSB | .checkIRSB | ||||||
|     ld a, [wSwapABState] |     ld a, [wSwapABState] | ||||||
|  | @ -256,33 +265,27 @@ prefetchedPieceMode: | ||||||
| .lda2 | .lda2 | ||||||
|     ldh a, [hAState] |     ldh a, [hAState] | ||||||
|     cp a, 0 |     cp a, 0 | ||||||
|     jr z, .checkJingle |     jr z, .postjingle | ||||||
|     ld a, $FF |     ld a, $FF | ||||||
|     ldh [hAState], a |     ldh [hAState], a | ||||||
|     jr .cp2 |     jr .cp2 | ||||||
| .ldb2 | .ldb2 | ||||||
|     ldh a, [hBState] |     ldh a, [hBState] | ||||||
|     cp a, 0 |     cp a, 0 | ||||||
|     jr z, .checkJingle |     jr z, .postjingle | ||||||
|     ld a, $FF |     ld a, $FF | ||||||
|     ldh [hBState], a |     ldh [hBState], a | ||||||
| .cp2 | .cp2 | ||||||
|     ld a, 1 |     ld a, 1 | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
|     ld a, SFX_IRS |  | ||||||
|     call SFXEnqueue |  | ||||||
| 
 |  | ||||||
| .checkJingle |  | ||||||
|     ldh a, [hSkipJingle] |  | ||||||
|     cp a, 0 |  | ||||||
|     jr nz, .skipJingle |  | ||||||
| .playNextJingle |  | ||||||
|     ldh a, [hCurrentGravityPerTick] |  | ||||||
|     cp a, 1 |  | ||||||
|     jr nz, .skipJingle |  | ||||||
|     ldh a, [hNextPiece] |     ldh a, [hNextPiece] | ||||||
|     call SFXEnqueue |     ld b, a | ||||||
| .skipJingle |     ld a, SFX_IRS | ||||||
|  |     or a, b | ||||||
|  |     ldh [hRequestedJingle], a | ||||||
|  |     jr .postjingle | ||||||
|  | 
 | ||||||
|  | .postjingle | ||||||
|     ld a, MODE_SPAWN_PIECE |     ld a, MODE_SPAWN_PIECE | ||||||
|     ldh [hMode], a |     ldh [hMode], a | ||||||
|     ; State falls through to the next. |     ; State falls through to the next. | ||||||
|  | @ -299,6 +302,15 @@ spawnPieceMode: | ||||||
| :   ld a, MODE_PIECE_IN_MOTION | :   ld a, MODE_PIECE_IN_MOTION | ||||||
|     ldh [hMode], a |     ldh [hMode], a | ||||||
| 
 | 
 | ||||||
|  |     ; Play the next jingle... maybe! | ||||||
|  |     ldh a, [hHoldSpent] | ||||||
|  |     cp a, $FF | ||||||
|  |     jr z, pieceInMotionMode | ||||||
|  |     ldh a, [hRequestedJingle] | ||||||
|  |     cp a, $FF | ||||||
|  |     jr z, pieceInMotionMode | ||||||
|  |     call SFXEnqueue | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     ; This mode lasts for as long as the piece is in motion. |     ; This mode lasts for as long as the piece is in motion. | ||||||
|     ; Field will let us know when it has locked in place. |     ; Field will let us know when it has locked in place. | ||||||
|  | @ -327,8 +339,6 @@ pieceInMotionMode: | ||||||
|     ldh [hCurrentPieceX], a |     ldh [hCurrentPieceX], a | ||||||
|     ld a, 3 |     ld a, 3 | ||||||
|     ldh [hCurrentPieceY], a |     ldh [hCurrentPieceY], a | ||||||
|     xor a, a |  | ||||||
|     ldh [hSkipJingle], a |  | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
|     call DoHold |     call DoHold | ||||||
|     ld a, MODE_SPAWN_PIECE |     ld a, MODE_SPAWN_PIECE | ||||||
|  | @ -538,8 +548,6 @@ DoHold: | ||||||
|     ; Mark hold as spent. |     ; Mark hold as spent. | ||||||
|     ld a, $FF |     ld a, $FF | ||||||
|     ldh [hHoldSpent], a |     ldh [hHoldSpent], a | ||||||
|     ld a, SFX_IHS |  | ||||||
|     call SFXEnqueue |  | ||||||
| 
 | 
 | ||||||
|     ; Check if IRS is requested. |     ; Check if IRS is requested. | ||||||
|     ; Apply the rotation if so. |     ; Apply the rotation if so. | ||||||
|  | @ -563,7 +571,8 @@ DoHold: | ||||||
| .cp3 | .cp3 | ||||||
|     ld a, 3 |     ld a, 3 | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
|     ld a, SFX_IRS |     call SFXKill | ||||||
|  |     ld a, SFX_IRS | SFX_IHS | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|     jr .doHoldOperation |     jr .doHoldOperation | ||||||
| 
 | 
 | ||||||
|  | @ -587,11 +596,15 @@ DoHold: | ||||||
| .cp4 | .cp4 | ||||||
|     ld a, 1 |     ld a, 1 | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
|     ld a, SFX_IRS |     call SFXKill | ||||||
|  |     ld a, SFX_IRS | SFX_IHS | ||||||
|     call SFXEnqueue |     call SFXEnqueue | ||||||
|     jr .doHoldOperation |     jr .doHoldOperation | ||||||
| 
 | 
 | ||||||
| .noRotation | .noRotation | ||||||
|  |     call SFXKill | ||||||
|  |     ld a, SFX_IHS | ||||||
|  |     call SFXEnqueue | ||||||
|     ld a, 0 |     ld a, 0 | ||||||
|     ldh [hCurrentPieceRotationState], a |     ldh [hCurrentPieceRotationState], a | ||||||
| 
 | 
 | ||||||
|  | @ -602,8 +615,6 @@ DoHold: | ||||||
|     ldh [hHeldPiece], a |     ldh [hHeldPiece], a | ||||||
|     ld a, b |     ld a, b | ||||||
|     ldh [hCurrentPiece], a |     ldh [hCurrentPiece], a | ||||||
|     ld a, $FF |  | ||||||
|     ldh [hSkipJingle], a |  | ||||||
|     ret |     ret | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -114,6 +114,9 @@ SwitchToTitle:: | ||||||
|     ; GBC init |     ; GBC init | ||||||
|     call GBCTitleInit |     call GBCTitleInit | ||||||
| 
 | 
 | ||||||
|  |     ; Make sure the speed curve is aimed at the right place. | ||||||
|  |     call InitSpeedCurve | ||||||
|  | 
 | ||||||
|     ; Install the event loop handlers. |     ; Install the event loop handlers. | ||||||
|     ld a, 0 |     ld a, 0 | ||||||
|     ldh [hGameState], a |     ldh [hGameState], a | ||||||
|  | @ -261,10 +264,12 @@ DecrementOption: | ||||||
|     dec a |     dec a | ||||||
|     ld [wSpeedCurveState], a |     ld [wSpeedCurveState], a | ||||||
|     ld [rSpeedCurveState], a |     ld [rSpeedCurveState], a | ||||||
|  |     call InitSpeedCurve | ||||||
|     jp EventLoopPostHandler |     jp EventLoopPostHandler | ||||||
| :   ld a, SCURVE_COUNT-1 | :   ld a, SCURVE_COUNT-1 | ||||||
|     ld [wSpeedCurveState], a |     ld [wSpeedCurveState], a | ||||||
|     ld [rSpeedCurveState], a |     ld [rSpeedCurveState], a | ||||||
|  |     call InitSpeedCurve | ||||||
|     jp EventLoopPostHandler |     jp EventLoopPostHandler | ||||||
| 
 | 
 | ||||||
| .opt5 | .opt5 | ||||||
|  | @ -372,10 +377,12 @@ IncrementOption: | ||||||
|     inc a |     inc a | ||||||
|     ld [wSpeedCurveState], a |     ld [wSpeedCurveState], a | ||||||
|     ld [rSpeedCurveState], a |     ld [rSpeedCurveState], a | ||||||
|  |     call InitSpeedCurve | ||||||
|     jp EventLoopPostHandler |     jp EventLoopPostHandler | ||||||
| :   xor a, a | :   xor a, a | ||||||
|     ld [wSpeedCurveState], a |     ld [wSpeedCurveState], a | ||||||
|     ld [rSpeedCurveState], a |     ld [rSpeedCurveState], a | ||||||
|  |     call InitSpeedCurve | ||||||
|     jp EventLoopPostHandler |     jp EventLoopPostHandler | ||||||
| 
 | 
 | ||||||
| .opt5 | .opt5 | ||||||
|  | @ -411,30 +418,96 @@ IncrementLevel: | ||||||
|     ldh [hStartSpeed+1], a |     ldh [hStartSpeed+1], a | ||||||
|     jr CheckLevelRange |     jr CheckLevelRange | ||||||
| 
 | 
 | ||||||
|  | InitSpeedCurve: | ||||||
|  |     ld a, [wSpeedCurveState] | ||||||
|  |     cp a, 0 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld hl, sSpeedCurve | ||||||
|  |     jr .set | ||||||
|  | :   cp a, 1 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld hl, sTGM1SpeedCurve | ||||||
|  |     jr .set | ||||||
|  | :   cp a, 2 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld hl, sDEATSpeedCurve | ||||||
|  |     jr .set | ||||||
|  | :   ld hl, sSHIRSpeedCurve | ||||||
|  | 
 | ||||||
|  | .set | ||||||
|  |     ld a, l | ||||||
|  |     ldh [hStartSpeed], a | ||||||
|  |     ld a, h | ||||||
|  |     ldh [hStartSpeed+1], a | ||||||
|  |     ret | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | GetEnd: | ||||||
|  |     ld a, [wSpeedCurveState] | ||||||
|  |     cp a, 0 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld bc, sSpeedCurveEnd | ||||||
|  |     ret | ||||||
|  | :   cp a, 1 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld bc, sTGM1SpeedCurveEnd | ||||||
|  |     ret | ||||||
|  | :   cp a, 2 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld bc, sDEATSpeedCurveEnd | ||||||
|  |     ret | ||||||
|  | :   ld bc, sSHIRSpeedCurveEnd | ||||||
|  |     ret | ||||||
|  | 
 | ||||||
|  | GetStart: | ||||||
|  |     ld a, [wSpeedCurveState] | ||||||
|  |     cp a, 0 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld hl, sSpeedCurve | ||||||
|  |     ret | ||||||
|  | :   cp a, 1 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld hl, sTGM1SpeedCurve | ||||||
|  |     ret | ||||||
|  | :   cp a, 2 | ||||||
|  |     jr nz, :+ | ||||||
|  |     ld hl, sDEATSpeedCurve | ||||||
|  |     ret | ||||||
|  | :   ld hl, sSHIRSpeedCurve | ||||||
|  |     ret | ||||||
|  | 
 | ||||||
| CheckLevelRange: | CheckLevelRange: | ||||||
|     ; At end? |     ; At end? | ||||||
|     ld bc, sSpeedCurveEnd |     call GetEnd | ||||||
|     ldh a, [hStartSpeed] |     ldh a, [hStartSpeed] | ||||||
|     cp a, c |     cp a, c | ||||||
|     jr nz, .notatend |     jr nz, .notatend | ||||||
|     ldh a, [hStartSpeed+1] |     ldh a, [hStartSpeed+1] | ||||||
|     cp a, b |     cp a, b | ||||||
|     jr nz, .notatend |     jr nz, .notatend | ||||||
|     ld hl, sSpeedCurve |     call GetStart | ||||||
|     ld a, l |     ld a, l | ||||||
|     ldh [hStartSpeed], a |     ldh [hStartSpeed], a | ||||||
|     ld a, h |     ld a, h | ||||||
|     ldh [hStartSpeed+1], a |     ldh [hStartSpeed+1], a | ||||||
| 
 | 
 | ||||||
| .notatend | .notatend | ||||||
|     ld bc, sSpeedCurve-12 |     ld de, -12 | ||||||
|  | 
 | ||||||
|  |     call GetStart | ||||||
|  |     add hl, de | ||||||
|     ldh a, [hStartSpeed] |     ldh a, [hStartSpeed] | ||||||
|     cp a, c |     cp a, l | ||||||
|     jr nz, .notatstart |     jr nz, .notatstart | ||||||
|     ldh a, [hStartSpeed+1] |     ldh a, [hStartSpeed+1] | ||||||
|     cp a, b |     cp a, h | ||||||
|     jr nz, .notatstart |     jr nz, .notatstart | ||||||
|     ld hl, sSpeedCurveEnd-12 | 
 | ||||||
|  |     call GetEnd | ||||||
|  |     ld h, b | ||||||
|  |     ld l, c | ||||||
|  |     add hl, de | ||||||
|     ld a, l |     ld a, l | ||||||
|     ldh [hStartSpeed], a |     ldh [hStartSpeed], a | ||||||
|     ld a, h |     ld a, h | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue