Level selection
This commit is contained in:
		
							parent
							
								
									8eba0dd290
								
							
						
					
					
						commit
						d1468a8635
					
				| 
						 | 
					@ -72,167 +72,168 @@ 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sSpeedCurve::         ; Speed curve of the game.
 | 
					sSpeedCurve::           ; Speed curve of the game.
 | 
				
			||||||
    dw $0000          ; Level 0000
 | 
					    dw $0000, 0, $0100  ; Level 0000
 | 
				
			||||||
    db 1, 16          ; 1G every 16 frames
 | 
					    db 1, 16            ; 1G every 16 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0015          ; Level 0015
 | 
					    dw $0015, 15, $0100 ; Level 0015
 | 
				
			||||||
    db 1, 15          ; 1G every 15 frames
 | 
					    db 1, 15            ; 1G every 15 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0030          ; Level 0030
 | 
					    dw $0030, 30, $0100 ; Level 0030
 | 
				
			||||||
    db 1, 14          ; 1G every 14 frames
 | 
					    db 1, 14            ; 1G every 14 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0040          ; Level 0040
 | 
					    dw $0040, 40, $0100 ; Level 0040
 | 
				
			||||||
    db 1, 13          ; 1G every 13 frames
 | 
					    db 1, 13            ; 1G every 13 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0050          ; Level 0050
 | 
					    dw $0050, 50, $0100 ; Level 0050
 | 
				
			||||||
    db 1, 12          ; 1G every 12 frames
 | 
					    db 1, 12            ; 1G every 12 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0060          ; Level 0060
 | 
					    dw $0060, 60, $0100 ; Level 0060
 | 
				
			||||||
    db 1, 11          ; 1G every 11 frames
 | 
					    db 1, 11            ; 1G every 11 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0070          ; Level 0070
 | 
					    dw $0070, 70, $0100 ; Level 0070
 | 
				
			||||||
    db 1, 10          ; 1G every 10 frames
 | 
					    db 1, 10            ; 1G every 10 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0080          ; Level 0080
 | 
					    dw $0080, 80, $0100 ; Level 0080
 | 
				
			||||||
    db 1, 9           ; 1G every 9 frames
 | 
					    db 1, 9             ; 1G every 9 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0090          ; Level 0090
 | 
					    dw $0090, 90, $0100 ; Level 0090
 | 
				
			||||||
    db 1, 8           ; 1G every 8 frames
 | 
					    db 1, 8             ; 1G every 8 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40   ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0100          ; Level 0100
 | 
					    dw $0100, 100, $0200 ; Level 0100
 | 
				
			||||||
    db 1, 7           ; 1G every 7 frames
 | 
					    db 1, 7              ; 1G every 7 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0150          ; Level 0150
 | 
					    dw $0150, 150, $0200 ; Level 0150
 | 
				
			||||||
    db 1, 6           ; 1G every 6 frames
 | 
					    db 1, 6              ; 1G every 6 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0200          ; Level 0200
 | 
					    dw $0200, 200, $0300 ; Level 0200
 | 
				
			||||||
    db 1, 5           ; 1G every 5 frames
 | 
					    db 1, 5              ; 1G every 5 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0225          ; Level 0225
 | 
					    dw $0225, 225, $0300 ; Level 0225
 | 
				
			||||||
    db 1, 4           ; 1G every 4 frames
 | 
					    db 1, 4              ; 1G every 4 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0250          ; Level 0250
 | 
					    dw $0250, 250, $0300 ; Level 0250
 | 
				
			||||||
    db 1, 3           ; 1G every 3 frames
 | 
					    db 1, 3              ; 1G every 3 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0275          ; Level 0275
 | 
					    dw $0275, 275, $0300 ; Level 0275
 | 
				
			||||||
    db 1, 2           ; 1G every 2 frames
 | 
					    db 1, 2              ; 1G every 2 frames
 | 
				
			||||||
    db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 40    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0300          ; Level 0300
 | 
					    dw $0300, 300, $0400 ; Level 0300
 | 
				
			||||||
    db 1, 1           ; 1G
 | 
					    db 1, 1              ; 1G
 | 
				
			||||||
    db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 32    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0350          ; Level 0350
 | 
					    dw $0350, 350, $0350 ; Level 0350
 | 
				
			||||||
    db 2, 1           ; 2G
 | 
					    db 2, 1              ; 2G
 | 
				
			||||||
    db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 32    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0400          ; Level 0400
 | 
					    dw $0400, 400, $0400 ; Level 0400
 | 
				
			||||||
    db 3, 1           ; 3G
 | 
					    db 3, 1              ; 3G
 | 
				
			||||||
    db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 32    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0450          ; Level 0450
 | 
					    dw $0450, 450, $0500 ; Level 0450
 | 
				
			||||||
    db 4, 1           ; 4G
 | 
					    db 4, 1              ; 4G
 | 
				
			||||||
    db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 32    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0475          ; Level 0475
 | 
					    dw $0475, 475, $0500 ; Level 0475
 | 
				
			||||||
    db 5, 1           ; 5G
 | 
					    db 5, 1              ; 5G
 | 
				
			||||||
    db 25, 14, 30, 32 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 32    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0500          ; Level 0500
 | 
					    dw $0500, 500, $0600 ; Level 0500
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1             ; 20G
 | 
				
			||||||
    db 25, 14, 30, 24 ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 14, 30, 24    ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0600          ; Level 0600
 | 
					    dw $0600, 600, $0700 ; Level 0600
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1             ; 20G
 | 
				
			||||||
    db 25, 8, 30, 24  ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 25, 8, 30, 24     ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0700          ; Level 0700
 | 
					    dw $0700, 700, $0800 ; Level 0700
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1             ; 20G
 | 
				
			||||||
    db 20, 8, 30, 24  ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 20, 8, 30, 24     ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $0900          ; Level 0900
 | 
					    dw $0900, 900, $0900 ; Level 0900
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1             ; 20G
 | 
				
			||||||
    db 16, 6, 25, 16  ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 16, 6, 25, 16     ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1100          ; Level 1100
 | 
					    dw $1100, 1100, $1200 ; Level 1100
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 12, 6, 25, 16  ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 12, 6, 25, 16      ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1200          ; Level 1200
 | 
					    dw $1200, 1200, $1300 ; Level 1200
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 12, 6, 25, 8   ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 12, 6, 25, 8       ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1300          ; Level 1300
 | 
					    dw $1300, 1300, $1400 ; Level 1300
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 10, 6, 20, 7   ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 10, 6, 20, 7       ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1400          ; Level 1400
 | 
					    dw $1400, 1400, $1500 ; Level 1400
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 10, 6, 18, 6   ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 10, 6, 18, 6       ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1500          ; Level 1500
 | 
					    dw $1500, 1500, $1600 ; Level 1500
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 8, 4, 16, 5    ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 8, 4, 16, 5        ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1600          ; Level 1600
 | 
					    dw $1600, 1600, $1700 ; Level 1600
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 8, 4, 14, 4    ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 8, 4, 14, 4        ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1700          ; Level 1700
 | 
					    dw $1700, 1700, $1800 ; Level 1700
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 6, 4, 12, 3    ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 6, 4, 12, 3        ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1800          ; Level 1800
 | 
					    dw $1800, 1800, $1900 ; Level 1800
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 6, 4, 10, 3    ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 6, 4, 10, 3        ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $1900          ; Level 1900
 | 
					    dw $1900, 1900, $2000 ; Level 1900
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 4, 4, 8, 3     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 4, 4, 8, 3         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $2000          ; Level 2000
 | 
					    dw $2000, 2000, $2100 ; Level 2000
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 4, 3, 8, 3     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 4, 3, 8, 3         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $2500          ; Level 2500
 | 
					    dw $2500, 2500, $2600 ; Level 2500
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 2, 1, 8, 2     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 2, 1, 8, 2         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $3000          ; Level 3000
 | 
					    dw $3000, 3000, $3100 ; Level 3000
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 1, 1, 8, 1     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 1, 1, 8, 1         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $4000          ; Level 4000
 | 
					    dw $4000, 4000, $4100 ; Level 4000
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 1, 1, 6, 1     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 1, 1, 6, 1         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $5000          ; Level 5000
 | 
					    dw $5000, 5000, $5100 ; Level 5000
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 1, 1, 4, 1     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 1, 1, 4, 1         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $6666          ; Level 6666
 | 
					    dw $6666, 6666, $6700 ; Level 6666
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 1, 1, 2, 1     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 1, 1, 2, 1         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dw $9999          ; Level 9999
 | 
					    dw $9999, 9999, $9999 ; Level 9999
 | 
				
			||||||
    db 20, 1          ; 20G
 | 
					    db 20, 1              ; 20G
 | 
				
			||||||
    db 1, 1, 1, 1     ; ARE, DAS, LOCK, LINECLEAR
 | 
					    db 1, 1, 1, 1         ; ARE, DAS, LOCK, LINECLEAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sSpeedCurveEnd::
 | 
				
			||||||
    dw $FFFF          ; End.
 | 
					    dw $FFFF          ; End.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,6 +93,7 @@ DEF PALETTE_LIGHTER_2   EQU %01000000
 | 
				
			||||||
