From 07966b06de0fa8648042fe29e531a67ea8dc2856 Mon Sep 17 00:00:00 2001 From: lila Date: Thu, 7 Dec 2023 17:49:34 +0100 Subject: [PATCH] [modular] Adds hair ties (#24806) * init * temp icon and population * text * rename + subtype friendly code * syndie ver * sprites * ci * review * forgor * test * re-do review --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- .../loadout_items/loadout_datum_heads.dm | 12 ++ .../modules/modular_vending/code/games.dm | 1 + .../opposing_force/code/equipment/gadgets.dm | 5 + .../modules/salon/code/barbervend.dm | 1 + modular_skyrat/modules/salon/code/hair_tie.dm | 147 ++++++++++++++++++ modular_skyrat/modules/salon/icons/items.dmi | Bin 4796 -> 5459 bytes tgstation.dme | 1 + 7 files changed, 167 insertions(+) create mode 100644 modular_skyrat/modules/salon/code/hair_tie.dm diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm index d34582b6d9d..abccc398308 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm @@ -177,6 +177,18 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea * MISC */ +/datum/loadout_item/head/hair_tie + name = "Hair Tie" + item_path = /obj/item/clothing/head/hair_tie + +/datum/loadout_item/head/hair_tie_scrunchie + name = "Scrunchie" + item_path = /obj/item/clothing/head/hair_tie/scrunchie + +/datum/loadout_item/head/hair_tie_plastic_beads + name = "Colorful Hair tie" + item_path = /obj/item/clothing/head/hair_tie/plastic_beads + /datum/loadout_item/head/standalone_hood name = "Recolorable Standalone Hood" item_path = /obj/item/clothing/head/standalone_hood diff --git a/modular_skyrat/modules/modular_vending/code/games.dm b/modular_skyrat/modules/modular_vending/code/games.dm index 431425433a9..4df4e3e7ba2 100644 --- a/modular_skyrat/modules/modular_vending/code/games.dm +++ b/modular_skyrat/modules/modular_vending/code/games.dm @@ -12,6 +12,7 @@ "icon" = "star", "products" = list( /obj/item/hairbrush = 3, + /obj/item/clothing/head/hair_tie/scrunchie = 3, /obj/item/clothing/mask/holocigarette = 5, /obj/item/attachable_soulcatcher = 5, ), diff --git a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm b/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm index 87ce925d024..472351c63d3 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm @@ -74,6 +74,11 @@ description = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \ In its crowbar configuration, it can be used to force open airlocks. Very useful for entering the station or its departments." +/datum/opposing_force_equipment/gadget_stealth/hair_tie + name = "Syndicate Hair Tie" + description = "An inconspicuous hair tie, able to be slung accurately. Useful to get yourself out of a sticky situation." + item_type = /obj/item/clothing/head/hair_tie/syndicate + /datum/opposing_force_equipment/gadget_stealth/jammer name = "Radio Jammer" item_type = /obj/item/jammer diff --git a/modular_skyrat/modules/salon/code/barbervend.dm b/modular_skyrat/modules/salon/code/barbervend.dm index 4d4458cbf1c..bc6d5fb1bb4 100644 --- a/modular_skyrat/modules/salon/code/barbervend.dm +++ b/modular_skyrat/modules/salon/code/barbervend.dm @@ -12,6 +12,7 @@ /obj/item/reagent_containers/spray/quantum_hair_dye = 3, /obj/item/reagent_containers/spray/baldium = 3, /obj/item/reagent_containers/spray/barbers_aid = 3, + /obj/item/clothing/head/hair_tie = 3, /obj/item/dyespray = 5, /obj/item/hairbrush = 3, /obj/item/hairbrush/comb = 3, diff --git a/modular_skyrat/modules/salon/code/hair_tie.dm b/modular_skyrat/modules/salon/code/hair_tie.dm new file mode 100644 index 00000000000..7276071e4eb --- /dev/null +++ b/modular_skyrat/modules/salon/code/hair_tie.dm @@ -0,0 +1,147 @@ +/obj/item/clothing/head/hair_tie + name = "hair tie" + desc = "An elastic hair tie, made to hold your hair up!" + icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon_state = "hairtie" + worn_icon = 'modular_skyrat/modules/salon/icons/items.dmi' + worn_icon_state = "hair_tie_worn_no_icon" + lefthand_file = 'modular_skyrat/modules/salon/icons/items.dmi' + righthand_file = 'modular_skyrat/modules/salon/icons/items.dmi' + inhand_icon_state = "hair_tie_worn_no_icon" + w_class = WEIGHT_CLASS_TINY + custom_price = PAYCHECK_CREW * 0.2 + ///string which set_hairstyle() will read + var/picked_hairstyle + ///storage for the original hairstyle string + var/actual_hairstyle + ///which projectile object to use as flicked hair tie + var/projectile_to_fire = /obj/projectile/bullet/hair_tie + ///how long the do_after takes to flick the hair tie + var/fire_speed = 3 SECONDS + ///how big is the randomized aim radius when flicked + var/projectile_aim_radius = 30 + +/obj/item/clothing/head/hair_tie/scrunchie + name = "scrunchie" + desc = "An elastic hair tie, its fabric is velvet soft." + icon_state = "hairtie_scrunchie" + +/obj/item/clothing/head/hair_tie/plastic_beads + name = "colorful hair tie" + desc = "An elastic hair tie, adornished with colorful plastic beads." + icon_state = "hairtie_beads" + custom_materials = (list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5)) + +/obj/item/clothing/head/hair_tie/syndicate + name = "\improper Syndicate hair tie" + desc = "An elastic hair tie with a metal clip, brandishing the logo of the Syndicate." + icon_state = "hairtie_syndie" + fire_speed = 1.5 SECONDS + projectile_to_fire = /obj/projectile/bullet/hair_tie/syndicate + projectile_aim_radius = 0 //accurate aim + +/obj/item/clothing/head/hair_tie/examine(mob/user) + . = ..() + if(picked_hairstyle) + . += span_notice("Wearing it will change your hairstyle to '[picked_hairstyle]'.") + . += span_notice("Use in hand to pick a new hairstyle.") + . += span_notice("Alt-click [src] to fling it.") + +/obj/item/clothing/head/hair_tie/mob_can_equip(mob/living/carbon/human/user, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(user.hairstyle == "Bald") //could create a list of the bald hairstyles to check + return FALSE + return ..() + +/obj/item/clothing/head/hair_tie/attack_self(mob/user) + var/hair_id = tgui_input_list(user, "How does your hair look when its up?", "Pick!", GLOB.hairstyles_list) + if(!hair_id || hair_id == "Bald") + balloon_alert(user, "error!") + return + balloon_alert(user, "[hair_id]") + picked_hairstyle = hair_id + +/obj/item/clothing/head/hair_tie/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(!ishuman(user) || !(slot_flags & slot)) + return + if(!picked_hairstyle) + return + user.visible_message( + span_notice("[user.name] ties up [user.p_their()] hair."), + span_notice("You tie up your hair!"), + ) + actual_hairstyle = user.hairstyle + user.set_hairstyle(picked_hairstyle, update = TRUE) + +/obj/item/clothing/head/hair_tie/dropped(mob/living/carbon/human/user) + . = ..() + if(!ishuman(user)) + return + if(!picked_hairstyle || !actual_hairstyle) + return + user.visible_message( + span_notice("[user.name] takes [src] out of [user.p_their()] hair."), + span_notice("You let down your hair!"), + ) + user.set_hairstyle(actual_hairstyle, update = TRUE) + actual_hairstyle = null + +/obj/item/clothing/head/hair_tie/AltClick(mob/living/user) + . = ..() + if(!(user.get_slot_by_item(src) == ITEM_SLOT_HANDS)) + balloon_alert(user, "hold in-hand!") + return + user.visible_message( + span_danger("[user.name] puts [src] around [user.p_their()] fingers, beginning to flick it!"), + span_notice("You try to flick [src]!"), + ) + flick_hair_tie(user) + +///This proc flicks the hair tie out of the player's hand, tripping the target hit for 1 second +/obj/item/clothing/head/hair_tie/proc/flick_hair_tie(mob/living/user) + if(!do_after(user, fire_speed, src)) + return + //build the projectile + var/obj/projectile/bullet/hair_tie/proj = new projectile_to_fire (drop_location()) + //clone some vars + proj.name = name + proj.icon_state = icon_state + //add projectile_drop + proj.AddElement(/datum/element/projectile_drop, type) + //aim and fire + proj.firer = user + proj.fired_from = user + proj.fire((dir2angle(user.dir) + rand(-projectile_aim_radius, projectile_aim_radius))) + playsound(src, 'sound/weapons/effects/batreflect.ogg', 25, TRUE) + //get rid of what we just launched to let projectile_drop spawn a new one + qdel(src) + +/obj/projectile/bullet/hair_tie + icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon_state = "hairtie" + hitsound = 'sound/weapons/genhit.ogg' + damage = 0 //its just about the knockdown + sharpness = NONE + shrapnel_type = NONE //no embedding pls + impact_effect_type = null + ricochet_chance = 0 + range = 7 + knockdown = 1 SECONDS + +/obj/projectile/bullet/hair_tie/syndicate + damage = 10 //getting hit with this one fucking sucks + stamina = 30 + eyeblur = 2 SECONDS + jitter = 8 SECONDS + +/datum/design/plastic_hair_tie + name = "Plastic Hair Tie" + id = "plastic_hair_tie" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | COLONY_FABRICATOR + materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5) + build_path = /obj/item/clothing/head/hair_tie/plastic_beads + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/salon/icons/items.dmi b/modular_skyrat/modules/salon/icons/items.dmi index 7edbc40bc3f8194aa5d94dfc31a7ec7b7f3c3e51..908f28fdc6f6cf6bdad14292171fe611676bfff8 100644 GIT binary patch literal 5459 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 literal 4796 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 IEN2${KjgCqc>n+a diff --git a/tgstation.dme b/tgstation.dme index e6e0476c82a..3cdf9928df7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7841,6 +7841,7 @@ #include "modular_skyrat\modules\salon\code\barbervend.dm" #include "modular_skyrat\modules\salon\code\clothing.dm" #include "modular_skyrat\modules\salon\code\fur_dyer.dm" +#include "modular_skyrat\modules\salon\code\hair_tie.dm" #include "modular_skyrat\modules\salon\code\hand_dryer.dm" #include "modular_skyrat\modules\salon\code\misc_items.dm" #include "modular_skyrat\modules\salon\code\pipette.dm"