Moved flag reading to map
authorLukas Krickl <lukas@krickl.dev>
Wed, 4 Dec 2024 09:49:17 +0000 (10:49 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 4 Dec 2024 09:49:17 +0000 (10:49 +0100)
src/collision.s
src/map.s

index 4ecd53c8b09e1b4016210edd1e6b5bdf3c9b9791..6c8abec79b94e4bdf09a037d4167fd90a8859aa0 100644 (file)
@@ -106,13 +106,6 @@ collision_tile_table_check:
   ;   a = 0 -> no collision
   ;   a = 1 -> collision
 collision_tile:
-  call room_get_flag_ptr
-  ; hl = current tile flags 
-
-  ld a, [hl] ; load flags
-  ld d, a
   ld a, [ct_mask]
-  and a, d
-
-  ret
+  jp room_get_flag_masked
 
index d6e4409bfd7509a306b3ad46513a1db71a5d270b..ce43c6980f7002cdd30180a94846f8bcdd657746 100644 (file)
--- a/src/map.s
+++ b/src/map.s
@@ -247,6 +247,12 @@ room_get_flag_ptr:
   ;   a: the flag to set (flags | a)
   ;  de: y/x
 room_set_flag:
+  ld b, a
+  call room_get_flag_ptr
+  ld a, [hl]
+  or a, b
+  ld [hl], a
+
   ret
 
   ; unsets a tile position flag
@@ -256,7 +262,33 @@ room_set_flag:
   ;   a: the flag to set (flags ^ a)
   ;  de: y/x
 room_unset_flag:
-    ret
+  ld b, a
+  call room_get_flag_ptr
+  ld a, [hl]
+  xor a, b
+  ld [hl], a
+  ret
+
+  ; gets flags at a certain position
+  ; applies a mask
+  ; inputs:
+  ;     d : y pos 
+  ;     e : x pos
+  ;     a: mask
+  ; ct_mask: bit mask for flag to check (tile & mask)
+  ; returns:
+  ;   a: masked flag
+room_get_flag_masked:
+  ld b, a ; b = mask
+  call room_get_flag_ptr
+  ; hl = current tile flags 
+
+  ld a, [hl] ; load flags
+  ld d, a
+  ld a, b ; a= mask
+  ; ld a, [ct_mask]
+  and a, d
+  ret
 
   ; base room 
   ; this can be copied and modified