DEF PALETTE_LIGHTER_3   EQU %00000000
 | 
					DEF PALETTE_LIGHTER_3   EQU %00000000
 | 
				
			||||||
DEF TITLE_A             EQU $99ED
 | 
					DEF TITLE_A             EQU $99ED
 | 
				
			||||||
DEF TITLE_B             EQU $99EF
 | 
					DEF TITLE_B             EQU $99EF
 | 
				
			||||||
 | 
					DEF TITLE_LEVEL         EQU $998C
 | 
				
			||||||
DEF FIELD_TOP_LEFT      EQU $9800+1
 | 
					DEF FIELD_TOP_LEFT      EQU $9800+1
 | 
				
			||||||
DEF TILE_FIELD_EMPTY    EQU 4
 | 
					DEF TILE_FIELD_EMPTY    EQU 4
 | 
				
			||||||
DEF TILE_PIECE_0        EQU 10
 | 
					DEF TILE_PIECE_0        EQU 10
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,7 @@ hCurrentGravityPerTick:: ds 1
 | 
				
			||||||
hCurrentFramesPerGravityTick:: ds 1
 | 
					hCurrentFramesPerGravityTick:: ds 1
 | 
				
			||||||
hNextSpeedUp:: ds 2
 | 
					hNextSpeedUp:: ds 2
 | 
				
			||||||
