diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm
index 9f9d1d15c94..2bdb3432f69 100644
--- a/code/__DEFINES/mob.dm
+++ b/code/__DEFINES/mob.dm
@@ -94,3 +94,7 @@
#define DEFAULT_ITEM_PUTON_DELAY 20 //time taken (in deciseconsd) to reverse-strip somebody
#define IGNORE_ACCESS -1
+
+#define CHEM_MOB_SPAWN_INVALID 0
+#define CHEM_MOB_SPAWN_HOSTILE 1
+#define CHEM_MOB_SPAWN_FRIENDLY 2
\ No newline at end of file
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 91a06fa4647..04abf50e362 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -24,53 +24,6 @@ var/global/list/dead_mob_list = list() //List of all dead mobs, including cli
var/global/list/respawnable_list = list() //List of all mobs, dead or in mindless creatures that still be respawned.
var/global/list/simple_animal_list = list() //List of all simple animals, including clientless
-//global var of unsafe-to-spawn-on-reaction mobs
-var/global/list/blocked_mobs = list(/mob/living/simple_animal,
- /mob/living/simple_animal/hostile,
- /mob/living/simple_animal/hostile/pirate,
- /mob/living/simple_animal/hostile/pirate/ranged,
- /mob/living/simple_animal/hostile/russian,
- /mob/living/simple_animal/hostile/russian/ranged,
- /mob/living/simple_animal/hostile/syndicate,
- /mob/living/simple_animal/hostile/syndicate/melee,
- /mob/living/simple_animal/hostile/syndicate/melee/space,
- /mob/living/simple_animal/hostile/syndicate/ranged,
- /mob/living/simple_animal/hostile/syndicate/ranged/space,
- /mob/living/simple_animal/hostile/alien/queen/large,
- /mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/retaliate/clown,
- /mob/living/simple_animal/hostile/mushroom,
- /mob/living/simple_animal/hostile/asteroid,
- /mob/living/simple_animal/hostile/asteroid/basilisk,
- /mob/living/simple_animal/hostile/asteroid/goldgrub,
- /mob/living/simple_animal/hostile/asteroid/goliath,
- /mob/living/simple_animal/hostile/asteroid/hivelord,
- /mob/living/simple_animal/hostile/asteroid/hivelordbrood,
- /mob/living/simple_animal/hostile/carp/holocarp,
- /mob/living/simple_animal/hostile/mining_drone,
- /mob/living/simple_animal/hostile/spaceWorm,
- /mob/living/simple_animal/hostile/spaceWorm/wormHead,
- /mob/living/simple_animal/ascendant_shadowling,
- /mob/living/simple_animal/slaughter,
- /mob/living/simple_animal/hostile/retaliate/araneus,
- /mob/living/simple_animal/hostile/syndicate/ranged/orion,
- /mob/living/simple_animal/hostile/statue,
- /mob/living/simple_animal/hostile/guardian,
- /mob/living/simple_animal/hostile/guardian/fire,
- /mob/living/simple_animal/hostile/guardian/healer,
- /mob/living/simple_animal/hostile/guardian/punch,
- /mob/living/simple_animal/hostile/guardian/punch/sealpunch,
- /mob/living/simple_animal/hostile/guardian/healer/sealhealer,
- /mob/living/simple_animal/hostile/guardian/ranged,
- /mob/living/simple_animal/hostile/guardian/bomb,
- /mob/living/simple_animal/hostile/winter/santa,
- /mob/living/simple_animal/hostile/winter/santa/stage_1,
- /mob/living/simple_animal/hostile/winter/santa/stage_2,
- /mob/living/simple_animal/hostile/winter/santa/stage_3,
- /mob/living/simple_animal/hostile/winter/santa/stage_4,
- /mob/living/simple_animal/hostile/alien/maid
- )
-
var/global/list/med_hud_users = list()
var/global/list/sec_hud_users = list()
var/global/list/antag_hud_users = list()
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index bfaad382adf..a35505470fa 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -40,6 +40,7 @@
var/obj/effect/blob/factory/factory = null
var/list/human_overlays = list()
var/is_zombie = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
@@ -160,6 +161,7 @@
maxbodytemp = 360
force_threshold = 10
environment_smash = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/blob/blobbernaut/blob_act()
diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm
index 605c6d1705d..e409f6592d8 100644
--- a/code/modules/events/tear.dm
+++ b/code/modules/events/tear.dm
@@ -41,15 +41,17 @@
if(animation) qdel(animation)
spawn(rand(30,120))
- var/blocked = blocked_mobs //global variable for blocked mobs
+ var/list/tear_critters = list()
+ for(var/T in typesof(/mob/living/simple_animal))
+ var/mob/living/simple_animal/SA = T
+ if(initial(SA.gold_core_spawnable) == CHEM_MOB_SPAWN_HOSTILE)
+ tear_critters += T
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction = list("slimesummon")
- C.loc = src.loc
+ for(var/i in 1 to 5)
+ var/chosen = pick(tear_critters)
+ var/mob/living/simple_animal/C = new chosen
+ C.faction |= "chemicalsummon"
+ C.forceMove(get_turf(src))
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 27df35c5bf9..60aad72ab36 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -18,6 +18,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 0)
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/butterfly/New()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index b2a0c129b29..c77d117bad4 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -20,6 +20,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/pet/cat/Runtime
@@ -32,6 +33,7 @@
gender = FEMALE
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/pet/cat/Runtime/handle_automated_action()
..()
@@ -96,4 +98,5 @@
flags = NO_BREATHE
faction = list("syndicate")
var/turns_since_scan = 0
- var/mob/living/simple_animal/mouse/movement_target
\ No newline at end of file
+ var/mob/living/simple_animal/mouse/movement_target
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index f51e3e81f65..7be60d7d5d6 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -26,6 +26,7 @@
var/obj/item/inventory_head
var/obj/item/inventory_back
var/facehugger
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/pet/corgi/New()
..()
@@ -397,6 +398,7 @@
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/pet/corgi/Ian/process_ai()
..()
@@ -553,6 +555,7 @@
response_harm = "kicks"
var/turns_since_scan = 0
var/puppies = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//Lisa already has a cute bow!
/mob/living/simple_animal/pet/corgi/Lisa/Topic(href, href_list)
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 524cffc9979..70639291ab9 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -22,6 +22,7 @@
var/obj/item/inventory_mask
can_hide = 1
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/crab/handle_automated_movement()
//CRAB movement
@@ -46,6 +47,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//LOOK AT THIS - ..()??
/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm
index 0cc59c07f94..034fa07b6fb 100644
--- a/code/modules/mob/living/simple_animal/friendly/deer.dm
+++ b/code/modules/mob/living/simple_animal/friendly/deer.dm
@@ -14,4 +14,5 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- can_collar = 1
\ No newline at end of file
+ can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index f3e77854882..863141e5e83 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -111,6 +111,7 @@
health = 50
var/milk_content = 0
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/cow/New()
..()
@@ -178,6 +179,7 @@
small = 1
can_hide = 1
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/chick/New()
..()
@@ -220,6 +222,7 @@ var/global/chicken_count = 0
small = 1
can_hide = 1
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/chicken/New()
..()
@@ -297,6 +300,7 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/turkey
name = "turkey"
@@ -318,6 +322,7 @@ var/global/chicken_count = 0
attacktext = "pecks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/goose
name = "goose"
@@ -339,6 +344,7 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/seal
name = "seal"
@@ -360,6 +366,7 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/walrus
name = "walrus"
@@ -381,3 +388,4 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index cd62ababfe7..5bf03f083a2 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -17,11 +17,13 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
//Captain fox
/mob/living/simple_animal/pet/fox/Renault
name = "Renault"
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//Syndi fox
/mob/living/simple_animal/pet/fox/Syndifox
@@ -33,3 +35,4 @@
icon_resting = "Syndifox_rest"
flags = NO_BREATHE
faction = list("syndicate")
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 27cb2eb17cf..b5c0ccedeae 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -22,3 +22,4 @@
can_hide = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 1)
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index c24da570653..90c4c0f06ec 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -31,6 +31,7 @@
can_hide = 1
holder_type = /obj/item/weapon/holder/mouse
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/mouse/handle_automated_speech()
..()
@@ -144,3 +145,4 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "splats"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm
index b4b6486b859..ec8a38509f1 100644
--- a/code/modules/mob/living/simple_animal/friendly/pug.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pug.dm
@@ -17,6 +17,7 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/pet/pug/process_ai()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm
index f6d0bf9752e..ca135fe87be 100644
--- a/code/modules/mob/living/simple_animal/friendly/tomato.dm
+++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm
@@ -14,4 +14,5 @@
response_harm = "smacks the"
harm_intent_damage = 5
pass_flags = PASSTABLE
- can_hide = 1
\ No newline at end of file
+ can_hide = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 47cfdd23984..80571d2eef8 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -29,6 +29,7 @@
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
heat_damage_per_tick = 20
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/alien/drone
@@ -127,6 +128,7 @@
move_to_delay = 4
maxHealth = 400
health = 400
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/obj/item/projectile/neurotox
name = "neurotoxin"
@@ -151,6 +153,7 @@
icon_state = "maid"
icon_living = "maid"
icon_dead = "maid_dead"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //no fun allowed
/mob/living/simple_animal/hostile/alien/maid/AttackingTarget()
if(istype(target, /atom/movable))
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index 70c117860af..bbdf639c0f4 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -29,6 +29,7 @@
faction = list("scarybat")
var/mob/living/owner
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/scarybat/New(loc, mob/living/L as mob)
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 0171e960ed0..f55c4ce98d6 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -31,6 +31,7 @@
var/stance_step = 0
faction = list("russian")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!!
/mob/living/simple_animal/hostile/bear/Hudson
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 2b13fadec8d..ddd302c3e8c 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -33,6 +33,7 @@
faction = list("carp")
flying = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0)
return 1 //No drifting in space for space carp! //original comments do not steal
@@ -53,6 +54,7 @@
icon_state = "holocarp"
icon_living = "holocarp"
maxbodytemp = INFINITY
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/hostile/carp/holocarp/death()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm
index 9a3357e058a..50aa20b60d0 100644
--- a/code/modules/mob/living/simple_animal/hostile/creature.dm
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -13,4 +13,5 @@
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 380b332a7e4..a14efc6d279 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -25,6 +25,7 @@
speed = 4
faction = list("faithless")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/movement_dir = 0)
return 1
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 9de16829259..bb381f24be1 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -49,6 +49,7 @@
move_to_delay = 6
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
//nursemaids - these create webs and eggs
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
index b470f0506ff..b2b6d9ff716 100644
--- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
@@ -21,6 +21,7 @@
ventcrawler = 2
var/datum/mind/origin
var/egg_lain = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim)
var/obj/item/organ/internal/body_egg/changeling_egg/egg = new(victim)
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 44f5caa1609..3ccbb9abec2 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -21,6 +21,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
speak_emote = list("states")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
index 6404ab29f21..85268dee619 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
@@ -30,6 +30,7 @@
layer = 3.1 //so they can stay hidde under the /obj/structure/bush
var/stalk_tick_delay = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/panther/ListTargets()
var/list/targets = list()
@@ -87,6 +88,7 @@
layer = 3.1 //so they can stay hidde under the /obj/structure/bush
var/stalk_tick_delay = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/snake/ListTargets()
var/list/targets = list()
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 2f077249527..7cff96385e1 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -30,6 +30,7 @@
move_to_delay = 9
var/is_electronic = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
@@ -139,6 +140,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
var/mob/living/creator = null // the creator
var/destroy_objects = 0
var/knockdown_people = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/hostile/mimic/copy/New(loc, var/obj/copy, var/mob/living/creator, var/destroy_original = 0)
..(loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/poison_bees.dm b/code/modules/mob/living/simple_animal/hostile/poison_bees.dm
index b05ba13ccab..c8a6a79fb04 100644
--- a/code/modules/mob/living/simple_animal/hostile/poison_bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/poison_bees.dm
@@ -24,6 +24,7 @@
//Spaceborn beings don't get hurt by space
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(var/check_drift = 0)
return 1
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 434d1739b9e..3a9d9e46aa6 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -132,6 +132,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
flying = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/viscerator/death()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 555386debcb..bd39b681978 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -28,6 +28,7 @@
minbodytemp = 0
faction = list("hostile", "winter")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
index 930eb144af8..274ba14f156 100644
--- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
@@ -33,6 +33,7 @@
bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold.
maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something.
heat_damage_per_tick = 10 //Now With Rapid Thawing Action!
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/winter/snowman/death()
@@ -63,6 +64,7 @@
melee_damage_lower = 5
melee_damage_upper = 10
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/winter/santa
maxHealth = 150 //if this seems low for a "boss", it's because you have to fight him multiple times, with him fully healing between stages
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 9a53f6bfa35..3096a85e39b 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -82,6 +82,7 @@
//Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding.
var/obj/item/held_item = null
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/parrot/New()
@@ -272,13 +273,13 @@
//Sprite and AI update for when a parrot gets pulled
if(pulledby && stat == CONSCIOUS)
- icon_state = "parrot_fly"
+ icon_state = "parrot_fly"
/mob/living/simple_animal/parrot/process_ai()
if(pulledby)
parrot_state = PARROT_WANDER
return
-
+
if(!isturf(src.loc) || !canmove || buckled)
return //If it can't move, dont let it move. (The buckled check probably isn't necessary thanks to canmove)
@@ -682,6 +683,7 @@
name = "Poly"
desc = "Poly the Parrot. An expert on quantum cracker theory."
speak = list("Poly wanna cracker!", ":eCheck the singlo, you chucklefucks!",":eCheck the tesla, you shits!",":eSTOP HOT-WIRING THE ENGINE, FUCKING CHRIST!",":eWire the solars, you lazy bums!",":eWHO TOOK THE DAMN HARDSUITS?",":eOH GOD ITS FREE CALL THE SHUTTLE")
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/parrot/Poly/New()
ears = new /obj/item/device/radio/headset/headset_eng(src)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 362ec626f2b..f862b889710 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -67,6 +67,8 @@
var/scan_ready = 1
var/simplespecies //Sorry, no spider+corgi buttbabies.
+ var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
+
var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
@@ -695,4 +697,4 @@
. |= collar.GetAccess()
/mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion
- return
+ return
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index f742424970d..677cc94f7a8 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -681,34 +681,6 @@ datum/reagent/life
/datum/chemical_reaction/life/on_reaction(var/datum/reagents/holder, var/created_volume)
chemical_mob_spawn(holder, 1, "Life")
-proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reaction_name, var/mob_faction = "chemicalsummon")
- if(holder && holder.my_atom)
- var/blocked = blocked_mobs //global variable for blocked mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
- var/atom/A = holder.my_atom
- var/turf/T = get_turf(A)
- var/area/my_area = get_area(T)
- var/message = "A [reaction_name] reaction has occured in ([my_area.name])"
- var/mob/M = get(A, /mob)
- if(M)
- message += " - carried by: [key_name_admin(M)]"
- else
- message += " - last fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
-
- message_admins(message, 0, 1)
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/i = 1, i <= amount_to_spawn, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= mob_faction
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-
/datum/reagent/mannitol/on_mob_life(mob/living/M as mob)
M.adjustBrainLoss(-3)
..()
diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm
index 4a6ec32366e..5f3c416a6ab 100644
--- a/code/modules/reagents/newchem/newchem_procs.dm
+++ b/code/modules/reagents/newchem/newchem_procs.dm
@@ -166,4 +166,47 @@
/datum/reagent/proc/reagent_deleted()
return
+var/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs
+var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
+/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_faction = "chemicalsummon")
+ if(holder && holder.my_atom)
+ if(chemical_mob_spawn_meancritters.len <= 0 || chemical_mob_spawn_nicecritters.len <= 0)
+ for(var/T in typesof(/mob/living/simple_animal))
+ var/mob/living/simple_animal/SA = T
+ switch(initial(SA.gold_core_spawnable))
+ if(CHEM_MOB_SPAWN_HOSTILE)
+ chemical_mob_spawn_meancritters += T
+ if(CHEM_MOB_SPAWN_FRIENDLY)
+ chemical_mob_spawn_nicecritters += T
+ var/atom/A = holder.my_atom
+ var/turf/T = get_turf(A)
+ var/area/my_area = get_area(T)
+ var/message = "A [reaction_name] reaction has occured in [my_area.name]. (JMP)"
+ message += " (VV)"
+
+ var/mob/M = get(A, /mob)
+ if(M)
+ message += " - Carried By: [key_name_admin(M)](?) (FLW)"
+ else
+ message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
+
+ message_admins(message, 0, 1)
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
+ C.flash_eyes()
+ for(var/i = 1, i <= amount_to_spawn, i++)
+ var/chosen
+ if(reaction_name == "Friendly Gold Slime")
+ chosen = pick(chemical_mob_spawn_nicecritters)
+ else
+ chosen = pick(chemical_mob_spawn_meancritters)
+ var/mob/living/simple_animal/C = new chosen
+ C.faction |= mob_faction
+ C.forceMove(get_turf(holder.my_atom))
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(C, pick(NORTH,SOUTH,EAST,WEST))
+
#undef ADDICTION_TIME
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
index 649a32ae373..5ba9f9057af 100644
--- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
@@ -77,31 +77,16 @@
name = "Slime Crit"
id = "m_tele"
result = null
- required_reagents = list("plasma" = 5)
+ required_reagents = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/gold
required_other = 1
on_reaction(var/datum/reagents/holder)
-
- var/blocked = blocked_mobs //global variable of blocked mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
- C.flash_eyes()
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "slimesummon"
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-// for(var/mob/O in viewers(get_turf(holder.my_atom), null))
-// O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
+ feedback_add_details("slime_cores_used","[type]")
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
+ spawn(50)
+ chemical_mob_spawn(holder, 5, "Gold Slime")
slimecritlesser
@@ -113,26 +98,28 @@
required_container = /obj/item/slime_extract/gold
required_other = 1
on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently!"), 1)
+ feedback_add_details("slime_cores_used","[type]")
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
spawn(50)
+ chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral")
- if(holder && holder.my_atom)
- var/blocked = blocked_mobs
+ slimecritfriendly
+ name = "Slime Crit Friendly"
+ id = "m_tele5"
+ result = null
+ required_reagents = list("water" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/gold
+ required_other = 1
+ on_reaction(datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[type]")
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate adorably !")
+ spawn(50)
+ chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral")
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
- C.flash_eyes()
-
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "neutral"
- C.loc = get_turf(holder.my_atom)
//Silver
slimebork
diff --git a/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm b/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
index 6fc2c277519..654b1a9ccde 100644
--- a/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
+++ b/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
@@ -17,6 +17,7 @@
speak = list("Hruuugh!","Hrunnph")
emote_see = list("paws the ground","shakes its mane","stomps")
emote_hear = list("snuffles")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/diyaab
name = "diyaab"
@@ -37,6 +38,7 @@
speak = list("Awrr?","Aowrl!","Worrl")
emote_see = list("sniffs the air cautiously","looks around")
emote_hear = list("snuffles")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/shantak
name = "shantak"
@@ -56,6 +58,7 @@
speak_chance = 5
speak = list("Shuhn","Shrunnph?","Shunpf")
emote_see = list("scratches the ground","shakes out it's mane","tinkles gently")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/yithian
name = "yithian"
@@ -63,6 +66,7 @@
icon_state = "yithian"
icon_living = "yithian"
icon_dead = "yithian_dead"
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/tindalos
name = "tindalos"
@@ -70,3 +74,4 @@
icon_state = "tindalos"
icon_living = "tindalos"
icon_dead = "tindalos_dead"
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY