A dungeon delver roguelike using Pathfinder 2nd edition rules
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Continuing to implement generate_room

+78 -9
+78 -9
gb/src/dungeon.asm
··· 18 18 BIT_STAIR_BELOW:: db $40 19 19 BIT_STAIR_UP:: db $80 20 20 MAX_ROOMS:: dw 512 21 + NEIGHBORS:: db %00111100 21 22 22 23 ; Params: 23 24 ; Starting Width: B ··· 45 46 .LoopCheck 46 47 ld a, c 47 48 cp a, d 48 - jp c, .LoopEnd 49 + jp nc, .LoopEnd 49 50 jp z, .LoopEnd 50 51 ld a, b 51 52 cp a, 0 ··· 53 54 jp z, .LoopBody 54 55 .LoopCheck2 55 56 cp a, c 56 - jp c, .LoopEnd 57 + jp nc, .LoopEnd 57 58 jp z, .LoopEnd 58 59 .LoopBody 59 60 cp a, 0 ··· 73 74 pop bc 74 75 ld hl, generated_cells+$0 75 76 ld [hl], a 76 - ld a, BIT_ENTRANCE 77 - or a, BIT_USED_ROOM 77 + ld hl, BIT_ENTRANCE 78 + ld a, [hl] 79 + ld hl, BIT_USED_ROOM 80 + or a, [hl] 78 81 ld hl, dungeon_grid 79 82 push de 80 83 push hl ··· 101 104 add hl, de 102 105 pop de 103 106 ld a, [hl] 104 - and a, BIT_USED_ROOM 107 + push hl 108 + ld hl, BIT_USED_ROOM 109 + and a, [hl] 110 + pop hl 105 111 jp nz, .LoopBody3 106 112 ld a, [hl] 107 - or a, BIT_USED_ROOM 113 + push hl 114 + ld hl, BIT_USED_ROOM 115 + or a, [hl] 116 + pop hl 108 117 ld [hl], a 109 118 .LoopBody3 110 119 ld a, c ··· 128 137 ld a, c 129 138 cp a, l 130 139 jp z, .LoopBody4 131 - jp c, .LoopBody4 140 + jp nc, .LoopBody4 132 141 jp .LoopEnd 133 142 .LoopBody4 134 143 inc b ··· 141 150 ; REG_C = queue_size 142 151 ; REG_D = potential_doors 143 152 ; REG_E = door 153 + ; REG_H = neighbor_room 154 + ; REG_L = cell_index 155 + ; generated_cells = cells_queue 144 156 push de 145 - 146 - pop de 157 + push bc 158 + call rand 159 + ld hl, NEIGHBORS 160 + ld c, [hl] 161 + inc c 162 + ld b, l 163 + ld h, 0 164 + call Mod8 165 + pop bc 166 + ld d, a 167 + ld hl, generated_cells 168 + ld a, l 169 + add a, b 170 + ld l, a 171 + push de 172 + ld e, [hl] 173 + ld l, e 174 + pop de 175 + ld e, 1 176 + .LoopCheck 177 + ld a, e 178 + push hl 179 + ld hl, NEIGHBORS 180 + cp a, [hl] 181 + pop hl 182 + jp nc, .LoopEnd 183 + jp nz, .LoopEnd 184 + ld a, e 185 + push de 186 + push hl 187 + ld hl, NEIGHBORS 188 + ld e, [hl] 189 + and a, e 190 + pop hl 191 + pop de 192 + cp a, e 193 + jp nz, .LoopContinue 194 + push de 195 + ld e, l 196 + ld hl, dungeon_grid 197 + ld a, l 198 + add a, e 199 + ld l, a 200 + ld a, [hl] 201 + pop de 202 + and a, e 203 + jp nz, .LoopContinue 204 + call GetNeighborRoomIndex 205 + ld a, h 206 + cpl 207 + .LoopContinue 208 + rlc e 209 + jp .LoopCheck 210 + .LoopEnd 211 + pop de 212 + ret 213 + 214 + GetNeighborRoomIndex:: 215 + ret