hSpeedCurvePtr:: ds 2
 | 
					hSpeedCurvePtr:: ds 2
 | 
				
			||||||
 | 
					hStartSpeed:: ds 2
 | 
				
			||||||
hRequiresLineClear:: ds 1
 | 
					hRequiresLineClear:: ds 1
 | 
				
			||||||
hLevel:: ds 2
 | 
					hLevel:: ds 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,12 +44,58 @@ LevelInit::
 | 
				
			||||||
    ld [hl], a
 | 
					    ld [hl], a
 | 
				
			||||||
    ldh [hRequiresLineClear], a
 | 
					    ldh [hRequiresLineClear], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ld hl, sSpeedCurve+2
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; CLevel
 | 
				
			||||||
 | 
					    ld a, [hl+]
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wCLevel+3], a
 | 
				
			||||||
 | 
					    ld a, b
 | 
				
			||||||
 | 
					    swap a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wCLevel+2], a
 | 
				
			||||||
 | 
					    ld a, [hl+]
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wCLevel+1], a
 | 
				
			||||||
 | 
					    ld a, b
 | 
				
			||||||
 | 
					    swap a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wCLevel], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ld a, l
 | 
					    ld a, l
 | 
				
			||||||
    ldh [hSpeedCurvePtr], a
 | 
					    ldh [hSpeedCurvePtr], a
 | 
				
			||||||
    ld a, h
 | 
					    ld a, h
 | 
				
			||||||
    ldh [hSpeedCurvePtr+1], a
 | 
					    ldh [hSpeedCurvePtr+1], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; Binary level.
 | 
				
			||||||
 | 
					    ld a, [hl+]
 | 
				
			||||||
 | 
					    ldh [hLevel], a
 | 
				
			||||||
 | 
					    ld a, [hl+]
 | 
				
			||||||
 | 
					    ldh [hLevel+1], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; NLevel
 | 
				
			||||||
 | 
					    ld a, [hl+]
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wNLevel+3], a
 | 
				
			||||||
 | 
					    ld a, b
 | 
				
			||||||
 | 
					    swap a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wNLevel+2], a
 | 
				
			||||||
 | 
					    ld a, [hl+]
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wNLevel+1], a
 | 
				
			||||||
 | 
					    ld a, b
 | 
				
			||||||
 | 
					    swap a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld [wNLevel], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    call DoSpeedUp
 | 
					    call DoSpeedUp
 | 
				
			||||||
    ret
 | 
					    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -266,6 +313,12 @@ DoSpeedUp:
 | 
				
			||||||
    ldh a, [hSpeedCurvePtr+1]
 | 
					    ldh a, [hSpeedCurvePtr+1]
 | 
				
			||||||
    ld h, a
 | 
					    ld h, a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; There's 4 bytes we don't care about.
 | 
				
			||||||
 | 
					    inc hl
 | 
				
			||||||
 | 
					    inc hl
 | 
				
			||||||
 | 
					    inc hl
 | 
				
			||||||
 | 
					    inc hl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Get all the new data.
 | 
					    ; Get all the new data.
 | 
				
			||||||
    ld a, [hl+]
 | 
					    ld a, [hl+]
 | 
				
			||||||
    ldh [hCurrentGravityPerTick], a
 | 
					    ldh [hCurrentGravityPerTick], a
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +43,11 @@ Main::
 | 
				
			||||||
    ; Zero out the ram where needed.
 | 
					    ; Zero out the ram where needed.
 | 
				
			||||||
    xor a, a
 | 
					    xor a, a
 | 
				
			||||||
    ldh [hSwapAB], a
 | 
					    ldh [hSwapAB], a
 | 
				
			||||||
 | 
					    ld hl, sSpeedCurve
 | 
				
			||||||
 | 
					    ld a, l
 | 
				
			||||||
 | 
					    ldh [hStartSpeed], a
 | 
				
			||||||
 | 
					    ld a, h
 | 
				
			||||||
 | 
					    ldh [hStartSpeed+1], a
 | 
				
			||||||
    call TimeInit
 | 
					    call TimeInit
 | 
				
			||||||
    call IntrInit
 | 
					    call IntrInit
 | 
				
			||||||
    call InputInit
 | 
					    call InputInit
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,18 +75,134 @@ TitleEventLoopHandler::
 | 
				
			||||||
