diff --git a/code/modules/client/preference_setup/loadout/loadout_event_rewards.dm b/code/modules/client/preference_setup/loadout/loadout_event_rewards.dm index c315b795b0e..eb3bb63cba9 100644 --- a/code/modules/client/preference_setup/loadout/loadout_event_rewards.dm +++ b/code/modules/client/preference_setup/loadout/loadout_event_rewards.dm @@ -17,3 +17,11 @@ display_name = "Game Boy" path = /obj/item/instrument/gameboy ckeywhitelist = list("jaybird1") + +/datum/gear/event_reward/foxmimko + sort_category = "Event Rewards" + cost = 0 + display_name = "Miko Garb" + path = /obj/item/clothing/under/event_reward/foxmiko + slot = slot_w_uniform + ckeywhitelist = list("knouli") diff --git a/modular_citadel/code/modules/clothing/eventclothing.dm b/modular_citadel/code/modules/clothing/eventclothing.dm new file mode 100644 index 00000000000..06a461037ef --- /dev/null +++ b/modular_citadel/code/modules/clothing/eventclothing.dm @@ -0,0 +1,111 @@ +/obj/item/clothing/under/event_reward/foxmiko + name = "Miko Garb" + desc = "The creative reinterpretation of Shinto miko attire." + body_parts_covered = UPPER_TORSO|LOWER_TORSO + icon = 'modular_citadel/icons/obj/clothing/eventclothing.dmi' + icon_override = 'modular_citadel/icons/mob/eventclothing.dmi' + icon_state = "foxmiko" + item_state = "foxmiko" + rolled_sleeves = -1 //Don't want to try and roll sleeves like you can with a normal jumpsuit + rolled_down = -1 + var/kimono = 0 //Custom vars for tracking kimono and skirt state + var/skirt = 0 + + +/obj/item/clothing/under/event_reward/foxmiko/verb/partkimono() //Verb for parting kimono - kinky. User reporting, flips state, and updates icon + set name = "Adjust Kimono" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)) //Standard checks for clothing verbs + return + if(usr.stat) + return + + if(kimono) //User reporting + to_chat(usr, "You correct your kimono.") + else + to_chat(usr, "You part your kimono.") + + kimono = !kimono //Switch state parted -> unparted, or unparted -> parted + switchsprite() //Proc call - handles the two states of kimono and skirt + + var/mob/M = src.loc //And finally update the icon + M.update_inv_w_uniform() + update_clothing_icon() + + +/obj/item/clothing/under/event_reward/foxmiko/verb/liftskirt() //Verb for parting skirt - lewd. User reporting, flips state, and updates icon + set name = "Adjust Skirt" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)) //Standard checks for clothing verbs + return + if(usr.stat) + return + + if(skirt) //User reporting + to_chat(usr, "You drop your skirt.") + else + to_chat(usr, "You lift your skirt.") + + skirt = !skirt //Switch state lifted -> unlifeted, or unlifted -> lifted + switchsprite() //Proc call - handles the two states of kimono and skirt + + var/mob/M = src.loc //And finally update the icon + M.update_inv_w_uniform() + update_clothing_icon() + + +/obj/item/clothing/under/event_reward/foxmiko/proc/switchsprite() //Handles the ultimate state of the icon as well as what parts of body the attire covers + body_parts_covered = initial(body_parts_covered) //Resets to default coverage for this uniform - upper and lower body + if(kimono) //If the kimono is parted + if(skirt) //If the skirt is parted too + item_state_slots[slot_w_uniform_str] = "[worn_state]_ks" //Then we want the assosiated mob icon - denoted with _ks + icon_state = "foxmiko_ks" //This is for item icon - NOT WORN ICON + body_parts_covered &= ~(UPPER_TORSO|LOWER_TORSO) //If kimono is open and skirt lifted uncover both upper and lower body + else //But skirt is not lifted too + item_state_slots[slot_w_uniform_str] = "[worn_state]_k" //We use [worn_state] rather than an explicit declaration because the game appends a _s to icon states + icon_state = "foxmiko_k" + body_parts_covered &= ~(UPPER_TORSO) + else //If kimono is not parted + if(skirt) //If skirt is lifted + item_state_slots[slot_w_uniform_str] = "[worn_state]_s" //Meaning in the icon sprite files this is foxmiko_s_s + icon_state = "foxmiko_s" + body_parts_covered &= ~(LOWER_TORSO) + else //But skirt is not lifted too - default state + item_state_slots[slot_w_uniform_str] = "[worn_state]" + icon_state = "foxmiko" + + +/obj/item/clothing/under/event_reward/foxmiko/proc/hide_accessory(mob/user, obj/item/clothing/accessory/A) //Proc, handles hiding and concealing accessories and user reporting + if(!LAZYLEN(accessories) || !(A in accessories)) //Double check - if there's no accessories, break it now. + return + + if(A.icon_state == "") //If the icon has already been hidden + A.icon_state = initial(A.icon_state) //Revert the icon to the original state, making it visible again + A.overlay_state = initial(A.overlay_state) //As well as the overlay_state - certain accessories use both + to_chat(usr, "You reveal [A] from among your [src].") //And reports to user + else //If the icon hasn't already been hidden + A.icon_state = "" //Hide icon state + A.overlay_state = "" //Hide overlay state - certain accessories use both + to_chat(usr, "You hide [A] among your [src].") //And reports to user + + var/mob/M = src.loc //And updates the icon + M.update_inv_w_uniform() + update_clothing_icon() + + +/obj/item/clothing/under/event_reward/foxmiko/verb/hidetie() //Verb for concealing assessory icons on mob spirt - this is a hack of the original code to remove accessories + set name = "Hide Accessory" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)) return //Standard checks for clothing verbs + if(usr.stat) return + var/obj/item/clothing/accessory/A //obj for accessory we are targeting + if(LAZYLEN(accessories)) //If the list contains accessories - it is valid + A = input("Select an accessory to hide on [src]") as null|anything in accessories + if(A) //If a selection is made, call the other proc + hide_accessory(usr,A) + if(!LAZYLEN(accessories)) //But if there are no accessories, list will be empty, meaning we ought to remove access to verb + src.verbs -= /obj/item/clothing/under/event_reward/foxmiko/verb/hidetie //Removes access to verb + accessories = null diff --git a/modular_citadel/icons/mob/eventclothing.dmi b/modular_citadel/icons/mob/eventclothing.dmi new file mode 100644 index 00000000000..b7a2d77843d Binary files /dev/null and b/modular_citadel/icons/mob/eventclothing.dmi differ diff --git a/modular_citadel/icons/obj/clothing/eventclothing.dmi b/modular_citadel/icons/obj/clothing/eventclothing.dmi new file mode 100644 index 00000000000..ce031bee44b Binary files /dev/null and b/modular_citadel/icons/obj/clothing/eventclothing.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 836e9187853..07433142bab 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3459,6 +3459,7 @@ #include "modular_citadel\code\game\objects\random\random_cit.dm" #include "modular_citadel\code\modules\admin\verbs\debug_vr.dm" #include "modular_citadel\code\modules\clothing\donatorclothing.dm" +#include "modular_citadel\code\modules\clothing\eventclothing.dm" #include "modular_citadel\code\modules\clothing\head\misc_cit.dm" #include "modular_citadel\code\modules\clothing\shoes\miscellaneous_cit.dm" #include "modular_citadel\code\modules\clothing\spacesuits\rig\modules\utility.dm"