From 22241278a37cbc57b19b18ddb069115f1e04f142 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Fri, 15 Sep 2023 20:56:55 -0400 Subject: [PATCH] Refactors species organs, deletes golems & adamantine (#595) * refactor species organs * deletes golems and adamantine * no null new call pls * clean up more leftover stuff * more cleanup * fix reviving i hope --- .../RandomRuins/AnywhereRuins/golem_ship.dmm | 23 +- .../LavaRuins/lavaland_surface_greed.dmm | 2 +- _maps/RandomZLevels/caves.dmm | 18 +- _maps/shuttles/ferry_meat.dmm | 3 - code/__DEFINES/DNA.dm | 69 +- code/__DEFINES/is_helpers.dm | 1 - code/_globalvars/phobias.dm | 1 - code/datums/diseases/gastrolisis.dm | 98 -- code/datums/dna.dm | 16 +- code/datums/elements/spooky.dm | 4 +- code/datums/materials/basemats.dm | 20 - code/datums/mind.dm | 2 +- code/game/machinery/recycler.dm | 2 +- code/game/machinery/scan_gate.dm | 4 - .../objects/effects/decals/cleanable/food.dm | 10 - .../effects/spawners/random/entertainment.dm | 1 - code/game/objects/items/defib.dm | 2 +- code/game/objects/items/food/meat.dm | 5 - .../objects/items/implants/implant_misc.dm | 14 - .../objects/items/stacks/sheets/mineral.dm | 23 - code/game/objects/items/storage/boxes.dm | 1 - .../structures/icemoon/cave_entrance.dm | 14 +- code/game/turfs/closed/minerals.dm | 6 +- .../abductor/equipment/glands/heal.dm | 35 +- .../changeling/powers/regenerate.dm | 9 +- .../antagonists/nightmare/nightmare_organs.dm | 5 - .../nightmare/nightmare_species.dm | 15 +- code/modules/cargo/bounties/slime.dm | 4 - code/modules/cargo/bounties/special.dm | 7 - code/modules/cargo/exports/materials.dm | 5 - code/modules/cargo/exports/xenobio.dm | 2 +- .../preferences/augments/augment_organ.dm | 6 +- code/modules/clothing/gloves/boxing.dm | 1 - code/modules/clothing/masks/bandana.dm | 1 - code/modules/clothing/masks/gasmask.dm | 7 +- code/modules/clothing/masks/moustache.dm | 2 +- code/modules/clothing/shoes/boots.dm | 1 - code/modules/clothing/shoes/clown.dm | 1 - code/modules/clothing/shoes/costume.dm | 4 +- code/modules/clothing/shoes/sandals.dm | 2 +- code/modules/clothing/suits/costume.dm | 10 +- code/modules/clothing/suits/ghostsheet.dm | 2 +- code/modules/clothing/suits/jacket.dm | 12 +- code/modules/clothing/suits/jobs.dm | 10 +- code/modules/clothing/suits/labcoat.dm | 2 +- code/modules/clothing/suits/shirt.dm | 4 +- code/modules/clothing/suits/wetfloor.dm | 2 +- code/modules/clothing/suits/wintercoats.dm | 3 +- .../under/jobs/civilian/clown_mime.dm | 1 - .../clothing/under/jobs/engineering.dm | 1 - code/modules/clothing/under/pants.dm | 1 - code/modules/clothing/under/shorts.dm | 1 - .../mapfluff/ruins/lavaland_ruin_code.dm | 81 - code/modules/mining/money_bag.dm | 3 +- code/modules/mining/ores_coins.dm | 5 - .../new_player/sprite_accessories/snouts.dm | 1 - code/modules/mob/living/brain/MMI.dm | 25 +- code/modules/mob/living/brain/brain_item.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 135 +- .../mob/living/carbon/human/species.dm | 73 +- .../carbon/human/species_types/abductors.dm | 13 +- .../carbon/human/species_types/android.dm | 13 +- .../carbon/human/species_types/dullahan.dm | 266 ---- .../carbon/human/species_types/ethereal.dm | 24 +- .../carbon/human/species_types/flypeople.dm | 23 +- .../carbon/human/species_types/golems.dm | 1329 ----------------- .../carbon/human/species_types/humans.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 13 +- .../human/species_types/lizardpeople.dm | 49 +- .../carbon/human/species_types/monkeys.dm | 2 - .../carbon/human/species_types/mothmen.dm | 17 +- .../carbon/human/species_types/mushpeople.dm | 62 - .../carbon/human/species_types/plasmamen.dm | 20 +- .../carbon/human/species_types/podpeople.dm | 2 +- .../human/species_types/shadowpeople.dm | 12 +- .../carbon/human/species_types/skeletons.dm | 16 +- .../carbon/human/species_types/snail.dm | 71 - .../carbon/human/species_types/teshari.dm | 15 +- .../carbon/human/species_types/vampire.dm | 17 +- .../living/carbon/human/species_types/vox.dm | 22 +- .../carbon/human/species_types/zombies.dm | 47 +- code/modules/mob/living/carbon/life.dm | 9 +- code/modules/mob/living/living.dm | 7 +- .../hostile/megafauna/colossus.dm | 2 - .../mob_spawn/corpses/mining_corpses.dm | 18 - .../mob_spawn/ghost_roles/golem_roles.dm | 108 -- .../chemistry/reagents/drug_reagents.dm | 11 - .../chemistry/reagents/mutation_toxins.dm | 20 - .../chemistry/recipes/slime_extracts.dm | 20 - .../xenobiology/crossbreeding/_clothing.dm | 16 - .../crossbreeding/_status_effects.dm | 63 - .../xenobiology/crossbreeding/_weapons.dm | 22 - .../xenobiology/crossbreeding/burning.dm | 9 - .../xenobiology/crossbreeding/charged.dm | 9 - .../xenobiology/crossbreeding/chilling.dm | 25 +- .../xenobiology/crossbreeding/consuming.dm | 14 - .../xenobiology/crossbreeding/industrial.dm | 6 - .../xenobiology/crossbreeding/prismatic.dm | 4 - .../xenobiology/crossbreeding/recurring.dm | 5 - .../xenobiology/crossbreeding/regenerative.dm | 7 - .../xenobiology/crossbreeding/reproductive.dm | 4 - .../crossbreeding/selfsustaining.dm | 4 - .../xenobiology/crossbreeding/stabilized.dm | 4 - .../research/xenobiology/xenobiology.dm | 51 - .../bodyparts/species_parts/misc_bodyparts.dm | 339 ----- .../surgery/machines/bodyscanner_helpers.dm | 2 +- code/modules/surgery/organs/appendix.dm | 4 - code/modules/surgery/organs/heart.dm | 7 +- code/modules/surgery/organs/liver.dm | 3 - code/modules/surgery/organs/lungs.dm | 3 - .../surgery/organs/stomach/_stomach.dm | 3 - code/modules/surgery/organs/vocal_cords.dm | 35 - daedalus.dme | 6 - 114 files changed, 455 insertions(+), 3242 deletions(-) delete mode 100644 code/datums/diseases/gastrolisis.dm delete mode 100644 code/modules/mob/living/carbon/human/species_types/dullahan.dm delete mode 100644 code/modules/mob/living/carbon/human/species_types/golems.dm delete mode 100644 code/modules/mob/living/carbon/human/species_types/mushpeople.dm delete mode 100644 code/modules/mob/living/carbon/human/species_types/snail.dm delete mode 100644 code/modules/mob_spawn/ghost_roles/golem_roles.dm diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index fd5605541431..bfcf5649c998 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -70,10 +70,6 @@ "l" = ( /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) -"m" = ( -/obj/effect/mob_spawn/ghost_role/human/golem/adamantine, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/golem_ship) "n" = ( /obj/machinery/mineral/equipment_vendor/golem, /turf/open/floor/mineral/titanium/purple, @@ -179,7 +175,6 @@ /obj/item/storage/medkit/brute, /obj/structure/table/wood, /obj/item/storage/medkit/brute, -/obj/item/disk/data/golem_shell, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) "E" = ( @@ -214,11 +209,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) -"M" = ( -/obj/effect/mob_spawn/ghost_role/human/golem/adamantine, -/obj/machinery/light/small/directional/north, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/golem_ship) "N" = ( /obj/machinery/light/directional/north, /turf/open/floor/mineral/titanium/purple, @@ -236,11 +226,6 @@ /obj/machinery/door/airlock/titanium, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) -"U" = ( -/obj/effect/mob_spawn/ghost_role/human/golem/adamantine, -/obj/machinery/light/small/directional/south, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/golem_ship) "V" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/plating, @@ -402,14 +387,14 @@ b c I b -M +L o b l l G o -U +Q b V F @@ -420,14 +405,14 @@ b c f b -m +l o b l l G o -m +l b f F diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm index 27e36df29f7a..6b26c7cb7f12 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm @@ -34,7 +34,7 @@ /area/ruin/powered/greed) "j" = ( /obj/structure/table/wood/poker, -/obj/item/coin/adamantine, +/obj/item/coin/mythril, /turf/open/floor/carpet, /area/ruin/powered/greed) "k" = ( diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 4389308ad6bd..a44ceaf89395 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -2229,22 +2229,6 @@ }, /area/awaymission/caves/bmp_asteroid) -"Ly" = ( -/obj/structure/closet/crate/miningcar{ - name = "Mining cart" - }, -/obj/item/pickaxe/rusted{ - pixel_x = 5 - }, -/obj/item/stack/sheet/mineral/adamantine{ - amount = 15 - }, -/turf/open/misc/asteroid/basalt{ - initial_gas = list("nitrogen" = 23, "oxygen" = 14); - temperature = 2.7; - - }, -/area/awaymission/caves/bmp_asteroid/level_two) "Mk" = ( /obj/machinery/light/small/built/directional/west, /turf/open/floor/wood, @@ -61860,7 +61844,7 @@ bK bK bK bK -Ly +DH oI oI oI diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index f69156aef90d..eb2d5264ec30 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -43,9 +43,6 @@ /obj/item/food/meat/slab/human/mutant/fly{ name = "flyman meat" }, -/obj/item/food/meat/slab/human/mutant/golem/adamantine{ - name = "golem meat" - }, /obj/item/food/meat/slab/human/mutant/lizard{ name = "lizard meat" }, diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 7ad89d1c9b9d..32089d147e7b 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -80,40 +80,34 @@ #define NOTRANSSTING 7 #define NOZOMBIE 8 #define NO_UNDERWEAR 9 -#define NOSTOMACH 10 -#define NO_DNA_COPY 11 -#define DRINKSBLOOD 12 +#define NO_DNA_COPY 10 +#define DRINKSBLOOD 11 /// Use this if you want to change the race's color without the player being able to pick their own color. AKA special color shifting -#define DYNCOLORS 13 -#define AGENDER 14 +#define DYNCOLORS 12 +#define AGENDER 13 /// Do not draw eyes or eyeless overlay -#define NOEYESPRITES 15 -/// Used for determining which wounds are applicable to this species. -/// if we have flesh (can suffer slash/piercing/burn wounds, requires they don't have NOBLOOD) -#define HAS_FLESH 16 -/// if we have bones (can suffer bone wounds) -#define HAS_BONE 17 +#define NOEYESPRITES 14 ///If we have a limb-specific overlay sprite -#define HAS_MARKINGS 18 +#define HAS_MARKINGS 15 /// Do not draw blood overlay -#define NOBLOODOVERLAY 19 +#define NOBLOODOVERLAY 17 ///No augments, for monkeys in specific because they will turn into fucking freakazoids https://cdn.discordapp.com/attachments/326831214667235328/791313258912153640/102707682-fa7cad80-4294-11eb-8f13-8c689468aeb0.png -#define NOAUGMENTS 20 +#define NOAUGMENTS 18 ///will be assigned a universal vampire themed last name shared by their department. this is preferenced! -#define BLOOD_CLANS 21 +#define BLOOD_CLANS 19 /// Can this species use the 'Body size' preference -#define BODY_RESIZABLE 22 -#define MUTCOLORS2 23 -#define MUTCOLORS3 24 +#define BODY_RESIZABLE 20 ///Haircolor -#define HAIRCOLOR 25 -#define FACEHAIRCOLOR 26 -#define SCLERA 27 +#define HAIRCOLOR 22 +#define FACEHAIRCOLOR 22 +#define SCLERA 23 ///Has non-human hair. Used by pref code to hide standard hair options. -#define NONHUMANHAIR 28 +#define NONHUMANHAIR 24 + +/// For use in /datum/species/var/organs +#define DOES_NOT_NEED "does_not_need" //organ slots -#define ORGAN_SLOT_ADAMANTINE_RESONATOR "adamantine_resonator" #define ORGAN_SLOT_APPENDIX "appendix" #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop" @@ -193,7 +187,6 @@ GLOBAL_LIST_INIT(organ_process_order, list( ORGAN_SLOT_LIVER, ORGAN_SLOT_TONGUE, ORGAN_SLOT_VOICE, - ORGAN_SLOT_ADAMANTINE_RESONATOR, ORGAN_SLOT_HEART_AID, ORGAN_SLOT_BRAIN_ANTIDROP, ORGAN_SLOT_BRAIN_ANTISTUN, @@ -207,34 +200,6 @@ GLOBAL_LIST_INIT(organ_process_order, list( ORGAN_SLOT_XENO_EGGSAC, ORGAN_SLOT_BRAIN)) -//Defines for Golem Species IDs -#define SPECIES_GOLEM "golem" -#define SPECIES_GOLEM_ADAMANTINE "a_golem" -#define SPECIES_GOLEM_PLASMA "p_golem" -#define SPECIES_GOLEM_DIAMOND "diamond_golem" -#define SPECIES_GOLEM_GOLD "gold_golem" -#define SPECIES_GOLEM_SILVER "silver_golem" -#define SPECIES_GOLEM_PLASTEEL "plasteel_golem" -#define SPECIES_GOLEM_TITANIUM "titanium_golem" -#define SPECIES_GOLEM_PLASTITANIUM "plastitanium_golem" -#define SPECIES_GOLEM_ALIEN "alloy_golem" -#define SPECIES_GOLEM_WOOD "wood_golem" -#define SPECIES_GOLEM_URANIUM "uranium_golem" -#define SPECIES_GOLEM_SAND "sand_golem" -#define SPECIES_GOLEM_GLASS "glass_golem" -#define SPECIES_GOLEM_BLUESPACE "bluespace_golem" -#define SPECIES_GOLEM_BANANIUM "ba_golem" -#define SPECIES_GOLEM_CULT "cultgolem" -#define SPECIES_GOLEM_CLOTH "clothgolem" -#define SPECIES_GOLEM_PLASTIC "plastic_golem" -#define SPECIES_GOLEM_BRONZE "bronze_golem" -#define SPECIES_GOLEM_CARDBOARD "c_golem" -#define SPECIES_GOLEM_LEATHER "leather_golem" -#define SPECIES_GOLEM_DURATHREAD "d_golem" -#define SPECIES_GOLEM_BONE "b_golem" -#define SPECIES_GOLEM_SNOW "sn_golem" -#define SPECIES_GOLEM_HYDROGEN "metallic_hydrogen_golem" - // Defines for used in creating "perks" for the species preference pages. /// A key that designates UI icon displayed on the perk. #define SPECIES_PERK_ICON "ui_icon" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 7dbcd2710555..07b90f0a2bbc 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -65,7 +65,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( //Human sub-species #define isabductor(A) (is_species(A, /datum/species/abductor)) -#define isgolem(A) (is_species(A, /datum/species/golem)) #define islizard(A) (is_species(A, /datum/species/lizard)) #define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) #define isvox(A) (is_species(A, /datum/species/vox)) diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index afb6c73b033e..2832227c1156 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -500,7 +500,6 @@ GLOBAL_LIST_INIT(phobia_species, list( /datum/species/plasmaman, /datum/species/skeleton, )), - "the supernatural" = typecacheof(list(/datum/species/golem/runic)), )) /// Creates a regular expression to match against the given phobia diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm deleted file mode 100644 index dd3b115f797b..000000000000 --- a/code/datums/diseases/gastrolisis.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/disease/gastrolosis - name = "Invasive Gastrolosis" - max_stages = 4 - spread_text = "Unknown" - spread_flags = DISEASE_SPREAD_SPECIAL - cure_text = "Salt and ryetalyn" - agent = "Agent S and DNA restructuring" - viable_mobtypes = list(/mob/living/carbon/human) - stage_prob = 0.5 - disease_flags = CURABLE - cures = list(/datum/reagent/consumable/salt, /datum/reagent/medicine/ryetalyn) - - -/datum/disease/gastrolosis/stage_act(delta_time, times_fired) - . = ..() - if(!.) - return - - if(is_species(affected_mob, /datum/species/snail)) - cure() - return FALSE - - switch(stage) - if(2) - if(DT_PROB(1, delta_time)) - affected_mob.emote("gag") - if(DT_PROB(0.5, delta_time)) - var/turf/open/OT = get_turf(affected_mob) - if(isopenturf(OT)) - OT.MakeSlippery(TURF_WET_LUBE, 40) - if(3) - if(DT_PROB(2.5, delta_time)) - affected_mob.emote("gag") - if(DT_PROB(2.5, delta_time)) - var/turf/open/OT = get_turf(affected_mob) - if(isopenturf(OT)) - OT.MakeSlippery(TURF_WET_LUBE, 100) - if(4) - var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in affected_mob.organs - if(!eyes && DT_PROB(2.5, delta_time)) - var/obj/item/organ/eyes/snail/new_eyes = new() - new_eyes.Insert(affected_mob, drop_if_replaced = TRUE) - affected_mob.visible_message(span_warning("[affected_mob]'s eyes fall out, with snail eyes taking its place!"), \ - span_userdanger("You scream in pain as your eyes are pushed out by your new snail eyes!")) - affected_mob.emote("scream") - return - - var/obj/item/shell = affected_mob.get_item_by_slot(ITEM_SLOT_BACK) - if(!istype(shell, /obj/item/storage/backpack/snail)) - shell = null - if(!shell && DT_PROB(2.5, delta_time)) - if(affected_mob.dropItemToGround(affected_mob.get_item_by_slot(ITEM_SLOT_BACK))) - affected_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(affected_mob), ITEM_SLOT_BACK) - affected_mob.visible_message(span_warning("[affected_mob] grows a grotesque shell on their back!"), \ - span_userdanger("You scream in pain as a shell pushes itself out from under your skin!")) - affected_mob.emote("scream") - return - - var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.organs - if(!tongue && DT_PROB(2.5, delta_time)) - var/obj/item/organ/tongue/snail/new_tongue = new() - new_tongue.Insert(affected_mob) - to_chat(affected_mob, span_userdanger("You feel your speech slow down...")) - return - - if(shell && eyes && tongue && DT_PROB(2.5, delta_time)) - affected_mob.set_species(/datum/species/snail) - affected_mob.client?.give_award(/datum/award/achievement/misc/snail, affected_mob) - affected_mob.visible_message(span_warning("[affected_mob] turns into a snail!"), \ - span_boldnotice("You turned into a snail person! You feel an urge to cccrrraaawwwlll...")) - cure() - return FALSE - - if(DT_PROB(5, delta_time)) - affected_mob.emote("gag") - if(DT_PROB(5, delta_time)) - var/turf/open/OT = get_turf(affected_mob) - if(isopenturf(OT)) - OT.MakeSlippery(TURF_WET_LUBE, 100) - - -/datum/disease/gastrolosis/cure() - . = ..() - if(affected_mob && !is_species(affected_mob, /datum/species/snail)) //undo all the snail fuckening - var/mob/living/carbon/human/H = affected_mob - var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in H.organs - if(tongue) - var/obj/item/organ/tongue/new_tongue = new H.dna.species.mutanttongue () - new_tongue.Insert(H) - var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in H.organs - if(eyes) - var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes () - new_eyes.Insert(H) - var/obj/item/storage/backpack/bag = H.get_item_by_slot(ITEM_SLOT_BACK) - if(istype(bag, /obj/item/storage/backpack/snail)) - bag.emptyStorage() - H.temporarilyRemoveItemFromInventory(bag, TRUE) - qdel(bag) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 35e0e8c029a6..739b219e22f5 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -886,7 +886,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) dna.remove_all_mutations() dna.stability = 100 if(prob(max(70-instability,0))) - switch(rand(0,9)) //not complete and utter death + switch(rand(0,7)) //not complete and utter death if(0) monkeyize() if(1) @@ -917,9 +917,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) O.forceMove(drop_location()) if(prob(20)) O.animate_atom_living() - if(8 to 9) - ForceContractDisease(new/datum/disease/gastrolosis()) - to_chat(src, span_notice("Oh, I actually feel quite alright!")) else switch(rand(0,5)) if(0) @@ -931,14 +928,11 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) death() petrify(INFINITY) if(3) - if(prob(95)) - var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD)) - if(BP) - BP.dismember() - else - gib() + var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD)) + if(BP) + BP.dismember() else - set_species(/datum/species/dullahan) + gib() if(4) visible_message(span_warning("[src]'s skin melts off!"), span_boldwarning("Your skin melts off!")) spawn_gibs() diff --git a/code/datums/elements/spooky.dm b/code/datums/elements/spooky.dm index 8d21b925b9b4..a436b3cbf5d5 100644 --- a/code/datums/elements/spooky.dm +++ b/code/datums/elements/spooky.dm @@ -37,7 +37,7 @@ H.Paralyze(15) //zombies can't resist the doot C.set_timed_status_effect(70 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) C.set_timed_status_effect(40 SECONDS, /datum/status_effect/speech/stutter) - if((!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly))) + if((!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly))) C.stamina.adjust(-25) //boneless humanoids don't lose the will to live to_chat(C, "DOOT") INVOKE_ASYNC(src, PROC_REF(spectral_change), H) @@ -47,7 +47,7 @@ C.set_timed_status_effect(40 SECONDS, /datum/status_effect/speech/stutter) /datum/element/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user) - if((H.stamina.current < 105) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly))) + if((H.stamina.current < 105) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly))) H.Paralyze(20) H.set_species(/datum/species/skeleton) H.visible_message(span_warning("[H] has given up on life as a mortal.")) diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 0ec12e1fdd10..af3f531d8803 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -312,26 +312,6 @@ Unless you know what you're doing, only use the first three numbers. They're in return TRUE -///Stronk force increase -/datum/material/adamantine - name = "adamantine" - desc = "A powerful material made out of magic, I mean science!" - color = "#6d7e8e" - greyscale_colors = "#6d7e8e" - strength_modifier = 1.5 - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) - sheet_type = /obj/item/stack/sheet/mineral/adamantine - value_per_unit = 0.25 - beauty_modifier = 0.4 - armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.3, ENERGY = 1.3, BOMB = 1, BIO = 1, FIRE = 2.5, ACID = 1) - wall_icon = 'icons/turf/walls/stone_wall.dmi' - - wall_shine = NONE - -/datum/material/adamantine/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) - victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD) - return TRUE - ///RPG Magic. /datum/material/mythril name = "mythril" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 0f2c19e1343a..430e73075780 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -55,7 +55,7 @@ var/datum/atom_hud/alternate_appearance/basic/antagonist_hud/antag_hud = null //this mind's antag HUD var/holy_role = NONE //is this person a chaplain or admin role allowed to use bibles, Any rank besides 'NONE' allows for this. - var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems) + var/mob/living/enslaved_to //If this mind's master is another mob var/datum/language_holder/language_holder var/unconvertable = FALSE var/late_joiner = FALSE diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9f6311421375..9f4b4f053922 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -135,7 +135,7 @@ if(istype(AM, /obj/item)) var/obj/item/bodypart/head/as_head = AM var/obj/item/mmi/as_mmi = AM - if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay)) + if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain)) living_detected = TRUE nom += AM else if(isliving(AM)) diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm index 187ed6b610a2..8447a4b75f90 100644 --- a/code/game/machinery/scan_gate.dm +++ b/code/game/machinery/scan_gate.dm @@ -13,7 +13,6 @@ #define SCANGATE_MOTH "moth" #define SCANGATE_JELLY "jelly" #define SCANGATE_POD "pod" -#define SCANGATE_GOLEM "golem" #define SCANGATE_ZOMBIE "zombie" #define SCANGATE_TESHARI "teshari" @@ -153,8 +152,6 @@ scan_species = /datum/species/jelly if(SCANGATE_POD) scan_species = /datum/species/pod - if(SCANGATE_GOLEM) - scan_species = /datum/species/golem if(SCANGATE_ZOMBIE) scan_species = /datum/species/zombie if(SCANGATE_TESHARI) @@ -280,6 +277,5 @@ #undef SCANGATE_MOTH #undef SCANGATE_JELLY #undef SCANGATE_POD -#undef SCANGATE_GOLEM #undef SCANGATE_ZOMBIE #undef SCANGATE_TESHARI diff --git a/code/game/objects/effects/decals/cleanable/food.dm b/code/game/objects/effects/decals/cleanable/food.dm index 89dd9fbcb7d0..e745d9f13902 100644 --- a/code/game/objects/effects/decals/cleanable/food.dm +++ b/code/game/objects/effects/decals/cleanable/food.dm @@ -32,16 +32,6 @@ icon_state = "salt_pile" var/safepasses = 3 //how many times can this salt pile be passed before dissipating -/obj/effect/decal/cleanable/food/salt/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() - if(is_species(mover, /datum/species/snail)) - return FALSE - -/obj/effect/decal/cleanable/food/salt/BumpedBy(atom/movable/AM) - . = ..() - if(is_species(AM, /datum/species/snail)) - to_chat(AM, span_danger("Your path is obstructed by [span_phobia("salt")].")) - /obj/effect/decal/cleanable/food/salt/on_entered(datum/source, atom/movable/AM) . = ..() if(!isliving(AM)) diff --git a/code/game/objects/effects/spawners/random/entertainment.dm b/code/game/objects/effects/spawners/random/entertainment.dm index a838780b1414..0f005d255854 100644 --- a/code/game/objects/effects/spawners/random/entertainment.dm +++ b/code/game/objects/effects/spawners/random/entertainment.dm @@ -57,7 +57,6 @@ /obj/item/coin/titanium = 3, /obj/item/coin/diamond = 2, /obj/item/coin/bananium = 2, - /obj/item/coin/adamantine = 2, /obj/item/coin/mythril = 2, /obj/item/coin/runite = 2, /obj/item/coin/twoheaded = 1, diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 6df9571cfab8..b95c96aa1408 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -601,7 +601,7 @@ // Check their blood level and report if they need a transfusion. var/obj/item/organ/heart/heart = H.getorganslot(ORGAN_SLOT_HEART) - if(H.needs_heart()) + if(H.needs_organ(ORGAN_SLOT_HEART)) if(!heart || H.blood_volume < BLOOD_VOLUME_SURVIVE) user.audible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Warning - Patient is in hypovolemic shock and may require a blood transfusion.")) diff --git a/code/game/objects/items/food/meat.dm b/code/game/objects/items/food/meat.dm index f0a171efe2aa..c31820559234 100644 --- a/code/game/objects/items/food/meat.dm +++ b/code/game/objects/items/food/meat.dm @@ -663,11 +663,6 @@ foodtypes = MEAT | RAW | GROSS venue_value = FOOD_MEAT_MUTANT_RARE -/obj/item/food/meat/slab/human/mutant/golem/adamantine - icon_state = "agolemmeat" - desc = "From the slime pen to the rune to the kitchen, science." - foodtypes = MEAT | RAW | GROSS - /obj/item/food/meat/slab/human/mutant/lizard icon_state = "lizardmeat" desc = "Delicious dino damage." diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index e63076d66143..0f65dfc8307d 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -72,20 +72,6 @@ radio_key = /obj/item/encryptionkey/syndicate subspace_transmission = TRUE -/obj/item/implant/radio/slime - name = "slime radio" - icon = 'icons/obj/surgery.dmi' - icon_state = "adamantine_resonator" - radio_key = /obj/item/encryptionkey/headset_sci - subspace_transmission = TRUE - -/obj/item/implant/radio/get_data() - var/dat = {"Implant Specifications:
- Name: Internal Radio Implant
- Life: 24 hours
- Implant Details: Allows user to use an internal radio, useful if user expects equipment loss, or cannot equip conventional radios."} - return dat - /obj/item/implanter/radio name = "implanter (internal radio)" imp_type = /obj/item/implant/radio diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index d85f33be32bb..a1288376c2c2 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -13,7 +13,6 @@ Mineral Sheets - Titanium - Plastitanium Others: - - Adamantine - Mythril - Alien Alloy - Coal @@ -356,27 +355,6 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \ /****************************** Others ****************************/ -/* - * Adamantine -*/ - - -GLOBAL_LIST_INIT(adamantine_recipes, list( - new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=1, res_amount=1), - )) - -/obj/item/stack/sheet/mineral/adamantine - name = "adamantine" - icon_state = "sheet-adamantine" - inhand_icon_state = "sheet-adamantine" - singular_name = "adamantine sheet" - mats_per_unit = list(/datum/material/adamantine=MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/mineral/adamantine - -/obj/item/stack/sheet/mineral/adamantine/get_main_recipes() - . = ..() - . += GLOB.adamantine_recipes - /* * Runite */ @@ -469,7 +447,6 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ //Metal Hydrogen GLOBAL_LIST_INIT(metalhydrogen_recipes, list( - new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=20, res_amount=1), new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1), new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1), new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1), diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 46dc803ee79b..bcac202d1e9e 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1325,7 +1325,6 @@ /obj/item/slimecross/stabilized/oil=1,\ /obj/item/slimecross/stabilized/black=1,\ /obj/item/slimecross/stabilized/lightpink=1,\ - /obj/item/slimecross/stabilized/adamantine=1,\ /obj/item/slimecross/stabilized/rainbow=1,\ ) generate_items_inside(items_inside,src) diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 946513d40a34..571725c6ec2b 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(ore_probability, list( */ /obj/effect/collapsing_demonic_portal/proc/drop_loot() visible_message(span_warning("Something slips out of [src]!")) - var/loot = rand(1, 27) + var/loot = rand(1, 26) switch(loot) if(1) new /obj/item/clothing/suit/hooded/cultrobes/hardened(loc) @@ -179,16 +179,14 @@ GLOBAL_LIST_INIT(ore_probability, list( if(20) new /obj/item/slimepotion/transference(loc) if(21) - new /obj/item/slime_extract/adamantine(loc) - if(22) new /obj/item/weldingtool/abductor(loc) - if(23) + if(22) new /obj/structure/elite_tumor(loc) - if(24) + if(23) new /mob/living/simple_animal/hostile/retaliate/clown/clownhulk(loc) - if(25) + if(24) new /obj/item/clothing/shoes/winterboots/ice_boots(loc) - if(26) + if(25) new /obj/item/book/granter/action/spell/sacredflame(loc) - if(27) + if(26) new /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom(loc) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index e8d270dca87a..2e2bf837fc41 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -241,7 +241,6 @@ var/list/mineralSpawnChanceList = list(/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10, /obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40, /obj/item/stack/ore/titanium = 11, /turf/closed/mineral/gibtonite = 4, /obj/item/stack/ore/bluespace_crystal = 1) - //Currently, Adamantine won't spawn as it has no uses. -Durandan var/mineralChance = 13 /turf/closed/mineral/random/Initialize(mapload) @@ -716,10 +715,7 @@ H.mind?.adjust_experience(/datum/skill/mining, 100) //yay! /turf/closed/mineral/strong/proc/drop_ores() - if(prob(10)) - new /obj/item/stack/sheet/mineral/mythril(src, 5) - else - new /obj/item/stack/sheet/mineral/adamantine(src, 5) + new /obj/item/stack/sheet/mineral/mythril(src, 5) /turf/closed/mineral/strong/acid_melt() return diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index b1ea3df9607d..5e7360b5ea59 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -97,9 +97,10 @@ else to_chat(owner, span_warning("You feel a weird rumble in your bowels...")) - var/appendix_type = /obj/item/organ/appendix - if(owner?.dna?.species?.mutantappendix) - appendix_type = owner.dna.species.mutantappendix + var/appendix_type = owner?.dna?.species?.organs[ORGAN_SLOT_APPENDIX] + if(!appendix_type) + return + var/obj/item/organ/appendix/new_appendix = new appendix_type() new_appendix.Insert(owner) @@ -112,9 +113,10 @@ else to_chat(owner, span_warning("You feel a weird rumble in your bowels...")) - var/liver_type = /obj/item/organ/liver - if(owner?.dna?.species?.mutantliver) - liver_type = owner.dna.species.mutantliver + var/liver_type = owner?.dna?.species?.organs[ORGAN_SLOT_LIVER] + if(!liver_type) + return + var/obj/item/organ/liver/new_liver = new liver_type() new_liver.Insert(owner) @@ -127,9 +129,10 @@ else to_chat(owner, span_warning("You feel a weird rumble inside your chest...")) - var/lung_type = /obj/item/organ/lungs - if(owner.dna.species && owner.dna.species.mutantlungs) - lung_type = owner.dna.species.mutantlungs + var/lung_type = owner?.dna?.species?.organs[ORGAN_SLOT_LUNGS] + if(!lung_type) + return + var/obj/item/organ/lungs/new_lungs = new lung_type() new_lungs.Insert(owner) @@ -142,9 +145,10 @@ else to_chat(owner, span_warning("You feel a weird rumble in your bowels...")) - var/stomach_type = /obj/item/organ/stomach - if(owner?.dna?.species?.mutantstomach) - stomach_type = owner.dna.species.mutantstomach + var/stomach_type = owner?.dna?.species?.organs[ORGAN_SLOT_STOMACH] + if(!stomach_type) + return + var/obj/item/organ/stomach/new_stomach = new stomach_type() new_stomach.Insert(owner) @@ -160,9 +164,10 @@ addtimer(CALLBACK(src, PROC_REF(finish_replace_eyes)), rand(100, 200)) /obj/item/organ/heart/gland/heal/proc/finish_replace_eyes() - var/eye_type = /obj/item/organ/eyes - if(owner.dna.species && owner.dna.species.mutanteyes) - eye_type = owner.dna.species.mutanteyes + var/eye_type = owner?.dna?.species?.organs[ORGAN_SLOT_EYES] + if(!eye_type) + return + var/obj/item/organ/eyes/new_eyes = new eye_type() new_eyes.Insert(owner) owner.visible_message(span_warning("A pair of new eyes suddenly inflates into [owner]'s eye sockets!"), span_userdanger("A pair of new eyes suddenly inflates into your eye sockets!")) diff --git a/code/modules/antagonists/changeling/powers/regenerate.dm b/code/modules/antagonists/changeling/powers/regenerate.dm index b16d94142953..1f426bc05f80 100644 --- a/code/modules/antagonists/changeling/powers/regenerate.dm +++ b/code/modules/antagonists/changeling/powers/regenerate.dm @@ -24,12 +24,9 @@ and tearing!") C.emote("scream") C.regenerate_limbs() - if(!user.getorganslot(ORGAN_SLOT_BRAIN)) - var/obj/item/organ/brain/B - if(C.has_dna() && C.dna.species.mutantbrain) - B = new C.dna.species.mutantbrain() - else - B = new() + if(!user.getorganslot(ORGAN_SLOT_BRAIN) && user.needs_organ(ORGAN_SLOT_BRAIN)) + var/obj/item/organ/brain/B = C.dna.species.organs[ORGAN_SLOT_BRAIN] + B = new B() B.organ_flags &= ~ORGAN_VITAL B.decoy_override = TRUE B.Insert(C) diff --git a/code/modules/antagonists/nightmare/nightmare_organs.dm b/code/modules/antagonists/nightmare/nightmare_organs.dm index 1fc14131d71f..c9eae2c2148e 100644 --- a/code/modules/antagonists/nightmare/nightmare_organs.dm +++ b/code/modules/antagonists/nightmare/nightmare_organs.dm @@ -103,10 +103,5 @@ playsound(owner, 'sound/hallucinations/far_noise.ogg', 50, TRUE) respawn_progress = 0 -/obj/item/organ/heart/nightmare/get_availability(datum/species/S) - if(istype(S,/datum/species/shadow/nightmare)) - return TRUE - return ..() - #undef HEART_SPECIAL_SHADOWIFY #undef HEART_RESPAWN_THRESHHOLD diff --git a/code/modules/antagonists/nightmare/nightmare_species.dm b/code/modules/antagonists/nightmare/nightmare_species.dm index db147c972b8b..2b28a269cec5 100644 --- a/code/modules/antagonists/nightmare/nightmare_species.dm +++ b/code/modules/antagonists/nightmare/nightmare_species.dm @@ -21,8 +21,7 @@ TRAIT_NODISMEMBER, TRAIT_NOHUNGER, ) - mutanteyes = /obj/item/organ/eyes/night_vision/nightmare - mutantheart = /obj/item/organ/heart/nightmare + bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/shadow/nightmare, BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/shadow/nightmare, @@ -32,6 +31,18 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/shadow, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/nightmare, + ORGAN_SLOT_LUNGS = null, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/nightmare, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = null, + ORGAN_SLOT_APPENDIX = null, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + /datum/species/shadow/nightmare/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() diff --git a/code/modules/cargo/bounties/slime.dm b/code/modules/cargo/bounties/slime.dm index 25cf8d5b8b90..b30588d8ae97 100644 --- a/code/modules/cargo/bounties/slime.dm +++ b/code/modules/cargo/bounties/slime.dm @@ -30,10 +30,6 @@ name = "Light Pink Slime Extract" wanted_types = list(/obj/item/slime_extract/lightpink = TRUE) -/datum/bounty/item/slime/adamantine - name = "Adamantine Slime Extract" - wanted_types = list(/obj/item/slime_extract/adamantine = TRUE) - /datum/bounty/item/slime/rainbow name = "Rainbow Slime Extract" wanted_types = list(/obj/item/slime_extract/rainbow = TRUE) diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm index 0619f8fd97f7..93fd8208dd89 100644 --- a/code/modules/cargo/bounties/special.dm +++ b/code/modules/cargo/bounties/special.dm @@ -29,13 +29,6 @@ return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate)) return TRUE -/datum/bounty/item/adamantine - name = "Adamantine" - description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while." - reward = CARGO_CRATE_VALUE * 70 - required_count = 10 - wanted_types = list(/obj/item/stack/sheet/mineral/adamantine = TRUE) - /datum/bounty/item/trash name = "Trash" description = "Recently a group of janitors have run out of trash to clean up, without any trash CentCom wants to fire them to cut costs. Send a shipment of trash to keep them employed, and they'll give you a small compensation." diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index da4112a66655..c0c28b928496 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -65,11 +65,6 @@ material_id = /datum/material/titanium message = "cm3 of titanium" -/datum/export/material/adamantine - cost = CARGO_CRATE_VALUE - material_id = /datum/material/adamantine - message = "cm3 of adamantine" - /datum/export/material/mythril cost = CARGO_CRATE_VALUE * 3 material_id = /datum/material/mythril diff --git a/code/modules/cargo/exports/xenobio.dm b/code/modules/cargo/exports/xenobio.dm index fdd8d38aa4fc..20757cdfaf70 100644 --- a/code/modules/cargo/exports/xenobio.dm +++ b/code/modules/cargo/exports/xenobio.dm @@ -33,7 +33,7 @@ /datum/export/slime/epic //EPIIIIIIC cost = CARGO_CRATE_VALUE * 0.44 unit_name = "epic slime core" - export_types = list(/obj/item/slime_extract/black,/obj/item/slime_extract/cerulean,/obj/item/slime_extract/oil,/obj/item/slime_extract/sepia,/obj/item/slime_extract/pyrite,/obj/item/slime_extract/adamantine,/obj/item/slime_extract/lightpink,/obj/item/slime_extract/bluespace) + export_types = list(/obj/item/slime_extract/black,/obj/item/slime_extract/cerulean,/obj/item/slime_extract/oil,/obj/item/slime_extract/sepia,/obj/item/slime_extract/pyrite,/obj/item/slime_extract/lightpink,/obj/item/slime_extract/bluespace) /datum/export/slime/rainbow cost = CARGO_CRATE_VALUE diff --git a/code/modules/client/preferences/augments/augment_organ.dm b/code/modules/client/preferences/augments/augment_organ.dm index 454cac2f81fc..e60b345ca482 100644 --- a/code/modules/client/preferences/augments/augment_organ.dm +++ b/code/modules/client/preferences/augments/augment_organ.dm @@ -27,7 +27,7 @@ path = /obj/item/organ/lungs/cybernetic /datum/augment_item/organ/lungs/can_apply_to_species(datum/species/S) - return !(TRAIT_NOBREATH in S.inherent_traits) + return S.organs[ORGAN_SLOT_LUNGS] //LIVERS /datum/augment_item/organ/liver @@ -38,7 +38,7 @@ path = /obj/item/organ/liver/cybernetic /datum/augment_item/organ/liver/can_apply_to_species(datum/species/S) - return !(TRAIT_NOMETABOLISM in S.inherent_traits) + return S.organs[ORGAN_SLOT_LIVER] //STOMACHES /datum/augment_item/organ/stomach @@ -49,7 +49,7 @@ path = /obj/item/organ/stomach/cybernetic /datum/augment_item/organ/stomach/can_apply_to_species(datum/species/S) - return !(TRAIT_NOHUNGER in S.inherent_traits) + return S.organs[ORGAN_SLOT_LIVER] //EYES /datum/augment_item/organ/eyes diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 4522a70bfcf0..5e06f1ebef1f 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -4,7 +4,6 @@ icon_state = "boxing" inhand_icon_state = "boxing" equip_delay_other = 60 - species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion clothing_traits = list(TRAIT_CHUNKYFINGERS) /obj/item/clothing/gloves/boxing/green diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm index 71de62a82d56..b15ff3f7a41b 100644 --- a/code/modules/clothing/masks/bandana.dm +++ b/code/modules/clothing/masks/bandana.dm @@ -6,7 +6,6 @@ visor_flags_cover = MASKCOVERSMOUTH slot_flags = ITEM_SLOT_MASK adjusted_flags = ITEM_SLOT_HEAD - species_exception = list(/datum/species/golem) dying_key = DYE_REGISTRY_BANDANA flags_1 = IS_PLAYER_COLORABLE_1 name = "bandana" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index a123a222e124..b4200dcb39b3 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -171,7 +171,6 @@ resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) dog_fashion = /datum/dog_fashion/head/clown - species_exception = list(/datum/species/golem/bananium) var/list/clownmask_designs = list() /obj/item/clothing/mask/gas/clown_hat/plasmaman @@ -217,7 +216,6 @@ inhand_icon_state = "sexyclown" flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE - species_exception = list(/datum/species/golem/bananium) /obj/item/clothing/mask/gas/mime name = "mime mask" @@ -229,7 +227,7 @@ flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) - species_exception = list(/datum/species/golem) + var/list/mimemask_designs = list() /obj/item/clothing/mask/gas/mime/plasmaman @@ -282,7 +280,7 @@ inhand_icon_state = "sexymime" flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE - species_exception = list(/datum/species/golem) + /obj/item/clothing/mask/gas/cyborg name = "cyborg visor" @@ -316,7 +314,6 @@ max_integrity = 100 actions_types = list(/datum/action/item_action/adjust) dog_fashion = null - species_exception = list(/datum/species/golem/wood) var/list/tikimask_designs = list() /obj/item/clothing/mask/gas/tiki_mask/Initialize(mapload) diff --git a/code/modules/clothing/masks/moustache.dm b/code/modules/clothing/masks/moustache.dm index 922c2daf371c..abea527f1e44 100644 --- a/code/modules/clothing/masks/moustache.dm +++ b/code/modules/clothing/masks/moustache.dm @@ -4,7 +4,7 @@ icon_state = "fake-moustache" w_class = WEIGHT_CLASS_TINY flags_inv = HIDEFACE - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/mask/fakemoustache/italian diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm index 8d2a1322632a..70f9402aa7e3 100644 --- a/code/modules/clothing/shoes/boots.dm +++ b/code/modules/clothing/shoes/boots.dm @@ -91,7 +91,6 @@ strip_delay = 20 equip_delay_other = 40 lace_time = 8 SECONDS - species_exception = list(/datum/species/golem/uranium) /obj/item/clothing/shoes/workboots/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm index 21641536d364..52fe4d163d9d 100644 --- a/code/modules/clothing/shoes/clown.dm +++ b/code/modules/clothing/shoes/clown.dm @@ -6,7 +6,6 @@ slowdown = SHOES_SLOWDOWN+1 var/enabled_waddle = TRUE lace_time = 20 SECONDS // how the hell do these laces even work?? - species_exception = list(/datum/species/golem/bananium) supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/shoes/clown_shoes/Initialize(mapload) diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm index 33bf5bdca27e..71aeeda1d32c 100644 --- a/code/modules/clothing/shoes/costume.dm +++ b/code/modules/clothing/shoes/costume.dm @@ -17,7 +17,7 @@ /obj/item/clothing/shoes/griffin/Initialize(mapload) . = ..() - + create_storage(type = /datum/storage/pockets/shoes) /obj/item/clothing/shoes/singery @@ -48,7 +48,7 @@ name = "grilling sandals" icon_state = "cookflops" can_be_tied = FALSE - species_exception = list(/datum/species/golem) + /obj/item/clothing/shoes/yakuza name = "tojo clan shoes" diff --git a/code/modules/clothing/shoes/sandals.dm b/code/modules/clothing/shoes/sandals.dm index a8ac824811ac..acbe5972e032 100644 --- a/code/modules/clothing/shoes/sandals.dm +++ b/code/modules/clothing/shoes/sandals.dm @@ -7,7 +7,7 @@ equip_delay_other = 50 permeability_coefficient = 0.9 can_be_tied = FALSE - species_exception = list(/datum/species/golem) + /obj/item/clothing/shoes/sandal/magic name = "magical sandals" diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 4b6ad09f9727..5b00f1086891 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -19,7 +19,7 @@ icon_state = "pirate" inhand_icon_state = "pirate" allowed = list(/obj/item/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) - species_exception = list(/datum/species/golem) + /obj/item/clothing/suit/pirate/armored armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, FIRE = 60, ACID = 75) @@ -69,7 +69,7 @@ icon_state = "overalls" inhand_icon_state = "overalls" body_parts_covered = CHEST|GROIN|LEGS - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/apron/purple_bartender @@ -182,7 +182,7 @@ desc = "Your classic, non-racist poncho." icon_state = "classicponcho" inhand_icon_state = "classicponcho" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/poncho/green @@ -336,7 +336,7 @@ allowed = list() actions_types = list(/datum/action/item_action/toggle_human_head) hoodtype = /obj/item/clothing/head/hooded/human_head - species_exception = list(/datum/species/golem) //Finally, flesh + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION @@ -468,7 +468,7 @@ desc = "A cool shirt for chilling on the beach." icon_state = "hawaiian_blue" inhand_icon_state = "hawaiian_blue" - species_exception = list(/datum/species/golem) + /obj/item/clothing/suit/yakuza name = "tojo clan jacket" diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm index 901e823624ca..ef6cfa71bac5 100644 --- a/code/modules/clothing/suits/ghostsheet.dm +++ b/code/modules/clothing/suits/ghostsheet.dm @@ -9,7 +9,7 @@ w_class = WEIGHT_CLASS_TINY flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT alternate_worn_layer = UNDER_HEAD_LAYER - species_exception = list(/datum/species/golem) + /obj/item/clothing/suit/ghost_sheet/spooky name = "spooky ghost" diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index c9c99704737b..5bf97b75f3da 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -7,7 +7,7 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/jacket/leather @@ -18,7 +18,6 @@ resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/radio) - species_exception = list(/datum/species/golem/bone) //bad to the bone /obj/item/clothing/suit/jacket/leather/overcoat name = "leather overcoat" @@ -34,7 +33,6 @@ icon_state = "pufferjacket" inhand_icon_state = "hostrench" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, FIRE = 0, ACID = 0) - species_exception = list(/datum/species/golem/bone) supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/jacket/puffer/vest @@ -60,7 +58,7 @@ desc = "A classic brown letterman jacket. Looks pretty hot and heavy." icon_state = "letterman" inhand_icon_state = "letterman" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/jacket/letterman_red @@ -68,7 +66,7 @@ desc = "A letterman jacket in a sick red color. Radical." icon_state = "letterman_red" inhand_icon_state = "letterman_red" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/jacket/letterman_syndie @@ -76,7 +74,7 @@ desc = "Oddly, this jacket seems to have a large S on the back..." icon_state = "letterman_s" inhand_icon_state = "letterman_s" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/jacket/letterman_nanotrasen @@ -84,5 +82,5 @@ desc = "A blue letterman jacket with a proud Nanotrasen N on the back. The tag says that it was made in Space China." icon_state = "letterman_n" inhand_icon_state = "letterman_n" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index cfc5503ee557..c6225df75c0d 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -11,7 +11,7 @@ blood_overlay_type = "armor" body_parts_covered = CHEST|GROIN allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/graft, /obj/item/secateurs, /obj/item/geneshears) - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/apron/waders @@ -43,7 +43,7 @@ body_parts_covered = CHEST|GROIN|ARMS allowed = list(/obj/item/kitchen, /obj/item/knife/kitchen, /obj/item/storage/bag/tray) toggle_noun = "sleeves" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION //Cook @@ -97,7 +97,7 @@ blood_overlay_type = "armor" allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/radio, /obj/item/storage/bag/construction) resistance_flags = NONE - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/hazardvest/worn_overlays(mob/living/carbon/human/wearer, mutable_appearance/standing, isinhands, icon_file) @@ -113,7 +113,7 @@ inhand_icon_state = "suitjacket_blue" blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS - species_exception = list(/datum/species/golem) + /obj/item/clothing/suit/toggle/lawyer/purple name = "purple suit jacket" @@ -137,7 +137,7 @@ worn_icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here toggle_noun = "straps" - species_exception = list(/datum/species/golem) + greyscale_config = /datum/greyscale_config/suspenders greyscale_config_worn = /datum/greyscale_config/suspenders/worn greyscale_colors = "#ff0000" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 05816e032c81..2afb280e6294 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -26,7 +26,7 @@ /obj/item/tank/internals/plasmaman ) armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, FIRE = 50, ACID = 50) - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/suit/toggle/labcoat/cmo diff --git a/code/modules/clothing/suits/shirt.dm b/code/modules/clothing/suits/shirt.dm index ba8c5b74a8db..06086664caa7 100644 --- a/code/modules/clothing/suits/shirt.dm +++ b/code/modules/clothing/suits/shirt.dm @@ -3,7 +3,7 @@ desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in." icon_state = "ianshirt" inhand_icon_state = "ianshirt" - species_exception = list(/datum/species/golem) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION ///How many times has this shirt been washed? (In an ideal world this is just the determinant of the transform matrix.) var/wash_count = 0 @@ -23,4 +23,4 @@ desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?" icon_state = "nerdshirt" inhand_icon_state = "nerdshirt" - species_exception = list(/datum/species/golem) + diff --git a/code/modules/clothing/suits/wetfloor.dm b/code/modules/clothing/suits/wetfloor.dm index 9bccc903a32f..9c48e9ddf1ba 100644 --- a/code/modules/clothing/suits/wetfloor.dm +++ b/code/modules/clothing/suits/wetfloor.dm @@ -13,4 +13,4 @@ attack_verb_continuous = list("warns", "cautions", "smashes") attack_verb_simple = list("warn", "caution", "smash") armor = list(MELEE = 5, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) - species_exception = list(/datum/species/golem) + diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 4cc877fc6654..a213ed5df658 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -280,7 +280,7 @@ ) armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 20, ACID = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science - species_exception = list(/datum/species/golem) + supports_variations_flags = NONE /obj/item/clothing/head/hooded/winterhood/science @@ -342,7 +342,6 @@ ) armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 20, ACID = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering - species_exception = list(/datum/species/golem/uranium) supports_variations_flags = NONE /obj/item/clothing/suit/hooded/wintercoat/engineering/worn_overlays(mob/living/carbon/human/wearer, mutable_appearance/standing, isinhands, icon_file) diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm index bfe6ff4a3b43..3bbf060936e8 100644 --- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm +++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm @@ -29,7 +29,6 @@ desc = "'HONK!'" icon_state = "clown" inhand_icon_state = "clown" - species_exception = list(/datum/species/golem/bananium) female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY can_adjust = FALSE supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 07739ca99414..99fa4366bd65 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -46,7 +46,6 @@ desc = "It's an orange high visibility jumpsuit worn by engineers. Made from fire resistant materials." icon_state = "engine" inhand_icon_state = "engi_suit" - species_exception = list(/datum/species/golem/uranium) supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_TESHARI_VARIATION | CLOTHING_VOX_VARIATION /obj/item/clothing/under/rank/engineering/engineer/hazard diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 6a9aceb0236c..c8c5d067b9fa 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -6,7 +6,6 @@ custom_price = PAYCHECK_EASY icon = 'icons/obj/clothing/under/shorts_pants.dmi' worn_icon = 'icons/mob/clothing/under/shorts_pants.dmi' - species_exception = list(/datum/species/golem) /obj/item/clothing/under/pants/classicjeans name = "classic jeans" diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 617860836164..e9899829f0b8 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -8,7 +8,6 @@ can_adjust = FALSE icon = 'icons/obj/clothing/under/shorts_pants.dmi' worn_icon = 'icons/mob/clothing/under/shorts_pants.dmi' - species_exception = list(/datum/species/golem) /obj/item/clothing/under/shorts/red name = "red athletic shorts" diff --git a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm index f06642c08c64..3e3ad3a34c14 100644 --- a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm +++ b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @@ -8,84 +8,3 @@ . = ..() LAZYADD(memory[DATA_IDX_DESIGNS], SStech.designs_by_type[/datum/design/knight_armour]) LAZYADD(memory[DATA_IDX_DESIGNS],SStech.designs_by_type[/datum/design/knight_helmet]) - -//Free Golems - -/obj/item/disk/data/golem_shell - name = "Golem Creation Disk" - desc = "A gift from the Liberator." - icon_state = "datadisk1" - -/obj/item/disk/data/golem_shell/Initialize(mapload) - . = ..() - LAZYADD(memory[DATA_IDX_DESIGNS], SStech.designs_by_type[/datum/design/golem_shell]) - -/datum/design/golem_shell - name = "Golem Shell Construction" - desc = "Allows for the construction of a Golem Shell." - id = "golem" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 40000) - build_path = /obj/item/golem_shell - category = list("Imported") - -/obj/item/golem_shell - name = "incomplete free golem shell" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct" - desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish." - var/shell_type = /obj/effect/mob_spawn/ghost_role/human/golem - var/has_owner = FALSE //if the resulting golem obeys someone - w_class = WEIGHT_CLASS_BULKY - -/obj/item/golem_shell/attackby(obj/item/I, mob/user, params) - . = ..() - var/static/list/golem_shell_species_types = list( - /obj/item/stack/sheet/iron = /datum/species/golem, - /obj/item/stack/sheet/glass = /datum/species/golem/glass, - /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, - /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, - /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, - /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, - /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold, - /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver, - /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium, - /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, - /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, - /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, - /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, - /obj/item/stack/sheet/mineral/wood = /datum/species/golem/wood, - /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, - /obj/item/stack/sheet/runed_metal = /datum/species/golem/runic, - /obj/item/stack/gauze = /datum/species/golem/cloth, - /obj/item/stack/sheet/cloth = /datum/species/golem/cloth, - /obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine, - /obj/item/stack/sheet/plastic = /datum/species/golem/plastic, - /obj/item/stack/sheet/bronze = /datum/species/golem/bronze, - /obj/item/stack/sheet/cardboard = /datum/species/golem/cardboard, - /obj/item/stack/sheet/leather = /datum/species/golem/leather, - /obj/item/stack/sheet/bone = /datum/species/golem/bone, - /obj/item/stack/sheet/durathread = /datum/species/golem/durathread, - /obj/item/stack/sheet/cotton/durathread = /datum/species/golem/durathread, - /obj/item/stack/sheet/mineral/snow = /datum/species/golem/snow, - /obj/item/stack/sheet/mineral/metal_hydrogen= /datum/species/golem/mhydrogen, - ) - - if(!istype(I, /obj/item/stack)) - return - var/obj/item/stack/stuff_stack = I - var/species = golem_shell_species_types[stuff_stack.merge_type] - if(!species) - to_chat(user, span_warning("You can't build a golem out of this kind of material!")) - return - if(!stuff_stack.use(10)) - to_chat(user, span_warning("You need at least ten sheets to finish a golem!")) - return - to_chat(user, span_notice("You finish up the golem shell with ten sheets of [stuff_stack].")) - new shell_type(get_turf(src), species, user) - qdel(src) - -///made with xenobiology, the golem obeys its creator -/obj/item/golem_shell/servant - name = "incomplete servant golem shell" - shell_type = /obj/effect/mob_spawn/ghost_role/human/golem/servant diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index 14f50ca0dab8..2ef2b5b9b4a9 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -25,7 +25,6 @@ new /obj/item/coin/silver(src) new /obj/item/coin/gold(src) new /obj/item/coin/gold(src) - new /obj/item/coin/adamantine(src) ///Used in the dutchmen pirate shuttle. /obj/item/storage/bag/money/dutchmen/PopulateContents() @@ -33,4 +32,4 @@ new /obj/item/coin/silver/doubloon(src) for(var/iteration in 1 to 9) new /obj/item/coin/gold/doubloon(src) - new /obj/item/coin/adamantine/doubloon(src) + diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index ed2f345ce700..8433a36e03d3 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -468,9 +468,6 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/coin/bananium custom_materials = list(/datum/material/bananium = 400) -/obj/item/coin/adamantine - custom_materials = list(/datum/material/adamantine = 400) - /obj/item/coin/mythril custom_materials = list(/datum/material/mythril = 400) @@ -525,7 +522,5 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/coin/gold/doubloon name = "doubloon" -/obj/item/coin/adamantine/doubloon - name = "doubloon" #undef ORESTACK_OVERLAYS_MAX diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm index fff6084abf35..fb105a46d20a 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -21,7 +21,6 @@ /datum/sprite_accessory/vox_snouts icon = 'icons/mob/species/vox/vox_snouts.dmi' em_block = TRUE - color_src = MUTCOLORS2 /datum/sprite_accessory/vox_snouts/vox name = "Vox Snout" diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 890cc44abc68..bb62db91d055 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -5,15 +5,23 @@ icon_state = "mmi_off" base_icon_state = "mmi" w_class = WEIGHT_CLASS_NORMAL + var/braintype = "Cyborg" - var/obj/item/radio/radio = null //Let's give it a radio. - var/mob/living/brain/brainmob = null //The current occupant. - var/mob/living/silicon/robot = null //Appears unused. - var/obj/vehicle/sealed/mecha = null //This does not appear to be used outside of reference in mecha.dm. + + /// Internal radio object so the thing has a radio + var/obj/item/radio/radio = null + /// The current occupant. + var/mob/living/brain/brainmob = null + /// Reference to a mecha we may or may not be in. Only used for garbage collection. + var/obj/vehicle/sealed/mecha = null + /// The actual brain contained in the MMI var/obj/item/organ/brain/brain = null //The actual brain + var/datum/ai_laws/laws = new() + var/force_replace_ai_name = FALSE - var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core. + /// Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core. + var/overrides_aicore_laws = FALSE /obj/item/mmi/Initialize(mapload) . = ..() @@ -73,6 +81,7 @@ newbrain.brainmob = null brainmob.forceMove(src) brainmob.container = src + var/fubar_brain = newbrain.suicided || brainmob.suiciding //brain is from a suicider if(!fubar_brain && !(newbrain.organ_flags & ORGAN_DEAD)) // the brain organ hasn't been beaten to death, nor was from a suicider. brainmob.set_stat(CONSCIOUS) //we manually revive the brain mob @@ -126,6 +135,7 @@ if(Adjacent(user)) user.put_in_hands(brain) brain.organ_flags &= ~ORGAN_FROZEN + brain = null //No more brain in here /obj/item/mmi/proc/transfer_identity(mob/living/L) //Same deal as the regular brain proc. Used for human-->robot people. @@ -133,11 +143,13 @@ set_brainmob(new /mob/living/brain(src)) brainmob.name = L.real_name brainmob.real_name = L.real_name + brainmob.timeofdeath = L.timeofdeath if(L.has_dna()) var/mob/living/carbon/C = L if(!brainmob.stored_dna) brainmob.stored_dna = new /datum/dna/stored(brainmob) C.dna.copy_dna(brainmob.stored_dna) + brainmob.container = src if(ishuman(L)) @@ -145,13 +157,16 @@ var/obj/item/organ/brain/newbrain = H.getorgan(/obj/item/organ/brain) newbrain.forceMove(src) brain = newbrain + else if(!brain) brain = new(src) brain.name = "[L.real_name]'s brain" + brain.organ_flags |= ORGAN_FROZEN name = "[initial(name)]: [brainmob.real_name]" update_appearance() + if(istype(brain, /obj/item/organ/brain/alien)) braintype = "Xenoborg" //HISS....Beep. else diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index f58c42f8627e..52cd14bff686 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -271,7 +271,7 @@ handle_damage_effects() // Brain damage from low oxygenation or lack of blood. - if(!owner.needs_heart()) + if(!owner.needs_organ(ORGAN_SLOT_HEART)) return ..() // Brain damage from low oxygenation or lack of blood. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index fc2e1b2119d1..fecf41a32f0e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -820,7 +820,7 @@ /mob/living/carbon/heal_and_revive(heal_to = 75, revive_message) // We can't heal them if they're missing a heart - if(needs_heart() && !getorganslot(ORGAN_SLOT_HEART)) + if(needs_organ(ORGAN_SLOT_HEART) && !getorganslot(ORGAN_SLOT_HEART)) return FALSE // We can't heal them if they're missing their lungs diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 471755f3564f..e2fa1cab1c58 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1016,87 +1016,9 @@ /mob/living/carbon/human/species/android race = /datum/species/android -/mob/living/carbon/human/species/dullahan - race = /datum/species/dullahan - /mob/living/carbon/human/species/fly race = /datum/species/fly -/mob/living/carbon/human/species/golem - race = /datum/species/golem - -/mob/living/carbon/human/species/golem/adamantine - race = /datum/species/golem/adamantine - -/mob/living/carbon/human/species/golem/plasma - race = /datum/species/golem/plasma - -/mob/living/carbon/human/species/golem/diamond - race = /datum/species/golem/diamond - -/mob/living/carbon/human/species/golem/gold - race = /datum/species/golem/gold - -/mob/living/carbon/human/species/golem/silver - race = /datum/species/golem/silver - -/mob/living/carbon/human/species/golem/plasteel - race = /datum/species/golem/plasteel - -/mob/living/carbon/human/species/golem/titanium - race = /datum/species/golem/titanium - -/mob/living/carbon/human/species/golem/plastitanium - race = /datum/species/golem/plastitanium - -/mob/living/carbon/human/species/golem/alien_alloy - race = /datum/species/golem/alloy - -/mob/living/carbon/human/species/golem/wood - race = /datum/species/golem/wood - -/mob/living/carbon/human/species/golem/uranium - race = /datum/species/golem/uranium - -/mob/living/carbon/human/species/golem/sand - race = /datum/species/golem/sand - -/mob/living/carbon/human/species/golem/glass - race = /datum/species/golem/glass - -/mob/living/carbon/human/species/golem/bluespace - race = /datum/species/golem/bluespace - -/mob/living/carbon/human/species/golem/bananium - race = /datum/species/golem/bananium - -/mob/living/carbon/human/species/golem/blood_cult - race = /datum/species/golem/runic - -/mob/living/carbon/human/species/golem/cloth - race = /datum/species/golem/cloth - -/mob/living/carbon/human/species/golem/plastic - race = /datum/species/golem/plastic - -/mob/living/carbon/human/species/golem/bronze - race = /datum/species/golem/bronze - -/mob/living/carbon/human/species/golem/cardboard - race = /datum/species/golem/cardboard - -/mob/living/carbon/human/species/golem/leather - race = /datum/species/golem/leather - -/mob/living/carbon/human/species/golem/bone - race = /datum/species/golem/bone - -/mob/living/carbon/human/species/golem/durathread - race = /datum/species/golem/durathread - -/mob/living/carbon/human/species/golem/snow - race = /datum/species/golem/snow - /mob/living/carbon/human/species/jelly race = /datum/species/jelly @@ -1124,9 +1046,6 @@ /mob/living/carbon/human/species/moth race = /datum/species/moth -/mob/living/carbon/human/species/mush - race = /datum/species/mush - /mob/living/carbon/human/species/plasma race = /datum/species/plasmaman @@ -1145,9 +1064,6 @@ /mob/living/carbon/human/species/skeleton race = /datum/species/skeleton -/mob/living/carbon/human/species/snail - race = /datum/species/snail - /mob/living/carbon/human/species/vampire race = /datum/species/vampire @@ -1159,3 +1075,54 @@ /mob/living/carbon/human/species/vox race = /datum/species/vox + +/mob/living/carbon/human/verb/checkpulse() + set name = "Check Pulse" + set category = "IC" + set desc = "Approximately count somebody's pulse. Requires you to stand still at least 6 seconds." + set src in view(1) + + if(!isliving(src) || usr.stat || usr.incapacitated()) + return + + var/self = FALSE + if(usr == src) + self = TRUE + + if(!self) + usr.visible_message( + span_notice("[usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse."), + span_notice("You begin counting [src]'s pulse") + ) + else + usr.visible_message( + span_notice("[usr] begins counting their pulse."), + span_notice("You begin counting your pulse.") + ) + + + if (!pulse() || HAS_TRAIT(src, TRAIT_FAKEDEATH)) + to_chat(usr, span_danger("[src] has no pulse!")) + return + else + to_chat(usr, span_notice("[self ? "You have a" : "[src] has a"] pulse. Counting...")) + + to_chat(usr, span_notice("You must[self ? "" : " both"] remain still until counting is finished.")) + + if(do_after(usr, src, 6 SECONDS, DO_PUBLIC)) + to_chat(usr, span_notice("[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].")) + +///Accepts an organ slot, returns whether or not the mob needs one to survive (or just should have one for non-vital organs). +/mob/living/carbon/human/needs_organ(slot) + if(!dna || !dna.species) + return FALSE + + switch(slot) + if(ORGAN_SLOT_STOMACH) + if(HAS_TRAIT(src, TRAIT_NOHUNGER)) + return FALSE + if(ORGAN_SLOT_LUNGS) + if(HAS_TRAIT(src, TRAIT_NOBREATH)) + return FALSE + + return dna.species.organs[slot] diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 6cb3a1769568..4a0e4b5b126a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -182,32 +182,22 @@ GLOBAL_LIST_EMPTY(features_by_species) ///What anim to use for gibbing var/gib_anim = "gibbed-h" - - //Do NOT remove by setting to null. use OR make a RESPECTIVE TRAIT (removing stomach? add the NOSTOMACH trait to your species) - //why does it work this way? because traits also disable the downsides of not having an organ, removing organs but not having the trait will make your species die - - ///Replaces default brain with a different organ - var/obj/item/organ/brain/mutantbrain = /obj/item/organ/brain - ///Replaces default heart with a different organ - var/obj/item/organ/heart/mutantheart = /obj/item/organ/heart - ///Replaces default lungs with a different organ - var/obj/item/organ/lungs/mutantlungs = /obj/item/organ/lungs - ///Replaces default eyes with a different organ - var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes - ///Replaces default ears with a different organ - var/obj/item/organ/ears/mutantears = /obj/item/organ/ears - ///Replaces default tongue with a different organ - var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue - ///Replaces default liver with a different organ - var/obj/item/organ/liver/mutantliver = /obj/item/organ/liver - ///Replaces default stomach with a different organ - var/obj/item/organ/stomach/mutantstomach = /obj/item/organ/stomach - ///Replaces default appendix with a different organ. - var/obj/item/organ/appendix/mutantappendix = /obj/item/organ/appendix ///Forces an item into this species' hands. Only an honorary mutantthing because this is not an organ and not loaded in the same way, you've been warned to do your research. var/obj/item/mutanthands - + /// A template for what organs this species should have. + /// Assign null to simply exclude spawning with one. + var/list/organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) ///Bitflag that controls what in game ways something can select this species as a spawnable source, such as magic mirrors. See [mob defines][code/__DEFINES/mobs.dm] for possible sources. var/changesource_flags = NONE @@ -382,22 +372,17 @@ GLOBAL_LIST_EMPTY(features_by_species) * * visual_only - boolean, only load organs that change how the species looks. Do not use for normal gameplay stuff */ /datum/species/proc/regenerate_organs(mob/living/carbon/C, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) - //what should be put in if there is no mutantorgan (brains handled separately) - var/list/slot_mutantorgans = list(ORGAN_SLOT_BRAIN = mutantbrain, ORGAN_SLOT_HEART = mutantheart, ORGAN_SLOT_LUNGS = mutantlungs, ORGAN_SLOT_APPENDIX = mutantappendix, \ - ORGAN_SLOT_EYES = mutanteyes, ORGAN_SLOT_EARS = mutantears, ORGAN_SLOT_TONGUE = mutanttongue, ORGAN_SLOT_LIVER = mutantliver, ORGAN_SLOT_STOMACH = mutantstomach) - - for(var/slot in list(ORGAN_SLOT_BRAIN, ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_APPENDIX, \ - ORGAN_SLOT_EYES, ORGAN_SLOT_EARS, ORGAN_SLOT_TONGUE, ORGAN_SLOT_LIVER, ORGAN_SLOT_STOMACH)) - + for(var/slot in organs) var/obj/item/organ/oldorgan = C.getorganslot(slot) //used in removing - var/obj/item/organ/neworgan = slot_mutantorgans[slot] //used in adding + var/obj/item/organ/neworgan = organs[slot] //used in adding if(visual_only && !initial(neworgan.visual)) continue var/used_neworgan = FALSE - neworgan = SSwardrobe.provide_type(neworgan) - var/should_have = neworgan.get_availability(src) //organ proc that points back to a species trait (so if the species is supposed to have this organ) + var/should_have = !!neworgan + if(should_have) + neworgan = SSwardrobe.provide_type(neworgan) if(oldorgan && (!should_have || replace_current) && !(oldorgan.zone in excluded_zones) && !(oldorgan.organ_flags & ORGAN_UNREMOVABLE)) if(slot == ORGAN_SLOT_BRAIN) @@ -738,10 +723,6 @@ GLOBAL_LIST_EMPTY(features_by_species) accessory_overlay.color = fixed_mut_color else accessory_overlay.color = source.dna.mutant_colors[MUTCOLORS_GENERIC_1] - if(MUTCOLORS2) - accessory_overlay.color = source.dna.mutant_colors[MUTCOLORS_GENERIC_2] - if(MUTCOLORS3) - accessory_overlay.color = source.dna.mutant_colors[MUTCOLORS_GENERIC_3] if(HAIR) if(hair_color == "mutcolor") accessory_overlay.color = source.dna.mutant_colors[MUTCOLORS_GENERIC_1] @@ -1765,14 +1746,16 @@ GLOBAL_LIST_EMPTY(features_by_species) to_store += horny //Haha get it? //Don't preload brains, cause reuse becomes a horrible headache - to_store += mutantheart - to_store += mutantlungs - to_store += mutanteyes - to_store += mutantears - to_store += mutanttongue - to_store += mutantliver - to_store += mutantstomach - to_store += mutantappendix + to_store += organs[ORGAN_SLOT_HEART] + to_store += organs[ORGAN_SLOT_LUNGS] + to_store += organs[ORGAN_SLOT_EYES] + to_store += organs[ORGAN_SLOT_EARS] + to_store += organs[ORGAN_SLOT_TONGUE] + to_store += organs[ORGAN_SLOT_LIVER] + to_store += organs[ORGAN_SLOT_STOMACH] + to_store += organs[ORGAN_SLOT_APPENDIX] + + list_clear_nulls(to_store) //We don't cache mutant hands because it's not constrained enough, too high a potential for failure return to_store diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index ed1efb22b24a..350bd94dde89 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -12,7 +12,6 @@ TRAIT_NOHUNGER, TRAIT_NOBREATH, ) - mutanttongue = /obj/item/organ/tongue/abductor changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT ass_image = 'icons/ass/assgrey.png' @@ -25,6 +24,18 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/abductor, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = null, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/abductor, + ORGAN_SLOT_STOMACH = null, + ORGAN_SLOT_APPENDIX = null, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + /datum/species/abductor/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() var/datum/atom_hud/abductor_hud = GLOB.huds[DATA_HUD_ABDUCTOR] diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index cdc03b282eb1..d025f74fa617 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -24,7 +24,6 @@ ) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID meat = null - mutanttongue = /obj/item/organ/tongue/robot species_language_holder = /datum/language_holder/synthetic wings_icons = list("Robotic") changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT @@ -39,6 +38,18 @@ ) examine_limb_id = SPECIES_HUMAN + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = null, + ORGAN_SLOT_LUNGS = null, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_STOMACH = null, + ORGAN_SLOT_APPENDIX = null, + ORGAN_SLOT_LIVER = null, + ) + /datum/species/android/on_species_gain(mob/living/carbon/C) . = ..() // Androids don't eat, hunger or metabolise foods. Let's do some cleanup. diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm deleted file mode 100644 index 9a77def8b0c9..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ /dev/null @@ -1,266 +0,0 @@ -/datum/species/dullahan - name = "\improper Dullahan" - id = SPECIES_DULLAHAN - default_color = "FFFFFF" - species_traits = list(EYECOLOR, HAIR, FACEHAIR, LIPS, HAS_FLESH, HAS_BONE, HAIRCOLOR, FACEHAIRCOLOR) - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOHUNGER, - TRAIT_NOBREATH, - ) - inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutant_bodyparts = list("wings" = "None") - use_skintones = TRUE - mutantbrain = /obj/item/organ/brain/dullahan - mutanteyes = /obj/item/organ/eyes/dullahan - mutanttongue = /obj/item/organ/tongue/dullahan - mutantears = /obj/item/organ/ears/dullahan - examine_limb_id = SPECIES_HUMAN - skinned_type = /obj/item/stack/sheet/animalhide/human - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN - - /// The dullahan relay that's associated with the owner, used to handle many things such as talking and hearing. - var/obj/item/dullahan_relay/my_head - - /// Did our owner's first client connection get handled yet? Useful for when some proc needs to be called once we're sure that a client has moved into our owner, like for Dullahans. - var/owner_first_client_connection_handled = FALSE - - -/datum/species/dullahan/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - -/datum/species/dullahan/on_species_gain(mob/living/carbon/human/human, datum/species/old_species) - . = ..() - human.lose_hearing_sensitivity(TRAIT_GENERIC) - var/obj/item/bodypart/head/head = human.get_bodypart(BODY_ZONE_HEAD) - - if(head) - head.drop_limb() - - if(!QDELETED(head)) //drop_limb() deletes the limb if no drop location exists and character setup dummies are located in nullspace. - head.throwforce = 25 - my_head = new /obj/item/dullahan_relay(head, human) - human.put_in_hands(head) - head.show_organs_on_examine = FALSE - - // We want to give the head some boring old eyes just so it doesn't look too jank on the head sprite. - head.eyes = new /obj/item/organ/eyes(head) - head.eyes.eye_color_left = human.eye_color_left - head.eyes.eye_color_right = human.eye_color_right - human.update_body() - head.update_icon_dropped() - - human.set_safe_hunger_level() - -/datum/species/dullahan/on_species_loss(mob/living/carbon/human/human) - . = ..() - - if(my_head) - var/obj/item/bodypart/head/detached_head = my_head.loc - my_head.owner = null - QDEL_NULL(my_head) - if(detached_head) - qdel(detached_head) - - human.regenerate_limb(BODY_ZONE_HEAD, FALSE) - human.become_hearing_sensitive() - prevent_perspective_change = FALSE - human.reset_perspective(human) - -/datum/species/dullahan/spec_life(mob/living/carbon/human/human, delta_time, times_fired) - if(QDELETED(my_head)) - my_head = null - human.gib() - return - - if(my_head.loc.name != human.real_name && istype(my_head.loc, /obj/item/bodypart/head)) - var/obj/item/bodypart/head/detached_head = my_head.loc - detached_head.real_name = human.real_name - detached_head.name = human.real_name - detached_head.brain.name = "[human.name]'s brain" - - var/obj/item/bodypart/head/illegal_head = human.get_bodypart(BODY_ZONE_HEAD) - if(illegal_head) - my_head = null - human.gib() // Yeah so giving them a head on their body is really not a good idea, so their original head will remain but uh, good luck fixing it after that. - -/datum/species/dullahan/proc/update_vision_perspective(mob/living/carbon/human/human) - var/obj/item/organ/eyes/eyes = human.getorganslot(ORGAN_SLOT_EYES) - if(eyes) - human.update_tint() - if(eyes.tint) - prevent_perspective_change = FALSE - human.reset_perspective(human, TRUE) - else - human.reset_perspective(my_head, TRUE) - prevent_perspective_change = TRUE - -/datum/species/dullahan/on_owner_login(mob/living/carbon/human/owner) - var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES) - if(owner_first_client_connection_handled) - if(!eyes.tint) - owner.reset_perspective(my_head, TRUE) - prevent_perspective_change = TRUE - return - - // As it's the first time there's a client in our mob, we can finally update its vision to place it in the head instead! - var/datum/action/item_action/organ_action/dullahan/eyes_toggle_perspective_action = locate() in eyes?.actions - - eyes_toggle_perspective_action?.Trigger() - owner_first_client_connection_handled = TRUE - - -/datum/species/dullahan/get_species_description() - return "An angry spirit, hanging onto the land of the living for \ - unfinished business. Or that's what the books say. They're quite nice \ - when you get to know them." - -/datum/species/dullahan/get_species_lore() - return list( - "\"No wonder they're all so grumpy! Their hands are always full! I used to think, \ - \"Wouldn't this be cool?\" but after watching these creatures suffer from their head \ - getting dunked down disposals for the nth time, I think I'm good.\" - Captain Larry Dodd" - ) - -/datum/species/dullahan/create_pref_unique_perks() - var/list/to_add = list() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, - SPECIES_PERK_ICON = "horse-head", - SPECIES_PERK_NAME = "Headless and Horseless", - SPECIES_PERK_DESC = "Dullahans must lug their head around in their arms. While \ - many creative uses can come out of your head being independent of your \ - body, Dullahans will find it mostly a pain.", - )) - - return to_add - -// There isn't a "Minor Undead" biotype, so we have to explain it in an override (see: vampires) -/datum/species/dullahan/create_pref_biotypes_perks() - var/list/to_add = list() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "skull", - SPECIES_PERK_NAME = "Minor Undead", - SPECIES_PERK_DESC = "[name] are minor undead. \ - Minor undead enjoy some of the perks of being dead, like \ - not needing to breathe or eat, but do not get many of the \ - environmental immunities involved with being fully undead.", - )) - - return to_add - -/obj/item/organ/brain/dullahan - decoy_override = TRUE - organ_flags = 0 - -/obj/item/organ/tongue/dullahan - zone = "abstract" - modifies_speech = TRUE - -/obj/item/organ/tongue/dullahan/handle_speech(datum/source, list/speech_args) - if(ishuman(owner)) - var/mob/living/carbon/human/human = owner - if(isdullahan(human)) - var/datum/species/dullahan/dullahan_species = human.dna.species - if(isobj(dullahan_species.my_head.loc)) - var/obj/head = dullahan_species.my_head.loc - head.say(speech_args[SPEECH_MESSAGE], spans = speech_args[SPEECH_SPANS], sanitize = FALSE, language = speech_args[SPEECH_LANGUAGE], range = speech_args[SPEECH_RANGE]) - speech_args[SPEECH_MESSAGE] = "" - -/obj/item/organ/ears/dullahan - zone = "abstract" - -/obj/item/organ/eyes/dullahan - name = "head vision" - desc = "An abstraction." - actions_types = list(/datum/action/item_action/organ_action/dullahan) - zone = "abstract" - tint = INFINITY // to switch the vision perspective to the head on species_gain() without issue. - -/datum/action/item_action/organ_action/dullahan - name = "Toggle Perspective" - desc = "Switch between seeing normally from your head, or blindly from your body." - -/datum/action/item_action/organ_action/dullahan/Trigger(trigger_flags) - . = ..() - var/obj/item/organ/eyes/dullahan/dullahan_eyes = target - dullahan_eyes.tint = dullahan_eyes.tint ? NONE : INFINITY - - if(ishuman(owner)) - var/mob/living/carbon/human/human = owner - if(isdullahan(human)) - var/datum/species/dullahan/dullahan_species = human.dna.species - dullahan_species.update_vision_perspective(human) - - -/obj/item/dullahan_relay - name = "dullahan relay" - /// The mob (a dullahan) that owns this relay. - var/mob/living/owner - -/obj/item/dullahan_relay/Initialize(mapload, mob/living/carbon/human/new_owner) - . = ..() - if(!new_owner) - return INITIALIZE_HINT_QDEL - owner = new_owner - START_PROCESSING(SSobj, src) - RegisterSignal(owner, COMSIG_CLICK_SHIFT, PROC_REF(examinate_check)) - RegisterSignal(owner, COMSIG_LIVING_REGENERATE_LIMBS, PROC_REF(unlist_head)) - RegisterSignal(owner, COMSIG_LIVING_REVIVE, PROC_REF(retrieve_head)) - become_hearing_sensitive(ROUNDSTART_TRAIT) - -/obj/item/dullahan_relay/Destroy() - lose_hearing_sensitivity(ROUNDSTART_TRAIT) - owner = null - return ..() - -/obj/item/dullahan_relay/process() - if(!istype(loc, /obj/item/bodypart/head) || QDELETED(owner)) - . = PROCESS_KILL - qdel(src) - -/obj/item/dullahan_relay/proc/examinate_check(mob/user, atom/source) - SIGNAL_HANDLER - if(user.client.eye == src) - return COMPONENT_ALLOW_EXAMINATE - -/obj/item/dullahan_relay/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), atom/sound_loc) - . = ..() - if(owner) - owner.Hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mods) - -///Adds the owner to the list of hearers in hearers_in_view(), for visible/hearable on top of say messages -/obj/item/dullahan_relay/proc/include_owner(datum/source, list/hearers) - SIGNAL_HANDLER - if(!QDELETED(owner)) - hearers += owner - -///Stops dullahans from gibbing when regenerating limbs -/obj/item/dullahan_relay/proc/unlist_head(datum/source, noheal = FALSE, list/excluded_zones) - SIGNAL_HANDLER - excluded_zones |= BODY_ZONE_HEAD - -///Retrieving the owner's head for better ahealing. -/obj/item/dullahan_relay/proc/retrieve_head(datum/source, full_heal, admin_revive) - SIGNAL_HANDLER - if(admin_revive) - var/obj/item/bodypart/head/head = loc - var/turf/body_turf = get_turf(owner) - if(head && istype(head) && body_turf && !(head in owner.get_all_contents())) - head.forceMove(body_turf) - -/obj/item/dullahan_relay/Destroy() - if(!QDELETED(owner)) - var/mob/living/carbon/human/human = owner - if(isdullahan(human)) - var/datum/species/dullahan/dullahan_species = human.dna.species - dullahan_species.my_head = null - owner.gib() - owner = null - return ..() diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 9c50003096b4..e51438d2183e 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -2,26 +2,28 @@ name = "\improper Ethereal" id = SPECIES_ETHEREAL meat = /obj/item/food/meat/slab/human/mutant/ethereal - mutantlungs = /obj/item/organ/lungs/ethereal - mutantstomach = /obj/item/organ/stomach/ethereal - mutanttongue = /obj/item/organ/tongue/ethereal - mutantheart = /obj/item/organ/heart/ethereal exotic_blood = /datum/reagent/consumable/liquidelectricity //Liquid Electricity. fuck you think of something better gamer + siemens_coeff = 0.5 //They thrive on energy brutemod = 1.25 //They're weak to punches + payday_modifier = 0.75 job_outfit_type = SPECIES_HUMAN - species_traits = list(DYNCOLORS, AGENDER, NO_UNDERWEAR, HAIR, FACEHAIR, HAS_FLESH, HAS_BONE, HAIRCOLOR, FACEHAIRCOLOR) // i mean i guess they have blood so they can have wounds too + + species_traits = list(DYNCOLORS, AGENDER, NO_UNDERWEAR, HAIR, FACEHAIR, HAIRCOLOR, FACEHAIRCOLOR) // i mean i guess they have blood so they can have wounds too changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + species_cookie = /obj/item/food/energybar species_language_holder = /datum/language_holder/ethereal sexes = FALSE //no fetish content allowed toxic_food = NONE + // Body temperature for ethereals is much higher then humans as they like hotter environments bodytemp_normal = (BODYTEMP_NORMAL + 50) bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD // about 150C // Cold temperatures hurt faster as it is harder to move with out the heat energy bodytemp_cold_damage_limit = (T20C - 10) // about 10c + hair_color = "fixedmutcolor" hair_alpha = 140 @@ -34,6 +36,18 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/ethereal, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/ethereal, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/ethereal, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/ethereal, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/ethereal, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + var/current_color var/EMPeffect = FALSE var/emageffect = FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 2aa718603800..dfbcba21fdd0 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -3,15 +3,16 @@ plural_form = "Flypeople" id = SPECIES_FLYPERSON say_mod = "buzzes" - species_traits = list(HAS_FLESH, HAS_BONE, TRAIT_ANTENNAE) + species_traits = list() inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_CAN_USE_FLIGHT_POTION, + TRAIT_ANTENNAE, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG meat = /obj/item/food/meat/slab/human/mutant/fly - mutanteyes = /obj/item/organ/eyes/fly + liked_food = GROSS disliked_food = NONE toxic_food = NONE @@ -20,12 +21,6 @@ payday_modifier = 0.75 job_outfit_type = SPECIES_HUMAN - mutanttongue = /obj/item/organ/tongue/fly - mutantheart = /obj/item/organ/heart/fly - mutantlungs = /obj/item/organ/lungs/fly - mutantliver = /obj/item/organ/liver/fly - mutantstomach = /obj/item/organ/stomach/fly - mutantappendix = /obj/item/organ/appendix/fly mutant_organs = list(/obj/item/organ/fly, /obj/item/organ/fly/groin) bodypart_overrides = list( @@ -37,6 +32,18 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/fly, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/fly, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/fly, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/fly, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/fly, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/fly, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix/fly, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/fly, + ) + /datum/species/fly/check_species_weakness(obj/item/weapon, mob/living/attacker) if(istype(weapon, /obj/item/melee/flyswatter)) return 30 //Flyswatters deal 30x damage to flypeople. diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm deleted file mode 100644 index a7471697b5da..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ /dev/null @@ -1,1329 +0,0 @@ -/datum/species/golem - // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. - name = "\improper Golem" - id = SPECIES_GOLEM - species_traits = list(NOBLOOD,NOTRANSSTING, MUTCOLORS,NO_UNDERWEAR, NO_DNA_COPY) - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_RESISTHEAT, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_NOFIRE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - ) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - mutant_organs = list(/obj/item/organ/adamantine_resonator) - mutanttongue = /obj/item/organ/vocal_cords/adamantine - speedmod = 2 - payday_modifier = 0.75 - armor = 55 - siemens_coeff = 0 - no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) - nojumpsuit = 1 - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - sexes = 1 - meat = /obj/item/food/meat/slab/human/mutant/golem - species_language_holder = /datum/language_holder/golem - // To prevent golem subtypes from overwhelming the odds when random species - // changes, only the Random Golem type can be chosen - fixed_mut_color = "#aaaaaa" - - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, - ) - - var/info_text = "As an Iron Golem, you don't have any special traits." - var/random_eligible = TRUE //If false, the golem subtype can't be made through golem mutation toxin - - var/prefix = "Iron" - var/list/special_names = list("Tarkus") - var/human_surname_chance = 3 - var/special_name_chance = 5 - var/owner //dobby is a free golem - -/datum/species/golem/random_name(gender,unique,lastname) - var/golem_surname = pick(GLOB.golem_names) - // 3% chance that our golem has a human surname, because - // cultural contamination - if(prob(human_surname_chance)) - golem_surname = pick(GLOB.last_names) - else if(special_names?.len && prob(special_name_chance)) - golem_surname = pick(special_names) - - var/golem_name = "[prefix] [golem_surname]" - return golem_name - -/datum/species/golem/create_pref_unique_perks() - var/list/to_add = list() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "gem", - SPECIES_PERK_NAME = "Lithoid", - SPECIES_PERK_DESC = "Lithoids are creatures made out of elements instead of \ - blood and flesh. Because of this, they're generally stronger, slower, \ - and mostly immune to environmental dangers and dangers to their health, \ - such as viruses and dismemberment.", - )) - - return to_add - -/datum/species/golem/adamantine - name = "\improper Adamantine Golem" - id = SPECIES_GOLEM_ADAMANTINE - meat = /obj/item/food/meat/slab/human/mutant/golem/adamantine - mutant_organs = list(/obj/item/organ/adamantine_resonator) - mutanttongue = /obj/item/organ/vocal_cords/adamantine - fixed_mut_color = "#44eedd" - info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems. Your unique mineral makeup makes you immune to most types of magic." - prefix = "Adamantine" - special_names = null - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/adamantine/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) - -/datum/species/golem/adamantine/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) - ..() - -//The suicide bombers of golemkind -/datum/species/golem/plasma - name = "\improper Plasma Golem" - id = SPECIES_GOLEM_PLASMA - fixed_mut_color = "#aa33dd" - meat = /obj/item/stack/ore/plasma - //Can burn and takes damage from heat - //no RESISTHEAT, NOFIRE - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - ) - info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!" - heatmod = 0 //fine until they blow up - prefix = "Plasma" - special_names = list("Flood","Fire","Bar","Man") - examine_limb_id = SPECIES_GOLEM - var/boom_warning = FALSE - var/datum/action/innate/ignite/ignite - -/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H, delta_time, times_fired) - if(H.bodytemperature > 750) - if(!boom_warning && H.on_fire) - to_chat(H, span_userdanger("You feel like you could blow up at any moment!")) - boom_warning = TRUE - else - if(boom_warning) - to_chat(H, span_notice("You feel more stable.")) - boom_warning = FALSE - - if(H.bodytemperature > 850 && H.on_fire && prob(25)) - explosion(H, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 4, flame_range = 5, explosion_cause = src) - if(H) - H.gib() - if(H.fire_stacks < 2) //flammable - H.adjust_fire_stacks(0.5 * delta_time) - ..() - -/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - ignite = new - ignite.Grant(C) - -/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C) - if(ignite) - ignite.Remove(C) - ..() - -/datum/action/innate/ignite - name = "Ignite" - desc = "Set yourself aflame, bringing yourself closer to exploding!" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "sacredflame" - -/datum/action/innate/ignite/Activate() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - if(H.fire_stacks) - to_chat(owner, span_notice("You ignite yourself!")) - else - to_chat(owner, span_warning("You try to ignite yourself, but fail!")) - H.ignite_mob() //firestacks are already there passively - -//Harder to hurt -/datum/species/golem/diamond - name = "\improper Diamond Golem" - id = SPECIES_GOLEM_DIAMOND - fixed_mut_color = "#00ffff" - armor = 70 //up from 55 - meat = /obj/item/stack/ore/diamond - info_text = "As a Diamond Golem, you are more resistant than the average golem." - prefix = "Diamond" - special_names = list("Back","Grill") - examine_limb_id = SPECIES_GOLEM - -//Faster but softer and less armoured -/datum/species/golem/gold - name = "\improper Gold Golem" - id = SPECIES_GOLEM_GOLD - fixed_mut_color = "#cccc00" - speedmod = 1 - armor = 25 //down from 55 - meat = /obj/item/stack/ore/gold - info_text = "As a Gold Golem, you are faster but less resistant than the average golem." - prefix = "Golden" - special_names = list("Boy") - examine_limb_id = SPECIES_GOLEM - -//Heavier, thus higher chance of stunning when punching -/datum/species/golem/silver - name = "\improper Silver Golem" - id = SPECIES_GOLEM_SILVER - fixed_mut_color = "#dddddd" - meat = /obj/item/stack/ore/silver - info_text = "As a Silver Golem, your attacks have a higher chance of stunning. Being made of silver, your body is immune to most types of magic." - prefix = "Silver" - special_names = list("Surfer", "Chariot", "Lining") - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/silver/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - -/datum/species/golem/silver/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - ..() - -//Harder to stun, deals more damage, massively slowpokes, but gravproof and obstructive. Basically, The Wall. -/datum/species/golem/plasteel - name = "\improper Plasteel Golem" - id = SPECIES_GOLEM_PLASTEEL - fixed_mut_color = "#bbbbbb" - stunmod = 0.4 - speedmod = 4 //pretty fucking slow - meat = /obj/item/stack/ore/iron - info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching. You also magnetically attach to surfaces and so don't float without gravity and cannot have positions swapped with other beings." - prefix = "Plasteel" - special_names = null - examine_limb_id = SPECIES_GOLEM - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/plasteel, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/plasteel, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/plasteel, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/plasteel, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, - ) - -/datum/species/golem/plasteel/negates_gravity(mob/living/carbon/human/H) - return TRUE - -/datum/species/golem/plasteel/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_NOMOBSWAP, SPECIES_TRAIT) //THE WALL THE WALL THE WALL - -/datum/species/golem/plasteel/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_NOMOBSWAP, SPECIES_TRAIT) //NOTHING ON ERF CAN MAKE IT FALL - ..() - -//Immune to ash storms -/datum/species/golem/titanium - name = "\improper Titanium Golem" - id = SPECIES_GOLEM_TITANIUM - fixed_mut_color = "#ffffff" - meat = /obj/item/stack/ore/titanium - info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." - burnmod = 0.9 - prefix = "Titanium" - special_names = list("Dioxide") - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - ADD_TRAIT(C, TRAIT_ASHSTORM_IMMUNE, SPECIES_TRAIT) - -/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) - . = ..() - REMOVE_TRAIT(C, TRAIT_ASHSTORM_IMMUNE, SPECIES_TRAIT) - -//Immune to ash storms and lava -/datum/species/golem/plastitanium - name = "\improper Plastitanium Golem" - id = SPECIES_GOLEM_PLASTITANIUM - fixed_mut_color = "#888888" - meat = /obj/item/stack/ore/titanium - info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." - burnmod = 0.8 - prefix = "Plastitanium" - special_names = null - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - ADD_TRAIT(C, TRAIT_LAVA_IMMUNE, SPECIES_TRAIT) - ADD_TRAIT(C, TRAIT_ASHSTORM_IMMUNE, SPECIES_TRAIT) - -/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) - . = ..() - REMOVE_TRAIT(C, TRAIT_LAVA_IMMUNE, SPECIES_TRAIT) - REMOVE_TRAIT(C, TRAIT_ASHSTORM_IMMUNE, SPECIES_TRAIT) - -//Fast and regenerates... but can only speak like an abductor -/datum/species/golem/alloy - name = "\improper Alien Alloy Golem" - id = SPECIES_GOLEM_ALIEN - fixed_mut_color = "#333333" - meat = /obj/item/stack/sheet/mineral/abductor - mutanttongue = /obj/item/organ/tongue/abductor - speedmod = 1 //faster - info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems." - prefix = "Alien" - special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown - examine_limb_id = SPECIES_GOLEM - -//Regenerates because self-repairing super-advanced alien tech -/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H, delta_time, times_fired) - if(H.stat == DEAD) - return - H.heal_overall_damage(1 * delta_time, 1 * delta_time, BODYTYPE_ORGANIC) - H.adjustToxLoss(-1 * delta_time) - H.adjustOxyLoss(-1 * delta_time) - -//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races -/datum/species/golem/wood - name = "\improper Wood Golem" - id = SPECIES_GOLEM_WOOD - fixed_mut_color = "#9E704B" - meat = /obj/item/stack/sheet/mineral/wood - //Can burn and take damage from heat - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - ) - inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT - armor = 30 - burnmod = 1.25 - heatmod = 1.5 - info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." - prefix = "Wooden" - special_names = list("Bark", "Willow", "Catalpa", "Woody", "Oak", "Sap", "Twig", "Branch", "Maple", "Birch", "Elm", "Basswood", "Cottonwood", "Larch", "Aspen", "Ash", "Beech", "Buckeye", "Cedar", "Chestnut", "Cypress", "Fir", "Hawthorn", "Hazel", "Hickory", "Ironwood", "Juniper", "Leaf", "Mangrove", "Palm", "Pawpaw", "Pine", "Poplar", "Redwood", "Redbud", "Sassafras", "Spruce", "Sumac", "Trunk", "Walnut", "Yew") - human_surname_chance = 0 - special_name_chance = 100 - inherent_factions = list("plants", "vines") - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/wood/spec_life(mob/living/carbon/human/H, delta_time, times_fired) - if(H.stat == DEAD) - return - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(H.loc)) //else, there's considered to be no light - var/turf/T = H.loc - light_amount = min(1, T.get_lumcount()) - 0.5 - H.adjust_nutrition(5 * light_amount * delta_time) - if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL) - H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL) - if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(0.5 * delta_time, 0.5 * delta_time, BODYTYPE_ORGANIC) - H.adjustToxLoss(-0.5 * delta_time) - H.adjustOxyLoss(-0.5 * delta_time) - - if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) - H.take_overall_damage(2,0) - -//Radioactive puncher, hits for burn but only as hard as human, slightly more durable against brute but less against everything else -/datum/species/golem/uranium - name = "\improper Uranium Golem" - id = SPECIES_GOLEM_URANIUM - fixed_mut_color = "#77ff00" - meat = /obj/item/stack/ore/uranium - info_text = "As an Uranium Golem, your very touch burns and irradiates organic lifeforms. You don't hit as hard as most golems, but you are far more durable against blunt force trauma." - var/last_event = 0 - var/active = null - armor = 40 - brutemod = 0.5 - prefix = "Uranium" - special_names = list("Oxide", "Rod", "Meltdown", "235") - COOLDOWN_DECLARE(radiation_emission_cooldown) - examine_limb_id = SPECIES_GOLEM - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/uranium, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/uranium, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, - ) - -/datum/species/golem/uranium/proc/radiation_emission(mob/living/carbon/human/H) - if(!COOLDOWN_FINISHED(src, radiation_emission_cooldown)) - return - else - radiation_pulse(H, max_range = 1, threshold = RAD_VERY_LIGHT_INSULATION, chance = 3) - COOLDOWN_START(src, radiation_emission_cooldown, 2 SECONDS) - -/datum/species/golem/uranium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(COOLDOWN_FINISHED(src, radiation_emission_cooldown) && M != H && M.combat_mode) - radiation_emission(H) - -/datum/species/golem/uranium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H) - ..() - if(COOLDOWN_FINISHED(src, radiation_emission_cooldown) && user != H) - radiation_emission(H) - -/datum/species/golem/uranium/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(COOLDOWN_FINISHED(src, radiation_emission_cooldown)) - radiation_emission(H) - -//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. -/datum/species/golem/sand - name = "\improper Sand Golem" - id = SPECIES_GOLEM_SAND - fixed_mut_color = "#ffdc8f" - meat = /obj/item/stack/ore/glass //this is sand - armor = 0 - burnmod = 3 //melts easily - brutemod = 0.25 - info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery." - prefix = "Sand" - special_names = list("Castle", "Bag", "Dune", "Worm", "Storm") - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) - H.visible_message(span_danger("[H] turns into a pile of sand!")) - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i in 1 to rand(3,5)) - new /obj/item/stack/ore/glass(get_turf(H)) - qdel(H) - -/datum/species/golem/sand/bullet_act(obj/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) - if(P.armor_flag == BULLET || P.armor_flag == BOMB) - playsound(H, 'sound/effects/shovel_dig.ogg', 70, TRUE) - H.visible_message(span_danger("The [P.name] sinks harmlessly in [H]'s sandy body!"), \ - span_userdanger("The [P.name] sinks harmlessly in [H]'s sandy body!")) - return BULLET_ACT_BLOCK - return ..() - -//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. -/datum/species/golem/glass - name = "\improper Glass Golem" - id = SPECIES_GOLEM_GLASS - fixed_mut_color = "#5a96b4aa" //transparent body - meat = /obj/item/shard - armor = 0 - brutemod = 3 //very fragile - burnmod = 0.25 - info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." - prefix = "Glass" - special_names = list("Lens", "Prism", "Fiber", "Bead") - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) - playsound(H, SFX_SHATTER, 70, TRUE) - H.visible_message(span_danger("[H] shatters!")) - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i in 1 to rand(3,5)) - new /obj/item/shard(get_turf(H)) - qdel(H) - -/datum/species/golem/glass/bullet_act(obj/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) //self-shots don't reflect - if(P.armor_flag == LASER || P.armor_flag == ENERGY) - H.visible_message(span_danger("The [P.name] gets reflected by [H]'s glass skin!"), \ - span_userdanger("The [P.name] gets reflected by [H]'s glass skin!")) - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - // redirect the projectile - P.firer = H - P.preparePixelProjectile(locate(clamp(new_x, 1, world.maxx), clamp(new_y, 1, world.maxy), H.z), H) - return BULLET_ACT_FORCE_PIERCE - return ..() - -//Teleports when hit or when it wants to -/datum/species/golem/bluespace - name = "\improper Bluespace Golem" - id = SPECIES_GOLEM_BLUESPACE - fixed_mut_color = "#3333ff" - meat = /obj/item/stack/ore/bluespace_crystal - info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance." - prefix = "Bluespace" - special_names = list("Crystal", "Polycrystal") - examine_limb_id = SPECIES_GOLEM - - var/datum/action/innate/unstable_teleport/unstable_teleport - var/teleport_cooldown = 100 - var/last_teleport = 0 - -/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) - H.visible_message(span_warning("[H] teleports!"), span_danger("You destabilize and teleport!")) - new /obj/effect/particle_effect/sparks(get_turf(H)) - playsound(get_turf(H), SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - last_teleport = world.time - -/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == WEAKREF(H)) //No throwing stuff at yourself to trigger the teleport - return 0 - else - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(world.time > last_teleport + teleport_cooldown && M != H && M.combat_mode) - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown && user != H) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - unstable_teleport = new - unstable_teleport.Grant(C) - last_teleport = world.time - -/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) - if(unstable_teleport) - unstable_teleport.Remove(C) - ..() - -/datum/action/innate/unstable_teleport - name = "\improper Unstable Teleport" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "jaunt" - button_icon = 'icons/mob/actions/actions_spells.dmi' - var/cooldown = 150 - var/last_teleport = 0 - ///Set to true upon action activation to prevent spamming teleport callbacks while the first is still occurring. - var/is_charging = FALSE - -/datum/action/innate/unstable_teleport/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return - if(world.time > last_teleport + cooldown && !is_charging) - return TRUE - return FALSE - -/datum/action/innate/unstable_teleport/Activate() - var/mob/living/carbon/human/H = owner - H.visible_message(span_warning("[H] starts vibrating!"), span_danger("You start charging your bluespace core...")) - is_charging = TRUE - build_all_button_icons() //action icon looks unavailable - playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, TRUE) - addtimer(CALLBACK(src, PROC_REF(teleport), H), 15) - -/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) - H.visible_message(span_warning("[H] disappears in a shower of sparks!"), span_danger("You teleport!")) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(10, 0, src) - spark_system.attach(H) - spark_system.start() - do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - last_teleport = world.time - is_charging = FALSE - addtimer(CALLBACK(src, PROC_REF(build_all_button_icons)), cooldown + 5) //action icon looks available again - - -//honk -/datum/species/golem/bananium - name = "\improper Bananium Golem" - id = SPECIES_GOLEM_BANANIUM - fixed_mut_color = "#ffff00" - say_mod = "honks" - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_RESISTHEAT, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_NOFIRE, - TRAIT_CHUNKYFINGERS, - TRAIT_CLUMSY, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - ) - meat = /obj/item/stack/ore/bananium - info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged." - prefix = "Bananium" - special_names = null - examine_limb_id = SPECIES_GOLEM - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/bananium, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/bananium, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/bananium, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/bananium, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, - ) - - /// Cooldown for producing honks - COOLDOWN_DECLARE(honkooldown) - /// Cooldown for producing bananas - COOLDOWN_DECLARE(banana_cooldown) - /// Time between possible banana productions - var/banana_delay = 10 SECONDS - /// Same as the uranium golem. I'm pretty sure this is vestigial. - var/active = FALSE - -/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - COOLDOWN_START(src, honkooldown, 0) - COOLDOWN_START(src, banana_cooldown, banana_delay) - RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER) - if(liver) - ADD_TRAIT(liver, TRAIT_COMEDY_METABOLISM, SPECIES_TRAIT) - -/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C) - . = ..() - UnregisterSignal(C, COMSIG_MOB_SAY) - - var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER) - if(liver) - REMOVE_TRAIT(liver, TRAIT_COMEDY_METABOLISM, SPECIES_TRAIT) - -/datum/species/golem/bananium/random_name(gender,unique,lastname) - var/clown_name = pick(GLOB.clown_names) - var/golem_name = "[uppertext(clown_name)]" - return golem_name - -/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(COOLDOWN_FINISHED(src, banana_cooldown) && M != H && M.combat_mode) - new /obj/item/grown/bananapeel/specialpeel(get_turf(H)) - COOLDOWN_START(src, banana_cooldown, banana_delay) - -/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H) - ..() - if((user != H) && COOLDOWN_FINISHED(src, banana_cooldown)) - new /obj/item/grown/bananapeel/specialpeel(get_turf(H)) - COOLDOWN_START(src, banana_cooldown, banana_delay) - -/datum/species/golem/bananium/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(COOLDOWN_FINISHED(src, banana_cooldown)) - new /obj/item/grown/bananapeel/specialpeel(get_turf(H)) - COOLDOWN_START(src, banana_cooldown, banana_delay) - -/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == WEAKREF(H)) //No throwing stuff at yourself to make bananas - return 0 - else - new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) - COOLDOWN_START(src, banana_cooldown, banana_delay) - -/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H, delta_time, times_fired) - if(!active && COOLDOWN_FINISHED(src, honkooldown)) - active = TRUE - playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, TRUE) - COOLDOWN_START(src, honkooldown, rand(2 SECONDS, 8 SECONDS)) - active = FALSE - ..() - -/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) - playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, FALSE) - -/datum/species/golem/bananium/proc/handle_speech(datum/source, list/speech_args) - SIGNAL_HANDLER - speech_args[SPEECH_SPANS] |= SPAN_CLOWN - -/datum/species/golem/runic - name = "\improper Runic Golem" - id = SPECIES_GOLEM_CULT - sexes = FALSE - info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOFLASH, - TRAIT_RESISTHEAT, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_NOFIRE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - ) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - prefix = "Runic" - special_names = null - inherent_factions = list("cult") - species_language_holder = /datum/language_holder/golem/runic - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/cult, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/cult, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/cult, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/cult, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/cult, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/cult, - ) - - /// A ref to our jaunt spell that we get on species gain. - var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/golem/jaunt - /// A ref to our gaze spell that we get on species gain. - var/datum/action/cooldown/spell/pointed/abyssal_gaze/abyssal_gaze - /// A ref to our dominate spell that we get on species gain. - var/datum/action/cooldown/spell/pointed/dominate/dominate - -/datum/species/golem/runic/random_name(gender,unique,lastname) - var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly","Coldsteel") - var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor - var/golem_name = "[edgy_first_name] [edgy_last_name]" - return golem_name - -/datum/species/golem/runic/on_species_gain(mob/living/carbon/grant_to, datum/species/old_species) - . = ..() - // Create our species specific spells here. - // Note we link them to the mob, not the mind, - // so they're not moved around on mindswaps - jaunt = new(grant_to) - jaunt.StartCooldown() - jaunt.Grant(grant_to) - - abyssal_gaze = new(grant_to) - abyssal_gaze.StartCooldown() - abyssal_gaze.Grant(grant_to) - - dominate = new(grant_to) - dominate.StartCooldown() - dominate.Grant(grant_to) - -/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) - // Aaand cleanup our species specific spells. - // No free rides. - QDEL_NULL(jaunt) - QDEL_NULL(abyssal_gaze) - QDEL_NULL(dominate) - return ..() - -/datum/species/golem/cloth - name = "\improper Cloth Golem" - id = SPECIES_GOLEM_CLOTH - sexes = FALSE - info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \ - Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient." - species_traits = list(NOBLOOD,NO_UNDERWEAR) //no mutcolors, and can burn - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_RESISTCOLD, - TRAIT_NOBREATH, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_LITERATE, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - TRAIT_CHUNKYFINGERS, - ) - inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - armor = 15 //feels no pain, but not too resistant - burnmod = 2 // don't get burned - speedmod = 1 // not as heavy as stone - prefix = "Cloth" - special_names = null - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/cloth, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/cloth, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/cloth, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/cloth, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/cloth, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/cloth, - ) - -/datum/species/golem/cloth/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - -/datum/species/golem/cloth/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) - ..() - -/datum/species/golem/cloth/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - -/datum/species/golem/cloth/random_name(gender,unique,lastname) - var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ - "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh - var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" - return golem_name - -/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) - if(H.fire_stacks < 1) - H.adjust_fire_stacks(1) //always prone to burning - ..() - -/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) - if(gibbed) - return - if(H.on_fire) - H.visible_message(span_danger("[H] burns into ash!")) - H.dust(just_ash = TRUE) - return - - H.visible_message(span_danger("[H] falls apart into a pile of bandages!")) - new /obj/structure/cloth_pile(get_turf(H), H) - ..() - -/datum/species/golem/cloth/get_species_description() - return "A wrapped up Mummy! They descend upon Space Station Thirteen every year to spook the crew! \"Return the slab!\"" - -/datum/species/golem/cloth/get_species_lore() - return list( - "Mummies are very self conscious. They're shaped weird, they walk slow, and worst of all, \ - they're considered the laziest halloween costume. But that's not even true, they say.", - - "Making a mummy costume may be easy, but making a CONVINCING mummy costume requires \ - things like proper fabric and purposeful staining to achieve the look. Which is FAR from easy. Gosh.", - ) - -// Calls parent, as Golems have a species-wide perk we care about. -/datum/species/golem/cloth/create_pref_unique_perks() - var/list/to_add = ..() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "recycle", - SPECIES_PERK_NAME = "Reformation", - SPECIES_PERK_DESC = "A boon quite similar to Ethereals, Mummies collapse into \ - a pile of bandages after they die. If left alone, they will reform back \ - into themselves. The bandages themselves are very vulnerable to fire.", - )) - - return to_add - -// Override to add a perk elaborating on just how dangerous fire is. -/datum/species/golem/cloth/create_pref_temperature_perks() - var/list/to_add = list() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, - SPECIES_PERK_ICON = "fire-alt", - SPECIES_PERK_NAME = "Incredibly Flammable", - SPECIES_PERK_DESC = "Mummies are made entirely of cloth, which makes them \ - very vulnerable to fire. They will not reform if they die while on \ - fire, and they will easily catch alight. If your bandages burn to ash, you're toast!", - )) - - return to_add - -/obj/structure/cloth_pile - name = "pile of bandages" - desc = "It emits a strange aura, as if there was still life within it..." - max_integrity = 50 - armor = list(MELEE = 90, BULLET = 90, LASER = 25, ENERGY = 80, BOMB = 50, BIO = 100, FIRE = -50, ACID = -50) - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "pile_bandages" - resistance_flags = FLAMMABLE - - var/revive_time = 900 - var/mob/living/carbon/human/cloth_golem - -/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) - . = ..() - if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) - H.unequip_everything() - H.forceMove(src) - cloth_golem = H - to_chat(cloth_golem, span_notice("You start gathering your life energy, preparing to rise again...")) - addtimer(CALLBACK(src, PROC_REF(revive)), revive_time) - else - return INITIALIZE_HINT_QDEL - -/obj/structure/cloth_pile/Destroy() - if(cloth_golem) - QDEL_NULL(cloth_golem) - return ..() - -/obj/structure/cloth_pile/burn() - visible_message(span_danger("[src] burns into ash!")) - new /obj/effect/decal/cleanable/ash(get_turf(src)) - ..() - -/obj/structure/cloth_pile/proc/revive(full_heal = FALSE, admin_revive = FALSE) - if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime - return - if(cloth_golem.suiciding) - QDEL_NULL(cloth_golem) - return - - invisibility = INVISIBILITY_MAXIMUM //disappear before the animation - new /obj/effect/temp_visual/mummy_animation(get_turf(src)) - if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) - cloth_golem.grab_ghost() //won't pull if it's a suicide - sleep(20) - cloth_golem.forceMove(get_turf(src)) - cloth_golem.visible_message(span_danger("[src] rises and reforms into [cloth_golem]!"),span_userdanger("You reform into yourself!")) - cloth_golem = null - qdel(src) - -/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params) - . = ..() - - if(resistance_flags & ON_FIRE) - return - - if(P.get_temperature()) - visible_message(span_danger("[src] bursts into flames!")) - fire_act() - -/datum/species/golem/plastic - name = "\improper Plastic Golem" - id = SPECIES_GOLEM_PLASTIC - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_RESISTHEAT, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_NOFIRE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - TRAIT_VENTCRAWLER_NUDE, - ) - prefix = "Plastic" - special_names = list("Sheet", "Bag", "Bottle") - fixed_mut_color = "#fffa" - info_text = "As a Plastic Golem, you are capable of ventcrawling and passing through plastic flaps as long as you are naked." - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/bronze - name = "\improper Bronze Golem" - id = SPECIES_GOLEM_BRONZE - prefix = "Bronze" - special_names = list("Bell") - fixed_mut_color = "#cd7f32" - info_text = "As a Bronze Golem, you are very resistant to loud noises, and make loud noises if something hard hits you, however this ability does hurt your hearing." - special_step_sounds = list('sound/machines/clockcult/integration_cog_install.ogg', 'sound/magic/clockwork/fellowship_armory.ogg' ) - mutantears = /obj/item/organ/ears/bronze - examine_limb_id = SPECIES_GOLEM - var/last_gong_time = 0 - var/gong_cooldown = 150 - -/datum/species/golem/bronze/bullet_act(obj/projectile/P, mob/living/carbon/human/H) - if(!(world.time > last_gong_time + gong_cooldown)) - return ..() - if(P.armor_flag == BULLET || P.armor_flag == BOMB) - gong(H) - return ..() - -/datum/species/golem/bronze/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(world.time > last_gong_time + gong_cooldown && M.combat_mode) - gong(H) - -/datum/species/golem/bronze/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/on_hit(obj/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/proc/gong(mob/living/carbon/human/H) - last_gong_time = world.time - for(var/mob/living/M in get_hearers_in_view(7,H)) - if(M.stat == DEAD) //F - continue - if(M == H) - H.show_message(span_narsiesmall("You cringe with pain as your body rings around you!"), MSG_AUDIBLE) - H.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE) - H.soundbang_act(2, 0, 100, 1) - H.adjust_timed_status_effect(14 SECONDS, /datum/status_effect/jitter) - var/distance = max(0,get_dist(get_turf(H),get_turf(M))) - switch(distance) - if(0 to 1) - M.show_message(span_narsiesmall("GONG!"), MSG_AUDIBLE) - M.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE) - M.soundbang_act(1, 0, 30, 3) - M.adjust_timed_status_effect(10 SECONDS, /datum/status_effect/confusion) - M.adjust_timed_status_effect(8 SECONDS, /datum/status_effect/jitter) - if(2 to 3) - M.show_message(span_cult("GONG!"), MSG_AUDIBLE) - M.playsound_local(H, 'sound/effects/gong.ogg', 75, TRUE) - M.soundbang_act(1, 0, 15, 2) - M.adjust_timed_status_effect(6 SECONDS, /datum/status_effect/jitter) - else - M.show_message(span_warning("GONG!"), MSG_AUDIBLE) - M.playsound_local(H, 'sound/effects/gong.ogg', 50, TRUE) - - -/datum/species/golem/cardboard //Faster but weaker, can also make new shells on its own - name = "\improper Cardboard Golem" - id = SPECIES_GOLEM_CARDBOARD - prefix = "Cardboard" - special_names = list("Box") - info_text = "As a Cardboard Golem, you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on yourself." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - TRAIT_NOFLASH, - ) - fixed_mut_color = null - armor = 25 - burnmod = 1.25 - heatmod = 2 - speedmod = 1.5 - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/cardboard, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/cardboard, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/cardboard, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/cardboard, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/cardboard, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/cardboard, - ) - var/last_creation = 0 - var/brother_creation_cooldown = 300 - -/datum/species/golem/cardboard/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H) - . = ..() - if(user != H) - return FALSE //forced reproduction is rape. - if(istype(I, /obj/item/stack/sheet/cardboard)) - var/obj/item/stack/sheet/cardboard/C = I - if(last_creation + brother_creation_cooldown > world.time) //no cheesing dork - return - if(C.amount < 10) - to_chat(H, span_warning("You do not have enough cardboard!")) - return FALSE - to_chat(H, span_notice("You attempt to create a new cardboard brother.")) - if(do_after(user, user, 30)) - if(last_creation + brother_creation_cooldown > world.time) //no cheesing dork - return - if(!C.use(10)) - to_chat(H, span_warning("You do not have enough cardboard!")) - return FALSE - to_chat(H, span_notice("You create a new cardboard golem shell.")) - create_brother(H.loc) - -/datum/species/golem/cardboard/proc/create_brother(location) - new /obj/effect/mob_spawn/ghost_role/human/golem/servant(location, /datum/species/golem/cardboard, owner) - last_creation = world.time - -/datum/species/golem/leather - name = "\improper Leather Golem" - id = SPECIES_GOLEM_LEATHER - special_names = list("Face", "Man", "Belt") //Ah dude 4 strength 4 stam leather belt AHHH - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - TRAIT_STRONG_GRABBER, - ) - prefix = "Leather" - fixed_mut_color = "#624a2e" - info_text = "As a Leather Golem, you are flammable, but you can grab things with incredible ease, allowing all your grabs to start at a strong level." - grab_sound = 'sound/weapons/whipgrab.ogg' - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/durathread - name = "\improper Durathread Golem" - id = SPECIES_GOLEM_DURATHREAD - prefix = "Durathread" - special_names = list("Boll","Weave") - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) - fixed_mut_color = null - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - TRAIT_NOFLASH, - ) - info_text = "As a Durathread Golem, your strikes will cause those your targets to start choking, but your woven body won't withstand fire as well." - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/durathread, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/durathread, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/durathread, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/durathread, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/durathread, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/durathread, - ) - -/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - target.apply_status_effect(/datum/status_effect/strandling) - -/datum/species/golem/bone - name = "\improper Bone Golem" - id = SPECIES_GOLEM_BONE - say_mod = "rattles" - prefix = "Bone" - special_names = list("Head", "Broth", "Fracture", "Rattler", "Appetit") - liked_food = GROSS | MEAT | RAW - toxic_food = null - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES,HAS_BONE) - inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/bone - mutantstomach = /obj/item/organ/stomach/bone - sexes = FALSE - fixed_mut_color = null - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOFLASH, - TRAIT_RESISTHEAT, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_NOFIRE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - TRAIT_FAKEDEATH, - ) - species_language_holder = /datum/language_holder/golem/bone - info_text = "As a Bone Golem, You have a powerful spell that lets you chill your enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice." - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/bone, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/bone, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/bone, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/bone, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/bone, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/bone, - ) - var/datum/action/innate/bonechill/bonechill - -/datum/species/golem/bone/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - bonechill = new - bonechill.Grant(C) - -/datum/species/golem/bone/on_species_loss(mob/living/carbon/C) - if(bonechill) - bonechill.Remove(C) - ..() - -/datum/action/innate/bonechill - name = "Bone Chill" - desc = "Rattle your bones and strike fear into your enemies!" - check_flags = AB_CHECK_CONSCIOUS - button_icon = 'icons/mob/actions/actions_spells.dmi' - button_icon_state = "bonechill" - var/cooldown = 600 - var/last_use - var/snas_chance = 3 - -/datum/action/innate/bonechill/Activate() - if(world.time < last_use + cooldown) - to_chat(owner, span_warning("You aren't ready yet to rattle your bones again!")) - return - owner.visible_message(span_warning("[owner] rattles [owner.p_their()] bones harrowingly."), span_notice("You rattle your bones")) - last_use = world.time - if(prob(snas_chance)) - playsound(get_turf(owner),'sound/magic/RATTLEMEBONES2.ogg', 100) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - var/mutable_appearance/badtime = mutable_appearance('icons/mob/human_parts.dmi', "b_golem_eyes", -FIRE_LAYER-0.5) - badtime.appearance_flags = RESET_COLOR - H.overlays_standing[FIRE_LAYER+0.5] = badtime - H.apply_overlay(FIRE_LAYER+0.5) - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon, remove_overlay), FIRE_LAYER+0.5), 25) - else - playsound(get_turf(owner),'sound/magic/RATTLEMEBONES.ogg', 100) - for(var/mob/living/L in orange(7, get_turf(owner))) - if((L.mob_biotypes & MOB_UNDEAD) || isgolem(L) || HAS_TRAIT(L, TRAIT_RESISTCOLD)) - continue //Do not affect our brothers - - to_chat(L, span_cultlarge("A spine-chilling sound chills you to the bone!")) - L.apply_status_effect(/datum/status_effect/bonechill) - -/datum/species/golem/snow - name = "\improper Snow Golem" - id = SPECIES_GOLEM_SNOW - fixed_mut_color = null //custom sprites - armor = 45 //down from 55 - burnmod = 3 //melts easily - info_text = "As a Snow Golem, you are extremely vulnerable to burn damage, but you can generate snowballs and shoot cryokinetic beams. You will also turn to snow when dying, preventing any form of recovery." - prefix = "Snow" - special_names = list("Flake", "Blizzard", "Storm") - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors, no eye sprites - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_PIERCEIMMUNE, - TRAIT_NODISMEMBER, - ) - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/snow, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/snow, - BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/snow, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/snow, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/snow, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/snow, - ) - - /// A ref to our "throw snowball" spell we get on species gain. - var/datum/action/cooldown/spell/conjure_item/snowball/snowball - /// A ref to our cryobeam spell we get on species gain. - var/datum/action/cooldown/spell/pointed/projectile/cryo/cryo - -/datum/species/golem/snow/spec_death(gibbed, mob/living/carbon/human/H) - H.visible_message(span_danger("[H] turns into a pile of snow!")) - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i in 1 to rand(3,5)) - new /obj/item/stack/sheet/mineral/snow(get_turf(H)) - new /obj/item/food/grown/carrot(get_turf(H)) - qdel(H) - -/datum/species/golem/snow/on_species_gain(mob/living/carbon/grant_to, datum/species/old_species) - . = ..() - ADD_TRAIT(grant_to, TRAIT_SNOWSTORM_IMMUNE, SPECIES_TRAIT) - - snowball = new(grant_to) - snowball.StartCooldown() - snowball.Grant(grant_to) - - cryo = new(grant_to) - cryo.StartCooldown() - cryo.Grant(grant_to) - -/datum/species/golem/snow/on_species_loss(mob/living/carbon/remove_from) - REMOVE_TRAIT(remove_from, TRAIT_SNOWSTORM_IMMUNE, SPECIES_TRAIT) - QDEL_NULL(snowball) - QDEL_NULL(cryo) - return ..() - -/datum/species/golem/mhydrogen - name = "\improper Metallic Hydrogen Golem" - id = SPECIES_GOLEM_HYDROGEN - fixed_mut_color = "#dddddd" - info_text = "As a Metallic Hydrogen Golem, you were forged in the highest pressures and the highest heats. Your unique mineral makeup makes you immune to most types of damages." - prefix = "Metallic Hydrogen" - special_names = null - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOFLASH, - TRAIT_RESISTHEAT, - TRAIT_NOBREATH, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_NOFIRE, - TRAIT_RADIMMUNE, - TRAIT_GENELESS, - TRAIT_NODISMEMBER, - TRAIT_CHUNKYFINGERS, - ) - examine_limb_id = SPECIES_GOLEM - -/datum/species/golem/mhydrogen/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) - -/datum/species/golem/mhydrogen/on_species_loss(mob/living/carbon/C) - REMOVE_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) - return ..() diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 39e150239a73..4e806e748849 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -2,7 +2,7 @@ name = "\improper Human" id = SPECIES_HUMAN default_color = "FFFFFF" - species_traits = list(EYECOLOR, HAIR, FACEHAIR, LIPS, HAS_FLESH, HAS_BONE, BODY_RESIZABLE, HAIRCOLOR, FACEHAIRCOLOR) + species_traits = list(EYECOLOR, HAIR, FACEHAIR, LIPS, BODY_RESIZABLE, HAIRCOLOR, FACEHAIRCOLOR) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index f3f95b7962f0..6e1930f90e96 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -11,7 +11,6 @@ TRAIT_CAN_STRIP, TRAIT_TOXINLOVER, ) - mutantlungs = /obj/item/organ/lungs/slime meat = /obj/item/food/meat/slab/human/mutant/slime exotic_blood = /datum/reagent/toxin/slimejelly var/datum/action/innate/regenerate_limbs/regenerate_limbs @@ -35,6 +34,18 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/slime, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + /datum/species/jelly/on_species_loss(mob/living/carbon/old_jellyperson) if(regenerate_limbs) regenerate_limbs.Remove(old_jellyperson) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index c3ff3d2f84f9..ebda83e7182f 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -5,7 +5,7 @@ id = SPECIES_LIZARD say_mod = "hisses" default_color = COLOR_VIBRANT_LIME - species_traits = list(MUTCOLORS, EYECOLOR, LIPS, HAS_FLESH, HAS_BONE, BODY_RESIZABLE, SCLERA) + species_traits = list(MUTCOLORS, EYECOLOR, LIPS, BODY_RESIZABLE, SCLERA) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, @@ -20,7 +20,7 @@ /obj/item/organ/spines = "None", /obj/item/organ/tail/lizard = "Smooth", ) - mutanttongue = /obj/item/organ/tongue/lizard + coldmod = 1.5 heatmod = 0.67 payday_modifier = 0.75 @@ -53,6 +53,19 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/lizard, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + + pain_emotes = list( list( "grunt" = 1, @@ -147,8 +160,7 @@ Lizard subspecies: ASHWALKERS /datum/species/lizard/ashwalker name = "\improper Ash Walker" id = SPECIES_LIZARD_ASH - species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAS_FLESH,HAS_BONE) - mutantlungs = /obj/item/organ/lungs/ashwalker + species_traits = list(MUTCOLORS,EYECOLOR,LIPS) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, @@ -167,6 +179,19 @@ Lizard subspecies: ASHWALKERS BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/ashwalker, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/lizard, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + + /* Lizard subspecies: SILVER SCALED */ @@ -186,10 +211,23 @@ Lizard subspecies: SILVER SCALED TRAIT_WINE_TASTER, ) species_language_holder = /datum/language_holder/lizard/silver - mutanttongue = /obj/item/organ/tongue/lizard/silver + armor = 10 //very light silvery scales soften blows changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN examine_limb_id = SPECIES_LIZARD + + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = null, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/lizard/silver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + ///stored mutcolor for when we turn back off of a silverscale. var/old_mutcolor ///stored eye color for when we turn back off of a silverscale. @@ -197,6 +235,7 @@ Lizard subspecies: SILVER SCALED ///See above var/old_eye_color_right + /datum/species/lizard/silverscale/on_species_gain(mob/living/carbon/C, datum/species/old_species) var/mob/living/carbon/human/new_silverscale = C old_mutcolor = C.dna.mutant_colors[MUTCOLORS_GENERIC_1] diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index 9dca57c50cc2..a26993197d4c 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -11,8 +11,6 @@ meat = /obj/item/food/meat/slab/monkey knife_butcher_results = list(/obj/item/food/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1) species_traits = list( - HAS_FLESH, - HAS_BONE, NO_UNDERWEAR, LIPS, NOEYESPRITES, diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 371a26143b6c..1e281d50acea 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -5,7 +5,7 @@ say_mod = "flutters" scream_verb = "buzzes" default_color = "00FF00" - species_traits = list(MUTCOLORS, LIPS, HAS_FLESH, HAS_BONE, HAS_MARKINGS, BODY_RESIZABLE, NONHUMANHAIR) + species_traits = list(MUTCOLORS, LIPS, HAS_MARKINGS, BODY_RESIZABLE, NONHUMANHAIR) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, @@ -20,7 +20,7 @@ liked_food = VEGETABLES | DAIRY | CLOTH disliked_food = FRUIT | GROSS toxic_food = MEAT | RAW | SEAFOOD - mutanteyes = /obj/item/organ/eyes/moth + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT species_language_holder = /datum/language_holder/moth wings_icons = list("Megamoth", "Mothra") @@ -38,6 +38,19 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/moth, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/moth, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + + /datum/species/moth/regenerate_organs(mob/living/carbon/C, datum/species/old_species, replace_current= TRUE, list/excluded_zones, visual_only) . = ..() if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm deleted file mode 100644 index ac478eb311ec..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ /dev/null @@ -1,62 +0,0 @@ -/datum/species/mush //mush mush codecuck - name = "\improper Mushroomperson" - plural_form = "Mushroompeople" - id = SPECIES_MUSHROOM - mutant_bodyparts = list("caps" = "Round") - changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN - - fixed_mut_color = "#DBBF92" - hair_color = "#FF4B19" //cap color, spot color uses eye color - nojumpsuit = TRUE - - say_mod = "poofs" //what does a mushroom sound like - species_traits = list(MUTCOLORS, NOEYESPRITES, NO_UNDERWEAR, HAS_FLESH, HAS_BONE) - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOBREATH, - TRAIT_NOFLASH, - ) - inherent_factions = list("mushroom") - speedmod = 1.5 //faster than golems but not by much - - no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING) - - burnmod = 1.25 - heatmod = 1.5 - - mutanteyes = /obj/item/organ/eyes/night_vision/mushroom - use_skintones = FALSE - var/datum/martial_art/mushpunch/mush - species_language_holder = /datum/language_holder/mushroom - - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mushroom, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mushroom, - BODY_ZONE_HEAD = /obj/item/bodypart/head/mushroom, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mushroom, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mushroom, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/mushroom, - ) - -/datum/species/mush/check_roundstart_eligible() - return FALSE //hard locked out of roundstart on the order of design lead kor, this can be removed in the future when planetstation is here OR SOMETHING but right now we have a problem with races. - -/datum/species/mush/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(!H.dna.features["caps"]) - H.dna.features["caps"] = "Round" - handle_mutant_bodyparts(H) - mush = new(null) - mush.teach(H) - -/datum/species/mush/on_species_loss(mob/living/carbon/C) - . = ..() - mush.remove(C) - QDEL_NULL(mush) - -/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) - forced_colour = FALSE - ..() diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 471ee8a25c1b..f52a2adf4f0a 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -5,7 +5,7 @@ say_mod = "rattles" sexes = 0 meat = /obj/item/stack/sheet/mineral/plasma - species_traits = list(NOBLOOD, NOTRANSSTING, HAS_BONE, BODY_RESIZABLE) + species_traits = list(NOBLOOD, NOTRANSSTING, BODY_RESIZABLE) // plasmemes get hard to wound since they only need a severe bone wound to dismember, but unlike skellies, they can't pop their bones back into place inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, @@ -18,13 +18,11 @@ ) inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - mutantlungs = /obj/item/organ/lungs/plasmaman - mutanttongue = /obj/item/organ/tongue/bone/plasmaman - mutantliver = /obj/item/organ/liver/plasmaman - mutantstomach = /obj/item/organ/stomach/bone/plasmaman + burnmod = 1.5 heatmod = 1.5 brutemod = 1.5 + payday_modifier = 0.75 breathid = GAS_PLASMA disliked_food = FRUIT | CLOTH @@ -43,6 +41,18 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/plasmaman, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = null, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/plasmaman, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/bone/plasmaman, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/bone/plasmaman, + ORGAN_SLOT_APPENDIX = null, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/plasmaman, + ) + // Body temperature for Plasmen is much lower human as they can handle colder environments bodytemp_normal = (BODYTEMP_NORMAL - 40) // The minimum amount they stabilize per tick is reduced making hot areas harder to deal with diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 2fbd50247397..ecff7a9efa19 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -4,7 +4,7 @@ plural_form = "Podpeople" id = SPECIES_PODPERSON default_color = "59CE00" - species_traits = list(MUTCOLORS, EYECOLOR, HAS_FLESH, HAS_BONE) + species_traits = list(MUTCOLORS, EYECOLOR) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 01b8d009959b..d8ab4203f857 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -15,7 +15,6 @@ ) inherent_factions = list("faithless") changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - mutanteyes = /obj/item/organ/eyes/night_vision species_language_holder = /datum/language_holder/shadowpeople bodypart_overrides = list( @@ -27,6 +26,17 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/shadow, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = null, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) /datum/species/shadow/spec_life(mob/living/carbon/human/H, delta_time, times_fired) var/turf/T = H.loc diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 742031dbd1b5..069676a35afb 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -5,7 +5,7 @@ say_mod = "rattles" sexes = 0 meat = /obj/item/food/meat/slab/human/mutant/skeleton - species_traits = list(NOBLOOD, HAS_BONE, NOTRANSSTING, NOEYESPRITES, NO_DNA_COPY) + species_traits = list(NOBLOOD, NOTRANSSTING, NOEYESPRITES, NO_DNA_COPY) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, @@ -28,8 +28,6 @@ TRAIT_CAN_USE_FLIGHT_POTION, ) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/bone - mutantstomach = /obj/item/organ/stomach/bone disliked_food = NONE liked_food = GROSS | MEAT | RAW wings_icons = list("Skeleton") @@ -47,6 +45,18 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/skeleton, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = null, + ORGAN_SLOT_LUNGS = null, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/bone, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/bone, + ORGAN_SLOT_APPENDIX = null, + ORGAN_SLOT_LIVER = null, + ) + /datum/species/skeleton/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) . = ..() C.set_safe_hunger_level() diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm deleted file mode 100644 index c6d54db85295..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/species/snail - name = "\improper Snailperson" - id = SPECIES_SNAIL - offset_features = list(OFFSET_GLASSES = list(0,4)) - default_color = "336600" //vomit green - species_traits = list(MUTCOLORS, NO_UNDERWEAR, HAS_FLESH, HAS_BONE) - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NO_SLIP_ALL, - ) - - say_mod = "slurs" - coldmod = 0.5 //snails only come out when its cold and wet - burnmod = 2 - speedmod = 6 - siemens_coeff = 2 //snails are mostly water - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP - sexes = FALSE //snails are hermaphrodites - - mutanteyes = /obj/item/organ/eyes/snail - mutanttongue = /obj/item/organ/tongue/snail - exotic_blood = /datum/reagent/lube - - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/snail, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/snail, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/snail, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/snail, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/snail - ) - -/datum/species/snail/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) - . = ..() - var/obj/item/storage/backpack/bag = C.get_item_by_slot(ITEM_SLOT_BACK) - if(!istype(bag, /obj/item/storage/backpack/snail)) - if(C.dropItemToGround(bag)) //returns TRUE even if its null - C.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(C), ITEM_SLOT_BACK) - C.AddElement(/datum/element/snailcrawl) - -/datum/species/snail/on_species_loss(mob/living/carbon/C) - . = ..() - C.RemoveElement(/datum/element/snailcrawl) - var/obj/item/storage/backpack/bag = C.get_item_by_slot(ITEM_SLOT_BACK) - if(istype(bag, /obj/item/storage/backpack/snail)) - bag.emptyStorage() - C.temporarilyRemoveItemFromInventory(bag, TRUE) - qdel(bag) - -/obj/item/storage/backpack/snail - name = "snail shell" - desc = "Worn by snails as armor and storage compartment." - icon_state = "snailshell" - inhand_icon_state = "snailshell" - lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, FIRE = 0, ACID = 50) - max_integrity = 200 - resistance_flags = FIRE_PROOF | ACID_PROOF - supports_variations_flags = NONE - -/obj/item/storage/backpack/snail/dropped(mob/user, silent) - . = ..() - emptyStorage() - if(!QDELETED(src)) - qdel(src) - -/obj/item/storage/backpack/snail/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, "snailshell") diff --git a/code/modules/mob/living/carbon/human/species_types/teshari.dm b/code/modules/mob/living/carbon/human/species_types/teshari.dm index ee9ab864aabc..f8eb1beec1e0 100644 --- a/code/modules/mob/living/carbon/human/species_types/teshari.dm +++ b/code/modules/mob/living/carbon/human/species_types/teshari.dm @@ -2,7 +2,7 @@ name = "\improper Teshari" plural_form = "Teshari" id = SPECIES_TESHARI - species_traits = list(MUTCOLORS, MUTCOLORS2, MUTCOLORS3, EYECOLOR, NO_UNDERWEAR, HAS_FLESH, HAS_BONE, HAIRCOLOR, FACEHAIRCOLOR) + species_traits = list(MUTCOLORS, EYECOLOR, NO_UNDERWEAR, HAIRCOLOR, FACEHAIRCOLOR) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT species_language_holder = /datum/language_holder/teshari species_eye_path = 'icons/mob/species/teshari/eyes.dmi' @@ -38,7 +38,6 @@ /obj/item/organ/teshari_body_feathers = "Plain", /obj/item/organ/tail/teshari = "Default" ) - mutantlungs = /obj/item/organ/lungs/teshari bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/teshari, @@ -56,6 +55,18 @@ BODY_ZONE_R_LEG= /obj/item/bodypart/leg/right/robot/surplus/teshari, ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/teshari, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + #define TESH_BODY_COLOR "#DEB887" // Also in code\modules\client\preferences\species_features\teshari.dm #define TESH_FEATHER_COLOR "#996633" diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index fddc9b7004c1..9fdd3f1f8245 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -14,8 +14,6 @@ FACEHAIR, LIPS, DRINKSBLOOD, - HAS_FLESH, - HAS_BONE, BLOOD_CLANS, HAIRCOLOR, FACEHAIRCOLOR, @@ -31,13 +29,24 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN exotic_bloodtype = "U" use_skintones = TRUE - mutantheart = /obj/item/organ/heart/vampire - mutanttongue = /obj/item/organ/tongue/vampire + examine_limb_id = SPECIES_HUMAN skinned_type = /obj/item/stack/sheet/animalhide/human ///some starter text sent to the vampire initially, because vampires have shit to do to stay alive var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/vampire, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/vampire, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + /datum/species/vampire/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index 4b0fb5a0d967..b08d325bdddb 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -9,11 +9,7 @@ species_eye_path = 'icons/mob/species/vox/eyes.dmi' species_traits = list( MUTCOLORS, - MUTCOLORS2, - MUTCOLORS3, EYECOLOR, - HAS_FLESH, - HAS_BONE, HAIRCOLOR, FACEHAIRCOLOR, NO_UNDERWEAR, @@ -25,11 +21,7 @@ TRAIT_CAN_USE_FLIGHT_POTION, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID - mutantlungs = /obj/item/organ/lungs/vox - mutantbrain = /obj/item/organ/brain/vox - mutantheart = /obj/item/organ/heart/vox - mutanteyes = /obj/item/organ/eyes/vox - mutantliver = /obj/item/organ/liver/vox + breathid = "n2" cosmetic_organs = list( /obj/item/organ/snout/vox = "Vox Snout", @@ -54,6 +46,18 @@ robotic_bodyparts = null + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/vox, + ORGAN_SLOT_HEART = /obj/item/organ/heart/vox, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/vox, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/vox, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/vox, + ) + #define VOX_BODY_COLOR "#C4DB1A" // Also in code\modules\client\preferences\species_features\vox.dm #define VOX_SNOUT_COLOR "#E5C04B" diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index b703fee5d088..ee3d6ea3ac85 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -7,7 +7,7 @@ say_mod = "moans" sexes = 0 meat = /obj/item/food/meat/slab/human/mutant/zombie - species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING, HAS_FLESH, HAS_BONE) + species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING) inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, @@ -27,7 +27,6 @@ TRAIT_NOCLONELOSS, ) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') disliked_food = NONE liked_food = GROSS | MEAT | RAW @@ -45,6 +44,18 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie ) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/zombie, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + /// Zombies do not stabilize body temperature they are the walking dead and are cold blooded /datum/species/zombie/body_temperature_core(mob/living/carbon/human/humi, delta_time, times_fired) return @@ -83,13 +94,24 @@ mutanthands = /obj/item/zombie_hand armor = 20 // 120 damage to KO a zombie, which kills it speedmod = 1.6 - mutanteyes = /obj/item/organ/eyes/night_vision/zombie changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN /// The rate the zombies regenerate at var/heal_rate = 0.5 /// The cooldown before the zombie can start regenerating COOLDOWN_DECLARE(regen_cooldown) + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/zombie, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/zombie, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ) + /datum/species/zombie/infectious/check_roundstart_eligible() return FALSE @@ -136,23 +158,4 @@ infection = new() infection.Insert(C) -// Your skin falls off -/datum/species/human/krokodil_addict - name = "\improper Human" - id = SPECIES_ZOMBIE_KROKODIL - examine_limb_id = SPECIES_HUMAN - sexes = 0 - mutanttongue = /obj/item/organ/tongue/zombie - changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN - - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/zombie, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/zombie, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/zombie, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie - ) - - #undef REGENERATION_DELAY diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index de7d65930d4a..d502c6c57e1d 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -666,18 +666,13 @@ All effects don't start immediately, but rather get worse over time; the rate is ///////////////////////////////////// /mob/living/carbon/proc/can_heartattack() - if(!needs_heart() || HAS_TRAIT(src, TRAIT_STABLEHEART)) + if(!needs_organ(ORGAN_SLOT_HEART) || HAS_TRAIT(src, TRAIT_STABLEHEART)) return FALSE var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) if(!heart || (heart.organ_flags & ORGAN_DEAD)) return FALSE return TRUE -/mob/living/carbon/proc/needs_heart() - if(dna && dna.species && (NOBLOOD in dna.species.species_traits)) //not all carbons have species! - return FALSE - return TRUE - /* * The mob is having a heart attack * @@ -689,7 +684,7 @@ All effects don't start immediately, but rather get worse over time; the rate is var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) if(istype(heart) && heart.is_working()) return FALSE - else if(!needs_heart()) + else if(!needs_organ(ORGAN_SLOT_HEART)) return FALSE return TRUE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 967007e402c9..4f10c7daa523 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -762,7 +762,9 @@ adjustOxyLoss(-20, TRUE) adjustToxLoss(-20, TRUE, TRUE) //slime friendly updatehealth() - grab_ghost() + + grab_ghost() + if(full_heal) fully_heal(admin_revive = admin_revive) if(stat == DEAD && can_be_revived()) //in some cases you can't revive (e.g. no brain) @@ -2356,3 +2358,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) . += 60 if(HAS_TRAIT(src, TRAIT_CLUMSY)) . += 25 + +/mob/living/proc/needs_organ(slot) + return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index dc4f2c0f7d42..8d6277049466 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -141,8 +141,6 @@ if(H.mind) if(istype(H.mind.martial_art, /datum/martial_art/the_sleeping_carp)) . = TRUE - if (is_species(H, /datum/species/golem/sand)) - . = TRUE /mob/living/simple_animal/hostile/megafauna/colossus/devour(mob/living/L) visible_message(span_colossus("[src] crushes [L]!")) diff --git a/code/modules/mob_spawn/corpses/mining_corpses.dm b/code/modules/mob_spawn/corpses/mining_corpses.dm index 1e0e06a7304c..513a85236f69 100644 --- a/code/modules/mob_spawn/corpses/mining_corpses.dm +++ b/code/modules/mob_spawn/corpses/mining_corpses.dm @@ -47,8 +47,6 @@ outfit = /datum/outfit/consumed_ashwalker if("Clown") outfit = /datum/outfit/consumed_clown - if("Golem") - outfit = /datum/outfit/consumed_golem if("Dame") outfit = /datum/outfit/consumed_dame if("Operative") @@ -156,22 +154,6 @@ if(drop_a_pie_cannon) new /obj/item/pneumatic_cannon/pie(get_turf(clown)) -/datum/outfit/consumed_golem - name = "Legion-Consumed Golem" - //Oops! All randomized! - -/datum/outfit/consumed_golem/pre_equip(mob/living/carbon/human/golem, visualsOnly = FALSE) - if(!visualsOnly) - golem.set_species(pick(/datum/species/golem/adamantine, /datum/species/golem/plasma, /datum/species/golem/diamond, /datum/species/golem/gold, /datum/species/golem/silver, /datum/species/golem/plasteel, /datum/species/golem/titanium, /datum/species/golem/plastitanium)) - if(prob(30)) - glasses = pick_weight(list(/obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/hud/health = 2, /obj/item/clothing/glasses/hud/diagnostic =2, /obj/item/clothing/glasses/science = 2, /obj/item/clothing/glasses/welding = 2, /obj/item/clothing/glasses/night = 1)) - if(prob(10) && !visualsOnly) //visualsonly = not a golem = can't put things in the belt slot without a jumpsuit - belt = pick(list(/obj/item/storage/belt/mining/vendor, /obj/item/storage/belt/utility/full)) - if(prob(50)) - neck = /obj/item/bedsheet/rd/royal_cape - if(prob(10) && !visualsOnly) //visualsonly = not a golem = can't put things in the pockets without a jumpsuit - l_pocket = pick(list(/obj/item/crowbar/power, /obj/item/screwdriver/power, /obj/item/weldingtool/experimental)) - //this is so pointlessly gendered but whatever bro i'm here to refactor not judge /datum/outfit/consumed_dame name = "Legion-Consumed Dame" diff --git a/code/modules/mob_spawn/ghost_roles/golem_roles.dm b/code/modules/mob_spawn/ghost_roles/golem_roles.dm deleted file mode 100644 index 91aadfe4c290..000000000000 --- a/code/modules/mob_spawn/ghost_roles/golem_roles.dm +++ /dev/null @@ -1,108 +0,0 @@ - -//reserved file just for golems since they're such a big thing, available on lavaland and from the station - -//Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom. -/obj/effect/mob_spawn/ghost_role/human/golem - name = "inert free golem shell" - desc = "A humanoid shape, empty, lifeless, and full of potential." - icon = 'icons/obj/wizard.dmi' - icon_state = "construct" - mob_species = /datum/species/golem - anchored = FALSE - move_resist = MOVE_FORCE_NORMAL - density = FALSE - prompt_name = "a free golem" - you_are_text = "You are a Free Golem. Your family worships The Liberator." - flavour_text = "In his infinite and divine wisdom, he set your clan free to travel the stars with a single declaration: \"Yeah go do whatever.\"" - var/has_owner = FALSE - var/can_transfer = TRUE //if golems can switch bodies to this new shell - var/mob/living/owner = null //golem's owner if it has one - -/obj/effect/mob_spawn/ghost_role/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) - if(species) //spawners list uses object name to register so this goes before ..() - name += " ([initial(species.prefix)])" - mob_species = species - . = ..() - var/area/init_area = get_area(src) - if(!mapload && init_area) - notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [init_area.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) - if(has_owner && creator) - you_are_text = "You are a golem." - flavour_text = "You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools." - important_text = "Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." - owner = creator - - -/obj/effect/mob_spawn/ghost_role/human/golem/name_mob(mob/living/spawned_mob, forced_name) - if(!forced_name) - var/datum/species/golem/golem_species = mob_species - if(has_owner) - forced_name = "[initial(golem_species.prefix)] Golem ([rand(1,999)])" - else - golem_species = new mob_species - forced_name = golem_species.random_name() - . = ..() - -/obj/effect/mob_spawn/ghost_role/human/golem/special(mob/living/new_spawn, mob/mob_possessor) - . = ..() - var/datum/species/golem/X = mob_species - to_chat(new_spawn, "[initial(X.info_text)]") - if(!owner) - var/policy = get_policy(ROLE_FREE_GOLEM) - if (policy) - to_chat(new_spawn, policy) - to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") - try_keep_home(new_spawn) - else - new_spawn.mind.enslave_mind_to_creator(owner) - log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") - log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") - if(ishuman(new_spawn)) - var/mob/living/carbon/human/H = new_spawn - if(has_owner) - var/datum/species/golem/G = H.dna.species - G.owner = owner - H.set_cloned_appearance() - if(has_owner && new_spawn.mind) - new_spawn.mind.set_assigned_role(SSjob.GetJobType(/datum/job/servant_golem)) - else - new_spawn.mind.set_assigned_role(SSjob.GetJobType(/datum/job/free_golem)) - -/obj/effect/mob_spawn/ghost_role/human/golem/proc/try_keep_home(mob/new_spawn) - var/static/list/allowed_areas = typecacheof(list(/area/icemoon, /area/lavaland, /area/ruin)) + typecacheof(/area/misc/survivalpod) - - ADD_TRAIT(new_spawn, TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, INNATE_TRAIT) - new_spawn.AddComponent(/datum/component/hazard_area, area_whitelist = allowed_areas) - -/obj/effect/mob_spawn/ghost_role/human/golem/attack_hand(mob/user, list/modifiers) - . = ..() - if(.) - return - if(isgolem(user) && can_transfer) - var/mob/living/carbon/human/H = user - var/transfer_choice = tgui_alert(usr, "Transfer your soul to [src]? (Warning, your old body will die!)",,list("Yes","No")) - if(transfer_choice != "Yes") - return - if(QDELETED(src) || uses <= 0) - return - log_game("[key_name(H)] golem-swapped into [src]") - H.visible_message(span_notice("A faint light leaves [H], moving to [src] and animating it!"),span_notice("You leave your old body behind, and transfer into [src]!")) - show_flavor = FALSE - var/mob/living/carbon/human/newgolem = create(newname = H.real_name) - H.transfer_quirk_datums(newgolem) - H.mind.transfer_to(newgolem) - H.death() - return - -/obj/effect/mob_spawn/ghost_role/human/golem/servant - has_owner = TRUE - name = "inert servant golem shell" - prompt_name = "servant golem" - - -/obj/effect/mob_spawn/ghost_role/human/golem/adamantine - name = "dust-caked free golem shell" - desc = "A humanoid shape, empty, lifeless, and full of potential." - prompt_name = "free golem" - can_transfer = FALSE - mob_species = /datum/species/golem/adamantine diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index fcd4596242e5..da949c73599a 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -107,17 +107,6 @@ if(prob(5)) to_chat(C, span_notice("[high_message]")) - if(current_cycle == 35) - if(!istype(C.dna.species, /datum/species/human/krokodil_addict)) - to_chat(C, span_userdanger("Your skin falls off easily!")) - var/mob/living/carbon/human/H = C - H.facial_hairstyle = "Shaved" - H.hairstyle = "Bald" - H.update_body_parts() // makes you loose hair as well - C.set_species(/datum/species/human/krokodil_addict) - C.adjustBruteLoss(50, 0) // holy shit your skin just FELL THE FUCK OFF - return TRUE - /datum/reagent/drug/krokodil/overdose_process(mob/living/carbon/C) C.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.25, updating_health = FALSE) C.adjustToxLoss(0.25, 0) diff --git a/code/modules/reagents/chemistry/reagents/mutation_toxins.dm b/code/modules/reagents/chemistry/reagents/mutation_toxins.dm index efd1bb211645..3ff5b8c04206 100644 --- a/code/modules/reagents/chemistry/reagents/mutation_toxins.dm +++ b/code/modules/reagents/chemistry/reagents/mutation_toxins.dm @@ -107,26 +107,6 @@ to_chat(H, span_warning("You've become \a [initial(species_type.name)]!")) return TRUE -/datum/reagent/mutationtoxin/golem - name = "Golem Mutation Toxin" - description = "A crystal toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/golem - taste_description = "rocks" - chemical_flags = REAGENT_NO_RANDOM_RECIPE - -/datum/reagent/mutationtoxin/golem/on_mob_metabolize(mob/living/carbon/C, class) - if(class != CHEM_BLOOD) - return - var/static/list/random_golem_types - random_golem_types = subtypesof(/datum/species/golem) - type - for(var/i in random_golem_types) - var/datum/species/golem/golem = i - if(!initial(golem.random_eligible)) - random_golem_types -= golem - race = pick(random_golem_types) - ..() - /datum/reagent/mutationtoxin/abductor name = "Abductor Mutation Toxin" description = "An alien toxin." diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 5fb041ea5635..8e70163b2b69 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -423,17 +423,6 @@ new /obj/item/slimepotion/slime/renaming(holder.my_atom.drop_location()) ..() - -//Adamantine -/datum/chemical_reaction/slime/adamantine - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/adamantine - required_other = TRUE - -/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) - ..() - //Bluespace /datum/chemical_reaction/slime/slimefloor2 required_reagents = list(/datum/reagent/blood = 1) @@ -455,15 +444,6 @@ BC.visible_message(span_notice("The [BC.name] appears out of thin air!")) ..() -/datum/chemical_reaction/slime/slimeradio - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/bluespace - required_other = TRUE - -/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom)) - ..() - //Cerulean /datum/chemical_reaction/slime/slimepsteroid2 required_reagents = list(/datum/reagent/toxin/plasma = 1) diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index b1afc0b74589..02d5819265fa 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -129,19 +129,3 @@ Slimecrossing Armor if(at_peace_check(usr)) return return ..() - -/obj/item/clothing/suit/armor/heavy/adamantine - name = "adamantine armor" - desc = "A full suit of adamantine plate armor. Impressively resistant to damage, but weighs about as much as you do." - icon_state = "adamsuit" - inhand_icon_state = "adamsuit" - flags_inv = NONE - obj_flags = IMMUTABLE_SLOW - slowdown = 4 - var/hit_reflect_chance = 40 - -/obj/item/clothing/suit/armor/heavy/adamantine/IsReflect(def_zone) - if(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) && prob(hit_reflect_chance)) - return TRUE - else - return FALSE diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 06344930afd1..2f0872a673e0 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -28,35 +28,6 @@ owner.visible_message(span_notice("[owner] stops glowing, the rainbow light fading away."), span_warning("You no longer feel protected...")) -/atom/movable/screen/alert/status_effect/slimeskin - name = "Adamantine Slimeskin" - desc = "You are covered in a thick, non-neutonian gel." - icon_state = "slime_stoneskin" - -/datum/status_effect/slimeskin - id = "slimeskin" - duration = 300 - alert_type = /atom/movable/screen/alert/status_effect/slimeskin - var/originalcolor - -/datum/status_effect/slimeskin/on_apply() - originalcolor = owner.color - owner.color = "#3070CC" - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance += 10 - owner.visible_message(span_warning("[owner] is suddenly covered in a strange, blue-ish gel!"), - span_notice("You are covered in a thick, rubbery gel.")) - return ..() - -/datum/status_effect/slimeskin/on_remove() - owner.color = originalcolor - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance -= 10 - owner.visible_message(span_warning("[owner]'s gel coating liquefies and dissolves away."), - span_notice("Your gel second-skin dissolves!")) - /datum/status_effect/slimerecall id = "slime_recall" duration = -1 //Will be removed by the extract. @@ -414,22 +385,6 @@ /datum/status_effect/plur/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, "peacecookie") -/datum/status_effect/adamantinecookie - id = "adamantinecookie" - status_type = STATUS_EFFECT_REFRESH - alert_type = null - duration = 100 - -/datum/status_effect/adamantinecookie/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.burn_mod *= 0.9 - return ..() - -/datum/status_effect/adamantinecookie/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.burn_mod /= 0.9 /////////////////////////////////////////////////////// //////////////////STABILIZED EXTRACTS////////////////// @@ -995,13 +950,6 @@ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink) REMOVE_TRAIT(owner, TRAIT_PACIFISM, STABILIZED_LIGHT_PINK_TRAIT) -/datum/status_effect/stabilized/adamantine - id = "stabilizedadamantine" - colour = "adamantine" - -/datum/status_effect/stabilized/adamantine/get_examine_text() - return span_warning("[owner.p_they(TRUE)] [owner.p_have()] strange metallic coating on [owner.p_their()] skin.") - /datum/status_effect/stabilized/gold id = "stabilizedgold" colour = "gold" @@ -1027,17 +975,6 @@ if(familiar) qdel(familiar) -/datum/status_effect/stabilized/adamantine/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance += 5 - return ..() - -/datum/status_effect/stabilized/adamantine/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance -= 5 - /datum/status_effect/stabilized/rainbow id = "stabilizedrainbow" colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 88914b34248a..048d46fd8324 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -53,28 +53,6 @@ Slimecrossing Weapons attack_verb_simple = string_list(list("irradiate", "mutate", "malign")) return ..() -//Adamantine shield - Chilling Adamantine -/obj/item/shield/adamantineshield - name = "adamantine shield" - desc = "A gigantic shield made of solid adamantium." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "adamshield" - inhand_icon_state = "adamshield" - w_class = WEIGHT_CLASS_HUGE - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, FIRE = 80, ACID = 70) - slot_flags = ITEM_SLOT_BACK - block_chance = 75 - force = 0 - throw_range = 1 //How far do you think you're gonna throw a solid crystalline shield...? - throw_speed = 2 - attack_verb_continuous = list("bashes", "pounds", "slams") - attack_verb_simple = list("bash", "pound", "slam") - item_flags = SLOWS_WHILE_IN_HAND - -/obj/item/shield/adamantineshield/Initialize(mapload) - . = ..() - AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15) - //Bloodchiller - Chilling Green /obj/item/gun/magic/bloodchill name = "blood chiller" diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 9b44b864ba6f..c62bb92b04c6 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -295,15 +295,6 @@ Burning extracts: C.reagents.add_reagent(/datum/reagent/medicine/haloperidol, 10) ..() -/obj/item/slimecross/burning/adamantine - colour = "adamantine" - effect_desc = "Creates a mighty adamantine shield." - -/obj/item/slimecross/burning/adamantine/do_effect(mob/user) - user.visible_message(span_notice("[src] crystallizes into a large shield!")) - new /obj/item/shield/adamantineshield(get_turf(user)) - ..() - /obj/item/slimecross/burning/rainbow colour = "rainbow" effect_desc = "Creates the Rainbow Knife, a kitchen knife that deals random types of damage." diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index cdcdaa53bb5f..5d6bdecd539a 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -258,15 +258,6 @@ Charged extracts: user.visible_message(span_notice("[src] distills into a potion!")) ..() -/obj/item/slimecross/charged/adamantine - colour = "adamantine" - effect_desc = "Creates a completed golem shell." - -/obj/item/slimecross/charged/adamantine/do_effect(mob/user) - user.visible_message(span_notice("[src] produces a fully formed golem shell!")) - new /obj/effect/mob_spawn/ghost_role/human/golem/servant(get_turf(src), /datum/species/golem/adamantine, user) - ..() - /obj/item/slimecross/charged/rainbow colour = "rainbow" effect_desc = "Produces three living slimes of random colors." diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 899e3731589a..c33905ca8f4d 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -294,21 +294,7 @@ Chilling extracts: /obj/item/slimecross/chilling/black colour = "black" - effect_desc = "Transforms the user into a random type of golem." - -/obj/item/slimecross/chilling/black/do_effect(mob/user) - if(ishuman(user)) - user.visible_message(span_notice("[src] crystallizes along [user]'s skin, turning into metallic scales!")) - var/mob/living/carbon/human/H = user - - var/static/list/random_golem_types - random_golem_types = subtypesof(/datum/species/golem) - type - - for(var/datum/species/golem/golem as anything in random_golem_types) - if(!initial(golem.random_eligible)) - random_golem_types -= golem - H.set_species(pick(random_golem_types)) - ..() + effect_desc = "Inert. One must wonder what this once did..." /obj/item/slimecross/chilling/lightpink colour = "light pink" @@ -319,15 +305,6 @@ Chilling extracts: new /obj/item/clothing/head/peaceflower(get_turf(user)) ..() -/obj/item/slimecross/chilling/adamantine - colour = "adamantine" - effect_desc = "Solidifies into a set of adamantine armor." - -/obj/item/slimecross/chilling/adamantine/do_effect(mob/user) - user.visible_message(span_notice("[src] creaks and breaks as it shifts into a heavy set of armor!")) - new /obj/item/clothing/suit/armor/heavy/adamantine(get_turf(user)) - ..() - /obj/item/slimecross/chilling/rainbow colour = "rainbow" effect_desc = "Makes an unpassable wall in every door in the area." diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index 62c185846619..1821914c6dcf 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -434,20 +434,6 @@ Consuming extracts: /obj/item/slime_cookie/lightpink/do_effect(mob/living/M, mob/user) M.apply_status_effect(/datum/status_effect/peacecookie) -/obj/item/slimecross/consuming/adamantine - colour = "adamantine" - effect_desc = "Creates a slime cookie that increases the target's resistance to burn damage." - cookietype = /obj/item/slime_cookie/adamantine - -/obj/item/slime_cookie/adamantine - name = "crystal cookie" - desc = "A translucent rock candy in the shape of a cookie. Surprisingly chewy." - icon_state = "adamantine" - taste = "crystalline sugar and metal" - -/obj/item/slime_cookie/adamantine/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/adamantinecookie) - /obj/item/slimecross/consuming/rainbow colour = "rainbow" effect_desc = "Creates a slime cookie that has the effect of a random cookie." diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index ab0907446958..048bcd385e84 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -193,12 +193,6 @@ Industrial extracts: plasmarequired = 3 itempath = /obj/item/storage/fancy/heart_box -/obj/item/slimecross/industrial/adamantine - colour = "adamantine" - effect_desc = "Produces sheets of adamantine." - plasmarequired = 10 - itempath = /obj/item/stack/sheet/mineral/adamantine - /obj/item/slimecross/industrial/rainbow colour = "rainbow" effect_desc = "Produces random slime extracts." diff --git a/code/modules/research/xenobiology/crossbreeding/prismatic.dm b/code/modules/research/xenobiology/crossbreeding/prismatic.dm index 9cfc4542d526..0f20f9ef5d5b 100644 --- a/code/modules/research/xenobiology/crossbreeding/prismatic.dm +++ b/code/modules/research/xenobiology/crossbreeding/prismatic.dm @@ -106,10 +106,6 @@ Prismatic extracts: paintcolor = "#FFB6C1" colour = "light pink" -/obj/item/slimecross/prismatic/adamantine - paintcolor = "#008B8B" - colour = "adamantine" - /obj/item/slimecross/prismatic/rainbow paintcolor = "#FFFFFF" colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm index 5f7e2b2e0fc7..467b3fa01a65 100644 --- a/code/modules/research/xenobiology/crossbreeding/recurring.dm +++ b/code/modules/research/xenobiology/crossbreeding/recurring.dm @@ -127,11 +127,6 @@ Recurring extracts: extract_type = /obj/item/slime_extract/lightpink colour = "light pink" -/obj/item/slimecross/recurring/adamantine - extract_type = /obj/item/slime_extract/adamantine - colour = "adamantine" - max_cooldown = 20 - /obj/item/slimecross/recurring/rainbow extract_type = /obj/item/slime_extract/rainbow colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index 77ed699dc876..c8a6052159d2 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -266,13 +266,6 @@ Regenerative extracts: U.revive(full_heal = TRUE, admin_revive = FALSE) to_chat(U, span_notice("Some of the milky goo sprays onto you, as well!")) -/obj/item/slimecross/regenerative/adamantine - colour = "adamantine" - effect_desc = "Fully heals the target and boosts their armor." - -/obj/item/slimecross/regenerative/adamantine/core_effect(mob/living/target, mob/user) //WIP - Find out why this doesn't work. - target.apply_status_effect(/datum/status_effect/slimeskin) - /obj/item/slimecross/regenerative/rainbow colour = "rainbow" effect_desc = "Fully heals the target and temporarily makes them immortal, but pacifistic." diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm index 8fe45940a93e..dbe2ea572abc 100644 --- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm +++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm @@ -138,10 +138,6 @@ Reproductive extracts: extract_type = /obj/item/slime_extract/lightpink colour = "light pink" -/obj/item/slimecross/reproductive/adamantine - extract_type = /obj/item/slime_extract/adamantine - colour = "adamantine" - /obj/item/slimecross/reproductive/rainbow extract_type = /obj/item/slime_extract/rainbow colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm index ab6f9381086a..4aaed120bbf3 100644 --- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm +++ b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm @@ -142,10 +142,6 @@ Self-sustaining extracts: extract_type = /obj/item/slime_extract/lightpink colour = "light pink" -/obj/item/slimecross/selfsustaining/adamantine - extract_type = /obj/item/slime_extract/adamantine - colour = "adamantine" - /obj/item/slimecross/selfsustaining/rainbow extract_type = /obj/item/slime_extract/rainbow colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm index b8c5a70375e7..b6b99f84b87a 100644 --- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm +++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm @@ -188,10 +188,6 @@ Stabilized extracts: colour = "light pink" effect_desc = "The owner moves at high speeds while holding this extract, also stabilizes anyone in critical condition around you using Epinephrine." -/obj/item/slimecross/stabilized/adamantine - colour = "adamantine" - effect_desc = "Owner gains a slight boost in damage resistance to all types." - /obj/item/slimecross/stabilized/rainbow colour = "rainbow" effect_desc = "Accepts a regenerative extract and automatically uses it if the owner enters a critical condition." diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index df71160b7ee9..086c9f3b33a3 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -441,35 +441,6 @@ return to_chat(user, span_notice("You stop feeding [src], and the feeling passes.")) -/obj/item/slime_extract/adamantine - name = "adamantine slime extract" - icon_state = "adamantine slime extract" - effectmod = "crystalline" - activate_reagents = list(/datum/reagent/toxin/plasma) - -/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - if(species.armor > 0) - to_chat(user, span_warning("Your skin is already hardened!")) - return - to_chat(user, span_notice("You feel your skin harden and become more resistant.")) - species.armor += 25 - addtimer(CALLBACK(src, PROC_REF(reset_armor), species), 1200) - return 450 - - if(SLIME_ACTIVATE_MAJOR) - to_chat(user, span_warning("You feel your body rapidly crystallizing...")) - if(do_after(user, user, 120)) - to_chat(user, span_warning("You feel solid.")) - user.set_species(pick(/datum/species/golem/adamantine)) - return - to_chat(user, span_notice("You stop feeding [src], and your body returns to its slimelike state.")) - -/obj/item/slime_extract/adamantine/proc/reset_armor(datum/species/jelly/luminescent/species) - if(istype(species)) - species.armor -= 25 - /obj/item/slime_extract/bluespace name = "bluespace slime extract" icon_state = "bluespace slime extract" @@ -981,28 +952,6 @@ qdel(src) -/obj/item/slimepotion/slime/slimeradio - name = "bluespace radio potion" - desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves." - icon = 'icons/obj/chemical.dmi' - icon_state = "potgrey" - -/obj/item/slimepotion/slime/slimeradio/attack(mob/living/M, mob/user) - if(!ismob(M)) - return - if(!isanimal(M)) - to_chat(user, span_warning("[M] is too complex for the potion!")) - return - if(M.stat) - to_chat(user, span_warning("[M] is dead!")) - return - - to_chat(user, span_notice("You feed the potion to [M].")) - to_chat(M, span_notice("Your mind tingles as you are fed the potion. You can hear radio waves now!")) - var/obj/item/implant/radio/slime/imp = new(src) - imp.implant(M, user, BODY_ZONE_CHEST) - qdel(src) - ///Definitions for slime products that don't have anywhere else to go (Floor tiles, blueprints). /obj/item/stack/tile/bluespace diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 2fc192f9d9a8..393463bb4ac3 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -348,342 +348,3 @@ unarmed_damage_low = 9 unarmed_damage_high = 21 unarmed_stun_threshold = 14 - -///GOLEMS (i hate xenobio SO FUCKING MUCH) (from 2022: Yeah I fucking feel your pain brother) -/obj/item/bodypart/head/golem - limb_id = SPECIES_GOLEM - is_dimorphic = FALSE - icon_dmg_overlay = null - - bodypart_flags = BP_NO_PAIN | STOCK_BP_FLAGS_HEAD & ~(BP_HAS_BLOOD|BP_HAS_BONES|BP_HAS_TENDON|BP_HAS_ARTERY) - -/obj/item/bodypart/chest/golem - limb_id = SPECIES_GOLEM - is_dimorphic = TRUE - icon_dmg_overlay = null - - bodypart_flags = BP_NO_PAIN | STOCK_BP_FLAGS_CHEST & ~(BP_HAS_BLOOD|BP_HAS_BONES|BP_HAS_TENDON|BP_HAS_ARTERY) - -/obj/item/bodypart/arm/left/golem - limb_id = SPECIES_GOLEM - icon_dmg_overlay = null - bodypart_traits = list(TRAIT_CHUNKYFINGERS) - unarmed_damage_low = 5 // I'd like to take the moment that maintaining all of these random ass golem speciese is hell and oranges was right - unarmed_damage_high = 14 - unarmed_stun_threshold = 11 - - bodypart_flags = BP_NO_PAIN | STOCK_BP_FLAGS_ARMS & ~(BP_HAS_BLOOD|BP_HAS_BONES|BP_HAS_TENDON|BP_HAS_ARTERY) - -/obj/item/bodypart/arm/right/golem - limb_id = SPECIES_GOLEM - icon_dmg_overlay = null - bodypart_traits = list(TRAIT_CHUNKYFINGERS) - unarmed_damage_low = 5 - unarmed_damage_high = 14 - unarmed_stun_threshold = 11 - - bodypart_flags = BP_NO_PAIN | STOCK_BP_FLAGS_ARMS & ~(BP_HAS_BLOOD|BP_HAS_BONES|BP_HAS_TENDON|BP_HAS_ARTERY) - -/obj/item/bodypart/leg/left/golem - limb_id = SPECIES_GOLEM - icon_dmg_overlay = null - unarmed_damage_low = 7 - unarmed_damage_high = 21 - unarmed_stun_threshold = 11 - - bodypart_flags = BP_NO_PAIN | STOCK_BP_FLAGS_LEGS & ~(BP_HAS_BLOOD|BP_HAS_BONES|BP_HAS_TENDON|BP_HAS_ARTERY) - -/obj/item/bodypart/leg/right/golem - limb_id = SPECIES_GOLEM - icon_dmg_overlay = null - unarmed_damage_low = 7 - unarmed_damage_high = 21 - unarmed_stun_threshold = 11 - - bodypart_flags = BP_NO_PAIN | STOCK_BP_FLAGS_LEGS & ~(BP_HAS_BLOOD|BP_HAS_BONES|BP_HAS_TENDON|BP_HAS_ARTERY) - -/// -/obj/item/bodypart/head/golem/cult - limb_id = SPECIES_GOLEM_CULT - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/chest/golem/cult - limb_id = SPECIES_GOLEM_CULT - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/golem/cult - limb_id = SPECIES_GOLEM_CULT - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/right/golem/cult - limb_id = SPECIES_GOLEM_CULT - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/left/golem/cult - limb_id = SPECIES_GOLEM_CULT - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/right/golem/cult - limb_id = SPECIES_GOLEM_CULT - should_draw_greyscale = FALSE - -/// -/obj/item/bodypart/head/golem/cloth - limb_id = SPECIES_GOLEM_CLOTH - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/chest/golem/cloth - limb_id = SPECIES_GOLEM_CLOTH - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/golem/cloth - limb_id = SPECIES_GOLEM_CLOTH - should_draw_greyscale = FALSE - unarmed_damage_low = 4 - unarmed_stun_threshold = 7 - unarmed_damage_high = 8 - -/obj/item/bodypart/arm/right/golem/cloth - limb_id = SPECIES_GOLEM_CLOTH - should_draw_greyscale = FALSE - unarmed_damage_low = 4 - unarmed_stun_threshold = 7 - unarmed_damage_high = 8 - -/obj/item/bodypart/leg/left/golem/cloth - limb_id = SPECIES_GOLEM_CLOTH - should_draw_greyscale = FALSE - unarmed_damage_low = 6 - unarmed_stun_threshold = 7 - unarmed_damage_high = 12 - -/obj/item/bodypart/leg/right/golem/cloth - limb_id = SPECIES_GOLEM_CLOTH - should_draw_greyscale = FALSE - unarmed_damage_low = 6 - unarmed_stun_threshold = 7 - unarmed_damage_high = 12 - -/// -/obj/item/bodypart/head/golem/cardboard - limb_id = SPECIES_GOLEM_CARDBOARD - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/chest/golem/cardboard - limb_id = SPECIES_GOLEM_CARDBOARD - is_dimorphic = TRUE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/golem/cardboard - limb_id = SPECIES_GOLEM_CARDBOARD - should_draw_greyscale = FALSE - unarmed_attack_verb = "whip" - unarmed_attack_sound = 'sound/weapons/whip.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' - unarmed_damage_low = 4 - unarmed_stun_threshold = 7 - unarmed_damage_high = 8 - -/obj/item/bodypart/arm/right/golem/cardboard - limb_id = SPECIES_GOLEM_CARDBOARD - should_draw_greyscale = FALSE - unarmed_attack_verb = "whip" - unarmed_attack_sound = 'sound/weapons/whip.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' - unarmed_damage_low = 4 - unarmed_stun_threshold = 7 - unarmed_damage_high = 8 - -/obj/item/bodypart/leg/left/golem/cardboard - limb_id = SPECIES_GOLEM_CARDBOARD - should_draw_greyscale = FALSE - unarmed_attack_sound = 'sound/weapons/whip.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' - unarmed_damage_low = 6 - unarmed_stun_threshold = 7 - unarmed_damage_high = 12 - -/obj/item/bodypart/leg/right/golem/cardboard - limb_id = SPECIES_GOLEM_CARDBOARD - should_draw_greyscale = FALSE - unarmed_attack_sound = 'sound/weapons/whip.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' - unarmed_damage_low = 6 - unarmed_stun_threshold = 7 - unarmed_damage_high = 12 - -/// -/obj/item/bodypart/head/golem/durathread - limb_id = SPECIES_GOLEM_DURATHREAD - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/chest/golem/durathread - limb_id = SPECIES_GOLEM_DURATHREAD - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/golem/durathread - limb_id = SPECIES_GOLEM_DURATHREAD - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/right/golem/durathread - limb_id = SPECIES_GOLEM_DURATHREAD - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/left/golem/durathread - limb_id = SPECIES_GOLEM_DURATHREAD - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/right/golem/durathread - limb_id = SPECIES_GOLEM_DURATHREAD - should_draw_greyscale = FALSE - -/// -/obj/item/bodypart/head/golem/bone - limb_id = SPECIES_GOLEM_BONE - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/chest/golem/bone - limb_id = SPECIES_GOLEM_BONE - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/golem/bone - limb_id = SPECIES_GOLEM_BONE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/right/golem/bone - limb_id = SPECIES_GOLEM_BONE - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/left/golem/bone - limb_id = SPECIES_GOLEM_BONE - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/right/golem/bone - limb_id = SPECIES_GOLEM_BONE - should_draw_greyscale = FALSE - -/// -/obj/item/bodypart/head/golem/snow - limb_id = SPECIES_GOLEM_SNOW - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/chest/golem/snow - limb_id = SPECIES_GOLEM_SNOW - is_dimorphic = TRUE //WHO MADE SNOW BREASTS? - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/golem/snow - limb_id = SPECIES_GOLEM_SNOW - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/right/golem/snow - limb_id = SPECIES_GOLEM_SNOW - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/left/golem/snow - limb_id = SPECIES_GOLEM_SNOW - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/right/golem/snow - limb_id = SPECIES_GOLEM_SNOW - should_draw_greyscale = FALSE - - -/obj/item/bodypart/arm/left/golem/uranium - attack_type = BURN - unarmed_attack_verb = "burn" - unarmed_attack_sound = 'sound/weapons/sear.ogg' - unarmed_damage_low = 1 - unarmed_damage_high = 10 - unarmed_stun_threshold = 9 - -/obj/item/bodypart/arm/right/golem/uranium - attack_type = BURN - unarmed_attack_verb = "burn" - unarmed_attack_sound = 'sound/weapons/sear.ogg' - unarmed_damage_low = 1 - unarmed_damage_high = 10 - unarmed_stun_threshold = 9 - -/obj/item/bodypart/leg/left/golem/uranium - attack_type = BURN - unarmed_attack_sound = 'sound/weapons/sear.ogg' - unarmed_damage_low = 2 - unarmed_damage_high = 15 - unarmed_stun_threshold = 9 - -/obj/item/bodypart/leg/right/golem/uranium - attack_type = BURN - unarmed_attack_sound = 'sound/weapons/sear.ogg' - unarmed_damage_low = 2 - unarmed_damage_high = 15 - unarmed_stun_threshold = 9 - -/obj/item/bodypart/arm/left/golem/plasteel - unarmed_attack_verb = "smash" - unarmed_attack_effect = ATTACK_EFFECT_SMASH - unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard - unarmed_damage_low = 12 - unarmed_damage_high = 21 - unarmed_stun_threshold = 18 - -/obj/item/bodypart/arm/right/golem/plasteel - unarmed_attack_verb = "smash" - unarmed_attack_effect = ATTACK_EFFECT_SMASH - unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' - unarmed_damage_low = 12 - unarmed_damage_high = 21 - unarmed_stun_threshold = 18 - - -/obj/item/bodypart/leg/left/golem/plasteel - unarmed_attack_effect = ATTACK_EFFECT_SMASH - unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' - unarmed_damage_low = 18 - unarmed_damage_high = 32 - unarmed_stun_threshold = 18 - -/obj/item/bodypart/leg/right/golem/plasteel - unarmed_attack_effect = ATTACK_EFFECT_SMASH - unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' - unarmed_damage_low = 18 - unarmed_damage_high = 32 - unarmed_stun_threshold = 18 - -/obj/item/bodypart/arm/left/golem/bananium - unarmed_attack_verb = "honk" - unarmed_attack_sound = 'sound/items/airhorn2.ogg' - unarmed_damage_low = 0 - unarmed_damage_high = 1 - unarmed_stun_threshold = 2 //Harmless and can't stun - -/obj/item/bodypart/arm/right/golem/bananium - unarmed_attack_verb = "honk" - unarmed_attack_sound = 'sound/items/airhorn2.ogg' - unarmed_damage_low = 0 - unarmed_damage_high = 1 - unarmed_stun_threshold = 2 - -/obj/item/bodypart/leg/right/golem/bananium - unarmed_attack_verb = "honk" - unarmed_attack_sound = 'sound/items/airhorn2.ogg' - unarmed_damage_low = 0 - unarmed_damage_high = 1 - unarmed_stun_threshold = 2 - -/obj/item/bodypart/leg/left/golem/bananium - unarmed_attack_verb = "honk" - unarmed_attack_sound = 'sound/items/airhorn2.ogg' - unarmed_damage_low = 0 - unarmed_damage_high = 1 - unarmed_stun_threshold = 2 diff --git a/code/modules/surgery/machines/bodyscanner_helpers.dm b/code/modules/surgery/machines/bodyscanner_helpers.dm index 61173f460976..06ae5c71c083 100644 --- a/code/modules/surgery/machines/bodyscanner_helpers.dm +++ b/code/modules/surgery/machines/bodyscanner_helpers.dm @@ -15,7 +15,7 @@ var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) var/pulse_result - if(needs_heart()) + if(needs_organ(ORGAN_SLOT_HEART)) if(!heart) pulse_result = 0 else if(heart.organ_flags & ORGAN_SYNTHETIC) diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm index b96cbca36beb..1eeef192bd13 100644 --- a/code/modules/surgery/organs/appendix.dm +++ b/code/modules/surgery/organs/appendix.dm @@ -73,10 +73,6 @@ organ_owner.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 15, updating_health = FALSE) . = TRUE - -/obj/item/organ/appendix/get_availability(datum/species/owner_species) - return !(TRAIT_NOHUNGER in owner_species.inherent_traits) - /obj/item/organ/appendix/Remove(mob/living/carbon/organ_owner, special = FALSE) REMOVE_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) organ_owner.med_hud_set_status() diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 47589ced90e5..dbb061dac960 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -73,7 +73,7 @@ . = ..() handle_pulse() // If the owner doesn't need a heart, we don't need to do anything with it. - if(!owner.needs_heart()) + if(!owner.needs_organ(ORGAN_SLOT_HEART)) return if(pulse) handle_heartbeat() @@ -166,9 +166,6 @@ owner.playsound_local(owner, slowbeat, 55, 0, channel = CHANNEL_HEARTBEAT, pressure_affected = FALSE, use_reverb = FALSE) beat = BEAT_SLOW -/obj/item/organ/heart/get_availability(datum/species/owner_species) - return !(NOBLOOD in owner_species.species_traits) - /obj/item/organ/heart/get_scan_results(tag) . = ..() if(pulse == PULSE_NONE) @@ -209,7 +206,7 @@ . = ..() // If the owner doesn't need a heart, we don't need to do anything with it. - if(!owner.needs_heart()) + if(!owner.needs_organ(ORGAN_SLOT_HEART)) return if(. & EMP_PROTECT_SELF) diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm index 3b7e60b05843..38feda742186 100755 --- a/code/modules/surgery/organs/liver.dm +++ b/code/modules/surgery/organs/liver.dm @@ -200,9 +200,6 @@ #undef HAS_PAINFUL_TOXIN #undef LIVER_FAILURE_STAGE_SECONDS -/obj/item/organ/liver/get_availability(datum/species/species) - return !(TRAIT_NOMETABOLISM in species.inherent_traits) - /obj/item/organ/liver/plasmaman name = "reagent processing crystal" icon_state = "liver-p" diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index b04d6a0188d2..a31b303e55e6 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -363,9 +363,6 @@ if(. == high_threshold_passed && owner) owner.visible_message(span_danger("[owner] grabs at [owner.p_their()] throat, struggling for breath!"), span_userdanger("You suddenly feel like you can't breathe.")) -/obj/item/organ/lungs/get_availability(datum/species/owner_species) - return !(TRAIT_NOBREATH in owner_species.inherent_traits) - /obj/item/organ/lungs/plasmaman name = "plasma filter" desc = "A spongy rib-shaped mass for filtering plasma from the air." diff --git a/code/modules/surgery/organs/stomach/_stomach.dm b/code/modules/surgery/organs/stomach/_stomach.dm index 1d4c26dca13c..b4d019192e86 100644 --- a/code/modules/surgery/organs/stomach/_stomach.dm +++ b/code/modules/surgery/organs/stomach/_stomach.dm @@ -190,9 +190,6 @@ else human.remove_movespeed_modifier(/datum/movespeed_modifier/hunger) -/obj/item/organ/stomach/get_availability(datum/species/owner_species) - return !(NOSTOMACH in owner_species.inherent_traits) - /obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/disgusted, delta_time, times_fired) var/old_disgust = disgusted.old_disgust var/disgust = disgusted.disgust diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index cd0fd504dad2..c93f4df08c01 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -17,41 +17,6 @@ /obj/item/organ/vocal_cords/proc/handle_speech(message) //actually say the message owner.say(message, spans = spans, sanitize = FALSE) -/obj/item/organ/adamantine_resonator - visual = FALSE - name = "adamantine resonator" - desc = "Fragments of adamantine exist in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders." - zone = BODY_ZONE_HEAD - slot = ORGAN_SLOT_ADAMANTINE_RESONATOR - icon_state = "adamantine_resonator" - -/obj/item/organ/vocal_cords/adamantine - name = "adamantine vocal cords" - desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Adamantine golems use this to broadcast messages to nearby golems." - actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords) - icon_state = "adamantine_cords" - -/datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger(trigger_flags) - if(!IsAvailable()) - return - var/message = tgui_input_text(owner, "Resonate a message to all nearby golems", "Resonate") - if(!message) - return - if(QDELETED(src) || QDELETED(owner)) - return - owner.say(".x[message]") - -/obj/item/organ/vocal_cords/adamantine/handle_speech(message) - var/msg = span_resonate(span_name("[owner.real_name] resonates, \"[message]\"")) - for(var/player in GLOB.player_list) - if(iscarbon(player)) - var/mob/living/carbon/speaker = player - if(speaker.getorganslot(ORGAN_SLOT_ADAMANTINE_RESONATOR)) - to_chat(speaker, msg) - if(isobserver(player)) - var/link = FOLLOW_LINK(player, owner) - to_chat(player, "[link] [msg]") - //Colossus drop, forces the listeners to obey certain commands /obj/item/organ/vocal_cords/colossus name = "divine vocal cords" diff --git a/daedalus.dme b/daedalus.dme index 17f0e1670adc..bf5a4b9fe095 100644 --- a/daedalus.dme +++ b/daedalus.dme @@ -917,7 +917,6 @@ #include "code\datums\diseases\fake_gbs.dm" #include "code\datums\diseases\flu.dm" #include "code\datums\diseases\fluspanish.dm" -#include "code\datums\diseases\gastrolisis.dm" #include "code\datums\diseases\gbs.dm" #include "code\datums\diseases\heart_failure.dm" #include "code\datums\diseases\magnitis.dm" @@ -3493,21 +3492,17 @@ #include "code\modules\mob\living\carbon\human\monkey\monkey.dm" #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" -#include "code\modules\mob\living\carbon\human\species_types\dullahan.dm" #include "code\modules\mob\living\carbon\human\species_types\ethereal.dm" #include "code\modules\mob\living\carbon\human\species_types\flypeople.dm" -#include "code\modules\mob\living\carbon\human\species_types\golems.dm" #include "code\modules\mob\living\carbon\human\species_types\humans.dm" #include "code\modules\mob\living\carbon\human\species_types\jellypeople.dm" #include "code\modules\mob\living\carbon\human\species_types\lizardpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\monkeys.dm" #include "code\modules\mob\living\carbon\human\species_types\mothmen.dm" -#include "code\modules\mob\living\carbon\human\species_types\mushpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\plasmamen.dm" #include "code\modules\mob\living\carbon\human\species_types\podpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" -#include "code\modules\mob\living\carbon\human\species_types\snail.dm" #include "code\modules\mob\living\carbon\human\species_types\teshari.dm" #include "code\modules\mob\living\carbon\human\species_types\vampire.dm" #include "code\modules\mob\living\carbon\human\species_types\vox.dm" @@ -3716,7 +3711,6 @@ #include "code\modules\mob_spawn\corpses\species_corpses.dm" #include "code\modules\mob_spawn\ghost_roles\away_roles.dm" #include "code\modules\mob_spawn\ghost_roles\fugitive_hunter_roles.dm" -#include "code\modules\mob_spawn\ghost_roles\golem_roles.dm" #include "code\modules\mob_spawn\ghost_roles\mining_roles.dm" #include "code\modules\mob_spawn\ghost_roles\pirate_roles.dm" #include "code\modules\mob_spawn\ghost_roles\space_roles.dm"