aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-08-15 16:38:19 +0900
committerAstatin <astatin@redacted>2024-08-15 16:38:19 +0900
commit16e0ec4460954b65f3b972fab00f3ad7527062ff (patch)
tree352401c64d31c7779a991ef58b9bfd645f5573e8
parentf9f115384757135fa8488bd43eb3e5e91cc243d9 (diff)
Displaying pre-generated dungeon
-rw-r--r--bunny.gbasm12
-rw-r--r--definitions.gbasm18
-rw-r--r--init.gbasm2
-rw-r--r--main.gbasm6
-rw-r--r--map.gbasm242
-rw-r--r--tiles.gbasm13
-rw-r--r--utils.gbasm (renamed from print.gbasm)14
7 files changed, 117 insertions, 190 deletions
diff --git a/bunny.gbasm b/bunny.gbasm
index ff2aa99..a297c7e 100644
--- a/bunny.gbasm
+++ b/bunny.gbasm
@@ -1,12 +1,16 @@
Initialize_Bunny:
- LD A, $05
+ LD A, $10
LD $mem_bunny_x, A
- LD A, $04
+ LD A, $10
LD $mem_bunny_y, A
- LD A, $08
+ LD A, $b8
LD $reg_viewport_x, A
- LD A, $08
+ LD A, $c8
LD $reg_viewport_y, A
+ LD A, $0b
+ LD $mem_viewport_x, A
+ LD A, $0c
+ LD $mem_viewport_y, A
LD A, $50
LD $mem_bunny_x_px, A
LD A, $40
diff --git a/definitions.gbasm b/definitions.gbasm
index 88c1e5c..f6b757e 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -23,23 +23,7 @@
.DEFINE mem_rng_state_1 ($c00a) ; 2 bytes
.DEFINE mem_rng_state_2 ($c00b) ; 2 bytes
-.DEFINE mem_room_number ($c7ff) ; AND 0xf0 >> 8 gives the number of rooms and AND 0xf gives the number of corridors
-.DEFINE mem_room_array $c800 ; Takes the memory from c800 to c840
-.DEFINE mem_corridors_array $c840 ; Takes the memory from c840 to c8a0
-; room = struct {
-; x1: u8
-; x2: u8
-; y1: u8
-; y2: u8
-; } 4bytes
-; corridor = struct {
-; orientation: bool
-; start u8
-; end u8
-; position u8
-; cut: u8
-; _padding: u24
-; } 8bytes
+.DEFINE mem_dungeon_map $c800 ; Takes the memory from c800 to c87f
.DEFINE enum_direction_left $01
.DEFINE enum_direction_right $02
diff --git a/init.gbasm b/init.gbasm
index 79d09f6..8483d4a 100644
--- a/init.gbasm
+++ b/init.gbasm
@@ -1,3 +1,5 @@
+.DB $01, $02, $04, $08, $10, $20, $40, $80
+
.PADTO 0x0040
VBlank:
CALL =VBLANK_Entrypoint
diff --git a/main.gbasm b/main.gbasm
index c983831..a315d48 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -2,10 +2,10 @@
.INCLUDE "init.gbasm"
Entrypoint:
- CALL =Initialize_Room
+ CALL =Initialize_Dungeon
+ CALL =Initialize_Bunny
CALL =Load_Tile
CALL =Load_Map
- CALL =Initialize_Bunny
CALL =Initialize_RNG
; LCDC
@@ -25,8 +25,8 @@ VBLANK_Entrypoint:
RET
.INCLUDE "tiles.gbasm"
-.INCLUDE "print.gbasm"
.INCLUDE "map.gbasm"
.INCLUDE "bunny.gbasm"
.INCLUDE "buttons.gbasm"
.INCLUDE "rng.gbasm"
+.INCLUDE "utils.gbasm"
diff --git a/map.gbasm b/map.gbasm
index a294eef..d664203 100644
--- a/map.gbasm
+++ b/map.gbasm
@@ -1,6 +1,14 @@
Load_Map:
- LD C, $fd
- LD B, $fd
+ LD A, $mem_viewport_x
+ SUB $02
+ LD C, A
+ ADD $10
+ LD E, A
+ LD A, $mem_viewport_y
+ SUB $02
+ LD B, A
+ ADD $10
+ LD D, A
Load_Map.For_Y:
Load_Map.For_X:
LD A, C
@@ -8,12 +16,12 @@ Load_Map:
INC C
LD A, C
- CP $0d
+ CP E
JR NZ, =Load_Map.For_X
INC B
LD A, B
- CP $0d
+ CP D
JR NZ, =Load_Map.For_Y
RET
@@ -96,7 +104,7 @@ Load_Column: ; (+1/-1 direction in B)
POP AF
RET
-Load_Block: ; X in A, Y in B (X and B being AND with 0x0f)
+Load_Block: ; X in A, Y in B
PUSH BC
PUSH AF
PUSH DE
@@ -228,154 +236,82 @@ Load_Block: ; X in A, Y in B (X and B being AND with 0x0f)
POP BC
RET
-; Is_Solid: ; X in A, Y in B, Result A
-; PUSH BC
-; PUSH DE
-; PUSH HL
-; LD C, A
-;
-; LD D, $00 ; Constructed room number
-; LD E, $00 ; Depth
-; PUSH DE
-;
-; Is_Solid.Corridor.loop:
-; LD HL, $mem_corridors_array
-; POP DE
-; LD A, D
-; PUSH DE
-; SLA A
-; SLA A
-; SLA A
-; OR L
-; LD L, A
-;
-; LD A, (HL+)
-; CP $00 ; 0 is horizontal
-; JR Z, =Is_Solid.Corridor.horizontal
-;
-; Is_Solid.Corridor.vertical:
-; JR =Is_Solid.Corridor.next
-;
-; Is_Solid.Corridor.horizontal:
-; LD A, (HL+)
-; LD D, A
-; LD A, (HL+)
-; LD E, A
-; LD A, (HL+)
-; CP B
-; JR NZ, =Is_Solid.Corridor.room_update
-; LD C, A
-; CP D
-; JR C, =Is_Solid.Corridor.room_update
-; CP E
-; JR C, =Is_Solid.NotSolid
-;
-; Is_Solid.Corridor.room_update:
-; LD A, (HL+)
-; CP C
-; LD A, $00
-; ADC $00
-; POP DE
-; SLA D
-; OR A
-; LD D, A
-; PUSH DE
-;
-; JR =Is_Solid.Corridor.next
-;
-; Is_Solid.Corridor.next:
-; POP DE
-; INC E
-; LD A, E
-; PUSH DE
-; CP $04
-; JR NZ =Is_Solid.Corridor.loop
-;
-; POP DE
-; LD A, $01
-; JR =Is_Solid.End
-;
-; Is_Solid.NotSolid:
-; POP DE
-; LD A, $00
-; Is_Solid.End:
-;
-; POP BC
-; POP DE
-; POP HL
-; RET
-
-Initialize_Room:
- LD HL, $mem_room_array
- LD A, $00
- LD (HL+), A
- LD A, $20
- LD (HL+), A
- LD A, $00
- LD (HL+), A
- LD A, $20
- LD (HL+), A
- RET
+Initial_dungeon:
+ .DB $00, $00, $00, $00,
+ .DB $00, $00, $00, $00,
+ .DB $00, $00, $00, $00,
+ .DB $00, $00, $00, $00,
+ .DB $00, $00, $00, $00,
+ .DB $00, $00, $00, $00,
+ .DB $00, $00, $00, $00,
+ .DB $03, $e0, $00, $00,
+ .DB $02, $20, $00, $00,
+ .DB $02, $20, $00, $00,
+ .DB $02, $20, $00, $00,
+ .DB $02, $20, $00, $00,
+ .DB $02, $20, $00, $00,
+ .DB $0e, $20, $00, $00,
+ .DB $3f, $20, $00, $00,
+ .DB $3f, $20, $00, $00,
+ .DB $3f, $3f, $80, $00,
+ .DB $3f, $00, $80, $00,
+ .DB $3f, $00, $80, $00,
+ .DB $3f, $00, $80, $00,
+ .DB $3f, $00, $80, $00,
+ .DB $3f, $00, $80, $00,
+ .DB $00, $01, $f8, $00,
+ .DB $00, $01, $f8, $00,
+ .DB $00, $01, $f8, $00,
+ .DB $00, $01, $f8, $00,
+ .DB $00, $01, $f8, $00,
+ .DB $00, $01, $ff, $80,
+ .DB $00, $01, $f8, $80,
+ .DB $00, $01, $f8, $80,
+ .DB $00, $00, $ff, $80,
+ .DB $00, $00, $00, $00,
+
+Initialize_Dungeon:
+ LD HL, $mem_dungeon_map
+ LD DE, =Initial_dungeon
+ LD BC, $0100
+ JP =memcpy
+
Is_Solid: ; X in A, Y in B, Result A
-; AND $0f
-; JR Z, =Is_Solid.Solid
-; LD A, B
-; AND $07
-; JR Z, =Is_Solid.Solid
-;
-;
-; Is_Solid.NonSolid:
-; LD A, $00
-; JR =Is_Solid.End
-;
-; Is_Solid.Solid:
-; LD A, $01
-;
-; Is_Solid.End:
-; RET
- PUSH BC
- PUSH DE
- PUSH HL
-
- LD C, A
- LD DE, $mem_room_array
-
- Is_Solid.room_loop:
- LD H, D
- LD L, E
-
- LD A, (HL+)
- CP C
- JR NC, =Is_Solid.room_loop.next
-
- LD A, (HL+)
- CP C
- JR C, =Is_Solid.room_loop.next
-
- LD A, (HL+)
- CP B
- JR NC, =Is_Solid.room_loop.next
-
- LD A, (HL+)
- CP B
- JR NC, =Is_Solid.NonSolid
-
- Is_Solid.room_loop.next:
- LD A, $04
- ADD E
- LD E, A
- CP $40
- JR NZ, =Is_Solid.room_loop
-
- LD A, $01
- JR =Is_Solid.End
-
- Is_Solid.NonSolid:
- LD A, $00
-
- Is_Solid.End:
- POP HL
- POP DE
- POP BC
+ PUSH BC
+
+ CP $20
+ JR NC, =Is_Solid.Solid
+
+ LD C, A
+ LD A, B
+ CP $20
+ JR NC, =Is_Solid.Solid
+ LD A, C
+
+ LD H, $00
+ CP $10
+ RL B
+ AND $0f
+ CP $08
+ RL B
+ AND $07
+ LD L, A
+
+ LD C, B
+ LD B, $c8
+ LD A, (BC)
+
+ AND (HL)
+ CP $01
+ LD A, $00
+ RL A
+
+ POP BC
RET
+
+ Is_Solid.Solid:
+ LD A, $01
+ POP BC
+
+ RET
diff --git a/tiles.gbasm b/tiles.gbasm
index 81a8a10..b66222c 100644
--- a/tiles.gbasm
+++ b/tiles.gbasm
@@ -102,19 +102,6 @@ Number_Font_Data:
.DB $00, $7e, $60, $7c, $60, $60, $7e, $00 ; E
.DB $00, $7e, $60, $7c, $60, $60, $60, $00 ; F
-memcpy: ; src = DE, dest = HL, n = BC
- Load_Tile.loop0:
- LD A, (DE)
- LD (HL+), A
- INC DE
- DEC BC
- XOR A
- CP B
- JR NZ =Load_Tile.loop0
- CP C
- JR NZ =Load_Tile.loop0
- RET
-
Load_Tile:
LD HL, $8020
LD DE, =OBJ_Tile_Image_Data
diff --git a/print.gbasm b/utils.gbasm
index e5bb898..2c8ef2b 100644
--- a/print.gbasm
+++ b/utils.gbasm
@@ -1,3 +1,16 @@
+memcpy: ; src = DE, dest = HL, n = BC
+ Load_Tile.loop0:
+ LD A, (DE)
+ LD (HL+), A
+ INC DE
+ DEC BC
+ XOR A
+ CP B
+ JR NZ =Load_Tile.loop0
+ CP C
+ JR NZ =Load_Tile.loop0
+ RET
+
Print_8bit: ; Number in A, Memory Tilemap position in HL
PUSH AF
PUSH BC
@@ -16,3 +29,4 @@ Print_8bit: ; Number in A, Memory Tilemap position in HL
POP BC
POP AF
RET
+