1;;---------------------------------------------------------------------------- 2;; pgroup -- one type of npc within an npc party type 3(define (pgroup-mk npct dice) 4 (list 'pgroup npct dice)) 5(define (pgroup-npct pgrp) (cadr pgrp)) 6(define (pgroup-dice pgrp) (caddr pgrp)) 7(define (pgroup-size pgrp) 8 (define (loop n sum) 9 ;;(println " pgroup-size loop n=" n "sum=" sum) 10 (if (= n 0) 11 sum 12 (loop (- n 1) 13 (+ sum (max 0 (kern-dice-roll (pgroup-dice pgrp)))) 14 ))) 15 (loop (min 3 16 (max 1 17 (length (filter is-alive? 18 (kern-party-get-members (kern-get-player)))))) 19 0) 20 ) 21(define (pgroup-generate pgrp) 22 ;;(println " pgroup-generate") 23 (define (loop n) 24 ;;(println " n=" n) 25 (if (<= n 0) 26 nil 27 (cons (mk-npc (pgroup-npct pgrp) (calc-level)) 28 (loop (- n 1))))) 29 (loop (pgroup-size pgrp))) 30 31;;---------------------------------------------------------------------------- 32;; ptype -- npc party type 33(define (ptype-mk name sprite faction dc scarce . groups) 34 (list 'ptype sprite faction groups name dc scarce nil)) 35(define (ptype-sprite ptype) (cadr ptype)) 36(define (ptype-faction ptype) (caddr ptype)) 37(define (ptype-groups ptype) (cadddr ptype)) 38(define (ptype-name ptype) (list-ref ptype 4)) 39(define (ptype-dc ptype) (list-ref ptype 5)) 40(define (ptype-scarcity ptype) (list-ref ptype 6)) 41(define (ptype-vehicle-type-tag ptype) (list-ref ptype 7)) 42(define (ptype-set-vehicle-type-tag! ptype vtag) 43 (set-car! (list-tail ptype 7) vtag)) 44(define (ptype-generate ptype) 45 ;;(println "ptype-generate") 46 (let ((kparty (kern-mk-party))) 47 (kern-being-set-name kparty (ptype-name ptype)) 48 (kern-obj-set-sprite kparty (ptype-sprite ptype)) 49 (kern-being-set-base-faction kparty (ptype-faction ptype)) 50 (map (lambda (pgroup) 51 (map (lambda (kchar) 52 (kern-party-add-member kparty kchar)) 53 (pgroup-generate pgroup))) 54 (ptype-groups ptype)) 55 (let ((vtag (ptype-vehicle-type-tag ptype))) 56 ;;(println "vtag=" vtag) 57 (if (not (null? vtag)) 58 (kern-party-set-vehicle kparty 59 (mk-vehicle (eval vtag))))) 60 kparty 61 )) 62 63;;---------------------------------------------------------------------------- 64;; mk-npc-party 65(define (mk-npc-party ptype-tag) 66 (ptype-generate (eval ptype-tag))) 67 68;;---------------------------------------------------------------------------- 69;; NPC PARTY TYPES 70(define forest-goblin-party-l1 71 (ptype-mk "goblin stalker" s_fgob_stalker faction-forest-goblin 1 2 72 (pgroup-mk 'forest-goblin-stalker "1") 73 )) 74(define forest-goblin-party-l2 75 (ptype-mk "goblin scouting party" s_fgob_archer faction-forest-goblin 2 2 76 (pgroup-mk 'forest-goblin-stalker "1") 77 (pgroup-mk 'forest-goblin-hunter "1") 78 )) 79 80(define forest-goblin-party-l3 81 (ptype-mk "goblin hunting party" s_fgob_archer faction-forest-goblin 3 2 82 (pgroup-mk 'forest-goblin-stalker "1d2") 83 (pgroup-mk 'forest-goblin-hunter "1d2") 84 (pgroup-mk 'wolf "1d2") 85 )) 86(define forest-goblin-party-l4 87 (ptype-mk "goblin tribe" s_fgob_civilian faction-forest-goblin 4 2 88 (pgroup-mk 'forest-goblin-stalker "1d2") 89 (pgroup-mk 'forest-goblin-hunter "1d2") 90 (pgroup-mk 'wolf "1d2") 91 (pgroup-mk 'forest-goblin-shaman "1") 92 )) 93(define bandit-party-l1 94 (ptype-mk "gang of footpads" s_brigand faction-outlaw 1 4 95 (pgroup-mk 'footpad "1d2") 96 )) 97(define bandit-party-l2 98 (ptype-mk "gang of bandits" s_brigand faction-outlaw 2 4 99 (pgroup-mk 'bandit "1d2") 100 )) 101(define bandit-party-l3 102 (ptype-mk "a gang of highwaymen" s_brigand faction-outlaw 3 4 103 (pgroup-mk 'highwayman "1d2") 104 )) 105(define bandit-party-l4 106 (ptype-mk "a gang of blackguards" s_brigand faction-outlaw 4 4 107 (pgroup-mk 'blackguard "1d2") 108 )) 109(define bandit-party-l5 110 (ptype-mk "a gang of sinister blackguards" s_brigand faction-outlaw 5 4 111 (pgroup-mk 'blackguard "1d2") 112 (pgroup-mk 'bomber "1d2") 113 )) 114(define pirate-party-l3 115 (ptype-mk "crew of pirates" s_brigand faction-outlaw 3 5 116 (pgroup-mk 'highwayman "1d2") 117 )) 118(ptype-set-vehicle-type-tag! pirate-party-l3 't_ship) 119(define pirate-party-l4 120 (ptype-mk "crew of pirates" s_brigand faction-outlaw 3 5 121 (pgroup-mk 'blackguard "1d2") 122 )) 123(ptype-set-vehicle-type-tag! pirate-party-l4 't_ship) 124(define troll-party-l3 125 (ptype-mk "band of trolls" s_troll faction-troll 3 5 126 (pgroup-mk 'troll "1") 127 )) 128(define troll-party-l4 129 (ptype-mk "band of trolls with goblin slaves" s_troll faction-troll 4 5 130 (pgroup-mk 'troll "1") 131 (pgroup-mk 'forest-goblin-stalker "1d3-1") 132 )) 133(define green-slime-party-l2 134 (ptype-mk "ooze of slimes" s_slime faction-monster 2 3 135 (pgroup-mk 'green-slime "1d3") 136 )) 137(define yellow-slime-party-l3 138 (ptype-mk "yellow slime colony" s_yellow_slime faction-monster 3 3 139 (pgroup-mk 'green-slime "1d3") 140 (pgroup-mk 'yellow-slime "1") 141 )) 142(define fire-slime-party-l4 143 (ptype-mk "fire slime colony" s_red_slime faction-monster 4 3 144 (pgroup-mk 'fire-slime "1d2") 145 )) 146(define hydra-party-l5 147 (ptype-mk "hydra with slimes" s_hydra faction-monster 5 3 148 (pgroup-mk 'green-slime "1d3") 149 (pgroup-mk 'yellow-slime "1d2") 150 (pgroup-mk 'hydra "1") 151 )) 152 153(define dryad-party-l3 154 (ptype-mk "dryad grove" s_reaper faction-monster 3 5 155 (pgroup-mk 'dryad "1") 156 )) 157 158(define dryad-party-l4 159 (ptype-mk "dryad grove with wolves" s_reaper faction-monster 4 5 160 (pgroup-mk 'dryad "1") 161 (pgroup-mk 'wolf "1d3") 162 )) 163 164(define dryad-party-l5 165 (ptype-mk "dryad grove with shamans" s_reaper faction-monster 5 5 166 (pgroup-mk 'dryad "1") 167 (pgroup-mk 'forest-goblin-shaman "1d3") 168 )) 169 170(define wolf-party-l1 171 (ptype-mk "wolf pack" s_wolf faction-monster 2 5 172 (pgroup-mk 'wolf "1") 173 )) 174 175(define wolf-party-l2 176 (ptype-mk "wolf pack" s_wolf faction-monster 2 5 177 (pgroup-mk 'wolf "1d3") 178 )) 179 180(define skeleton-party-l2 181 (ptype-mk "skeleton brigade" s_skeleton faction-monster 2 5 182 (pgroup-mk 'skeletal-warrior "1") 183 )) 184 185(define skeleton-party-l3 186 (ptype-mk "skeleton brigade" s_skeleton faction-monster 3 5 187 (pgroup-mk 'skeletal-warrior "1") 188 (pgroup-mk 'skeletal-spear-thrower "1") 189 )) 190(define skeleton-party-l4 191 (ptype-mk "skeleton brigade" s_skeleton faction-monster 4 5 192 (pgroup-mk 'skeletal-warrior "1d2") 193 (pgroup-mk 'skeletal-spear-thrower "1d3") 194 )) 195(define skeleton-pirates-l4 196 (ptype-mk "crew of cursed pirates" s_skeleton faction-monster 4 5 197 (pgroup-mk 'skeletal-warrior "1d2") 198 (pgroup-mk 'skeletal-spear-thrower "1d3") 199 )) 200(ptype-set-vehicle-type-tag! skeleton-pirates-l4 't_ship) 201 202(define lich-party-l5 203 (ptype-mk "lich with undead servants" s_lich faction-monster 5 5 204 (pgroup-mk 'lich "1") 205 (pgroup-mk 'skeletal-warrior "1d2") 206 (pgroup-mk 'skeletal-spear-thrower "1d3") 207 )) 208 209(define wisp-party-l5 210 (ptype-mk "swarm of wisps" s_wisp faction-none 5 5 211 (pgroup-mk 'wisp "1d3") 212 )) 213 214(define ghast-party 215 (ptype-mk "haunt of ghasts" s_ghost faction-monster 1 2 216 (pgroup-mk 'ghast "1d3") 217 )) 218 219(define dragon-party-l6 220 (ptype-mk "lone dragon" s_dragon_party faction-monster 6 1 221 (pgroup-mk 'dragon "1") 222 )) 223 224(define dragon-party-l7 225 (ptype-mk "dragon with cave goblins" s_dragon_party faction-monster 7 1 226 (pgroup-mk 'dragon "1") 227 (pgroup-mk 'cave-goblin-berserker "1d2") 228 (pgroup-mk 'cave-goblin-slinger "1d2") 229 (pgroup-mk 'cave-goblin-priest "1") 230 )) 231 232(define dragon-party-l8 233 (ptype-mk "flock of dragons" s_dragon_party faction-monster 8 1 234 (pgroup-mk 'dragon "1d3") 235 )) 236 237(define gint-party-l4 238 (ptype-mk "gint scouting party" s_gint_party faction-gint 4 5 239 (pgroup-mk 'gint-warrior "1") 240 )) 241 242(define gint-party-l5 243 (ptype-mk "gint hunting party" s_gint_party faction-gint 5 5 244 (pgroup-mk 'gint-warrior "1") 245 (pgroup-mk 'cave-goblin-slinger "1d2") 246 (pgroup-mk 'wolf "1d2") 247 )) 248 249(define gint-party-l6 250 (ptype-mk "gint war party" s_gint_party faction-gint 6 3 251 (pgroup-mk 'gint-warrior "1d2") 252 (pgroup-mk 'troll "1d2") 253 (pgroup-mk 'cave-goblin-slinger "1d3") 254 (pgroup-mk 'wolf "1d2") 255 )) 256 257(define kraken-party-l3 258 (ptype-mk "school of kraken" s_kraken faction-monster 3 5 259 (pgroup-mk 'kraken "1d2") 260 )) 261 262(define sea-serpent-party-l3 263 (ptype-mk "school of sea serpents" s_sea_serpent faction-monster 3 5 264 (pgroup-mk 'sea-serpent "1d2") 265 )) 266 267(define nixie-party-l2 268 (ptype-mk "school of nixies" s_nixie_spear faction-monster 2 3 269 (pgroup-mk 'nixie-swordsman "1d2") 270 (pgroup-mk 'nixie-spearman "1d2-1") 271 )) 272 273(define nixie-party-l3 274 (ptype-mk "school of nixies with kraken" s_kraken faction-monster 3 5 275 (pgroup-mk 'nixie-swordsman "1d2") 276 (pgroup-mk 'nixie-spearman "1d2") 277 (pgroup-mk 'kraken "1") 278 )) 279 280(define nixie-party-l4 281 (ptype-mk "school of nixies with kraken" s_kraken faction-monster 3 5 282 (pgroup-mk 'nixie-swordsman "1d2") 283 (pgroup-mk 'nixie-spearman "1d2") 284 (pgroup-mk 'kraken "1") 285 )) 286 287(define nixie-party-l5 288 (ptype-mk "school of nixies with sea serpent" s_sea_serpent faction-monster 4 5 289 (pgroup-mk 'nixie-swordsman "1d2") 290 (pgroup-mk 'nixie-spearman "1d2") 291 (pgroup-mk 'sea-serpent "1") 292 )) 293 294(define spider-party-l3 295 (ptype-mk "clutch of spiders" s_spider faction-spider 3 5 296 (pgroup-mk 'giant-spider "1d2") 297 )) 298 299(define spider-party-l4 300 (ptype-mk "clutch of spiders" s_spider faction-spider 4 5 301 (pgroup-mk 'giant-spider "1d2") 302 (pgroup-mk 'queen-spider "1") 303 )) 304(define headless-party-l1 305 (ptype-mk "headless horror" s_headless faction-monster 1 4 306 (pgroup-mk 'headless "1"))) 307(define headless-party-l3 308 (ptype-mk "mob of headless horrors" s_headless faction-monster 3 4 309 (pgroup-mk 'headless "1d2"))) 310(define headless-party-l5 311 (ptype-mk "warlock with headless horrors" s_wizard faction-monster 5 4 312 (pgroup-mk 'headless "1d2") 313 (pgroup-mk 'warlock "1") 314 )) 315 316(define accursed-party-l4 317 (ptype-mk "accursed master" s_wizard faction-accursed 4 2 318 (pgroup-mk 'accursed-master "1") 319 (pgroup-mk 'accursed-apprentice "1d2-1") 320 (pgroup-mk 'accursed-guardian "1d2") 321 )) 322(define accursed-party-l5 323 (ptype-mk "accursed master" s_wizard faction-accursed 5 2 324 (pgroup-mk 'accursed-master "1") 325 (pgroup-mk 'accursed-defender "1d2") 326 )) 327(define accursed-party-l6 328 (ptype-mk "accursed adept" s_wizard faction-accursed 6 2 329 (pgroup-mk 'accursed-master "1") 330 (pgroup-mk 'accursed-defender "1d2") 331 (pgroup-mk 'accursed-templar "1d2") 332 )) 333(define militia-party-l4 334 (ptype-mk "squad of deserters" s_guard faction-outlaw 4 4 335 (pgroup-mk 'halberdier "1d2") 336 (pgroup-mk 'crossbowman "1d2-1") 337 )) 338 339(define snake-party-l1 340 (ptype-mk "rave of snakes" s_snake faction-monster 1 5 341 (pgroup-mk 'snake "1d2") 342 )) 343(define bat-party-l1 344 (ptype-mk "cloud of bats" s_bat faction-monster 1 1 345 (pgroup-mk 'bat "1d2") 346 )) 347 348(define rat-party-l1 349 (ptype-mk "pack of rats" s_rat faction-monster 5 5 350 (pgroup-mk 'rat "1d2") 351 )) 352 353(define griffin-party-l3 354 (ptype-mk "pride of griffins" s_griffin faction-monster 3 5 355 (pgroup-mk 'griffin "1d2") 356 )) 357 358(define insect-party-l1 359 (ptype-mk "cloud of insects" s_insects faction-monster 1 5 360 (pgroup-mk 'insect "1d3") 361 ))