/* * Random Mobs */ /obj/random/mob name = "Random Animal" desc = "This is a random animal." icon = 'icons/mob/animal.dmi' icon_state = "chicken_white" var/overwrite_hostility = 0 var/mob_faction = null var/mob_returns_home = 0 var/mob_wander = 1 var/mob_wander_distance = 3 var/mob_hostile = 0 var/mob_retaliate = 0 /obj/random/mob/item_to_spawn() return pick(prob(10);/mob/living/simple_mob/animal/passive/lizard, prob(6);/mob/living/simple_mob/animal/sif/diyaab, prob(10);/mob/living/simple_mob/animal/passive/cat, prob(6);/mob/living/simple_mob/animal/passive/cat, prob(10);/mob/living/simple_mob/animal/passive/dog/corgi, prob(6);/mob/living/simple_mob/animal/passive/dog/corgi/puppy, prob(10);/mob/living/simple_mob/animal/passive/crab, prob(10);/mob/living/simple_mob/animal/passive/chicken, prob(6);/mob/living/simple_mob/animal/passive/chick, prob(10);/mob/living/simple_mob/animal/passive/cow, prob(6);/mob/living/simple_mob/animal/goat, prob(10);/mob/living/simple_mob/animal/passive/penguin, prob(10);/mob/living/simple_mob/animal/passive/mouse, prob(10);/mob/living/simple_mob/animal/passive/yithian, prob(10);/mob/living/simple_mob/animal/passive/tindalos, prob(10);/mob/living/simple_mob/animal/passive/pillbug, prob(10);/mob/living/simple_mob/animal/passive/dog/tamaskan, prob(10);/mob/living/simple_mob/animal/passive/dog/brittany, prob(3);/mob/living/simple_mob/animal/passive/bird/parrot, prob(1);/mob/living/simple_mob/animal/passive/crab) /obj/random/mob/spawn_item() //These should only ever have simple mobs. var/build_path = item_to_spawn() var/mob/living/simple_mob/M = new build_path(src.loc) if(!istype(M)) return if(M.has_AI()) var/datum/ai_holder/AI = M.ai_holder AI.go_sleep() //Don't fight eachother while we're still setting up! AI.returns_home = mob_returns_home AI.wander = mob_wander AI.max_home_distance = mob_wander_distance if(overwrite_hostility) AI.hostile = mob_hostile AI.retaliate = mob_retaliate AI.go_wake() //Now you can kill eachother if your faction didn't override. if(pixel_x || pixel_y) M.pixel_x = pixel_x M.pixel_y = pixel_y /obj/random/mob/sif name = "Random Sif Animal" desc = "This is a random cold weather animal." icon_state = "penguin" mob_returns_home = 1 mob_wander_distance = 10 /obj/random/mob/sif/item_to_spawn() return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab, prob(20);/mob/living/simple_mob/animal/passive/hare, prob(15);/mob/living/simple_mob/animal/passive/crab, prob(15);/mob/living/simple_mob/animal/passive/penguin, prob(15);/mob/living/simple_mob/animal/passive/mouse, prob(15);/mob/living/simple_mob/animal/passive/dog/tamaskan, prob(10);/mob/living/simple_mob/animal/sif/siffet, prob(2);/mob/living/simple_mob/animal/giant_spider/frost, prob(1);/mob/living/simple_mob/animal/space/goose, prob(20);/mob/living/simple_mob/animal/passive/crab) /obj/random/mob/sif/peaceful name = "Random Peaceful Sif Animal" desc = "This is a random peaceful cold weather animal." icon_state = "penguin" mob_returns_home = 1 mob_wander_distance = 12 /obj/random/mob/sif/peaceful/item_to_spawn() return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab, prob(20);/mob/living/simple_mob/animal/passive/hare, prob(15);/mob/living/simple_mob/animal/passive/crab, prob(15);/mob/living/simple_mob/animal/passive/penguin, prob(15);/mob/living/simple_mob/animal/passive/mouse, prob(15);/mob/living/simple_mob/animal/passive/dog/tamaskan, prob(20);/mob/living/simple_mob/animal/sif/hooligan_crab) /obj/random/mob/sif/hostile name = "Random Hostile Sif Animal" desc = "This is a random hostile cold weather animal." icon_state = "frost" /obj/random/mob/sif/hostile/item_to_spawn() return pick(prob(22);/mob/living/simple_mob/animal/sif/savik, prob(33);/mob/living/simple_mob/animal/giant_spider/frost, prob(20);/mob/living/simple_mob/animal/sif/frostfly, prob(10);/mob/living/simple_mob/animal/sif/tymisian, prob(45);/mob/living/simple_mob/animal/sif/shantak) /obj/random/mob/sif/kururak name = "Random Kururak" desc = "This is a random kururak, either waking or hibernating. Will be hostile if more than one are waking." icon_state = "frost" /obj/random/mob/sif/kururak/item_to_spawn() return pick(prob(1);/mob/living/simple_mob/animal/sif/kururak/hibernate, prob(20);/mob/living/simple_mob/animal/sif/kururak) /obj/random/mob/spider name = "Random Spider" //Spiders should patrol where they spawn. desc = "This is a random boring spider." icon_state = "guard" mob_returns_home = 1 mob_wander_distance = 4 /obj/random/mob/spider/item_to_spawn() return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse, prob(33);/mob/living/simple_mob/animal/giant_spider/hunter, prob(45);/mob/living/simple_mob/animal/giant_spider) /obj/random/mob/spider/nurse name = "Random Nurse Spider" desc = "This is a random nurse spider." icon_state = "nurse" mob_returns_home = 1 mob_wander_distance = 4 /obj/random/mob/spider/nurse/item_to_spawn() return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse/hat, prob(45);/mob/living/simple_mob/animal/giant_spider/nurse) /obj/random/mob/spider/mutant name = "Random Mutant Spider" desc = "This is a random mutated spider." icon_state = "phoron" /obj/random/mob/spider/mutant/item_to_spawn() return pick(prob(5);/obj/random/mob/spider, prob(10);/mob/living/simple_mob/animal/giant_spider/webslinger, prob(10);/mob/living/simple_mob/animal/giant_spider/carrier, prob(33);/mob/living/simple_mob/animal/giant_spider/lurker, prob(33);/mob/living/simple_mob/animal/giant_spider/tunneler, prob(40);/mob/living/simple_mob/animal/giant_spider/pepper, prob(20);/mob/living/simple_mob/animal/giant_spider/thermic, prob(40);/mob/living/simple_mob/animal/giant_spider/electric, prob(1);/mob/living/simple_mob/animal/giant_spider/phorogenic, prob(40);/mob/living/simple_mob/animal/giant_spider/frost) /obj/random/mob/robotic name = "Random Robot Mob" desc = "This is a random robot." icon_state = "drone_dead" overwrite_hostility = 1 mob_faction = "malf_drone" mob_returns_home = 1 mob_wander = 1 mob_wander_distance = 5 mob_hostile = 1 mob_retaliate = 1 /obj/random/mob/robotic/item_to_spawn() //Hivebots have a total number of 'lots' equal to the lesser drone, at 60. return pick(prob(60);/mob/living/simple_mob/mechanical/combat_drone/lesser, prob(50);/mob/living/simple_mob/mechanical/combat_drone, prob(50);/mob/living/simple_mob/mechanical/mining_drone, prob(15);/mob/living/simple_mob/mechanical/mecha/ripley, prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus, prob(10);/mob/living/simple_mob/mechanical/hivebot, prob(15);/mob/living/simple_mob/mechanical/hivebot/swarm, prob(10);/mob/living/simple_mob/mechanical/hivebot/ranged_damage, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard) /obj/random/mob/robotic/drone name = "Random Drone" desc = "This is a random drone." icon_state = "drone_dead" overwrite_hostility = 1 mob_faction = "malf_drone" mob_returns_home = 1 mob_wander = 1 mob_wander_distance = 5 mob_hostile = 1 mob_retaliate = 1 /obj/random/mob/robotic/drone/item_to_spawn() return pick(prob(6);/mob/living/simple_mob/mechanical/combat_drone/lesser, prob(1);/mob/living/simple_mob/mechanical/combat_drone, prob(3);/mob/living/simple_mob/mechanical/mining_drone) /obj/random/mob/robotic/hivebot name = "Random Hivebot" desc = "This is a random hivebot." icon_state = "drone3" mob_faction = "hivebot" /obj/random/mob/robotic/hivebot/item_to_spawn() return pick(prob(10);/mob/living/simple_mob/mechanical/hivebot, prob(15);/mob/living/simple_mob/mechanical/hivebot/swarm, prob(10);/mob/living/simple_mob/mechanical/hivebot/ranged_damage, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard) //Mice /obj/random/mob/mouse name = "Random Mouse" desc = "This is a random boring maus." icon_state = "mouse_gray" /obj/random/mob/mouse/item_to_spawn() return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white, prob(30);/mob/living/simple_mob/animal/passive/mouse/brown, prob(30);/mob/living/simple_mob/animal/passive/mouse/gray, prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability. // Mercs /obj/random/mob/merc name = "Random Mercenary" desc = "This is a random PoI mercenary." icon_state = "syndicate" mob_faction = "syndicate" mob_returns_home = 1 mob_wander_distance = 7 // People like to wander, and these people probably have a lot of stuff to guard. /obj/random/mob/merc/item_to_spawn() return pick(prob(60);/mob/living/simple_mob/humanoid/merc/melee/poi, prob(40);/mob/living/simple_mob/humanoid/merc/melee/sword/poi, prob(40);/mob/living/simple_mob/humanoid/merc/ranged/poi, prob(30);/mob/living/simple_mob/humanoid/merc/ranged/smg/poi, prob(20);/mob/living/simple_mob/humanoid/merc/ranged/laser/poi, prob(5);/mob/living/simple_mob/humanoid/merc/ranged/ionrifle/poi, prob(10);/mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi, prob(10);/mob/living/simple_mob/humanoid/merc/ranged/rifle/poi, prob(15);/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag/poi, prob(10);/mob/living/simple_mob/humanoid/merc/ranged/technician/poi ) /obj/random/mob/merc/armored name = "Random Armored Infantry Merc" desc = "This is a random PoI exo or robot for mercs." icon_state = "drone3" /obj/random/mob/merc/armored/item_to_spawn() return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark, prob(40);/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax, prob(40);/mob/living/simple_mob/mechanical/mecha/combat/gygax, prob(10);/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary, prob(60);/mob/living/simple_mob/mechanical/mecha/hoverpod/manned, prob(5);/mob/living/simple_mob/mechanical/mecha/combat/marauder, prob(1);/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph, prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus/manned, prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned, prob(60);/mob/living/simple_mob/mechanical/mecha/ripley/manned ) /obj/random/mob/merc/all name = "Random Mercenary All" desc = "A random PoI mercenary, including armored." /obj/random/mob/merc/all/item_to_spawn() return pick(prob(20);/obj/random/mob/merc, prob(1);/obj/random/mob/merc/armored ) // Multiple mobs, one spawner. /obj/random/mob/multiple name = "Random Multiple Mob Spawner" desc = "A base multiple-mob spawner. Takes lists of lists." /obj/random/mob/multiple/spawn_item() var/list/things_to_make = item_to_spawn() for(var/new_type in things_to_make) var/mob/living/simple_mob/M = new new_type(src.loc) if(!istype(M)) continue if(M.has_AI()) var/datum/ai_holder/AI = M.ai_holder AI.go_sleep() //Don't fight eachother while we're still setting up! AI.returns_home = mob_returns_home AI.wander = mob_wander AI.max_home_distance = mob_wander_distance if(overwrite_hostility) AI.hostile = mob_hostile AI.retaliate = mob_retaliate AI.go_wake() //Now you can kill eachother if your faction didn't override. if(pixel_x || pixel_y) M.pixel_x = pixel_x M.pixel_y = pixel_y /obj/random/mob/multiple/sifmobs name = "Random Sifmob Pack" desc = "A pack of random neutral sif mobs." /obj/random/mob/multiple/sifmobs/item_to_spawn() return pick( prob(60);list( /mob/living/simple_mob/animal/sif/diyaab, /mob/living/simple_mob/animal/sif/diyaab, /mob/living/simple_mob/animal/sif/diyaab ), prob(15);list( /mob/living/simple_mob/animal/sif/duck, /mob/living/simple_mob/animal/sif/duck, /mob/living/simple_mob/animal/sif/duck ), prob(15);list( /mob/living/simple_mob/animal/passive/hare, /mob/living/simple_mob/animal/passive/hare, /mob/living/simple_mob/animal/passive/hare, /mob/living/simple_mob/animal/passive/hare ), prob(10);list( /mob/living/simple_mob/animal/sif/shantak/retaliate, /mob/living/simple_mob/animal/sif/shantak/retaliate, /mob/living/simple_mob/animal/sif/shantak/retaliate, /mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate ), prob(5);list( /mob/living/simple_mob/animal/sif/kururak/leader, /mob/living/simple_mob/animal/sif/kururak, /mob/living/simple_mob/animal/sif/kururak ), prob(5);list( /mob/living/simple_mob/animal/sif/glitterfly, /mob/living/simple_mob/animal/sif/glitterfly, /mob/living/simple_mob/animal/sif/glitterfly, /mob/living/simple_mob/animal/sif/glitterfly, /mob/living/simple_mob/animal/sif/glitterfly ), prob(1);list( /mob/living/simple_mob/animal/goat, /mob/living/simple_mob/animal/goat ), prob(1);list( /mob/living/simple_mob/animal/sif/sakimm/intelligent, /mob/living/simple_mob/animal/sif/sakimm, /mob/living/simple_mob/animal/sif/sakimm, /mob/living/simple_mob/animal/sif/sakimm ) )