diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 0d934260b6d..25540dd4965 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -129,9 +129,10 @@
#define IGNORE_ACCESS -1
-#define CHEM_MOB_SPAWN_INVALID 0
-#define CHEM_MOB_SPAWN_HOSTILE 1
-#define CHEM_MOB_SPAWN_FRIENDLY 2
+//gold slime core spawning
+#define NO_SPAWN 0
+#define HOSTILE_SPAWN 1
+#define FRIENDLY_SPAWN 2
#define TINT_IMPAIR 2 //Threshold of tint level to apply weld mask overlay
#define TINT_BLIND 3 //Threshold of tint level to obscure vision fully
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index a6ff50e74fc..10658df4c4b 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -554,3 +554,25 @@ GLOBAL_LIST_INIT(do_after_once_tracker, list())
viewX = text2num(viewrangelist[1])
viewY = text2num(viewrangelist[2])
return list(viewX, viewY)
+
+//Used in chemical_mob_spawn. Generates a random mob based on a given gold_core_spawnable value.
+/proc/create_random_mob(spawn_location, mob_class = HOSTILE_SPAWN)
+ var/static/list/mob_spawn_meancritters = list() // list of possible hostile mobs
+ var/static/list/mob_spawn_nicecritters = list() // and possible friendly mobs
+
+ if(mob_spawn_meancritters.len <= 0 || 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(HOSTILE_SPAWN)
+ mob_spawn_meancritters += T
+ if(FRIENDLY_SPAWN)
+ mob_spawn_nicecritters += T
+
+ var/chosen
+ if(mob_class == FRIENDLY_SPAWN)
+ chosen = pick(mob_spawn_nicecritters)
+ else
+ chosen = pick(mob_spawn_meancritters)
+ var/mob/living/simple_animal/C = new chosen(spawn_location)
+ return C
\ No newline at end of file
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index fac2661337e..4d6a4933ee1 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -13,7 +13,7 @@
maxbodytemp = 360
universal_speak = 1 //So mobs can understand them when a blob uses Blob Broadcast
sentience_type = SENTIENCE_OTHER
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
var/mob/camera/blob/overmind = null
/mob/living/simple_animal/hostile/blob/proc/adjustcolors(var/a_color)
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index aebe5097174..7e18fa4a8ea 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -54,6 +54,14 @@ var/global/list/datum/stack_recipe/human_recipes = list( \
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
+GLOBAL_LIST_INIT(xeno_recipes, list (
+ new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1),
+ new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2)))
+
+/obj/item/stack/sheet/animalhide/xeno/Initialize(mapload, new_amount, merge = TRUE)
+ recipes = GLOB.xeno_recipes
+ return ..()
+
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/sheet/xenochitin
name = "alien chitin"
diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm
index dcc63ba4770..4ad6dcf485b 100644
--- a/code/modules/events/tear.dm
+++ b/code/modules/events/tear.dm
@@ -27,32 +27,25 @@
unacidable = 1
density = 0
anchored = 1
- luminosity = 3
- var/list/tear_critters = list()
+ light_range = 3
-/obj/effect/tear/New()
- ..()
- var/atom/movable/overlay/animation = null
- animation = new(loc)
+/obj/effect/tear/Initialize(mapload)
+ . = ..()
+ var/atom/movable/overlay/animation = new(loc)
animation.icon_state = "newtear"
animation.icon = 'icons/effects/tear.dmi'
animation.master = src
-// flick("newtear",usr)
spawn(15)
if(animation)
qdel(animation)
- spawn(rand(30,120))
- 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
+ addtimer(CALLBACK(src, .proc/spew_critters), rand(30, 120))
- 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))
+/obj/effect/tear/proc/spew_critters()
+ for(var/i in 1 to 5)
+ var/mob/living/simple_animal/S
+ S = create_random_mob(get_turf(src), HOSTILE_SPAWN)
+ S.faction |= "chemicalsummon"
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(S, pick(NORTH, SOUTH, EAST, WEST))
\ No newline at end of file
diff --git a/code/modules/events/tear_honk.dm b/code/modules/events/tear_honk.dm
index 74694185e94..392ef0cd571 100644
--- a/code/modules/events/tear_honk.dm
+++ b/code/modules/events/tear_honk.dm
@@ -14,28 +14,12 @@
qdel(HE)
/obj/effect/tear/honk
- name="Honkmensional Tear"
- desc="A tear in the dimensional fabric of sanity."
- icon='icons/effects/tear.dmi'
- icon_state="tear"
- tear_critters = list(/mob/living/simple_animal/hostile/retaliate/clown/goblin)
+ name = "Honkmensional Tear"
+ desc = "A tear in the dimensional fabric of sanity."
-/obj/effect/tear/honk/New()
- var/atom/movable/overlay/animation = null
- animation = new(loc)
- animation.icon_state = "newtear"
- animation.icon = 'icons/effects/tear.dmi'
- animation.master = src
- spawn(15)
- if(animation)
- qdel(animation)
-
- spawn(rand(30,120))
-
- for(var/i in 1 to 6)
- var/chosen = pick(tear_critters)
- var/mob/living/simple_animal/C = new chosen
- C.forceMove(get_turf(src))
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
+/obj/effect/tear/honk/spew_critters()
+ for(var/i in 1 to 6)
+ var/mob/living/simple_animal/hostile/retaliate/clown/goblin/G = new(get_turf(src))
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(G, pick(NORTH, SOUTH, EAST, WEST))
\ No newline at end of file
diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm
index fbe1067918a..fcefea23eaf 100644
--- a/code/modules/mining/lavaland/loot/colossus_loot.dm
+++ b/code/modules/mining/lavaland/loot/colossus_loot.dm
@@ -356,7 +356,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
mob_size = MOB_SIZE_TINY
- gold_core_spawnable = 0
+ gold_core_spawnable = HOSTILE_SPAWN
speak_emote = list("warps")
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
luminosity = 4
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 5c1001c49e0..9aaffc6ef8f 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -19,7 +19,7 @@
ventcrawler = 2
mob_size = MOB_SIZE_TINY
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 0)
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/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 2458532b157..f552bb5cebd 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -22,7 +22,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
collar_type = "cat"
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
@@ -37,7 +37,7 @@
icon_dead = "cat_dead"
icon_resting = "cat_rest"
gender = FEMALE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
unique_pet = TRUE
var/list/family = list()
var/memory_saved = 0
@@ -190,6 +190,8 @@
/mob/living/simple_animal/pet/cat/Proc
name = "Proc"
+ gender = MALE
+ gold_core_spawnable = NO_SPAWN
unique_pet = TRUE
/mob/living/simple_animal/pet/cat/kitten
@@ -215,7 +217,7 @@
gender = FEMALE
mutations = list(BREATHLESS)
faction = list("syndicate")
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
eats_mice = 0
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
diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
index b52140922f1..0722cf7c602 100644
--- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
@@ -14,9 +14,9 @@
response_help = "pokes"
response_disarm = "shoos"
response_harm = "splats"
- density = 0
- ventcrawler = 2
- gold_core_spawnable = 2
+ density = FALSE
+ ventcrawler = VENTCRAWLER_ALWAYS
+ gold_core_spawnable = FRIENDLY_SPAWN
var/squish_chance = 50
loot = list(/obj/effect/decal/cleanable/insectguts)
del_on_death = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index dad78016f58..7186eb5f5bf 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -19,7 +19,7 @@
ventcrawler = 2
can_hide = 1
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/crab/handle_automated_movement()
//CRAB movement
@@ -39,239 +39,17 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
unique_pet = TRUE
-//LOOK AT THIS - ..()??
-/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
- if(istype(O, /obj/item/wirecutters))
- if(prob(50))
- to_chat(user, "This kills the crab.")
- health -= 20
- death()
- else
- GetMad()
- get
- if(istype(O, /obj/item/stack/medical))
- if(stat != DEAD)
- var/obj/item/stack/medical/MED = O
- if(health < maxHealth)
- if(MED.amount >= 1)
- health = min(maxHealth, health + MED.heal_brute)
- MED.amount -= 1
- if(MED.amount <= 0)
- qdel(MED)
- user.visible_message("[user] applies the [MED] on [src]")
- else
- to_chat(user, "this [src] is dead, medical items won't bring it back to life.")
- else
- if(O.force)
- health -= O.force
- visible_message("[src] has been attacked with the [O] by [user]. ")
- else
- user.visible_message("[user] gently taps [src] with the [O]. ","This weapon is ineffective, it does no damage.")
-
-/mob/living/simple_animal/crab/Topic(href, href_list)
- if(usr.stat) return
-
- //Removing from inventory
- if(href_list["remove_inv"])
- if(get_dist(src,usr) > 1 || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
- return
- var/remove_from = href_list["remove_inv"]
- switch(remove_from)
- if("head")
- if(inventory_head)
- name = real_name
- desc = initial(desc)
- speak_emote = list("clicks")
- emote_hear = list("clicks")
- emote_see = list("clacks")
- desc = "Free crabs!"
- src.sd_set_light(0)
- inventory_head.loc = src.loc
- inventory_head = null
- else
- to_chat(usr, "There is nothing to remove from its [remove_from].")
- return
- if("mask")
- if(inventory_mask)
- inventory_mask.loc = src.loc
- inventory_mask = null
- else
- to_chat(usr, "There is nothing to remove from its [remove_from].")
- return
-
- //show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
-
- //Adding things to inventory
- else if(href_list["add_inv"])
- if(get_dist(src,usr) > 1 || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
- return
- var/add_to = href_list["add_inv"]
- if(!usr.get_active_hand())
- to_chat(usr, "You have nothing in your hand to put on its [add_to].")
- return
- switch(add_to)
- if("head")
- if(inventory_head)
- to_chat(usr, "It's is already wearing something.")
- return
- else
- var/obj/item/item_to_add = usr.get_active_hand()
- if(!item_to_add)
- return
-
- //Corgis are supposed to be simpler, so only a select few objects can actually be put
- //to be compatible with them. The objects are below.
- //Many hats added, Some will probably be removed, just want to see which ones are popular.
-
- var/list/allowed_types = list(
- /obj/item/clothing/head/helmet,
- /obj/item/clothing/glasses/sunglasses,
- /obj/item/clothing/head/caphat,
- /obj/item/clothing/head/collectable/captain,
- /obj/item/clothing/head/that,
- /obj/item/clothing/head/that,
- /obj/item/clothing/head/kitty,
- /obj/item/clothing/head/collectable/kitty,
- /obj/item/clothing/head/rabbitears,
- /obj/item/clothing/head/collectable/rabbitears,
- /obj/item/clothing/head/beret,
- /obj/item/clothing/head/collectable/beret,
- /obj/item/clothing/head/det_hat,
- /obj/item/clothing/head/nursehat,
- /obj/item/clothing/head/pirate,
- /obj/item/clothing/head/collectable/pirate,
- /obj/item/clothing/head/chefhat,
- /obj/item/clothing/head/collectable/chef,
- /obj/item/clothing/head/collectable/police,
- /obj/item/clothing/head/wizard/fake,
- /obj/item/clothing/head/wizard,
- /obj/item/clothing/head/collectable/wizard,
- /obj/item/clothing/head/hardhat,
- /obj/item/clothing/head/collectable/hardhat,
- /obj/item/clothing/head/hardhat/white,
- /obj/item/bedsheet,
- /obj/item/clothing/head/soft
- )
-
- if( ! ( item_to_add.type in allowed_types ) )
- to_chat(usr, "It doesn't seem too keen on wearing that item.")
- return
-
- usr.drop_item()
- item_to_add.loc = src
- src.inventory_head = item_to_add
- regenerate_icons()
-
- //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed.
-
-
- switch(inventory_head && inventory_head.type)
- if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
- name = "Captain [real_name]"
- desc = "Probably better than the last captain."
- if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
- name = "Runtime"
- emote_see = list("coughs up a furball", "stretches")
- emote_hear = list("purrs")
- speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
- desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
- if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
- name = "Hoppy"
- emote_see = list("twitches its nose", "hops around a bit")
- desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit"
- if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
- name = "Yann"
- desc = "Mon dieu! C'est un chien!"
- speak = list("le woof!", "le bark!", "JAPPE!!")
- emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of /him")
- if(/obj/item/clothing/head/det_hat)
- name = "Detective [real_name]"
- desc = "[name] sees through your lies..."
- emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks")
- if(/obj/item/clothing/head/nursehat)
- name = "Nurse [real_name]"
- desc = "[name] needs 100cc of beef jerky...STAT!"
- if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
- name = "'[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]'"
- desc = "Yaarghh!! Thar' be a scurvy dog!"
- emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth")
- emote_hear = list("growls ferociously", "snarls")
- speak = list("Arrrrgh!!","Grrrrrr!")
- if(/obj/item/clothing/head/collectable/police)
- name = "Officer [real_name]"
- emote_see = list("drools","looks for donuts")
- desc = "Stop right there criminal scum!"
- if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
- name = "Grandwizard [real_name]"
- speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
- if(/obj/item/bedsheet)
- name = "\improper Ghost"
- speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
- emote_see = list("stumbles around", "shivers")
- emote_hear = list("howls","groans")
- desc = "Spooky!"
- if(/obj/item/clothing/head/soft)
- name = "Corgi Tech [real_name]"
- speak = list("Needs a stamp!", "Request DENIED!", "Fill these out in triplicate!")
- desc = "The reason your yellow gloves have chew-marks."
-
- if("mask")
- if(inventory_mask)
- to_chat(usr, "It's already wearing something.")
- return
- else
- var/obj/item/item_to_add = usr.get_active_hand()
- if(!item_to_add)
- return
-
- //Corgis are supposed to be simpler, so only a select few objects can actually be put
- //to be compatible with them. The objects are below.
-
- var/list/allowed_types = list(
- /obj/item/clothing/suit/armor/vest,
- /obj/item/radio
- )
-
- if( ! ( item_to_add.type in allowed_types ) )
- to_chat(usr, "This object won't fit.")
- return
-
- usr.drop_item()
- item_to_add.loc = src
- src.inventory_mask = item_to_add
- regenerate_icons()
-
- //show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
- else
- ..()
-*/
-
-/mob/living/simple_animal/crab/proc/GetMad()
- name = "MEGAMADCRAB"
- real_name = "MEGAMADCRAB"
- desc = "OH NO YOU DUN IT NOW."
- icon = 'icons/mob/animal.dmi'
+/mob/living/simple_animal/crab/evil
+ name = "Evil Crab"
+ real_name = "Evil Crab"
+ desc = "Unnerving, isn't it? It has to be planning something nefarious..."
icon_state = "evilcrab"
icon_living = "evilcrab"
icon_dead = "evilcrab_dead"
- speak_emote = list("clicks")
- emote_hear = list("clicks with fury", "clicks angrily")
- emote_see = list("clacks")
- speak_chance = 1
- universal_speak = 1 //So that the entire station may know its fury.
- turns_per_move = 15//Gotta go fast
- speed = -1//Gotta go fast when controlled by a player.
- maxHealth = 100//So they don't die as quickly
- health = 100
- melee_damage_lower = 3
- melee_damage_upper = 10//Kill them. Kill them all
-
- /*if(inventory_head)//Drops inventory so it doesn't have to be dealt with
- inventory_head.loc = src.loc
- inventory_head = null
- if(inventory_mask)
- inventory_mask.loc = src.loc
- inventory_mask = null*/ //Currently does not have the ability to equip anything.
+ response_help = "pokes"
+ response_disarm = "shoves"
+ response_harm = "stomps"
+ gold_core_spawnable = HOSTILE_SPAWN
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm
index 337a2d4b0ca..2c4c2eda960 100644
--- a/code/modules/mob/living/simple_animal/friendly/deer.dm
+++ b/code/modules/mob/living/simple_animal/friendly/deer.dm
@@ -15,4 +15,4 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
\ No newline at end of file
+ gold_core_spawnable = FRIENDLY_SPAWN
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 5ba2440d3f5..55aa587eff9 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -16,7 +16,7 @@
see_in_dark = 5
speak_chance = 1
turns_per_move = 10
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
var/bark_sound = list('sound/creatures/dog_bark1.ogg','sound/creatures/dog_bark2.ogg') //Used in emote.
var/yelp_sound = 'sound/creatures/dog_yelp.ogg' //Used on death.
var/last_eaten = 0
@@ -100,7 +100,6 @@
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1)
childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5)
animal_species = /mob/living/simple_animal/pet/dog
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
collar_type = "corgi"
var/obj/item/inventory_head
var/obj/item/inventory_back
@@ -417,7 +416,7 @@
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
unique_pet = TRUE
var/age = 0
var/record_age = 1
@@ -568,7 +567,7 @@
icon_living = "narsian"
icon_dead = "narsian_dead"
faction = list("neutral", "cult")
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
nofur = TRUE
unique_pet = TRUE
@@ -637,7 +636,7 @@
real_name = "Lisa"
gender = FEMALE
desc = "It's a corgi with a cute pink bow."
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
unique_pet = TRUE
icon_state = "lisa"
icon_living = "lisa"
@@ -753,7 +752,6 @@
icon_living = "pug"
icon_dead = "pug_dead"
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/pug = 3)
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
collar_type = "pug"
/mob/living/simple_animal/pet/dog/pug/handle_automated_movement()
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 0c9aa96728c..99574aeac99 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -123,7 +123,7 @@
health = 50
maxHealth = 50
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
var/obj/item/udder/udder = null
@@ -192,7 +192,7 @@
mob_size = MOB_SIZE_TINY
can_hide = 1
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/chick/New()
..()
@@ -247,7 +247,7 @@ var/global/chicken_count = 0
var/list/feedMessages = list("It clucks happily.","It clucks happily.")
var/list/layMessage = EGG_LAYING_MESSAGES
var/list/validColors = list("brown","black","white")
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/chicken/New()
..()
@@ -327,7 +327,7 @@ var/global/chicken_count = 0
health = 50
maxHealth = 50
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
/mob/living/simple_animal/turkey
@@ -351,7 +351,7 @@ var/global/chicken_count = 0
health = 50
maxHealth = 50
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/goose
name = "goose"
@@ -374,7 +374,7 @@ var/global/chicken_count = 0
health = 50
maxHealth = 50
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/seal
name = "seal"
@@ -397,7 +397,7 @@ var/global/chicken_count = 0
health = 50
maxHealth = 50
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
/mob/living/simple_animal/walrus
@@ -421,7 +421,7 @@ var/global/chicken_count = 0
health = 50
maxHealth = 50
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
/obj/item/udder
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index 7f1e4dcbccc..ad77fd547a5 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -17,14 +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/dog/fox/Renault
name = "Renault"
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
unique_pet = TRUE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
//Syndi fox
/mob/living/simple_animal/pet/dog/fox/Syndifox
@@ -37,7 +36,7 @@
mutations = list(BREATHLESS)
faction = list("syndicate")
unique_pet = TRUE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
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
melee_damage_lower = 10
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 7cd684d2089..2d7426aa451 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -22,4 +22,4 @@
can_hide = 1
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1)
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 6bfb2c044dc..5da6bee438d 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -33,7 +33,7 @@
can_hide = 1
holder_type = /obj/item/holder/mouse
can_collar = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
var/chew_probability = 1
/mob/living/simple_animal/mouse/Initialize(mapload)
@@ -169,7 +169,7 @@
response_disarm = "gently pushes aside"
response_harm = "splats"
unique_pet = TRUE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
/mob/living/simple_animal/mouse/blobinfected
@@ -177,7 +177,7 @@
health = 100
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_INVALID
+ gold_core_spawnable = NO_SPAWN
var/cycles_alive = 0
var/cycles_limit = 30
var/has_burst = FALSE
@@ -231,6 +231,6 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
can_collar = 0
butcher_results = list(/obj/item/stack/sheet/metal = 1)
diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm
index d408045a923..d2dba6da1c9 100644
--- a/code/modules/mob/living/simple_animal/friendly/penguin.dm
+++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm
@@ -28,7 +28,7 @@
icon_living = "penguin"
icon_dead = "penguin_dead"
butcher_results = list()
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/pet/penguin/eldrich
name = "Albino penguin"
@@ -51,6 +51,8 @@
desc = "Shameful of all he surveys."
icon_state = "penguin_shamebrero"
icon_living = "penguin_shamebrero"
+ gold_core_spawnable = NO_SPAWN
+ unique_pet = TRUE
/mob/living/simple_animal/pet/penguin/baby
speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!")
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
index 92ef76b71e0..ddf311d62d4 100644
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm
@@ -16,7 +16,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
melee_damage_lower = 0
melee_damage_upper = 0
health = 50
@@ -29,4 +29,4 @@
name = "Paperwork"
desc = "Cargo's pet sloth. About as useful as the rest of the techs."
unique_pet = TRUE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
\ No newline at end of file
+ gold_core_spawnable = NO_SPAWN
\ 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 35b6885f143..b541d55096a 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -6,13 +6,14 @@
icon_living = "alienh_running"
icon_dead = "alienh_dead"
icon_gib = "syndicate_gib"
- response_help = "pokes the"
- response_disarm = "shoves the"
- response_harm = "hits the"
+ gender = FEMALE
+ response_help = "pokes"
+ response_disarm = "shoves"
+ response_harm = "hits"
speed = 0
- butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 3)
- maxHealth = 100
- health = 100
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 3, /obj/item/stack/sheet/animalhide/xeno = 1)
+ maxHealth = 125
+ health = 125
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 25
@@ -29,7 +30,7 @@
minbodytemp = 0
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
death_sound = 'sound/voice/hiss6.ogg'
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
@@ -39,8 +40,6 @@
icon_state = "aliend_running"
icon_living = "aliend_running"
icon_dead = "aliend_dead"
- health = 60
- maxHealth = 60
melee_damage_lower = 15
melee_damage_upper = 15
var/plant_cooldown = 30
@@ -60,8 +59,8 @@
icon_state = "aliens_running"
icon_living = "aliens_running"
icon_dead = "aliens_dead"
- health = 120
- maxHealth = 120
+ health = 150
+ maxHealth = 150
melee_damage_lower = 15
melee_damage_upper = 15
ranged = 1
@@ -84,6 +83,7 @@
retreat_distance = 5
minimum_distance = 5
move_to_delay = 4
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 4, /obj/item/stack/sheet/animalhide/xeno = 1)
projectiletype = /obj/item/projectile/neurotox
projectilesound = 'sound/weapons/pierce.ogg'
status_flags = 0
@@ -106,7 +106,7 @@
LayEggs()
/mob/living/simple_animal/hostile/alien/proc/SpreadPlants()
- if(!isturf(loc) || istype(loc, /turf/space))
+ if(!isturf(loc) || isspaceturf(loc))
return
if(locate(/obj/structure/alien/weeds/node) in get_turf(src))
return
@@ -114,7 +114,7 @@
new /obj/structure/alien/weeds/node(loc)
/mob/living/simple_animal/hostile/alien/proc/LayEggs()
- if(!isturf(loc) || istype(loc, /turf/space))
+ if(!isturf(loc) || isspaceturf(loc))
return
if(locate(/obj/structure/alien/egg) in get_turf(src))
return
@@ -130,8 +130,9 @@
move_to_delay = 4
maxHealth = 400
health = 400
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 10, /obj/item/stack/sheet/animalhide/xeno = 2)
mob_size = MOB_SIZE_LARGE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
/obj/item/projectile/neurotox
name = "neurotoxin"
@@ -145,14 +146,14 @@
a_intent = INTENT_HELP
friendly = "caresses"
obj_damage = 0
- environment_smash = 0
+ environment_smash = ENVIRONMENT_SMASH_NONE
+ gold_core_spawnable = HOSTILE_SPAWN
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))
+ if(ismovableatom(target))
if(istype(target, /obj/effect/decal/cleanable))
visible_message("\The [src] cleans up \the [target].")
qdel(target)
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index fdb05a51fd9..ae851fe6dcb 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -32,7 +32,7 @@
faction = list("scarybat")
var/mob/living/owner
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
/mob/living/simple_animal/hostile/scarybat/New(loc, mob/living/L as mob)
..()
@@ -73,4 +73,4 @@
pass_flags = PASSTABLE
universal_speak = 1
universal_understand = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //badmin only
\ No newline at end of file
+ gold_core_spawnable = NO_SPAWN //badmin only
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 37ce0150e52..cfe673a78f1 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -32,7 +32,7 @@
minbodytemp = 0
faction = list("russian")
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
//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/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index cf084086ae7..540e4bbf28e 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -36,6 +36,7 @@
density = FALSE
mob_size = MOB_SIZE_TINY
flying = TRUE
+ gold_core_spawnable = HOSTILE_SPAWN
search_objects = TRUE //have to find those plant trays!
//Spaceborn beings don't get hurt by space
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index b071b3f4961..eb2bbddc437 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -35,7 +35,7 @@
faction = list("carp")
flying = TRUE
pressure_resistance = 200
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
var/random_color = TRUE //if the carp uses random coloring
var/rarechance = 1 //chance for rare color variant
@@ -126,7 +126,7 @@
icon_state = "holocarp"
icon_living = "holocarp"
maxbodytemp = INFINITY
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
del_on_death = 1
random_color = FALSE
diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm
index 5b97579b146..225cbfea5b1 100644
--- a/code/modules/mob/living/simple_animal/hostile/creature.dm
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -13,5 +13,5 @@
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm
index 065247a538d..14b66017d41 100644
--- a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm
+++ b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm
@@ -29,7 +29,7 @@
see_in_dark = 8
mob_size = MOB_SIZE_LARGE
ventcrawler = 0
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 2b736ee7641..5065ce63545 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -26,7 +26,7 @@
minbodytemp = 0
faction = list("faithless")
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
/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 ab802590ee3..c88b66f1ffb 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -34,7 +34,7 @@
move_to_delay = 6
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
var/venom_per_bite = 0 // While the /poison/ type path remains as-is for consistency reasons, we're really talking about venom, not poison.
var/busy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/hellhound.dm b/code/modules/mob/living/simple_animal/hostile/hellhound.dm
index 3953ce01a8b..2f149fbf3ee 100644
--- a/code/modules/mob/living/simple_animal/hostile/hellhound.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hellhound.dm
@@ -8,7 +8,7 @@
icon_dead = "hellhound_dead"
icon_resting = "hellhound_rest"
mutations = list(BREATHLESS)
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
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
maxbodytemp = INFINITY
@@ -126,4 +126,4 @@
melee_damage_lower = 20
melee_damage_upper = 30
environment_smash = 2
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 30572f19158..c94648fe641 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -22,7 +22,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
+ gold_core_spawnable = HOSTILE_SPAWN
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
deathmessage = "blows apart!"
del_on_death = 1
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 797beb9b11b..2884e17f5ce 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
@@ -34,7 +34,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
+ gold_core_spawnable = HOSTILE_SPAWN
/mob/living/simple_animal/hostile/panther/AttackingTarget()
. = ..()
@@ -76,7 +76,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
+ gold_core_spawnable = HOSTILE_SPAWN
/mob/living/simple_animal/hostile/snake/AttackingTarget()
. =..()
diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm
index 5cf075ea137..e2c7d2e1b21 100644
--- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm
+++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm
@@ -23,4 +23,4 @@
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 150
maxbodytemp = 500
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 701a75fd3ef..4bc9f5f2c81 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -29,6 +29,7 @@ Difficulty: Medium
icon_living = "miner"
icon = 'icons/mob/alienqueen.dmi'
light_color = "#E4C7C5"
+ flying = FALSE
speak_emote = list("roars")
speed = 3
move_to_delay = 3
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 57277dc2d74..c0628cd72af 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -28,7 +28,7 @@
move_to_delay = 9
var/is_electronic = 0
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
del_on_death = 1
/mob/living/simple_animal/hostile/mimic/emp_act(severity)
@@ -110,7 +110,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
var/destroy_objects = 0
var/knockdown_people = 0
var/image/googly_eyes = null
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
/mob/living/simple_animal/hostile/mimic/copy/New(loc, obj/copy, mob/living/creator, destroy_original = 0)
..(loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm
index 4dbd306c9e0..ef6e3c540f6 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm
@@ -30,7 +30,7 @@
vision_range = 2
aggro_vision_range = 9
turns_per_move = 5
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
loot = list(/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER},
/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER})
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm
index da6a1b4996b..463b6e61e48 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm
@@ -23,7 +23,7 @@
friendly = "pinches"
a_intent = INTENT_HELP
ventcrawler = VENTCRAWLER_ALWAYS
- gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
+ gold_core_spawnable = FRIENDLY_SPAWN
stat_attack = UNCONSCIOUS
gender = NEUTER
stop_automated_movement = FALSE
@@ -137,7 +137,7 @@
/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch
name = "grublunch"
wanted_objects = list() //They don't eat.
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
var/growth = 0
//Baby gutlunch
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/mining.dm b/code/modules/mob/living/simple_animal/hostile/mining/mining.dm
index 00e2d241923..d06ece5d50f 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/mining.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/mining.dm
@@ -2,6 +2,7 @@
/mob/living/simple_animal/hostile/asteroid
vision_range = 2
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)
+ heat_damage_per_tick = 20
faction = list("mining")
weather_immunities = list("lava","ash")
obj_damage = 30
@@ -62,10 +63,4 @@
..(gibbed)
/mob/living/simple_animal/hostile/asteroid/proc/spawn_crusher_loot()
- butcher_results[crusher_loot] = 1
-
-/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
- if(bodytemperature < minbodytemp)
- adjustBruteLoss(2)
- else if(bodytemperature > maxbodytemp)
- adjustBruteLoss(20)
\ No newline at end of file
+ butcher_results[crusher_loot] = 1
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index 487123b1a2d..8f4ef5c7810 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -13,7 +13,7 @@
attack_sound = 'sound/weapons/bladeslice.ogg'
faction = list("creature")
speak_emote = list("screams")
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
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
faction = list("nether")
@@ -56,7 +56,7 @@
icon_state = "blank-body"
icon_living = "blank-body"
icon_dead = "blank-dead"
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
health = 100
maxHealth = 100
melee_damage_lower = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm
index 555530ee71d..f44e6c1f88a 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm
@@ -60,7 +60,7 @@
minbodytemp = 0
maxbodytemp = 1500
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
/mob/living/simple_animal/hostile/retaliate/carp/koi/Initialize(mapload)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
index f4ef47b21a7..6e05b699ea5 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
@@ -47,6 +47,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
pressure_resistance = 300
+ gold_core_spawnable = NO_SPAWN //too spooky for science
faction = list("undead") // did I mention ghost
loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm)
del_on_death = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index ffa51b15bde..acfd9050c04 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -23,7 +23,7 @@
unsuitable_atmos_damage = 10
robust_searching = 1
stat_attack = UNCONSCIOUS
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
faction = list("skeleton")
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
@@ -39,7 +39,7 @@
maxHealth = 55
health = 55
weather_immunities = list("snow")
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
melee_damage_lower = 17
melee_damage_upper = 20
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index f98b918e4ed..c9a0414fdf5 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -350,6 +350,6 @@
minbodytemp = 0
mob_size = MOB_SIZE_TINY
flying = 1
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
del_on_death = 1
deathmessage = "is smashed into pieces!"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 78f79dfc3b2..510e609756b 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -32,7 +32,7 @@
faction = list("hostile", "winter")
loot = list(/obj/item/stack/sheet/wood)
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
deathmessage = "is hacked into pieces!"
del_on_death = 1
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 d8fba34296b..1daf449af24 100644
--- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
@@ -32,7 +32,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
+ gold_core_spawnable = HOSTILE_SPAWN
/mob/living/simple_animal/hostile/winter/snowman/death(gibbed)
@@ -64,7 +64,7 @@
health = 80
melee_damage_lower = 5
melee_damage_upper = 10
- gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
+ gold_core_spawnable = HOSTILE_SPAWN
/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 7e41711554b..0cc174827ae 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -86,7 +86,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
+ gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/parrot/New()
@@ -698,7 +698,7 @@
"Goddam emaggers!"
)
unique_pet = TRUE
- gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
+ gold_core_spawnable = NO_SPAWN
/mob/living/simple_animal/parrot/Poly/New()
ears = new /obj/item/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 b64a044cbea..2e126412580 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -36,7 +36,7 @@
//Temperature effect
var/minbodytemp = 250
var/maxbodytemp = 350
- var/heat_damage_per_tick = 3 //amount of damage applied if animal's body temperature is higher than maxbodytemp
+ var/heat_damage_per_tick = 2 //amount of damage applied if animal's body temperature is higher than maxbodytemp
var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
//Healable by medical stacks? Defaults to yes.
@@ -72,7 +72,7 @@
var/animal_species //Sorry, no spider+corgi buttbabies.
var/buffed = 0 //In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against
- 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/gold_core_spawnable = NO_SPAWN //If the mob can be spawned with a gold slime core. HOSTILE_SPAWN are spawned with plasma, FRIENDLY_SPAWN are spawned with blood
var/mob/living/carbon/human/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
@@ -277,8 +277,10 @@
handle_temperature_damage()
/mob/living/simple_animal/proc/handle_temperature_damage()
- if((bodytemperature < minbodytemp) || (bodytemperature > maxbodytemp))
- adjustHealth(unsuitable_atmos_damage)
+ if(bodytemperature < minbodytemp)
+ adjustHealth(cold_damage_per_tick)
+ else if(bodytemperature > maxbodytemp)
+ adjustHealth(heat_damage_per_tick)
/mob/living/simple_animal/gib()
if(icon_gib)
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index a881f191594..144f7b9a8ac 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -20,22 +20,11 @@
/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume)
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")
+/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_class = HOSTILE_SPAWN, mob_faction = "chemicalsummon", random = TRUE)
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)"
+ var/message = "A [reaction_name] reaction has occurred in [ADMIN_VERBOSEJMP(T)]"
message += " ([ADMIN_VV(A,"VV")])"
var/mob/M = get(A, /mob)
@@ -45,23 +34,23 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
message_admins(message, 0, 1)
+ log_game("[reaction_name] chemical mob spawn reaction occuring at [AREACOORD(T)] carried by [key_name(M)] with last fingerprint [A.fingerprintslast? A.fingerprintslast : "N/A"]")
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)
+
+ for(var/i in 1 to amount_to_spawn)
+ var/mob/living/simple_animal/S
+ if(random)
+ S = create_random_mob(get_turf(holder.my_atom), mob_class)
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))
+ S = new mob_class(get_turf(holder.my_atom))//Spawn our specific mob_class
+ S.faction |= mob_faction
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
+ step(S, pick(NORTH,SOUTH,EAST,WEST))
/proc/goonchem_vortex(turf/T, setting_type, volume)
if(setting_type)
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index b523bbafb45..8bce89128d6 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -194,11 +194,19 @@
id = "life"
result = null
required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "blood" = 1)
- result_amount = 3
+ result_amount = 1
min_temp = T0C + 100
/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume)
- chemical_mob_spawn(holder, 1, "Life")
+ chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (hostile)") //defaults to HOSTILE_SPAWN
+
+/datum/chemical_reaction/life/friendly
+ name = "Life (Friendly)"
+ id = "life_friendly"
+ required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "sugar" = 1)
+
+/datum/chemical_reaction/life/friendly/on_reaction(datum/reagents/holder, created_volume)
+ chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN)
/datum/chemical_reaction/mannitol
name = "Mannitol"
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index afbc94a9455..a1e96ea35f5 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -87,53 +87,41 @@
new /obj/item/stack/sheet/glass (location, 15)
//Gold
-/datum/chemical_reaction/slimecrit
+/datum/chemical_reaction/slimemobspawn
name = "Slime Crit"
id = "m_tele"
result = null
required_reagents = list("plasma_dust" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/gold
- required_other = 1
+ required_other = TRUE
-/datum/chemical_reaction/slimecrit/on_reaction(datum/reagents/holder)
- feedback_add_details("slime_cores_used","[type]")
+/datum/chemical_reaction/slimemobspawn/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 violently !")
- spawn(50)
- chemical_mob_spawn(holder, 5, "Gold Slime")
+ summon_mobs(holder, T)
-/datum/chemical_reaction/slimecritlesser
+/datum/chemical_reaction/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T)
+ T.visible_message("The slime extract begins to vibrate violently!")
+ addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 5, "Gold Slime", HOSTILE_SPAWN), 50)
+
+/datum/chemical_reaction/slimemobspawn/lesser
name = "Slime Crit Lesser"
id = "m_tele3"
- result = null
required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/gold
- required_other = 1
-/datum/chemical_reaction/slimecritlesser/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 violently !")
- spawn(50)
- chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral")
+/datum/chemical_reaction/slimemobspawn/lesser/summon_mobs(datum/reagents/holder, turf/T)
+ T.visible_message("The slime extract begins to vibrate violently!")
+ addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 3, "Lesser Gold Slime", HOSTILE_SPAWN, "neutral"), 50)
-/datum/chemical_reaction/slimecritfriendly
+/datum/chemical_reaction/slimemobspawn/friendly
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
-/datum/chemical_reaction/slimecritfriendly/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")
+/datum/chemical_reaction/slimemobspawn/friendly/summon_mobs(datum/reagents/holder, turf/T)
+ T.visible_message("The slime extract begins to vibrate adorably!")
+ addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 1, "Friendly Gold Slime", FRIENDLY_SPAWN, "neutral"), 50)
//Silver
/datum/chemical_reaction/slimebork
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index b11298ab66e..1ead85e872d 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi
index 0f5e80c4299..3d4140cc041 100644
Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