A dungeon delver roguelike using Pathfinder 2nd edition rules

Added implementation of get_neighbor_room_index, need to figure out modulo division

+77
+77
gb/src/dungeon.asm
··· 246 246 ; REG_B = current_room 247 247 ; REG_C = return val 248 248 ; REG_D = direction 249 + ld a, d ; BEGIN SWITCH 250 + cp %00000100 ; CASE BIT_DOOR_NORTH 251 + jp nz, .Check1 252 + ld a, b ; REG_C = REG_B - wCurrentWidth 253 + ld hl, wCurrentWidth 254 + sub [hl] 255 + ld c, a 256 + jp .Body2 ; BREAK 257 + .Check1 258 + cp %00001000 ; CASE BIT_DOOR_EAST 259 + jp nz, .Check2 260 + ld a, b ; REG_C = REG_B + 1 261 + inc a 262 + ld c, a 263 + jp .Body2 ; BREAK 264 + .Check2 265 + cp %00010000 ; CASE BIT_DOOR_SOUTH 266 + jp nz, .Check3 267 + ld a, b ; REG_C = REG_B + wCurrentWidth 268 + ld hl, wCurrentWidth 269 + add [hl] 270 + ld c, a 271 + jp .Body2 ; BREAK 272 + .Check3 273 + cp %00100000 ; CASE BIT_DOOR_WEST 274 + jp nz, .Check4 275 + ld a, b ; REG_C = REG_B - 1 276 + dec a 277 + ld c, a 278 + jp .Body2 ; BREAK 279 + .Check4 ; DEFAULT_CASE 280 + ld c, -1 ; REG_C = -1 281 + .Body2 282 + ld a, d ; IF REG_D == BIT_DOOR_NORTH 283 + cp %00000100 284 + jp nz, .Body3 285 + ld a, c ; AND REG_C >= 0 286 + cp -1 287 + jp z, .Body3 288 + cp 0 289 + jp c, .FuncEnd ; RETURN 290 + jp nz, .FuncEnd 291 + ret 292 + .Body3 293 + ld a, d ; IF REG_D == BIT_DOOR_SOUTH 294 + cp %00010000 295 + jp nz, .Body4 296 + ld a, c ; AND REG_C < wDungeonArea 297 + ld hl, wDungeonArea 298 + cp [hl] 299 + jp nc, .FuncEnd ; RETURN 300 + jp z, .FuncEnd 301 + ret 302 + .Body4 303 + ld a, d ; IF REG_D == BIT_DOOR_EAST 304 + cp %00001000 305 + jp nz, .Body5 306 + ; REG_A = REG_D % wCurrentWidth 307 + cp 0 308 + jp nc, .FuncEnd ; RETURN 309 + jp z, .FuncEnd 310 + ret 311 + .Body5 312 + ld a, d ; IF REG_D == BIT_DOOR_WEST 313 + cp %00100000 314 + jp nz, .FuncEnd 315 + ; REG_A = REG_D % wCurrentWidth 316 + ld hl, wCurrentWidth 317 + ld l, [hl] 318 + dec l 319 + cp l 320 + jp nc, .FuncEnd ; RETURN 321 + jp z, .FuncEnd 322 + ret 323 + .FuncEnd 324 + ld c, -1 325 + ret 249 326 250 327 GetOppositeDirectionBit:: 251 328 ; REG_D = door