1
2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3;; Deeps random map
4
5
6;probability for edge terrains... out of 83
7(define voidgap-terrain-edges
8	(list
9		(list 20 'm_deeptempl_wall #f)
10		(list 25 'm_deeptempl_water #f)
11		(list 30 'm_deeptempl_hole #f)
12		(list 33 'm_deeptempl_lava #f)
13		(list 35 'm_deeptempl_swamp #t)
14		(list 100 'm_deeptempl_passage #t)
15	))
16
17;probability for area terrains... out of 149
18(define voidgap-terrain-area
19	(list
20		(list 40 'm_deeptempl_wall)
21		(list 55 'm_deeptempl_water)
22		(list 70 'm_deeptempl_hole)
23		(list 75 'm_deeptempl_lava)
24		(list 80 'm_deeptempl_swamp)
25		(list 150 'm_deeptempl_passage)
26	))
27
28;map areas replaced by the various blitting ops
29(define voidgap-room-blitstats
30	(prmap-mk-blitstats 19 19 3 4 3))
31
32
33;parameters to random number generators
34(define (voidgap-rno) (+ (kern-dice-roll "1d70" 33)))
35(define voidgap-random-type-ew (prmap-mk-prng-params (voidgap-rno) (voidgap-rno) 0 (voidgap-rno) 83))
36(define voidgap-random-type-ns (prmap-mk-prng-params (voidgap-rno) (voidgap-rno) 0 (voidgap-rno) 83))
37(define voidgap-random-type-area (prmap-mk-prng-params (voidgap-rno) (voidgap-rno) 0 (voidgap-rno) 149))
38
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40;; critter lists
41
42(define voidgap-monster-types
43	(list
44		(list
45			(list 100 'bat)
46		)
47		(list
48			(list 100 'rat)
49			(list 200 'bat)
50		)
51		(list
52			(list 100 'giant-spider)
53			(list 150 'queen-spider)
54		)
55		(list
56			(list 100 'cave-goblin-slinger)
57			(list 200 'cave-goblin-berserker)
58			(list 250 'cave-goblin-priest)
59		)
60		(list
61			(list 50 'cave-goblin-slinger-m)
62			(list 100 'cave-goblin-berserker-m)
63			(list 300 'troll-m)
64			(list 350 'troll-geomancer-m)
65		)
66		(list
67			(list 100 'green-slime)
68			(list 200 'yellow-slime)
69		)
70		(list
71			(list 100 'zorn)
72		)
73		(list
74			(list 20 'ghast)
75			(list 200 'demon)
76		)
77		(list
78			(list 50 'cave-goblin-slinger-m)
79			(list 100 'cave-goblin-berserker-m)
80			(list 150 'troll-m)
81			(list 350 'gint-warrior-m)
82			(list 400 'gint-mage-m)
83		)
84		(list
85			(list 50 'cave-goblin-slinger-m)
86			(list 100 'headless)
87			(list 150 'cave-goblin-berserker-m)
88			(list 200 'troll-m)
89			(list 250 'gint-warrior-m)
90			(list 350 'gazer)
91		)
92		(list
93			(list 25 'cave-goblin-slinger-m)
94			(list 50 'cave-goblin-berserker-m)
95			(list 300 'dragon)
96		)
97		(list
98			(list 20 'ghast)
99			(list 70 'skeletal-warrior)
100			(list 120 'skeletal-spear-thrower)
101			(list 150 'craven-archer)
102			(list 300 'death-knight)
103			(list 350 'demon)
104		)
105		(list
106			(list 100 'skeletal-warrior)
107			(list 200 'skeletal-spear-thrower)
108			(list 250 'lich)
109		)
110		(list
111			(list 100 'headless)
112			(list 150 'skeletal-warrior)
113			(list 200 'skeletal-spear-thrower)
114			(list 220 'craven-archer)
115			(list 250 'death-knight)
116			(list 260 'demon)
117			(list 330 'warlock)
118		)
119	)
120)
121
122(define voidgap-group-types
123	(list
124		(list 10 0 100 "1d4+3") ;bats
125		(list 20 1 100 "1d4+3") ;rats
126		(list 30 1 200 "1d6+4") ;bats n rats
127		(list 40 5 100 "1d3+2") ;slime
128		(list 50 2 100 "1d4+3") ;spiders
129		(list 60 3 100 "1d3+1") ;goblins
130		(list 70 2 110 "1d4+3") ;spiders 1q
131		(list 80 13 100 "1d6+4") ;headless
132		(list 90 2 150 "1d6+4") ;spiders +qs
133		(list 100 5 200 "1d6+3") ;slime+
134		(list 110 3 200 "1d6+4") ;goblin war
135		(list 120 7 20 "1d6+1")  ;ghost
136		(list 130 11 120 "1d6+4") ;skels
137		(list 140 4 300 "1d6+3") ;trolls
138		(list 150 6 100 "1d2")   ;zorn
139		(list 160 8 350 "1d6+3") ;gint
140		(list 170 7 22 "1d6+1")  ;ghost + d
141		(list 180 11 300 "2d4+4") ;deathknights
142		(list 190 11 310 "2d4+4") ;deathknights +d
143		(list 200 3 210 "1d6+5") ;goblin war +p
144		(list 210 7 200 "1d3")   ;demons
145		(list 220 3 250 "2d4+4") ;goblin tribe
146		(list 230 4 350 "1d6+5") ;trolls +m
147		(list 240 8 400 "2d4+4") ;gint + m
148		(list 250 10 300 "1d4")  ;dragon
149		(list 260 10 80 "1d6+3") ;dragon + gob
150		(list 270 9 260 "1d6+3") ;gazer
151		(list 280 13 330 "2d4+4") ;warlock
152		(list 290 12 205 "2d4+4") ;lich
153		(list 300 9 320 "2d4+4") ;gazers
154	)
155)
156
157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
158;; handles
159
160(define (voidgap-link-factory x y z map dir)
161		(list 'm_deeptempl_break nil)
162		)
163
164(define (voidgap-room-custom-hardlinks rxloc ryloc rzloc hardlinks)
165	(vector-merge
166		(prmap-room-hardlinkentry-get rxloc ryloc rzloc hardlinks)
167		(vector
168			(if (> ryloc 1) (list nil 'm_deeptempl_wall) nil)
169			(if (< rxloc -7) (list nil 'm_deeptempl_wall) nil)
170			(if (> rxloc 1) (list nil 'm_deeptempl_wall) nil)
171			(if (< ryloc -7) (list nil 'm_deeptempl_wall) nil)
172		)
173	))
174
175(define (voidgap-room-init-contents kplace roomdata)
176	(let* (
177			(rxloc (prmap-roomdata-x roomdata))
178			(ryloc (prmap-roomdata-y roomdata))
179			(distance (sqrt (+ (* rxloc rxloc) (* ryloc ryloc))))
180		)
181		(if (and (null? (kern-place-get-beings kplace))
182				(< (kern-dice-roll "1d100")
183					(min 75 (+ 25 (* 15 (sqrt distance))))))
184			(begin
185			(map (lambda (monster)
186				(begin
187
188					(prmap-room-addmonster kplace monster)))
189				(prmap-mk-monster-group voidgap-group-types voidgap-monster-types
190					(string-append "1d" (number->string (+ 100 (ceiling (* 40 (sqrt distance))))))
191					(+ 200 (* 30 (sqrt distance)))))
192					)
193		)
194	))
195
196(define (voidgap-init-cohesion mapdata)
197	(if (list-ref mapdata 10)
198		(begin
199			;;(kern-log-msg "begin cohesion check")
200			(prmap-ensure-cohesion mapdata -5 0 -5 0 0 voidgap-link-factory)
201			;;(kern-log-msg "end cohesion check")
202			(mutable-list-set mapdata 10 #f)
203		)))
204
205(define (voidgap-room-handle-deeps kplace kplayer)
206	(let* (
207		(roomdata (get-roomdata kplace))
208		(mapdata (prmap-get-mapdata (eval 'p_voidgap_1)))
209		)
210		(prmap-room-freeze-current mapdata)
211		(prmap-room-init-neighbors kplace roomdata)
212		(prmap-room-init-links kplace roomdata mapdata)
213		(prmap-room-cleanout kplace)
214		(prmap-room-thaw kplace mapdata)
215		(prmap-room-blit-map kplace roomdata mapdata)
216		(voidgap-room-init-contents kplace roomdata)
217	))
218
219(define (voidgap-room-handle-start kplace kplayer)
220	(let* (
221		(roomdata (get-roomdata (eval 'p_voidgap_1)))
222		(mapdata (prmap-get-mapdata (eval 'p_voidgap_1)))
223		)
224		(voidgap-init-cohesion mapdata)
225		(prmap-room-freeze-current mapdata)
226		(prmap-roomdata-setxyz roomdata -1 0 0)
227		(kern-place-set-neighbor west kplace (eval 'p_voidgap_1))
228	))
229
230(define (voidgap-room-handle-end kplace kplayer)
231	(let* (
232		(roomdata (get-roomdata (eval 'p_voidgap_1)))
233		(mapdata (prmap-get-mapdata (eval 'p_voidgap_1)))
234		)
235		(voidgap-init-cohesion mapdata)
236		(prmap-room-freeze-current mapdata)
237		(prmap-roomdata-setxyz roomdata -5 -5 0)
238		(voidgap-room-init-contents kplace roomdata)
239		(kern-place-set-neighbor east kplace (eval 'p_voidgap_1))
240	))
241