diff options
author | Astatin <[email protected]> | 2024-08-15 16:38:19 +0900 |
---|---|---|
committer | Astatin <astatin@redacted> | 2024-08-15 16:38:19 +0900 |
commit | 16e0ec4460954b65f3b972fab00f3ad7527062ff (patch) | |
tree | 352401c64d31c7779a991ef58b9bfd645f5573e8 | |
parent | f9f115384757135fa8488bd43eb3e5e91cc243d9 (diff) |
Displaying pre-generated dungeon
-rw-r--r-- | bunny.gbasm | 12 | ||||
-rw-r--r-- | definitions.gbasm | 18 | ||||
-rw-r--r-- | init.gbasm | 2 | ||||
-rw-r--r-- | main.gbasm | 6 | ||||
-rw-r--r-- | map.gbasm | 242 | ||||
-rw-r--r-- | tiles.gbasm | 13 | ||||
-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 @@ -1,3 +1,5 @@ +.DB $01, $02, $04, $08, $10, $20, $40, $80 + .PADTO 0x0040 VBlank: CALL =VBLANK_Entrypoint @@ -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" @@ -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 + |