:   ldh a, [hUpState]
 | 
					:   ldh a, [hUpState]
 | 
				
			||||||
    cp a, 1
 | 
					    cp a, 1
 | 
				
			||||||
    jr nz, :+
 | 
					    jr nz, :+
 | 
				
			||||||
    ; TODO
 | 
					    jp IncrementLevel
 | 
				
			||||||
    jp EventLoopPostHandler
 | 
					    jp EventLoopPostHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Start level down?
 | 
					    ; Start level down?
 | 
				
			||||||
:   ldh a, [hDownState]
 | 
					:   ldh a, [hDownState]
 | 
				
			||||||
    cp a, 1
 | 
					    cp a, 1
 | 
				
			||||||
    jr nz, :+
 | 
					    jr nz, :+
 | 
				
			||||||
    ; TODO
 | 
					    jp DecrementLevel
 | 
				
			||||||
:    jp EventLoopPostHandler
 | 
					:   jp EventLoopPostHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DecrementLevel:
 | 
				
			||||||
 | 
					    ; Decrement
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					    ld bc, -12
 | 
				
			||||||
 | 
					    add hl, bc
 | 
				
			||||||
 | 
					    ld a, l
 | 
				
			||||||
 | 
					    ldh [hStartSpeed], a
 | 
				
			||||||
 | 
					    ld a, h
 | 
				
			||||||
 | 
					    ldh [hStartSpeed+1], a
 | 
				
			||||||
 | 
					    jp CheckLevelRange
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IncrementLevel:
 | 
				
			||||||
 | 
					    ; Increment
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					    ld bc, 12
 | 
				
			||||||
 | 
					    add hl, bc
 | 
				
			||||||
 | 
					    ld a, l
 | 
				
			||||||
 | 
					    ldh [hStartSpeed], a
 | 
				
			||||||
 | 
					    ld a, h
 | 
				
			||||||
 | 
					    ldh [hStartSpeed+1], a
 | 
				
			||||||
 | 
					    jp CheckLevelRange
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CheckLevelRange:
 | 
				
			||||||
 | 
					    ; At end?
 | 
				
			||||||
 | 
					    ld bc, sSpeedCurveEnd
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    cp a, c
 | 
				
			||||||
 | 
					    jr nz, .notatend
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    cp a, b
 | 
				
			||||||
 | 
					    jr nz, .notatend
 | 
				
			||||||
 | 
					    ld hl, sSpeedCurve
 | 
				
			||||||
 | 
					    ld a, l
 | 
				
			||||||
 | 
					    ldh [hStartSpeed], a
 | 
				
			||||||
 | 
					    ld a, h
 | 
				
			||||||
 | 
					    ldh [hStartSpeed+1], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.notatend
 | 
				
			||||||
 | 
					    ld bc, sSpeedCurve-12
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    cp a, c
 | 
				
			||||||
 | 
					    jr nz, .notatstart
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    cp a, b
 | 
				
			||||||
 | 
					    jr nz, .notatstart
 | 
				
			||||||
 | 
					    ld hl, sSpeedCurveEnd-12
 | 
				
			||||||
 | 
					    ld a, l
 | 
				
			||||||
 | 
					    ldh [hStartSpeed], a
 | 
				
			||||||
 | 
					    ld a, h
 | 
				
			||||||
 | 
					    ldh [hStartSpeed+1], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.notatstart
 | 
				
			||||||
 | 
					    jp EventLoopPostHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TitleVBlankHandler::
 | 
					TitleVBlankHandler::
 | 
				
			||||||
 | 
					    ; Draw level.
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					    ld a, [hl]
 | 
				
			||||||
 | 
					    swap a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    ld a, TILE_0
 | 
				
			||||||
 | 
					    add a, b
 | 
				
			||||||
 | 
					    ld hl, TITLE_LEVEL+2
 | 
				
			||||||
 | 
					    ld [hl], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					    ld a, [hl]
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    ld a, TILE_0
 | 
				
			||||||
 | 
					    add a, b
 | 
				
			||||||
 | 
					    ld hl, TITLE_LEVEL+3
 | 
				
			||||||
 | 
					    ld [hl], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					    inc hl
 | 
				
			||||||
 | 
					    ld a, [hl]
 | 
				
			||||||
 | 
					    swap a
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    ld a, TILE_0
 | 
				
			||||||
 | 
					    add a, b
 | 
				
			||||||
 | 
					    ld hl, TITLE_LEVEL+0
 | 
				
			||||||
 | 
					    ld [hl], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed]
 | 
				
			||||||
 | 
					    ld l, a
 | 
				
			||||||
 | 
					    ldh a, [hStartSpeed+1]
 | 
				
			||||||
 | 
					    ld h, a
 | 
				
			||||||
 | 
					    inc hl
 | 
				
			||||||
 | 
					    ld a, [hl]
 | 
				
			||||||
 | 
					    and a, $0F
 | 
				
			||||||
 | 
					    ld b, a
 | 
				
			||||||
 | 
					    ld a, TILE_0
 | 
				
			||||||
 | 
					    add a, b
 | 
				
			||||||
 | 
					    ld hl, TITLE_LEVEL+1
 | 
				
			||||||
 | 
					    ld [hl], a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ; Draw A/B
 | 
				
			||||||
    ldh a, [hSwapAB]
 | 
					    ldh a, [hSwapAB]
 | 
				
			||||||
    cp a, 0
 | 
					    cp a, 0
 | 
				
			||||||
    jr nz, :+
 | 
					    jr nz, :+
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
#Emulicious settings file
 | 
					#Emulicious settings file
 | 
				
			||||||
