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