aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--bunny.gbasm19
-rw-r--r--definitions.gbasm12
-rw-r--r--main.gbasm7
-rw-r--r--map/generation.gbasm8
-rw-r--r--map/loading.gbasm17
-rw-r--r--map/objects.gbasm120
-rw-r--r--rng.gbasm4
-rw-r--r--sprites/stairs.pngbin0 -> 163 bytes
-rw-r--r--tiles.gbasm8
10 files changed, 180 insertions, 17 deletions
diff --git a/Makefile b/Makefile
index 05db7c9..19d678f 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ build/main.rom: main.gbasm
gbasm $< $@
run: build/main.rom
- gb -s 200 $<
+ gb $<
sameboy: build/main.rom
sameboy build/main.rom
diff --git a/bunny.gbasm b/bunny.gbasm
index 19009d7..9ba996b 100644
--- a/bunny.gbasm
+++ b/bunny.gbasm
@@ -9,14 +9,27 @@ Initialize_Bunny:
LD B, $c8
LD A, (BC)
+ LD D, A
+ INC BC
+ LD A, (BC)
+ INC A
+ CALL =RNG_Bound
+ ADD D
+
LD $mem_bunny_x, A
INC BC
- INC BC
LD A, (BC)
+ LD D, A
+ INC BC
+ LD A, (BC)
+ INC A
+ CALL =RNG_Bound
+ ADD D
LD $mem_bunny_y, A
+Fix_Bunny_screen:
LD A, $mem_bunny_x
SUB $05
LD $mem_viewport_x, A
@@ -175,9 +188,11 @@ Move_Bunny:
LD $mem_bunny_y, A
Move_Bunny.end:
+ LD A, C
+ LD $mem_map_loading_flags, A
RET
-Display_Bunny: ; X position in $81, Y position in $80
+Display_Bunny:
LD A, $mem_bunny_x_px
LD B, A
LD A, $mem_bunny_y_px
diff --git a/definitions.gbasm b/definitions.gbasm
index 655dfbd..745136a 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -26,6 +26,9 @@
.DEFINE mem_rng_state_1 ($c00a) ; 2 bytes
.DEFINE mem_rng_state_2 ($c00b) ; 2 bytes
+.DEFINE mem_map_loading_flags ($c00c)
+; bit 0: if the object should be reloaded (scroll or first load)
+
.DEFINE next_free_head_higher_bytes $c7
.DEFINE mem_next_free_head_lower_bytes ($c6ff)
.DEFINE mem_dungeon_generation_heads $c700 ; Takes the memory from c700 to c717
@@ -45,6 +48,15 @@
; sizey: u8,
; }
+.DEFINE mem_object_list $c900 ; Takes the memory from c900 to c97f
+; struct objects {
+; sprite: u8,
+; x: u8,
+; y: u8,
+; interaction: u16
+; _padding: u24
+; }
+
.DEFINE enum_direction_left $01
.DEFINE enum_direction_right $02
.DEFINE enum_direction_up $03
diff --git a/main.gbasm b/main.gbasm
index 3dc2427..7fc2cd1 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -5,6 +5,7 @@ Entrypoint:
CALL =Initialize_RNG
CALL =Dungeon_Generation
CALL =Initialize_Bunny
+ CALL =Initialize_Objects
CALL =Load_Tile
CALL =Load_Map
@@ -18,14 +19,18 @@ Entrypoint:
JP =Wait_for_VRAM.loop
VBLANK_Entrypoint:
+ CALL =Display_Bunny
+ CALL =Display_Objects
+
CALL =Pad_Button_Check
CALL =Move_Bunny
- CALL =Display_Bunny
+
RET
.INCLUDE "tiles.gbasm"
.INCLUDE "map/loading.gbasm"
.INCLUDE "map/generation.gbasm"
+.INCLUDE "map/objects.gbasm"
.INCLUDE "bunny.gbasm"
.INCLUDE "buttons.gbasm"
.INCLUDE "rng.gbasm"
diff --git a/map/generation.gbasm b/map/generation.gbasm
index 8b0181e..4f5296a 100644
--- a/map/generation.gbasm
+++ b/map/generation.gbasm
@@ -159,9 +159,9 @@ Generation_Head_Explosion:
LD A, C
LD (HL+), A
- LD L, C
+ LD L, B
Room_Generation.X_loop:
- LD H, B
+ LD H, C
Room_Generation.Y_loop:
PUSH BC
LD A, D
@@ -175,11 +175,11 @@ Generation_Head_Explosion:
DEC H
LD A, H
- CP $00
+ CP $ff
JR NZ, =Room_Generation.Y_loop
DEC L
LD A, L
- CP $00
+ CP $ff
JR NZ, =Room_Generation.X_loop
POP HL
diff --git a/map/loading.gbasm b/map/loading.gbasm
index 8b3f414..bb3410b 100644
--- a/map/loading.gbasm
+++ b/map/loading.gbasm
@@ -104,12 +104,7 @@ Load_Column: ; (+1/-1 direction in B)
POP AF
RET
-Load_Block: ; X in A, Y in B
- PUSH BC
- PUSH AF
- PUSH DE
-
- ; Construct Tile Map address from A and B in DE
+Construct_Tile_Address: ; Construct Tile Map address from A and B in DE
PUSH AF
PUSH BC
@@ -134,9 +129,19 @@ Load_Block: ; X in A, Y in B
LD A, D
OR $98
LD D, A
+
POP BC
POP AF
+ RET
+
+Load_Block: ; X in A, Y in B
+ PUSH BC
+ PUSH AF
+ PUSH DE
+
+ CALL =Construct_Tile_Address
+
PUSH AF
PUSH DE
diff --git a/map/objects.gbasm b/map/objects.gbasm
new file mode 100644
index 0000000..da80118
--- /dev/null
+++ b/map/objects.gbasm
@@ -0,0 +1,120 @@
+Initialize_Objects:
+ LD A, $mem_map_loading_flags
+ OR $01
+ LD $mem_map_loading_flags, A
+ LD HL, $mem_object_list
+ LD A, $60
+ LD (HL+), A
+
+ LD A, $mem_number_of_rooms
+ CALL =RNG_Bound
+ SLA A
+ SLA A
+ ADD $80
+ LD C, A
+
+ LD B, $c8
+
+ LD A, (BC)
+ LD D, A
+ INC BC
+ LD A, (BC)
+ INC A
+ CALL =RNG_Bound
+ ADD D
+
+ LD (HL+), A
+
+ INC BC
+
+ LD A, (BC)
+ LD D, A
+ INC BC
+ LD A, (BC)
+ INC A
+ CALL =RNG_Bound
+ ADD D
+ LD (HL+), A
+
+
+ LD BC, =Stairs_action
+ LD A, B
+ LD (HL+), A
+ LD A, C
+ LD (HL+), A
+ RET
+
+Stairs_action:
+ LD A, $00
+ LD $mem_bunny_x, A
+ LD A, $00
+ LD $mem_bunny_y, A
+ CALL =Fix_Bunny_screen
+ RET
+
+Display_Objects:
+ LD A, $mem_map_loading_flags
+ BIT 0, A
+ JR Z, =Display_Objects.End
+ LD HL, $mem_object_list
+ Display_Objects.loop:
+ LD A, (HL+)
+ CP $00
+ JR Z, =Display_Objects.next
+ LD C, A
+ LD A, (HL+)
+ LD D, A
+ LD A, $mem_viewport_x
+ SUB $03
+ CP D
+ JR NC, =Display_Objects.next
+ ADD $10
+ CP D
+ JR C, =Display_Objects.next
+
+ LD A, (HL+)
+ LD B, A
+ LD A, $mem_viewport_y
+ SUB $03
+ CP B
+ JR NC, =Display_Objects.next
+ ADD $10
+ CP B
+ JR C, =Display_Objects.next
+
+ LD A, D
+ CALL =Construct_Tile_Address
+
+ LD A, C
+ LD (DE), A
+
+ INC E
+ INC C
+
+ LD A, C
+ LD (DE), A
+
+ INC C
+
+ LD A, E
+ XOR $21
+ LD E, A
+
+ LD A, C
+ LD (DE), A
+
+ INC C
+ INC E
+
+ LD A, C
+ LD (DE), A
+
+ Display_Objects.next:
+ LD A, L
+ AND $f8
+ ADD $08
+ LD L, A
+ CP $80
+ JR NZ, =Display_Objects.loop
+ Display_Objects.End:
+ RET
diff --git a/rng.gbasm b/rng.gbasm
index 5a45286..00d3cd5 100644
--- a/rng.gbasm
+++ b/rng.gbasm
@@ -7,9 +7,9 @@ Debug_RNG:
RET
Initialize_RNG:
- LD A, $0c
+ LD A, $15 ; $0c
LD $mem_rng_state_1, A
- LD A, $15
+ LD A, $15 ; $15
LD $mem_rng_state_2, A
RET
diff --git a/sprites/stairs.png b/sprites/stairs.png
new file mode 100644
index 0000000..a2f8cae
--- /dev/null
+++ b/sprites/stairs.png
Binary files differ
diff --git a/tiles.gbasm b/tiles.gbasm
index faeda8d..8c7dc15 100644
--- a/tiles.gbasm
+++ b/tiles.gbasm
@@ -1,4 +1,5 @@
BG_Tile_Image_Data:
+ ; Trees tileset
.DB $07, $07, $1c, $1f, $38, $37, $3a, $27, $64, $6f, $41, $7f, $47, $78, $4d, $7d
.DB $f0, $f0, $b0, $d0, $38, $f8, $8c, $7c, $86, $fe, $be, $c6, $c2, $ee, $c2, $ee
.DB $70, $7f, $22, $3f, $6d, $73, $58, $6f, $6d, $5a, $6d, $7d, $3f, $3f, $00, $00
@@ -64,6 +65,11 @@ BG_Tile_Image_Data:
.DB $70, $7f, $82, $ff, $2d, $d3, $58, $af, $6d, $1a, $cc, $bd, $a2, $ff, $37, $e3
.DB $13, $ff, $76, $df, $35, $ba, $48, $fd, $69, $d7, $c1, $ef, $1c, $fb, $f0, $27
+ ; Stairs
+ .DB $ff, $ff, $d5, $ff, $aa, $ff, $d5, $ff, $ab, $ff, $df, $ff, $b1, $f1, $f1, $f1
+ .DB $ff, $ff, $5f, $ff, $b1, $f1, $f1, $f1, $11, $11, $17, $11, $3f, $11, $ff, $11
+ .DB $9f, $91, $ff, $91, $ff, $91, $ff, $91, $ff, $91, $fd, $93, $f1, $9f, $ff, $ff
+ .DB $ff, $11, $ff, $11, $ff, $11, $f1, $1f, $91, $7f, $11, $ff, $11, $ff, $ff, $ff
OBJ_Tile_Image_Data:
; Bunny Side
@@ -110,7 +116,7 @@ Load_Tile:
CALL =Load_Number_Font
LD HL, $9200
LD DE, =BG_Tile_Image_Data
- LD BC, $0400
+ LD BC, $0440
CALL =memcpy
RET