#Sat Oct 21 15:24:27 CEST 2023
 | 
					#Sat Oct 21 16:30:35 CEST 2023
 | 
				
			||||||
WindowProfilerWindowOpen=false
 | 
					WindowProfilerWindowOpen=false
 | 
				
			||||||
WindowEventViewerWindowHeight=1416
 | 
					WindowEventViewerWindowHeight=1416
 | 
				
			||||||
WindowEventViewerWindowDivider=876
 | 
					WindowEventViewerWindowDivider=876
 | 
				
			||||||
| 
						 | 
					@ -78,7 +78,7 @@ InterruptBreakpointEnabled=false
 | 
				
			||||||
OutlineWidth=550
 | 
					OutlineWidth=550
 | 
				
			||||||
DebuggerEventFiltersGameBoy=
 | 
					DebuggerEventFiltersGameBoy=
 | 
				
			||||||
GameBoyErrorBreakpointSuspend9=true
 | 
					GameBoyErrorBreakpointSuspend9=true
 | 
				
			||||||
WindowMemoryEditorOpen=false
 | 
					WindowMemoryEditorOpen=true
 | 
				
			||||||
GameBoyErrorBreakpointSuspend8=true
 | 
					GameBoyErrorBreakpointSuspend8=true
 | 
				
			||||||
