feat: gravity kind of works
parent
40c151a86b
commit
57b27449a4
189
main.asm
189
main.asm
|
@ -43,23 +43,42 @@ WaitVBlank:
|
|||
|
||||
; Reset positions
|
||||
ld hl, wMetaspritePosition.x
|
||||
ld a, 0
|
||||
ld a, $10
|
||||
ld [wMetaspritePosition.x], a
|
||||
ld a, $80
|
||||
ld a, $0
|
||||
ld [wMetaspritePosition.x + 1], a
|
||||
|
||||
ld hl, wMetaspritePosition.y
|
||||
ld a, 0
|
||||
ld a, $10
|
||||
ld [wMetaspritePosition.y], a
|
||||
ld a, $80
|
||||
ld a, $01
|
||||
ld [wMetaspritePosition.y + 1], a
|
||||
|
||||
ld hl, wMetaspritePosition.z
|
||||
ld a, 0
|
||||
ld a, $00
|
||||
ld [wMetaspritePosition.z], a
|
||||
ld a, 0
|
||||
ld a, $0
|
||||
ld [wMetaspritePosition.z + 1], a
|
||||
|
||||
; Reset velocity
|
||||
ld hl, wMetaspriteVelocity.x
|
||||
ld a, $0
|
||||
ld [wMetaspriteVelocity.x], a
|
||||
ld a, $0
|
||||
ld [wMetaspriteVelocity.x + 1], a
|
||||
|
||||
ld hl, wMetaspriteVelocity.y
|
||||
ld a, $0
|
||||
ld [wMetaspriteVelocity.y], a
|
||||
ld a, $0
|
||||
ld [wMetaspriteVelocity.y + 1], a
|
||||
|
||||
ld hl, wMetaspriteVelocity.z
|
||||
ld a, $0
|
||||
ld [wMetaspriteVelocity.z], a
|
||||
ld a, $0
|
||||
ld [wMetaspriteVelocity.z + 1], a
|
||||
|
||||
; Copy the tile data
|
||||
ld de, Tiles
|
||||
ld hl, $9000
|
||||
|
@ -91,10 +110,19 @@ WaitVBlank:
|
|||
; Enable interrupts
|
||||
ei
|
||||
|
||||
Main:
|
||||
Main::
|
||||
call ResetShadowOAM
|
||||
call UpdateJoypadState
|
||||
call HandleInput
|
||||
call HandlePhysics
|
||||
call HandleRender
|
||||
|
||||
halt
|
||||
nop
|
||||
|
||||
jp Main
|
||||
|
||||
HandleInput::
|
||||
ld a, [wJoypadState]
|
||||
bit PADB_LEFT, a
|
||||
jr nz, .leftend
|
||||
|
@ -151,46 +179,22 @@ Main:
|
|||
ld [wMetaspritePosition.y+1], a
|
||||
.downend:
|
||||
|
||||
ld a, [wJoypadState]
|
||||
ld a, [wJoypadPressed]
|
||||
bit PADB_A, a
|
||||
jr nz, .jumpend
|
||||
jr z, .jumpend
|
||||
|
||||
ld a, [wMetaspritePosition.z]
|
||||
add a, 16
|
||||
ld a, [wMetaspriteVelocity.z]
|
||||
sub a, $F0
|
||||
ld b, a
|
||||
ld [wMetaspritePosition.z], a
|
||||
ld a, [wMetaspritePosition.z+1]
|
||||
adc 0
|
||||
ld [wMetaspriteVelocity.z], a
|
||||
ld a, [wMetaspriteVelocity.z+1]
|
||||
sbc a, $00
|
||||
ld c, a
|
||||
ld [wMetaspritePosition.z+1], a
|
||||
|
||||
ld [wMetaspriteVelocity.z+1], a
|
||||
.jumpend:
|
||||
ret
|
||||
|
||||
ld a, [wJoypadState]
|
||||
bit PADB_B, a
|
||||
jr nz, .fallend
|
||||
|
||||
ld a, [wMetaspritePosition.z + 1]
|
||||
cp 0
|
||||
jr nz, .fall
|
||||
ld a, [wMetaspritePosition.z]
|
||||
cp 16
|
||||
jr nc, .fall
|
||||
ld a, 0
|
||||
ld [wMetaspritePosition.z], a
|
||||
jr .fallend
|
||||
|
||||
.fall:
|
||||
ld a, [wMetaspritePosition.z]
|
||||
sub a, 16
|
||||
ld b, a
|
||||
ld [wMetaspritePosition.z], a
|
||||
ld a, [wMetaspritePosition.z+1]
|
||||
sbc 0
|
||||
ld c, a
|
||||
ld [wMetaspritePosition.z+1], a
|
||||
.fallend:
|
||||
|
||||
HandleRender::
|
||||
; Render the player
|
||||
; load de
|
||||
ld a, [wMetaspritePosition.x]
|
||||
|
@ -202,12 +206,12 @@ Main:
|
|||
ld a, [wMetaspritePosition.z]
|
||||
ld c, a
|
||||
ld a, [wMetaspritePosition.y]
|
||||
sub a, c
|
||||
add a, c
|
||||
ld c, a
|
||||
ld a, [wMetaspritePosition.z + 1]
|
||||
ld b, a
|
||||
ld a, [wMetaspritePosition.y + 1]
|
||||
sbc a, b
|
||||
adc a, b
|
||||
ld b, a
|
||||
|
||||
ld hl, CatMetasprite
|
||||
|
@ -228,31 +232,61 @@ Main:
|
|||
|
||||
ld hl, ShadowMetasprite
|
||||
call RenderMetasprite
|
||||
|
||||
|
||||
ldh a, [hFrameCounter]
|
||||
inc a
|
||||
ldh [hFrameCounter], a
|
||||
|
||||
halt
|
||||
nop
|
||||
|
||||
jp Main
|
||||
|
||||
Memcopy::
|
||||
dec bc
|
||||
inc b
|
||||
inc c
|
||||
.loop:
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
HandlePhysics::
|
||||
|
||||
; Skip gravity if on ground
|
||||
ld a, [wMetaspritePosition.z]
|
||||
ld b, a
|
||||
ld a, [wMetaspritePosition.z + 1]
|
||||
or a, b
|
||||
cp 0
|
||||
jr z, .endGravity
|
||||
|
||||
; Apply gravity
|
||||
ld a, [wMetaspriteVelocity.z]
|
||||
add a, $02
|
||||
ld [wMetaspriteVelocity.z], a
|
||||
ld a, [wMetaspriteVelocity.z+1]
|
||||
adc a, $00
|
||||
ld [wMetaspriteVelocity.z+1], a
|
||||
.endGravity:
|
||||
|
||||
|
||||
; Calculate new z, place in bc
|
||||
ld a, [wMetaspriteVelocity.z]
|
||||
ld c, a
|
||||
ld a, [wMetaspritePosition.z]
|
||||
add c
|
||||
ld a, [wMetaspriteVelocity.z + 1]
|
||||
ld b, a
|
||||
ld a, [wMetaspritePosition.z + 1]
|
||||
adc b
|
||||
|
||||
; If z is greater than or equal to 0, pos/vel to 0
|
||||
jr nz, .endLanding1
|
||||
jr nc, .endLanding1
|
||||
.startLanding
|
||||
ld a, 0
|
||||
ld [wMetaspriteVelocity.z], a
|
||||
ld [wMetaspriteVelocity.z+1], a
|
||||
ld c, 0
|
||||
ld b, 0
|
||||
jr .endLanding
|
||||
.endLanding1
|
||||
nop
|
||||
.endLanding
|
||||
|
||||
; Update z position
|
||||
ld a, c
|
||||
ld [wMetaspritePosition.z], a
|
||||
ld a, b
|
||||
ld [wMetaspritePosition.z+1], a
|
||||
|
||||
ret
|
||||
|
||||
SECTION "Joypad Routine", ROM0
|
||||
UpdateJoypadState::
|
||||
ld hl, rP1
|
||||
ld [hl], P1F_GET_BTN
|
||||
|
@ -287,6 +321,20 @@ UpdateJoypadState::
|
|||
ld [wJoypadState], a
|
||||
ret
|
||||
|
||||
SECTION "MemCopy Routine", ROM0
|
||||
Memcopy::
|
||||
dec bc
|
||||
inc b
|
||||
inc c
|
||||
.loop:
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
SECTION "VBlank Interrupt", ROM0[$0040]
|
||||
VBlankInterrupt:
|
||||
|
@ -443,7 +491,7 @@ ShadowMetasprite:
|
|||
|
||||
SECTION "Position Vars", WRAM0
|
||||
; Q12.4 fixed-point X posiition
|
||||
wMetaspritePosition:
|
||||
wMetaspritePosition::
|
||||
.x:
|
||||
dw
|
||||
.y:
|
||||
|
@ -453,7 +501,12 @@ wMetaspritePosition:
|
|||
|
||||
; Q4.4 fixed-point velocity
|
||||
wMetaspriteVelocity::
|
||||
db
|
||||
.x:
|
||||
dw
|
||||
.y:
|
||||
dw
|
||||
.z:
|
||||
dw
|
||||
|
||||
SECTION "Joypad Vars", WRAM0
|
||||
wJoypadState:
|
||||
|
|
Loading…
Reference in New Issue