diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index e278ed740e5..d54afb7c0c0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -28,7 +28,7 @@ for(var/i in 1 to 3) new /obj/item/tank/internals/anesthetic(src) for(var/i in 1 to 3) - new /obj/item/clothing/mask/breathmuzzle(src) + new /obj/item/clothing/mask/muzzle/breath(src) /obj/structure/closet/secure_closet/medical3 name = "medical doctor's locker" diff --git a/code/modules/clothing/gloves/bone.dm b/code/modules/clothing/gloves/bone.dm new file mode 100644 index 00000000000..756c35bd9ef --- /dev/null +++ b/code/modules/clothing/gloves/bone.dm @@ -0,0 +1,14 @@ +/obj/item/clothing/gloves/bracer + name = "bone bracers" + desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." + icon_state = "bracers" + inhand_icon_state = "bracers" + transfer_prints = TRUE + strip_delay = 40 + equip_delay_other = 20 + body_parts_covered = ARMS + cold_protection = ARMS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 15, BOMB = 20, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) diff --git a/code/modules/clothing/gloves/botany.dm b/code/modules/clothing/gloves/botany.dm new file mode 100644 index 00000000000..86f9236d100 --- /dev/null +++ b/code/modules/clothing/gloves/botany.dm @@ -0,0 +1,13 @@ +/obj/item/clothing/gloves/botanic_leather + name = "botanist's leather gloves" + desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm." + icon_state = "leather" + inhand_icon_state = "ggloves" + permeability_coefficient = 0.9 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + clothing_traits = list(TRAIT_PLANT_SAFE) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 76bfc793b58..ca10cd173e7 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -105,6 +105,19 @@ resistance_flags = NONE cut_type = /obj/item/clothing/gloves/fingerless +/obj/item/clothing/gloves/fingerless + name = "fingerless gloves" + desc = "Plain black gloves without fingertips for the hard working." + icon_state = "fingerless" + inhand_icon_state = "fingerless" + transfer_prints = TRUE + strip_delay = 40 + equip_delay_other = 20 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + custom_price = PAYCHECK_ASSISTANT * 1.5 + undyeable = TRUE + /obj/item/clothing/gloves/color/orange name = "orange gloves" desc = "A pair of gloves, they don't look special in any way." diff --git a/code/modules/clothing/gloves/combat.dm b/code/modules/clothing/gloves/combat.dm new file mode 100644 index 00000000000..ce4f955eb9a --- /dev/null +++ b/code/modules/clothing/gloves/combat.dm @@ -0,0 +1,14 @@ +/obj/item/clothing/gloves/combat + name = "combat gloves" + desc = "These tactical gloves are fireproof and electrically insulated." + icon_state = "black" + inhand_icon_state = "blackgloves" + siemens_coefficient = 0 + permeability_coefficient = 0.05 + strip_delay = 80 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/plasmaman.dm similarity index 62% rename from code/modules/clothing/gloves/miscellaneous.dm rename to code/modules/clothing/gloves/plasmaman.dm index 36b0ded3832..a3426e48270 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/plasmaman.dm @@ -1,73 +1,3 @@ - -/obj/item/clothing/gloves/fingerless - name = "fingerless gloves" - desc = "Plain black gloves without fingertips for the hard working." - icon_state = "fingerless" - inhand_icon_state = "fingerless" - transfer_prints = TRUE - strip_delay = 40 - equip_delay_other = 20 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - custom_price = PAYCHECK_ASSISTANT * 1.5 - undyeable = TRUE - -/obj/item/clothing/gloves/botanic_leather - name = "botanist's leather gloves" - desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm." - icon_state = "leather" - inhand_icon_state = "ggloves" - permeability_coefficient = 0.9 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - clothing_traits = list(TRAIT_PLANT_SAFE) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30) - -/obj/item/clothing/gloves/combat - name = "combat gloves" - desc = "These tactical gloves are fireproof and electrically insulated." - icon_state = "black" - inhand_icon_state = "blackgloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - strip_delay = 80 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) - -/obj/item/clothing/gloves/bracer - name = "bone bracers" - desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." - icon_state = "bracers" - inhand_icon_state = "bracers" - transfer_prints = TRUE - strip_delay = 40 - equip_delay_other = 20 - body_parts_covered = ARMS - cold_protection = ARMS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 15, BOMB = 20, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) - -/obj/item/clothing/gloves/rapid - name = "Gloves of the North Star" - desc = "Just looking at these fills you with an urge to beat the shit out of people." - icon_state = "rapid" - inhand_icon_state = "rapid" - transfer_prints = TRUE - -/obj/item/clothing/gloves/rapid/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/punchcooldown) - - /obj/item/clothing/gloves/color/plasmaman desc = "Covers up those scandalous boney hands." name = "plasma envirogloves" diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm index 639620f802d..e539e026186 100644 --- a/code/modules/clothing/gloves/special.dm +++ b/code/modules/clothing/gloves/special.dm @@ -49,3 +49,14 @@ to_chat(pull_component.parent, span_warning("You have lost the grip power of [src]!")) QDEL_NULL(pull_component_weakref) + +/obj/item/clothing/gloves/rapid + name = "Gloves of the North Star" + desc = "Just looking at these fills you with an urge to beat the shit out of people." + icon_state = "rapid" + inhand_icon_state = "rapid" + transfer_prints = TRUE + +/obj/item/clothing/gloves/rapid/ComponentInitialize() + . = ..() + AddComponent(/datum/component/wearertargeting/punchcooldown) diff --git a/code/modules/clothing/head/animalears.dm b/code/modules/clothing/head/animalears.dm new file mode 100644 index 00000000000..9eefef25f86 --- /dev/null +++ b/code/modules/clothing/head/animalears.dm @@ -0,0 +1,30 @@ +/obj/item/clothing/head/kitty + name = "kitty ears" + desc = "A pair of kitty ears. Meow!" + icon_state = "kitty" + color = "#999999" + dynamic_hair_suffix = "" + + dog_fashion = /datum/dog_fashion/head/kitty + +/obj/item/clothing/head/kitty/visual_equipped(mob/living/carbon/human/user, slot) + if(ishuman(user) && slot == ITEM_SLOT_HEAD) + update_icon(ALL, user) + user.update_inv_head() //Color might have been changed by update_appearance. + ..() + +/obj/item/clothing/head/kitty/update_icon(updates=ALL, mob/living/carbon/human/user) + . = ..() + if(ishuman(user)) + add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) + +/obj/item/clothing/head/kitty/genuine + desc = "A pair of kitty ears. A tag on the inside says \"Hand made from real cats.\"" + +/obj/item/clothing/head/rabbitears + name = "rabbit ears" + desc = "Wearing these makes you look useless, and only good for your sex appeal." + icon_state = "bunny" + dynamic_hair_suffix = "" + + dog_fashion = /datum/dog_fashion/head/rabbit diff --git a/code/modules/clothing/head/cakehat.dm b/code/modules/clothing/head/cakehat.dm new file mode 100644 index 00000000000..624e5ddc671 --- /dev/null +++ b/code/modules/clothing/head/cakehat.dm @@ -0,0 +1,75 @@ +/obj/item/clothing/head/hardhat/cakehat + name = "cakehat" + desc = "You put the cake on your head. Brilliant." + icon_state = "hardhat0_cakehat" + inhand_icon_state = "hardhat0_cakehat" + hat_type = "cakehat" + lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' + hitsound = 'sound/weapons/tap.ogg' + var/hitsound_on = 'sound/weapons/sear.ogg' //so we can differentiate between cakehat and energyhat + var/hitsound_off = 'sound/weapons/tap.ogg' + var/force_on = 15 + var/throwforce_on = 15 + var/damtype_on = BURN + flags_inv = HIDEEARS|HIDEHAIR + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) + light_range = 2 //luminosity when on + light_system = MOVABLE_LIGHT + flags_cover = HEADCOVERSEYES + heat = 999 + + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/hardhat/cakehat/process() + var/turf/location = src.loc + if(ishuman(location)) + var/mob/living/carbon/human/wearer = location + if(wearer.is_holding(src) || wearer.head == src) + location = wearer.loc + + if(isturf(location)) + location.hotspot_expose(700, 1) + +/obj/item/clothing/head/hardhat/cakehat/turn_on(mob/living/user) + ..() + force = force_on + throwforce = throwforce_on + damtype = damtype_on + hitsound = hitsound_on + START_PROCESSING(SSobj, src) + +/obj/item/clothing/head/hardhat/cakehat/turn_off(mob/living/user) + ..() + force = 0 + throwforce = 0 + damtype = BRUTE + hitsound = hitsound_off + STOP_PROCESSING(SSobj, src) + +/obj/item/clothing/head/hardhat/cakehat/get_temperature() + return on * heat + +/obj/item/clothing/head/hardhat/cakehat/energycake + name = "energy cake" + desc = "You put the energy sword on your cake. Brilliant." + icon_state = "hardhat0_energycake" + inhand_icon_state = "hardhat0_energycake" + hat_type = "energycake" + hitsound = 'sound/weapons/tap.ogg' + hitsound_on = 'sound/weapons/blade1.ogg' + hitsound_off = 'sound/weapons/tap.ogg' + damtype_on = BRUTE + force_on = 18 //same as epen (but much more obvious) + light_range = 3 //ditto + heat = 0 + +/obj/item/clothing/head/hardhat/cakehat/energycake/turn_on(mob/living/user) + playsound(user, 'sound/weapons/saberon.ogg', 5, TRUE) + to_chat(user, span_warning("You turn on \the [src].")) + ..() + +/obj/item/clothing/head/hardhat/cakehat/energycake/turn_off(mob/living/user) + playsound(user, 'sound/weapons/saberoff.ogg', 5, TRUE) + to_chat(user, span_warning("You turn off \the [src].")) + ..() diff --git a/code/modules/clothing/head/cone.dm b/code/modules/clothing/head/cone.dm new file mode 100644 index 00000000000..19af69d2500 --- /dev/null +++ b/code/modules/clothing/head/cone.dm @@ -0,0 +1,15 @@ +/obj/item/clothing/head/cone + desc = "This cone is trying to warn you of something!" + name = "warning cone" + icon = 'icons/obj/janitor.dmi' + icon_state = "cone" + inhand_icon_state = "cone" + force = 1 + throwforce = 3 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + attack_verb_continuous = list("warns", "cautions", "smashes") + attack_verb_simple = list("warn", "caution", "smash") + resistance_flags = NONE + dynamic_hair_suffix = "" diff --git a/code/modules/clothing/head/costume.dm b/code/modules/clothing/head/costume.dm new file mode 100644 index 00000000000..4003e7b96dd --- /dev/null +++ b/code/modules/clothing/head/costume.dm @@ -0,0 +1,124 @@ +/obj/item/clothing/head/powdered_wig + name = "powdered wig" + desc = "A powdered wig." + icon_state = "pwig" + inhand_icon_state = "pwig" + +/obj/item/clothing/head/hasturhood + name = "hastur's hood" + desc = "It's unspeakably stylish." + icon_state = "hasturhood" + flags_inv = HIDEHAIR + flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/syndicatefake + name = "black space-helmet replica" + icon_state = "syndicate-helm-black-red" + inhand_icon_state = "syndicate-helm-black-red" + desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" + clothing_flags = SNUG_FIT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/head/cueball + name = "cueball helmet" + desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?" + icon_state = "cueball" + inhand_icon_state="cueball" + clothing_flags = SNUG_FIT + flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/head/snowman + name = "snowman head" + desc = "A ball of white styrofoam. So festive." + icon_state = "snowman_h" + inhand_icon_state = "snowman_h" + clothing_flags = SNUG_FIT + flags_cover = HEADCOVERSEYES + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/head/witchwig + name = "witch costume wig" + desc = "Eeeee~heheheheheheh!" + icon_state = "witch" + inhand_icon_state = "witch" + flags_inv = HIDEHAIR + +/obj/item/clothing/head/chicken + name = "chicken suit head" + desc = "Bkaw!" + icon_state = "chickenhead" + inhand_icon_state = "chickensuit" + clothing_flags = SNUG_FIT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/head/griffin + name = "griffon head" + desc = "Why not 'eagle head'? Who knows." + icon_state = "griffinhat" + inhand_icon_state = "griffinhat" + clothing_flags = SNUG_FIT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/head/xenos + name = "xenos helmet" + icon_state = "xenos" + inhand_icon_state = "xenos_helm" + desc = "A helmet made out of chitinous alien hide." + clothing_flags = SNUG_FIT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + +/obj/item/clothing/head/lobsterhat + name = "foam lobster head" + desc = "When everything's going to crab, protecting your head is the best choice." + icon_state = "lobster_hat" + clothing_flags = SNUG_FIT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/head/drfreezehat + name = "doctor freeze's wig" + desc = "A cool wig for cool people." + icon_state = "drfreeze_hat" + flags_inv = HIDEHAIR + +/obj/item/clothing/head/shrine_wig + name = "shrine maiden's wig" + desc = "Purify in style!" + flags_inv = HIDEHAIR //bald + icon_state = "shrine_wig" + inhand_icon_state = "shrine_wig" + dynamic_hair_suffix = "" + worn_y_offset = 1 + +/obj/item/clothing/head/cardborg + name = "cardborg helmet" + desc = "A helmet made out of a box." + icon_state = "cardborg_h" + inhand_icon_state = "cardborg_h" + clothing_flags = SNUG_FIT + flags_cover = HEADCOVERSEYES + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + + dog_fashion = /datum/dog_fashion/head/cardborg + +/obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) + ..() + if(ishuman(user) && slot == ITEM_SLOT_HEAD) + var/mob/living/carbon/human/H = user + if(istype(H.wear_suit, /obj/item/clothing/suit/cardborg)) + var/obj/item/clothing/suit/cardborg/CB = H.wear_suit + CB.disguise(user, src) + +/obj/item/clothing/head/cardborg/dropped(mob/living/user) + ..() + user.remove_alt_appearance("standard_borg_disguise") + +/obj/item/clothing/head/bronze + name = "bronze hat" + desc = "A crude helmet made out of bronze plates. It offers very little in the way of protection." + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "clockwork_helmet_old" + clothing_flags = SNUG_FIT + flags_inv = HIDEEARS|HIDEHAIR + armor = list(MELEE = 5, BULLET = 0, LASER = -5, ENERGY = -15, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 20) diff --git a/code/modules/clothing/head/crown.dm b/code/modules/clothing/head/crown.dm new file mode 100644 index 00000000000..239b1938e8e --- /dev/null +++ b/code/modules/clothing/head/crown.dm @@ -0,0 +1,12 @@ +/obj/item/clothing/head/crown + name = "crown" + desc = "A crown fit for a king, a petty king maybe." + icon_state = "crown" + armor = list(MELEE = 15, BULLET = 0, LASER = 0,ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, WOUND = 5) + resistance_flags = FIRE_PROOF + dynamic_hair_suffix = "" + +/obj/item/clothing/head/crown/fancy + name = "magnificent crown" + desc = "A crown worn by only the highest emperors of the land space." + icon_state = "fancycrown" diff --git a/code/modules/clothing/head/fedora.dm b/code/modules/clothing/head/fedora.dm new file mode 100644 index 00000000000..a115ed5f53d --- /dev/null +++ b/code/modules/clothing/head/fedora.dm @@ -0,0 +1,26 @@ +/obj/item/clothing/head/fedora + name = "fedora" + icon_state = "fedora" + inhand_icon_state = "fedora" + desc = "A really cool hat if you're a mobster. A really lame hat if you're not." + pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora + +/obj/item/clothing/head/fedora/white + name = "white fedora" + icon_state = "fedora_white" + inhand_icon_state = "fedora_white" + +/obj/item/clothing/head/fedora/beige + name = "beige fedora" + icon_state = "fedora_beige" + inhand_icon_state = "fedora_beige" + +/obj/item/clothing/head/fedora/suicide_act(mob/user) + if(user.gender == FEMALE) + return 0 + var/mob/living/carbon/human/H = user + user.visible_message(span_suicide("[user] is donning [src]! It looks like [user.p_theyre()] trying to be nice to girls.")) + user.say("M'lady.", forced = "fedora suicide") + sleep(10) + H.facial_hairstyle = "Neckbeard" + return(BRUTELOSS) diff --git a/code/modules/clothing/head/frenchberet.dm b/code/modules/clothing/head/frenchberet.dm new file mode 100644 index 00000000000..2ada3eb1c3d --- /dev/null +++ b/code/modules/clothing/head/frenchberet.dm @@ -0,0 +1,39 @@ +/obj/item/clothing/head/frenchberet + name = "french beret" + desc = "A quality beret, infused with the aroma of chain-smoking, wine-swilling Parisians. You feel less inclined to engage in military conflict, for some reason." + icon_state = "beret" + greyscale_config = /datum/greyscale_config/beret + greyscale_config_worn = /datum/greyscale_config/beret/worn + greyscale_colors = "#972A2A" + dynamic_hair_suffix = "" + +/obj/item/clothing/head/frenchberet/equipped(mob/M, slot) + . = ..() + if (slot == ITEM_SLOT_HEAD) + RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) + else + UnregisterSignal(M, COMSIG_MOB_SAY) + +/obj/item/clothing/head/frenchberet/dropped(mob/M) + . = ..() + UnregisterSignal(M, COMSIG_MOB_SAY) + +/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, mob/speech_args) + SIGNAL_HANDLER + var/message = speech_args[SPEECH_MESSAGE] + if(message[1] != "*") + message = " [message]" + var/list/french_words = strings("french_replacement.json", "french") + + for(var/key in french_words) + var/value = french_words[key] + if(islist(value)) + value = pick(value) + + message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") + message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") + message = replacetextEx(message, " [key]", " [value]") + + if(prob(3)) + message += pick(" Honh honh honh!"," Honh!"," Zut Alors!") + speech_args[SPEECH_MESSAGE] = trim(message) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 9d53894761f..36e45a4e6ce 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -171,3 +171,54 @@ icon_state = "hardhat0_dblue" inhand_icon_state = "hardhat0_dblue" hat_type = "dblue" + +/obj/item/clothing/head/hardhat/pumpkinhead + name = "carved pumpkin" + desc = "A jack o' lantern! Believed to ward off evil spirits." + icon_state = "hardhat0_pumpkin" + inhand_icon_state = "hardhat0_pumpkin" + hat_type = "pumpkin" + clothing_flags = SNUG_FIT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) + light_range = 2 //luminosity when on + flags_cover = HEADCOVERSEYES + light_color = "#fff2bf" + worn_y_offset = 1 + +/obj/item/clothing/head/hardhat/pumpkinhead/set_light_on(new_value) + . = ..() + if(isnull(.)) + return + update_icon(UPDATE_OVERLAYS) + +/obj/item/clothing/head/hardhat/pumpkinhead/update_overlays() + . = ..() + if(light_on) + . += emissive_appearance(icon, "carved_pumpkin-emissive", alpha = src.alpha) + +/obj/item/clothing/head/hardhat/pumpkinhead/worn_overlays(isinhands) + . = ..() + if(!isinhands) + . += emissive_appearance(worn_icon, "carved_pumpkin-emissive", alpha = src.alpha, appearance_flags = KEEP_APART) + +/obj/item/clothing/head/hardhat/pumpkinhead/blumpkin + name = "carved blumpkin" + desc = "A very blue jack o' lantern! Believed to ward off vengeful chemists." + icon_state = "hardhat0_blumpkin" + inhand_icon_state = "hardhat0_blumpkin" + hat_type = "blumpkin" + light_color = "#76ff8e" + +/obj/item/clothing/head/hardhat/reindeer + name = "novelty reindeer hat" + desc = "Some fake antlers and a very fake red nose." + icon_state = "hardhat0_reindeer" + inhand_icon_state = "hardhat0_reindeer" + hat_type = "reindeer" + flags_inv = 0 + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) + light_range = 1 //luminosity when on + dynamic_hair_suffix = "" + + dog_fashion = /datum/dog_fashion/head/reindeer diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm new file mode 100644 index 00000000000..1bbf8a1e759 --- /dev/null +++ b/code/modules/clothing/head/hat.dm @@ -0,0 +1,187 @@ +/obj/item/clothing/head/centhat + name = "\improper CentCom hat" + icon_state = "centcom" + desc = "It's good to be emperor." + inhand_icon_state = "that" + flags_inv = 0 + armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) + strip_delay = 80 + +/obj/item/clothing/head/spacepolice + name = "space police cap" + desc = "A blue cap for patrolling the daily beat." + icon_state = "policecap_families" + inhand_icon_state = "policecap_families" + +/obj/item/clothing/head/canada + name = "striped red tophat" + desc = "It smells like fresh donut holes. / Il sent comme des trous de beignets frais." + icon_state = "canada" + inhand_icon_state = "canada" + +/obj/item/clothing/head/redcoat + name = "redcoat's hat" + icon_state = "redcoat" + desc = "'I guess it's a redhead.'" + +/obj/item/clothing/head/mailman + name = "mailman's hat" + icon_state = "mailman" + desc = "'Right-on-time' mail service head wear." + +/obj/item/clothing/head/plaguedoctorhat + name = "plague doctor's hat" + desc = "These were once used by plague doctors. They're pretty much useless." + icon_state = "plaguedoctor" + permeability_coefficient = 0.01 + +/obj/item/clothing/head/nursehat + name = "nurse's hat" + desc = "It allows quick identification of trained medical personnel." + icon_state = "nursehat" + dynamic_hair_suffix = "" + + dog_fashion = /datum/dog_fashion/head/nurse + +/obj/item/clothing/head/bowler + name = "bowler-hat" + desc = "Gentleman, elite aboard!" + icon_state = "bowler" + inhand_icon_state = "bowler" + dynamic_hair_suffix = "" + +/obj/item/clothing/head/bearpelt + name = "bear pelt hat" + desc = "Fuzzy." + icon_state = "bearpelt" + inhand_icon_state = "bearpelt" + +/obj/item/clothing/head/flatcap + name = "flat cap" + desc = "A working man's cap." + icon_state = "beret_flat" + greyscale_config = /datum/greyscale_config/beret + greyscale_config_worn = /datum/greyscale_config/beret/worn + greyscale_colors = "#8F7654" + inhand_icon_state = "detective" + +/obj/item/clothing/head/hunter + name = "bounty hunting hat" + desc = "Ain't nobody gonna cheat the hangman in my town." + icon_state = "cowboy" + worn_icon_state = "hunter" + inhand_icon_state = "hunter" + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) + resistance_flags = FIRE_PROOF | ACID_PROOF + +/obj/item/clothing/head/santa + name = "santa hat" + desc = "On the first day of christmas my employer gave to me!" + icon_state = "santahatnorm" + inhand_icon_state = "that" + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head/santa + +/obj/item/clothing/head/jester + name = "jester hat" + desc = "A hat with bells, to add some merriness to the suit." + icon_state = "jester_hat" + dynamic_hair_suffix = "" + +/obj/item/clothing/head/jester/alt + icon_state = "jester2" + +/obj/item/clothing/head/rice_hat + name = "rice hat" + desc = "Welcome to the rice fields, motherfucker." + icon_state = "rice_hat" + +/obj/item/clothing/head/lizard + name = "lizardskin cloche hat" + desc = "How many lizards died to make this hat? Not enough." + icon_state = "lizard" + +/obj/item/clothing/head/scarecrow_hat + name = "scarecrow hat" + desc = "A simple straw hat." + icon_state = "scarecrow_hat" + +/obj/item/clothing/head/pharaoh + name = "pharaoh hat" + desc = "Walk like an Egyptian." + icon_state = "pharoah_hat" + inhand_icon_state = "pharoah_hat" + +/obj/item/clothing/head/nemes + name = "headdress of Nemes" + desc = "Lavish space tomb not included." + icon_state = "nemes_headdress" + +/obj/item/clothing/head/delinquent + name = "delinquent hat" + desc = "Good grief." + icon_state = "delinquent" + +/obj/item/clothing/head/intern + name = "\improper CentCom Head Intern beancap" + desc = "A horrifying mix of beanie and softcap in CentCom green. You'd have to be pretty desperate for power over your peers to agree to wear this." + icon_state = "intern_hat" + inhand_icon_state = "intern_hat" + +/obj/item/clothing/head/coordinator + name = "coordinator cap" + desc = "A cap for a party coordinator, stylish!." + icon_state = "capcap" + inhand_icon_state = "that" + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 35, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) + +/obj/item/clothing/head/jackbros + name = "frosty hat" + desc = "Hee-ho!" + icon_state = "JackFrostHat" + inhand_icon_state = "JackFrostHat" + +/obj/item/clothing/head/weddingveil + name = "wedding veil" + desc = "A gauzy white veil." + icon_state = "weddingveil" + inhand_icon_state = "weddingveil" + +/obj/item/clothing/head/centcom_cap + name = "\improper CentCom commander cap" + icon_state = "centcom_cap" + desc = "Worn by the finest of CentCom commanders. Inside the lining of the cap, lies two faint initials." + inhand_icon_state = "that" + flags_inv = 0 + armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) + strip_delay = (8 SECONDS) + +/obj/item/clothing/head/human_leather + name = "human skin hat" + desc = "This will scare them. All will know my power." + icon_state = "human_leather" + inhand_icon_state = "human_leather" + +/obj/item/clothing/head/ushanka + name = "ushanka" + desc = "Perfect for winter in Siberia, da?" + icon_state = "ushankadown" + inhand_icon_state = "ushankadown" + flags_inv = HIDEEARS|HIDEHAIR + var/earflaps = TRUE + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + + dog_fashion = /datum/dog_fashion/head/ushanka + +/obj/item/clothing/head/ushanka/attack_self(mob/user) + if(earflaps) + icon_state = "ushankaup" + inhand_icon_state = "ushankaup" + to_chat(user, span_notice("You raise the ear flaps on the ushanka.")) + else + icon_state = "ushankadown" + inhand_icon_state = "ushankadown" + to_chat(user, span_notice("You lower the ear flaps on the ushanka.")) + earflaps = !earflaps diff --git a/code/modules/clothing/head/justice.dm b/code/modules/clothing/head/justice.dm new file mode 100644 index 00000000000..0b224d1e196 --- /dev/null +++ b/code/modules/clothing/head/justice.dm @@ -0,0 +1,24 @@ +/obj/item/clothing/head/justice + name = "justice hat" + desc = "Fight for what's righteous!" + icon_state = "justicered" + inhand_icon_state = "justicered" + clothing_flags = SNUG_FIT + flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/justice/blue + icon_state = "justiceblue" + inhand_icon_state = "justiceblue" + +/obj/item/clothing/head/justice/yellow + icon_state = "justiceyellow" + inhand_icon_state = "justiceyellow" + +/obj/item/clothing/head/justice/green + icon_state = "justicegreen" + inhand_icon_state = "justicegreen" + +/obj/item/clothing/head/justice/pink + icon_state = "justicepink" + inhand_icon_state = "justicepink" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm deleted file mode 100644 index 90846d20a2b..00000000000 --- a/code/modules/clothing/head/misc.dm +++ /dev/null @@ -1,551 +0,0 @@ - - -/obj/item/clothing/head/centhat - name = "\improper CentCom hat" - icon_state = "centcom" - desc = "It's good to be emperor." - inhand_icon_state = "that" - flags_inv = 0 - armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) - strip_delay = 80 - -/obj/item/clothing/head/spacepolice - name = "space police cap" - desc = "A blue cap for patrolling the daily beat." - icon_state = "policecap_families" - inhand_icon_state = "policecap_families" - -/obj/item/clothing/head/powdered_wig - name = "powdered wig" - desc = "A powdered wig." - icon_state = "pwig" - inhand_icon_state = "pwig" - -#define RABBIT_CD_TIME 30 SECONDS - -/obj/item/clothing/head/that - name = "top-hat" - desc = "It's an amish looking hat." - icon_state = "tophat" - inhand_icon_state = "that" - dog_fashion = /datum/dog_fashion/head - throwforce = 1 - /// Cooldown for how often we can pull rabbits out of here - COOLDOWN_DECLARE(rabbit_cooldown) - -/obj/item/clothing/head/that/attackby(obj/item/hitby_item, mob/user, params) - . = ..() - if(istype(hitby_item, /obj/item/gun/magic/wand)) - abracadabra(hitby_item, user) - -/obj/item/clothing/head/that/proc/abracadabra(obj/item/hitby_wand, mob/magician) - if(!COOLDOWN_FINISHED(src, rabbit_cooldown)) - to_chat(span_warning("You can't find another rabbit in [src]! Seems another hasn't gotten lost in there yet...")) - return - - COOLDOWN_START(src, rabbit_cooldown, RABBIT_CD_TIME) - playsound(get_turf(src), 'sound/weapons/emitter.ogg', 70) - do_smoke(range=1, location=src, smoke_type=/obj/effect/particle_effect/smoke/quick) - - if(prob(10)) - magician.visible_message(span_danger("[magician] taps [src] with [hitby_wand], then reaches in and pulls out a bu- wait, those are bees!"), span_danger("You tap [src] with your [hitby_wand.name] and pull out... BEES!")) - var/wait_how_many_bees_did_that_guy_pull_out_of_his_hat = rand(4, 8) - for(var/b in 1 to wait_how_many_bees_did_that_guy_pull_out_of_his_hat) - var/mob/living/simple_animal/hostile/bee/barry = new(get_turf(magician)) - barry.GiveTarget(magician) - if(prob(20)) - barry.say(pick("BUZZ BUZZ", "PULLING A RABBIT OUT OF A HAT IS A TIRED TROPE", "I DIDN'T ASK TO BEE HERE"), forced = "bee hat") - else - magician.visible_message(span_notice("[magician] taps [src] with [hitby_wand], then reaches in and pulls out a bunny! Cute!"), span_notice("You tap [src] with your [hitby_wand.name] and pull out a cute bunny!")) - var/mob/living/simple_animal/rabbit/empty/bunbun = new(get_turf(magician)) - bunbun.mob_try_pickup(magician, instant=TRUE) - -#undef RABBIT_CD_TIME - -/obj/item/clothing/head/canada - name = "striped red tophat" - desc = "It smells like fresh donut holes. / Il sent comme des trous de beignets frais." - icon_state = "canada" - inhand_icon_state = "canada" - -/obj/item/clothing/head/redcoat - name = "redcoat's hat" - icon_state = "redcoat" - desc = "'I guess it's a redhead.'" - -/obj/item/clothing/head/mailman - name = "mailman's hat" - icon_state = "mailman" - desc = "'Right-on-time' mail service head wear." - -/obj/item/clothing/head/plaguedoctorhat - name = "plague doctor's hat" - desc = "These were once used by plague doctors. They're pretty much useless." - icon_state = "plaguedoctor" - permeability_coefficient = 0.01 - -/obj/item/clothing/head/hasturhood - name = "hastur's hood" - desc = "It's unspeakably stylish." - icon_state = "hasturhood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/nursehat - name = "nurse's hat" - desc = "It allows quick identification of trained medical personnel." - icon_state = "nursehat" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/nurse - -/obj/item/clothing/head/syndicatefake - name = "black space-helmet replica" - icon_state = "syndicate-helm-black-red" - inhand_icon_state = "syndicate-helm-black-red" - desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/head/cueball - name = "cueball helmet" - desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?" - icon_state = "cueball" - inhand_icon_state="cueball" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/head/snowman - name = "snowman head" - desc = "A ball of white styrofoam. So festive." - icon_state = "snowman_h" - inhand_icon_state = "snowman_h" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/head/justice - name = "justice hat" - desc = "Fight for what's righteous!" - icon_state = "justicered" - inhand_icon_state = "justicered" - clothing_flags = SNUG_FIT - flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/justice/blue - icon_state = "justiceblue" - inhand_icon_state = "justiceblue" - -/obj/item/clothing/head/justice/yellow - icon_state = "justiceyellow" - inhand_icon_state = "justiceyellow" - -/obj/item/clothing/head/justice/green - icon_state = "justicegreen" - inhand_icon_state = "justicegreen" - -/obj/item/clothing/head/justice/pink - icon_state = "justicepink" - inhand_icon_state = "justicepink" - -/obj/item/clothing/head/rabbitears - name = "rabbit ears" - desc = "Wearing these makes you look useless, and only good for your sex appeal." - icon_state = "bunny" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/rabbit - -/obj/item/clothing/head/pirate - name = "pirate hat" - desc = "Yarr." - icon_state = "pirate" - inhand_icon_state = "pirate" - dog_fashion = /datum/dog_fashion/head/pirate - -/obj/item/clothing/head/pirate - var/datum/language/piratespeak/L = new - -/obj/item/clothing/head/pirate/equipped(mob/user, slot) - . = ..() - if(!ishuman(user)) - return - if(slot == ITEM_SLOT_HEAD) - user.grant_language(/datum/language/piratespeak/, TRUE, TRUE, LANGUAGE_HAT) - to_chat(user, span_boldnotice("You suddenly know how to speak like a pirate!")) - -/obj/item/clothing/head/pirate/dropped(mob/user) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(ITEM_SLOT_HEAD) == src && !QDELETED(src)) //This can be called as a part of destroy - user.remove_language(/datum/language/piratespeak/, TRUE, TRUE, LANGUAGE_HAT) - to_chat(user, span_boldnotice("You can no longer speak like a pirate.")) - -/obj/item/clothing/head/pirate/armored - armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) - strip_delay = 40 - equip_delay_other = 20 - -/obj/item/clothing/head/pirate/captain - name = "pirate captain hat" - icon_state = "hgpiratecap" - inhand_icon_state = "hgpiratecap" - -/obj/item/clothing/head/bandana - name = "pirate bandana" - desc = "Yarr." - icon_state = "bandana" - inhand_icon_state = "bandana" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/bandana/armored - armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) - strip_delay = 40 - equip_delay_other = 20 - -/obj/item/clothing/head/bowler - name = "bowler-hat" - desc = "Gentleman, elite aboard!" - icon_state = "bowler" - inhand_icon_state = "bowler" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/witchwig - name = "witch costume wig" - desc = "Eeeee~heheheheheheh!" - icon_state = "witch" - inhand_icon_state = "witch" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/chicken - name = "chicken suit head" - desc = "Bkaw!" - icon_state = "chickenhead" - inhand_icon_state = "chickensuit" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/head/griffin - name = "griffon head" - desc = "Why not 'eagle head'? Who knows." - icon_state = "griffinhat" - inhand_icon_state = "griffinhat" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/head/bearpelt - name = "bear pelt hat" - desc = "Fuzzy." - icon_state = "bearpelt" - inhand_icon_state = "bearpelt" - -/obj/item/clothing/head/xenos - name = "xenos helmet" - icon_state = "xenos" - inhand_icon_state = "xenos_helm" - desc = "A helmet made out of chitinous alien hide." - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - -/obj/item/clothing/head/fedora - name = "fedora" - icon_state = "fedora" - inhand_icon_state = "fedora" - desc = "A really cool hat if you're a mobster. A really lame hat if you're not." - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora - -/obj/item/clothing/head/fedora/white - name = "white fedora" - icon_state = "fedora_white" - inhand_icon_state = "fedora_white" - -/obj/item/clothing/head/fedora/beige - name = "beige fedora" - icon_state = "fedora_beige" - inhand_icon_state = "fedora_beige" - -/obj/item/clothing/head/fedora/suicide_act(mob/user) - if(user.gender == FEMALE) - return 0 - var/mob/living/carbon/human/H = user - user.visible_message(span_suicide("[user] is donning [src]! It looks like [user.p_theyre()] trying to be nice to girls.")) - user.say("M'lady.", forced = "fedora suicide") - sleep(10) - H.facial_hairstyle = "Neckbeard" - return(BRUTELOSS) - -/obj/item/clothing/head/sombrero - name = "sombrero" - icon_state = "sombrero" - inhand_icon_state = "sombrero" - desc = "You can practically taste the fiesta." - flags_inv = HIDEHAIR - - dog_fashion = /datum/dog_fashion/head/sombrero - - greyscale_config = /datum/greyscale_config/sombrero - greyscale_config_worn = /datum/greyscale_config/sombrero/worn - greyscale_config_inhand_left = /datum/greyscale_config/sombrero/lefthand - greyscale_config_inhand_right = /datum/greyscale_config/sombrero/righthand - -/obj/item/clothing/head/sombrero/green - name = "green sombrero" - desc = "As elegant as a dancing cactus." - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - dog_fashion = null - greyscale_colors = "#13d968#ffffff" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/head/sombrero/shamebrero - name = "shamebrero" - icon_state = "shamebrero" - inhand_icon_state = "shamebrero" - desc = "Once it's on, it never comes off." - dog_fashion = null - greyscale_colors = "#d565d3#f8db18" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/head/sombrero/shamebrero/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT) - -/obj/item/clothing/head/flatcap - name = "flat cap" - desc = "A working man's cap." - icon_state = "beret_flat" - greyscale_config = /datum/greyscale_config/beret - greyscale_config_worn = /datum/greyscale_config/beret/worn - greyscale_colors = "#8F7654" - inhand_icon_state = "detective" - -/obj/item/clothing/head/hunter - name = "bounty hunting hat" - desc = "Ain't nobody gonna cheat the hangman in my town." - icon_state = "cowboy" - worn_icon_state = "hunter" - inhand_icon_state = "hunter" - armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/cone - desc = "This cone is trying to warn you of something!" - name = "warning cone" - icon = 'icons/obj/janitor.dmi' - icon_state = "cone" - inhand_icon_state = "cone" - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - attack_verb_continuous = list("warns", "cautions", "smashes") - attack_verb_simple = list("warn", "caution", "smash") - resistance_flags = NONE - dynamic_hair_suffix = "" - -/obj/item/clothing/head/santa - name = "santa hat" - desc = "On the first day of christmas my employer gave to me!" - icon_state = "santahatnorm" - inhand_icon_state = "that" - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_fashion = /datum/dog_fashion/head/santa - -/obj/item/clothing/head/jester - name = "jester hat" - desc = "A hat with bells, to add some merriness to the suit." - icon_state = "jester_hat" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/jester/alt - icon_state = "jester2" - -/obj/item/clothing/head/rice_hat - name = "rice hat" - desc = "Welcome to the rice fields, motherfucker." - icon_state = "rice_hat" - -/obj/item/clothing/head/lizard - name = "lizardskin cloche hat" - desc = "How many lizards died to make this hat? Not enough." - icon_state = "lizard" - -/obj/item/clothing/head/papersack - name = "paper sack hat" - desc = "A paper sack with crude holes cut out for eyes. Useful for hiding one's identity or ugliness." - icon_state = "papersack" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT - -/obj/item/clothing/head/papersack/smiley - name = "paper sack hat" - desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." - icon_state = "papersack_smile" - -/obj/item/clothing/head/crown - name = "crown" - desc = "A crown fit for a king, a petty king maybe." - icon_state = "crown" - armor = list(MELEE = 15, BULLET = 0, LASER = 0,ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, WOUND = 5) - resistance_flags = FIRE_PROOF - dynamic_hair_suffix = "" - -/obj/item/clothing/head/crown/fancy - name = "magnificent crown" - desc = "A crown worn by only the highest emperors of the land space." - icon_state = "fancycrown" - -/obj/item/clothing/head/scarecrow_hat - name = "scarecrow hat" - desc = "A simple straw hat." - icon_state = "scarecrow_hat" - -/obj/item/clothing/head/lobsterhat - name = "foam lobster head" - desc = "When everything's going to crab, protecting your head is the best choice." - icon_state = "lobster_hat" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/head/drfreezehat - name = "doctor freeze's wig" - desc = "A cool wig for cool people." - icon_state = "drfreeze_hat" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/pharaoh - name = "pharaoh hat" - desc = "Walk like an Egyptian." - icon_state = "pharoah_hat" - inhand_icon_state = "pharoah_hat" - -/obj/item/clothing/head/nemes - name = "headdress of Nemes" - desc = "Lavish space tomb not included." - icon_state = "nemes_headdress" - -/obj/item/clothing/head/delinquent - name = "delinquent hat" - desc = "Good grief." - icon_state = "delinquent" - -/obj/item/clothing/head/frenchberet - name = "french beret" - desc = "A quality beret, infused with the aroma of chain-smoking, wine-swilling Parisians. You feel less inclined to engage in military conflict, for some reason." - icon_state = "beret" - greyscale_config = /datum/greyscale_config/beret - greyscale_config_worn = /datum/greyscale_config/beret/worn - greyscale_colors = "#972A2A" - dynamic_hair_suffix = "" - -/obj/item/clothing/head/frenchberet/equipped(mob/M, slot) - . = ..() - if (slot == ITEM_SLOT_HEAD) - RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) - else - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/clothing/head/frenchberet/dropped(mob/M) - . = ..() - UnregisterSignal(M, COMSIG_MOB_SAY) - -/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, mob/speech_args) - SIGNAL_HANDLER - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = " [message]" - var/list/french_words = strings("french_replacement.json", "french") - - for(var/key in french_words) - var/value = french_words[key] - if(islist(value)) - value = pick(value) - - message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") - message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") - message = replacetextEx(message, " [key]", " [value]") - - if(prob(3)) - message += pick(" Honh honh honh!"," Honh!"," Zut Alors!") - speech_args[SPEECH_MESSAGE] = trim(message) - -/obj/item/clothing/head/clownmitre - name = "Hat of the Honkmother" - desc = "It's hard for parishoners to see a banana peel on the floor when they're looking up at your glorious chapeau." - icon_state = "clownmitre" - -/obj/item/clothing/head/kippah - name = "kippah" - desc = "Signals that you follow the Jewish Halakha. Keeps the head covered and the soul extra-Orthodox." - icon_state = "kippah" - -/obj/item/clothing/head/medievaljewhat - name = "medieval Jewish hat" - desc = "A silly looking hat, intended to be placed on the heads of the station's oppressed religious minorities." - icon_state = "medievaljewhat" - -/obj/item/clothing/head/taqiyahwhite - name = "white taqiyah" - desc = "An extra-mustahabb way of showing your devotion to Allah." - icon_state = "taqiyahwhite" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small - -/obj/item/clothing/head/taqiyahred - name = "red taqiyah" - desc = "An extra-mustahabb way of showing your devotion to Allah." - icon_state = "taqiyahred" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small - -/obj/item/clothing/head/shrine_wig - name = "shrine maiden's wig" - desc = "Purify in style!" - flags_inv = HIDEHAIR //bald - icon_state = "shrine_wig" - inhand_icon_state = "shrine_wig" - dynamic_hair_suffix = "" - worn_y_offset = 1 - -/obj/item/clothing/head/intern - name = "\improper CentCom Head Intern beancap" - desc = "A horrifying mix of beanie and softcap in CentCom green. You'd have to be pretty desperate for power over your peers to agree to wear this." - icon_state = "intern_hat" - inhand_icon_state = "intern_hat" - -/obj/item/clothing/head/coordinator - name = "coordinator cap" - desc = "A cap for a party coordinator, stylish!." - icon_state = "capcap" - inhand_icon_state = "that" - armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 35, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) - -/obj/item/clothing/head/jackbros - name = "frosty hat" - desc = "Hee-ho!" - icon_state = "JackFrostHat" - inhand_icon_state = "JackFrostHat" - -/obj/item/clothing/head/weddingveil - name = "wedding veil" - desc = "A gauzy white veil." - icon_state = "weddingveil" - inhand_icon_state = "weddingveil" - -/obj/item/clothing/head/centcom_cap - name = "\improper CentCom commander cap" - icon_state = "centcom_cap" - desc = "Worn by the finest of CentCom commanders. Inside the lining of the cap, lies two faint initials." - inhand_icon_state = "that" - flags_inv = 0 - armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) - strip_delay = (8 SECONDS) - -/obj/item/clothing/head/human_leather - name = "human skin hat" - desc = "This will scare them. All will know my power." - icon_state = "human_leather" - inhand_icon_state = "human_leather" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm deleted file mode 100644 index 892900922f4..00000000000 --- a/code/modules/clothing/head/misc_special.dm +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Contents: - * Welding mask - * Cakehat - * Ushanka - * Pumpkin head - * Kitty ears - * Cardborg disguise - * Wig - * Bronze hat - */ - -/* - * Welding mask - */ -/obj/item/clothing/head/welding - name = "welding helmet" - desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." - icon_state = "welding" - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - inhand_icon_state = "welding" - custom_materials = list(/datum/material/iron=1750, /datum/material/glass=400) - flash_protect = FLASH_PROTECTION_WELDER - tint = 2 - armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 60) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT - actions_types = list(/datum/action/item_action/toggle) - visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - resistance_flags = FIRE_PROOF - clothing_flags = SNUG_FIT - -/obj/item/clothing/head/welding/attack_self(mob/user) - weldingvisortoggle(user) - -/* - * Cakehat - */ -/obj/item/clothing/head/hardhat/cakehat - name = "cakehat" - desc = "You put the cake on your head. Brilliant." - icon_state = "hardhat0_cakehat" - inhand_icon_state = "hardhat0_cakehat" - hat_type = "cakehat" - lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' - hitsound = 'sound/weapons/tap.ogg' - var/hitsound_on = 'sound/weapons/sear.ogg' //so we can differentiate between cakehat and energyhat - var/hitsound_off = 'sound/weapons/tap.ogg' - var/force_on = 15 - var/throwforce_on = 15 - var/damtype_on = BURN - flags_inv = HIDEEARS|HIDEHAIR - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) - light_range = 2 //luminosity when on - light_system = MOVABLE_LIGHT - flags_cover = HEADCOVERSEYES - heat = 999 - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/cakehat/process() - var/turf/location = src.loc - if(ishuman(location)) - var/mob/living/carbon/human/M = location - if(M.is_holding(src) || M.head == src) - location = M.loc - - if(isturf(location)) - location.hotspot_expose(700, 1) - -/obj/item/clothing/head/hardhat/cakehat/turn_on(mob/living/user) - ..() - force = force_on - throwforce = throwforce_on - damtype = damtype_on - hitsound = hitsound_on - START_PROCESSING(SSobj, src) - -/obj/item/clothing/head/hardhat/cakehat/turn_off(mob/living/user) - ..() - force = 0 - throwforce = 0 - damtype = BRUTE - hitsound = hitsound_off - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/head/hardhat/cakehat/get_temperature() - return on * heat - -/obj/item/clothing/head/hardhat/cakehat/energycake - name = "energy cake" - desc = "You put the energy sword on your cake. Brilliant." - icon_state = "hardhat0_energycake" - inhand_icon_state = "hardhat0_energycake" - hat_type = "energycake" - hitsound = 'sound/weapons/tap.ogg' - hitsound_on = 'sound/weapons/blade1.ogg' - hitsound_off = 'sound/weapons/tap.ogg' - damtype_on = BRUTE - force_on = 18 //same as epen (but much more obvious) - light_range = 3 //ditto - heat = 0 - -/obj/item/clothing/head/hardhat/cakehat/energycake/turn_on(mob/living/user) - playsound(user, 'sound/weapons/saberon.ogg', 5, TRUE) - to_chat(user, span_warning("You turn on \the [src].")) - ..() - -/obj/item/clothing/head/hardhat/cakehat/energycake/turn_off(mob/living/user) - playsound(user, 'sound/weapons/saberoff.ogg', 5, TRUE) - to_chat(user, span_warning("You turn off \the [src].")) - ..() - -/* - * Ushanka - */ -/obj/item/clothing/head/ushanka - name = "ushanka" - desc = "Perfect for winter in Siberia, da?" - icon_state = "ushankadown" - inhand_icon_state = "ushankadown" - flags_inv = HIDEEARS|HIDEHAIR - var/earflaps = TRUE - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - - dog_fashion = /datum/dog_fashion/head/ushanka - -/obj/item/clothing/head/ushanka/attack_self(mob/user) - if(earflaps) - icon_state = "ushankaup" - inhand_icon_state = "ushankaup" - to_chat(user, span_notice("You raise the ear flaps on the ushanka.")) - else - icon_state = "ushankadown" - inhand_icon_state = "ushankadown" - to_chat(user, span_notice("You lower the ear flaps on the ushanka.")) - earflaps = !earflaps - -/* - * Pumpkin head - */ -/obj/item/clothing/head/hardhat/pumpkinhead - name = "carved pumpkin" - desc = "A jack o' lantern! Believed to ward off evil spirits." - icon_state = "hardhat0_pumpkin" - inhand_icon_state = "hardhat0_pumpkin" - hat_type = "pumpkin" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) - light_range = 2 //luminosity when on - flags_cover = HEADCOVERSEYES - light_color = "#fff2bf" - worn_y_offset = 1 - - -/obj/item/clothing/head/hardhat/pumpkinhead/set_light_on(new_value) - . = ..() - if(isnull(.)) - return - update_icon(UPDATE_OVERLAYS) - - -/obj/item/clothing/head/hardhat/pumpkinhead/update_overlays() - . = ..() - if(light_on) - . += emissive_appearance(icon, "carved_pumpkin-emissive", alpha = src.alpha) - -/obj/item/clothing/head/hardhat/pumpkinhead/worn_overlays(isinhands) - . = ..() - if(!isinhands) - . += emissive_appearance(worn_icon, "carved_pumpkin-emissive", alpha = src.alpha, appearance_flags = KEEP_APART) - -/obj/item/clothing/head/hardhat/pumpkinhead/blumpkin - name = "carved blumpkin" - desc = "A very blue jack o' lantern! Believed to ward off vengeful chemists." - icon_state = "hardhat0_blumpkin" - inhand_icon_state = "hardhat0_blumpkin" - hat_type = "blumpkin" - light_color = "#76ff8e" -/* - * Kitty ears - */ -/obj/item/clothing/head/kitty - name = "kitty ears" - desc = "A pair of kitty ears. Meow!" - icon_state = "kitty" - color = "#999999" - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/kitty - -/obj/item/clothing/head/kitty/visual_equipped(mob/living/carbon/human/user, slot) - if(ishuman(user) && slot == ITEM_SLOT_HEAD) - update_icon(ALL, user) - user.update_inv_head() //Color might have been changed by update_appearance. - ..() - -/obj/item/clothing/head/kitty/update_icon(updates=ALL, mob/living/carbon/human/user) - . = ..() - if(ishuman(user)) - add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) - -/obj/item/clothing/head/kitty/genuine - desc = "A pair of kitty ears. A tag on the inside says \"Hand made from real cats.\"" - -/obj/item/clothing/head/hardhat/reindeer - name = "novelty reindeer hat" - desc = "Some fake antlers and a very fake red nose." - icon_state = "hardhat0_reindeer" - inhand_icon_state = "hardhat0_reindeer" - hat_type = "reindeer" - flags_inv = 0 - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) - light_range = 1 //luminosity when on - dynamic_hair_suffix = "" - - dog_fashion = /datum/dog_fashion/head/reindeer - -/obj/item/clothing/head/cardborg - name = "cardborg helmet" - desc = "A helmet made out of a box." - icon_state = "cardborg_h" - inhand_icon_state = "cardborg_h" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - - dog_fashion = /datum/dog_fashion/head/cardborg - -/obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) - ..() - if(ishuman(user) && slot == ITEM_SLOT_HEAD) - var/mob/living/carbon/human/H = user - if(istype(H.wear_suit, /obj/item/clothing/suit/cardborg)) - var/obj/item/clothing/suit/cardborg/CB = H.wear_suit - CB.disguise(user, src) - -/obj/item/clothing/head/cardborg/dropped(mob/living/user) - ..() - user.remove_alt_appearance("standard_borg_disguise") - -/obj/item/clothing/head/wig - name = "wig" - desc = "A bunch of hair without a head attached." - icon = 'icons/mob/human_face.dmi' // default icon for all hairs - icon_state = "hair_vlong" - inhand_icon_state = "pwig" - worn_icon_state = "wig" - flags_inv = HIDEHAIR - color = "#000" - var/hairstyle = "Very Long Hair" - var/adjustablecolor = TRUE //can color be changed manually? - -/obj/item/clothing/head/wig/Initialize(mapload) - . = ..() - update_appearance() - -/obj/item/clothing/head/wig/equipped(mob/user, slot) - . = ..() - if(ishuman(user) && slot == ITEM_SLOT_HEAD) - item_flags |= EXAMINE_SKIP - -/obj/item/clothing/head/wig/dropped(mob/user) - . = ..() - item_flags &= ~EXAMINE_SKIP - -/obj/item/clothing/head/wig/update_icon_state() - var/datum/sprite_accessory/hair_style = GLOB.hairstyles_list[hairstyle] - if(hair_style) - icon_state = hair_style.icon_state - return ..() - - -/obj/item/clothing/head/wig/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use) - . = ..() - if(isinhands) - return - - var/datum/sprite_accessory/hair = GLOB.hairstyles_list[hairstyle] - if(!hair) - return - - var/mutable_appearance/hair_overlay = mutable_appearance(hair.icon, hair.icon_state, layer = -HAIR_LAYER, appearance_flags = RESET_COLOR) - hair_overlay.color = color - . += hair_overlay - - // So that the wig actually blocks emissives. - var/mutable_appearance/hair_blocker = mutable_appearance(hair.icon, hair.icon_state, plane = EMISSIVE_PLANE, appearance_flags = KEEP_APART) - hair_blocker.color = GLOB.em_block_color - hair_overlay.overlays += hair_blocker - -/obj/item/clothing/head/wig/attack_self(mob/user) - var/new_style = input(user, "Select a hairstyle", "Wig Styling") as null|anything in (GLOB.hairstyles_list - "Bald") - var/newcolor = adjustablecolor ? input(usr,"","Choose Color",color) as color|null : null - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(new_style && new_style != hairstyle) - hairstyle = new_style - user.visible_message(span_notice("[user] changes \the [src]'s hairstyle to [new_style]."), span_notice("You change \the [src]'s hairstyle to [new_style].")) - if(newcolor && newcolor != color) // only update if necessary - add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - update_appearance() - -/obj/item/clothing/head/wig/afterattack(mob/living/carbon/human/target, mob/user) - . = ..() - if(!istype(target)) - return - - if(target.head) - var/obj/item/clothing/head = target.head - if((head.flags_inv & HIDEHAIR) && !istype(head, /obj/item/clothing/head/wig)) - to_chat(user, span_warning("You can't get a good look at [target.p_their()] hair!")) - return - - var/selected_hairstyle = null - var/selected_hairstyle_color = null - if(istype(target.head, /obj/item/clothing/head/wig)) - var/obj/item/clothing/head/wig/wig = target.head - selected_hairstyle = wig.hairstyle - selected_hairstyle_color = wig.color - else if((HAIR in target.dna.species.species_traits) && target.hairstyle != "Bald") - selected_hairstyle = target.hairstyle - selected_hairstyle_color = "#[target.hair_color]" - - if(selected_hairstyle) - to_chat(user, span_notice("You adjust the [src] to look just like [target.name]'s [selected_hairstyle].")) - add_atom_colour(selected_hairstyle_color, FIXED_COLOUR_PRIORITY) - hairstyle = selected_hairstyle - update_appearance() - -/obj/item/clothing/head/wig/random/Initialize(mapload) - hairstyle = pick(GLOB.hairstyles_list - "Bald") //Don't want invisible wig - add_atom_colour("#[random_short_color()]", FIXED_COLOUR_PRIORITY) - . = ..() - -/obj/item/clothing/head/wig/natural - name = "natural wig" - desc = "A bunch of hair without a head attached. This one changes color to match the hair of the wearer. Nothing natural about that." - color = "#FFF" - adjustablecolor = FALSE - custom_price = PAYCHECK_HARD - -/obj/item/clothing/head/wig/natural/Initialize(mapload) - hairstyle = pick(GLOB.hairstyles_list - "Bald") - . = ..() - -/obj/item/clothing/head/wig/natural/visual_equipped(mob/living/carbon/human/user, slot) - . = ..() - if(ishuman(user) && slot == ITEM_SLOT_HEAD) - if (color != "#[user.hair_color]") // only update if necessary - add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) - update_appearance() - user.update_inv_head() - -/obj/item/clothing/head/bronze - name = "bronze hat" - desc = "A crude helmet made out of bronze plates. It offers very little in the way of protection." - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_helmet_old" - clothing_flags = SNUG_FIT - flags_inv = HIDEEARS|HIDEHAIR - armor = list(MELEE = 5, BULLET = 0, LASER = -5, ENERGY = -15, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 20) - -/obj/item/clothing/head/foilhat - name = "tinfoil hat" - desc = "Thought control rays, psychotronic scanning. Don't mind that, I'm protected cause I made this hat." - icon_state = "foilhat" - inhand_icon_state = "foilhat" - armor = list(MELEE = 0, BULLET = 0, LASER = -5,ENERGY = -15, BOMB = 0, BIO = 0, RAD = -5, FIRE = 0, ACID = 0) - equip_delay_other = 140 - clothing_flags = ANTI_TINFOIL_MANEUVER - var/datum/brain_trauma/mild/phobia/conspiracies/paranoia - var/warped = FALSE - -/obj/item/clothing/head/foilhat/Initialize(mapload) - . = ..() - if(!warped) - AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, .proc/warp_up)) - else - warp_up() - -/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(slot != ITEM_SLOT_HEAD || warped) - return - if(paranoia) - QDEL_NULL(paranoia) - paranoia = new() - - user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC) - to_chat(user, span_warning("As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. ")) - -/obj/item/clothing/head/foilhat/MouseDrop(atom/over_object) - //God Im sorry - if(!warped && iscarbon(usr)) - var/mob/living/carbon/C = usr - if(src == C.head) - to_chat(C, span_userdanger("Why would you want to take this off? Do you want them to get into your mind?!")) - return - return ..() - -/obj/item/clothing/head/foilhat/dropped(mob/user) - . = ..() - if(paranoia) - QDEL_NULL(paranoia) - -/obj/item/clothing/head/foilhat/proc/warp_up() - name = "scorched tinfoil hat" - desc = "A badly warped up hat. Quite unprobable this will still work against any of fictional and contemporary dangers it used to." - warped = TRUE - clothing_flags &= ~ANTI_TINFOIL_MANEUVER - if(!isliving(loc) || !paranoia) - return - var/mob/living/target = loc - if(target.get_item_by_slot(ITEM_SLOT_HEAD) != src) - return - QDEL_NULL(paranoia) - if(target.stat < UNCONSCIOUS) - to_chat(target, span_warning("Your zealous conspirationism rapidly dissipates as the donned hat warps up into a ruined mess. All those theories starting to sound like nothing but a ridicolous fanfare.")) - -/obj/item/clothing/head/foilhat/attack_hand(mob/user, list/modifiers) - if(!warped && iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.head) - to_chat(user, span_userdanger("Why would you want to take this off? Do you want them to get into your mind?!")) - return - return ..() - -/obj/item/clothing/head/foilhat/microwave_act(obj/machinery/microwave/M) - . = ..() - if(!warped) - warp_up() diff --git a/code/modules/clothing/head/papersack.dm b/code/modules/clothing/head/papersack.dm new file mode 100644 index 00000000000..162dbad611b --- /dev/null +++ b/code/modules/clothing/head/papersack.dm @@ -0,0 +1,10 @@ +/obj/item/clothing/head/papersack + name = "paper sack hat" + desc = "A paper sack with crude holes cut out for eyes. Useful for hiding one's identity or ugliness." + icon_state = "papersack" + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT + +/obj/item/clothing/head/papersack/smiley + name = "paper sack hat" + desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." + icon_state = "papersack_smile" diff --git a/code/modules/clothing/head/pirate.dm b/code/modules/clothing/head/pirate.dm new file mode 100644 index 00000000000..70829a6abb5 --- /dev/null +++ b/code/modules/clothing/head/pirate.dm @@ -0,0 +1,48 @@ +/obj/item/clothing/head/pirate + name = "pirate hat" + desc = "Yarr." + icon_state = "pirate" + inhand_icon_state = "pirate" + dog_fashion = /datum/dog_fashion/head/pirate + +/obj/item/clothing/head/pirate + var/datum/language/piratespeak/L = new + +/obj/item/clothing/head/pirate/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + if(slot == ITEM_SLOT_HEAD) + user.grant_language(/datum/language/piratespeak/, TRUE, TRUE, LANGUAGE_HAT) + to_chat(user, span_boldnotice("You suddenly know how to speak like a pirate!")) + +/obj/item/clothing/head/pirate/dropped(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(ITEM_SLOT_HEAD) == src && !QDELETED(src)) //This can be called as a part of destroy + user.remove_language(/datum/language/piratespeak/, TRUE, TRUE, LANGUAGE_HAT) + to_chat(user, span_boldnotice("You can no longer speak like a pirate.")) + +/obj/item/clothing/head/pirate/armored + armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) + strip_delay = 40 + equip_delay_other = 20 + +/obj/item/clothing/head/pirate/captain + name = "pirate captain hat" + icon_state = "hgpiratecap" + inhand_icon_state = "hgpiratecap" + +/obj/item/clothing/head/bandana + name = "pirate bandana" + desc = "Yarr." + icon_state = "bandana" + inhand_icon_state = "bandana" + dynamic_hair_suffix = "" + +/obj/item/clothing/head/bandana/armored + armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) + strip_delay = 40 + equip_delay_other = 20 diff --git a/code/modules/clothing/head/religious.dm b/code/modules/clothing/head/religious.dm new file mode 100644 index 00000000000..cd4e5b4ad1f --- /dev/null +++ b/code/modules/clothing/head/religious.dm @@ -0,0 +1,26 @@ +/obj/item/clothing/head/clownmitre + name = "Hat of the Honkmother" + desc = "It's hard for parishoners to see a banana peel on the floor when they're looking up at your glorious chapeau." + icon_state = "clownmitre" + +/obj/item/clothing/head/kippah + name = "kippah" + desc = "Signals that you follow the Jewish Halakha. Keeps the head covered and the soul extra-Orthodox." + icon_state = "kippah" + +/obj/item/clothing/head/medievaljewhat + name = "medieval Jewish hat" + desc = "A silly looking hat, intended to be placed on the heads of the station's oppressed religious minorities." + icon_state = "medievaljewhat" + +/obj/item/clothing/head/taqiyahwhite + name = "white taqiyah" + desc = "An extra-mustahabb way of showing your devotion to Allah." + icon_state = "taqiyahwhite" + pocket_storage_component_path = /datum/component/storage/concrete/pockets/small + +/obj/item/clothing/head/taqiyahred + name = "red taqiyah" + desc = "An extra-mustahabb way of showing your devotion to Allah." + icon_state = "taqiyahred" + pocket_storage_component_path = /datum/component/storage/concrete/pockets/small diff --git a/code/modules/clothing/head/sombrero.dm b/code/modules/clothing/head/sombrero.dm new file mode 100644 index 00000000000..d2312449468 --- /dev/null +++ b/code/modules/clothing/head/sombrero.dm @@ -0,0 +1,34 @@ +/obj/item/clothing/head/sombrero + name = "sombrero" + icon_state = "sombrero" + inhand_icon_state = "sombrero" + desc = "You can practically taste the fiesta." + flags_inv = HIDEHAIR + + dog_fashion = /datum/dog_fashion/head/sombrero + + greyscale_config = /datum/greyscale_config/sombrero + greyscale_config_worn = /datum/greyscale_config/sombrero/worn + greyscale_config_inhand_left = /datum/greyscale_config/sombrero/lefthand + greyscale_config_inhand_right = /datum/greyscale_config/sombrero/righthand + +/obj/item/clothing/head/sombrero/green + name = "green sombrero" + desc = "As elegant as a dancing cactus." + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + dog_fashion = null + greyscale_colors = "#13d968#ffffff" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/sombrero/shamebrero + name = "shamebrero" + icon_state = "shamebrero" + inhand_icon_state = "shamebrero" + desc = "Once it's on, it never comes off." + dog_fashion = null + greyscale_colors = "#d565d3#f8db18" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/sombrero/shamebrero/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT) diff --git a/code/modules/clothing/head/tinfoilhat.dm b/code/modules/clothing/head/tinfoilhat.dm new file mode 100644 index 00000000000..d07b304408d --- /dev/null +++ b/code/modules/clothing/head/tinfoilhat.dm @@ -0,0 +1,69 @@ +/obj/item/clothing/head/foilhat + name = "tinfoil hat" + desc = "Thought control rays, psychotronic scanning. Don't mind that, I'm protected cause I made this hat." + icon_state = "foilhat" + inhand_icon_state = "foilhat" + armor = list(MELEE = 0, BULLET = 0, LASER = -5,ENERGY = -15, BOMB = 0, BIO = 0, RAD = -5, FIRE = 0, ACID = 0) + equip_delay_other = 140 + clothing_flags = ANTI_TINFOIL_MANEUVER + var/datum/brain_trauma/mild/phobia/conspiracies/paranoia + var/warped = FALSE + +/obj/item/clothing/head/foilhat/Initialize(mapload) + . = ..() + if(!warped) + AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, .proc/warp_up)) + else + warp_up() + +/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(slot != ITEM_SLOT_HEAD || warped) + return + if(paranoia) + QDEL_NULL(paranoia) + paranoia = new() + + user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC) + to_chat(user, span_warning("As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. ")) + +/obj/item/clothing/head/foilhat/MouseDrop(atom/over_object) + //God Im sorry + if(!warped && iscarbon(usr)) + var/mob/living/carbon/C = usr + if(src == C.head) + to_chat(C, span_userdanger("Why would you want to take this off? Do you want them to get into your mind?!")) + return + return ..() + +/obj/item/clothing/head/foilhat/dropped(mob/user) + . = ..() + if(paranoia) + QDEL_NULL(paranoia) + +/obj/item/clothing/head/foilhat/proc/warp_up() + name = "scorched tinfoil hat" + desc = "A badly warped up hat. Quite unprobable this will still work against any of fictional and contemporary dangers it used to." + warped = TRUE + clothing_flags &= ~ANTI_TINFOIL_MANEUVER + if(!isliving(loc) || !paranoia) + return + var/mob/living/target = loc + if(target.get_item_by_slot(ITEM_SLOT_HEAD) != src) + return + QDEL_NULL(paranoia) + if(target.stat < UNCONSCIOUS) + to_chat(target, span_warning("Your zealous conspirationism rapidly dissipates as the donned hat warps up into a ruined mess. All those theories starting to sound like nothing but a ridicolous fanfare.")) + +/obj/item/clothing/head/foilhat/attack_hand(mob/user, list/modifiers) + if(!warped && iscarbon(user)) + var/mob/living/carbon/wearer = user + if(src == wearer.head) + to_chat(user, span_userdanger("Why would you want to take this off? Do you want them to get into your mind?!")) + return + return ..() + +/obj/item/clothing/head/foilhat/microwave_act(obj/machinery/microwave/M) + . = ..() + if(!warped) + warp_up() diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm new file mode 100644 index 00000000000..c3cfa88a872 --- /dev/null +++ b/code/modules/clothing/head/tophat.dm @@ -0,0 +1,40 @@ +#define RABBIT_CD_TIME 30 SECONDS + +/obj/item/clothing/head/that + name = "top-hat" + desc = "It's an amish looking hat." + icon_state = "tophat" + inhand_icon_state = "that" + dog_fashion = /datum/dog_fashion/head + throwforce = 1 + /// Cooldown for how often we can pull rabbits out of here + COOLDOWN_DECLARE(rabbit_cooldown) + +/obj/item/clothing/head/that/attackby(obj/item/hitby_item, mob/user, params) + . = ..() + if(istype(hitby_item, /obj/item/gun/magic/wand)) + abracadabra(hitby_item, user) + +/obj/item/clothing/head/that/proc/abracadabra(obj/item/hitby_wand, mob/magician) + if(!COOLDOWN_FINISHED(src, rabbit_cooldown)) + to_chat(span_warning("You can't find another rabbit in [src]! Seems another hasn't gotten lost in there yet...")) + return + + COOLDOWN_START(src, rabbit_cooldown, RABBIT_CD_TIME) + playsound(get_turf(src), 'sound/weapons/emitter.ogg', 70) + do_smoke(range=1, location=src, smoke_type=/obj/effect/particle_effect/smoke/quick) + + if(prob(10)) + magician.visible_message(span_danger("[magician] taps [src] with [hitby_wand], then reaches in and pulls out a bu- wait, those are bees!"), span_danger("You tap [src] with your [hitby_wand.name] and pull out... BEES!")) + var/wait_how_many_bees_did_that_guy_pull_out_of_his_hat = rand(4, 8) + for(var/b in 1 to wait_how_many_bees_did_that_guy_pull_out_of_his_hat) + var/mob/living/simple_animal/hostile/bee/barry = new(get_turf(magician)) + barry.GiveTarget(magician) + if(prob(20)) + barry.say(pick("BUZZ BUZZ", "PULLING A RABBIT OUT OF A HAT IS A TIRED TROPE", "I DIDN'T ASK TO BEE HERE"), forced = "bee hat") + else + magician.visible_message(span_notice("[magician] taps [src] with [hitby_wand], then reaches in and pulls out a bunny! Cute!"), span_notice("You tap [src] with your [hitby_wand.name] and pull out a cute bunny!")) + var/mob/living/simple_animal/rabbit/empty/bunbun = new(get_turf(magician)) + bunbun.mob_try_pickup(magician, instant=TRUE) + +#undef RABBIT_CD_TIME diff --git a/code/modules/clothing/head/welding.dm b/code/modules/clothing/head/welding.dm new file mode 100644 index 00000000000..6b17beb8074 --- /dev/null +++ b/code/modules/clothing/head/welding.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/head/welding + name = "welding helmet" + desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." + icon_state = "welding" + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + inhand_icon_state = "welding" + custom_materials = list(/datum/material/iron=1750, /datum/material/glass=400) + flash_protect = FLASH_PROTECTION_WELDER + tint = 2 + armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 60) + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT + actions_types = list(/datum/action/item_action/toggle) + visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT + visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + resistance_flags = FIRE_PROOF + clothing_flags = SNUG_FIT + +/obj/item/clothing/head/welding/attack_self(mob/user) + weldingvisortoggle(user) diff --git a/code/modules/clothing/head/wig.dm b/code/modules/clothing/head/wig.dm new file mode 100644 index 00000000000..5c374328a97 --- /dev/null +++ b/code/modules/clothing/head/wig.dm @@ -0,0 +1,112 @@ +/obj/item/clothing/head/wig + name = "wig" + desc = "A bunch of hair without a head attached." + icon = 'icons/mob/human_face.dmi' // default icon for all hairs + icon_state = "hair_vlong" + inhand_icon_state = "pwig" + worn_icon_state = "wig" + flags_inv = HIDEHAIR + color = "#000" + var/hairstyle = "Very Long Hair" + var/adjustablecolor = TRUE //can color be changed manually? + +/obj/item/clothing/head/wig/Initialize(mapload) + . = ..() + update_appearance() + +/obj/item/clothing/head/wig/equipped(mob/user, slot) + . = ..() + if(ishuman(user) && slot == ITEM_SLOT_HEAD) + item_flags |= EXAMINE_SKIP + +/obj/item/clothing/head/wig/dropped(mob/user) + . = ..() + item_flags &= ~EXAMINE_SKIP + +/obj/item/clothing/head/wig/update_icon_state() + var/datum/sprite_accessory/hair_style = GLOB.hairstyles_list[hairstyle] + if(hair_style) + icon_state = hair_style.icon_state + return ..() + + +/obj/item/clothing/head/wig/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use) + . = ..() + if(isinhands) + return + + var/datum/sprite_accessory/hair = GLOB.hairstyles_list[hairstyle] + if(!hair) + return + + var/mutable_appearance/hair_overlay = mutable_appearance(hair.icon, hair.icon_state, layer = -HAIR_LAYER, appearance_flags = RESET_COLOR) + hair_overlay.color = color + . += hair_overlay + + // So that the wig actually blocks emissives. + var/mutable_appearance/hair_blocker = mutable_appearance(hair.icon, hair.icon_state, plane = EMISSIVE_PLANE, appearance_flags = KEEP_APART) + hair_blocker.color = GLOB.em_block_color + hair_overlay.overlays += hair_blocker + +/obj/item/clothing/head/wig/attack_self(mob/user) + var/new_style = input(user, "Select a hairstyle", "Wig Styling") as null|anything in (GLOB.hairstyles_list - "Bald") + var/newcolor = adjustablecolor ? input(usr,"","Choose Color",color) as color|null : null + if(!user.canUseTopic(src, BE_CLOSE)) + return + if(new_style && new_style != hairstyle) + hairstyle = new_style + user.visible_message(span_notice("[user] changes \the [src]'s hairstyle to [new_style]."), span_notice("You change \the [src]'s hairstyle to [new_style].")) + if(newcolor && newcolor != color) // only update if necessary + add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) + update_appearance() + +/obj/item/clothing/head/wig/afterattack(mob/living/carbon/human/target, mob/user) + . = ..() + if(!istype(target)) + return + + if(target.head) + var/obj/item/clothing/head = target.head + if((head.flags_inv & HIDEHAIR) && !istype(head, /obj/item/clothing/head/wig)) + to_chat(user, span_warning("You can't get a good look at [target.p_their()] hair!")) + return + + var/selected_hairstyle = null + var/selected_hairstyle_color = null + if(istype(target.head, /obj/item/clothing/head/wig)) + var/obj/item/clothing/head/wig/wig = target.head + selected_hairstyle = wig.hairstyle + selected_hairstyle_color = wig.color + else if((HAIR in target.dna.species.species_traits) && target.hairstyle != "Bald") + selected_hairstyle = target.hairstyle + selected_hairstyle_color = "#[target.hair_color]" + + if(selected_hairstyle) + to_chat(user, span_notice("You adjust the [src] to look just like [target.name]'s [selected_hairstyle].")) + add_atom_colour(selected_hairstyle_color, FIXED_COLOUR_PRIORITY) + hairstyle = selected_hairstyle + update_appearance() + +/obj/item/clothing/head/wig/random/Initialize(mapload) + hairstyle = pick(GLOB.hairstyles_list - "Bald") //Don't want invisible wig + add_atom_colour("#[random_short_color()]", FIXED_COLOUR_PRIORITY) + . = ..() + +/obj/item/clothing/head/wig/natural + name = "natural wig" + desc = "A bunch of hair without a head attached. This one changes color to match the hair of the wearer. Nothing natural about that." + color = "#FFF" + adjustablecolor = FALSE + custom_price = PAYCHECK_HARD + +/obj/item/clothing/head/wig/natural/Initialize(mapload) + hairstyle = pick(GLOB.hairstyles_list - "Bald") + . = ..() + +/obj/item/clothing/head/wig/natural/visual_equipped(mob/living/carbon/human/user, slot) + . = ..() + if(ishuman(user) && slot == ITEM_SLOT_HEAD) + if (color != "#[user.hair_color]") // only update if necessary + add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) + update_appearance() + user.update_inv_head() diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm new file mode 100644 index 00000000000..da174abd25f --- /dev/null +++ b/code/modules/clothing/masks/bandana.dm @@ -0,0 +1,76 @@ +/obj/item/clothing/mask/bandana + name = "botany bandana" + desc = "A fine bandana with nanotech lining and a hydroponics pattern." + w_class = WEIGHT_CLASS_TINY + flags_cover = MASKCOVERSMOUTH + flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + visor_flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + visor_flags_cover = MASKCOVERSMOUTH | PEPPERPROOF + slot_flags = ITEM_SLOT_MASK + adjusted_flags = ITEM_SLOT_HEAD + icon_state = "bandbotany" + species_exception = list(/datum/species/golem) + +/obj/item/clothing/mask/bandana/attack_self(mob/user) + adjustmask(user) + +/obj/item/clothing/mask/bandana/AltClick(mob/user) + . = ..() + if(iscarbon(user)) + var/mob/living/carbon/C = user + if((C.get_item_by_slot(ITEM_SLOT_HEAD == src)) || (C.get_item_by_slot(ITEM_SLOT_MASK) == src)) + to_chat(user, span_warning("You can't tie [src] while wearing it!")) + return + if(slot_flags & ITEM_SLOT_HEAD) + to_chat(user, span_warning("You must undo [src] before you can tie it into a neckerchief!")) + else + if(user.is_holding(src)) + var/obj/item/clothing/neck/neckerchief/nk = new(src) + nk.name = "[name] neckerchief" + nk.desc = "[desc] It's tied up like a neckerchief." + nk.icon_state = icon_state + nk.item_flags = item_flags + nk.worn_icon = 'icons/misc/hidden.dmi' //hide underlying neckerchief object while it applies its own mutable appearance + nk.sourceBandanaType = src.type + var/currentHandIndex = user.get_held_index_of_item(src) + user.transferItemToLoc(src, null) + user.put_in_hand(nk, currentHandIndex) + user.visible_message(span_notice("[user] ties [src] up like a neckerchief."), span_notice("You tie [src] up like a neckerchief.")) + qdel(src) + else + to_chat(user, span_warning("You must be holding [src] in order to tie it!")) + +/obj/item/clothing/mask/bandana/red + name = "red bandana" + desc = "A fine red bandana with nanotech lining." + icon_state = "bandred" + +/obj/item/clothing/mask/bandana/blue + name = "blue bandana" + desc = "A fine blue bandana with nanotech lining." + icon_state = "bandblue" + +/obj/item/clothing/mask/bandana/green + name = "green bandana" + desc = "A fine green bandana with nanotech lining." + icon_state = "bandgreen" + +/obj/item/clothing/mask/bandana/gold + name = "gold bandana" + desc = "A fine gold bandana with nanotech lining." + icon_state = "bandgold" + +/obj/item/clothing/mask/bandana/black + name = "black bandana" + desc = "A fine black bandana with nanotech lining." + icon_state = "bandblack" + +/obj/item/clothing/mask/bandana/skull + name = "skull bandana" + desc = "A fine black bandana with nanotech lining and a skull emblem." + icon_state = "bandskull" + +/obj/item/clothing/mask/bandana/durathread + name = "durathread bandana" + desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..." + icon_state = "banddurathread" diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm new file mode 100644 index 00000000000..f269a0ca5a8 --- /dev/null +++ b/code/modules/clothing/masks/costume.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/mask/joy + name = "joy mask" + desc = "Express your happiness or hide your sorrows with this laughing face with crying tears of joy cutout." + icon_state = "joy" + flags_inv = HIDESNOUT + +/obj/item/clothing/mask/mummy + name = "mummy mask" + desc = "Ancient bandages." + icon_state = "mummy_mask" + inhand_icon_state = "mummy_mask" + flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/mask/scarecrow + name = "sack mask" + desc = "A burlap sack with eyeholes." + icon_state = "scarecrow_sack" + inhand_icon_state = "scarecrow_sack" + flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT diff --git a/code/modules/clothing/masks/gondola.dm b/code/modules/clothing/masks/gondola.dm new file mode 100644 index 00000000000..683b8a07d31 --- /dev/null +++ b/code/modules/clothing/masks/gondola.dm @@ -0,0 +1,22 @@ +/obj/item/clothing/mask/gondola + name = "gondola mask" + desc = "Genuine gondola fur." + icon_state = "gondola" + inhand_icon_state = "gondola" + flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + w_class = WEIGHT_CLASS_SMALL + modifies_speech = TRUE + +/obj/item/clothing/mask/gondola/handle_speech(datum/source, list/speech_args) + var/message = speech_args[SPEECH_MESSAGE] + if(message[1] != "*") + message = " [message]" + var/list/spurdo_words = strings("spurdo_replacement.json", "spurdo") + for(var/key in spurdo_words) + var/value = spurdo_words[key] + if(islist(value)) + value = pick(value) + message = replacetextEx(message,regex(uppertext(key),"g"), "[uppertext(value)]") + message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]") + message = replacetextEx(message,regex(key,"g"), "[value]") + speech_args[SPEECH_MESSAGE] = trim(message) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm deleted file mode 100644 index 635ad10314b..00000000000 --- a/code/modules/clothing/masks/miscellaneous.dm +++ /dev/null @@ -1,209 +0,0 @@ -/obj/item/clothing/mask/muzzle - name = "muzzle" - desc = "To stop that awful noise." - icon_state = "muzzle" - inhand_icon_state = "blindfold" - clothing_flags = BLOCKS_SPEECH - flags_cover = MASKCOVERSMOUTH - w_class = WEIGHT_CLASS_SMALL - gas_transfer_coefficient = 0.9 - equip_delay_other = 20 - -/obj/item/clothing/mask/muzzle/attack_paw(mob/user, list/modifiers) - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - if(src == carbon_user.wear_mask) - to_chat(user, span_warning("You need help taking this off!")) - return - ..() - -/obj/item/clothing/mask/breathmuzzle - name = "surgery mask" - desc = "To silence those pesky patients before putting them under." - icon_state = "breathmuzzle" - inhand_icon_state = "breathmuzzle" - body_parts_covered = NONE - clothing_flags = MASKINTERNALS | BLOCKS_SPEECH - gas_transfer_coefficient = 0.1 - permeability_coefficient = 0.01 - equip_delay_other = 25 // my sprite has 4 straps, a-la a head harness. takes a while to equip, longer than a muzzle - -/obj/item/clothing/mask/breathmuzzle/attack_paw(mob/user, list/modifiers) - // The breathmuzzle is similar enough to a regular muzzle that similar rules would apply to both. - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - if(src == carbon_user.wear_mask) - to_chat(user, span_warning("You need help taking this off!")) - return - ..() - -/obj/item/clothing/mask/surgical - name = "sterile mask" - desc = "A sterile mask designed to help prevent the spread of diseases." - icon_state = "sterile" - inhand_icon_state = "sterile" - w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEFACE|HIDESNOUT - flags_cover = MASKCOVERSMOUTH - visor_flags_inv = HIDEFACE|HIDESNOUT - visor_flags_cover = MASKCOVERSMOUTH - gas_transfer_coefficient = 0.9 - permeability_coefficient = 0.01 - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 25, RAD = 0, FIRE = 0, ACID = 0) - actions_types = list(/datum/action/item_action/adjust) - -/obj/item/clothing/mask/surgical/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/fakemoustache - name = "fake moustache" - desc = "Warning: moustache is fake." - icon_state = "fake-moustache" - w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEFACE - species_exception = list(/datum/species/golem) - -/obj/item/clothing/mask/fakemoustache/italian - name = "italian moustache" - desc = "Made from authentic Italian moustache hairs. Gives the wearer an irresistable urge to gesticulate wildly." - modifies_speech = TRUE - -/obj/item/clothing/mask/fakemoustache/italian/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = " [message]" - var/list/italian_words = strings("italian_replacement.json", "italian") - - for(var/key in italian_words) - var/value = italian_words[key] - if(islist(value)) - value = pick(value) - - message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") - message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") - message = replacetextEx(message, " [key]", " [value]") - - if(prob(3)) - message += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!") - speech_args[SPEECH_MESSAGE] = trim(message) - -/obj/item/clothing/mask/joy - name = "joy mask" - desc = "Express your happiness or hide your sorrows with this laughing face with crying tears of joy cutout." - icon_state = "joy" - flags_inv = HIDESNOUT - - -/obj/item/clothing/mask/bandana - name = "botany bandana" - desc = "A fine bandana with nanotech lining and a hydroponics pattern." - w_class = WEIGHT_CLASS_TINY - flags_cover = MASKCOVERSMOUTH - flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT - visor_flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT - visor_flags_cover = MASKCOVERSMOUTH | PEPPERPROOF - slot_flags = ITEM_SLOT_MASK - adjusted_flags = ITEM_SLOT_HEAD - icon_state = "bandbotany" - species_exception = list(/datum/species/golem) - -/obj/item/clothing/mask/bandana/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/bandana/AltClick(mob/user) - . = ..() - if(iscarbon(user)) - var/mob/living/carbon/C = user - if((C.get_item_by_slot(ITEM_SLOT_HEAD == src)) || (C.get_item_by_slot(ITEM_SLOT_MASK) == src)) - to_chat(user, span_warning("You can't tie [src] while wearing it!")) - return - if(slot_flags & ITEM_SLOT_HEAD) - to_chat(user, span_warning("You must undo [src] before you can tie it into a neckerchief!")) - else - if(user.is_holding(src)) - var/obj/item/clothing/neck/neckerchief/nk = new(src) - nk.name = "[name] neckerchief" - nk.desc = "[desc] It's tied up like a neckerchief." - nk.icon_state = icon_state - nk.item_flags = item_flags - nk.worn_icon = 'icons/misc/hidden.dmi' //hide underlying neckerchief object while it applies its own mutable appearance - nk.sourceBandanaType = src.type - var/currentHandIndex = user.get_held_index_of_item(src) - user.transferItemToLoc(src, null) - user.put_in_hand(nk, currentHandIndex) - user.visible_message(span_notice("[user] ties [src] up like a neckerchief."), span_notice("You tie [src] up like a neckerchief.")) - qdel(src) - else - to_chat(user, span_warning("You must be holding [src] in order to tie it!")) - -/obj/item/clothing/mask/bandana/red - name = "red bandana" - desc = "A fine red bandana with nanotech lining." - icon_state = "bandred" - -/obj/item/clothing/mask/bandana/blue - name = "blue bandana" - desc = "A fine blue bandana with nanotech lining." - icon_state = "bandblue" - -/obj/item/clothing/mask/bandana/green - name = "green bandana" - desc = "A fine green bandana with nanotech lining." - icon_state = "bandgreen" - -/obj/item/clothing/mask/bandana/gold - name = "gold bandana" - desc = "A fine gold bandana with nanotech lining." - icon_state = "bandgold" - -/obj/item/clothing/mask/bandana/black - name = "black bandana" - desc = "A fine black bandana with nanotech lining." - icon_state = "bandblack" - -/obj/item/clothing/mask/bandana/skull - name = "skull bandana" - desc = "A fine black bandana with nanotech lining and a skull emblem." - icon_state = "bandskull" - -/obj/item/clothing/mask/bandana/durathread - name = "durathread bandana" - desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..." - icon_state = "banddurathread" - -/obj/item/clothing/mask/mummy - name = "mummy mask" - desc = "Ancient bandages." - icon_state = "mummy_mask" - inhand_icon_state = "mummy_mask" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/mask/scarecrow - name = "sack mask" - desc = "A burlap sack with eyeholes." - icon_state = "scarecrow_sack" - inhand_icon_state = "scarecrow_sack" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - -/obj/item/clothing/mask/gondola - name = "gondola mask" - desc = "Genuine gondola fur." - icon_state = "gondola" - inhand_icon_state = "gondola" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - w_class = WEIGHT_CLASS_SMALL - modifies_speech = TRUE - -/obj/item/clothing/mask/gondola/handle_speech(datum/source, list/speech_args) - var/message = speech_args[SPEECH_MESSAGE] - if(message[1] != "*") - message = " [message]" - var/list/spurdo_words = strings("spurdo_replacement.json", "spurdo") - for(var/key in spurdo_words) - var/value = spurdo_words[key] - if(islist(value)) - value = pick(value) - message = replacetextEx(message,regex(uppertext(key),"g"), "[uppertext(value)]") - message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]") - message = replacetextEx(message,regex(key,"g"), "[value]") - speech_args[SPEECH_MESSAGE] = trim(message) diff --git a/code/modules/clothing/masks/moustache.dm b/code/modules/clothing/masks/moustache.dm new file mode 100644 index 00000000000..ecfd5d5e007 --- /dev/null +++ b/code/modules/clothing/masks/moustache.dm @@ -0,0 +1,31 @@ +/obj/item/clothing/mask/fakemoustache + name = "fake moustache" + desc = "Warning: moustache is fake." + icon_state = "fake-moustache" + w_class = WEIGHT_CLASS_TINY + flags_inv = HIDEFACE + species_exception = list(/datum/species/golem) + +/obj/item/clothing/mask/fakemoustache/italian + name = "italian moustache" + desc = "Made from authentic Italian moustache hairs. Gives the wearer an irresistable urge to gesticulate wildly." + modifies_speech = TRUE + +/obj/item/clothing/mask/fakemoustache/italian/handle_speech(datum/source, list/speech_args) + var/message = speech_args[SPEECH_MESSAGE] + if(message[1] != "*") + message = " [message]" + var/list/italian_words = strings("italian_replacement.json", "italian") + + for(var/key in italian_words) + var/value = italian_words[key] + if(islist(value)) + value = pick(value) + + message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]") + message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]") + message = replacetextEx(message, " [key]", " [value]") + + if(prob(3)) + message += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!") + speech_args[SPEECH_MESSAGE] = trim(message) diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm new file mode 100644 index 00000000000..af8c3a1b5f2 --- /dev/null +++ b/code/modules/clothing/masks/muzzle.dm @@ -0,0 +1,29 @@ +/obj/item/clothing/mask/muzzle + name = "muzzle" + desc = "To stop that awful noise." + icon_state = "muzzle" + inhand_icon_state = "blindfold" + clothing_flags = BLOCKS_SPEECH + flags_cover = MASKCOVERSMOUTH + w_class = WEIGHT_CLASS_SMALL + gas_transfer_coefficient = 0.9 + equip_delay_other = 20 + +/obj/item/clothing/mask/muzzle/attack_paw(mob/user, list/modifiers) + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + if(src == carbon_user.wear_mask) + to_chat(user, span_warning("You need help taking this off!")) + return + ..() + +/obj/item/clothing/mask/muzzle/breath + name = "surgery mask" + desc = "To silence those pesky patients before putting them under." + icon_state = "breathmuzzle" + inhand_icon_state = "breathmuzzle" + body_parts_covered = NONE + clothing_flags = MASKINTERNALS | BLOCKS_SPEECH + gas_transfer_coefficient = 0.1 + permeability_coefficient = 0.01 + equip_delay_other = 25 // my sprite has 4 straps, a-la a head harness. takes a while to equip, longer than a muzzle diff --git a/code/modules/clothing/masks/surgical.dm b/code/modules/clothing/masks/surgical.dm new file mode 100644 index 00000000000..5b436032dc5 --- /dev/null +++ b/code/modules/clothing/masks/surgical.dm @@ -0,0 +1,17 @@ +/obj/item/clothing/mask/surgical + name = "sterile mask" + desc = "A sterile mask designed to help prevent the spread of diseases." + icon_state = "sterile" + inhand_icon_state = "sterile" + w_class = WEIGHT_CLASS_TINY + flags_inv = HIDEFACE|HIDESNOUT + flags_cover = MASKCOVERSMOUTH + visor_flags_inv = HIDEFACE|HIDESNOUT + visor_flags_cover = MASKCOVERSMOUTH + gas_transfer_coefficient = 0.9 + permeability_coefficient = 0.01 + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 25, RAD = 0, FIRE = 0, ACID = 0) + actions_types = list(/datum/action/item_action/adjust) + +/obj/item/clothing/mask/surgical/attack_self(mob/user) + adjustmask(user) diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm new file mode 100644 index 00000000000..f30cbf41e41 --- /dev/null +++ b/code/modules/clothing/shoes/boots.dm @@ -0,0 +1,94 @@ +/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses + name = "combat boots" + desc = "High speed, low drag combat boots." + icon_state = "jackboots" + inhand_icon_state = "jackboots" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50) + strip_delay = 40 + resistance_flags = NONE + permeability_coefficient = 0.05 //Thick soles, and covers the ankle + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + lace_time = 12 SECONDS + +/obj/item/clothing/shoes/combat/sneakboots + name = "sneakboots" + desc = "These boots have special noise cancelling soles. Perfect for stealth, if it wasn't for the color scheme." + icon_state = "sneakboots" + inhand_icon_state = "sneakboots" + w_class = WEIGHT_CLASS_SMALL + resistance_flags = FIRE_PROOF | ACID_PROOF + clothing_traits = list(TRAIT_SILENT_FOOTSTEPS) + +/obj/item/clothing/shoes/combat/swat //overpowered boots for death squads + name = "\improper SWAT boots" + desc = "High speed, no drag combat boots." + permeability_coefficient = 0.01 + clothing_flags = NOSLIP + armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50) + +/obj/item/clothing/shoes/jackboots + name = "jackboots" + desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." + icon_state = "jackboots" + inhand_icon_state = "jackboots" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + strip_delay = 30 + equip_delay_other = 50 + resistance_flags = NONE + permeability_coefficient = 0.05 //Thick soles, and covers the ankle + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + can_be_tied = FALSE + +/obj/item/clothing/shoes/jackboots/fast + slowdown = -1 + +/obj/item/clothing/shoes/winterboots + name = "winter boots" + desc = "Boots lined with 'synthetic' animal fur." + icon_state = "winterboots" + inhand_icon_state = "winterboots" + permeability_coefficient = 0.15 + cold_protection = FEET|LEGS + min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT + heat_protection = FEET|LEGS + max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + lace_time = 8 SECONDS + +/obj/item/clothing/shoes/winterboots/ice_boots + name = "ice hiking boots" + desc = "A pair of winter boots with special grips on the bottom, designed to prevent slipping on frozen surfaces." + icon_state = "iceboots" + inhand_icon_state = "iceboots" + clothing_flags = NOSLIP_ICE + +/obj/item/clothing/shoes/workboots + name = "work boots" + desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar." + icon_state = "workboots" + inhand_icon_state = "jackboots" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + permeability_coefficient = 0.15 + strip_delay = 20 + equip_delay_other = 40 + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + lace_time = 8 SECONDS + species_exception = list(/datum/species/golem/uranium) + +/obj/item/clothing/shoes/workboots/mining + name = "mining boots" + desc = "Steel-toed mining boots for mining in hazardous environments. Very good at keeping toes uncrushed." + icon_state = "explorer" + resistance_flags = FIRE_PROOF + +/obj/item/clothing/shoes/russian + name = "russian boots" + desc = "Comfy shoes." + icon_state = "rus_shoes" + inhand_icon_state = "rus_shoes" + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + lace_time = 8 SECONDS diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm new file mode 100644 index 00000000000..19b3eedf66e --- /dev/null +++ b/code/modules/clothing/shoes/clown.dm @@ -0,0 +1,47 @@ +/obj/item/clothing/shoes/clown_shoes + desc = "The prankster's standard-issue clowning shoes. Damn, they're huge! Ctrl-click to toggle waddle dampeners." + name = "clown shoes" + icon_state = "clown" + inhand_icon_state = "clown_shoes" + slowdown = SHOES_SLOWDOWN+1 + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown + var/enabled_waddle = TRUE + lace_time = 20 SECONDS // how the hell do these laces even work?? + species_exception = list(/datum/species/golem/bananium) + +/obj/item/clothing/shoes/clown_shoes/Initialize() + . = ..() + LoadComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg'=1,'sound/effects/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please + AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) + +/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) + . = ..() + if(slot == ITEM_SLOT_FEET) + if(enabled_waddle) + user.AddElement(/datum/element/waddling) + if(is_clown_job(user.mind?.assigned_role)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "clownshoes", /datum/mood_event/clownshoes) + +/obj/item/clothing/shoes/clown_shoes/dropped(mob/user) + . = ..() + user.RemoveElement(/datum/element/waddling) + if(is_clown_job(user.mind?.assigned_role)) + SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "clownshoes") + +/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user) + if(!isliving(user)) + return + if(user.get_active_held_item() != src) + to_chat(user, span_warning("You must hold the [src] in your hand to do this!")) + return + if (!enabled_waddle) + to_chat(user, span_notice("You switch off the waddle dampeners!")) + enabled_waddle = TRUE + else + to_chat(user, span_notice("You switch on the waddle dampeners!")) + enabled_waddle = FALSE + +/obj/item/clothing/shoes/clown_shoes/jester + name = "jester shoes" + desc = "A court jester's shoes, updated with modern squeaking technology." + icon_state = "jester_shoes" diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm new file mode 100644 index 00000000000..cee4e1d824f --- /dev/null +++ b/code/modules/clothing/shoes/costume.dm @@ -0,0 +1,65 @@ +/obj/item/clothing/shoes/roman + name = "roman sandals" + desc = "Sandals with buckled leather straps on it." + icon_state = "roman" + inhand_icon_state = "roman" + strip_delay = 100 + equip_delay_other = 100 + permeability_coefficient = 0.9 + can_be_tied = FALSE + +/obj/item/clothing/shoes/griffin + name = "griffon boots" + desc = "A pair of costume boots fashioned after bird talons." + icon_state = "griffinboots" + inhand_icon_state = "griffinboots" + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + lace_time = 8 SECONDS + +/obj/item/clothing/shoes/singery + name = "yellow performer's boots" + desc = "These boots were made for dancing." + icon_state = "ysing" + equip_delay_other = 50 + +/obj/item/clothing/shoes/singerb + name = "blue performer's boots" + desc = "These boots were made for dancing." + icon_state = "bsing" + equip_delay_other = 50 + +/obj/item/clothing/shoes/bronze + name = "bronze boots" + desc = "A giant, clunky pair of shoes crudely made out of bronze. Why would anyone wear these?" + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "clockwork_treads" + can_be_tied = FALSE + +/obj/item/clothing/shoes/bronze/Initialize() + . = ..() + AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + +/obj/item/clothing/shoes/cookflops + desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" + 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" + desc = "Steel-toed and intimidating." + icon_state = "MajimaShoes" + inhand_icon_state = "MajimaShoes_worn" + +/obj/item/clothing/shoes/jackbros + name = "frosty boots" + desc = "For when you're stepping on up to the plate." + icon_state = "JackFrostShoes" + inhand_icon_state = "JackFrostShoes_worn" + +/obj/item/clothing/shoes/swagshoes + name = "swag shoes" + desc = "They got me for my foams!" + icon_state = "SwagShoes" + inhand_icon_state = "SwagShoes" diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm new file mode 100644 index 00000000000..e4e2bf52934 --- /dev/null +++ b/code/modules/clothing/shoes/cowboy.dm @@ -0,0 +1,95 @@ +/obj/item/clothing/shoes/cowboy + name = "cowboy boots" + desc = "A small sticker lets you know they've been inspected for snakes, It is unclear how long ago the inspection took place..." + icon_state = "cowboy_brown" + permeability_coefficient = 0.05 //these are quite tall + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + custom_price = PAYCHECK_EASY + var/list/occupants = list() + var/max_occupants = 4 + can_be_tied = FALSE + +/obj/item/clothing/shoes/cowboy/Initialize() + . = ..() + if(prob(2)) + var/mob/living/simple_animal/hostile/retaliate/snake/bootsnake = new/mob/living/simple_animal/hostile/retaliate/snake(src) + occupants += bootsnake + + +/obj/item/clothing/shoes/cowboy/equipped(mob/living/carbon/user, slot) + . = ..() + RegisterSignal(user, COMSIG_LIVING_SLAM_TABLE, .proc/table_slam) + if(slot == ITEM_SLOT_FEET) + for(var/mob/living/occupant in occupants) + occupant.forceMove(user.drop_location()) + user.visible_message(span_warning("[user] recoils as something slithers out of [src]."), span_userdanger("You feel a sudden stabbing pain in your [pick("foot", "toe", "ankle")]!")) + user.Knockdown(20) //Is one second paralyze better here? I feel you would fall on your ass in some fashion. + user.apply_damage(5, BRUTE, pick(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) + if(istype(occupant, /mob/living/simple_animal/hostile/retaliate)) + user.reagents.add_reagent(/datum/reagent/toxin, 7) + occupants.Cut() + +/obj/item/clothing/shoes/cowboy/dropped(mob/living/user) + . = ..() + UnregisterSignal(user, COMSIG_LIVING_SLAM_TABLE) + +/obj/item/clothing/shoes/cowboy/proc/table_slam(mob/living/source, obj/structure/table/the_table) + SIGNAL_HANDLER + INVOKE_ASYNC(src, .proc/handle_table_slam, source) + +/obj/item/clothing/shoes/cowboy/proc/handle_table_slam(mob/living/user) + user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!"), spans = list(SPAN_YELL), forced=TRUE) + user.client?.give_award(/datum/award/achievement/misc/hot_damn, user) + +/obj/item/clothing/shoes/cowboy/MouseDrop_T(mob/living/target, mob/living/user) + . = ..() + if(!(user.mobility_flags & MOBILITY_USE) || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || target.stat == DEAD) + return + if(occupants.len >= max_occupants) + to_chat(user, span_warning("[src] are full!")) + return + if(istype(target, /mob/living/simple_animal/hostile/retaliate/snake) || istype(target, /mob/living/simple_animal/hostile/headcrab) || istype(target, /mob/living/carbon/alien/larva)) + occupants += target + target.forceMove(src) + to_chat(user, span_notice("[target] slithers into [src].")) + +/obj/item/clothing/shoes/cowboy/container_resist_act(mob/living/user) + if(!do_after(user, 10, target = user)) + return + user.forceMove(user.drop_location()) + occupants -= user + +/obj/item/clothing/shoes/cowboy/white + name = "white cowboy boots" + icon_state = "cowboy_white" + +/obj/item/clothing/shoes/cowboy/black + name = "black cowboy boots" + desc = "You get the feeling someone might have been hanged in these boots." + icon_state = "cowboy_black" + +/obj/item/clothing/shoes/cowboy/fancy + name = "bilton wrangler boots" + desc = "A pair of authentic haute couture boots from Japanifornia. You doubt they have ever been close to cattle." + icon_state = "cowboy_fancy" + permeability_coefficient = 0.08 + +/obj/item/clothing/shoes/cowboy/lizard + name = "lizard skin boots" + desc = "You can hear a faint hissing from inside the boots; you hope it is just a mournful ghost." + icon_state = "lizardboots_green" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 0) //lizards like to stay warm + +/obj/item/clothing/shoes/cowboy/lizard/masterwork + name = "\improper Hugs-The-Feet lizard skin boots" + desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants." + icon_state = "lizardboots_blue" + +/obj/effect/spawner/lootdrop/lizardboots + name = "random lizard boot quality" + desc = "Which ever gets picked, the lizard race loses" + icon = 'icons/obj/clothing/shoes.dmi' + icon_state = "lizardboots_green" + loot = list( + /obj/item/clothing/shoes/cowboy/lizard = 7, + /obj/item/clothing/shoes/cowboy/lizard/masterwork = 1) diff --git a/code/modules/clothing/shoes/cult.dm b/code/modules/clothing/shoes/cult.dm new file mode 100644 index 00000000000..79b5c52e0f3 --- /dev/null +++ b/code/modules/clothing/shoes/cult.dm @@ -0,0 +1,21 @@ +/obj/item/clothing/shoes/cult + name = "\improper Nar'Sien invoker boots" + desc = "A pair of boots worn by the followers of Nar'Sie." + icon_state = "cult" + inhand_icon_state = "cult" + cold_protection = FEET + min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT + heat_protection = FEET + max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT + lace_time = 10 SECONDS + +/obj/item/clothing/shoes/cult/alt + name = "cultist boots" + icon_state = "cultalt" + +/obj/item/clothing/shoes/cult/alt/ghost + item_flags = DROPDEL + +/obj/item/clothing/shoes/cult/alt/ghost/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) diff --git a/code/modules/clothing/shoes/galoshes.dm b/code/modules/clothing/shoes/galoshes.dm new file mode 100644 index 00000000000..b4dacca78b4 --- /dev/null +++ b/code/modules/clothing/shoes/galoshes.dm @@ -0,0 +1,29 @@ +/obj/item/clothing/shoes/galoshes + desc = "A pair of yellow rubber boots, designed to prevent slipping on wet surfaces." + name = "galoshes" + icon_state = "galoshes" + permeability_coefficient = 0.01 + clothing_flags = NOSLIP + slowdown = SHOES_SLOWDOWN+1 + strip_delay = 30 + equip_delay_other = 50 + resistance_flags = NONE + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 75) + can_be_bloody = FALSE + custom_price = PAYCHECK_EASY * 3 + can_be_tied = FALSE + +/obj/item/clothing/shoes/galoshes/dry + name = "absorbent galoshes" + desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them." + icon_state = "galoshes_dry" + +/obj/item/clothing/shoes/galoshes/dry/Initialize() + . = ..() + RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/on_step) + +/obj/item/clothing/shoes/galoshes/dry/proc/on_step() + SIGNAL_HANDLER + + var/turf/open/t_loc = get_turf(src) + SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) diff --git a/code/modules/clothing/shoes/gunboots.dm b/code/modules/clothing/shoes/gunboots.dm new file mode 100644 index 00000000000..3e08c17d18a --- /dev/null +++ b/code/modules/clothing/shoes/gunboots.dm @@ -0,0 +1,71 @@ +/obj/item/clothing/shoes/gunboots //admin boots that fire gunshots randomly while walking + name = "gunboots" + desc = "This is what all those research points added up to, the ultimate workplace hazard." + icon_state = "jackboots" + inhand_icon_state = "jackboots" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + /// What projectile do we shoot? + var/projectile_type = /obj/projectile/bullet/c10mm + /// Each step, this is the chance we fire a shot + var/shot_prob = 50 + +/obj/item/clothing/shoes/gunboots/Initialize() + . = ..() + RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/check_step) + +/obj/item/clothing/shoes/gunboots/equipped(mob/user, slot) + . = ..() + if(slot == ITEM_SLOT_FEET) + RegisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/check_kick) + else + UnregisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK) + +/obj/item/clothing/shoes/gunboots/dropped(mob/user) + if(user) + UnregisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK) + return ..() + +/// After each step, check if we randomly fire a shot +/obj/item/clothing/shoes/gunboots/proc/check_step(mob/user) + SIGNAL_HANDLER + if(!prob(shot_prob)) + return + + INVOKE_ASYNC(src, .proc/fire_shot) + +/// Stomping on someone while wearing gunboots shoots them point blank +/obj/item/clothing/shoes/gunboots/proc/check_kick(mob/living/carbon/human/kicking_person, atom/attacked_atom, proximity) + SIGNAL_HANDLER + if(!isliving(attacked_atom)) + return + var/mob/living/attacked_living = attacked_atom + if(attacked_living.body_position == LYING_DOWN) + INVOKE_ASYNC(src, .proc/fire_shot, attacked_living) + +/// Actually fire a shot. If no target is provided, just fire off in a random direction +/obj/item/clothing/shoes/gunboots/proc/fire_shot(atom/target) + if(!isliving(loc)) + return + + var/mob/living/wearer = loc + var/obj/projectile/shot = new projectile_type(get_turf(wearer)) + + if(!target) + target = get_offset_target_turf(get_turf(wearer), rand(-3, 3), rand(-3,3)) + + //Shooting Code: + shot.original = target + shot.fired_from = src + shot.firer = wearer // don't hit ourself that would be really annoying + shot.impacted = list(wearer = TRUE) + shot.def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) // they're fired from boots after all + shot.preparePixelProjectile(target, wearer) + if(!shot.suppressed) + wearer.visible_message(span_danger("[wearer]'s [name] fires \a [shot]!"), "", blind_message = span_hear("You hear a gunshot!"), vision_distance=COMBAT_MESSAGE_RANGE) + shot.fire() + +/obj/item/clothing/shoes/gunboots/disabler + name = "disaboots" + projectile_type = /obj/projectile/beam/disabler diff --git a/code/modules/clothing/shoes/jumpboots.dm b/code/modules/clothing/shoes/jumpboots.dm new file mode 100644 index 00000000000..2b8036be4e9 --- /dev/null +++ b/code/modules/clothing/shoes/jumpboots.dm @@ -0,0 +1,40 @@ +/obj/item/clothing/shoes/bhop + name = "jump boots" + desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement." + icon_state = "jetboots" + inhand_icon_state = "jetboots" + resistance_flags = FIRE_PROOF + pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes + actions_types = list(/datum/action/item_action/bhop) + permeability_coefficient = 0.05 + strip_delay = 30 + var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles + var/jumpspeed = 3 + var/recharging_rate = 60 //default 6 seconds between each dash + var/recharging_time = 0 //time until next dash + +/obj/item/clothing/shoes/bhop/ui_action_click(mob/user, action) + if(!isliving(user)) + return + + if(recharging_time > world.time) + to_chat(user, span_warning("The boot's internal propulsion needs to recharge still!")) + return + + var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction + + if (user.throw_at(target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE)) + playsound(src, 'sound/effects/stealthoff.ogg', 50, TRUE, TRUE) + user.visible_message(span_warning("[usr] dashes forward into the air!")) + recharging_time = world.time + recharging_rate + else + to_chat(user, span_warning("Something prevents you from dashing forward!")) + +/obj/item/clothing/shoes/bhop/rocket + name = "rocket boots" + desc = "Very special boots with built-in rocket thrusters! SHAZBOT!" + icon_state = "rocketboots" + inhand_icon_state = "rocketboots" + actions_types = list(/datum/action/item_action/bhop/brocket) + jumpdistance = 20 //great for throwing yourself into walls and people at high speeds + jumpspeed = 5 diff --git a/code/modules/clothing/shoes/kindlekicks.dm b/code/modules/clothing/shoes/kindlekicks.dm new file mode 100644 index 00000000000..0d35641aa01 --- /dev/null +++ b/code/modules/clothing/shoes/kindlekicks.dm @@ -0,0 +1,30 @@ +/obj/item/clothing/shoes/kindle_kicks + name = "Kindle Kicks" + desc = "They'll sure kindle something in you, and it's not childhood nostalgia..." + icon_state = "kindleKicks" + inhand_icon_state = "kindleKicks" + actions_types = list(/datum/action/item_action/kindle_kicks) + light_system = MOVABLE_LIGHT + light_range = 2 + light_power = 3 + light_on = FALSE + var/lightCycle = 0 + var/active = FALSE + +/obj/item/clothing/shoes/kindle_kicks/ui_action_click(mob/user, action) + if(active) + return + active = TRUE + set_light_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) + set_light_on(active) + addtimer(CALLBACK(src, .proc/lightUp), 0.5 SECONDS) + +/obj/item/clothing/shoes/kindle_kicks/proc/lightUp(mob/user) + if(lightCycle < 15) + set_light_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) + lightCycle++ + addtimer(CALLBACK(src, .proc/lightUp), 0.5 SECONDS) + else + lightCycle = 0 + active = FALSE + set_light_on(active) diff --git a/code/modules/clothing/shoes/laceup.dm b/code/modules/clothing/shoes/laceup.dm new file mode 100644 index 00000000000..7ee348ea6c4 --- /dev/null +++ b/code/modules/clothing/shoes/laceup.dm @@ -0,0 +1,5 @@ +/obj/item/clothing/shoes/laceup + name = "laceup shoes" + desc = "The height of fashion, and they're pre-polished!" + icon_state = "laceups" + equip_delay_other = 50 diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm deleted file mode 100644 index 184ab5797af..00000000000 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ /dev/null @@ -1,626 +0,0 @@ -/obj/item/clothing/shoes/sneakers/mime - name = "mime shoes" - greyscale_colors = "#ffffff#ffffff" - -/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses - name = "combat boots" - desc = "High speed, low drag combat boots." - icon_state = "jackboots" - inhand_icon_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50) - strip_delay = 40 - resistance_flags = NONE - permeability_coefficient = 0.05 //Thick soles, and covers the ankle - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - lace_time = 12 SECONDS - -/obj/item/clothing/shoes/combat/sneakboots - name = "sneakboots" - desc = "These boots have special noise cancelling soles. Perfect for stealth, if it wasn't for the color scheme." - icon_state = "sneakboots" - inhand_icon_state = "sneakboots" - w_class = WEIGHT_CLASS_SMALL - resistance_flags = FIRE_PROOF | ACID_PROOF - clothing_traits = list(TRAIT_SILENT_FOOTSTEPS) - -/obj/item/clothing/shoes/combat/swat //overpowered boots for death squads - name = "\improper SWAT boots" - desc = "High speed, no drag combat boots." - permeability_coefficient = 0.01 - clothing_flags = NOSLIP - armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50) - -/obj/item/clothing/shoes/sandal - desc = "A pair of rather plain wooden sandals." - name = "sandals" - icon_state = "wizard" - custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 0.5) - strip_delay = 5 - equip_delay_other = 50 - permeability_coefficient = 0.9 - can_be_tied = FALSE - species_exception = list(/datum/species/golem) - -/obj/item/clothing/shoes/sneakers/marisa - desc = "A pair of magic black shoes." - name = "magic shoes" - worn_icon_state = "marisa" - greyscale_colors = "#545454#ffffff" - greyscale_config = /datum/greyscale_config/sneakers_marisa - greyscale_config_worn = null - strip_delay = 5 - equip_delay_other = 50 - permeability_coefficient = 0.9 - can_be_tied = FALSE - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/shoes/sandal/magic - name = "magical sandals" - desc = "A pair of sandals imbued with magic." - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/shoes/galoshes - desc = "A pair of yellow rubber boots, designed to prevent slipping on wet surfaces." - name = "galoshes" - icon_state = "galoshes" - permeability_coefficient = 0.01 - clothing_flags = NOSLIP - slowdown = SHOES_SLOWDOWN+1 - strip_delay = 30 - equip_delay_other = 50 - resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 75) - can_be_bloody = FALSE - custom_price = PAYCHECK_EASY * 3 - can_be_tied = FALSE - -/obj/item/clothing/shoes/galoshes/dry - name = "absorbent galoshes" - desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them." - icon_state = "galoshes_dry" - -/obj/item/clothing/shoes/galoshes/dry/Initialize() - . = ..() - RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/on_step) - -/obj/item/clothing/shoes/galoshes/dry/proc/on_step() - SIGNAL_HANDLER - - var/turf/open/t_loc = get_turf(src) - SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) - -/obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn, they're huge! Ctrl-click to toggle waddle dampeners." - name = "clown shoes" - icon_state = "clown" - inhand_icon_state = "clown_shoes" - slowdown = SHOES_SLOWDOWN+1 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown - var/enabled_waddle = TRUE - lace_time = 20 SECONDS // how the hell do these laces even work?? - species_exception = list(/datum/species/golem/bananium) - -/obj/item/clothing/shoes/clown_shoes/Initialize() - . = ..() - LoadComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg'=1,'sound/effects/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please - AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) - -/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) - . = ..() - if(slot == ITEM_SLOT_FEET) - if(enabled_waddle) - user.AddElement(/datum/element/waddling) - if(is_clown_job(user.mind?.assigned_role)) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "clownshoes", /datum/mood_event/clownshoes) - -/obj/item/clothing/shoes/clown_shoes/dropped(mob/user) - . = ..() - user.RemoveElement(/datum/element/waddling) - if(is_clown_job(user.mind?.assigned_role)) - SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "clownshoes") - -/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user) - if(!isliving(user)) - return - if(user.get_active_held_item() != src) - to_chat(user, span_warning("You must hold the [src] in your hand to do this!")) - return - if (!enabled_waddle) - to_chat(user, span_notice("You switch off the waddle dampeners!")) - enabled_waddle = TRUE - else - to_chat(user, span_notice("You switch on the waddle dampeners!")) - enabled_waddle = FALSE - -/obj/item/clothing/shoes/clown_shoes/jester - name = "jester shoes" - desc = "A court jester's shoes, updated with modern squeaking technology." - icon_state = "jester_shoes" - -/obj/item/clothing/shoes/jackboots - name = "jackboots" - desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." - icon_state = "jackboots" - inhand_icon_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - strip_delay = 30 - equip_delay_other = 50 - resistance_flags = NONE - permeability_coefficient = 0.05 //Thick soles, and covers the ankle - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - can_be_tied = FALSE - -/obj/item/clothing/shoes/jackboots/fast - slowdown = -1 - -/obj/item/clothing/shoes/winterboots - name = "winter boots" - desc = "Boots lined with 'synthetic' animal fur." - icon_state = "winterboots" - inhand_icon_state = "winterboots" - permeability_coefficient = 0.15 - cold_protection = FEET|LEGS - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET|LEGS - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - lace_time = 8 SECONDS - -/obj/item/clothing/shoes/winterboots/ice_boots - name = "ice hiking boots" - desc = "A pair of winter boots with special grips on the bottom, designed to prevent slipping on frozen surfaces." - icon_state = "iceboots" - inhand_icon_state = "iceboots" - clothing_flags = NOSLIP_ICE - -/obj/item/clothing/shoes/workboots - name = "work boots" - desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar." - icon_state = "workboots" - inhand_icon_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - permeability_coefficient = 0.15 - strip_delay = 20 - equip_delay_other = 40 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - lace_time = 8 SECONDS - species_exception = list(/datum/species/golem/uranium) - -/obj/item/clothing/shoes/workboots/mining - name = "mining boots" - desc = "Steel-toed mining boots for mining in hazardous environments. Very good at keeping toes uncrushed." - icon_state = "explorer" - resistance_flags = FIRE_PROOF - -/obj/item/clothing/shoes/cult - name = "\improper Nar'Sien invoker boots" - desc = "A pair of boots worn by the followers of Nar'Sie." - icon_state = "cult" - inhand_icon_state = "cult" - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - lace_time = 10 SECONDS - -/obj/item/clothing/shoes/cult/alt - name = "cultist boots" - icon_state = "cultalt" - -/obj/item/clothing/shoes/cult/alt/ghost - item_flags = DROPDEL - -/obj/item/clothing/shoes/cult/alt/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/clothing/shoes/sneakers/cyborg - name = "cyborg boots" - desc = "Shoes for a cyborg costume." - greyscale_colors = "#4e4e4e#4e4e4e" - -/obj/item/clothing/shoes/laceup - name = "laceup shoes" - desc = "The height of fashion, and they're pre-polished!" - icon_state = "laceups" - equip_delay_other = 50 - -/obj/item/clothing/shoes/roman - name = "roman sandals" - desc = "Sandals with buckled leather straps on it." - icon_state = "roman" - inhand_icon_state = "roman" - strip_delay = 100 - equip_delay_other = 100 - permeability_coefficient = 0.9 - can_be_tied = FALSE - -/obj/item/clothing/shoes/griffin - name = "griffon boots" - desc = "A pair of costume boots fashioned after bird talons." - icon_state = "griffinboots" - inhand_icon_state = "griffinboots" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - lace_time = 8 SECONDS - -/obj/item/clothing/shoes/bhop - name = "jump boots" - desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement." - icon_state = "jetboots" - inhand_icon_state = "jetboots" - resistance_flags = FIRE_PROOF - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - actions_types = list(/datum/action/item_action/bhop) - permeability_coefficient = 0.05 - strip_delay = 30 - var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles - var/jumpspeed = 3 - var/recharging_rate = 60 //default 6 seconds between each dash - var/recharging_time = 0 //time until next dash - -/obj/item/clothing/shoes/bhop/ui_action_click(mob/user, action) - if(!isliving(user)) - return - - if(recharging_time > world.time) - to_chat(user, span_warning("The boot's internal propulsion needs to recharge still!")) - return - - var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction - - if (user.throw_at(target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE)) - playsound(src, 'sound/effects/stealthoff.ogg', 50, TRUE, TRUE) - user.visible_message(span_warning("[usr] dashes forward into the air!")) - recharging_time = world.time + recharging_rate - else - to_chat(user, span_warning("Something prevents you from dashing forward!")) - -/obj/item/clothing/shoes/bhop/rocket - name = "rocket boots" - desc = "Very special boots with built-in rocket thrusters! SHAZBOT!" - icon_state = "rocketboots" - inhand_icon_state = "rocketboots" - actions_types = list(/datum/action/item_action/bhop/brocket) - jumpdistance = 20 //great for throwing yourself into walls and people at high speeds - jumpspeed = 5 - -/obj/item/clothing/shoes/singery - name = "yellow performer's boots" - desc = "These boots were made for dancing." - icon_state = "ysing" - equip_delay_other = 50 - -/obj/item/clothing/shoes/singerb - name = "blue performer's boots" - desc = "These boots were made for dancing." - icon_state = "bsing" - equip_delay_other = 50 - -/obj/item/clothing/shoes/bronze - name = "bronze boots" - desc = "A giant, clunky pair of shoes crudely made out of bronze. Why would anyone wear these?" - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_treads" - can_be_tied = FALSE - -/obj/item/clothing/shoes/bronze/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) - -/obj/item/clothing/shoes/wheelys - name = "Wheely-Heels" - desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel - worn_icon_state = "wheelys" - greyscale_colors = "#545454#ffffff" - icon_state = "sneakers" - greyscale_config = /datum/greyscale_config/sneakers_wheelys - inhand_icon_state = "wheelys" - worn_icon = 'icons/mob/large-worn-icons/64x64/feet.dmi' - worn_x_dimension = 64 - worn_y_dimension = 64 - clothing_flags = LARGE_WORN_ICON - actions_types = list(/datum/action/item_action/wheelys) - ///False means wheels are not popped out - var/wheelToggle = FALSE - ///The vehicle associated with the shoes - var/obj/vehicle/ridden/scooter/skateboard/wheelys/wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys - -/obj/item/clothing/shoes/wheelys/Initialize() - . = ..() - AddElement(/datum/element/update_icon_updates_onmob) - wheels = new wheels(null) - wheels.link_shoes(src) - -/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) - if(!isliving(user)) - return - if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) - to_chat(user, span_warning("You must be wearing the wheely-heels to use them!")) - return - if(!(wheels.is_occupant(user))) - wheelToggle = FALSE - if(wheelToggle) - wheels.unbuckle_mob(user) - wheelToggle = FALSE - return - wheels.forceMove(get_turf(user)) - wheels.buckle_mob(user) - wheelToggle = TRUE - -/obj/item/clothing/shoes/wheelys/dropped(mob/user) - if(wheelToggle) - wheels.unbuckle_mob(user) - wheelToggle = FALSE - ..() - -/obj/item/clothing/shoes/wheelys/proc/toggle_wheels(status) - if (status) - worn_icon_state = "[initial(worn_icon_state)]-on" - else - worn_icon_state = "[initial(worn_icon_state)]" - playsound(src, 'sound/weapons/tap.ogg', 10, TRUE) - update_appearance() - -/obj/item/clothing/shoes/wheelys/Destroy() - QDEL_NULL(wheels) - . = ..() - -/obj/item/clothing/shoes/wheelys/rollerskates - name = "roller skates" - desc = "An EightO brand pair of roller skates. The wheels are retractable, though're quite bulky to walk in." - icon_state = "rollerskates" - greyscale_colors = null - greyscale_config = null - worn_icon_state = "rollerskates" - slowdown = SHOES_SLOWDOWN+1 - wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys/rollerskates - custom_premium_price = PAYCHECK_EASY * 5 - custom_price = PAYCHECK_EASY * 5 - -/obj/item/clothing/shoes/wheelys/skishoes - name = "ski shoes" - desc = "A pair of shoes equipped with foldable skis! Very handy to move in snowy environments unimpeded." - icon_state = "skishoes" - greyscale_colors = null - greyscale_config = null - worn_icon_state = "skishoes" - slowdown = SHOES_SLOWDOWN+1 - wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys/skishoes - custom_premium_price = PAYCHECK_EASY * 1.6 - custom_price = PAYCHECK_EASY * 1.6 - -/obj/item/clothing/shoes/kindle_kicks - name = "Kindle Kicks" - desc = "They'll sure kindle something in you, and it's not childhood nostalgia..." - icon_state = "kindleKicks" - inhand_icon_state = "kindleKicks" - actions_types = list(/datum/action/item_action/kindle_kicks) - light_system = MOVABLE_LIGHT - light_range = 2 - light_power = 3 - light_on = FALSE - var/lightCycle = 0 - var/active = FALSE - - -/obj/item/clothing/shoes/kindle_kicks/ui_action_click(mob/user, action) - if(active) - return - active = TRUE - set_light_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) - set_light_on(active) - addtimer(CALLBACK(src, .proc/lightUp), 0.5 SECONDS) - -/obj/item/clothing/shoes/kindle_kicks/proc/lightUp(mob/user) - if(lightCycle < 15) - set_light_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) - lightCycle++ - addtimer(CALLBACK(src, .proc/lightUp), 0.5 SECONDS) - else - lightCycle = 0 - active = FALSE - set_light_on(active) - -/obj/item/clothing/shoes/russian - name = "russian boots" - desc = "Comfy shoes." - icon_state = "rus_shoes" - inhand_icon_state = "rus_shoes" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - lace_time = 8 SECONDS - -/obj/item/clothing/shoes/cowboy - name = "cowboy boots" - desc = "A small sticker lets you know they've been inspected for snakes, It is unclear how long ago the inspection took place..." - icon_state = "cowboy_brown" - permeability_coefficient = 0.05 //these are quite tall - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - custom_price = PAYCHECK_EASY - var/list/occupants = list() - var/max_occupants = 4 - can_be_tied = FALSE - -/obj/item/clothing/shoes/cowboy/Initialize() - . = ..() - if(prob(2)) - var/mob/living/simple_animal/hostile/retaliate/snake/bootsnake = new/mob/living/simple_animal/hostile/retaliate/snake(src) - occupants += bootsnake - - -/obj/item/clothing/shoes/cowboy/equipped(mob/living/carbon/user, slot) - . = ..() - RegisterSignal(user, COMSIG_LIVING_SLAM_TABLE, .proc/table_slam) - if(slot == ITEM_SLOT_FEET) - for(var/mob/living/occupant in occupants) - occupant.forceMove(user.drop_location()) - user.visible_message(span_warning("[user] recoils as something slithers out of [src]."), span_userdanger("You feel a sudden stabbing pain in your [pick("foot", "toe", "ankle")]!")) - user.Knockdown(20) //Is one second paralyze better here? I feel you would fall on your ass in some fashion. - user.apply_damage(5, BRUTE, pick(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) - if(istype(occupant, /mob/living/simple_animal/hostile/retaliate)) - user.reagents.add_reagent(/datum/reagent/toxin, 7) - occupants.Cut() - -/obj/item/clothing/shoes/cowboy/dropped(mob/living/user) - . = ..() - UnregisterSignal(user, COMSIG_LIVING_SLAM_TABLE) - -/obj/item/clothing/shoes/cowboy/proc/table_slam(mob/living/source, obj/structure/table/the_table) - SIGNAL_HANDLER - INVOKE_ASYNC(src, .proc/handle_table_slam, source) - -/obj/item/clothing/shoes/cowboy/proc/handle_table_slam(mob/living/user) - user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!"), spans = list(SPAN_YELL), forced=TRUE) - user.client?.give_award(/datum/award/achievement/misc/hot_damn, user) - -/obj/item/clothing/shoes/cowboy/MouseDrop_T(mob/living/target, mob/living/user) - . = ..() - if(!(user.mobility_flags & MOBILITY_USE) || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || target.stat == DEAD) - return - if(occupants.len >= max_occupants) - to_chat(user, span_warning("[src] are full!")) - return - if(istype(target, /mob/living/simple_animal/hostile/retaliate/snake) || istype(target, /mob/living/simple_animal/hostile/headcrab) || istype(target, /mob/living/carbon/alien/larva)) - occupants += target - target.forceMove(src) - to_chat(user, span_notice("[target] slithers into [src].")) - -/obj/item/clothing/shoes/cowboy/container_resist_act(mob/living/user) - if(!do_after(user, 10, target = user)) - return - user.forceMove(user.drop_location()) - occupants -= user - -/obj/item/clothing/shoes/cowboy/white - name = "white cowboy boots" - icon_state = "cowboy_white" - -/obj/item/clothing/shoes/cowboy/black - name = "black cowboy boots" - desc = "You get the feeling someone might have been hanged in these boots." - icon_state = "cowboy_black" - -/obj/item/clothing/shoes/cowboy/fancy - name = "bilton wrangler boots" - desc = "A pair of authentic haute couture boots from Japanifornia. You doubt they have ever been close to cattle." - icon_state = "cowboy_fancy" - permeability_coefficient = 0.08 - -/obj/item/clothing/shoes/cowboy/lizard - name = "lizard skin boots" - desc = "You can hear a faint hissing from inside the boots; you hope it is just a mournful ghost." - icon_state = "lizardboots_green" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 0) //lizards like to stay warm - -/obj/item/clothing/shoes/cowboy/lizard/masterwork - name = "\improper Hugs-The-Feet lizard skin boots" - desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants." - icon_state = "lizardboots_blue" - -/obj/effect/spawner/lootdrop/lizardboots - name = "random lizard boot quality" - desc = "Which ever gets picked, the lizard race loses" - icon = 'icons/obj/clothing/shoes.dmi' - icon_state = "lizardboots_green" - loot = list( - /obj/item/clothing/shoes/cowboy/lizard = 7, - /obj/item/clothing/shoes/cowboy/lizard/masterwork = 1) - -/obj/item/clothing/shoes/cookflops - desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" - 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" - desc = "Steel-toed and intimidating." - icon_state = "MajimaShoes" - inhand_icon_state = "MajimaShoes_worn" - -/obj/item/clothing/shoes/jackbros - name = "frosty boots" - desc = "For when you're stepping on up to the plate." - icon_state = "JackFrostShoes" - inhand_icon_state = "JackFrostShoes_worn" -/obj/item/clothing/shoes/swagshoes - name = "swag shoes" - desc = "They got me for my foams!" - icon_state = "SwagShoes" - inhand_icon_state = "SwagShoes" - -/obj/item/clothing/shoes/gunboots //admin boots that fire gunshots randomly while walking - name = "gunboots" - desc = "This is what all those research points added up to, the ultimate workplace hazard." - icon_state = "jackboots" - inhand_icon_state = "jackboots" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - /// What projectile do we shoot? - var/projectile_type = /obj/projectile/bullet/c10mm - /// Each step, this is the chance we fire a shot - var/shot_prob = 50 - -/obj/item/clothing/shoes/gunboots/Initialize() - . = ..() - RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/check_step) - -/obj/item/clothing/shoes/gunboots/equipped(mob/user, slot) - . = ..() - if(slot == ITEM_SLOT_FEET) - RegisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/check_kick) - else - UnregisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK) - -/obj/item/clothing/shoes/gunboots/dropped(mob/user) - if(user) - UnregisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK) - return ..() - -/// After each step, check if we randomly fire a shot -/obj/item/clothing/shoes/gunboots/proc/check_step(mob/user) - SIGNAL_HANDLER - if(!prob(shot_prob)) - return - - INVOKE_ASYNC(src, .proc/fire_shot) - -/// Stomping on someone while wearing gunboots shoots them point blank -/obj/item/clothing/shoes/gunboots/proc/check_kick(mob/living/carbon/human/kicking_person, atom/attacked_atom, proximity) - SIGNAL_HANDLER - if(!isliving(attacked_atom)) - return - var/mob/living/attacked_living = attacked_atom - if(attacked_living.body_position == LYING_DOWN) - INVOKE_ASYNC(src, .proc/fire_shot, attacked_living) - -/// Actually fire a shot. If no target is provided, just fire off in a random direction -/obj/item/clothing/shoes/gunboots/proc/fire_shot(atom/target) - if(!isliving(loc)) - return - - var/mob/living/wearer = loc - var/obj/projectile/shot = new projectile_type(get_turf(wearer)) - - if(!target) - target = get_offset_target_turf(get_turf(wearer), rand(-3, 3), rand(-3,3)) - - //Shooting Code: - shot.original = target - shot.fired_from = src - shot.firer = wearer // don't hit ourself that would be really annoying - shot.impacted = list(wearer = TRUE) - shot.def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) // they're fired from boots after all - shot.preparePixelProjectile(target, wearer) - if(!shot.suppressed) - wearer.visible_message(span_danger("[wearer]'s [name] fires \a [shot]!"), "", blind_message = span_hear("You hear a gunshot!"), vision_distance=COMBAT_MESSAGE_RANGE) - shot.fire() - -/obj/item/clothing/shoes/gunboots/disabler - name = "disaboots" - projectile_type = /obj/projectile/beam/disabler diff --git a/code/modules/clothing/shoes/sandals.dm b/code/modules/clothing/shoes/sandals.dm new file mode 100644 index 00000000000..73e54e7c55f --- /dev/null +++ b/code/modules/clothing/shoes/sandals.dm @@ -0,0 +1,15 @@ +/obj/item/clothing/shoes/sandal + desc = "A pair of rather plain wooden sandals." + name = "sandals" + icon_state = "wizard" + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 0.5) + strip_delay = 5 + 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" + desc = "A pair of sandals imbued with magic." + resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/sneakers.dm similarity index 82% rename from code/modules/clothing/shoes/colour.dm rename to code/modules/clothing/shoes/sneakers.dm index ccaf03dfc16..597ce1a1167 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/sneakers.dm @@ -101,3 +101,25 @@ to_chat(c, span_warning("You need help taking these off!")) return return ..() + +/obj/item/clothing/shoes/sneakers/mime + name = "mime shoes" + greyscale_colors = "#ffffff#ffffff" + +/obj/item/clothing/shoes/sneakers/marisa + desc = "A pair of magic black shoes." + name = "magic shoes" + worn_icon_state = "marisa" + greyscale_colors = "#545454#ffffff" + greyscale_config = /datum/greyscale_config/sneakers_marisa + greyscale_config_worn = null + strip_delay = 5 + equip_delay_other = 50 + permeability_coefficient = 0.9 + can_be_tied = FALSE + resistance_flags = FIRE_PROOF | ACID_PROOF + +/obj/item/clothing/shoes/sneakers/cyborg + name = "cyborg boots" + desc = "Shoes for a cyborg costume." + greyscale_colors = "#4e4e4e#4e4e4e" diff --git a/code/modules/clothing/shoes/wheelys.dm b/code/modules/clothing/shoes/wheelys.dm new file mode 100644 index 00000000000..f333ac51048 --- /dev/null +++ b/code/modules/clothing/shoes/wheelys.dm @@ -0,0 +1,81 @@ +/obj/item/clothing/shoes/wheelys + name = "Wheely-Heels" + desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel + worn_icon_state = "wheelys" + greyscale_colors = "#545454#ffffff" + icon_state = "sneakers" + greyscale_config = /datum/greyscale_config/sneakers_wheelys + inhand_icon_state = "wheelys" + worn_icon = 'icons/mob/large-worn-icons/64x64/feet.dmi' + worn_x_dimension = 64 + worn_y_dimension = 64 + clothing_flags = LARGE_WORN_ICON + actions_types = list(/datum/action/item_action/wheelys) + ///False means wheels are not popped out + var/wheelToggle = FALSE + ///The vehicle associated with the shoes + var/obj/vehicle/ridden/scooter/skateboard/wheelys/wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys + +/obj/item/clothing/shoes/wheelys/Initialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + wheels = new wheels(null) + wheels.link_shoes(src) + +/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) + if(!isliving(user)) + return + if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) + to_chat(user, span_warning("You must be wearing the wheely-heels to use them!")) + return + if(!(wheels.is_occupant(user))) + wheelToggle = FALSE + if(wheelToggle) + wheels.unbuckle_mob(user) + wheelToggle = FALSE + return + wheels.forceMove(get_turf(user)) + wheels.buckle_mob(user) + wheelToggle = TRUE + +/obj/item/clothing/shoes/wheelys/dropped(mob/user) + if(wheelToggle) + wheels.unbuckle_mob(user) + wheelToggle = FALSE + ..() + +/obj/item/clothing/shoes/wheelys/proc/toggle_wheels(status) + if (status) + worn_icon_state = "[initial(worn_icon_state)]-on" + else + worn_icon_state = "[initial(worn_icon_state)]" + playsound(src, 'sound/weapons/tap.ogg', 10, TRUE) + update_appearance() + +/obj/item/clothing/shoes/wheelys/Destroy() + QDEL_NULL(wheels) + . = ..() + +/obj/item/clothing/shoes/wheelys/rollerskates + name = "roller skates" + desc = "An EightO brand pair of roller skates. The wheels are retractable, though're quite bulky to walk in." + icon_state = "rollerskates" + greyscale_colors = null + greyscale_config = null + worn_icon_state = "rollerskates" + slowdown = SHOES_SLOWDOWN+1 + wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys/rollerskates + custom_premium_price = PAYCHECK_EASY * 5 + custom_price = PAYCHECK_EASY * 5 + +/obj/item/clothing/shoes/wheelys/skishoes + name = "ski shoes" + desc = "A pair of shoes equipped with foldable skis! Very handy to move in snowy environments unimpeded." + icon_state = "skishoes" + greyscale_colors = null + greyscale_config = null + worn_icon_state = "skishoes" + slowdown = SHOES_SLOWDOWN+1 + wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys/skishoes + custom_premium_price = PAYCHECK_EASY * 1.6 + custom_price = PAYCHECK_EASY * 1.6 diff --git a/code/modules/clothing/spacesuits/berserker.dm b/code/modules/clothing/spacesuits/berserker.dm new file mode 100644 index 00000000000..2a3704c098c --- /dev/null +++ b/code/modules/clothing/spacesuits/berserker.dm @@ -0,0 +1,107 @@ +/obj/item/clothing/suit/space/hardsuit/berserker + name = "berserker hardsuit" + desc = "Voices echo from the hardsuit, driving the user insane." + icon_state = "hardsuit-berserker" + inhand_icon_state = "hardsuit-berserker" + slowdown = 0 + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/berserker + armor = list(MELEE = 30, BULLET = 10, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 10, FIRE = 100, ACID = 100) + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw) + + +/obj/item/clothing/suit/space/hardsuit/berserker/Initialize() + . = ..() + AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING) + +/obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet() + var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet + if(helm?.berserk_active) + return + return ..() + +#define MAX_BERSERK_CHARGE 100 +#define PROJECTILE_HIT_MULTIPLIER 1.5 +#define DAMAGE_TO_CHARGE_SCALE 0.25 +#define CHARGE_DRAINED_PER_SECOND 5 +#define BERSERK_MELEE_ARMOR_ADDED 50 +#define BERSERK_ATTACK_SPEED_MODIFIER 0.25 + +/obj/item/clothing/head/helmet/space/hardsuit/berserker + name = "berserker helmet" + desc = "Peering into the eyes of the helmet is enough to seal damnation." + icon_state = "hardsuit0-berserker" + inhand_icon_state = "hardsuit0-berserker" + hardsuit_type = "berserker" + armor = list(MELEE = 30, BULLET = 10, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 10, FIRE = 100, ACID = 100) + actions_types = list(/datum/action/item_action/berserk_mode) + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + /// Current charge of berserk, goes from 0 to 100 + var/berserk_charge = 0 + /// Status of berserk + var/berserk_active = FALSE + +/obj/item/clothing/head/helmet/space/hardsuit/berserker/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) + +/obj/item/clothing/head/helmet/space/hardsuit/berserker/examine() + . = ..() + . += span_notice("Berserk mode is [berserk_charge]% charged.") + +/obj/item/clothing/head/helmet/space/hardsuit/berserker/process(delta_time) + . = ..() + if(berserk_active) + berserk_charge = clamp(berserk_charge - CHARGE_DRAINED_PER_SECOND * delta_time, 0, MAX_BERSERK_CHARGE) + if(!berserk_charge) + if(ishuman(loc)) + end_berserk(loc) + +/obj/item/clothing/head/helmet/space/hardsuit/berserker/dropped(mob/user) + . = ..() + end_berserk(user) + +/obj/item/clothing/head/helmet/space/hardsuit/berserker/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(berserk_active) + return + var/berserk_value = damage * DAMAGE_TO_CHARGE_SCALE + if(attack_type == PROJECTILE_ATTACK) + berserk_value *= PROJECTILE_HIT_MULTIPLIER + berserk_charge = clamp(round(berserk_charge + berserk_value), 0, MAX_BERSERK_CHARGE) + if(berserk_charge >= MAX_BERSERK_CHARGE) + to_chat(owner, span_notice("Berserk mode is fully charged.")) + +/// Starts berserk, giving the wearer 50 melee armor, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier +/obj/item/clothing/head/helmet/space/hardsuit/berserker/proc/berserk_mode(mob/living/carbon/human/user) + to_chat(user, span_warning("You enter berserk mode.")) + playsound(user, 'sound/magic/staff_healing.ogg', 50) + user.add_movespeed_modifier(/datum/movespeed_modifier/berserk) + user.physiology.armor.melee += BERSERK_MELEE_ARMOR_ADDED + user.next_move_modifier *= BERSERK_ATTACK_SPEED_MODIFIER + user.add_atom_colour(COLOR_BUBBLEGUM_RED, TEMPORARY_COLOUR_PRIORITY) + ADD_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT) + ADD_TRAIT(src, TRAIT_NODROP, BERSERK_TRAIT) + berserk_active = TRUE + +/// Ends berserk, reverting the changes from the proc [berserk_mode] +/obj/item/clothing/head/helmet/space/hardsuit/berserker/proc/end_berserk(mob/living/carbon/human/user) + if(!berserk_active) + return + to_chat(user, span_warning("You exit berserk mode.")) + playsound(user, 'sound/magic/summonitems_generic.ogg', 50) + user.remove_movespeed_modifier(/datum/movespeed_modifier/berserk) + user.physiology.armor.melee -= BERSERK_MELEE_ARMOR_ADDED + user.next_move_modifier /= BERSERK_ATTACK_SPEED_MODIFIER + user.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BUBBLEGUM_RED) + REMOVE_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT) + REMOVE_TRAIT(src, TRAIT_NODROP, BERSERK_TRAIT) + berserk_active = FALSE + +#undef MAX_BERSERK_CHARGE +#undef PROJECTILE_HIT_MULTIPLIER +#undef DAMAGE_TO_CHARGE_SCALE +#undef CHARGE_DRAINED_PER_SECOND +#undef BERSERK_MELEE_ARMOR_ADDED +#undef BERSERK_ATTACK_SPEED_MODIFIER diff --git a/code/modules/clothing/spacesuits/bountyhunter.dm b/code/modules/clothing/spacesuits/bountyhunter.dm new file mode 100644 index 00000000000..c45ddb86998 --- /dev/null +++ b/code/modules/clothing/spacesuits/bountyhunter.dm @@ -0,0 +1,10 @@ +/obj/item/clothing/suit/space/hunter + name = "bounty hunting suit" + desc = "A custom version of the MK.II SWAT suit, modified to look rugged and tough. Works as a space suit, if you can find a helmet." + icon_state = "hunter" + inhand_icon_state = "swat_suit" + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + armor = list(MELEE = 60, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) + strip_delay = 130 + resistance_flags = FIRE_PROOF | ACID_PROOF + cell = /obj/item/stock_parts/cell/hyper diff --git a/code/modules/clothing/spacesuits/freedom.dm b/code/modules/clothing/spacesuits/freedom.dm new file mode 100644 index 00000000000..5623db69cef --- /dev/null +++ b/code/modules/clothing/spacesuits/freedom.dm @@ -0,0 +1,21 @@ +/obj/item/clothing/head/helmet/space/freedom + name = "eagle helmet" + desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle." + icon_state = "griffinhat" + inhand_icon_state = "griffinhat" + armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 40, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) + strip_delay = 130 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = ACID_PROOF | FIRE_PROOF + +/obj/item/clothing/suit/space/freedom + name = "eagle suit" + desc = "An advanced, light suit, fabricated from a mixture of synthetic feathers and space-resistant material. A gun holster appears to be integrated into the suit and the wings appear to be stuck in 'freedom' mode." + icon_state = "freedom" + inhand_icon_state = "freedom" + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + armor = list(MELEE = 20, BULLET = 40, LASER = 30,ENERGY = 40, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) + strip_delay = 130 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = ACID_PROOF | FIRE_PROOF + slowdown = 0 diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index d3ebd463e51..34564f13e16 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -764,6 +764,245 @@ listeningTo = null return ..() + //Deathsquad +/obj/item/clothing/head/helmet/space/hardsuit/deathsquad + name = "MK.III SWAT Helmet" + desc = "An advanced tactical space helmet." + icon_state = "deathsquad" + inhand_icon_state = "deathsquad" + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 20) + strip_delay = 130 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF | ACID_PROOF + actions_types = list() + +/obj/item/clothing/head/helmet/space/hardsuit/deathsquad/attack_self(mob/user) + return + +/obj/item/clothing/suit/space/hardsuit/deathsquad + name = "MK.III SWAT Suit" + desc = "A prototype designed to replace the ageing MK.II SWAT suit. Based on the streamlined MK.II model, the traditional ceramic and graphene plate construction was replaced with plasteel, allowing superior armor against most threats. There's room for some kind of energy projection device on the back." + icon_state = "deathsquad" + inhand_icon_state = "swat_suit" + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 20) + strip_delay = 130 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF | ACID_PROOF + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/deathsquad + dog_fashion = /datum/dog_fashion/back/deathsquad + cell = /obj/item/stock_parts/cell/bluespace + + //Emergency Response Team suits +/obj/item/clothing/head/helmet/space/hardsuit/ert + name = "emergency response team commander helmet" + desc = "The integrated helmet of an ERT hardsuit, this one has blue highlights." + icon_state = "hardsuit0-ert_commander" + inhand_icon_state = "hardsuit0-ert_commander" + hardsuit_type = "ert_commander" + armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) + strip_delay = 130 + light_range = 7 + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + +/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) + +/obj/item/clothing/suit/space/hardsuit/ert + name = "emergency response team commander hardsuit" + desc = "The standard issue hardsuit of the ERT, this one has blue highlights. Offers superb protection against environmental hazards." + icon_state = "ert_command" + inhand_icon_state = "ert_command" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) + slowdown = 0 + strip_delay = 130 + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + cell = /obj/item/stock_parts/cell/bluespace + +// ERT suit's gets EMP Protection +/obj/item/clothing/suit/space/hardsuit/ert/Initialize() + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_CONTENTS) + + //ERT Security +/obj/item/clothing/head/helmet/space/hardsuit/ert/sec + name = "emergency response team security helmet" + desc = "The integrated helmet of an ERT hardsuit, this one has red highlights." + icon_state = "hardsuit0-ert_security" + inhand_icon_state = "hardsuit0-ert_security" + hardsuit_type = "ert_security" + +/obj/item/clothing/suit/space/hardsuit/ert/sec + name = "emergency response team security hardsuit" + desc = "The standard issue hardsuit of the ERT, this one has red highlights. Offers superb protection against environmental hazards." + icon_state = "ert_security" + inhand_icon_state = "ert_security" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec + + //ERT Engineering +/obj/item/clothing/head/helmet/space/hardsuit/ert/engi + name = "emergency response team engineering helmet" + desc = "The integrated helmet of an ERT hardsuit, this one has orange highlights." + icon_state = "hardsuit0-ert_engineer" + inhand_icon_state = "hardsuit0-ert_engineer" + hardsuit_type = "ert_engineer" + +/obj/item/clothing/suit/space/hardsuit/ert/engi + name = "emergency response team engineering hardsuit" + desc = "The standard issue hardsuit of the ERT, this one has orange highlights. Offers superb protection against environmental hazards." + icon_state = "ert_engineer" + inhand_icon_state = "ert_engineer" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi + + //ERT Medical +/obj/item/clothing/head/helmet/space/hardsuit/ert/med + name = "emergency response team medical helmet" + desc = "The integrated helmet of an ERT hardsuit, this one has white highlights." + icon_state = "hardsuit0-ert_medical" + inhand_icon_state = "hardsuit0-ert_medical" + hardsuit_type = "ert_medical" + +/obj/item/clothing/suit/space/hardsuit/ert/med + name = "emergency response team medical hardsuit" + desc = "The standard issue hardsuit of the ERT, this one has white highlights. Offers superb protection against environmental hazards." + icon_state = "ert_medical" + inhand_icon_state = "ert_medical" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med + + //ERT Janitor +/obj/item/clothing/head/helmet/space/hardsuit/ert/jani + name = "emergency response team janitorial helmet" + desc = "The integrated helmet of an ERT hardsuit, this one has purple highlights." + icon_state = "hardsuit0-ert_janitor" + inhand_icon_state = "hardsuit0-ert_janitor" + hardsuit_type = "ert_janitor" + +/obj/item/clothing/suit/space/hardsuit/ert/jani + name = "emergency response team janitorial hardsuit" + desc = "The standard issue hardsuit of the ERT, this one has purple highlights. Offers superb protection against environmental hazards. This one has extra clips for holding various janitorial tools." + icon_state = "ert_janitor" + inhand_icon_state = "ert_janitor" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/jani + allowed = list(/obj/item/tank/internals, /obj/item/storage/bag/trash, /obj/item/melee/flyswatter, /obj/item/mop, /obj/item/holosign_creator, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/spray/chemsprayer/janitor) + + //ERT Clown +/obj/item/clothing/head/helmet/space/hardsuit/ert/clown + name = "emergency response team clown helmet" + desc = "The integrated helmet of an ERT hardsuit, this one is colourful!" + icon_state = "hardsuit0-ert_clown" + inhand_icon_state = "hardsuit0-ert_clown" + hardsuit_type = "ert_clown" + +/obj/item/clothing/suit/space/hardsuit/ert/clown + name = "emergency response team clown hardsuit" + desc = "The non-standard issue hardsuit of the ERT, this one is colourful! Offers superb protection against environmental hazards. Does not offer superb protection against a ravaging crew." + icon_state = "ert_clown" + inhand_icon_state = "ert_clown" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/clown + allowed = list(/obj/item/tank/internals, /obj/item/bikehorn, /obj/item/instrument, /obj/item/food/grown/banana, /obj/item/grown/bananapeel) + + //Paranormal ERT +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal + name = "paranormal response team helmet" + desc = "A helmet worn by those who deal with paranormal threats for a living." + icon_state = "hardsuit0-prt" + inhand_icon_state = "hardsuit0-prt" + hardsuit_type = "prt" + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + actions_types = list() + resistance_flags = FIRE_PROOF + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal + name = "paranormal response team hardsuit" + desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats." + icon_state = "knight_grey" + inhand_icon_state = "knight_grey" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize() + . = ..() + AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING) + + //Inquisitor +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor + name = "inquisitor's hardsuit" + icon_state = "hardsuit-inq" + inhand_icon_state = "hardsuit-inq" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor + +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor + name = "inquisitor's helmet" + icon_state = "hardsuit0-inq" + inhand_icon_state = "hardsuit0-inq" + hardsuit_type = "inq" + +//Carpsuit, bestsuit, lovesuit +/obj/item/clothing/head/helmet/space/hardsuit/carp + name = "carp helmet" + desc = "Spaceworthy and it looks like a space carp's head, smells like one too." + icon_state = "carp_helm" + inhand_icon_state = "syndicate" + armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75) //As whimpy as a space carp + light_system = NO_LIGHT_SUPPORT + light_range = 0 //luminosity when on + actions_types = list() + flags_inv = HIDEEARS|HIDEHAIR|HIDEFACIALHAIR //facial hair will clip with the helm, this'll need a dynamic_fhair_suffix at some point. + +/obj/item/clothing/head/helmet/space/hardsuit/carp/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) + +/obj/item/clothing/suit/space/hardsuit/carp + name = "carp space suit" + desc = "A slimming piece of dubious space carp technology, you suspect it won't stand up to hand-to-hand blows." + icon_state = "carp_suit" + inhand_icon_state = "space_suit_syndicate" + slowdown = 0 //Space carp magic, never stop believing + armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75) //As whimpy whimpy whoo + allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/rifle/boltaction/harpoon) //I'm giving you a hint here + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp + +/obj/item/clothing/head/helmet/space/hardsuit/carp/equipped(mob/living/carbon/human/user, slot) + ..() + if (slot == ITEM_SLOT_HEAD) + user.faction |= "carp" + +/obj/item/clothing/head/helmet/space/hardsuit/carp/dropped(mob/living/carbon/human/user) + ..() + if (user.head == src) + user.faction -= "carp" + +/obj/item/clothing/suit/space/hardsuit/carp/old + name = "battered carp space suit" + desc = "It's covered in bite marks and scratches, yet seems to be still perfectly functional." + slowdown = 1 + +//Combat medic +/obj/item/clothing/head/helmet/space/hardsuit/combatmedic + name = "endemic combat medic helmet" + desc = "The integrated helmet of the combat medic hardsuit, this has a bright, glowing facemask." + icon_state = "hardsuit0-combatmedic" + inhand_icon_state = "hardsuit0-combatmedic" + armor = list(MELEE = 35, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 5, BIO = 100, RAD = 50, FIRE = 65, ACID = 75) + hardsuit_type = "combatmedic" + +/obj/item/clothing/suit/space/hardsuit/combatmedic + name = "endemic combat medic hardsuit" + desc = "The standard issue hardsuit of infectious disease officers, before the formation of ERT teams. This model is labeled 'Veradux'." + icon_state = "combatmedic" + inhand_icon_state = "combatmedic" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/combatmedic + armor = list(MELEE = 35, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 5, BIO = 100, RAD = 50, FIRE = 65, ACID = 75) + allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/circular_saw, /obj/item/tank/internals, /obj/item/storage/box/pillbottles,\ + /obj/item/storage/firstaid, /obj/item/stack/medical/gauze, /obj/item/stack/medical/suture, /obj/item/stack/medical/mesh, /obj/item/storage/bag/chemistry) + /////////////SHIELDED////////////////////////////////// /obj/item/clothing/suit/space/hardsuit/shielded diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm deleted file mode 100644 index cca6df93ef9..00000000000 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ /dev/null @@ -1,566 +0,0 @@ -//miscellaneous spacesuits -/* -Contains: - Captain's spacesuit - Death squad's hardsuit - SWAT suit - Officer's beret/spacesuit - NASA Voidsuit - Father Christmas' magical clothes - Pirate's spacesuit - ERT hardsuit: command, sec, engi, med, janitor - EVA spacesuit - Freedom's spacesuit (freedom from vacuum's oppression) - Carp hardsuit - Bounty hunter hardsuit - Blackmarket combat medic hardsuit -*/ - - //Death squad armored space suits, not hardsuits! -/obj/item/clothing/head/helmet/space/hardsuit/deathsquad - name = "MK.III SWAT Helmet" - desc = "An advanced tactical space helmet." - icon_state = "deathsquad" - inhand_icon_state = "deathsquad" - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 20) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - actions_types = list() - -/obj/item/clothing/head/helmet/space/hardsuit/deathsquad/attack_self(mob/user) - return - -/obj/item/clothing/suit/space/hardsuit/deathsquad - name = "MK.III SWAT Suit" - desc = "A prototype designed to replace the ageing MK.II SWAT suit. Based on the streamlined MK.II model, the traditional ceramic and graphene plate construction was replaced with plasteel, allowing superior armor against most threats. There's room for some kind of energy projection device on the back." - icon_state = "deathsquad" - inhand_icon_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 20) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/deathsquad - dog_fashion = /datum/dog_fashion/back/deathsquad - cell = /obj/item/stock_parts/cell/bluespace - - //NEW SWAT suit -/obj/item/clothing/suit/space/swat - name = "MK.I SWAT Suit" - desc = "A tactical space suit first developed in a joint effort by the defunct IS-ERI and Nanotrasen in 20XX for military space operations. A tried and true workhorse, it is very difficult to move in but offers robust protection against all threats!" - icon_state = "heavy" - inhand_icon_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list(MELEE = 40, BULLET = 30, LASER = 30,ENERGY = 40, BOMB = 50, BIO = 90, RAD = 20, FIRE = 100, ACID = 100, WOUND = 15) - strip_delay = 120 - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/helmet/space/beret - name = "officer's beret" - desc = "An armored beret commonly used by special operations officers. Uses advanced force field technology to protect the head from space." - icon_state = "beret_badge" - greyscale_colors = "#972A2A#F2F2F2" - dynamic_hair_suffix = "+generic" - dynamic_fhair_suffix = "+generic" - flags_inv = 0 - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 15) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/suit/space/officer - name = "officer's jacket" - desc = "An armored, space-proof jacket used in special operations." - icon_state = "detective" - inhand_icon_state = "det_suit" - blood_overlay_type = "coat" - slowdown = 0 - flags_inv = 0 - w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 15) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - - //NASA Voidsuit -/obj/item/clothing/head/helmet/space/nasavoid - name = "NASA Void Helmet" - desc = "An old, NASA CentCom branch designed, dark red space suit helmet." - icon_state = "void" - inhand_icon_state = "void" - -/obj/item/clothing/suit/space/nasavoid - name = "NASA Voidsuit" - icon_state = "void" - inhand_icon_state = "void" - desc = "An old, NASA CentCom branch designed, dark red space suit." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) - -/obj/item/clothing/head/helmet/space/nasavoid/old - name = "Engineering Void Helmet" - desc = "A CentCom engineering dark red space suit helmet. While old and dusty, it still gets the job done." - icon_state = "void" - inhand_icon_state = "void" - -/obj/item/clothing/suit/space/nasavoid/old - name = "Engineering Voidsuit" - icon_state = "void" - inhand_icon_state = "void" - desc = "A CentCom engineering dark red space suit. Age has degraded the suit making it difficult to move around in." - slowdown = 4 - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) - - //Space santa outfit suit -/obj/item/clothing/head/helmet/space/santahat - name = "Santa's hat" - desc = "Ho ho ho. Merrry X-mas!" - icon_state = "santahat" - flags_cover = HEADCOVERSEYES - - dog_fashion = /datum/dog_fashion/head/santa - -/obj/item/clothing/suit/space/santa - name = "Santa's suit" - desc = "Festive!" - icon_state = "santa" - inhand_icon_state = "santa" - slowdown = 0 - allowed = list(/obj/item) //for stuffing exta special presents - - - //Space pirate outfit -/obj/item/clothing/head/helmet/space/pirate - name = "modified EVA helmet" - desc = "A modified helmet to allow space pirates to intimidate their customers whilst staying safe from the void. Comes with some additional protection." - icon_state = "spacepirate" - inhand_icon_state = "spacepiratehelmet" - armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) - strip_delay = 40 - equip_delay_other = 20 - -/obj/item/clothing/head/helmet/space/pirate/bandana - icon_state = "spacebandana" - inhand_icon_state = "spacepiratehelmet" - -/obj/item/clothing/suit/space/pirate - name = "modified EVA suit" - desc = "A modified suit to allow space pirates to board shuttles and stations while avoiding the maw of the void. Comes with additional protection, and is lighter to move in." - icon_state = "spacepirate" - w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) - slowdown = 0 - armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) - strip_delay = 40 - equip_delay_other = 20 - - //Emergency Response Team suits -/obj/item/clothing/head/helmet/space/hardsuit/ert - name = "emergency response team commander helmet" - desc = "The integrated helmet of an ERT hardsuit, this one has blue highlights." - icon_state = "hardsuit0-ert_commander" - inhand_icon_state = "hardsuit0-ert_commander" - hardsuit_type = "ert_commander" - armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) - strip_delay = 130 - light_range = 7 - resistance_flags = FIRE_PROOF - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - -/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) - -/obj/item/clothing/suit/space/hardsuit/ert - name = "emergency response team commander hardsuit" - desc = "The standard issue hardsuit of the ERT, this one has blue highlights. Offers superb protection against environmental hazards." - icon_state = "ert_command" - inhand_icon_state = "ert_command" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) - slowdown = 0 - strip_delay = 130 - resistance_flags = FIRE_PROOF - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - cell = /obj/item/stock_parts/cell/bluespace - -// ERT suit's gets EMP Protection -/obj/item/clothing/suit/space/hardsuit/ert/Initialize() - . = ..() - AddElement(/datum/element/empprotection, EMP_PROTECT_CONTENTS) - - //ERT Security -/obj/item/clothing/head/helmet/space/hardsuit/ert/sec - name = "emergency response team security helmet" - desc = "The integrated helmet of an ERT hardsuit, this one has red highlights." - icon_state = "hardsuit0-ert_security" - inhand_icon_state = "hardsuit0-ert_security" - hardsuit_type = "ert_security" - -/obj/item/clothing/suit/space/hardsuit/ert/sec - name = "emergency response team security hardsuit" - desc = "The standard issue hardsuit of the ERT, this one has red highlights. Offers superb protection against environmental hazards." - icon_state = "ert_security" - inhand_icon_state = "ert_security" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec - - //ERT Engineering -/obj/item/clothing/head/helmet/space/hardsuit/ert/engi - name = "emergency response team engineering helmet" - desc = "The integrated helmet of an ERT hardsuit, this one has orange highlights." - icon_state = "hardsuit0-ert_engineer" - inhand_icon_state = "hardsuit0-ert_engineer" - hardsuit_type = "ert_engineer" - -/obj/item/clothing/suit/space/hardsuit/ert/engi - name = "emergency response team engineering hardsuit" - desc = "The standard issue hardsuit of the ERT, this one has orange highlights. Offers superb protection against environmental hazards." - icon_state = "ert_engineer" - inhand_icon_state = "ert_engineer" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi - - //ERT Medical -/obj/item/clothing/head/helmet/space/hardsuit/ert/med - name = "emergency response team medical helmet" - desc = "The integrated helmet of an ERT hardsuit, this one has white highlights." - icon_state = "hardsuit0-ert_medical" - inhand_icon_state = "hardsuit0-ert_medical" - hardsuit_type = "ert_medical" - -/obj/item/clothing/suit/space/hardsuit/ert/med - name = "emergency response team medical hardsuit" - desc = "The standard issue hardsuit of the ERT, this one has white highlights. Offers superb protection against environmental hazards." - icon_state = "ert_medical" - inhand_icon_state = "ert_medical" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med - - //ERT Janitor -/obj/item/clothing/head/helmet/space/hardsuit/ert/jani - name = "emergency response team janitorial helmet" - desc = "The integrated helmet of an ERT hardsuit, this one has purple highlights." - icon_state = "hardsuit0-ert_janitor" - inhand_icon_state = "hardsuit0-ert_janitor" - hardsuit_type = "ert_janitor" - -/obj/item/clothing/suit/space/hardsuit/ert/jani - name = "emergency response team janitorial hardsuit" - desc = "The standard issue hardsuit of the ERT, this one has purple highlights. Offers superb protection against environmental hazards. This one has extra clips for holding various janitorial tools." - icon_state = "ert_janitor" - inhand_icon_state = "ert_janitor" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/jani - allowed = list(/obj/item/tank/internals, /obj/item/storage/bag/trash, /obj/item/melee/flyswatter, /obj/item/mop, /obj/item/holosign_creator, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/spray/chemsprayer/janitor) - - //ERT Clown -/obj/item/clothing/head/helmet/space/hardsuit/ert/clown - name = "emergency response team clown helmet" - desc = "The integrated helmet of an ERT hardsuit, this one is colourful!" - icon_state = "hardsuit0-ert_clown" - inhand_icon_state = "hardsuit0-ert_clown" - hardsuit_type = "ert_clown" - -/obj/item/clothing/suit/space/hardsuit/ert/clown - name = "emergency response team clown hardsuit" - desc = "The non-standard issue hardsuit of the ERT, this one is colourful! Offers superb protection against environmental hazards. Does not offer superb protection against a ravaging crew." - icon_state = "ert_clown" - inhand_icon_state = "ert_clown" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/clown - allowed = list(/obj/item/tank/internals, /obj/item/bikehorn, /obj/item/instrument, /obj/item/food/grown/banana, /obj/item/grown/bananapeel) - -/obj/item/clothing/suit/space/eva - name = "EVA suit" - icon_state = "space" - inhand_icon_state = "s_suit" - desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65) - -/obj/item/clothing/head/helmet/space/eva - name = "EVA helmet" - icon_state = "space" - inhand_icon_state = "space" - desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies." - flash_protect = FLASH_PROTECTION_NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65) - -/obj/item/clothing/head/helmet/space/eva/examine(mob/user) - . = ..() - . += span_notice("You can start constructing a critter sized mecha with a [span_bold("cyborg leg")].") - -/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, params) - . = ..() - if(.) - return - if(!istype(attacked_with, /obj/item/bodypart/l_leg/robot) && !istype(attacked_with, /obj/item/bodypart/r_leg/robot)) - return - if(ismob(loc)) - user.balloon_alert(user, "drop the helmet first!") - return - user.balloon_alert(user, "leg attached") - new /obj/item/bot_assembly/vim(loc) - qdel(attacked_with) - qdel(src) - -/obj/item/clothing/head/helmet/space/freedom - name = "eagle helmet" - desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle." - icon_state = "griffinhat" - inhand_icon_state = "griffinhat" - armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 40, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = ACID_PROOF | FIRE_PROOF - -/obj/item/clothing/suit/space/freedom - name = "eagle suit" - desc = "An advanced, light suit, fabricated from a mixture of synthetic feathers and space-resistant material. A gun holster appears to be integrated into the suit and the wings appear to be stuck in 'freedom' mode." - icon_state = "freedom" - inhand_icon_state = "freedom" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 20, BULLET = 40, LASER = 30,ENERGY = 40, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = ACID_PROOF | FIRE_PROOF - slowdown = 0 - -//Carpsuit, bestsuit, lovesuit -/obj/item/clothing/head/helmet/space/hardsuit/carp - name = "carp helmet" - desc = "Spaceworthy and it looks like a space carp's head, smells like one too." - icon_state = "carp_helm" - inhand_icon_state = "syndicate" - armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75) //As whimpy as a space carp - light_system = NO_LIGHT_SUPPORT - light_range = 0 //luminosity when on - actions_types = list() - flags_inv = HIDEEARS|HIDEHAIR|HIDEFACIALHAIR //facial hair will clip with the helm, this'll need a dynamic_fhair_suffix at some point. - -/obj/item/clothing/head/helmet/space/hardsuit/carp/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) - -/obj/item/clothing/suit/space/hardsuit/carp - name = "carp space suit" - desc = "A slimming piece of dubious space carp technology, you suspect it won't stand up to hand-to-hand blows." - icon_state = "carp_suit" - inhand_icon_state = "space_suit_syndicate" - slowdown = 0 //Space carp magic, never stop believing - armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75) //As whimpy whimpy whoo - allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/rifle/boltaction/harpoon) //I'm giving you a hint here - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp - -/obj/item/clothing/head/helmet/space/hardsuit/carp/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == ITEM_SLOT_HEAD) - user.faction |= "carp" - -/obj/item/clothing/head/helmet/space/hardsuit/carp/dropped(mob/living/carbon/human/user) - ..() - if (user.head == src) - user.faction -= "carp" - -/obj/item/clothing/suit/space/hardsuit/carp/old - name = "battered carp space suit" - desc = "It's covered in bite marks and scratches, yet seems to be still perfectly functional." - slowdown = 1 - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal - name = "paranormal response team helmet" - desc = "A helmet worn by those who deal with paranormal threats for a living." - icon_state = "hardsuit0-prt" - inhand_icon_state = "hardsuit0-prt" - hardsuit_type = "prt" - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - actions_types = list() - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal - name = "paranormal response team hardsuit" - desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats." - icon_state = "knight_grey" - inhand_icon_state = "knight_grey" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING) - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - name = "inquisitor's hardsuit" - icon_state = "hardsuit-inq" - inhand_icon_state = "hardsuit-inq" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - name = "inquisitor's helmet" - icon_state = "hardsuit0-inq" - inhand_icon_state = "hardsuit0-inq" - hardsuit_type = "inq" - -/obj/item/clothing/suit/space/hardsuit/berserker - name = "berserker hardsuit" - desc = "Voices echo from the hardsuit, driving the user insane." - icon_state = "hardsuit-berserker" - inhand_icon_state = "hardsuit-berserker" - slowdown = 0 - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/berserker - armor = list(MELEE = 30, BULLET = 10, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 10, FIRE = 100, ACID = 100) - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw) - - -/obj/item/clothing/suit/space/hardsuit/berserker/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING) - -/obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet() - var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet - if(helm?.berserk_active) - return - return ..() - -#define MAX_BERSERK_CHARGE 100 -#define PROJECTILE_HIT_MULTIPLIER 1.5 -#define DAMAGE_TO_CHARGE_SCALE 0.25 -#define CHARGE_DRAINED_PER_SECOND 5 -#define BERSERK_MELEE_ARMOR_ADDED 50 -#define BERSERK_ATTACK_SPEED_MODIFIER 0.25 - -/obj/item/clothing/head/helmet/space/hardsuit/berserker - name = "berserker helmet" - desc = "Peering into the eyes of the helmet is enough to seal damnation." - icon_state = "hardsuit0-berserker" - inhand_icon_state = "hardsuit0-berserker" - hardsuit_type = "berserker" - armor = list(MELEE = 30, BULLET = 10, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 10, FIRE = 100, ACID = 100) - actions_types = list(/datum/action/item_action/berserk_mode) - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - /// Current charge of berserk, goes from 0 to 100 - var/berserk_charge = 0 - /// Status of berserk - var/berserk_active = FALSE - -/obj/item/clothing/head/helmet/space/hardsuit/berserker/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) - -/obj/item/clothing/head/helmet/space/hardsuit/berserker/examine() - . = ..() - . += span_notice("Berserk mode is [berserk_charge]% charged.") - -/obj/item/clothing/head/helmet/space/hardsuit/berserker/process(delta_time) - . = ..() - if(berserk_active) - berserk_charge = clamp(berserk_charge - CHARGE_DRAINED_PER_SECOND * delta_time, 0, MAX_BERSERK_CHARGE) - if(!berserk_charge) - if(ishuman(loc)) - end_berserk(loc) - -/obj/item/clothing/head/helmet/space/hardsuit/berserker/dropped(mob/user) - . = ..() - end_berserk(user) - -/obj/item/clothing/head/helmet/space/hardsuit/berserker/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(berserk_active) - return - var/berserk_value = damage * DAMAGE_TO_CHARGE_SCALE - if(attack_type == PROJECTILE_ATTACK) - berserk_value *= PROJECTILE_HIT_MULTIPLIER - berserk_charge = clamp(round(berserk_charge + berserk_value), 0, MAX_BERSERK_CHARGE) - if(berserk_charge >= MAX_BERSERK_CHARGE) - to_chat(owner, span_notice("Berserk mode is fully charged.")) - -/// Starts berserk, giving the wearer 50 melee armor, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier -/obj/item/clothing/head/helmet/space/hardsuit/berserker/proc/berserk_mode(mob/living/carbon/human/user) - to_chat(user, span_warning("You enter berserk mode.")) - playsound(user, 'sound/magic/staff_healing.ogg', 50) - user.add_movespeed_modifier(/datum/movespeed_modifier/berserk) - user.physiology.armor.melee += BERSERK_MELEE_ARMOR_ADDED - user.next_move_modifier *= BERSERK_ATTACK_SPEED_MODIFIER - user.add_atom_colour(COLOR_BUBBLEGUM_RED, TEMPORARY_COLOUR_PRIORITY) - ADD_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT) - ADD_TRAIT(src, TRAIT_NODROP, BERSERK_TRAIT) - berserk_active = TRUE - -/// Ends berserk, reverting the changes from the proc [berserk_mode] -/obj/item/clothing/head/helmet/space/hardsuit/berserker/proc/end_berserk(mob/living/carbon/human/user) - if(!berserk_active) - return - to_chat(user, span_warning("You exit berserk mode.")) - playsound(user, 'sound/magic/summonitems_generic.ogg', 50) - user.remove_movespeed_modifier(/datum/movespeed_modifier/berserk) - user.physiology.armor.melee -= BERSERK_MELEE_ARMOR_ADDED - user.next_move_modifier /= BERSERK_ATTACK_SPEED_MODIFIER - user.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BUBBLEGUM_RED) - REMOVE_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT) - REMOVE_TRAIT(src, TRAIT_NODROP, BERSERK_TRAIT) - berserk_active = FALSE - -#undef MAX_BERSERK_CHARGE -#undef PROJECTILE_HIT_MULTIPLIER -#undef DAMAGE_TO_CHARGE_SCALE -#undef CHARGE_DRAINED_PER_SECOND -#undef BERSERK_MELEE_ARMOR_ADDED -#undef BERSERK_ATTACK_SPEED_MODIFIER - -/obj/item/clothing/head/helmet/space/fragile - name = "emergency space helmet" - desc = "A bulky, air-tight helmet meant to protect the user during emergency situations. It doesn't look very durable." - icon_state = "syndicate-helm-orange" - inhand_icon_state = "syndicate-helm-orange" - armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 0, ACID = 0) - strip_delay = 65 - -/obj/item/clothing/suit/space/fragile - name = "emergency space suit" - desc = "A bulky, air-tight suit meant to protect the user during emergency situations. It doesn't look very durable." - var/torn = FALSE - icon_state = "syndicate-orange" - inhand_icon_state = "syndicate-orange" - slowdown = 2 - armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 0, ACID = 0) - strip_delay = 65 - -/obj/item/clothing/suit/space/fragile/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!torn && prob(50)) - to_chat(owner, span_warning("[src] tears from the damage, breaking the air-tight seal!")) - clothing_flags &= ~STOPSPRESSUREDAMAGE - name = "torn [src]." - desc = "A bulky suit meant to protect the user during emergency situations, at least until someone tore a hole in the suit." - torn = TRUE - playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE) - playsound(loc, 'sound/effects/refill.ogg', 50, TRUE) - -/obj/item/clothing/suit/space/hunter - name = "bounty hunting suit" - desc = "A custom version of the MK.II SWAT suit, modified to look rugged and tough. Works as a space suit, if you can find a helmet." - icon_state = "hunter" - inhand_icon_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list(MELEE = 60, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) - strip_delay = 130 - resistance_flags = FIRE_PROOF | ACID_PROOF - cell = /obj/item/stock_parts/cell/hyper - -//We can either be alive monsters or dead monsters, you choose. -/obj/item/clothing/head/helmet/space/hardsuit/combatmedic - name = "endemic combat medic helmet" - desc = "The integrated helmet of the combat medic hardsuit, this has a bright, glowing facemask." - icon_state = "hardsuit0-combatmedic" - inhand_icon_state = "hardsuit0-combatmedic" - armor = list(MELEE = 35, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 5, BIO = 100, RAD = 50, FIRE = 65, ACID = 75) - hardsuit_type = "combatmedic" - -/obj/item/clothing/suit/space/hardsuit/combatmedic - name = "endemic combat medic hardsuit" - desc = "The standard issue hardsuit of infectious disease officers, before the formation of ERT teams. This model is labeled 'Veradux'." - icon_state = "combatmedic" - inhand_icon_state = "combatmedic" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/combatmedic - armor = list(MELEE = 35, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 5, BIO = 100, RAD = 50, FIRE = 65, ACID = 75) - allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/circular_saw, /obj/item/tank/internals, /obj/item/storage/box/pillbottles,\ - /obj/item/storage/firstaid, /obj/item/stack/medical/gauze, /obj/item/stack/medical/suture, /obj/item/stack/medical/mesh, /obj/item/storage/bag/chemistry) diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm new file mode 100644 index 00000000000..03a1b257b6c --- /dev/null +++ b/code/modules/clothing/spacesuits/pirate.dm @@ -0,0 +1,23 @@ +/obj/item/clothing/head/helmet/space/pirate + name = "modified EVA helmet" + desc = "A modified helmet to allow space pirates to intimidate their customers whilst staying safe from the void. Comes with some additional protection." + icon_state = "spacepirate" + inhand_icon_state = "spacepiratehelmet" + armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) + strip_delay = 40 + equip_delay_other = 20 + +/obj/item/clothing/head/helmet/space/pirate/bandana + icon_state = "spacebandana" + inhand_icon_state = "spacepiratehelmet" + +/obj/item/clothing/suit/space/pirate + name = "modified EVA suit" + desc = "A modified suit to allow space pirates to board shuttles and stations while avoiding the maw of the void. Comes with additional protection, and is lighter to move in." + icon_state = "spacepirate" + w_class = WEIGHT_CLASS_NORMAL + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) + slowdown = 0 + armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) + strip_delay = 40 + equip_delay_other = 20 diff --git a/code/modules/clothing/spacesuits/santa.dm b/code/modules/clothing/spacesuits/santa.dm new file mode 100644 index 00000000000..cc59cfdac4d --- /dev/null +++ b/code/modules/clothing/spacesuits/santa.dm @@ -0,0 +1,15 @@ +/obj/item/clothing/head/helmet/space/santahat + name = "Santa's hat" + desc = "Ho ho ho. Merrry X-mas!" + icon_state = "santahat" + flags_cover = HEADCOVERSEYES + + dog_fashion = /datum/dog_fashion/head/santa + +/obj/item/clothing/suit/space/santa + name = "Santa's suit" + desc = "Festive!" + icon_state = "santa" + inhand_icon_state = "santa" + slowdown = 0 + allowed = list(/obj/item) //for stuffing exta special presents diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm new file mode 100644 index 00000000000..08c706c77e6 --- /dev/null +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -0,0 +1,90 @@ + //NASA Voidsuit +/obj/item/clothing/head/helmet/space/nasavoid + name = "NASA Void Helmet" + desc = "An old, NASA CentCom branch designed, dark red space suit helmet." + icon_state = "void" + inhand_icon_state = "void" + +/obj/item/clothing/suit/space/nasavoid + name = "NASA Voidsuit" + icon_state = "void" + inhand_icon_state = "void" + desc = "An old, NASA CentCom branch designed, dark red space suit." + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) + +/obj/item/clothing/head/helmet/space/nasavoid/old + name = "Engineering Void Helmet" + desc = "A CentCom engineering dark red space suit helmet. While old and dusty, it still gets the job done." + icon_state = "void" + inhand_icon_state = "void" + +/obj/item/clothing/suit/space/nasavoid/old + name = "Engineering Voidsuit" + icon_state = "void" + inhand_icon_state = "void" + desc = "A CentCom engineering dark red space suit. Age has degraded the suit making it difficult to move around in." + slowdown = 4 + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) + + //EVA suit +/obj/item/clothing/suit/space/eva + name = "EVA suit" + icon_state = "space" + inhand_icon_state = "s_suit" + desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65) + +/obj/item/clothing/head/helmet/space/eva + name = "EVA helmet" + icon_state = "space" + inhand_icon_state = "space" + desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies." + flash_protect = FLASH_PROTECTION_NONE + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65) + +/obj/item/clothing/head/helmet/space/eva/examine(mob/user) + . = ..() + . += span_notice("You can start constructing a critter sized mecha with a [span_bold("cyborg leg")].") + +/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, params) + . = ..() + if(.) + return + if(!istype(attacked_with, /obj/item/bodypart/l_leg/robot) && !istype(attacked_with, /obj/item/bodypart/r_leg/robot)) + return + if(ismob(loc)) + user.balloon_alert(user, "drop the helmet first!") + return + user.balloon_alert(user, "leg attached") + new /obj/item/bot_assembly/vim(loc) + qdel(attacked_with) + qdel(src) + + //Emergency suit +/obj/item/clothing/head/helmet/space/fragile + name = "emergency space helmet" + desc = "A bulky, air-tight helmet meant to protect the user during emergency situations. It doesn't look very durable." + icon_state = "syndicate-helm-orange" + inhand_icon_state = "syndicate-helm-orange" + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 0, ACID = 0) + strip_delay = 65 + +/obj/item/clothing/suit/space/fragile + name = "emergency space suit" + desc = "A bulky, air-tight suit meant to protect the user during emergency situations. It doesn't look very durable." + var/torn = FALSE + icon_state = "syndicate-orange" + inhand_icon_state = "syndicate-orange" + slowdown = 2 + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 0, ACID = 0) + strip_delay = 65 + +/obj/item/clothing/suit/space/fragile/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(!torn && prob(50)) + to_chat(owner, span_warning("[src] tears from the damage, breaking the air-tight seal!")) + clothing_flags &= ~STOPSPRESSUREDAMAGE + name = "torn [src]." + desc = "A bulky suit meant to protect the user during emergency situations, at least until someone tore a hole in the suit." + torn = TRUE + playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE) + playsound(loc, 'sound/effects/refill.ogg', 50, TRUE) diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm new file mode 100644 index 00000000000..d68b6220b1c --- /dev/null +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -0,0 +1,27 @@ +/obj/item/clothing/head/helmet/space/beret + name = "officer's beret" + desc = "An armored beret commonly used by special operations officers. Uses advanced force field technology to protect the head from space." + icon_state = "beret_badge" + greyscale_colors = "#972A2A#F2F2F2" + dynamic_hair_suffix = "+generic" + dynamic_fhair_suffix = "+generic" + flags_inv = 0 + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 15) + strip_delay = 130 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF | ACID_PROOF + +/obj/item/clothing/suit/space/officer + name = "officer's jacket" + desc = "An armored, space-proof jacket used in special operations." + icon_state = "detective" + inhand_icon_state = "det_suit" + blood_overlay_type = "coat" + slowdown = 0 + flags_inv = 0 + w_class = WEIGHT_CLASS_NORMAL + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 15) + strip_delay = 130 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/spacesuits/swat.dm b/code/modules/clothing/spacesuits/swat.dm new file mode 100644 index 00000000000..3d488a376e2 --- /dev/null +++ b/code/modules/clothing/spacesuits/swat.dm @@ -0,0 +1,9 @@ +/obj/item/clothing/suit/space/swat + name = "MK.I SWAT Suit" + desc = "A tactical space suit first developed in a joint effort by the defunct IS-ERI and Nanotrasen in 20XX for military space operations. A tried and true workhorse, it is very difficult to move in but offers robust protection against all threats!" + icon_state = "heavy" + inhand_icon_state = "swat_suit" + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + armor = list(MELEE = 40, BULLET = 30, LASER = 30,ENERGY = 40, BOMB = 50, BIO = 90, RAD = 20, FIRE = 100, ACID = 100, WOUND = 15) + strip_delay = 120 + resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/ablativecoat.dm b/code/modules/clothing/suits/ablativecoat.dm new file mode 100644 index 00000000000..56586aea02c --- /dev/null +++ b/code/modules/clothing/suits/ablativecoat.dm @@ -0,0 +1,49 @@ +/obj/item/clothing/head/hooded/ablative + name = "ablative hood" + desc = "Hood hopefully belonging to an ablative trenchcoat. Includes a visor for cool-o-vision." + icon_state = "ablativehood" + armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 60, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) + strip_delay = 30 + var/hit_reflect_chance = 50 + +/obj/item/clothing/head/hooded/ablative/equipped(mob/living/carbon/human/user, slot) + ..() + to_chat(user, "As you put on the hood, a visor shifts into place and starts analyzing the people around you. Neat!") + ADD_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT) + var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] + H.add_hud_to(user) + +/obj/item/clothing/head/hooded/ablative/dropped(mob/living/carbon/human/user) + ..() + to_chat(user, "You take off the hood, removing the visor in the process and disabling its integrated hud.") + REMOVE_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT) + var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] + H.remove_hud_from(user) + +/obj/item/clothing/head/hooded/ablative/IsReflect(def_zone) + if(def_zone != BODY_ZONE_HEAD) //If not shot where ablative is covering you, you don't get the reflection bonus! + return FALSE + if (prob(hit_reflect_chance)) + return TRUE + +/obj/item/clothing/suit/hooded/ablative + name = "ablative trenchcoat" + desc = "Experimental trenchcoat specially crafted to reflect and absorb laser and disabler shots. Don't expect it to do all that much against an axe or a shotgun, however." + icon_state = "ablativecoat" + inhand_icon_state = "ablativecoat" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 60, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) + hoodtype = /obj/item/clothing/head/hooded/ablative + strip_delay = 30 + equip_delay_other = 40 + var/hit_reflect_chance = 50 + +/obj/item/clothing/suit/hooded/ablative/Initialize() + . = ..() + allowed = GLOB.security_vest_allowed + +/obj/item/clothing/suit/hooded/ablative/IsReflect(def_zone) + if(!(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))) //If not shot where ablative is covering you, you don't get the reflection bonus! + return FALSE + if (prob(hit_reflect_chance)) + return TRUE diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/costume.dm similarity index 61% rename from code/modules/clothing/suits/miscellaneous.dm rename to code/modules/clothing/suits/costume.dm index debac02277f..b819f322fbe 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/costume.dm @@ -1,36 +1,3 @@ -/* - * Contains: - * Lasertag - * Costume - * Misc - */ - -/* - * Lasertag - */ -/obj/item/clothing/suit/bluetag - name = "blue laser tag armor" - desc = "A piece of plastic armor. It has sensors that react to red light." //Lasers are concentrated light - icon_state = "bluetag" - inhand_icon_state = "bluetag" - blood_overlay_type = "armor" - body_parts_covered = CHEST - allowed = list (/obj/item/gun/energy/laser/bluetag) - resistance_flags = NONE - -/obj/item/clothing/suit/redtag - name = "red laser tag armor" - desc = "A piece of plastic armor. It has sensors that react to blue light." - icon_state = "redtag" - inhand_icon_state = "redtag" - blood_overlay_type = "armor" - body_parts_covered = CHEST - allowed = list (/obj/item/gun/energy/laser/redtag) - resistance_flags = NONE - -/* - * Costume - */ /obj/item/clothing/suit/hooded/flashsuit name = "flashy costume" desc = "What did you expect?" @@ -70,7 +37,6 @@ strip_delay = 40 equip_delay_other = 20 - /obj/item/clothing/suit/cyborg_suit name = "cyborg suit" desc = "Suit for a cyborg costume." @@ -80,7 +46,6 @@ fire_resist = T0C+5200 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - /obj/item/clothing/suit/justice name = "justice suit" desc = "this pretty much looks ridiculous" //Needs no fixing @@ -89,7 +54,6 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) - /obj/item/clothing/suit/judgerobe name = "judge's robe" desc = "This robe commands authority." @@ -99,7 +63,6 @@ allowed = list(/obj/item/storage/fancy/cigarettes, /obj/item/stack/spacecash) flags_inv = HIDEJUMPSUIT - /obj/item/clothing/suit/apron/overalls name = "coveralls" desc = "A set of denim overalls." @@ -133,7 +96,6 @@ body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - /obj/item/clothing/suit/imperium_monk name = "\improper Imperium monk suit" desc = "Have YOU killed a xeno today?" @@ -143,7 +105,6 @@ flags_inv = HIDESHOES|HIDEJUMPSUIT allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) - /obj/item/clothing/suit/chickensuit name = "chicken suit" desc = "A suit made long ago by the ancient empire KFC." @@ -152,7 +113,6 @@ body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET flags_inv = HIDESHOES|HIDEJUMPSUIT - /obj/item/clothing/suit/monkeysuit name = "monkey suit" desc = "A suit that looks like a primate." @@ -208,7 +168,6 @@ I.add_overlay(mutable_appearance('icons/mob/robots.dmi', "robot_e")) //gotta look realistic add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including yourself because you're totally a robot) - /obj/item/clothing/suit/snowman name = "snowman outfit" desc = "Two white spheres covered in white glitter. 'Tis the season." @@ -358,128 +317,12 @@ body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEJUMPSUIT -/* - * Misc - */ - -/obj/item/clothing/suit/straight_jacket - name = "straight jacket" - desc = "A suit that completely restrains the wearer. Manufactured by Antyphun Corp." //Straight jacket is antifun - icon_state = "straight_jacket" - inhand_icon_state = "straight_jacket" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - clothing_flags = DANGEROUS_OBJECT - equip_delay_self = 50 - strip_delay = 60 - breakouttime = 5 MINUTES - -/obj/item/clothing/suit/ianshirt - name = "worn shirt" - 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) - -/obj/item/clothing/suit/nerdshirt - name = "gamer shirt" - 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) - -/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat. - name = "Vape Naysh shirt" - desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?" - icon_state = "vapeshirt" - inhand_icon_state = "vapeshirt" - /obj/item/clothing/suit/striped_sweater name = "striped sweater" desc = "Reminds you of someone, but you just can't put your finger on it..." icon_state = "waldo_shirt" inhand_icon_state = "waldo_shirt" -/obj/item/clothing/suit/jacket - name = "bomber jacket" - desc = "Aviators not included." - icon_state = "bomberjacket" - inhand_icon_state = "brownjsuit" - 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/radio) - 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) - -/obj/item/clothing/suit/jacket/leather - name = "leather jacket" - desc = "Pompadour not included." - icon_state = "leatherjacket" - inhand_icon_state = "hostrench" - 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" - desc = "That's a damn fine coat." - icon_state = "leathercoat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - cold_protection = CHEST|GROIN|ARMS|LEGS - -/obj/item/clothing/suit/jacket/puffer - name = "puffer jacket" - desc = "A thick jacket with a rubbery, water-resistant shell." - icon_state = "pufferjacket" - inhand_icon_state = "hostrench" - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 0) - species_exception = list(/datum/species/golem/bone) - -/obj/item/clothing/suit/jacket/puffer/vest - name = "puffer vest" - desc = "A thick vest with a rubbery, water-resistant shell." - icon_state = "puffervest" - inhand_icon_state = "armor" - body_parts_covered = CHEST|GROIN - cold_protection = CHEST|GROIN - armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 30, RAD = 0, FIRE = 0, ACID = 0) - -/obj/item/clothing/suit/jacket/miljacket - name = "military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." - icon_state = "militaryjacket" - inhand_icon_state = "militaryjacket" - 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/radio) - -/obj/item/clothing/suit/jacket/letterman - name = "letterman jacket" - desc = "A classic brown letterman jacket. Looks pretty hot and heavy." - icon_state = "letterman" - inhand_icon_state = "letterman" - species_exception = list(/datum/species/golem) - -/obj/item/clothing/suit/jacket/letterman_red - name = "red letterman jacket" - 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) - -/obj/item/clothing/suit/jacket/letterman_syndie - name = "blood-red letterman jacket" - 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) - -/obj/item/clothing/suit/jacket/letterman_nanotrasen - name = "blue letterman jacket" - 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) - /obj/item/clothing/suit/dracula name = "dracula coat" desc = "Looks like this belongs in a very old movie set." @@ -514,23 +357,6 @@ inhand_icon_state = "pharoah" body_parts_covered = CHEST|GROIN -/obj/item/clothing/suit/caution - name = "wet floor sign" - desc = "Caution! Wet Floor!" - icon_state = "caution" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 1 - throwforce = 3 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - body_parts_covered = CHEST|GROIN - 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, RAD = 0, FIRE = 0, ACID = 0) - species_exception = list(/datum/species/golem) - /obj/item/clothing/suit/changshan_red name = "red changshan" desc = "A gorgeously embroidered silk shirt." @@ -559,56 +385,6 @@ inhand_icon_state = "cheongsam_blue" body_parts_covered = CHEST|GROIN|ARMS|LEGS -/obj/item/clothing/head/hooded/ablative - name = "ablative hood" - desc = "Hood hopefully belonging to an ablative trenchcoat. Includes a visor for cool-o-vision." - icon_state = "ablativehood" - armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 60, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) - strip_delay = 30 - var/hit_reflect_chance = 50 - -/obj/item/clothing/head/hooded/ablative/equipped(mob/living/carbon/human/user, slot) - ..() - to_chat(user, "As you put on the hood, a visor shifts into place and starts analyzing the people around you. Neat!") - ADD_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT) - var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - H.add_hud_to(user) - -/obj/item/clothing/head/hooded/ablative/dropped(mob/living/carbon/human/user) - ..() - to_chat(user, "You take off the hood, removing the visor in the process and disabling its integrated hud.") - REMOVE_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT) - var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - H.remove_hud_from(user) - -/obj/item/clothing/head/hooded/ablative/IsReflect(def_zone) - if(def_zone != BODY_ZONE_HEAD) //If not shot where ablative is covering you, you don't get the reflection bonus! - return FALSE - if (prob(hit_reflect_chance)) - return TRUE - -/obj/item/clothing/suit/hooded/ablative - name = "ablative trenchcoat" - desc = "Experimental trenchcoat specially crafted to reflect and absorb laser and disabler shots. Don't expect it to do all that much against an axe or a shotgun, however." - icon_state = "ablativecoat" - inhand_icon_state = "ablativecoat" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 60, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) - hoodtype = /obj/item/clothing/head/hooded/ablative - strip_delay = 30 - equip_delay_other = 40 - var/hit_reflect_chance = 50 - -/obj/item/clothing/suit/hooded/ablative/Initialize() - . = ..() - allowed = GLOB.security_vest_allowed - -/obj/item/clothing/suit/hooded/ablative/IsReflect(def_zone) - if(!(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))) //If not shot where ablative is covering you, you don't get the reflection bonus! - return FALSE - if (prob(hit_reflect_chance)) - return TRUE - /obj/item/clothing/suit/bronze name = "bronze suit" desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice." @@ -616,37 +392,6 @@ icon_state = "clockwork_cuirass_old" armor = list(MELEE = 5, BULLET = 0, LASER = -5, ENERGY = -15, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 20) -/obj/item/clothing/suit/ghost_sheet - name = "ghost sheet" - desc = "The hands float by themselves, so it's extra spooky." - icon_state = "ghost_sheet" - inhand_icon_state = "ghost_sheet" - throwforce = 0 - throw_speed = 1 - throw_range = 2 - 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" - desc = "This is obviously just a bedsheet, but maybe try it on?" - user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) - alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire - -/obj/item/clothing/suit/toggle/suspenders/blue - name = "blue suspenders" - desc = "The symbol of hard labor and dirty jobs." - icon = 'icons/obj/clothing/belts.dmi' - greyscale_colors = "#0000ff" - -/obj/item/clothing/suit/toggle/suspenders/gray - name = "gray suspenders" - desc = "The symbol of hard labor and dirty jobs." - icon = 'icons/obj/clothing/belts.dmi' - greyscale_colors = "#888888" - /obj/item/clothing/suit/hooded/mysticrobe name = "mystic's robe" desc = "Wearing this makes you feel more attuned with the nature of the universe... as well as a bit more irresponsible. " @@ -692,4 +437,3 @@ icon_state = "DutchJacket" inhand_icon_state = "DutchJacket" body_parts_covered = ARMS - diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm new file mode 100644 index 00000000000..901e823624c --- /dev/null +++ b/code/modules/clothing/suits/ghostsheet.dm @@ -0,0 +1,18 @@ +/obj/item/clothing/suit/ghost_sheet + name = "ghost sheet" + desc = "The hands float by themselves, so it's extra spooky." + icon_state = "ghost_sheet" + inhand_icon_state = "ghost_sheet" + throwforce = 0 + throw_speed = 1 + throw_range = 2 + 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" + desc = "This is obviously just a bedsheet, but maybe try it on?" + user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) + alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm new file mode 100644 index 00000000000..acea46308ad --- /dev/null +++ b/code/modules/clothing/suits/jacket.dm @@ -0,0 +1,79 @@ +/obj/item/clothing/suit/jacket + name = "bomber jacket" + desc = "Aviators not included." + icon_state = "bomberjacket" + inhand_icon_state = "brownjsuit" + 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/radio) + 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) + +/obj/item/clothing/suit/jacket/leather + name = "leather jacket" + desc = "Pompadour not included." + icon_state = "leatherjacket" + inhand_icon_state = "hostrench" + 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" + desc = "That's a damn fine coat." + icon_state = "leathercoat" + body_parts_covered = CHEST|GROIN|ARMS|LEGS + cold_protection = CHEST|GROIN|ARMS|LEGS + +/obj/item/clothing/suit/jacket/puffer + name = "puffer jacket" + desc = "A thick jacket with a rubbery, water-resistant shell." + icon_state = "pufferjacket" + inhand_icon_state = "hostrench" + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 0) + species_exception = list(/datum/species/golem/bone) + +/obj/item/clothing/suit/jacket/puffer/vest + name = "puffer vest" + desc = "A thick vest with a rubbery, water-resistant shell." + icon_state = "puffervest" + inhand_icon_state = "armor" + body_parts_covered = CHEST|GROIN + cold_protection = CHEST|GROIN + armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 30, RAD = 0, FIRE = 0, ACID = 0) + +/obj/item/clothing/suit/jacket/miljacket + name = "military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." + icon_state = "militaryjacket" + inhand_icon_state = "militaryjacket" + 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/radio) + +/obj/item/clothing/suit/jacket/letterman + name = "letterman jacket" + desc = "A classic brown letterman jacket. Looks pretty hot and heavy." + icon_state = "letterman" + inhand_icon_state = "letterman" + species_exception = list(/datum/species/golem) + +/obj/item/clothing/suit/jacket/letterman_red + name = "red letterman jacket" + 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) + +/obj/item/clothing/suit/jacket/letterman_syndie + name = "blood-red letterman jacket" + 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) + +/obj/item/clothing/suit/jacket/letterman_nanotrasen + name = "blue letterman jacket" + 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) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 133e7b18947..9d5a8c84411 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -132,6 +132,18 @@ greyscale_colors = "#ff0000" flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/suit/toggle/suspenders/blue + name = "blue suspenders" + desc = "The symbol of hard labor and dirty jobs." + icon = 'icons/obj/clothing/belts.dmi' + greyscale_colors = "#0000ff" + +/obj/item/clothing/suit/toggle/suspenders/gray + name = "gray suspenders" + desc = "The symbol of hard labor and dirty jobs." + icon = 'icons/obj/clothing/belts.dmi' + greyscale_colors = "#888888" + //Security /obj/item/clothing/suit/security/officer name = "security officer's jacket" diff --git a/code/modules/clothing/suits/lasertag.dm b/code/modules/clothing/suits/lasertag.dm new file mode 100644 index 00000000000..e1b75b08c2e --- /dev/null +++ b/code/modules/clothing/suits/lasertag.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/suit/bluetag + name = "blue laser tag armor" + desc = "A piece of plastic armor. It has sensors that react to red light." //Lasers are concentrated light + icon_state = "bluetag" + inhand_icon_state = "bluetag" + blood_overlay_type = "armor" + body_parts_covered = CHEST + allowed = list (/obj/item/gun/energy/laser/bluetag) + resistance_flags = NONE + +/obj/item/clothing/suit/redtag + name = "red laser tag armor" + desc = "A piece of plastic armor. It has sensors that react to blue light." + icon_state = "redtag" + inhand_icon_state = "redtag" + blood_overlay_type = "armor" + body_parts_covered = CHEST + allowed = list (/obj/item/gun/energy/laser/redtag) + resistance_flags = NONE diff --git a/code/modules/clothing/suits/shirt.dm b/code/modules/clothing/suits/shirt.dm new file mode 100644 index 00000000000..1e767a9cefe --- /dev/null +++ b/code/modules/clothing/suits/shirt.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/suit/ianshirt + name = "worn shirt" + 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) + +/obj/item/clothing/suit/nerdshirt + name = "gamer shirt" + 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) + +/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat. + name = "Vape Naysh shirt" + desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?" + icon_state = "vapeshirt" + inhand_icon_state = "vapeshirt" diff --git a/code/modules/clothing/suits/straightjacket.dm b/code/modules/clothing/suits/straightjacket.dm new file mode 100644 index 00000000000..eaafe60ade9 --- /dev/null +++ b/code/modules/clothing/suits/straightjacket.dm @@ -0,0 +1,11 @@ +/obj/item/clothing/suit/straight_jacket + name = "straight jacket" + desc = "A suit that completely restrains the wearer. Manufactured by Antyphun Corp." //Straight jacket is antifun + icon_state = "straight_jacket" + inhand_icon_state = "straight_jacket" + body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + clothing_flags = DANGEROUS_OBJECT + equip_delay_self = 50 + strip_delay = 60 + breakouttime = 5 MINUTES diff --git a/code/modules/clothing/suits/wetfloor.dm b/code/modules/clothing/suits/wetfloor.dm new file mode 100644 index 00000000000..de4a10b963f --- /dev/null +++ b/code/modules/clothing/suits/wetfloor.dm @@ -0,0 +1,16 @@ +/obj/item/clothing/suit/caution + name = "wet floor sign" + desc = "Caution! Wet Floor!" + icon_state = "caution" + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' + force = 1 + throwforce = 3 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + body_parts_covered = CHEST|GROIN + 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, RAD = 0, FIRE = 0, ACID = 0) + species_exception = list(/datum/species/golem) diff --git a/tgstation.dme b/tgstation.dme index b4f7a9c4b79..91746a40a78 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2043,28 +2043,51 @@ #include "code\modules\clothing\glasses\engine_goggles.dm" #include "code\modules\clothing\glasses\hud.dm" #include "code\modules\clothing\gloves\_gloves.dm" +#include "code\modules\clothing\gloves\bone.dm" +#include "code\modules\clothing\gloves\botany.dm" #include "code\modules\clothing\gloves\boxing.dm" #include "code\modules\clothing\gloves\color.dm" -#include "code\modules\clothing\gloves\miscellaneous.dm" +#include "code\modules\clothing\gloves\combat.dm" +#include "code\modules\clothing\gloves\plasmaman.dm" #include "code\modules\clothing\gloves\special.dm" #include "code\modules\clothing\gloves\tacklers.dm" #include "code\modules\clothing\head\_head.dm" +#include "code\modules\clothing\head\animalears.dm" #include "code\modules\clothing\head\beanie.dm" +#include "code\modules\clothing\head\cakehat.dm" #include "code\modules\clothing\head\collectable.dm" +#include "code\modules\clothing\head\cone.dm" +#include "code\modules\clothing\head\costume.dm" +#include "code\modules\clothing\head\crown.dm" +#include "code\modules\clothing\head\fedora.dm" +#include "code\modules\clothing\head\frenchberet.dm" #include "code\modules\clothing\head\hardhat.dm" +#include "code\modules\clothing\head\hat.dm" #include "code\modules\clothing\head\helmet.dm" #include "code\modules\clothing\head\jobs.dm" -#include "code\modules\clothing\head\misc.dm" -#include "code\modules\clothing\head\misc_special.dm" +#include "code\modules\clothing\head\justice.dm" +#include "code\modules\clothing\head\papersack.dm" +#include "code\modules\clothing\head\pirate.dm" +#include "code\modules\clothing\head\religious.dm" #include "code\modules\clothing\head\soft_caps.dm" +#include "code\modules\clothing\head\sombrero.dm" +#include "code\modules\clothing\head\tinfoilhat.dm" +#include "code\modules\clothing\head\tophat.dm" +#include "code\modules\clothing\head\welding.dm" +#include "code\modules\clothing\head\wig.dm" #include "code\modules\clothing\masks\_masks.dm" #include "code\modules\clothing\masks\animal_masks.dm" +#include "code\modules\clothing\masks\bandana.dm" #include "code\modules\clothing\masks\boxing.dm" #include "code\modules\clothing\masks\breath.dm" +#include "code\modules\clothing\masks\costume.dm" #include "code\modules\clothing\masks\gas_filter.dm" #include "code\modules\clothing\masks\gasmask.dm" +#include "code\modules\clothing\masks\gondola.dm" #include "code\modules\clothing\masks\hailer.dm" -#include "code\modules\clothing\masks\miscellaneous.dm" +#include "code\modules\clothing\masks\moustache.dm" +#include "code\modules\clothing\masks\muzzle.dm" +#include "code\modules\clothing\masks\surgical.dm" #include "code\modules\clothing\neck\_neck.dm" #include "code\modules\clothing\outfits\ert.dm" #include "code\modules\clothing\outfits\event.dm" @@ -2074,26 +2097,51 @@ #include "code\modules\clothing\outfits\vv_outfit.dm" #include "code\modules\clothing\shoes\_shoes.dm" #include "code\modules\clothing\shoes\bananashoes.dm" -#include "code\modules\clothing\shoes\colour.dm" +#include "code\modules\clothing\shoes\boots.dm" +#include "code\modules\clothing\shoes\clown.dm" +#include "code\modules\clothing\shoes\costume.dm" +#include "code\modules\clothing\shoes\cowboy.dm" +#include "code\modules\clothing\shoes\cult.dm" +#include "code\modules\clothing\shoes\galoshes.dm" +#include "code\modules\clothing\shoes\gunboots.dm" +#include "code\modules\clothing\shoes\jumpboots.dm" +#include "code\modules\clothing\shoes\kindlekicks.dm" +#include "code\modules\clothing\shoes\laceup.dm" #include "code\modules\clothing\shoes\magboots.dm" -#include "code\modules\clothing\shoes\miscellaneous.dm" +#include "code\modules\clothing\shoes\sandals.dm" +#include "code\modules\clothing\shoes\sneakers.dm" +#include "code\modules\clothing\shoes\wheelys.dm" #include "code\modules\clothing\spacesuits\_spacesuits.dm" +#include "code\modules\clothing\spacesuits\berserker.dm" +#include "code\modules\clothing\spacesuits\bountyhunter.dm" #include "code\modules\clothing\spacesuits\chronosuit.dm" +#include "code\modules\clothing\spacesuits\freedom.dm" #include "code\modules\clothing\spacesuits\hardsuit.dm" -#include "code\modules\clothing\spacesuits\miscellaneous.dm" +#include "code\modules\clothing\spacesuits\pirate.dm" #include "code\modules\clothing\spacesuits\plasmamen.dm" +#include "code\modules\clothing\spacesuits\santa.dm" +#include "code\modules\clothing\spacesuits\softsuit.dm" +#include "code\modules\clothing\spacesuits\specialops.dm" +#include "code\modules\clothing\spacesuits\swat.dm" #include "code\modules\clothing\spacesuits\syndi.dm" #include "code\modules\clothing\suits\_suits.dm" +#include "code\modules\clothing\suits\ablativecoat.dm" #include "code\modules\clothing\suits\armor.dm" #include "code\modules\clothing\suits\bio.dm" #include "code\modules\clothing\suits\chaplainsuits.dm" #include "code\modules\clothing\suits\cloaks.dm" +#include "code\modules\clothing\suits\costume.dm" +#include "code\modules\clothing\suits\ghostsheet.dm" +#include "code\modules\clothing\suits\jacket.dm" #include "code\modules\clothing\suits\jobs.dm" #include "code\modules\clothing\suits\labcoat.dm" -#include "code\modules\clothing\suits\miscellaneous.dm" +#include "code\modules\clothing\suits\lasertag.dm" #include "code\modules\clothing\suits\reactive_armour.dm" +#include "code\modules\clothing\suits\shirt.dm" +#include "code\modules\clothing\suits\straightjacket.dm" #include "code\modules\clothing\suits\toggles.dm" #include "code\modules\clothing\suits\utility.dm" +#include "code\modules\clothing\suits\wetfloor.dm" #include "code\modules\clothing\suits\wintercoats.dm" #include "code\modules\clothing\suits\wiz_robe.dm" #include "code\modules\clothing\under\_under.dm"