GameBoyErrorBreakpointSuspend7=true
 | 
					GameBoyErrorBreakpointSuspend7=true
 | 
				
			||||||
WindowPaletteViewerY=619
 | 
					WindowPaletteViewerY=619
 | 
				
			||||||
| 
						 | 
					@ -105,7 +105,7 @@ Gamepad1Key30=-1
 | 
				
			||||||
BankSwapAtPCBreakpointEnabled=false
 | 
					BankSwapAtPCBreakpointEnabled=false
 | 
				
			||||||
DebuggerMemorySelectedTab=HRAM
 | 
					DebuggerMemorySelectedTab=HRAM
 | 
				
			||||||
WindowVideoViewerOpen=true
 | 
					WindowVideoViewerOpen=true
 | 
				
			||||||
WindowMemoryEditorTabVisibleRect=0,6096,583,384
 | 
					WindowMemoryEditorTabVisibleRect=86,64,625,383
 | 
				
			||||||
Gamepad1Key29=-1
 | 
					Gamepad1Key29=-1
 | 
				
			||||||
Gamepad1Key28=-1
 | 
					Gamepad1Key28=-1
 | 
				
			||||||
Gamepad1Key27=-1
 | 
					Gamepad1Key27=-1
 | 
				
			||||||
| 
						 | 
					@ -142,7 +142,7 @@ Gamepad1Key13=-1
 | 
				
			||||||
Gamepad1Key12=-1
 | 
					Gamepad1Key12=-1
 | 
				
			||||||
Gamepad1Key11=-1
 | 
					Gamepad1Key11=-1
 | 
				
			||||||
Gamepad1Key10=-1
 | 
					Gamepad1Key10=-1
 | 
				
			||||||
WindowMemoryEditorSelectedAddress=6144
 | 
					WindowMemoryEditorSelectedAddress=68
 | 
				
			||||||
WindowMemoryEditorWidth=665
 | 
					WindowMemoryEditorWidth=665
 | 
				
			||||||
GameBoyErrorBreakpointCondition9=
 | 
					GameBoyErrorBreakpointCondition9=
 | 
				
			||||||
GameBoyErrorBreakpointCondition8=
 | 
					GameBoyErrorBreakpointCondition8=
 | 
				
			||||||
| 
						 | 
					@ -161,7 +161,7 @@ Gamepad0Key35=-1
 | 
				
			||||||
Gamepad0Key34=-1
 | 
					Gamepad0Key34=-1
 | 
				
			||||||
Gamepad0Key33=-1
 | 
					Gamepad0Key33=-1
 | 
				
			||||||
Gamepad0Key32=-1
 | 
					Gamepad0Key32=-1
 | 
				
			||||||
WindowMemoryEditorSelectedTab=VRAM
 | 
					WindowMemoryEditorSelectedTab=ROM
 | 
				
			||||||
Gamepad0Key31=-1
 | 
					Gamepad0Key31=-1
 | 
				
			||||||
Gamepad0Key30=-1
 | 
					Gamepad0Key30=-1
 | 
				
			||||||
SMSGamepadAThreshold=50
 | 
					SMSGamepadAThreshold=50
 | 
				
			||||||
| 
						 | 
					@ -182,10 +182,10 @@ Gamepad0Key21=-1
 | 
				
			||||||
WindowDebuggerWidth=2576
 | 
					WindowDebuggerWidth=2576
 | 
				
			||||||
Gamepad0Key20=-1
 | 
					Gamepad0Key20=-1
 | 
				
			||||||
DebuggerSouthPanelSelectedTab=1
 | 
					DebuggerSouthPanelSelectedTab=1
 | 
				
			||||||
WindowEmuliciousWidth=816
 | 
					WindowEmuliciousWidth=1096
 | 
				
			||||||
WindowVideoViewerWidth=980
 | 
					WindowVideoViewerWidth=980
 | 
				
			||||||
WindowMemoryEditorY=1009
 | 
					WindowMemoryEditorY=1374
 | 
				
			||||||
WindowMemoryEditorX=2715
 | 
					WindowMemoryEditorX=799
 | 
				
			||||||
Gamepad0Key19=-1
 | 
					Gamepad0Key19=-1
 | 
				
			||||||
