diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index f732287cf8..4a3618e941 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -81,9 +81,6 @@ #define DNA_MUTANTTAIL_BLOCK 17 #define DNA_MUTANTWING_BLOCK 18 #define DNA_WINGCOLOR_BLOCK 19 -//#define DNA_SUBSPECIES_BLOCK 20 -//#define DNA_TAUR_BLOCK 21 //Taurs will be tails for now, easier - Pooj - #define DNA_STRUC_ENZYMES_BLOCKS 19 #define DNA_UNIQUE_ENZYMES_LEN 32 @@ -128,9 +125,9 @@ #define EASYLIMBATTACHMENT 23 #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) -#define MUTCOLORS2 26 -#define MUTCOLORS3 27 +#define NO_UNDERWEAR 26 +#define MUTCOLORS2 27 +#define MUTCOLORS3 28 //citadel code -#define NOAROUSAL 28//Stops all arousal effects -#define NOGENITALS 29//Cannot create, use, or otherwise have genitals -//#define SUBSPECIES 28 \ No newline at end of file +#define NOAROUSAL 29//Stops all arousal effects +#define NOGENITALS 30//Cannot create, use, or otherwise have genitals \ No newline at end of file diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index 0b75d86905..0715867fe6 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -13,16 +13,16 @@ /datum/wires/explosive/c4 - holder_type = /obj/item/weapon/grenade/plastic/c4 + holder_type = /obj/item/weapon/grenade/plastic/c4 randomize = TRUE //Same behaviour since no wire actually disarms it /datum/wires/explosive/c4/interactable(mob/user) - var/obj/item/weapon/grenade/plastic/c4/P = holder + var/obj/item/weapon/grenade/plastic/c4/P = holder if(P.open_panel) return TRUE /datum/wires/explosive/c4/explode() - var/obj/item/weapon/grenade/plastic/c4/P = holder + var/obj/item/weapon/grenade/plastic/c4/P = holder P.explode() diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 6cb89ecaf3..14e4f5a01c 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -118,9 +118,9 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ var/wetness = 30 //Reduced when exposed to high temperautres var/drying_threshold_temperature = 500 //Kelvin to start drying -/* - * Leather SHeet - */ +/* + * Leather SHeet + */ /obj/item/stack/sheet/leather name = "leather" desc = "The by-product of mob grinding." @@ -128,24 +128,24 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ icon_state = "sheet-leather" origin_tech = "materials=2" -GLOBAL_LIST_INIT(leather_recipes, list ( \ - new/datum/stack_recipe("wallet", /obj/item/weapon/storage/wallet, 1), \ - new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2), \ - new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3), \ - new/datum/stack_recipe("toolbelt", /obj/item/weapon/storage/belt/utility, 4), \ - new/datum/stack_recipe("leather satchel", /obj/item/weapon/storage/backpack/satchel, 5), \ - new/datum/stack_recipe("bandolier", /obj/item/weapon/storage/belt/bandolier, 5), \ - new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \ - new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \ -)) - -/obj/item/stack/sheet/leather/Initialize(mapload, new_amount, merge = TRUE) - recipes = GLOB.leather_recipes - return ..() - -/* - * Sinew - */ +GLOBAL_LIST_INIT(leather_recipes, list ( \ + new/datum/stack_recipe("wallet", /obj/item/weapon/storage/wallet, 1), \ + new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2), \ + new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3), \ + new/datum/stack_recipe("toolbelt", /obj/item/weapon/storage/belt/utility, 4), \ + new/datum/stack_recipe("leather satchel", /obj/item/weapon/storage/backpack/satchel, 5), \ + new/datum/stack_recipe("bandolier", /obj/item/weapon/storage/belt/bandolier, 5), \ + new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \ + new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \ +)) + +/obj/item/stack/sheet/leather/Initialize(mapload, new_amount, merge = TRUE) + recipes = GLOB.leather_recipes + return ..() + +/* + * Sinew + */ /obj/item/stack/sheet/sinew name = "watcher sinew" icon = 'icons/obj/mining.dmi' @@ -157,12 +157,12 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ GLOBAL_LIST_INIT(sinew_recipes, list ( \ new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1, on_floor = 1), \ -)) +)) /obj/item/stack/sheet/sinew/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.sinew_recipes return ..() - + /* * Plates */ @@ -229,4 +229,4 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ var/obj/item/stack/sheet/leather/HS = new(src.loc) HS.amount = 1 wetness = initial(wetness) - src.use(1) + src.use(1) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 64e2a5e8fd..5b1c641383 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -296,7 +296,7 @@ /obj/item/weapon/lighter, /obj/item/device/multitool, /obj/item/weapon/reagent_containers/food/drinks/bottle/molotov, - /obj/item/weapon/grenade/plastic/c4, + /obj/item/weapon/grenade/plastic/c4, ) /obj/item/weapon/storage/belt/grenade/full/PopulateContents() new /obj/item/weapon/grenade/flashbang(src) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index c072c052e5..6c8edec9f8 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,6 +12,10 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(user, "You are not capable of wearing underwear.") + return + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") if(!Adjacent(user)) @@ -32,4 +36,4 @@ H.socks= new_socks add_fingerprint(H) - H.update_body() \ No newline at end of file + H.update_body() diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 71b1355ef5..8675049cee 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -1,25 +1,25 @@ -/mob/dead/observer/say(message) - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if (!message) - return - - log_say("Ghost/[src.key] : [message]") - - . = src.say_dead(message) - -/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - var/atom/movable/to_follow = speaker - if(radio_freq) - var/atom/movable/virtualspeaker/V = speaker - - if(isAI(V.source)) - var/mob/living/silicon/ai/S = V.source - to_follow = S.eyeobj - else - to_follow = V.source - var/link = FOLLOW_LINK(src, to_follow) - // Recompose the message, because it's scrambled by default - message = compose_message(speaker, message_language, raw_message, radio_freq, spans) - to_chat(src, "[link] [message]") - +/mob/dead/observer/say(message) + message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) + + if (!message) + return + + log_say("Ghost/[src.key] : [message]") + + . = src.say_dead(message) + +/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + var/atom/movable/to_follow = speaker + if(radio_freq) + var/atom/movable/virtualspeaker/V = speaker + + if(isAI(V.source)) + var/mob/living/silicon/ai/S = V.source + to_follow = S.eyeobj + else + to_follow = V.source + var/link = FOLLOW_LINK(src, to_follow) + // Recompose the message, because it's scrambled by default + message = compose_message(speaker, message_language, raw_message, radio_freq, spans) + to_chat(src, "[link] [message]") + diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 9be254e4bc..b3f436ec68 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -368,23 +368,23 @@ standing += eye_overlay //Underwear, Undershirts & Socks - if(H.underwear) - var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] - if(underwear) - standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + if(!(NO_UNDERWEAR in species_traits)) + if(H.underwear) + var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] + if(underwear) + standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) - if(H.undershirt) - var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] - if(undershirt) - if(H.dna.species.sexes && H.gender == FEMALE) - standing += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) - else - standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) - - if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) - var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] - if(socks) - standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) + if(H.undershirt) + var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] + if(undershirt) + if(H.dna.species.sexes && H.gender == FEMALE) + standing += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + else + standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) + var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] + if(socks) + standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) if(standing.len) H.overlays_standing[BODY_LAYER] = standing diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 65bfaf3fd5..741ceef951 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -2,14 +2,14 @@ // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. name = "Golem" id = "iron golem" - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) speedmod = 2 armor = 55 siemens_coeff = 0 punchdamagelow = 5 punchdamagehigh = 14 punchstunthreshold = 11 //about 40% chance to stun - no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform, slot_s_store) + no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform) nojumpsuit = 1 sexes = 1 damage_overlay_type = "" @@ -20,7 +20,6 @@ dangerous_existence = TRUE limbs_id = "golem" fixed_mut_color = "aaa" - mutant_organs = list(/obj/item/organ/adamantine_resonator) var/info_text = "As an Iron Golem, you don't have any special traits." var/prefix = "Iron" @@ -55,9 +54,8 @@ name = "Adamantine Golem" id = "adamantine golem" meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine - mutant_organs = list(/obj/item/organ/adamantine_resonator, /obj/item/organ/vocal_cords/adamantine) fixed_mut_color = "4ed" - info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems." + info_text = "As an Adamantine Golem, you don't have any special traits." prefix = "Adamantine" //Explodes on death @@ -67,7 +65,7 @@ fixed_mut_color = "a3d" meat = /obj/item/weapon/ore/plasma //Can burn and takes damage from heat - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) info_text = "As a Plasma Golem, you explode on death!" burnmod = 1.5 prefix = "Plasma" @@ -196,7 +194,7 @@ fixed_mut_color = "49311c" meat = /obj/item/stack/sheet/mineral/wood //Can burn and take damage from heat - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) armor = 30 burnmod = 1.25 heatmod = 1.5 @@ -506,7 +504,7 @@ limbs_id = "cultgolem" sexes = FALSE info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie." - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER) //no mutcolors + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors prefix = "Runic" var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift @@ -555,7 +553,7 @@ limbs_id = "clothgolem" 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." - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER) //no mutcolors, and can burn + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors, and can burn armor = 15 //feels no pain, but not too resistant burnmod = 2 // don't get burned speedmod = 1 // not as heavy as stone @@ -645,8 +643,8 @@ if(P.is_hot()) visible_message("[src] bursts into flames!") - fire_act() + /datum/species/golem/plastic name = "Plastic" id = "plastic golem"