diff options
author | Astatin <[email protected]> | 2024-08-15 22:46:34 +0900 |
---|---|---|
committer | Astatin <astatin@redacted> | 2024-08-15 22:46:34 +0900 |
commit | c5ee7cfdd9ecb83bc1547a66ab1895685e49aaa4 (patch) | |
tree | 648bd418cb427c6f88a471bd46349aba8361f26c /map/generation.gbasm | |
parent | 16e0ec4460954b65f3b972fab00f3ad7527062ff (diff) |
Generate a single tunnel in dungeon generation
Diffstat (limited to 'map/generation.gbasm')
-rw-r--r-- | map/generation.gbasm | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/map/generation.gbasm b/map/generation.gbasm new file mode 100644 index 0000000..1bedffc --- /dev/null +++ b/map/generation.gbasm @@ -0,0 +1,168 @@ +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 + +Carve_Tunnel: ; X in A, Y in B + PUSH BC + PUSH HL + 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) + + OR (HL) + LD (BC), A + + POP HL + POP BC + RET + +Dungeon_Generation: + ; Head initialization + LD HL, $mem_dungeon_generation_heads + CALL =RNG_Step + AND $03 + ADD $01 + LD (HL+), A + LD A, $10 + LD (HL+), A + LD (HL+), A + + LD A, $20 + PUSH AF + + Dungeon_Generation.Step: + LD HL, $mem_dungeon_generation_heads + + Dungeon_Generation.Head_loop: + LD B, (HL) + LD A, B + + CP $00 + JR Z, =Dungeon_Generation.Head_loop.end + + CALL =RNG_Step + AND $07 + JR NZ, =Dungeon_Generation.Direction_Change.end + Dungeon_Generation.Direction_Change: + DEC B + CALL =RNG_Step + AND $01 + XOR B + XOR $02 + INC A + LD B, A + LD (HL), B + Dungeon_Generation.Direction_Change.end: + + INC HL + + LD C, (HL) + LD A, B + + CP $01 + JR NZ =Dungeon_Generation.Left.end + Dungeon_Generation.Left: + DEC C + Dungeon_Generation.Left.end: + + CP $02 + JR NZ =Dungeon_Generation.Right.end + Dungeon_Generation.Right: + INC C + Dungeon_Generation.Right.end: + + AND $e0 + + JR NZ, =Dungeon_Generation.DonT_Update_X + LD (HL), C + Dungeon_Generation.DonT_Update_X: + + INC HL + + LD C, (HL) + LD A, B + + CP $03 + JR NZ =Dungeon_Generation.Up.end + Dungeon_Generation.Up: + DEC C + Dungeon_Generation.Up.end: + + CP $04 + JR NZ =Dungeon_Generation.Down.end + Dungeon_Generation.Down: + INC C + Dungeon_Generation.Down.end: + + AND $e0 + + JR NZ, =Dungeon_Generation.DonT_Update_Y + LD (HL), C + Dungeon_Generation.DonT_Update_Y: + + DEC HL + LD A, (HL+) + LD C, A + LD A, (HL+) + LD B, A + LD A, C + CALL =Carve_Tunnel + JP =Dungeon_Generation.Head_loop + + Dungeon_Generation.Head_loop.end: + + POP AF + DEC A + PUSH AF + CP $00 + JR NZ, =Dungeon_Generation.Step + + POP AF + RET |