From 659ba625c1d4f9dae7c0200c2ff188669f35274a Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Fri, 18 Oct 2024 20:25:43 +0200 Subject: [PATCH] wip: collision with tiles --- src/collision.s | 58 +++++++++++++++++++++++++++++-------------------- src/player.s | 21 ++++++++++++++++++ 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/src/collision.s b/src/collision.s index 7d1920c..93192b8 100644 --- a/src/collision.s +++ b/src/collision.s @@ -22,7 +22,7 @@ .db $1, $2 #endmacro -collision_player: +collision_player_top: col_head 1 ; center left col_point 0, 0 @@ -49,33 +49,45 @@ collision_tile_table_check: ld a, [de] ; load loop counter inc de ; de + 1 = first point y coordinate @loop: - push af - push de - - ld a, [de] - ld l, a - ld a, [ct_poy] - add a, l ; a = y + collision y offset - inc de - - ld a, [de] - ld h, a - ld a, [ct_pox] - add a, h ; a = x + collision x offset + push af + + ld a, [de] + ld l, a + ld a, [ct_poy] + add a, l ; a = y + collision y offset + ld l, a ; store y result in l for now + inc de ; de++ == x pos + + ld a, [de] + ld h, a + ld a, [ct_pox] + add a, h ; a = x + collision x offset + inc de ; de++ == next y + push de ; save de for next iteratin + + ld d, l ; d = y + ld e, a ; e = x + + call collision_tile + cp a, 0 + jr nz, @done REL - ld d, l - ld e, h - - call collision_tile + pop de + pop af - pop af - pop de - - dec a ; a-- - cp a, 0 ; again if not 0 + dec a ; a-- + cp a, 0 ; again if not 0 jp nz, @loop ret +@done: + ; we need to pop before ret! + ; the register values + ; do not matter too much at this point + ; but a needs to be preserved + pop de + pop de + ret ; checks a point ; with a map's meta tile diff --git a/src/player.s b/src/player.s index 7a1ed33..30eb25f 100644 --- a/src/player.s +++ b/src/player.s @@ -73,6 +73,27 @@ player_update: ld a, [hl] dec a ld [hl], a + + ; check collision + ; 1) save registers + push hl + push de + + ; 2) hl = player_y already + ; 3) load correct collision points + ld de, collision_player_top + call collision_tile_table_check + pop de + pop hl + + cp a, 0 + jr z, @no_collision_up REL + ld a, [hl] + inc a + ld [hl], a +@no_collision_up: + + @notup: ; store y in d -- 2.30.2