diff options
-rw-r--r-- | bunny.gbasm | 46 | ||||
-rw-r--r-- | definitions.gbasm | 10 | ||||
-rw-r--r-- | map/generation.gbasm | 72 | ||||
-rw-r--r-- | rng.gbasm | 15 | ||||
-rw-r--r-- | utils.gbasm | 65 |
5 files changed, 190 insertions, 18 deletions
diff --git a/bunny.gbasm b/bunny.gbasm index 702b464..19009d7 100644 --- a/bunny.gbasm +++ b/bunny.gbasm @@ -1,16 +1,42 @@ Initialize_Bunny: - LD A, $10 + 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 $mem_bunny_x, A - LD A, $10 + + INC BC + INC BC + + LD A, (BC) LD $mem_bunny_y, A - LD A, $b8 - LD $reg_viewport_x, A - LD A, $c8 - LD $reg_viewport_y, A - LD A, $0b + + LD A, $mem_bunny_x + SUB $05 LD $mem_viewport_x, A - LD A, $0c + + LD A, $mem_bunny_y + SUB $04 LD $mem_viewport_y, A + + LD A, $mem_viewport_x + SWAP A + AND $f0 + OR $08 + LD $reg_viewport_x, A + + LD A, $mem_viewport_y + SWAP A + AND $f0 + OR $08 + LD $reg_viewport_y, A + LD A, $50 LD $mem_bunny_x_px, A LD A, $40 @@ -55,7 +81,7 @@ Move_Bunny: CALL =Is_Solid CP $00 - ; JR NZ, =Move_Bunny.collision + JR NZ, =Move_Bunny.collision LD B, D @@ -85,7 +111,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 c1741d4..655dfbd 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -11,7 +11,7 @@ .DEFINE OAM_start $FE00 .DEFINE dungeon_generation_step $20 -.DEFINE intial_duplication_probablity $02 +.DEFINE intial_duplication_probablity $01 .DEFINE mem_bunny_x_px ($c000) .DEFINE mem_bunny_y_px ($c001) @@ -36,6 +36,14 @@ ; } .DEFINE mem_dungeon_map $c800 ; Takes the memory from c800 to c87f +.DEFINE mem_room_list $c880 ; Takes the memory from c880 to c89f +.DEFINE mem_number_of_rooms ($c8a0) +; struct room { +; x: u8, +; sizex: u8, +; y: u8, +; sizey: u8, +; } .DEFINE enum_direction_left $01 .DEFINE enum_direction_right $02 diff --git a/map/generation.gbasm b/map/generation.gbasm index 3efe87f..8b0181e 100644 --- a/map/generation.gbasm +++ b/map/generation.gbasm @@ -41,7 +41,7 @@ Generation_Head_Mitosis: LD A, $mem_next_free_head_lower_bytes LD C, A - LD A, (HL+) + LD A, (HL) DEC A XOR $02 @@ -54,6 +54,11 @@ Generation_Head_Mitosis: LD B, $next_free_head_higher_bytes LD (BC), A + DEC A + XOR $01 + INC A + LD (HL), A + INC HL INC BC LD A, (HL+) @@ -69,21 +74,48 @@ Generation_Head_Mitosis: SLA E SLA E + SLA E POP BC POP HL RET +Enforce_Map_Bounds: ; X OR Y in A + CP $80 + JR NC, =Enforce_Map_Bounds.Zero + + CP $1f + JR NC, =Enforce_Map_Bounds.Thirty_one + + RET + + Enforce_Map_Bounds.Zero: + LD A, $00 + RET + + Enforce_Map_Bounds.Thirty_one: + LD A, $1f + + RET + Generation_Head_Explosion: PUSH HL INC HL LD A, (HL+) - LD E, A + LD E, A ; X LD A, (HL+) - LD D, A + LD D, A ; Y + LD H, $c8 + LD A, $mem_number_of_rooms + SLA A + SLA A + ADD $80 + LD L, A + + LD A, E CALL =RNG_Step AND $03 ADD $06 @@ -92,8 +124,20 @@ Generation_Head_Explosion: XOR $ff INC A ADD E - LD E, A + CALL =Enforce_Map_Bounds + LD E, A ; X + + ADD B + CALL =Enforce_Map_Bounds + SUB E + LD B, A + LD A, E + LD (HL+), A + LD A, B ; X size + LD (HL+), A + + LD A, D CALL =RNG_Step AND $03 ADD $06 @@ -102,7 +146,18 @@ Generation_Head_Explosion: XOR $ff INC A ADD D - LD D, A + CALL =Enforce_Map_Bounds + LD D, A ; Y + + ADD C + CALL =Enforce_Map_Bounds + SUB D + LD C, A + + LD A, D + LD (HL+), A + LD A, C + LD (HL+), A LD L, C Room_Generation.X_loop: @@ -172,7 +227,7 @@ Dungeon_Generation: Dungeon_Generation.Head_Mitosis.end: CALL =RNG_Step - AND $07 + AND $0f JR NZ, =Dungeon_Generation.Direction_Change.end Dungeon_Generation.Direction_Change: DEC B @@ -262,6 +317,11 @@ Dungeon_Generation: JR Z, =Dungeon_Generation.Head_explosion_loop.end CALL =Generation_Head_Explosion + + LD A, $mem_number_of_rooms + INC A + LD $mem_number_of_rooms, A + INC HL INC HL INC HL @@ -7,7 +7,7 @@ Debug_RNG: RET Initialize_RNG: - LD A, $43 + LD A, $0c LD $mem_rng_state_1, A LD A, $15 LD $mem_rng_state_2, A @@ -67,4 +67,17 @@ RNG_Step: POP BC RET +RNG_Bound: ; generate a number where 0 < new_A <= Old A + PUSH BC + PUSH DE + + LD B, A + CALL =RNG_Step + LD C, A + CALL =MUL + LD A, E + + POP DE + POP BC + RET diff --git a/utils.gbasm b/utils.gbasm index 2c8ef2b..babf7da 100644 --- a/utils.gbasm +++ b/utils.gbasm @@ -30,3 +30,68 @@ Print_8bit: ; Number in A, Memory Tilemap position in HL POP AF RET +MUL: ; B x C => EA + XOR A + LD E, $00 + + BIT 7, B + JR Z, =MUL.bit7 + ADD C + MUL.bit7: + + SLA A + RL E + + BIT 6, B + JR Z, =MUL.bit6 + ADD C + MUL.bit6: + + SLA A + RL E + + BIT 5, B + JR Z, =MUL.bit5 + ADD C + MUL.bit5: + + SLA A + RL E + + BIT 4, B + JR Z, =MUL.bit4 + ADD C + MUL.bit4: + + SLA A + RL E + + BIT 3, B + JR Z, =MUL.bit3 + ADD C + MUL.bit3: + + SLA A + RL E + + BIT 2, B + JR Z, =MUL.bit2 + ADD C + MUL.bit2: + + SLA A + RL E + + BIT 1, B + JR Z, =MUL.bit1 + ADD C + MUL.bit1: + + SLA A + RL E + + BIT 0, B + JR Z, =MUL.bit0 + ADD C + MUL.bit0: + RET |