call mapgen_up_right_room
call mapgen_bottom_right_room
+ call mapgen_place_special_room
+
; restore seed
pop bc
call mapgen_draw_room_pattern
pop hl
ret
+
+ ; rolls rng
+ ; if value > 128 a random special room is placed
+ ; special rooms overwrite other rooms and are larger room
+ ; patterns
+ ; special rooms are placed starting in the top left corner
+ ; inputs:
+ ; hl: [map]
+mapgen_place_special_room:
+ push hl
+ call rand
+ and a, 0x80
+ pop hl
+ ret z ; bail if no speical room is requested
+
+ ; move to correct location on map
+ ld bc, MAP_W*c_size
+ add hl, bc
+ inc hl
+ inc hl
+ ; pick a room from the special pattern list
+
+ push hl
+ ld a, ROOM_PATTERN_SPECIAL_SIZE
+ ld hl, room_pattern_special
+ call mapgen_select_pattern
+ pop hl
+
+ call mapgen_draw_room_pattern
+
+ ret
; draws a room pattern to the map
rprow RPFL, RPFL, RPDB, RPBW, RPBR, RPFL
rprow RPFL, RPFL, RPFL, RPFL, RPFL, RPFL
+room_pattern_special1:
+ rpheaderdef 0x6E
+ .db RPUL, RPUW, RPUW, RPDU, RPUW, RPUW, RPUW, RPUW, RPUW, RPUW, RPUW, RPUW, RPUW, RPUR
+ .db RPLW, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPRW
+ .db RPLW, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPRW
+ .db RPLW, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPRW
+ .db RPLW, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPFL, RPRW
+ .db RPBL, RPBW, RPBW, RPBW, RPBW, RPDB, RPBW, RPBW, RPBW, RPBW, RPBW, RPBW, RPBW, RPBR
+
+
+
; translation tables for tiles
room_pattern_tile_translation:
; walls
; table of 6 by 6 room patterns
room_pattern_6x6:
- ; dw room_pattern_empty
- dw room_pattern1
+ dw room_pattern_empty
+ ; dw room_pattern1
dw room_pattern1
dw room_pattern2
dw room_pattern3
room_pattern_6x6_end:
#define ROOM_PATTERN_6X6_SIZE ((room_pattern_6x6_end - room_pattern_6x6) / 2)
+
+
+ ; table of special room patterns
+room_pattern_special:
+ dw room_pattern_special1
+ dw room_pattern_special1
+room_pattern_special_end:
+
+#define ROOM_PATTERN_SPECIAL_SIZE ((room_pattern_special_end - room_pattern_special) / 2)