[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>
This commit is contained in:
lila
2023-12-07 11:49:34 -05:00
committed by GitHub
co-authored by Bloop
parent abea081464
commit 07966b06de
7 changed files with 167 additions and 0 deletions
@@ -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
@@ -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,
),
@@ -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
@@ -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,
@@ -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("<b>Use in hand</b> to pick a new hairstyle.")
. += span_notice("<b>Alt-click</b> [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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

+1
View File
@@ -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"