diff --git a/src/include/globals.asm b/src/include/globals.asm index 5f4d8dc..9d0a25e 100644 --- a/src/include/globals.asm +++ b/src/include/globals.asm @@ -108,6 +108,7 @@ DEF SFX_IRS EQU 7 DEF SFX_DROP EQU 8 DEF SFX_LOCK EQU 9 DEF SFX_BELL EQU 10 +DEF SFX_MOVE EQU 11 ENDC diff --git a/src/res/sources/sfx.fur b/src/res/sources/sfx.fur index 3fd466b..d78959d 100644 Binary files a/src/res/sources/sfx.fur and b/src/res/sources/sfx.fur differ diff --git a/src/res/sources/sfx.vgm b/src/res/sources/sfx.vgm index 3e929c8..d7a250d 100644 Binary files a/src/res/sources/sfx.vgm and b/src/res/sources/sfx.vgm differ diff --git a/src/res/sources/sfxparse.py b/src/res/sources/sfxparse.py index 2b1145f..e95ee2f 100644 --- a/src/res/sources/sfxparse.py +++ b/src/res/sources/sfxparse.py @@ -159,7 +159,8 @@ sfx_names = [ "sSFXIRS", "sSFXDrop", "sSFXLock", - "sSFXBell" + "sSFXBell", + "sSFXMove" ] def chunks(lst, n): diff --git a/src/res/sources/sfxregs.txt b/src/res/sources/sfxregs.txt index f7be52c..b8ef726 100644 --- a/src/res/sources/sfxregs.txt +++ b/src/res/sources/sfxregs.txt @@ -832,3 +832,40 @@ sSFXBell:: db $FF, $FF, $FF, $FF, $FF, $FF, $FE sSFXBellEnd:: +sSFXMove:: + db REG_NR42_CH4_VOLEV, $21, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $21, REG_NR43_CH4_FQRND, $00 + db REG_NR44_CH4_CNTRL, $80, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $FF, $FF, $FE + +sSFXMoveEnd:: diff --git a/src/sfx.asm b/src/sfx.asm index f80feb6..86bb0fe 100644 --- a/src/sfx.asm +++ b/src/sfx.asm @@ -572,6 +572,10 @@ sSFXBell:: db REG_NR22_CH2_VOLEV, $08, REG_NR23_CH2_FRQLO, $97, REG_NR24_CH2_FRQHI, $87, $FE sSFXBellEnd:: +sSFXMove:: + db REG_NR42_CH4_VOLEV, $21, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $21, REG_NR43_CH4_FQRND, $00 + db REG_NR44_CH4_CNTRL, $80, $FE +sSFXMoveEnd:: SECTION "SFX Variables", HRAM @@ -762,7 +766,7 @@ SFXEnqueue:: ret : cp a, SFX_BELL - ret nz + jr nz, :+ ld a, LOW(sSFXBell) ldh [hPlayhead], a ld a, HIGH(sSFXBell) @@ -770,6 +774,15 @@ SFXEnqueue:: call SFXPlay ret +: cp a, SFX_MOVE + ret nz + ld a, LOW(sSFXMove) + ldh [hPlayhead], a + ld a, HIGH(sSFXMove) + ldh [hPlayhead+1], a + call SFXPlay + ret + ; This play routine must be called every frame. SFXPlay:: diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index 6f6aa93..e4a864e 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -160,6 +160,32 @@ fetchPieceMode: spawnPieceMode: ; todo + ld a, [hUpState] + cp a, 1 + jr nz, :+ + ld a, MODE_FETCH_PIECE + ld [wMode], a + jp drawStaticInfo + +: ld a, [hLeftState] + cp a, 1 + jr z, :++ + cp a, 12 + jr nc, :+ + ld a, [hRightState] + cp a, 1 + jr z, :++ + cp a, 12 + jr nc, :+ + jp drawStaticInfo +: ldh a, [hFrameCtr] + and %00000111 + cp 4 + jp nz, drawStaticInfo +: ld a, SFX_MOVE + call SFXEnqueue + jp drawStaticInfo + ; Always draw the score, level, next piece, and held piece. drawStaticInfo: diff --git a/src/time.asm b/src/time.asm index 99e4dd6..b2754d9 100644 --- a/src/time.asm +++ b/src/time.asm @@ -6,6 +6,7 @@ INCLUDE "globals.asm" SECTION "Time Variables", HRAM +hFrameCtr:: ds 1 hEvenFrame:: ds 1 @@ -13,11 +14,13 @@ SECTION "Time Functions", ROM0 TimeInit:: xor a, a ldh [hEvenFrame], a + ldh [hFrameCtr], a ret HandleTimers:: - ldh a, [hEvenFrame] + ldh a, [hFrameCtr] inc a + ldh [hFrameCtr], a and 1 ldh [hEvenFrame], a ret diff --git a/tools/Emulicious.ini b/tools/Emulicious.ini index 42e7213..fbc3259 100644 --- a/tools/Emulicious.ini +++ b/tools/Emulicious.ini @@ -1,5 +1,5 @@ #Emulicious settings file -#Tue Oct 17 07:32:01 CEST 2023 +#Tue Oct 17 07:59:30 CEST 2023 WindowEventViewerWindowHeight=861 WindowEventViewerWindowDivider=309 WindowMemoryTracerWindowY=631