Proper animations on prelock.
This commit is contained in:
parent
b77580b2da
commit
020a2dc3b2
363
src/field.asm
363
src/field.asm
|
@ -11,12 +11,14 @@ wShadowField:: ds (14*26)
|
||||||
|
|
||||||
|
|
||||||
SECTION "Field High Variables", HRAM
|
SECTION "Field High Variables", HRAM
|
||||||
hPieceDataBase:: ds 2
|
hPieceDataBase: ds 2
|
||||||
hPieceDataOffset:: ds 1
|
hPieceDataOffset: ds 1
|
||||||
hCurrentLockDelayRemaining:: ds 1
|
hCurrentLockDelayRemaining:: ds 1
|
||||||
hTicksUntilG:: ds 1
|
hWantedTile: ds 1
|
||||||
hWantX:: ds 1
|
hTicksUntilG: ds 1
|
||||||
hWantRotation:: ds 1
|
hWantX: ds 1
|
||||||
|
hYPosAtStartOfFrame: ds 1
|
||||||
|
hWantRotation: ds 1
|
||||||
|
|
||||||
|
|
||||||
SECTION "Field Functions", ROM0
|
SECTION "Field Functions", ROM0
|
||||||
|
@ -508,18 +510,8 @@ DrawPiece:
|
||||||
FieldProcess::
|
FieldProcess::
|
||||||
; Wipe out the piece.
|
; Wipe out the piece.
|
||||||
ldh a, [hCurrentPieceY]
|
ldh a, [hCurrentPieceY]
|
||||||
ld b, a
|
ldh [hYPosAtStartOfFrame], a
|
||||||
ldh a, [hCurrentPieceX]
|
call FromShadowField
|
||||||
call XYToFieldPtr
|
|
||||||
ld d, h
|
|
||||||
ld e, l
|
|
||||||
call GetPieceData
|
|
||||||
ld b, TILE_FIELD_EMPTY
|
|
||||||
push hl
|
|
||||||
push de
|
|
||||||
pop hl
|
|
||||||
pop de
|
|
||||||
call DrawPiece
|
|
||||||
|
|
||||||
|
|
||||||
; Check if we're about to hold.
|
; Check if we're about to hold.
|
||||||
|
@ -532,13 +524,21 @@ FieldProcess::
|
||||||
|
|
||||||
|
|
||||||
; 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 b, 20
|
||||||
jr .grav
|
jr .grav
|
||||||
|
|
||||||
|
|
||||||
|
; If we press down, we want to do a soft drop.
|
||||||
|
: ldh a, [hDownState]
|
||||||
|
cp a, 0
|
||||||
|
jr z, :+
|
||||||
|
ld a, 1
|
||||||
|
ldh [hTicksUntilG], a
|
||||||
|
|
||||||
|
|
||||||
; Gravity?
|
; Gravity?
|
||||||
: ldh a, [hTicksUntilG]
|
: ldh a, [hTicksUntilG]
|
||||||
dec a
|
dec a
|
||||||
|
@ -791,13 +791,77 @@ FieldProcess::
|
||||||
|
|
||||||
|
|
||||||
.postmove
|
.postmove
|
||||||
; TODO: Do we need to reset the lock timer?
|
; Are we grounded?
|
||||||
; TODO: Do we need to decrement the lock timer?
|
ldh a, [hCurrentPieceY]
|
||||||
; TODO: What tile do we use to draw the piece?
|
inc a
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hCurrentPieceX]
|
||||||
|
call XYToSFieldPtr
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
call GetPieceData
|
||||||
|
call CanPieceFit
|
||||||
|
cp a, $FF
|
||||||
|
jr z, .notgrounded
|
||||||
|
|
||||||
|
; We're grounded.
|
||||||
|
; If the y position changed, play a sound.
|
||||||
|
ldh a, [hCurrentPieceY]
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hYPosAtStartOfFrame]
|
||||||
|
cp a, b
|
||||||
|
jr z, :+
|
||||||
|
ld a, SFX_DROP
|
||||||
|
call SFXEnqueue
|
||||||
|
; If the down button is held, lock.
|
||||||
|
: ldh a, [hDownState]
|
||||||
|
cp a, 0
|
||||||
|
jr z, :+
|
||||||
|
ld a, 1
|
||||||
|
ldh [hCurrentLockDelayRemaining], a
|
||||||
|
: ldh a, [hCurrentLockDelayRemaining]
|
||||||
|
dec a
|
||||||
|
ldh [hCurrentLockDelayRemaining], a
|
||||||
|
; If we're out of lock delay, play a sound.
|
||||||
|
cp a, 0
|
||||||
|
jr nz, .draw
|
||||||
|
ld a, SFX_LOCK
|
||||||
|
call SFXEnqueue
|
||||||
|
jr .draw
|
||||||
|
|
||||||
|
.notgrounded
|
||||||
|
; Otherwise reset the lock delay.
|
||||||
|
ldh a, [hCurrentLockDelay]
|
||||||
|
ldh [hCurrentLockDelayRemaining], a
|
||||||
|
|
||||||
|
|
||||||
; Draw the piece.
|
; Draw the piece.
|
||||||
.draw
|
.draw
|
||||||
|
; If the lock delay is at the highest value, draw the piece normally.
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ldh a, [hCurrentLockDelay]
|
||||||
|
ld b, a
|
||||||
|
ldh a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, b
|
||||||
|
jr z, .drawpiece
|
||||||
|
|
||||||
|
; If the lock delay is 0, draw the piece in the final color.
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+7
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ldh a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 0
|
||||||
|
jr z, .drawpiece
|
||||||
|
|
||||||
|
; Otherwise, look it up.
|
||||||
|
call GetTileShade
|
||||||
|
|
||||||
|
; TODO: What tile do we use to draw the piece?
|
||||||
|
.drawpiece
|
||||||
ldh a, [hCurrentPieceY]
|
ldh a, [hCurrentPieceY]
|
||||||
ld b, a
|
ld b, a
|
||||||
ldh a, [hCurrentPieceX]
|
ldh a, [hCurrentPieceX]
|
||||||
|
@ -805,9 +869,7 @@ FieldProcess::
|
||||||
ld d, h
|
ld d, h
|
||||||
ld e, l
|
ld e, l
|
||||||
call GetPieceData
|
call GetPieceData
|
||||||
ldh a, [hCurrentPiece]
|
ldh a, [hWantedTile]
|
||||||
ld b, TILE_PIECE_0
|
|
||||||
add a, b
|
|
||||||
ld b, a
|
ld b, a
|
||||||
push hl
|
push hl
|
||||||
push de
|
push de
|
||||||
|
@ -816,4 +878,257 @@ FieldProcess::
|
||||||
call DrawPiece
|
call DrawPiece
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
GetTileShade:
|
||||||
|
; Possible values for tile delay:
|
||||||
|
; 30, 25, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1
|
||||||
|
; We don't need to handle the 1 case.
|
||||||
|
ld a, 0
|
||||||
|
ld b, a
|
||||||
|
: ldh a, [hCurrentLockDelay]
|
||||||
|
cp a, 30
|
||||||
|
jr z, .max30
|
||||||
|
: cp a, 25
|
||||||
|
jr z, .max25
|
||||||
|
: cp a, 20
|
||||||
|
jr z, .max20
|
||||||
|
: cp a, 18
|
||||||
|
jp z, .max18
|
||||||
|
: cp a, 16
|
||||||
|
jp z, .max16
|
||||||
|
: cp a, 14
|
||||||
|
jp z, .max14
|
||||||
|
: cp a, 12
|
||||||
|
jp z, .max12
|
||||||
|
: cp a, 10
|
||||||
|
jp z, .max10
|
||||||
|
: cp a, 8
|
||||||
|
jp z, .max8
|
||||||
|
: cp a, 6
|
||||||
|
jp z, .max6
|
||||||
|
: cp a, 4
|
||||||
|
jp z, .max4
|
||||||
|
: cp a, 2
|
||||||
|
jp z, .max2
|
||||||
|
ret
|
||||||
|
.max30
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 4
|
||||||
|
ret c
|
||||||
|
cp a, 8
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 12
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 16
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 20
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 24
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 28
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max25
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 3
|
||||||
|
ret c
|
||||||
|
cp a, 6
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 9
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 12
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 15
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 18
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 21
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max20
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 2
|
||||||
|
ret c
|
||||||
|
cp a, 5
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 7
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 10
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 12
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 15
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 17
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max18
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 2
|
||||||
|
ret c
|
||||||
|
cp a, 4
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 6
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 9
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 11
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 13
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 15
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max16
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 2
|
||||||
|
ret c
|
||||||
|
cp a, 4
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 6
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 8
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 10
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 12
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 14
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max14
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 2
|
||||||
|
ret c
|
||||||
|
cp a, 4
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 6
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 7
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 9
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 11
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 13
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max12
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 1
|
||||||
|
ret c
|
||||||
|
cp a, 3
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 4
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 6
|
||||||
|
jp c, .s4
|
||||||
|
cp a, 7
|
||||||
|
jp c, .s3
|
||||||
|
cp a, 9
|
||||||
|
jp c, .s2
|
||||||
|
cp a, 10
|
||||||
|
jp c, .s1
|
||||||
|
jp .s0
|
||||||
|
.max10
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 1
|
||||||
|
ret c
|
||||||
|
cp a, 2
|
||||||
|
jp c, .s6
|
||||||
|
cp a, 3
|
||||||
|
jp c, .s5
|
||||||
|
cp a, 5
|
||||||
|
jr c, .s4
|
||||||
|
cp a, 6
|
||||||
|
jr c, .s3
|
||||||
|
cp a, 7
|
||||||
|
jr c, .s2
|
||||||
|
cp a, 8
|
||||||
|
jr c, .s1
|
||||||
|
jr .s0
|
||||||
|
.max8
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 1
|
||||||
|
ret c
|
||||||
|
cp a, 2
|
||||||
|
jr c, .s6
|
||||||
|
cp a, 3
|
||||||
|
jr c, .s5
|
||||||
|
cp a, 4
|
||||||
|
jr c, .s4
|
||||||
|
cp a, 5
|
||||||
|
jr c, .s3
|
||||||
|
cp a, 6
|
||||||
|
jr c, .s2
|
||||||
|
cp a, 7
|
||||||
|
jr c, .s1
|
||||||
|
jr .s0
|
||||||
|
.max6
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 1
|
||||||
|
ret c
|
||||||
|
cp a, 2
|
||||||
|
jr c, .s5
|
||||||
|
cp a, 3
|
||||||
|
jr c, .s3
|
||||||
|
cp a, 4
|
||||||
|
jr c, .s2
|
||||||
|
cp a, 5
|
||||||
|
jr c, .s1
|
||||||
|
jr .s0
|
||||||
|
.max4
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
cp a, 1
|
||||||
|
ret c
|
||||||
|
cp a, 2
|
||||||
|
jr c, .s4
|
||||||
|
jr .s0
|
||||||
|
.max2
|
||||||
|
ld a, [hCurrentLockDelayRemaining]
|
||||||
|
jr .s4
|
||||||
|
.s0
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
.s1
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+(2*7)
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
.s2
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+(3*7)
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
.s3
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+(4*7)
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
.s4
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+(5*7)
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
.s5
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+(6*7)
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
.s6
|
||||||
|
ldh a, [hCurrentPiece]
|
||||||
|
ld b, TILE_PIECE_0+(7*7)
|
||||||
|
add a, b
|
||||||
|
ldh [hWantedTile], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
ENDC
|
ENDC
|
||||||
|
|
|
@ -248,7 +248,7 @@ pieceInMotionMode:
|
||||||
ld [wMode], a
|
ld [wMode], a
|
||||||
|
|
||||||
; Do we go into delay state?
|
; Do we go into delay state?
|
||||||
ldh a, [hCurrentLockDelayRemaining]
|
: ldh a, [hCurrentLockDelayRemaining]
|
||||||
cp a, 0
|
cp a, 0
|
||||||
jr nz, :+
|
jr nz, :+
|
||||||
ld a, MODE_DELAY
|
ld a, MODE_DELAY
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#Emulicious settings file
|
#Emulicious settings file
|
||||||
#Fri Oct 20 11:45:02 CEST 2023
|
#Fri Oct 20 12:46:32 CEST 2023
|
||||||
WindowEventViewerWindowHeight=1416
|
WindowEventViewerWindowHeight=1416
|
||||||
WindowEventViewerWindowDivider=876
|
WindowEventViewerWindowDivider=876
|
||||||
WindowMemoryTracerWindowY=631
|
WindowMemoryTracerWindowY=631
|
||||||
|
@ -199,8 +199,8 @@ GameBoyErrorBreakpointMessage32=
|
||||||
InterruptBreakpointCondition=
|
InterruptBreakpointCondition=
|
||||||
Recent0=C\:\\workspace\\dmgtris\\bin\\out.gb
|
Recent0=C\:\\workspace\\dmgtris\\bin\\out.gb
|
||||||
GameBoyErrorBreakpointMessage20=
|
GameBoyErrorBreakpointMessage20=
|
||||||
WindowEmuliciousY=422
|
WindowEmuliciousY=302
|
||||||
WindowEmuliciousX=89
|
WindowEmuliciousX=153
|
||||||
GameBoyErrorBreakpointEnabled9=false
|
GameBoyErrorBreakpointEnabled9=false
|
||||||
GameBoyErrorBreakpointEnabled8=false
|
GameBoyErrorBreakpointEnabled8=false
|
||||||
GameBoyErrorBreakpointEnabled7=false
|
GameBoyErrorBreakpointEnabled7=false
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[General]
|
[General]
|
||||||
GBRPath=c:\workspace\dmgtris\src\res\sources\
|
GBRPath=C:\workspace\dmgtris\src\res\sources\
|
||||||
[Recently used files]
|
[Recently used files]
|
||||||
F0=c:\workspace\dmgtris\src\res\sources\tiles.gbr
|
F0=c:\workspace\dmgtris\src\res\sources\tiles.gbr
|
||||||
F1=c:\workspace\dmgtris\src\res\tiles.gbr
|
F1=c:\workspace\dmgtris\src\res\tiles.gbr
|
||||||
|
|
|
@ -8,3 +8,4 @@ hPieceDataBase 2 Hexadecimal
|
||||||
hPieceDataOffset 1 Hexadecimal
|
hPieceDataOffset 1 Hexadecimal
|
||||||
hCurrentPiece 1 Hexadecimal
|
hCurrentPiece 1 Hexadecimal
|
||||||
hCurrentPieceY 1 Hexadecimal
|
hCurrentPieceY 1 Hexadecimal
|
||||||
|
hUpState 1 Hexadecimal
|
||||||
|
|
Loading…
Reference in New Issue