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.

Redoing generation algorithm

+5 -416
+2 -412
gb/src/dungeon.asm
··· 24 24 ; Starting Width: B 25 25 ; Starting Height: C 26 26 InitDungeon:: 27 - ld hl, current_width ; current_width = B 28 - ld [hl], b 29 - ld hl, current_height ; current_height = C 30 - ld [hl], c 31 - ret 32 - 33 - GenerateDungeon:: 34 - ; REG_B = i 35 - ; REG_C = generated_cells_number 36 - ; REG_D = dungeon_area 37 - ld hl, current_width 38 - ld e, [hl] 39 - ld d, 0 40 - ld hl, current_height 41 - ld a, [hl] 42 - call Mul8 43 - ld d, l 44 - ld c, 0 45 - ld b, 0 46 - .LoopCheck 47 - ld a, c 48 - cp a, d 49 - jp nc, .LoopEnd 50 - jp z, .LoopEnd 51 27 ld a, b 52 - cp a, 0 53 - jp nz, .LoopCheck2 54 - jp z, .LoopBody 55 - .LoopCheck2 56 - cp a, c 57 - jp nc, .LoopEnd 58 - jp z, .LoopEnd 59 - .LoopBody 60 - cp a, 0 61 - jp nz, .LoopBody2 62 - ld a, c 63 - cp a, 0 64 - jp nz, .LoopBody2 65 - push bc 66 - call rand 67 - ld l, b 68 - ld h, 0 69 - ld c, d 70 - inc c 71 - call Mod8 72 - ld hl, entrance_id 73 - ld [hl], a 74 - pop bc 75 - ld hl, generated_cells+$0 76 - ld [hl], a 77 - ld hl, BIT_ENTRANCE 78 - ld a, [hl] 79 - ld hl, BIT_USED_ROOM 80 - or a, [hl] 81 - ld hl, dungeon_grid 82 - push de 83 - push hl 84 - ld hl, entrance_id 85 - ld e, [hl] 86 - ld d, 0 87 - pop hl 88 - add hl, de 89 - pop de 90 - ld [hl], a 91 - ld c, 1 92 - .LoopBody2 93 - call GenerateRoom 94 - ld hl, dungeon_grid 95 - push de 96 - push hl 97 - ld hl, generated_cells 98 - ld e, b 99 - ld d, 0 100 - add hl, de 101 - ld e, [hl] 102 - ld d, 0 103 - pop hl 104 - add hl, de 105 - pop de 106 - ld a, [hl] 107 - push hl 108 - ld hl, BIT_USED_ROOM 109 - and a, [hl] 110 - pop hl 111 - jp nz, .LoopBody3 112 - ld a, [hl] 113 - push hl 114 - ld hl, BIT_USED_ROOM 115 - or a, [hl] 116 - pop hl 117 - ld [hl], a 118 - .LoopBody3 119 - ld a, c 120 - sub a, 1 121 - ld e, a 122 - ld a, b 123 - cp a, e 124 - jp nz, .LoopBody4 125 - push bc 126 - ld l, d 127 - ld h, 0 128 - ld c, 4 129 - call Mod8 130 - pop bc 131 - push de 132 - ld e, l 133 - ld d, h 134 - ld a, 3 135 - call Mul8 136 - pop de 137 - ld a, c 138 - cp a, l 139 - jp z, .LoopBody4 140 - jp nc, .LoopBody4 141 - jp .LoopEnd 142 - .LoopBody4 143 - inc b 144 - jp .LoopCheck 145 - .LoopEnd 146 - ret 147 - 148 - GenerateRoom:: 149 - ; REG_B = cell_index_queue 150 - ; REG_C = queue_size 151 - ; REG_D = potential_doors 152 - ; REG_E = door 153 - ; REG_H = neighbor_room 154 - ; REG_L = cell_index 155 - ; generated_cells = cells_queue 156 - push 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 - cp a, 0 208 - jp nz, .LoopContinue 209 - push hl 210 - push de 211 - ld e, h 212 - ld hl, dungeon_grid 213 - ld a, l 214 - add a, e 215 - ld l, a 216 - pop de 217 - ld a, [hl] 218 - ld hl, BIT_USED_ROOM 219 - and a, [hl] 220 - pop hl 221 - jp nz, .LoopContinue 222 - push bc ; b = opposite_door, cache earlier values 223 - call GetOppositeDirectionBit 224 - ld a, e 225 - and a, d 226 - cp a, e 227 - jp nz, .LoopBody2 228 - push hl 229 - push de 230 - ld e, l 231 - ld hl, dungeon_grid 232 - ld a, l 233 - add a, e 234 - ld l, a 235 - pop de 236 - ld a, [hl] 237 - or a, e 238 - ld [hl], a 239 - push de 240 - ld e, h 241 - ld hl, dungeon_grid 242 - ld a, l 243 - add a, e 244 - ld l, a 245 - pop de 246 - ld a, [hl] 247 - or a, b 248 - ld [hl], a 249 - pop hl 250 - .LoopBody2 251 - push hl 252 - push de 253 - ld e, h 254 - ld hl, dungeon_grid 255 - ld a, l 256 - add a, e 257 - ld l, a 258 - pop de 259 - ld a, [hl] 260 - pop hl 261 - cp a, b 262 - jp nz, .LoopContinue 263 - pop bc 264 - push hl 265 - push de 266 - ld e, h 267 - ld hl, generated_cells 268 - ld a, l 269 - add a, c 270 - ld l, a 271 - ld [hl], e 272 - pop de 273 - pop hl 274 - inc c 275 - .LoopContinue 276 - rlc e 277 - jp .LoopCheck 278 - .LoopEnd 279 - pop de 280 - ret 281 - 282 - GetNeighborRoomIndex:: 283 - ; REG_L = current_room => C 284 - ; REG_E = direction => B 285 - push de 286 - push bc 287 - push hl 288 - ld b, e 289 - ld c, l 290 - ld a, b 291 - ld hl, BIT_DOOR_NORTH 292 - cp a, [hl] 293 - jp nz, .FuncBody 294 - ld a, c 295 - ld hl, current_width 296 - sub a, [hl] 297 - ld e, a 298 - jp .FuncBody5 299 - .FuncBody 300 - ld hl, BIT_DOOR_EAST 301 - cp a, [hl] 302 - jp nz, .FuncBody2 303 - ld a, c 304 - inc a 305 - ld e, a 306 - jp .FuncBody5 307 - .FuncBody2 308 - ld hl, BIT_DOOR_SOUTH 309 - cp a, [hl] 310 - jp nz, .FuncBody3 311 - ld a, c 312 - ld hl, current_width 313 - add a, [hl] 314 - ld e, a 315 - jp .FuncBody5 316 - .FuncBody3 317 - ld hl, BIT_DOOR_WEST 318 - cp a, [hl] 319 - jp nz, .FuncBody4 28 + ld [current_width], a 320 29 ld a, c 321 - dec a 322 - ld e, a 323 - jp .FuncBody5 324 - .FuncBody4 325 - ld e, -1 326 - .FuncBody5 327 - ld a, b 328 - ld hl, BIT_DOOR_NORTH 329 - cp a, [hl] 330 - jp nz, .FuncBody6 331 - ld a, e 332 - cp a, 0 333 - jp c, .FuncBody6 334 - jp .FuncBody10 335 - .FuncBody6 336 - ld a, b 337 - ld hl, BIT_DOOR_SOUTH 338 - cp a, [hl] 339 - jp nz, .FuncBody7 340 - push de 341 - push bc 342 - ld c, e 343 - ld hl, current_width 344 - ld e, [hl] 345 - ld d, 0 346 - ld hl, current_height 347 - ld a, [hl] 348 - call Mul8 349 - ld d, l 350 - ld a, e 351 - pop bc 352 - cp a, d 353 - pop de 354 - jp nc, .FuncBody7 355 - jp z, .FuncBody7 356 - jp .FuncBody10 357 - .FuncBody7 358 - ld a, b 359 - ld hl, BIT_DOOR_EAST 360 - cp a, [hl] 361 - jp nz, .FuncBody8 362 - push bc 363 - ld hl, current_width 364 - ld c, [hl] 365 - ld l, e 366 - ld h, 0 367 - call Mod8 368 - pop bc 369 - cp a, 0 370 - jp c, .FuncBody8 371 - jp z, .FuncBody8 372 - jp .FuncBody10 373 - .FuncBody8 374 - ld a, b 375 - ld hl, BIT_DOOR_WEST 376 - cp a, [hl] 377 - jp nz, .FuncBody9 378 - push bc 379 - ld hl, current_width 380 - ld c, [hl] 381 - ld l, e 382 - ld h, 0 383 - call Mod8 384 - ld b, a 385 - ld hl, current_width 386 - ld a, [hl] 387 - dec a 388 - ld c, a 389 - ld a, b 390 - cp a, c 391 - pop bc 392 - jp nc, .FuncBody9 393 - jp z, .FuncBody9 394 - jp .FuncBody10 395 - .FuncBody9 396 - ld e, -1 397 - .FuncBody10 398 - pop hl 399 - ld h, e 400 - pop bc 401 - pop de 402 - ret 403 - 404 - GetOppositeDirectionBit:: 405 - push hl 406 - ld a, e 407 - push de 408 - ld hl, BIT_DOOR_NORTH 409 - ld e, [hl] 410 - cp a, e 411 - jp nz, .FuncBody 412 - ld hl, BIT_DOOR_SOUTH 413 - ld b, [hl] 414 - jp .FuncEnd 415 - .FuncBody 416 - ld hl, BIT_DOOR_WEST 417 - ld e, [hl] 418 - cp a, e 419 - jp nz, .FuncBody2 420 - ld hl, BIT_DOOR_EAST 421 - ld b, [hl] 422 - jp .FuncEnd 423 - .FuncBody2 424 - ld hl, BIT_DOOR_SOUTH 425 - ld e, [hl] 426 - cp a, e 427 - jp nz, .FuncBody3 428 - ld hl, BIT_DOOR_NORTH 429 - ld b, [hl] 430 - jp .FuncEnd 431 - .FuncBody3 432 - ld hl, BIT_DOOR_EAST 433 - ld e, [hl] 434 - cp a, e 435 - jp nz, .FuncEnd 436 - ld hl, BIT_DOOR_WEST 437 - ld b, [hl] 438 - .FuncEnd 439 - pop de 440 - pop hl 30 + ld [current_height], a 441 31 ret
+3 -4
gb/src/main.asm
··· 25 25 call srand 26 26 27 27 ; Initialize Dungeon 28 - ; ld b, 6 29 - ; ld c, 6 30 - ; call InitDungeon 31 - ; NOTE: Dungeon generation is not verified to work 28 + ld b, 6 29 + ld c, 6 30 + call InitDungeon 32 31 33 32 jp Done 34 33