Almost all the gameplay is in.
This commit is contained in:
parent
020a2dc3b2
commit
7922208559
|
@ -68,6 +68,38 @@ sPieceYOffsets:: ; How to draw each piece. Y-offsets of the sprites.
|
||||||
|
|
||||||
sSpeedCurve:: ; Speed curve of the game.
|
sSpeedCurve:: ; Speed curve of the game.
|
||||||
dw $0000 ; Level 0000
|
dw $0000 ; Level 0000
|
||||||
|
db 1, 16 ; 1G every 16 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0015 ; Level 0015
|
||||||
|
db 1, 15 ; 1G every 15 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0030 ; Level 0030
|
||||||
|
db 1, 14 ; 1G every 14 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0040 ; Level 0040
|
||||||
|
db 1, 13 ; 1G every 13 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0050 ; Level 0050
|
||||||
|
db 1, 12 ; 1G every 12 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0060 ; Level 0060
|
||||||
|
db 1, 11 ; 1G every 11 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0070 ; Level 0070
|
||||||
|
db 1, 10 ; 1G every 10 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0080 ; Level 0080
|
||||||
|
db 1, 9 ; 1G every 9 frames
|
||||||
|
db 25, 14, 30, 40 ; ARE, DAS, LOCK, LINECLEAR
|
||||||
|
|
||||||
|
dw $0090 ; 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
|
||||||
|
|
||||||
|
|
399
src/field.asm
399
src/field.asm
|
@ -5,6 +5,11 @@ DEF FIELD_ASM EQU 1
|
||||||
INCLUDE "globals.asm"
|
INCLUDE "globals.asm"
|
||||||
|
|
||||||
|
|
||||||
|
DEF DELAY_STATE_DETERMINE_DELAY EQU 0
|
||||||
|
DEF DELAY_STATE_LINE_CLEAR EQU 1
|
||||||
|
DEF DELAY_STATE_ARE EQU 2
|
||||||
|
|
||||||
|
|
||||||
SECTION "Field Variables", WRAM0
|
SECTION "Field Variables", WRAM0
|
||||||
wField:: ds (10*24)
|
wField:: ds (10*24)
|
||||||
wShadowField:: ds (14*26)
|
wShadowField:: ds (14*26)
|
||||||
|
@ -14,11 +19,17 @@ SECTION "Field High Variables", HRAM
|
||||||
hPieceDataBase: ds 2
|
hPieceDataBase: ds 2
|
||||||
hPieceDataOffset: ds 1
|
hPieceDataOffset: ds 1
|
||||||
hCurrentLockDelayRemaining:: ds 1
|
hCurrentLockDelayRemaining:: ds 1
|
||||||
|
hDeepestY: ds 1
|
||||||
hWantedTile: ds 1
|
hWantedTile: ds 1
|
||||||
|
hWantedG: ds 1
|
||||||
|
hActualG: ds 1
|
||||||
hTicksUntilG: ds 1
|
hTicksUntilG: ds 1
|
||||||
hWantX: ds 1
|
hWantX: ds 1
|
||||||
hYPosAtStartOfFrame: ds 1
|
hYPosAtStartOfFrame: ds 1
|
||||||
hWantRotation: ds 1
|
hWantRotation: ds 1
|
||||||
|
hRemainingDelay:: ds 1
|
||||||
|
hDelayState: ds 1
|
||||||
|
hClearedLines: ds 4
|
||||||
|
|
||||||
|
|
||||||
SECTION "Field Functions", ROM0
|
SECTION "Field Functions", ROM0
|
||||||
|
@ -42,7 +53,7 @@ FieldClear::
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
ToShadowField:
|
ToShadowField::
|
||||||
ld hl, wField
|
ld hl, wField
|
||||||
ld de, wShadowField+2
|
ld de, wShadowField+2
|
||||||
ld c, 24
|
ld c, 24
|
||||||
|
@ -367,6 +378,10 @@ TrySpawnPiece::
|
||||||
ldh [hCurrentLockDelayRemaining], a
|
ldh [hCurrentLockDelayRemaining], a
|
||||||
ldh a, [hCurrentFramesPerGravityTick]
|
ldh a, [hCurrentFramesPerGravityTick]
|
||||||
ldh [hTicksUntilG], a
|
ldh [hTicksUntilG], a
|
||||||
|
ld a, $FF
|
||||||
|
ldh [hRemainingDelay], a
|
||||||
|
ld a, DELAY_STATE_DETERMINE_DELAY
|
||||||
|
ldh [hDelayState], a
|
||||||
|
|
||||||
; Copy the field to the shadow field.
|
; Copy the field to the shadow field.
|
||||||
call ToShadowField
|
call ToShadowField
|
||||||
|
@ -507,6 +522,58 @@ DrawPiece:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
FindMaxG:
|
||||||
|
; Find the deepest the piece can go.
|
||||||
|
; We cache this pointer, cause it otherwise takes too much time.
|
||||||
|
ldh a, [hCurrentPieceY]
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hCurrentPieceX]
|
||||||
|
call XYToSFieldPtr
|
||||||
|
push hl
|
||||||
|
ld a, 2
|
||||||
|
ldh [hActualG], a
|
||||||
|
.try
|
||||||
|
ld de, 28
|
||||||
|
pop hl
|
||||||
|
add hl, de
|
||||||
|
push hl
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
call GetPieceData
|
||||||
|
call CanPieceFit
|
||||||
|
cp a, $FF
|
||||||
|
jr nz, .foundmaybe
|
||||||
|
ldh a, [hActualG]
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
ldh [hActualG], a
|
||||||
|
jr .try
|
||||||
|
|
||||||
|
.foundmaybe
|
||||||
|
ldh a, [hActualG]
|
||||||
|
dec a
|
||||||
|
ldh [hActualG], a
|
||||||
|
ld de, -14
|
||||||
|
pop hl
|
||||||
|
add hl, de
|
||||||
|
push hl
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
call GetPieceData
|
||||||
|
call CanPieceFit
|
||||||
|
cp a, $FF
|
||||||
|
jr nz, .found
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
.found
|
||||||
|
pop hl
|
||||||
|
ldh a, [hActualG]
|
||||||
|
dec a
|
||||||
|
ldh [hActualG], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
FieldProcess::
|
FieldProcess::
|
||||||
; Wipe out the piece.
|
; Wipe out the piece.
|
||||||
ldh a, [hCurrentPieceY]
|
ldh a, [hCurrentPieceY]
|
||||||
|
@ -523,11 +590,21 @@ FieldProcess::
|
||||||
ret nz
|
ret nz
|
||||||
|
|
||||||
|
|
||||||
|
; How deep can we go?
|
||||||
|
: call FindMaxG
|
||||||
|
|
||||||
; If we press up, we want to do a sonic drop.
|
; If we press up, we want to do a sonic drop.
|
||||||
: ldh a, [hUpState]
|
ldh a, [hUpState]
|
||||||
cp a, 1
|
cp a, 1
|
||||||
jr nz, :+
|
jr nz, :+
|
||||||
ld b, 20
|
ld a, 20
|
||||||
|
ldh [hWantedG], a
|
||||||
|
ldh a, [hTicksUntilG]
|
||||||
|
dec a
|
||||||
|
ldh [hTicksUntilG], a
|
||||||
|
jr nz, .grav
|
||||||
|
ldh a, [hCurrentFramesPerGravityTick]
|
||||||
|
ldh [hTicksUntilG], a
|
||||||
jr .grav
|
jr .grav
|
||||||
|
|
||||||
|
|
||||||
|
@ -546,39 +623,30 @@ FieldProcess::
|
||||||
jr nz, .nograv
|
jr nz, .nograv
|
||||||
ldh a, [hCurrentFramesPerGravityTick]
|
ldh a, [hCurrentFramesPerGravityTick]
|
||||||
ldh [hTicksUntilG], a
|
ldh [hTicksUntilG], a
|
||||||
|
|
||||||
|
|
||||||
; Move the piece down, but first check if there's still sufficient "down" to go.
|
|
||||||
ldh a, [hCurrentGravityPerTick]
|
ldh a, [hCurrentGravityPerTick]
|
||||||
ld b, a
|
ldh [hWantedG], a
|
||||||
|
|
||||||
|
|
||||||
.grav
|
.grav
|
||||||
: ldh a, [hCurrentPieceY]
|
ldh a, [hWantedG]
|
||||||
add a, b
|
ld b, a
|
||||||
cp a, 23
|
ldh a, [hActualG]
|
||||||
jr c, :+
|
cp a, b
|
||||||
dec b
|
jr c, .smallg
|
||||||
jr z, .nograv
|
|
||||||
jr :-
|
|
||||||
: push bc
|
.bigg
|
||||||
|
ldh a, [hWantedG]
|
||||||
|
ld b, a
|
||||||
ldh a, [hCurrentPieceY]
|
ldh a, [hCurrentPieceY]
|
||||||
add a, b
|
add a, b
|
||||||
|
ldh [hCurrentPieceY], a
|
||||||
|
jr .nograv
|
||||||
|
|
||||||
|
|
||||||
|
.smallg
|
||||||
|
ldh a, [hActualG]
|
||||||
ld b, a
|
ld b, a
|
||||||
ldh a, [hCurrentPieceX]
|
|
||||||
call XYToSFieldPtr
|
|
||||||
ld d, h
|
|
||||||
ld e, l
|
|
||||||
call GetPieceData
|
|
||||||
call CanPieceFit
|
|
||||||
cp a, $FF
|
|
||||||
jr z, .dolower
|
|
||||||
pop bc
|
|
||||||
dec b
|
|
||||||
jr z, .nograv
|
|
||||||
jr :-
|
|
||||||
|
|
||||||
|
|
||||||
.dolower
|
|
||||||
pop bc
|
|
||||||
ldh a, [hCurrentPieceY]
|
ldh a, [hCurrentPieceY]
|
||||||
add a, b
|
add a, b
|
||||||
ldh [hCurrentPieceY], a
|
ldh [hCurrentPieceY], a
|
||||||
|
@ -811,6 +879,9 @@ FieldProcess::
|
||||||
ldh a, [hYPosAtStartOfFrame]
|
ldh a, [hYPosAtStartOfFrame]
|
||||||
cp a, b
|
cp a, b
|
||||||
jr z, :+
|
jr z, :+
|
||||||
|
ldh a, [hDownState]
|
||||||
|
cp a, 0
|
||||||
|
jr nz, :+
|
||||||
ld a, SFX_DROP
|
ld a, SFX_DROP
|
||||||
call SFXEnqueue
|
call SFXEnqueue
|
||||||
; If the down button is held, lock.
|
; If the down button is held, lock.
|
||||||
|
@ -837,8 +908,34 @@ FieldProcess::
|
||||||
|
|
||||||
; Draw the piece.
|
; Draw the piece.
|
||||||
.draw
|
.draw
|
||||||
|
; If the gravity is <= 1G, draw a ghost piece.
|
||||||
|
ldh a, [hWantedG]
|
||||||
|
cp a, 1
|
||||||
|
jr nz, :+
|
||||||
|
ldh a, [hEvenFrame]
|
||||||
|
cp a, 1
|
||||||
|
jr nz, :+
|
||||||
|
|
||||||
|
ldh a, [hYPosAtStartOfFrame]
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hActualG]
|
||||||
|
add a, b
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hCurrentPieceX]
|
||||||
|
call XYToFieldPtr
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
call GetPieceData
|
||||||
|
ld a, 0
|
||||||
|
ld b, a
|
||||||
|
push hl
|
||||||
|
push de
|
||||||
|
pop hl
|
||||||
|
pop de
|
||||||
|
call DrawPiece
|
||||||
|
|
||||||
; If the lock delay is at the highest value, draw the piece normally.
|
; If the lock delay is at the highest value, draw the piece normally.
|
||||||
ldh a, [hCurrentPiece]
|
: ldh a, [hCurrentPiece]
|
||||||
ld b, TILE_PIECE_0
|
ld b, TILE_PIECE_0
|
||||||
add a, b
|
add a, b
|
||||||
ldh [hWantedTile], a
|
ldh [hWantedTile], a
|
||||||
|
@ -1131,4 +1228,242 @@ GetTileShade:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
FieldDelay::
|
||||||
|
ldh a, [hDelayState]
|
||||||
|
cp DELAY_STATE_DETERMINE_DELAY
|
||||||
|
jr z, .determine
|
||||||
|
cp DELAY_STATE_LINE_CLEAR
|
||||||
|
jr z, .lineclear
|
||||||
|
cp DELAY_STATE_ARE
|
||||||
|
jr z, .are
|
||||||
|
|
||||||
|
.determine
|
||||||
|
call FindClearedLines
|
||||||
|
ldh a, [hClearedLines]
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hClearedLines+1]
|
||||||
|
ld c, a
|
||||||
|
ldh a, [hClearedLines+2]
|
||||||
|
ld d, a
|
||||||
|
ldh a, [hClearedLines+3]
|
||||||
|
and a, b
|
||||||
|
and a, c
|
||||||
|
and a, d
|
||||||
|
cp a, $FF
|
||||||
|
jr z, .skip
|
||||||
|
ld a, DELAY_STATE_LINE_CLEAR
|
||||||
|
ldh [hDelayState], a
|
||||||
|
ldh a, [hCurrentLineClearDelay]
|
||||||
|
ldh [hRemainingDelay], a
|
||||||
|
call MarkClear
|
||||||
|
jr .lineclear
|
||||||
|
.skip
|
||||||
|
ld a, DELAY_STATE_ARE
|
||||||
|
ldh [hDelayState], a
|
||||||
|
ldh a, [hCurrentARE]
|
||||||
|
ldh [hRemainingDelay], a
|
||||||
|
jr .are
|
||||||
|
|
||||||
|
|
||||||
|
.lineclear
|
||||||
|
ldh a, [hRemainingDelay]
|
||||||
|
dec a
|
||||||
|
ldh [hRemainingDelay], a
|
||||||
|
cp a, 0
|
||||||
|
ret nz
|
||||||
|
|
||||||
|
call ClearLines
|
||||||
|
call SFXKill
|
||||||
|
ld a, SFX_DROP
|
||||||
|
call SFXEnqueue
|
||||||
|
|
||||||
|
ld a, DELAY_STATE_ARE
|
||||||
|
ldh [hDelayState], a
|
||||||
|
ldh a, [hCurrentARE]
|
||||||
|
ldh [hRemainingDelay], a
|
||||||
|
|
||||||
|
.are
|
||||||
|
ldh a, [hRemainingDelay]
|
||||||
|
dec a
|
||||||
|
ldh [hRemainingDelay], a
|
||||||
|
cp a, 0
|
||||||
|
ret nz
|
||||||
|
|
||||||
|
; If we're out of delay, spawn a new piece.
|
||||||
|
call SFXKill
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
AppendClearedLine:
|
||||||
|
ldh a, [hClearedLines+2]
|
||||||
|
ldh [hClearedLines+3], a
|
||||||
|
ldh a, [hClearedLines+1]
|
||||||
|
ldh [hClearedLines+2], a
|
||||||
|
ldh a, [hClearedLines]
|
||||||
|
ldh [hClearedLines+1], a
|
||||||
|
ld a, b
|
||||||
|
ldh [hClearedLines], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
FindClearedLines:
|
||||||
|
ld a, $FF
|
||||||
|
ld c, 0
|
||||||
|
ldh [hClearedLines], a
|
||||||
|
ldh [hClearedLines+1], a
|
||||||
|
ldh [hClearedLines+2], a
|
||||||
|
ldh [hClearedLines+3], a
|
||||||
|
|
||||||
|
DEF row = 23
|
||||||
|
REPT 24
|
||||||
|
ld hl, wShadowField+2+(row*14)
|
||||||
|
ld b, 11
|
||||||
|
: ld a, [hl+]
|
||||||
|
dec b
|
||||||
|
cp a, $FF
|
||||||
|
jr z, :+
|
||||||
|
cp a, TILE_FIELD_EMPTY
|
||||||
|
jr nz, :-
|
||||||
|
: xor a, a
|
||||||
|
cp a, b
|
||||||
|
jr nz, .next\@
|
||||||
|
ld b, 23-row
|
||||||
|
call AppendClearedLine
|
||||||
|
inc c
|
||||||
|
ld a, 4
|
||||||
|
cp a, c
|
||||||
|
ret z
|
||||||
|
DEF row -= 1
|
||||||
|
.next\@
|
||||||
|
ENDR
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
MarkClear:
|
||||||
|
ld a, [hClearedLines]
|
||||||
|
cp a, $FF
|
||||||
|
ret z
|
||||||
|
ld hl, wField+(24*10)
|
||||||
|
: ld bc, -10
|
||||||
|
add hl, bc
|
||||||
|
dec a
|
||||||
|
cp a, $FF
|
||||||
|
jr nz, :-
|
||||||
|
ld bc, 10
|
||||||
|
ld d, TILE_CLEARING
|
||||||
|
call UnsafeMemSet
|
||||||
|
|
||||||
|
ld a, [hClearedLines+1]
|
||||||
|
cp a, $FF
|
||||||
|
ret z
|
||||||
|
ld hl, wField+(24*10)
|
||||||
|
: ld bc, -10
|
||||||
|
add hl, bc
|
||||||
|
dec a
|
||||||
|
cp a, $FF
|
||||||
|
jr nz, :-
|
||||||
|
ld bc, 10
|
||||||
|
ld d, TILE_CLEARING
|
||||||
|
call UnsafeMemSet
|
||||||
|
|
||||||
|
ld a, [hClearedLines+2]
|
||||||
|
cp a, $FF
|
||||||
|
ret z
|
||||||
|
ld hl, wField+(24*10)
|
||||||
|
: ld bc, -10
|
||||||
|
add hl, bc
|
||||||
|
dec a
|
||||||
|
cp a, $FF
|
||||||
|
jr nz, :-
|
||||||
|
ld bc, 10
|
||||||
|
ld d, TILE_CLEARING
|
||||||
|
call UnsafeMemSet
|
||||||
|
|
||||||
|
ld a, [hClearedLines+3]
|
||||||
|
cp a, $FF
|
||||||
|
ret z
|
||||||
|
ld hl, wField+(24*10)
|
||||||
|
: ld bc, -10
|
||||||
|
add hl, bc
|
||||||
|
dec a
|
||||||
|
cp a, $FF
|
||||||
|
jr nz, :-
|
||||||
|
ld bc, 10
|
||||||
|
ld d, TILE_CLEARING
|
||||||
|
call UnsafeMemSet
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
ClearLines:
|
||||||
|
ld de, 0
|
||||||
|
|
||||||
|
DEF row = 23
|
||||||
|
REPT 24
|
||||||
|
; Check if the row begins with a clearing tile.
|
||||||
|
ld hl, wField+(row*10)
|
||||||
|
ld a, [hl]
|
||||||
|
cp a, TILE_CLEARING
|
||||||
|
|
||||||
|
; If it does, increment the clearing counter, but skip this line.
|
||||||
|
jr nz, .clear\@
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
jr .r\@
|
||||||
|
|
||||||
|
.clear\@
|
||||||
|
; If there's 0 lines that need to be moved down, skip this line.
|
||||||
|
xor a, a
|
||||||
|
cp a, e
|
||||||
|
jr z, .r\@
|
||||||
|
|
||||||
|
; Otherwise...
|
||||||
|
ld bc, wField+(row*10)
|
||||||
|
add hl, de
|
||||||
|
: ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
ld a, [bc]
|
||||||
|
ld [hl+], a
|
||||||
|
inc bc
|
||||||
|
.r\@
|
||||||
|
DEF row -= 1
|
||||||
|
ENDR
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
ENDC
|
ENDC
|
||||||
|
|
|
@ -95,6 +95,7 @@ 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
|
||||||
DEF TILE_0 EQU 66
|
DEF TILE_0 EQU 66
|
||||||
|
DEF TILE_CLEARING EQU 0
|
||||||
DEF NEXT_BASE_X EQU 120
|
DEF NEXT_BASE_X EQU 120
|
||||||
DEF NEXT_BASE_Y EQU 40
|
DEF NEXT_BASE_Y EQU 40
|
||||||
DEF HOLD_BASE_X EQU 120
|
DEF HOLD_BASE_X EQU 120
|
||||||
|
|
12
src/sfx.asm
12
src/sfx.asm
|
@ -1241,6 +1241,18 @@ SFXEnqueue::
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
SFXKill::
|
||||||
|
ld a, $FF
|
||||||
|
ldh [hPlayQueue], a
|
||||||
|
ldh [hPlayQueue+1], a
|
||||||
|
ldh [hPlayQueue+2], a
|
||||||
|
ldh [hPlayQueue+3], a
|
||||||
|
xor a, a
|
||||||
|
ldh [hPlayhead], a
|
||||||
|
ldh [hPlayhead+1], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
; This play routine must be called every frame.
|
; This play routine must be called every frame.
|
||||||
SFXPlay::
|
SFXPlay::
|
||||||
; Load the playhead position into HL.
|
; Load the playhead position into HL.
|
||||||
|
|
|
@ -253,13 +253,22 @@ pieceInMotionMode:
|
||||||
jr nz, :+
|
jr nz, :+
|
||||||
ld a, MODE_DELAY
|
ld a, MODE_DELAY
|
||||||
ld [wMode], a
|
ld [wMode], a
|
||||||
|
call ToShadowField
|
||||||
; No fall through this time.
|
; No fall through this time.
|
||||||
|
|
||||||
: jr drawStaticInfo
|
: jr drawStaticInfo
|
||||||
|
|
||||||
|
|
||||||
delayMode:
|
delayMode:
|
||||||
; TODO.
|
call FieldDelay
|
||||||
|
|
||||||
|
ldh a, [hRemainingDelay]
|
||||||
|
cp a, 0
|
||||||
|
jr nz, :+
|
||||||
|
ld a, MODE_FETCH_PIECE
|
||||||
|
ld [wMode], a
|
||||||
|
|
||||||
|
: jr drawStaticInfo
|
||||||
|
|
||||||
|
|
||||||
gameOverMode:
|
gameOverMode:
|
||||||
|
@ -268,11 +277,11 @@ gameOverMode:
|
||||||
ld bc, 10
|
ld bc, 10
|
||||||
call UnsafeMemCopy
|
call UnsafeMemCopy
|
||||||
ld de, sGameOver2
|
ld de, sGameOver2
|
||||||
ld hl, wField+(11*10)
|
ld hl, wField+(12*10)
|
||||||
ld bc, 10
|
ld bc, 10
|
||||||
call UnsafeMemCopy
|
call UnsafeMemCopy
|
||||||
ld de, sGameOver3
|
ld de, sGameOver3
|
||||||
ld hl, wField+(12*10)
|
ld hl, wField+(14*10)
|
||||||
ld bc, 10
|
ld bc, 10
|
||||||
call UnsafeMemCopy
|
call UnsafeMemCopy
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#Emulicious settings file
|
#Emulicious settings file
|
||||||
#Fri Oct 20 12:46:32 CEST 2023
|
#Fri Oct 20 16:26:17 CEST 2023
|
||||||
|
WindowProfilerWindowOpen=false
|
||||||
WindowEventViewerWindowHeight=1416
|
WindowEventViewerWindowHeight=1416
|
||||||
WindowEventViewerWindowDivider=876
|
WindowEventViewerWindowDivider=876
|
||||||
WindowMemoryTracerWindowY=631
|
WindowMemoryTracerWindowY=631
|
||||||
|
@ -7,14 +8,19 @@ WindowMemoryTracerWindowX=383
|
||||||
Update=2
|
Update=2
|
||||||
AudioSync=false
|
AudioSync=false
|
||||||
DebuggerMemoryTabVisibleRect=0,0,0,0
|
DebuggerMemoryTabVisibleRect=0,0,0,0
|
||||||
|
WindowProfilerWindowWidth=1073
|
||||||
UninitializedMemoryBreakpointSuspend=true
|
UninitializedMemoryBreakpointSuspend=true
|
||||||
GameBoyErrorBreakpointEnabled32=false
|
GameBoyErrorBreakpointEnabled32=false
|
||||||
SMSGamepadBThreshold=50
|
SMSGamepadBThreshold=50
|
||||||
RegistersGameBoy=AF,BC,DE,HL,SP,PC,LCDC,STAT,LY,DIV,IE,IF
|
RegistersGameBoy=AF,BC,DE,HL,SP,PC,LCDC,STAT,LY,DIV,IE,IF
|
||||||
SMSbuttonsThreshold=50
|
SMSbuttonsThreshold=50
|
||||||
|
ProfileInterruptsInSeparateRoots=true
|
||||||
|
WindowRAMWatchWindowY=737
|
||||||
|
WindowRAMWatchWindowX=1766
|
||||||
GBGamepadThreshold=50
|
GBGamepadThreshold=50
|
||||||
GameBoyErrorBreakpointEnabled20=false
|
GameBoyErrorBreakpointEnabled20=false
|
||||||
StretchToWindow=false
|
StretchToWindow=false
|
||||||
|
WindowProfilerWindowHeight=563
|
||||||
WindowTileViewerOpen=false
|
WindowTileViewerOpen=false
|
||||||
DebuggerWestPanelSelectedTab=0
|
DebuggerWestPanelSelectedTab=0
|
||||||
WindowMemoryTracerWindowWidth=1136
|
WindowMemoryTracerWindowWidth=1136
|
||||||
|
@ -72,7 +78,7 @@ InterruptBreakpointEnabled=false
|
||||||
OutlineWidth=425
|
OutlineWidth=425
|
||||||
DebuggerEventFiltersGameBoy=
|
DebuggerEventFiltersGameBoy=
|
||||||
GameBoyErrorBreakpointSuspend9=true
|
GameBoyErrorBreakpointSuspend9=true
|
||||||
WindowMemoryEditorOpen=true
|
WindowMemoryEditorOpen=false
|
||||||
GameBoyErrorBreakpointSuspend8=true
|
GameBoyErrorBreakpointSuspend8=true
|
||||||
GameBoyErrorBreakpointSuspend7=true
|
GameBoyErrorBreakpointSuspend7=true
|
||||||
WindowPaletteViewerY=619
|
WindowPaletteViewerY=619
|
||||||
|
@ -99,7 +105,7 @@ Gamepad1Key30=-1
|
||||||
BankSwapAtPCBreakpointEnabled=false
|
BankSwapAtPCBreakpointEnabled=false
|
||||||
DebuggerMemorySelectedTab=HRAM
|
DebuggerMemorySelectedTab=HRAM
|
||||||
WindowVideoViewerOpen=false
|
WindowVideoViewerOpen=false
|
||||||
WindowMemoryEditorTabVisibleRect=0,496,583,384
|
WindowMemoryEditorTabVisibleRect=0,0,583,128
|
||||||
Gamepad1Key29=-1
|
Gamepad1Key29=-1
|
||||||
Gamepad1Key28=-1
|
Gamepad1Key28=-1
|
||||||
Gamepad1Key27=-1
|
Gamepad1Key27=-1
|
||||||
|
@ -126,9 +132,9 @@ Key1=75
|
||||||
Key0=74
|
Key0=74
|
||||||
Gamepad1Key19=-1
|
Gamepad1Key19=-1
|
||||||
Gamepad1Key18=-1
|
Gamepad1Key18=-1
|
||||||
WindowEventViewerWindowY=99
|
WindowEventViewerWindowY=24
|
||||||
Gamepad1Key17=-1
|
Gamepad1Key17=-1
|
||||||
WindowEventViewerWindowX=570
|
WindowEventViewerWindowX=0
|
||||||
Gamepad1Key16=-1
|
Gamepad1Key16=-1
|
||||||
Gamepad1Key15=-1
|
Gamepad1Key15=-1
|
||||||
Gamepad1Key14=-1
|
Gamepad1Key14=-1
|
||||||
|
@ -136,7 +142,7 @@ Gamepad1Key13=-1
|
||||||
Gamepad1Key12=-1
|
Gamepad1Key12=-1
|
||||||
Gamepad1Key11=-1
|
Gamepad1Key11=-1
|
||||||
Gamepad1Key10=-1
|
Gamepad1Key10=-1
|
||||||
WindowMemoryEditorSelectedAddress=503
|
WindowMemoryEditorSelectedAddress=37
|
||||||
WindowMemoryEditorWidth=665
|
WindowMemoryEditorWidth=665
|
||||||
GameBoyErrorBreakpointCondition9=
|
GameBoyErrorBreakpointCondition9=
|
||||||
GameBoyErrorBreakpointCondition8=
|
GameBoyErrorBreakpointCondition8=
|
||||||
|
@ -155,7 +161,7 @@ Gamepad0Key35=-1
|
||||||
Gamepad0Key34=-1
|
Gamepad0Key34=-1
|
||||||
Gamepad0Key33=-1
|
Gamepad0Key33=-1
|
||||||
Gamepad0Key32=-1
|
Gamepad0Key32=-1
|
||||||
WindowMemoryEditorSelectedTab=RAM
|
WindowMemoryEditorSelectedTab=HRAM
|
||||||
Gamepad0Key31=-1
|
Gamepad0Key31=-1
|
||||||
Gamepad0Key30=-1
|
Gamepad0Key30=-1
|
||||||
SMSGamepadAThreshold=50
|
SMSGamepadAThreshold=50
|
||||||
|
@ -178,8 +184,8 @@ Gamepad0Key20=-1
|
||||||
DebuggerSouthPanelSelectedTab=1
|
DebuggerSouthPanelSelectedTab=1
|
||||||
WindowEmuliciousWidth=816
|
WindowEmuliciousWidth=816
|
||||||
WindowVideoViewerWidth=980
|
WindowVideoViewerWidth=980
|
||||||
WindowMemoryEditorY=732
|
WindowMemoryEditorY=695
|
||||||
WindowMemoryEditorX=2558
|
WindowMemoryEditorX=243
|
||||||
Gamepad0Key19=-1
|
Gamepad0Key19=-1
|
||||||
Gamepad0Key18=-1
|
Gamepad0Key18=-1
|
||||||
Gamepad0Key17=-1
|
Gamepad0Key17=-1
|
||||||
|
@ -199,8 +205,8 @@ GameBoyErrorBreakpointMessage32=
|
||||||
InterruptBreakpointCondition=
|
InterruptBreakpointCondition=
|
||||||
Recent0=C\:\\workspace\\dmgtris\\bin\\out.gb
|
Recent0=C\:\\workspace\\dmgtris\\bin\\out.gb
|
||||||
GameBoyErrorBreakpointMessage20=
|
GameBoyErrorBreakpointMessage20=
|
||||||
WindowEmuliciousY=302
|
WindowEmuliciousY=367
|
||||||
WindowEmuliciousX=153
|
WindowEmuliciousX=982
|
||||||
GameBoyErrorBreakpointEnabled9=false
|
GameBoyErrorBreakpointEnabled9=false
|
||||||
GameBoyErrorBreakpointEnabled8=false
|
GameBoyErrorBreakpointEnabled8=false
|
||||||
GameBoyErrorBreakpointEnabled7=false
|
GameBoyErrorBreakpointEnabled7=false
|
||||||
|
@ -264,14 +270,16 @@ Gamepad0Key3=-1
|
||||||
Gamepad0Key2=-1
|
Gamepad0Key2=-1
|
||||||
Gamepad0Key1=-1
|
Gamepad0Key1=-1
|
||||||
Gamepad0Key0=-1
|
Gamepad0Key0=-1
|
||||||
WindowDebuggerY=201
|
WindowDebuggerY=730
|
||||||
WindowDebuggerX=727
|
WindowDebuggerX=1234
|
||||||
InterruptBreakpointSuspend=true
|
InterruptBreakpointSuspend=true
|
||||||
SMSGamepadAKeyboard=false
|
SMSGamepadAKeyboard=false
|
||||||
GameBoyErrorBreakpointSuspend32=true
|
GameBoyErrorBreakpointSuspend32=true
|
||||||
|
WindowRAMWatchWindowHeight=470
|
||||||
SMSGamepadB=-1
|
SMSGamepadB=-1
|
||||||
SMSGamepadA=-1
|
SMSGamepadA=-1
|
||||||
WindowEventViewerWindowWidth=2576
|
WindowEventViewerWindowWidth=2576
|
||||||
|
WindowRAMWatchWindowOpen=false
|
||||||
BankSwapAtPCBreakpointCondition=
|
BankSwapAtPCBreakpointCondition=
|
||||||
GameBoyErrorBreakpointSuspend20=true
|
GameBoyErrorBreakpointSuspend20=true
|
||||||
SouthPanelHeight=635
|
SouthPanelHeight=635
|
||||||
|
@ -285,7 +293,11 @@ GameBoyErrorBreakpointSuspend19=true
|
||||||
GameBoyErrorBreakpointSuspend18=true
|
GameBoyErrorBreakpointSuspend18=true
|
||||||
GameBoyErrorBreakpointSuspend17=true
|
GameBoyErrorBreakpointSuspend17=true
|
||||||
GameBoyErrorBreakpointSuspend16=true
|
GameBoyErrorBreakpointSuspend16=true
|
||||||
|
WindowRAMWatchWindowWidth=376
|
||||||
GameBoyErrorBreakpointSuspend10=true
|
GameBoyErrorBreakpointSuspend10=true
|
||||||
WindowSpriteViewerOpen=false
|
WindowSpriteViewerOpen=false
|
||||||
|
WindowProfilerWindowY=639
|
||||||
|
WindowProfilerWindowX=461
|
||||||
Scale=5.0
|
Scale=5.0
|
||||||
KeyboardRequireWindowFocus=true
|
KeyboardRequireWindowFocus=true
|
||||||
|
WindowProfilerWindowProcedureProfiler=true
|
||||||
|
|
|
@ -9,3 +9,5 @@ hPieceDataOffset 1 Hexadecimal
|
||||||
hCurrentPiece 1 Hexadecimal
|
hCurrentPiece 1 Hexadecimal
|
||||||
hCurrentPieceY 1 Hexadecimal
|
hCurrentPieceY 1 Hexadecimal
|
||||||
hUpState 1 Hexadecimal
|
hUpState 1 Hexadecimal
|
||||||
|
hActualG 1 Hexadecimal
|
||||||
|
hClearedLines 4 Hexadecimal
|
||||||
|
|
Loading…
Reference in New Issue