; tile flags for the room
base_room_flags:
.db RF_WALL, RF_WALL, RF_WALL, RF_WALL, 0, 0, RF_WALL, RF_WALL, RF_WALL, RF_WALL
+.db RF_WALL, 0, 0, 0, 0, 0, 0, 0, 0, RF_WALL
+.db RF_WALL, 0, 0, 0, 0, 0, 0, 0, 0, RF_WALL
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+.db RF_WALL, 0, 0, 0, 0, 0, 0, 0, 0, RF_WALL
+.db RF_WALL, 0, 0, 0, 0, 0, 0, 0, 0, RF_WALL
.db RF_WALL, RF_WALL, RF_WALL, RF_WALL, 0, 0, RF_WALL, RF_WALL, RF_WALL, RF_WALL
ret
+ ; performs a simple collision check
+ ; inputs:
+ ; $1: collision table
+ ; hl: y/x coordinate
+ ; returns:
+ ; z/nz -> collision hit or not
+#macro player_collision_check
+ ; check collision
+ ; 1) save registers
+ push hl
+ push de
+
+ ; 2) hl = player_y already
+ ; 3) load correct collision points
+ ld de, $1
+ call collision_tile_table_check
+ pop de
+ pop hl
+
+ cp a, 0
+#endmacro
+
; update the player
; players do not behave like regular actors
; and are not allocate to the regular
ld a, [hl]
inc a
ld [hl], a
+
+
+ player_collision_check collision_player_bot
+ jr z, @no_collision_up REL
+ ld a, [hl]
+ dec a
+ ld [hl], a
+@no_collision_down:
+
@notdown:
input_held BTNUP
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
+
+ player_collision_check collision_player_top
jr z, @no_collision_up REL
ld a, [hl]
inc a