Implement input and clean up.
This commit is contained in:
parent
9cedde3ed7
commit
134e1b559e
|
@ -313,30 +313,10 @@ DEF PALETTE_LIGHTER_0 EQU %11100100
|
||||||
DEF PALETTE_LIGHTER_1 EQU %10010000
|
DEF PALETTE_LIGHTER_1 EQU %10010000
|
||||||
DEF PALETTE_LIGHTER_2 EQU %01000000
|
DEF PALETTE_LIGHTER_2 EQU %01000000
|
||||||
DEF PALETTE_LIGHTER_3 EQU %00000000
|
DEF PALETTE_LIGHTER_3 EQU %00000000
|
||||||
DEF FIELD_TOP_LEFT EQU $9800+(0*32)+1
|
DEF FIELD_TOP_LEFT EQU $9800+(1*32)+1
|
||||||
DEF FIELD_ROW_1 EQU $9800+(0*32)+1
|
|
||||||
DEF FIELD_ROW_2 EQU $9800+(1*32)+1
|
|
||||||
DEF FIELD_ROW_3 EQU $9800+(2*32)+1
|
|
||||||
DEF FIELD_ROW_4 EQU $9800+(3*32)+1
|
|
||||||
DEF FIELD_ROW_5 EQU $9800+(4*32)+1
|
|
||||||
DEF FIELD_ROW_6 EQU $9800+(5*32)+1
|
|
||||||
DEF FIELD_ROW_7 EQU $9800+(6*32)+1
|
|
||||||
DEF FIELD_ROW_8 EQU $9800+(7*32)+1
|
|
||||||
DEF FIELD_ROW_9 EQU $9800+(8*32)+1
|
|
||||||
DEF FIELD_ROW_10 EQU $9800+(9*32)+1
|
|
||||||
DEF FIELD_ROW_11 EQU $9800+(10*32)+1
|
|
||||||
DEF FIELD_ROW_12 EQU $9800+(11*32)+1
|
|
||||||
DEF FIELD_ROW_13 EQU $9800+(12*32)+1
|
|
||||||
DEF FIELD_ROW_14 EQU $9800+(13*32)+1
|
|
||||||
DEF FIELD_ROW_15 EQU $9800+(14*32)+1
|
|
||||||
DEF FIELD_ROW_16 EQU $9800+(15*32)+1
|
|
||||||
DEF FIELD_ROW_17 EQU $9800+(16*32)+1
|
|
||||||
DEF FIELD_ROW_18 EQU $9800+(17*32)+1
|
|
||||||
DEF FIELD_ROW_19 EQU $9800+(18*32)+1
|
|
||||||
DEF FIELD_ROW_20 EQU $9800+(19*32)+1
|
|
||||||
DEF TILE_FIELD_EMPTY EQU 7
|
DEF TILE_FIELD_EMPTY EQU 7
|
||||||
DEF TILE_PIECE_0 EQU 10
|
DEF TILE_PIECE_0 EQU 10
|
||||||
DEF TILE_0 EQU 110
|
DEF TILE_0 EQU 100
|
||||||
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
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
IF !DEF(FIELD_ASM)
|
||||||
|
DEF FIELD_ASM EQU 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Field Variables", WRAM0
|
||||||
|
wField:: ds (10*21)
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Field Functions", ROM0
|
||||||
|
FieldInit::
|
||||||
|
ld hl, wField
|
||||||
|
ld bc, 10*21
|
||||||
|
ld d, TILE_FIELD_EMPTY
|
||||||
|
call UnsafeMemSet
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
BlitField::
|
||||||
|
; The first 14 rows can be blitted without checking for vram access.
|
||||||
|
ld de, wField + (1*10)
|
||||||
|
DEF row = 0
|
||||||
|
REPT 14
|
||||||
|
ld hl, FIELD_TOP_LEFT+(32*row)
|
||||||
|
REPT 10
|
||||||
|
ld a, [de]
|
||||||
|
ld [hl+], a
|
||||||
|
inc de
|
||||||
|
ENDR
|
||||||
|
DEF row += 1
|
||||||
|
ENDR
|
||||||
|
|
||||||
|
; The last 6 rows need some care.
|
||||||
|
REPT 6
|
||||||
|
ld hl, FIELD_TOP_LEFT+(32*row)
|
||||||
|
REPT 2
|
||||||
|
: ldh a, [rSTAT]
|
||||||
|
and STATF_LCD
|
||||||
|
cp STATF_HBL
|
||||||
|
jr z, :-
|
||||||
|
: ldh a, [rSTAT]
|
||||||
|
and STATF_LCD
|
||||||
|
cp STATF_HBL
|
||||||
|
jr nz, :-
|
||||||
|
REPT 5
|
||||||
|
ld a, [de]
|
||||||
|
ld [hl+], a
|
||||||
|
inc de
|
||||||
|
ENDR
|
||||||
|
ENDR
|
||||||
|
DEF row += 1
|
||||||
|
ENDR
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
ENDC
|
|
@ -7,17 +7,8 @@ INCLUDE "vendor/structs.asm"
|
||||||
INCLUDE "constants.asm"
|
INCLUDE "constants.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "General Game Variables", WRAM0
|
|
||||||
wLCDCCtr:: db
|
|
||||||
wEvenFrame:: db
|
|
||||||
wField:: ds (10*22)
|
|
||||||
|
|
||||||
|
|
||||||
SECTION "Important Game Variables", HRAM
|
SECTION "Important Game Variables", HRAM
|
||||||
hCtr:: ds 1
|
hCtr:: ds 1
|
||||||
hScore:: ds 6
|
|
||||||
hCLevel:: ds 6
|
|
||||||
hNLevel:: ds 6
|
|
||||||
|
|
||||||
|
|
||||||
; Waits for VRAM to be safe to access. (Includes hblank.)
|
; Waits for VRAM to be safe to access. (Includes hblank.)
|
||||||
|
@ -69,9 +60,9 @@ ENDM
|
||||||
|
|
||||||
; Sets all palettes to A.
|
; Sets all palettes to A.
|
||||||
MACRO set_all_palettes
|
MACRO set_all_palettes
|
||||||
set_bg_palette a
|
set_bg_palette
|
||||||
set_obj0_palette a
|
set_obj0_palette
|
||||||
set_obj1_palette a
|
set_obj1_palette
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
IF !DEF(INPUT_ASM)
|
||||||
|
DEF INPUT_ASM EQU 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Input Variables", HRAM
|
||||||
|
hUpState:: ds 1
|
||||||
|
hDownState:: ds 1
|
||||||
|
hLeftState:: ds 1
|
||||||
|
hRightState:: ds 1
|
||||||
|
hAState:: ds 1
|
||||||
|
hBState:: ds 1
|
||||||
|
hStartState:: ds 1
|
||||||
|
hSelectState:: ds 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Input Functions", ROM0
|
||||||
|
InputInit::
|
||||||
|
xor a, a
|
||||||
|
ldh [hUpState], a
|
||||||
|
ldh [hDownState], a
|
||||||
|
ldh [hLeftState], a
|
||||||
|
ldh [hRightState], a
|
||||||
|
ldh [hAState], a
|
||||||
|
ldh [hBState], a
|
||||||
|
ldh [hStartState], a
|
||||||
|
ldh [hSelectState], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
GetInput::
|
||||||
|
; Get the button state.
|
||||||
|
.btns
|
||||||
|
ld a, P1F_GET_BTN
|
||||||
|
ldh [rP1], a
|
||||||
|
ldh a, [rP1]
|
||||||
|
ldh a, [rP1]
|
||||||
|
ldh a, [rP1]
|
||||||
|
ldh a, [rP1]
|
||||||
|
ld b, a
|
||||||
|
|
||||||
|
.readA
|
||||||
|
bit 0, b ; A
|
||||||
|
jr nz, .clearA
|
||||||
|
.setA
|
||||||
|
ld a, 1
|
||||||
|
ldh [hAState], a
|
||||||
|
jr .readB
|
||||||
|
.clearA
|
||||||
|
xor a, a
|
||||||
|
ldh [hAState], a
|
||||||
|
|
||||||
|
.readB
|
||||||
|
bit 1, b ; B
|
||||||
|
jr nz, .clearB
|
||||||
|
.setB
|
||||||
|
ld a, 1
|
||||||
|
ldh [hBState], a
|
||||||
|
jr .readSelect
|
||||||
|
.clearB
|
||||||
|
xor a, a
|
||||||
|
ldh [hBState], a
|
||||||
|
|
||||||
|
.readSelect
|
||||||
|
bit 2, b ; Select
|
||||||
|
jr nz, .clearSelect
|
||||||
|
.setSelect
|
||||||
|
ld a, 1
|
||||||
|
ldh [hSelectState], a
|
||||||
|
jr .readStart
|
||||||
|
.clearSelect
|
||||||
|
xor a, a
|
||||||
|
ldh [hSelectState], a
|
||||||
|
|
||||||
|
.readStart
|
||||||
|
bit 3, b ; Start
|
||||||
|
jr nz, .clearStart
|
||||||
|
.setStart
|
||||||
|
ld a, 1
|
||||||
|
ldh [hStartState], a
|
||||||
|
jr .dpad
|
||||||
|
.clearStart
|
||||||
|
xor a, a
|
||||||
|
ldh [hStartState], a
|
||||||
|
|
||||||
|
|
||||||
|
; Get the dpad state.
|
||||||
|
.dpad
|
||||||
|
ld a, P1F_GET_DPAD
|
||||||
|
ldh [rP1], a
|
||||||
|
ldh a, [rP1]
|
||||||
|
ldh a, [rP1]
|
||||||
|
ldh a, [rP1]
|
||||||
|
ldh a, [rP1]
|
||||||
|
ld b, a
|
||||||
|
|
||||||
|
.readUp
|
||||||
|
bit 2, b ; Up
|
||||||
|
jr nz, .clearUp
|
||||||
|
.setUp
|
||||||
|
ld a, 1
|
||||||
|
ldh [hUpState], a
|
||||||
|
jr .readDown
|
||||||
|
.clearUp
|
||||||
|
xor a, a
|
||||||
|
ldh [hUpState], a
|
||||||
|
|
||||||
|
.readDown
|
||||||
|
bit 3, b ; Down
|
||||||
|
jr nz, .clearDown
|
||||||
|
.setDown
|
||||||
|
ld a, 1
|
||||||
|
ldh [hDownState], a
|
||||||
|
jr .readLeft
|
||||||
|
.clearDown
|
||||||
|
xor a, a
|
||||||
|
ldh [hDownState], a
|
||||||
|
|
||||||
|
.readLeft
|
||||||
|
bit 1, b ; Left
|
||||||
|
jr nz, .clearLeft
|
||||||
|
.setLeft
|
||||||
|
ldh a, [hLeftState]
|
||||||
|
cp $FF
|
||||||
|
jr z, .readRight
|
||||||
|
inc a
|
||||||
|
ldh [hLeftState], a
|
||||||
|
jr .readRight
|
||||||
|
.clearLeft
|
||||||
|
xor a, a
|
||||||
|
ldh [hLeftState], a
|
||||||
|
|
||||||
|
.readRight
|
||||||
|
bit 0, b ; Right
|
||||||
|
jr nz, .clearRight
|
||||||
|
.setRight
|
||||||
|
ldh a, [hRightState]
|
||||||
|
cp $FF
|
||||||
|
ret z
|
||||||
|
inc a
|
||||||
|
ldh [hRightState], a
|
||||||
|
ret
|
||||||
|
.clearRight
|
||||||
|
xor a, a
|
||||||
|
ldh [hRightState], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
ENDC
|
|
@ -2,7 +2,17 @@ IF !DEF(INTERRUPTS_ASM)
|
||||||
DEF INTERRUPTS_ASM EQU 1
|
DEF INTERRUPTS_ASM EQU 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Interrupt Variables", HRAM
|
||||||
|
hLCDCCtr:: ds 1
|
||||||
|
|
||||||
|
|
||||||
SECTION "Interrupt Initialization Functions", ROM0
|
SECTION "Interrupt Initialization Functions", ROM0
|
||||||
|
IntrInit::
|
||||||
|
xor a, a
|
||||||
|
ldh [hLCDCCtr], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
InitializeLCDCInterrupt::
|
InitializeLCDCInterrupt::
|
||||||
ld a, STATF_LYC
|
ld a, STATF_LYC
|
||||||
ldh [rSTAT], a
|
ldh [rSTAT], a
|
||||||
|
@ -18,7 +28,7 @@ InitializeLCDCInterrupt::
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
SECTION "LCDC Interrupt", ROM0[$0048]
|
SECTION "LCDC Interrupt", ROM0[INT_HANDLER_STAT]
|
||||||
LCDCInterrupt:
|
LCDCInterrupt:
|
||||||
push af
|
push af
|
||||||
push hl
|
push hl
|
||||||
|
@ -39,11 +49,11 @@ LCDCInterrupt_WaitUntilNotBusy:
|
||||||
ldh [rLYC], a
|
ldh [rLYC], a
|
||||||
|
|
||||||
; Check our interrupt counter
|
; Check our interrupt counter
|
||||||
ld a, [wLCDCCtr]
|
ldh a, [hLCDCCtr]
|
||||||
cp 21
|
cp 21
|
||||||
jp nz, LCDCInterrupt_End
|
jp nz, LCDCInterrupt_End
|
||||||
ld a, 255
|
ld a, 255
|
||||||
ld [wLCDCCtr], a
|
ldh [hLCDCCtr], a
|
||||||
ld a, 6
|
ld a, 6
|
||||||
ldh [rLYC], a
|
ldh [rLYC], a
|
||||||
ld a, 0
|
ld a, 0
|
||||||
|
@ -51,7 +61,7 @@ LCDCInterrupt_WaitUntilNotBusy:
|
||||||
|
|
||||||
LCDCInterrupt_End:
|
LCDCInterrupt_End:
|
||||||
inc a
|
inc a
|
||||||
ld [wLCDCCtr], a
|
ldh [hLCDCCtr], a
|
||||||
pop hl
|
pop hl
|
||||||
pop af
|
pop af
|
||||||
reti
|
reti
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
IF !DEF(LEVEL_ASM)
|
||||||
|
DEF LEVEL_ASM EQU 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Level Variables", WRAM0
|
||||||
|
wCLevel:: ds 6
|
||||||
|
wNLevel:: ds 6
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Level Functions", ROM0
|
||||||
|
LevelInit::
|
||||||
|
xor a, a
|
||||||
|
ld hl, wCLevel
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl], a
|
||||||
|
ld hl, wNLevel
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
ENDC
|
|
@ -0,0 +1,22 @@
|
||||||
|
IF !DEF(SCORE_ASM)
|
||||||
|
DEF SCORE_ASM EQU 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Score Variables", WRAM0
|
||||||
|
wScore:: ds 6
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Score Functions", ROM0
|
||||||
|
ScoreInit::
|
||||||
|
xor a, a
|
||||||
|
ld hl, wScore
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl+], a
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
ENDC
|
|
@ -249,92 +249,210 @@ SetNumberSpritePositions::
|
||||||
ld [hl], SCORE_BASE_Y
|
ld [hl], SCORE_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRScore2
|
ld hl, wSPRScore2
|
||||||
ld [hl], SCORE_BASE_Y
|
ld [hl], SCORE_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRScore3
|
ld hl, wSPRScore3
|
||||||
ld [hl], SCORE_BASE_Y
|
ld [hl], SCORE_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRScore4
|
ld hl, wSPRScore4
|
||||||
ld [hl], SCORE_BASE_Y
|
ld [hl], SCORE_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRScore5
|
ld hl, wSPRScore5
|
||||||
ld [hl], SCORE_BASE_Y
|
ld [hl], SCORE_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRScore6
|
ld hl, wSPRScore6
|
||||||
ld [hl], SCORE_BASE_Y
|
ld [hl], SCORE_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
ld a, DIGIT_BASE_X
|
ld a, DIGIT_BASE_X
|
||||||
ld hl, wSPRCLevel1
|
ld hl, wSPRCLevel1
|
||||||
ld [hl], CLEVEL_BASE_Y
|
ld [hl], CLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRCLevel2
|
ld hl, wSPRCLevel2
|
||||||
ld [hl], CLEVEL_BASE_Y
|
ld [hl], CLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRCLevel3
|
ld hl, wSPRCLevel3
|
||||||
ld [hl], CLEVEL_BASE_Y
|
ld [hl], CLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRCLevel4
|
ld hl, wSPRCLevel4
|
||||||
ld [hl], CLEVEL_BASE_Y
|
ld [hl], CLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRCLevel5
|
ld hl, wSPRCLevel5
|
||||||
ld [hl], CLEVEL_BASE_Y
|
ld [hl], CLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRCLevel6
|
ld hl, wSPRCLevel6
|
||||||
ld [hl], CLEVEL_BASE_Y
|
ld [hl], CLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
ld a, DIGIT_BASE_X
|
ld a, DIGIT_BASE_X
|
||||||
ld hl, wSPRNLevel1
|
ld hl, wSPRNLevel1
|
||||||
ld [hl], NLEVEL_BASE_Y
|
ld [hl], NLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRNLevel2
|
ld hl, wSPRNLevel2
|
||||||
ld [hl], NLEVEL_BASE_Y
|
ld [hl], NLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRNLevel3
|
ld hl, wSPRNLevel3
|
||||||
ld [hl], NLEVEL_BASE_Y
|
ld [hl], NLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRNLevel4
|
ld hl, wSPRNLevel4
|
||||||
ld [hl], NLEVEL_BASE_Y
|
ld [hl], NLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRNLevel5
|
ld hl, wSPRNLevel5
|
||||||
ld [hl], NLEVEL_BASE_Y
|
ld [hl], NLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld b, a
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
|
ld a, b
|
||||||
add a, 8
|
add a, 8
|
||||||
|
|
||||||
ld hl, wSPRNLevel6
|
ld hl, wSPRNLevel6
|
||||||
ld [hl], NLEVEL_BASE_Y
|
ld [hl], NLEVEL_BASE_Y
|
||||||
inc hl
|
inc hl
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
add a, 8
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld a, OAMF_PAL1
|
||||||
|
ld [hl], a
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
IF !DEF(TIME_ASM)
|
||||||
|
DEF TIME_ASM EQU 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Time Variables", HRAM
|
||||||
|
hEvenFrame:: ds 1
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Time Functions", ROM0
|
||||||
|
TimeInit::
|
||||||
|
xor a, a
|
||||||
|
ldh [hEvenFrame], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
HandleTimers::
|
||||||
|
ldh a, [hEvenFrame]
|
||||||
|
inc a
|
||||||
|
and 1
|
||||||
|
ldh [hEvenFrame], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
ENDC
|
79
src/main.asm
79
src/main.asm
|
@ -3,6 +3,11 @@ INCLUDE "memory.asm"
|
||||||
INCLUDE "interrupts.asm"
|
INCLUDE "interrupts.asm"
|
||||||
INCLUDE "sprites.asm"
|
INCLUDE "sprites.asm"
|
||||||
INCLUDE "rng.asm"
|
INCLUDE "rng.asm"
|
||||||
|
INCLUDE "input.asm"
|
||||||
|
INCLUDE "time.asm"
|
||||||
|
INCLUDE "score.asm"
|
||||||
|
INCLUDE "level.asm"
|
||||||
|
INCLUDE "field.asm"
|
||||||
INCLUDE "res/tiles.inc"
|
INCLUDE "res/tiles.inc"
|
||||||
INCLUDE "res/gameplay_map.inc"
|
INCLUDE "res/gameplay_map.inc"
|
||||||
|
|
||||||
|
@ -47,7 +52,10 @@ Main::
|
||||||
|
|
||||||
; Set up the palettes.
|
; Set up the palettes.
|
||||||
ld a, PALETTE_REGULAR
|
ld a, PALETTE_REGULAR
|
||||||
set_all_palettes
|
set_bg_palette
|
||||||
|
set_obj0_palette
|
||||||
|
ld a, PALETTE_LIGHTER_1
|
||||||
|
set_obj1_palette
|
||||||
|
|
||||||
; Get the timer going. It's used for RNG.
|
; Get the timer going. It's used for RNG.
|
||||||
xor a, a
|
xor a, a
|
||||||
|
@ -95,15 +103,15 @@ GameLoop::
|
||||||
call ApplyHold
|
call ApplyHold
|
||||||
|
|
||||||
ld hl, wSPRScore1
|
ld hl, wSPRScore1
|
||||||
ld de, hScore
|
ld de, wScore
|
||||||
call ApplyNumbers
|
call ApplyNumbers
|
||||||
|
|
||||||
ld hl, wSPRCLevel1
|
ld hl, wSPRCLevel1
|
||||||
ld de, hCLevel
|
ld de, wCLevel
|
||||||
call ApplyNumbers
|
call ApplyNumbers
|
||||||
|
|
||||||
ld hl, wSPRNLevel1
|
ld hl, wSPRNLevel1
|
||||||
ld de, hNLevel
|
ld de, wNLevel
|
||||||
call ApplyNumbers
|
call ApplyNumbers
|
||||||
|
|
||||||
GameLoopEnd:
|
GameLoopEnd:
|
||||||
|
@ -121,61 +129,10 @@ GameLoopEnd:
|
||||||
; *****************************************************************************
|
; *****************************************************************************
|
||||||
SECTION "Functions", ROM0
|
SECTION "Functions", ROM0
|
||||||
InitializeVariables:
|
InitializeVariables:
|
||||||
xor a, a
|
call TimeInit
|
||||||
ld [wLCDCCtr], a
|
call IntrInit
|
||||||
ld hl, wField
|
call InputInit
|
||||||
ld bc, 10*22
|
call ScoreInit
|
||||||
ld d, TILE_FIELD_EMPTY
|
call LevelInit
|
||||||
call UnsafeMemSet
|
call FieldInit
|
||||||
ld hl, hScore
|
|
||||||
ld bc, (6*3)
|
|
||||||
ld d, 0
|
|
||||||
call UnsafeMemSet
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
BlitField:
|
|
||||||
; The first 14 rows can be blitted without checking for vram access.
|
|
||||||
ld de, wField + (2*10)
|
|
||||||
DEF row = 0
|
|
||||||
REPT 14
|
|
||||||
ld hl, FIELD_TOP_LEFT+(32*row)
|
|
||||||
REPT 10
|
|
||||||
ld a, [de]
|
|
||||||
ld [hl+], a
|
|
||||||
inc de
|
|
||||||
ENDR
|
|
||||||
DEF row += 1
|
|
||||||
ENDR
|
|
||||||
|
|
||||||
; The last 6 rows need some care.
|
|
||||||
REPT 6
|
|
||||||
ld hl, FIELD_TOP_LEFT+(32*row)
|
|
||||||
REPT 2
|
|
||||||
: ldh a, [rSTAT]
|
|
||||||
and STATF_LCD
|
|
||||||
cp STATF_HBL
|
|
||||||
jr z, :-
|
|
||||||
: ldh a, [rSTAT]
|
|
||||||
and STATF_LCD
|
|
||||||
cp STATF_HBL
|
|
||||||
jr nz, :-
|
|
||||||
REPT 5
|
|
||||||
ld a, [de]
|
|
||||||
ld [hl+], a
|
|
||||||
inc de
|
|
||||||
ENDR
|
|
||||||
ENDR
|
|
||||||
DEF row += 1
|
|
||||||
ENDR
|
|
||||||
ret
|
|
||||||
|
|
||||||
GetInput:
|
|
||||||
ret
|
|
||||||
|
|
||||||
HandleTimers:
|
|
||||||
ld a, [wEvenFrame]
|
|
||||||
inc a
|
|
||||||
and 1
|
|
||||||
ld [wEvenFrame], a
|
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#Emulicious settings file
|
#Emulicious settings file
|
||||||
#Fri Oct 13 08:36:54 CEST 2023
|
#Fri Oct 13 11:18:40 CEST 2023
|
||||||
SouthPanelHeight=635
|
SouthPanelHeight=635
|
||||||
GameBoyErrorBreakpointMessage6=
|
GameBoyErrorBreakpointMessage6=
|
||||||
GameBoyErrorBreakpointMessage5=
|
GameBoyErrorBreakpointMessage5=
|
||||||
|
@ -184,7 +184,7 @@ GameBoyErrorBreakpointSuspend2=true
|
||||||
GameBoyErrorBreakpointSuspend1=true
|
GameBoyErrorBreakpointSuspend1=true
|
||||||
GameBoyErrorBreakpointSuspend0=true
|
GameBoyErrorBreakpointSuspend0=true
|
||||||
Scale=5.0
|
Scale=5.0
|
||||||
DebuggerMemorySelectedAddress=390
|
DebuggerMemorySelectedAddress=4
|
||||||
WindowEmuliciousWidth=816
|
WindowEmuliciousWidth=816
|
||||||
GameBoyErrorBreakpointSuspend20=true
|
GameBoyErrorBreakpointSuspend20=true
|
||||||
DataExecutionBreakpointCondition=
|
DataExecutionBreakpointCondition=
|
||||||
|
@ -217,8 +217,8 @@ WindowTilemapViewerHeight=744
|
||||||
GameBoyErrorBreakpointMessage20=
|
GameBoyErrorBreakpointMessage20=
|
||||||
WindowTileViewerWidth=467
|
WindowTileViewerWidth=467
|
||||||
MemoryTracerDisplayFileOffsetsForROM=true
|
MemoryTracerDisplayFileOffsetsForROM=true
|
||||||
WindowDebuggerY=189
|
WindowDebuggerY=170
|
||||||
WindowDebuggerX=1113
|
WindowDebuggerX=1172
|
||||||
Key37=-1
|
Key37=-1
|
||||||
Key36=-1
|
Key36=-1
|
||||||
WindowTileViewerOpen=false
|
WindowTileViewerOpen=false
|
||||||
|
@ -275,7 +275,7 @@ BankSwapAtPCBreakpointSuspend=true
|
||||||
Key20=-1
|
Key20=-1
|
||||||
WindowEmuliciousY=489
|
WindowEmuliciousY=489
|
||||||
WindowEmuliciousX=666
|
WindowEmuliciousX=666
|
||||||
DebuggerMemorySelectedTab=RAM
|
DebuggerMemorySelectedTab=HRAM
|
||||||
WindowDebuggerWidth=1481
|
WindowDebuggerWidth=1481
|
||||||
GameBoyErrorBreakpointMessage9=
|
GameBoyErrorBreakpointMessage9=
|
||||||
GameBoyErrorBreakpointMessage8=
|
GameBoyErrorBreakpointMessage8=
|
||||||
|
|
Loading…
Reference in New Issue