···1818BIT_STAIR_BELOW:: db $40
1919BIT_STAIR_UP:: db $80
2020MAX_ROOMS:: dw 512
2121+NEIGHBORS:: db %00111100
21222223; Params:
2324; Starting Width: B
···4546.LoopCheck
4647 ld a, c
4748 cp a, d
4848- jp c, .LoopEnd
4949+ jp nc, .LoopEnd
4950 jp z, .LoopEnd
5051 ld a, b
5152 cp a, 0
···5354 jp z, .LoopBody
5455.LoopCheck2
5556 cp a, c
5656- jp c, .LoopEnd
5757+ jp nc, .LoopEnd
5758 jp z, .LoopEnd
5859.LoopBody
5960 cp a, 0
···7374 pop bc
7475 ld hl, generated_cells+$0
7576 ld [hl], a
7676- ld a, BIT_ENTRANCE
7777- or a, BIT_USED_ROOM
7777+ ld hl, BIT_ENTRANCE
7878+ ld a, [hl]
7979+ ld hl, BIT_USED_ROOM
8080+ or a, [hl]
7881 ld hl, dungeon_grid
7982 push de
8083 push hl
···101104 add hl, de
102105 pop de
103106 ld a, [hl]
104104- and a, BIT_USED_ROOM
107107+ push hl
108108+ ld hl, BIT_USED_ROOM
109109+ and a, [hl]
110110+ pop hl
105111 jp nz, .LoopBody3
106112 ld a, [hl]
107107- or a, BIT_USED_ROOM
113113+ push hl
114114+ ld hl, BIT_USED_ROOM
115115+ or a, [hl]
116116+ pop hl
108117 ld [hl], a
109118.LoopBody3
110119 ld a, c
···128137 ld a, c
129138 cp a, l
130139 jp z, .LoopBody4
131131- jp c, .LoopBody4
140140+ jp nc, .LoopBody4
132141 jp .LoopEnd
133142.LoopBody4
134143 inc b
···141150 ; REG_C = queue_size
142151 ; REG_D = potential_doors
143152 ; REG_E = door
153153+ ; REG_H = neighbor_room
154154+ ; REG_L = cell_index
155155+ ; generated_cells = cells_queue
144156 push de
145145-146146- pop de157157+ push bc
158158+ call rand
159159+ ld hl, NEIGHBORS
160160+ ld c, [hl]
161161+ inc c
162162+ ld b, l
163163+ ld h, 0
164164+ call Mod8
165165+ pop bc
166166+ ld d, a
167167+ ld hl, generated_cells
168168+ ld a, l
169169+ add a, b
170170+ ld l, a
171171+ push de
172172+ ld e, [hl]
173173+ ld l, e
174174+ pop de
175175+ ld e, 1
176176+.LoopCheck
177177+ ld a, e
178178+ push hl
179179+ ld hl, NEIGHBORS
180180+ cp a, [hl]
181181+ pop hl
182182+ jp nc, .LoopEnd
183183+ jp nz, .LoopEnd
184184+ ld a, e
185185+ push de
186186+ push hl
187187+ ld hl, NEIGHBORS
188188+ ld e, [hl]
189189+ and a, e
190190+ pop hl
191191+ pop de
192192+ cp a, e
193193+ jp nz, .LoopContinue
194194+ push de
195195+ ld e, l
196196+ ld hl, dungeon_grid
197197+ ld a, l
198198+ add a, e
199199+ ld l, a
200200+ ld a, [hl]
201201+ pop de
202202+ and a, e
203203+ jp nz, .LoopContinue
204204+ call GetNeighborRoomIndex
205205+ ld a, h
206206+ cpl
207207+.LoopContinue
208208+ rlc e
209209+ jp .LoopCheck
210210+.LoopEnd
211211+ pop de
212212+ ret
213213+214214+GetNeighborRoomIndex::
215215+ ret