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