aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-08-22 18:17:04 +0900
committerAstatin <astatin@redacted>2024-08-22 18:17:04 +0900
commitf0d9de7afa943ebd41c1b202690b2ab3e387f708 (patch)
treeffd085c9a6182b67ef44a506a2728057f72f5d12
parent358e97cc2628d4617543d20d2c40111699f067d6 (diff)
Stored the rooms + spawn the bunny at the top left (sometimes) of the room
-rw-r--r--bunny.gbasm46
-rw-r--r--definitions.gbasm10
-rw-r--r--map/generation.gbasm72
-rw-r--r--rng.gbasm15
-rw-r--r--utils.gbasm65
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
diff --git a/rng.gbasm b/rng.gbasm
index 38de99f..5a45286 100644
--- a/rng.gbasm
+++ b/rng.gbasm
@@ -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