diff options
author | Astatin <[email protected]> | 2024-08-20 19:04:52 +0900 |
---|---|---|
committer | Astatin <astatin@redacted> | 2024-08-20 19:04:52 +0900 |
commit | 358e97cc2628d4617543d20d2c40111699f067d6 (patch) | |
tree | debc43b063bf995cc3139098f780193d5c73ba87 | |
parent | c5ee7cfdd9ecb83bc1547a66ab1895685e49aaa4 (diff) |
Random walker mitosis + Add rooms at the end of random walk
-rw-r--r-- | bunny.gbasm | 4 | ||||
-rw-r--r-- | definitions.gbasm | 4 | ||||
-rw-r--r-- | map/generation.gbasm | 200 | ||||
-rw-r--r-- | rng.gbasm | 2 |
4 files changed, 158 insertions, 52 deletions
diff --git a/bunny.gbasm b/bunny.gbasm index a297c7e..702b464 100644 --- a/bunny.gbasm +++ b/bunny.gbasm @@ -55,7 +55,7 @@ Move_Bunny: CALL =Is_Solid CP $00 - JR NZ, =Move_Bunny.collision + ; JR NZ, =Move_Bunny.collision LD B, D @@ -85,7 +85,7 @@ Move_Bunny: CALL =Is_Solid CP $00 - JR NZ, =Move_Bunny.collision + ; JR NZ, =Move_Bunny.collision LD B, D diff --git a/definitions.gbasm b/definitions.gbasm index 2df133f..c1741d4 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -11,7 +11,7 @@ .DEFINE OAM_start $FE00 .DEFINE dungeon_generation_step $20 -.DEFINE intial_duplication_probablity $2 +.DEFINE intial_duplication_probablity $02 .DEFINE mem_bunny_x_px ($c000) .DEFINE mem_bunny_y_px ($c001) @@ -26,6 +26,8 @@ .DEFINE mem_rng_state_1 ($c00a) ; 2 bytes .DEFINE mem_rng_state_2 ($c00b) ; 2 bytes +.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 ; struct head { ; direction: u8 (really u3 but padding), diff --git a/map/generation.gbasm b/map/generation.gbasm index 1bedffc..3efe87f 100644 --- a/map/generation.gbasm +++ b/map/generation.gbasm @@ -1,46 +1,15 @@ -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 +Carve_Map: ; X in C, Y in B PUSH BC PUSH HL + + LD A, C + AND $e0 + JR NZ, =Carve_Map.end + + LD A, B + AND $e0 + JR NZ, =Carve_Map.end + LD A, C LD H, $00 @@ -59,22 +28,124 @@ Carve_Tunnel: ; X in A, Y in B OR (HL) LD (BC), A + Carve_Map.end: + POP HL POP BC RET +Generation_Head_Mitosis: + PUSH HL + PUSH BC + + LD A, $mem_next_free_head_lower_bytes + LD C, A + + LD A, (HL+) + + DEC A + XOR $02 + LD B, A + CALL =RNG_Step + AND $01 + XOR B + INC A + + LD B, $next_free_head_higher_bytes + + LD (BC), A + INC BC + + LD A, (HL+) + LD (BC), A + INC BC + + LD A, (HL+) + LD (BC), A + INC BC + + LD A, C + LD $mem_next_free_head_lower_bytes, A + + SLA E + SLA E + + POP BC + POP HL + RET + +Generation_Head_Explosion: + PUSH HL + + INC HL + LD A, (HL+) + LD E, A + + LD A, (HL+) + LD D, A + + CALL =RNG_Step + AND $03 + ADD $06 + LD B, A + SRA A + XOR $ff + INC A + ADD E + LD E, A + + CALL =RNG_Step + AND $03 + ADD $06 + LD C, A + SRA A + XOR $ff + INC A + ADD D + LD D, A + + LD L, C + Room_Generation.X_loop: + LD H, B + Room_Generation.Y_loop: + PUSH BC + LD A, D + ADD H + LD B, A + LD A, E + ADD L + LD C, A + CALL =Carve_Map + POP BC + + DEC H + LD A, H + CP $00 + JR NZ, =Room_Generation.Y_loop + DEC L + LD A, L + CP $00 + JR NZ, =Room_Generation.X_loop + + POP HL + RET + Dungeon_Generation: ; Head initialization LD HL, $mem_dungeon_generation_heads CALL =RNG_Step AND $03 - ADD $01 + INC A LD (HL+), A LD A, $10 LD (HL+), A LD (HL+), A - LD A, $20 + LD E, $intial_duplication_probablity + LD A, L + LD $mem_next_free_head_lower_bytes, A + + LD A, $40 PUSH AF Dungeon_Generation.Step: @@ -87,6 +158,19 @@ Dungeon_Generation: CP $00 JR Z, =Dungeon_Generation.Head_loop.end + LD A, E + CP $00 + JR Z, =Dungeon_Generation.Head_Mitosis.end + + DEC A + LD C, A + CALL =RNG_Step + AND C + CP $00 + CALL Z, =Generation_Head_Mitosis + + Dungeon_Generation.Head_Mitosis.end: + CALL =RNG_Step AND $07 JR NZ, =Dungeon_Generation.Direction_Change.end @@ -106,18 +190,19 @@ Dungeon_Generation: LD C, (HL) LD A, B - CP $01 + CP $enum_direction_left JR NZ =Dungeon_Generation.Left.end Dungeon_Generation.Left: DEC C Dungeon_Generation.Left.end: - CP $02 + CP $enum_direction_right JR NZ =Dungeon_Generation.Right.end Dungeon_Generation.Right: INC C Dungeon_Generation.Right.end: + LD A, C AND $e0 JR NZ, =Dungeon_Generation.DonT_Update_X @@ -129,18 +214,19 @@ Dungeon_Generation: LD C, (HL) LD A, B - CP $03 + CP $enum_direction_up JR NZ =Dungeon_Generation.Up.end Dungeon_Generation.Up: DEC C Dungeon_Generation.Up.end: - CP $04 + CP $enum_direction_down JR NZ =Dungeon_Generation.Down.end Dungeon_Generation.Down: INC C Dungeon_Generation.Down.end: + LD A, C AND $e0 JR NZ, =Dungeon_Generation.DonT_Update_Y @@ -153,7 +239,7 @@ Dungeon_Generation: LD A, (HL+) LD B, A LD A, C - CALL =Carve_Tunnel + CALL =Carve_Map JP =Dungeon_Generation.Head_loop Dungeon_Generation.Head_loop.end: @@ -165,4 +251,22 @@ Dungeon_Generation: JR NZ, =Dungeon_Generation.Step POP AF + + LD HL, $mem_dungeon_generation_heads + + Dungeon_Generation.Head_explosion_loop: + LD B, (HL) + LD A, B + + CP $00 + JR Z, =Dungeon_Generation.Head_explosion_loop.end + + CALL =Generation_Head_Explosion + INC HL + INC HL + INC HL + JR =Dungeon_Generation.Head_explosion_loop + + Dungeon_Generation.Head_explosion_loop.end: + RET @@ -7,7 +7,7 @@ Debug_RNG: RET Initialize_RNG: - LD A, $42 + LD A, $43 LD $mem_rng_state_1, A LD A, $15 LD $mem_rng_state_2, A |