Gamepad0Key18=-1
 | 
					Gamepad0Key18=-1
 | 
				
			||||||
Gamepad0Key17=-1
 | 
					Gamepad0Key17=-1
 | 
				
			||||||
| 
						 | 
					@ -199,15 +199,15 @@ Gamepad0Key11=-1
 | 
				
			||||||
Gamepad0Key10=-1
 | 
					Gamepad0Key10=-1
 | 
				
			||||||
StackWidth=2165
 | 
					StackWidth=2165
 | 
				
			||||||
BankSwapAtPCBreakpointSuspend=true
 | 
					BankSwapAtPCBreakpointSuspend=true
 | 
				
			||||||
WindowEmuliciousHeight=781
 | 
					WindowEmuliciousHeight=1896
 | 
				
			||||||
WindowSpriteViewerHeight=527
 | 
					WindowSpriteViewerHeight=527
 | 
				
			||||||
GameBoyErrorBreakpointMessage32=
 | 
					GameBoyErrorBreakpointMessage32=
 | 
				
			||||||
InterruptBreakpointCondition=
 | 
					InterruptBreakpointCondition=
 | 
				
			||||||
Recent1=C\:\\workspace\\dmgtris\\bin\\out.gb
 | 
					Recent1=C\:\\workspace\\dmgtris\\bin\\out.gb
 | 
				
			||||||
Recent0=K\:\\TGM\\dmgtris\\bin\\out.gb
 | 
					Recent0=K\:\\TGM\\dmgtris\\bin\\out.gb
 | 
				
			||||||
GameBoyErrorBreakpointMessage20=
 | 
					GameBoyErrorBreakpointMessage20=
 | 
				
			||||||
WindowEmuliciousY=509
 | 
					WindowEmuliciousY=-8
 | 
				
			||||||
WindowEmuliciousX=-1010
 | 
					WindowEmuliciousX=-1088
 | 
				
			||||||
GameBoyErrorBreakpointEnabled9=false
 | 
					GameBoyErrorBreakpointEnabled9=false
 | 
				
			||||||
GameBoyErrorBreakpointEnabled8=false
 | 
					GameBoyErrorBreakpointEnabled8=false
 | 
				
			||||||
GameBoyErrorBreakpointEnabled7=false
 | 
					GameBoyErrorBreakpointEnabled7=false
 | 
				
			||||||
| 
						 | 
					@ -287,8 +287,8 @@ SouthPanelHeight=1064
 | 
				
			||||||
SMSbuttonsKeyboard=false
 | 
					SMSbuttonsKeyboard=false
 | 
				
			||||||
StackSplitLocation=534
 | 
					StackSplitLocation=534
 | 
				
			||||||
WindowMemoryEditorHeight=534
 | 
					WindowMemoryEditorHeight=534
 | 
				
			||||||
GBGamepadKeyboard=false
 | 
					 | 
				
			||||||
WindowTilemapViewerWidth=404
 | 
					WindowTilemapViewerWidth=404
 | 
				
			||||||
 | 
					GBGamepadKeyboard=false
 | 
				
			||||||
UninitializedMemoryBreakpointCondition=
 | 
					UninitializedMemoryBreakpointCondition=
 | 
				
			||||||
GameBoyErrorBreakpointSuspend19=true
 | 
					GameBoyErrorBreakpointSuspend19=true
 | 
				
			||||||
GameBoyErrorBreakpointSuspend18=true
 | 
					GameBoyErrorBreakpointSuspend18=true
 | 
				
			||||||
| 
						 | 
					@ -299,6 +299,6 @@ GameBoyErrorBreakpointSuspend10=true
 | 
				
			||||||
WindowSpriteViewerOpen=false
 | 
					WindowSpriteViewerOpen=false
 | 
				
			||||||
WindowProfilerWindowY=639
 | 
					WindowProfilerWindowY=639
 | 
				
			||||||
WindowProfilerWindowX=461
 | 
					WindowProfilerWindowX=461
 | 
				
			||||||
Scale=5.0
 | 
					Scale=6.75
 | 
				
			||||||
WindowProfilerWindowProcedureProfiler=true
 | 
					 | 
				
			||||||
KeyboardRequireWindowFocus=true
 | 
					KeyboardRequireWindowFocus=true
 | 
				
			||||||
 | 
					WindowProfilerWindowProcedureProfiler=true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue