diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 86e892b8adf..5cec7fe0a26 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -293,6 +293,10 @@ path = "/obj/item/bodypart/[part_type]" else path = "/obj/item/bodypart/[part_type]/[species]" +//BUBBER ADDITION BEGIN - Mutant limb types. + if(!text2path(path) && part_type) + path = "/obj/item/bodypart/[part_type]/mutant/[species]" +//BUBBER ADDITION END return text2path(path) /obj/machinery/limbgrower/RefreshParts() diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm index 3be99e8d337..cf3e4b7283f 100644 --- a/code/game/objects/items/storage/garment.dm +++ b/code/game/objects/items/storage/garment.dm @@ -106,30 +106,6 @@ new /obj/item/clothing/head/hats/hos/cap(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) new /obj/item/clothing/neck/cloak/hos(src) -//BUBBER ADDITION BEGIN - new /obj/item/clothing/neck/cloak/hos/redsec(src) - new /obj/item/clothing/under/rank/security/head_of_security/redsec(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch/redsec(src) - new /obj/item/clothing/shoes/jackboots/sec/redsec(src) - new /obj/item/clothing/head/hos_kepi(src) -//BUBBER ADDITION END -//Duplication from Commdrobe - new /obj/item/clothing/head/hats/warden/drill/hos(src) - new /obj/item/clothing/under/rank/security/head_of_security/alt/roselia(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/gars/giga/roselia(src) - new /obj/item/clothing/under/rank/security/head_of_security/parade/redsec(src) - new /obj/item/clothing/under/rank/security/head_of_security/parade/female/redsec(src) - new /obj/item/clothing/head/hats/hos/elofy(src) - new /obj/item/clothing/suit/armor/hos/elofy(src) - new /obj/item/clothing/gloves/elofy(src) - new /obj/item/clothing/shoes/jackboots/elofy(src) - new /obj/item/clothing/head/playbunnyears/hos(src) - new /obj/item/clothing/under/rank/security/head_of_security/bunnysuit(src) - new /obj/item/clothing/suit/armor/hos_tailcoat(src) - new /obj/item/clothing/head/hats/hos/beret/navyhos(src) - new /obj/item/clothing/under/rank/security/head_of_security/peacekeeper(src) - new /obj/item/clothing/suit/jacket/hos/blue(src) - new /obj/item/clothing/neck/mantle/hosmantle(src) /obj/item/storage/bag/garment/warden/PopulateContents() new /obj/item/clothing/suit/armor/vest/warden(src) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 5edbf0780f7..80d95ef3553 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -573,7 +573,7 @@ var/mob/living/spawn_instance if(ispath(spawn_type, /mob/living/silicon/ai)) // This is unfortunately necessary because of snowflake AI init code. To be refactored. - spawn_instance = new spawn_type(get_turf(spawn_point), null, player_client.mob) + spawn_instance = new spawn_type(get_turf(spawn_point), null, player_client.mob, TRUE) else spawn_instance = spawn_point.JoinPlayerHere(spawn_type, TRUE) spawn_instance.apply_prefs_job(player_client, src) diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 5519ad9ef9d..c1d6e2fd467 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -464,8 +464,6 @@ var/head_update = FALSE var/list/new_limbs = list() var/datum/component/transformation/transform = GetComponent(/datum/component/transformation) // BUBBER EDIT START - Transformation component override. - if(transform) - transform.on_transform_limb_icon(src) for(var/body_zone, limb_untyped in transform ? transform.dummy.get_bodyparts_by_zones() : get_bodyparts_by_zones()) // BUBBER EDIT END | ORG: for(var/body_zone, limb_untyped in get_bodyparts_by_zones()) var/obj/item/bodypart/limb = limb_untyped var/obj/item/bodypart/stump_limb_check = get_bodypart(body_zone, TRUE) // BUBBER EDIT START diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 483425c78e9..923836781e8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -2,7 +2,7 @@ #define CHARACTER_TYPE_SELF "My Character" #define CHARACTER_TYPE_CREWMEMBER "Station Member" -/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai) +/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, latejoining = FALSE) . = ..() if(!target_ai) //If there is no player/brain inside. new/obj/structure/ai_core(loc, CORE_STATE_FINISHED) //New empty terminal. @@ -23,7 +23,7 @@ create_eye() - if((target_ai.mind && target_ai.mind.active) || SSticker.current_state == GAME_STATE_SETTING_UP) + if((target_ai.mind && target_ai.mind.active) || SSticker.current_state == GAME_STATE_SETTING_UP || latejoining) target_ai.mind.transfer_to(src) if(is_antag()) to_chat(src, span_userdanger("You have been installed as an AI! ")) diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index a2bc63934c2..c8554ca3463 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -749,6 +749,9 @@ GLOBAL_VAR_INIT(roaches_deployed, FALSE) /obj/item/clothing/shoes/laceup = 3, /obj/item/clothing/shoes/jackboots = 3, /obj/item/clothing/gloves/combat = 3, + /obj/item/clothing/under/rank/centcom/ba_cheerleader/centcom = 3, + /obj/item/clothing/gloves/ba_cheerleader/centcom = 3, + /obj/item/clothing/shoes/sneakers/ba_cheerleader/centcom = 3, ) refill_canister = /obj/item/vending_refill/wardrobe/cent_wardrobe diff --git a/html/changelogs/AutoChangeLog-bubber-pr-5589.yml b/html/changelogs/AutoChangeLog-bubber-pr-5589.yml deleted file mode 100644 index 148ac8e8e28..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-5589.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robwo" -delete-after: True -changes: - - map: "Risk of Pubby Station Returns" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-5670.yml b/html/changelogs/AutoChangeLog-bubber-pr-5670.yml deleted file mode 100644 index 5de1fffc122..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-5670.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "KateAnbolho, vinylspiders" -delete-after: True -changes: - - rscadd: "The VOSKHOD Modular Suit, and the systems needed to create it." - - rscadd: "Depowered VOSKHOD armor can be sourced from \"questionable\" sources." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-5704.yml b/html/changelogs/AutoChangeLog-bubber-pr-5704.yml deleted file mode 100644 index dd5fbeda866..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-5704.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "UvvU" -delete-after: True -changes: - - rscadd: "Added dynamic uniform support" - - rscadd: "Added black varients for the sec huds, belt, and gloves" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-5829.yml b/html/changelogs/AutoChangeLog-bubber-pr-5829.yml deleted file mode 100644 index 7bfa3efd499..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-5829.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "nikothedude" -delete-after: True -changes: - - rscadd: "Re-adds the modular laser weapons to the game, with the rifle being found in a traitor's uplink, and the carbine being crewsided." - - balance: "Tweaked the modular weapons to be less powerful overall." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-5848.yml b/html/changelogs/AutoChangeLog-bubber-pr-5848.yml new file mode 100644 index 00000000000..35910b30fe4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-bubber-pr-5848.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed invisible fish tails from DNA infusions." \ No newline at end of file diff --git a/html/changelogs/bubber_archive/2026-06.yml b/html/changelogs/bubber_archive/2026-06.yml index b5aa9f63453..ce74fcf74cb 100644 --- a/html/changelogs/bubber_archive/2026-06.yml +++ b/html/changelogs/bubber_archive/2026-06.yml @@ -188,3 +188,41 @@ with the Space Ninja Dojo. The Syndicate now make targets that get successfully sent to them alive by their on site Contractors unable to remember the lead up to their abduction. +2026-06-24: + KateAnbolho, vinylspiders: + - rscadd: The VOSKHOD Modular Suit, and the systems needed to create it. + - rscadd: Depowered VOSKHOD armor can be sourced from "questionable" sources. + Robwo: + - map: Risk of Pubby Station Returns + UvvU: + - rscadd: Added dynamic uniform support + - rscadd: Added black varients for the sec huds, belt, and gloves + nikothedude: + - rscadd: Re-adds the modular laser weapons to the game, with the rifle being found + in a traitor's uplink, and the carbine being crewsided. + - balance: Tweaked the modular weapons to be less powerful overall. + - bugfix: Silver hurts lycans more again +2026-06-25: + Impish_Delights: + - bugfix: Stripping voice mod gas mask properly clears speech changes + Odairu: + - bugfix: fixes runtime and cyborgs should get claimed by latejoin AIs now + Robwo: + - rscadd: Limb growers can print teshari limbs/organs now. + nikothedude: + - bugfix: The hoshi no longer self charges +2026-06-26: + NanoCats: + - rscadd: Added the Cheerleading Outfit, a recolorable GAGS costume available from + the ClotheMate and loadout system in four designer colors. + - image: Added sprites for the cheerleading outfit set, courtesy of Onule + StrangeWeirdKitten: + - bugfix: fixes protean transformation hair not changing + muchatras: + - rscadd: Re-added the hos plate carrier and sec helmets from viro (in vendor) + - bugfix: Fixed certain missing/broken icons from sec outfits + - bugfix: Fixed the viro sec helmets + - bugfix: Removed all the duplicates from the hos outfit bag +2026-06-27: + Swan: + - rscadd: more wintercoats in the loadout menu. diff --git a/icons/map_icons/clothing/_clothing.dmi b/icons/map_icons/clothing/_clothing.dmi index 7a08c8f5fac..fea19adafcc 100644 Binary files a/icons/map_icons/clothing/_clothing.dmi and b/icons/map_icons/clothing/_clothing.dmi differ diff --git a/icons/map_icons/clothing/shoes.dmi b/icons/map_icons/clothing/shoes.dmi index 836be9c5eb6..5bb1d61b3a5 100644 Binary files a/icons/map_icons/clothing/shoes.dmi and b/icons/map_icons/clothing/shoes.dmi differ diff --git a/icons/map_icons/clothing/under/_under.dmi b/icons/map_icons/clothing/under/_under.dmi index ff2011c5bc3..48a261e016d 100644 Binary files a/icons/map_icons/clothing/under/_under.dmi and b/icons/map_icons/clothing/under/_under.dmi differ diff --git a/icons/map_icons/clothing/under/costume.dmi b/icons/map_icons/clothing/under/costume.dmi index 79737d21b25..c6c0ce211e2 100644 Binary files a/icons/map_icons/clothing/under/costume.dmi and b/icons/map_icons/clothing/under/costume.dmi differ diff --git a/icons/map_icons/items/_item.dmi b/icons/map_icons/items/_item.dmi index b328ed068b1..e3b9b6b8b2c 100644 Binary files a/icons/map_icons/items/_item.dmi and b/icons/map_icons/items/_item.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/fish_tails.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/fish_tails.dmi deleted file mode 100644 index fa91a6d97fd..00000000000 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/fish_tails.dmi and /dev/null differ diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm index a742ca1d468..1c2f28bbb86 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -39,7 +39,7 @@ color_src = USE_ONE_COLOR /datum/sprite_accessory/tails/fish - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/fish_tails.dmi' + organ_type = /obj/item/organ/tail/fake_fish //copypasta of dna infusion fish tails but without the quirks (beside butchering) /datum/sprite_accessory/tails/xeno/default icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_tail.dmi' diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm index cabec5734d7..d7688a76f85 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm +++ b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm @@ -64,3 +64,46 @@ name = "fluffy tail" /obj/item/organ/tail/fluffy/no_wag + +///A tail that replicates the appearance of fish tails from DNA infusion, but without most of the code that makes them so special. +/obj/item/organ/tail/fake_fish + name = /obj/item/organ/tail/fish::name + desc = /obj/item/organ/tail/fish::desc + icon = /obj/item/organ/tail/fish::icon + icon_state = /obj/item/organ/tail/fish::icon_state + post_init_icon_state = /obj/item/organ/tail/fish::post_init_icon_state + greyscale_config = /obj/item/organ/tail/fish::greyscale_config + greyscale_colors = /obj/item/organ/tail/fish::greyscale_colors + + bodypart_overlay = /obj/item/organ/tail/fish::bodypart_overlay + wag_flags = /obj/item/organ/tail/fish::wag_flags + restyle_flags = /obj/item/organ/tail/fish::restyle_flags + + // Fishlike reagents, you could serve it raw like fish + food_reagents = /obj/item/organ/tail/fish::food_reagents + // Seafood instead of meat, because it's a fish organ + foodtype_flags = /obj/item/organ/tail/fish::foodtype_flags + // Also just tastes like fish + food_tastes = /obj/item/organ/tail/fish::food_tastes + /// The fillet type this fish tail is processable into + var/fillet_type = /obj/item/food/fishmeat/fish_tail + /// The amount of fillets this gets processed into + var/fillet_amount = 3 + +/obj/item/organ/tail/fake_fish/Initialize(mapload) + . = ..() + var/time_to_fillet = fillet_amount * 0.5 SECONDS + AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, fillet_amount, time_to_fillet, screentip_verb = "Cut") + +/obj/item/organ/tail/fake_fish/on_mob_insert(mob/living/carbon/owner) + . = ..() + RegisterSignal(owner, COMSIG_LIVING_GIBBER_ACT, PROC_REF(on_gibber_processed)) + +/obj/item/organ/tail/fake_fish/on_mob_remove(mob/living/carbon/owner) + . = ..() + UnregisterSignal(owner, COMSIG_LIVING_GIBBER_ACT) + +/obj/item/organ/tail/fake_fish/proc/on_gibber_processed(mob/living/carbon/owner, mob/living/user, obj/machinery/gibber, list/results) + SIGNAL_HANDLER + for(var/iteration in 1 to fillet_amount * 0.5) + results += new fillet_type diff --git a/modular_skyrat/modules/mapping/code/wardrobes.dm b/modular_skyrat/modules/mapping/code/wardrobes.dm index 85465b01141..fe154d75139 100644 --- a/modular_skyrat/modules/mapping/code/wardrobes.dm +++ b/modular_skyrat/modules/mapping/code/wardrobes.dm @@ -38,6 +38,9 @@ /obj/item/clothing/gloves/combat/maid = 5, /obj/item/clothing/head/costume/maid_headband/syndicate = 5, /obj/item/storage/box/nif_ghost_box/ghost_role = 10, + /obj/item/clothing/under/syndicate/ba_cheerleader = 5, + /obj/item/clothing/gloves/ba_cheerleader/syndicate = 5, + /obj/item/clothing/shoes/sneakers/ba_cheerleader/syndicate = 5, ) refill_canister = /obj/item/vending_refill/wardrobe/syndie_wardrobe diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm index a7add2abcfb..a89652482d2 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm @@ -22,7 +22,6 @@ inhand_icon_state = "hyeseong_kill" worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_worn.dmi' worn_icon_state = "hyeseong_kill" - selfcharge = FALSE cell_type = /obj/item/stock_parts/power_store/cell/hyeseong_internal_cell modifystate = FALSE ammo_type = list(/obj/item/ammo_casing/energy/cybersun_big_kill) @@ -276,6 +275,7 @@ /datum/laser_weapon_mode/shotgun_small, /datum/laser_weapon_mode/trickshot_disabler, ) + selfcharge = FALSE default_selected_mode = "kill" speech_json_file = SHORT_MOD_LASER_SPEECH expanded_examine_text = "The Hoshi carbine is the latest line of man-portable Martian weapons platforms from \ diff --git a/modular_skyrat/modules/teshari/code/_teshari.dm b/modular_skyrat/modules/teshari/code/_teshari.dm index 5905de9df61..766ab0382a3 100644 --- a/modular_skyrat/modules/teshari/code/_teshari.dm +++ b/modular_skyrat/modules/teshari/code/_teshari.dm @@ -59,6 +59,7 @@ ) /obj/item/organ/tongue/teshari + name = "teshari tongue" liked_foodtypes = SEAFOOD | VEGETABLES | NUTS disliked_foodtypes = GROSS | GRAIN diff --git a/modular_zubbers/code/datums/components/transformation.dm b/modular_zubbers/code/datums/components/transformation.dm index ffcdcc14427..30ac2a8b7aa 100644 --- a/modular_zubbers/code/datums/components/transformation.dm +++ b/modular_zubbers/code/datums/components/transformation.dm @@ -83,15 +83,24 @@ owner.quad_eyes_offset = original.quad_eyes_offset owner.quad_eyes_offset_width = original.quad_eyes_offset_width - var/obj/item/bodypart/head/head = original.get_bodypart(BODY_ZONE_HEAD) - dummy.set_hairstyle(original.hairstyle, FALSE) - dummy.set_haircolor(original.hair_color) - dummy.set_facial_hairstyle(original.facial_hairstyle, FALSE) - dummy.set_facial_haircolor(original.facial_hair_color) - dummy.set_hair_gradient_style(head.gradient_styles[GRADIENT_HAIR_KEY], FALSE) - dummy.set_hair_gradient_color(head.gradient_colors[GRADIENT_FACIAL_HAIR_KEY]) - dummy.set_facial_hair_gradient_style(head.gradient_styles[GRADIENT_FACIAL_HAIR_KEY], FALSE) - dummy.set_facial_hair_gradient_color(head.gradient_colors[GRADIENT_FACIAL_HAIR_KEY]) + cached_features["hair"] += list( + "hair_style" = owner.hairstyle, + "hair_color" = owner.hair_color, + "facial_style" = owner.facial_hairstyle, + "facial_color" = owner.facial_hair_color, + "hair_gradient_style" = owner.get_hair_gradient_style(GRADIENT_HAIR_KEY), + "hair_gradient_color" = owner.get_hair_gradient_color(GRADIENT_HAIR_KEY), + "facial_gradient_style" = owner.get_hair_gradient_style(GRADIENT_FACIAL_HAIR_KEY), + "facial_gradient_color" = owner.get_hair_gradient_color(GRADIENT_FACIAL_HAIR_KEY)) + + owner.set_hairstyle(original.hairstyle, FALSE) + owner.set_haircolor(original.hair_color) + owner.set_facial_hairstyle(original.facial_hairstyle, FALSE) + owner.set_facial_haircolor(original.facial_hair_color) + owner.set_hair_gradient_style(original.get_hair_gradient_style(GRADIENT_HAIR_KEY), FALSE) + owner.set_hair_gradient_color(original.get_hair_gradient_color(GRADIENT_HAIR_KEY)) + owner.set_facial_hair_gradient_style(original.get_hair_gradient_style(GRADIENT_FACIAL_HAIR_KEY), FALSE) + owner.set_facial_hair_gradient_color(original.get_hair_gradient_color(GRADIENT_FACIAL_HAIR_KEY)) owner.regenerate_icons() @@ -123,20 +132,21 @@ owner.quad_eyes_offset = cached_features["quadoffset"] owner.quad_eyes_offset_width = cached_features["quadoffwidth"] + // Reset our hair + var/list/hair = cached_features["hair"] + owner.set_hairstyle(hair["hair_style"], FALSE) + owner.set_haircolor(hair["hair_color"]) + owner.set_facial_hairstyle(hair["facial_style"], FALSE) + owner.set_facial_haircolor(hair["facial_color"]) + owner.set_hair_gradient_style(hair["hair_gradient_style"], FALSE) + owner.set_hair_gradient_color(hair["hair_gradient_color"]) + owner.set_facial_hair_gradient_style(hair["facial_gradient_style"], FALSE) + owner.set_facial_hair_gradient_color(hair["facial_gradient_color"]) + original = null QDEL_NULL(dummy) owner.regenerate_icons() -/// TODO: Digigrade legs and bodyshape -/datum/component/transformation/proc/on_transform_limb_icon(mob/source) // Easy way to properly reflect icon events. - var/mob/living/carbon/human/owner = source - var/list/old_abstractions = dummy.get_equipped_items() - QDEL_LIST(old_abstractions) - for(var/obj/item/item in owner.get_equipped_items()) - if(item.slot_flags & (ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING|ITEM_SLOT_HEAD|ITEM_SLOT_BACK)) - var/obj/item/abstraction = new item.type - abstraction.flags_inv = item.flags_inv - abstraction.equip_to_best_slot(dummy) diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves.json new file mode 100644 index 00000000000..11d26aae044 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader_gloves": [ + { + "type": "icon_state", + "icon_state": "ba_cheerleader_gloves_icon_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ba_cheerleader_gloves_icon_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves_worn.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves_worn.json new file mode 100644 index 00000000000..92259acaaf3 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves_worn.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader_gloves": [ + { + "type": "icon_state", + "icon_state": "ba_cheerleader_gloves_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ba_cheerleader_gloves_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_left.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_left.json new file mode 100644 index 00000000000..5e3cc591b4d --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_left.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader": [ + { + "type": "icon_state", + "icon_state": "suits_lefthand_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "suits_lefthand_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_right.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_right.json new file mode 100644 index 00000000000..20a67ac256d --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_right.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader": [ + { + "type": "icon_state", + "icon_state": "suits_righthand_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "suits_righthand_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit.json new file mode 100644 index 00000000000..58a4272c161 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader": [ + { + "type": "icon_state", + "icon_state": "ba_cheerleader_under_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ba_cheerleader_under_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit_worn.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit_worn.json new file mode 100644 index 00000000000..2ef67637c8f --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit_worn.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader": [ + { + "type": "icon_state", + "icon_state": "ba_cheerleader_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ba_cheerleader_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes.json new file mode 100644 index 00000000000..cdb9a6ae103 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader_shoes": [ + { + "type": "icon_state", + "icon_state": "ba_cheerleader_shoes_icon_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ba_cheerleader_shoes_icon_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes_worn.json b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes_worn.json new file mode 100644 index 00000000000..dcca2eb2993 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes_worn.json @@ -0,0 +1,16 @@ +{ + "ba_cheerleader_shoes": [ + { + "type": "icon_state", + "icon_state": "ba_cheerleader_shoes_gags", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ba_cheerleader_shoes_gags_color", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_zubbers/code/game/objects/items/storage/garment.dm b/modular_zubbers/code/game/objects/items/storage/garment.dm index d823d9d970a..32d89fffde4 100644 --- a/modular_zubbers/code/game/objects/items/storage/garment.dm +++ b/modular_zubbers/code/game/objects/items/storage/garment.dm @@ -11,18 +11,30 @@ . = ..() new /obj/item/clothing/under/rank/security/viro/head_of_security/viro(src) new /obj/item/clothing/under/rank/security/viro/head_of_security/skirt(src) - new /obj/item/clothing/under/rank/security/viro/head_of_security/alt(src) - new /obj/item/clothing/under/rank/security/head_of_security/alt/skirt(src) new /obj/item/clothing/under/rank/security/viro/head_of_security/formal(src) new /obj/item/clothing/under/rank/security/viro/head_of_security/formal/skirt(src) new /obj/item/clothing/suit/armor/hos/viro/trenchcoat/winter(src) - new /obj/item/clothing/suit/armor/hos/viro/trenchcoat(src) new /obj/item/clothing/suit/armor/hos/viro(src) - new /obj/item/clothing/head/helmet/viro/hos(src) - new /obj/item/clothing/under/rank/security/head_of_security/battledress/red(src) + new /obj/item/clothing/suit/armor/hos/viro/vest(src) + new /obj/item/clothing/head/helmet/sec/viro/hos(src) new /obj/item/clothing/under/rank/security/head_of_security/turtleneck/red(src) new /obj/item/clothing/under/rank/security/head_of_security/turtleneck/red/skirt(src) - new /obj/item/clothing/under/rank/security/head_of_security/suit/red(src) + new /obj/item/clothing/under/rank/security/head_of_security/redsec(src) + new /obj/item/clothing/shoes/jackboots/sec/redsec(src) + new /obj/item/clothing/head/hos_kepi(src) + new /obj/item/clothing/head/hats/warden/drill/hos(src) + new /obj/item/clothing/under/rank/security/head_of_security/alt/roselia(src) + new /obj/item/clothing/head/hats/hos/elofy(src) + new /obj/item/clothing/suit/armor/hos/elofy(src) + new /obj/item/clothing/gloves/elofy(src) + new /obj/item/clothing/shoes/jackboots/elofy(src) + new /obj/item/clothing/head/playbunnyears/hos(src) + new /obj/item/clothing/under/rank/security/head_of_security/bunnysuit(src) + new /obj/item/clothing/suit/armor/hos_tailcoat(src) + new /obj/item/clothing/under/rank/security/head_of_security/suit/red(src) + new /obj/item/clothing/head/hats/hos/beret/navyhos(src) + new /obj/item/clothing/suit/jacket/hos/blue(src) + new /obj/item/clothing/neck/mantle/hosmantle(src) /obj/item/storage/bag/garment/warden/PopulateContents() . = ..() diff --git a/modular_zubbers/code/modules/GAGS/greyscale_configs.dm b/modular_zubbers/code/modules/GAGS/greyscale_configs.dm index 2424ad555d5..83c796f3e79 100644 --- a/modular_zubbers/code/modules/GAGS/greyscale_configs.dm +++ b/modular_zubbers/code/modules/GAGS/greyscale_configs.dm @@ -455,3 +455,46 @@ name = "'Dagger' Designer Mantle (Worn)" json_config = 'modular_zubbers/code/datums/greyscale/json_configs/neck/dagger_mantle/dagger_mantle_worn.json' ///Greyscale clothing Nova port end + +// Aeri's Cheerleader Outfit +// Sprites by Onule + +/datum/greyscale_config/ba_cheerleader + name = "BA Cheerleader Outfit" + icon_file = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit.json' + +/datum/greyscale_config/ba_cheerleader/worn + name = "BA Cheerleader Outfit (Worn)" + icon_file = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/outfit_worn.json' + +/datum/greyscale_config/ba_cheerleader/inhand_left + name = "BA Cheerleader Outfit (Left Hand)" + icon_file = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_left.json' + +/datum/greyscale_config/ba_cheerleader/inhand_right + name = "BA Cheerleader Outfit (Right Hand)" + icon_file = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/inhand_right.json' + +/datum/greyscale_config/ba_cheerleader_gloves + name = "BA Cheerleader Gloves" + icon_file = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves.json' + +/datum/greyscale_config/ba_cheerleader_gloves/worn + name = "BA Cheerleader Gloves (Worn)" + icon_file = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/gloves_worn.json' + +/datum/greyscale_config/ba_cheerleader_shoes + name = "BA Cheerleader Sneakers" + icon_file = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes.json' + +/datum/greyscale_config/ba_cheerleader_shoes/worn + name = "BA Cheerleader Sneakers (Worn)" + icon_file = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/under/ba_cheerleader/shoes_worn.json' diff --git a/modular_zubbers/code/modules/clothing/head/helmet.dm b/modular_zubbers/code/modules/clothing/head/helmet.dm index 3a65e4d98a7..e6630031d09 100644 --- a/modular_zubbers/code/modules/clothing/head/helmet.dm +++ b/modular_zubbers/code/modules/clothing/head/helmet.dm @@ -720,17 +720,21 @@ // virosec helmets, sprites by axietheaxolotl -/obj/item/clothing/head/helmet/viro +/obj/item/clothing/head/helmet/sec/viro name = "helmet" desc = "Standard Security gear. Protects the head from impacts." + base_icon_state = "security_helmet" icon = 'modular_zubbers/icons/obj/clothing/head/hats.dmi' worn_icon = 'modular_zubbers/icons/mob/clothing/head/hats.dmi' icon_state = "security_helmet" -/obj/item/clothing/head/helmet/viro/hos - name = "helmet" +/obj/item/clothing/head/helmet/sec/viro/hos + name = "head of security's helmet" desc = "Standard Security gear. Protects the head from impacts. This one has a golden stripe." + base_icon_state = "hos_helmet" icon = 'modular_zubbers/icons/obj/clothing/head/hats.dmi' worn_icon = 'modular_zubbers/icons/mob/clothing/head/hats.dmi' icon_state = "hos_helmet" + armor_type = /datum/armor/hats_hos + diff --git a/modular_zubbers/code/modules/clothing/mask/gasmask.dm b/modular_zubbers/code/modules/clothing/mask/gasmask.dm index 832785c3f72..0cc2819922c 100644 --- a/modular_zubbers/code/modules/clothing/mask/gasmask.dm +++ b/modular_zubbers/code/modules/clothing/mask/gasmask.dm @@ -54,6 +54,11 @@ UnregisterSignal(user, list(COMSIG_MOB_SAY, SIGNAL_ADDTRAIT(TRAIT_SIGN_LANG), SIGNAL_REMOVETRAIT(TRAIT_SIGN_LANG))) update_voice(user) +/obj/item/clothing/mask/gas/modulator/doStrip(mob/stripper, mob/user) + . = ..() + UnregisterSignal(user, list(COMSIG_MOB_SAY, SIGNAL_ADDTRAIT(TRAIT_SIGN_LANG), SIGNAL_REMOVETRAIT(TRAIT_SIGN_LANG))) + update_voice(user) + /obj/item/clothing/mask/gas/modulator/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() context[SCREENTIP_CONTEXT_ALT_LMB] = "[modulate_voice ? "Disable":"Enable"] voice modulator" diff --git a/modular_zubbers/code/modules/clothing/suits/armor.dm b/modular_zubbers/code/modules/clothing/suits/armor.dm index a1aa2068a46..fc0c1000d23 100644 --- a/modular_zubbers/code/modules/clothing/suits/armor.dm +++ b/modular_zubbers/code/modules/clothing/suits/armor.dm @@ -194,6 +194,12 @@ heat_protection = CHEST|GROIN|LEGS|ARMS strip_delay = 8 SECONDS +/obj/item/clothing/suit/armor/hos/viro/vest + name = "Head of Security's Plate Carrier" + desc = "A plate carrier enhanced with a special alloy for some extra protection and style for those with a commanding presence." + icon_state = "hos_platecarrier" + inhand_icon_state = "armor" + /datum/armor/armor_hos melee = 30 bullet = 30 diff --git a/modular_zubbers/code/modules/clothing/under/ba_cheerleader.dm b/modular_zubbers/code/modules/clothing/under/ba_cheerleader.dm new file mode 100644 index 00000000000..245155cabc1 --- /dev/null +++ b/modular_zubbers/code/modules/clothing/under/ba_cheerleader.dm @@ -0,0 +1,260 @@ +// Aeri's Cheerleader Outfit - Sprites by Onule + +// ---- ARMOR DATUMS ---- + +/datum/armor/clothing_under/cc_cheerleader + melee = 10 + laser = 10 + energy = 15 + fire = 50 + acid = 40 + wound = 10 + +/datum/armor/clothing_under/centcom_cheerleader + melee = 35 + bullet = 40 + laser = 40 + energy = 50 + bomb = 35 + bio = 10 + fire = 10 + acid = 60 + +/datum/armor/clothing_under/syndie_cheerleader + melee = 15 + bullet = 10 + laser = 10 + energy = 15 + fire = 50 + acid = 40 + wound = 10 + +/datum/armor/clothing_gloves/cc_cheerleader + melee = 5 + fire = 10 + acid = 10 + +/datum/armor/clothing_gloves/centcom_cheerleader + melee = 35 + bullet = 40 + laser = 40 + energy = 50 + bomb = 35 + bio = 10 + fire = 10 + acid = 60 + +/datum/armor/clothing_gloves/syndie_cheerleader + melee = 5 + bullet = 5 + laser = 5 + fire = 10 + acid = 10 + +/datum/armor/clothing_shoes/cc_cheerleader + melee = 5 + bio = 50 + acid = 10 + +/datum/armor/clothing_shoes/centcom_cheerleader + melee = 35 + bullet = 40 + laser = 40 + energy = 50 + bomb = 35 + bio = 10 + fire = 10 + acid = 60 + +/datum/armor/clothing_shoes/syndie_cheerleader + melee = 5 + bullet = 5 + bio = 50 + acid = 10 + +// ---- OUTFITS ---- + +/obj/item/clothing/under/costume/ba_cheerleader + name = "NT cheerleading outfit" + desc = "A Nanotrasen cheer uniform issued for company sporting events, morale drives, and mandatory victory \ + ceremonies. フレーフレー! 今です! Nobody on the design committee knows what that means, but it tested \ + extremely well with focus groups." + icon = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + icon_state = "ba_cheerleader_under" + post_init_icon_state = "ba_cheerleader" + inhand_icon_state = "ba_cheerleader" + worn_icon = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + worn_icon_state = "ba_cheerleader" + greyscale_config = /datum/greyscale_config/ba_cheerleader + greyscale_config_worn = /datum/greyscale_config/ba_cheerleader/worn + greyscale_config_inhand_left = /datum/greyscale_config/ba_cheerleader/inhand_left + greyscale_config_inhand_right = /datum/greyscale_config/ba_cheerleader/inhand_right + greyscale_colors = "#FFFFFF#2980b9" + flags_1 = IS_PLAYER_COLORABLE_1 + body_parts_covered = CHEST|GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + can_adjust = FALSE + +/obj/item/clothing/under/costume/ba_cheerleader/Initialize(mapload) + . = ..() + AddElement(/datum/element/gags_recolorable) + update_icon(UPDATE_OVERLAYS) + +/obj/item/clothing/under/rank/centcom/ba_cheerleader + name = "NT command cheerleading uniform" + desc = "A command-grade Nanotrasen cheer uniform tailored for heads of staff, public appearances, and strategic \ + morale deployment. The nano-kevlar weave is sturdier than expected, presumably in case you are being boarded \ + by the opposing team. フレーフレー! 今です!" + icon = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + icon_state = "ba_cheerleader_under" + post_init_icon_state = "ba_cheerleader" + inhand_icon_state = "ba_cheerleader" + worn_icon = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + worn_icon_state = "ba_cheerleader" + greyscale_config = /datum/greyscale_config/ba_cheerleader + greyscale_config_worn = /datum/greyscale_config/ba_cheerleader/worn + greyscale_config_inhand_left = /datum/greyscale_config/ba_cheerleader/inhand_left + greyscale_config_inhand_right = /datum/greyscale_config/ba_cheerleader/inhand_right + greyscale_colors = "#FFFFFF#1a3a6b" + flags_1 = IS_PLAYER_COLORABLE_1 + body_parts_covered = CHEST|GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + can_adjust = FALSE + armor_type = /datum/armor/clothing_under/cc_cheerleader + +/obj/item/clothing/under/rank/centcom/ba_cheerleader/Initialize(mapload) + . = ..() + AddElement(/datum/element/gags_recolorable) + update_icon(UPDATE_OVERLAYS) + +/obj/item/clothing/under/rank/centcom/ba_cheerleader/centcom + name = "CentCom cheerleading uniform" + desc = "A Central Command cheer uniform. フレーフレー! 今です! The nanoweave lining is inexplicably rated \ + against small arms fire, laser discharge, and moderate explosive yield. The exposed midriff remains \ + completely unprotected, by design. Watchdog groups believe this may be an attempt to induce brain \ + aneurisms in Syndicate agents who observe it." + greyscale_colors = "#FFFFFF#2ecc71" + armor_type = /datum/armor/clothing_under/centcom_cheerleader + +/obj/item/clothing/under/syndicate/ba_cheerleader + name = "Syndicate cheerleading uniform" + desc = "A Syndicate cheer uniform reinforced with kevlar. フレーフレー! 今です! Your fellow operatives \ + aren't going to encourage themselves. Cybersun Industries proudly supports morale, wellness, and \ + hostile takeover spirit." + icon = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + icon_state = "ba_cheerleader_under" + post_init_icon_state = "ba_cheerleader" + inhand_icon_state = "ba_cheerleader" + worn_icon = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + worn_icon_state = "ba_cheerleader" + greyscale_config = /datum/greyscale_config/ba_cheerleader + greyscale_config_worn = /datum/greyscale_config/ba_cheerleader/worn + greyscale_config_inhand_left = /datum/greyscale_config/ba_cheerleader/inhand_left + greyscale_config_inhand_right = /datum/greyscale_config/ba_cheerleader/inhand_right + greyscale_colors = "#1a1a1a#7b241c" + flags_1 = IS_PLAYER_COLORABLE_1 + body_parts_covered = CHEST|GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + can_adjust = FALSE + has_sensor = NO_SENSORS + armor_type = /datum/armor/clothing_under/syndie_cheerleader + +/obj/item/clothing/under/syndicate/ba_cheerleader/Initialize(mapload) + . = ..() + AddElement(/datum/element/gags_recolorable) + update_icon(UPDATE_OVERLAYS) + +// ---- GLOVES ---- + +/obj/item/clothing/gloves/ba_cheerleader + name = "NT cheerleading gloves" + desc = "Soft cotton cheer gloves. Go team!" + icon = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + icon_state = "ba_cheerleader_gloves_icon" + post_init_icon_state = "ba_cheerleader_gloves" + worn_icon = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + worn_icon_state = "ba_cheerleader_gloves" + greyscale_config = /datum/greyscale_config/ba_cheerleader_gloves + greyscale_config_worn = /datum/greyscale_config/ba_cheerleader_gloves/worn + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_colors = "#FFFFFF#2980b9" + flags_1 = IS_PLAYER_COLORABLE_1 + body_parts_covered = HANDS + +/obj/item/clothing/gloves/ba_cheerleader/Initialize(mapload) + . = ..() + AddElement(/datum/element/gags_recolorable) + update_icon(UPDATE_OVERLAYS) + +/obj/item/clothing/gloves/ba_cheerleader/command + name = "NT command cheerleading gloves" + desc = "Cheer gloves with a discreet nano-kevlar lining. Comfortable and authoritative." + greyscale_colors = "#FFFFFF#1a3a6b" + body_parts_covered = HANDS|ARMS + siemens_coefficient = 0 + armor_type = /datum/armor/clothing_gloves/cc_cheerleader + +/obj/item/clothing/gloves/ba_cheerleader/centcom + name = "CentCom cheerleading gloves" + desc = "Cheer gloves of unmistakably high-grade nanoweave construction. They feel less like costume accessories \ + and more like evidence in an appropriations hearing; it would be cheaper to make them out of actual gold." + greyscale_colors = "#FFFFFF#2ecc71" + body_parts_covered = HANDS|ARMS + siemens_coefficient = 0 + armor_type = /datum/armor/clothing_gloves/centcom_cheerleader + +/obj/item/clothing/gloves/ba_cheerleader/syndicate + name = "Syndicate cheerleading gloves" + desc = "Cheer gloves reinforced across the knuckles with kevlar. Ideal for \"encouraging\" hostile targets \ + to be unconscious." + greyscale_colors = "#1a1a1a#7b241c" + body_parts_covered = HANDS|ARMS + siemens_coefficient = 0 + armor_type = /datum/armor/clothing_gloves/syndie_cheerleader + +// ---- SNEAKERS ---- + +/obj/item/clothing/shoes/sneakers/ba_cheerleader + name = "NT cheerleading sneakers" + desc = "A pair of sporty sneakers. Good for cheering. Usefulness for running not evaluated by Nanotrasen \ + Corporation; sprint at your own risk." + icon = 'modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi' + icon_state = "ba_cheerleader_shoes_icon" + post_init_icon_state = "ba_cheerleader_shoes" + worn_icon = 'modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi' + worn_icon_state = "ba_cheerleader_shoes" + greyscale_config = /datum/greyscale_config/ba_cheerleader_shoes + greyscale_config_worn = /datum/greyscale_config/ba_cheerleader_shoes/worn + greyscale_colors = "#FFFFFF#2980b9" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/sneakers/ba_cheerleader/Initialize(mapload) + . = ..() + AddElement(/datum/element/gags_recolorable) + update_icon(UPDATE_OVERLAYS) + +/obj/item/clothing/shoes/sneakers/ba_cheerleader/command + name = "NT command cheerleading sneakers" + desc = "A pair of sporty sneakers. Good for cheering. Usefulness for running not evaluated by Nanotrasen \ + Corporation; sprint at your own risk." + greyscale_colors = "#FFFFFF#1a3a6b" + body_parts_covered = FEET|LEGS + armor_type = /datum/armor/clothing_shoes/cc_cheerleader + +/obj/item/clothing/shoes/sneakers/ba_cheerleader/centcom + name = "CentCom cheerleading sneakers" + desc = "CentCom cheer sneakers with custom anti-fatigue inserts, rated for zero-gravity routines." + greyscale_colors = "#FFFFFF#2ecc71" + body_parts_covered = FEET|LEGS + armor_type = /datum/armor/clothing_shoes/centcom_cheerleader + +/obj/item/clothing/shoes/sneakers/ba_cheerleader/syndicate + name = "Syndicate cheerleading sneakers" + desc = "Cheer sneakers with blood-red orthopedic gel inserts and slip resistant soles rated for \"Performing\" \ + even in environments with normally untenable levels of blood, lubricant, and several surfaces \ + Cybersun Legal advised against listing." + greyscale_colors = "#1a1a1a#7b241c" + body_parts_covered = FEET|LEGS + armor_type = /datum/armor/clothing_shoes/syndie_cheerleader + clothing_traits = list(TRAIT_NO_SLIP_WATER) diff --git a/modular_zubbers/code/modules/customization/species/lycans/_lycan_species.dm b/modular_zubbers/code/modules/customization/species/lycans/_lycan_species.dm index 69ce01f4d85..695a35adc48 100644 --- a/modular_zubbers/code/modules/customization/species/lycans/_lycan_species.dm +++ b/modular_zubbers/code/modules/customization/species/lycans/_lycan_species.dm @@ -1,4 +1,5 @@ #define DOAFTER_SOURCE_LYCAN_DOOR_PRY "lycan door pry" +#define FORCE_TO_BURN_RATIO 1.5 /datum/species/lycan id = SPECIES_LYCAN @@ -193,11 +194,19 @@ // already lost the limb shit -/datum/species/lycan/proc/on_baned(mob/living/carbon/human/baned, mob/user) +/datum/species/lycan/proc/on_baned(mob/living/carbon/human/baned, obj/source, mob/user) SIGNAL_HANDLER baned.visible_message(span_warning("[baned] seems to react negatively to the silver, [baned.p_their()] flesh scorching and burning on contact!"), ignored_mobs = list(baned)) to_chat(baned, span_bolddanger("The sister moon casts its light on you, and you feel your flesh scorch!")) INVOKE_ASYNC(baned, TYPE_PROC_REF(/mob, emote), "scream") + var/target_zone + var/mob/living/living_user = user + if (istype(living_user)) + target_zone = living_user.zone_selected + + baned.apply_damage(source.force * FORCE_TO_BURN_RATIO, BURN, target_zone, attacking_item = source) + #undef DOAFTER_SOURCE_LYCAN_DOOR_PRY +#undef FORCE_TO_BURN_RATIO diff --git a/modular_zubbers/code/modules/customization/species/lycans/materials.dm b/modular_zubbers/code/modules/customization/species/lycans/materials.dm index 83b7e6e1256..ed43f272437 100644 --- a/modular_zubbers/code/modules/customization/species/lycans/materials.dm +++ b/modular_zubbers/code/modules/customization/species/lycans/materials.dm @@ -1,15 +1,12 @@ -/* -//Silver debuff Code vs Lycans temporarily disabled for for the bane refactor. - /datum/material/silver/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() if (isitem(source)) - source.AddElement(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN) + source.AddComponent( \ + /datum/component/bane, \ + should_bane_callback = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(is_viable_for_lycan_bane)), \ + damage_multiplier = 1.25, \ + ) -/datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot) - . = ..() - - source.RemoveElement(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN) - - */ +/proc/is_viable_for_lycan_bane(atom/target) + return islycan(target) diff --git a/modular_zubbers/code/modules/customization/species/proteans/protean_ui.dm b/modular_zubbers/code/modules/customization/species/proteans/protean_ui.dm index 13a997695f6..2d42c519190 100644 --- a/modular_zubbers/code/modules/customization/species/proteans/protean_ui.dm +++ b/modular_zubbers/code/modules/customization/species/proteans/protean_ui.dm @@ -43,6 +43,7 @@ var/component = species_modsuit.wearer?.GetComponent(/datum/component/transformation) if(component) playsound(owner, 'sound/machines/click.ogg', 25) + UnregisterSignal(species_modsuit, COMSIG_ITEM_PRE_UNEQUIP) qdel(component) else if(species_modsuit.wearer == owner) to_chat(owner, span_notice("You already look like yourself!")) diff --git a/modular_zubbers/code/modules/designs/limbgrower_designs.dm b/modular_zubbers/code/modules/designs/limbgrower_designs.dm index a147a508ae9..cbce8467627 100644 --- a/modular_zubbers/code/modules/designs/limbgrower_designs.dm +++ b/modular_zubbers/code/modules/designs/limbgrower_designs.dm @@ -75,9 +75,70 @@ name = "Tajaran Organ Design Disk" limb_designs = list(/datum/design/tajaran_eyes, /datum/design/tajaran_tongue, /datum/design/tajaran_ears) +//Teshari organs +//Pour one out for the birds. +/datum/design/leftarm/New() + category += list(SPECIES_TESHARI) + return ..() + +/datum/design/rightarm/New() + category += list(SPECIES_TESHARI) + return ..() + +/datum/design/leftleg/New() + category += list(SPECIES_TESHARI) + return ..() + +/datum/design/rightleg/New() + category += list(SPECIES_TESHARI) + return ..() + +/datum/design/teshari_eyes + name = "Teshari eyes" + id = "tesharieyes" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) + build_path = /obj/item/organ/eyes/teshari + category = list(SPECIES_TESHARI) + +/datum/design/teshari_ears + name = "Teshari ears" + id = "teshariears" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) + build_path = /obj/item/organ/ears/teshari + category = list(SPECIES_TESHARI) + +/datum/design/teshari_tongue + name = "Teshari tongue" + id = "tesharitongue" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) + build_path = /obj/item/organ/tongue/teshari + category = list(SPECIES_TESHARI) + +/datum/design/cold_lungs + name = "Cold-Adapted Lungs" + id = "coldlungs" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) + build_path = /obj/item/organ/lungs/adaptive/cold + category = list(SPECIES_TESHARI) + +/datum/design/limb_disk/teshari + name = "Teshari Organ Design Disk" + desc = "Contains designs for teshari organs for the limbgrower - Ears, tounges, and eyes." + id = "limbdesign_teshari" + build_path = /obj/item/disk/design_disk/limbs/teshari + +/obj/item/disk/design_disk/limbs/teshari + name = "Teshari Organ Design Disk" + limb_designs = list(/datum/design/teshari_eyes, /datum/design/teshari_ears, /datum/design/teshari_tongue, /datum/design/cold_lungs) + /obj/machinery/limbgrower/Initialize(mapload) categories += list( SPECIES_HEMOPHAGE, - SPECIES_TAJARAN + SPECIES_TAJARAN, + SPECIES_TESHARI ) . = ..() diff --git a/modular_zubbers/code/modules/loadout/categories/gloves.dm b/modular_zubbers/code/modules/loadout/categories/gloves.dm index 5e7534286dd..dc52f08108b 100644 --- a/modular_zubbers/code/modules/loadout/categories/gloves.dm +++ b/modular_zubbers/code/modules/loadout/categories/gloves.dm @@ -191,6 +191,15 @@ item_path = /obj/item/clothing/gloves/ring/hypno/bippys ckeywhitelist = list("bippys") +/datum/loadout_item/gloves/ba_cheerleader + name = "NT Cheerleading Gloves" + item_path = /obj/item/clothing/gloves/ba_cheerleader + +/datum/loadout_item/gloves/ba_cheerleader_command + name = "NT Command Cheerleading Gloves" + item_path = /obj/item/clothing/gloves/ba_cheerleader/command + restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_CHIEF_ENGINEER, JOB_CHIEF_MEDICAL_OFFICER, JOB_QUARTERMASTER, JOB_NT_REP) + /datum/loadout_item/gloves/latex_gloves name = "Latex Gloves" item_path = /obj/item/clothing/gloves/latex_gloves diff --git a/modular_zubbers/code/modules/loadout/categories/shoes.dm b/modular_zubbers/code/modules/loadout/categories/shoes.dm index e7854dd3bb8..e51821eab32 100644 --- a/modular_zubbers/code/modules/loadout/categories/shoes.dm +++ b/modular_zubbers/code/modules/loadout/categories/shoes.dm @@ -349,6 +349,15 @@ restricted_roles = list(JOB_CLOWN) //ckeywhitelist = list("bloodrite") +/datum/loadout_item/shoes/ba_cheerleader + name = "NT Cheerleading Sneakers" + item_path = /obj/item/clothing/shoes/sneakers/ba_cheerleader + +/datum/loadout_item/shoes/ba_cheerleader_command + name = "NT Command Cheerleading Sneakers" + item_path = /obj/item/clothing/shoes/sneakers/ba_cheerleader/command + restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_CHIEF_ENGINEER, JOB_CHIEF_MEDICAL_OFFICER, JOB_QUARTERMASTER, JOB_NT_REP) + /datum/loadout_item/shoes/fun/bubber/clown/pink/squeak //Unlike the rest, these make noise. Job locked. name = "Pink Clown Heels" item_path = /obj/item/clothing/shoes/clown_shoes/bubber/clussy diff --git a/modular_zubbers/code/modules/loadout/categories/suit.dm b/modular_zubbers/code/modules/loadout/categories/suit.dm index 208357ea69e..ff8035c3bd8 100644 --- a/modular_zubbers/code/modules/loadout/categories/suit.dm +++ b/modular_zubbers/code/modules/loadout/categories/suit.dm @@ -257,3 +257,45 @@ /datum/loadout_item/suit/greyscale/furred_trench name = "Furred Trenchcoat" item_path = /obj/item/clothing/suit/greyscale/furred_trenchcoat + +/datum/loadout_item/suit/coat_chemist + name = "Chemistry winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/medical/chemistry + +/datum/loadout_item/suit/coat_coroner + name = "Coroner winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/medical/coroner + +/datum/loadout_item/suit/coat_virologist + name = "Virologists winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/medical/viro + +/datum/loadout_item/suit/coat_ce + name = "Chief Engineers winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/engineering/ce + restricted_roles = list(JOB_CHIEF_ENGINEER) + +/datum/loadout_item/suit/coat_cmo + name = "Chief Medical Officers winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/medical/cmo + restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER) + +/datum/loadout_item/suit/coat_rd + name = "Research Directors winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/science/rd + restricted_roles = list(JOB_RESEARCH_DIRECTOR) + +/datum/loadout_item/suit/coat_qm + name = "Quartermasters winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/cargo/qm + restricted_roles = list(JOB_QUARTERMASTER) + +/datum/loadout_item/suit/coat_hop + name = "Head of Personnel winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/hop + restricted_roles = list(JOB_HEAD_OF_PERSONNEL) + +/datum/loadout_item/suit/coat_captain + name = "Captains winter coat" + item_path = /obj/item/clothing/suit/hooded/wintercoat/captain + restricted_roles = list(JOB_CAPTAIN) diff --git a/modular_zubbers/code/modules/loadout/categories/under.dm b/modular_zubbers/code/modules/loadout/categories/under.dm index c6318597eb6..7da2ee8f0dd 100644 --- a/modular_zubbers/code/modules/loadout/categories/under.dm +++ b/modular_zubbers/code/modules/loadout/categories/under.dm @@ -145,6 +145,15 @@ item_path = /obj/item/clothing/under/rank/security/corrections_officer/sweater/skirt restricted_roles = list(JOB_CORRECTIONS_OFFICER, JOB_WARDEN) +/datum/loadout_item/uniform/miscellaneous/ba_cheerleader + name = "NT Cheerleading Outfit" + item_path = /obj/item/clothing/under/costume/ba_cheerleader + +/datum/loadout_item/uniform/command/ba_cheerleader + name = "NT Command Cheerleading Uniform" + item_path = /obj/item/clothing/under/rank/centcom/ba_cheerleader + restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_CHIEF_ENGINEER, JOB_CHIEF_MEDICAL_OFFICER, JOB_QUARTERMASTER, JOB_NT_REP) + /datum/loadout_item/uniform/miscellaneous/tactical_maid //Donor item for skyefree name = "Tactical Maid Costume" item_path = /obj/item/clothing/under/misc/maid/tactical diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species/ghoul.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species/ghoul.dm index 2b4d9193454..4b59711fa8f 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species/ghoul.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/species/ghoul.dm @@ -1,24 +1,24 @@ /datum/species/ghoul - name = "Ghoul" + name = "\improper Ghoul" id = SPECIES_GHOUL examine_limb_id = SPECIES_GHOUL - can_have_genitals = FALSE //WHY WOULD YOU WANT TO FUCK ONE OF THESE THINGS? - mutant_bodyparts = list("ghoulcolor" = "Tan Necrotic") - mutanttongue = /obj/item/organ/tongue/ghoul + can_have_genitals = FALSE inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_RADIMMUNE, TRAIT_CAN_STRIP, TRAIT_EASYDISMEMBER, - TRAIT_EASILY_WOUNDED, //theyre like fuckin skin and bones + TRAIT_EASILY_WOUNDED, TRAIT_LITERATE, - TRAIT_MUTANT_COLORS, TRAIT_FIXED_MUTANT_COLORS, ) - payday_modifier = 1.0 //-- "Equality" - stunmod = 1.25 //multiplier for stun durations - bodytemp_normal = T20C + + payday_modifier = 1.0 + stunmod = 1.25 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + mutanttongue = /obj/item/organ/tongue/ghoul + fixed_mut_color = "#FFFFFF" + bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/ghoul, BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/ghoul, @@ -27,44 +27,24 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/ghoul, BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/ghoul, ) - //the chest and head cannot be turned into meat - //i dont have to worry about sprites due to limbs_icon, thank god - //also the head needs to be normal for hair to work - /// Body parts that the ghoul can pull off or have reattached + bodytemp_normal = T20C + + // The chest and head cannot be turned into meat. + // Also, the head needs to be normal for hair to work. + + /// Body parts that the ghoul can pull off or have reattached. var/static/list/swappable_parts = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) -/datum/species/ghoul/get_default_mutant_bodyparts() - return list( - "tail" = list("None", FALSE), - "ears" = list("None", FALSE), - "legs" = list("Normal Legs", FALSE), - ) - /datum/species/ghoul/get_species_description() return list(placeholder_description,) -/proc/proof_ghoul_features(list/inFeatures) - // Missing Defaults in DNA? Randomize! - if(inFeatures["ghoulcolor"] == null || inFeatures["ghoulcolor"] == "") - inFeatures["ghoulcolor"] = GLOB.color_list_ghoul[pick(GLOB.color_list_ghoul)] - -/datum/species/ghoul/proc/set_ghoul_color(mob/living/carbon/human/human_ghoul) - // Called on Assign, or on Color Change (or any time proof_ghoul_features() is used) - fixed_mut_color = human_ghoul.dna.features["ghoulcolor"] - /datum/species/ghoul/on_species_gain(mob/living/carbon/new_ghoul, datum/species/old_species, pref_load, regenerate_icons) - // Missing Defaults in DNA? Randomize! - proof_ghoul_features(new_ghoul.dna.features) - . = ..() if(ishuman(new_ghoul)) var/mob/living/carbon/human/human_ghoul = new_ghoul - set_ghoul_color(human_ghoul) - - // 2) BODYPARTS RegisterSignal(human_ghoul, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(attach_meat)) human_ghoul.part_default_head = /obj/item/bodypart/head/mutant/ghoul human_ghoul.part_default_chest = /obj/item/bodypart/chest/mutant/ghoul @@ -76,7 +56,6 @@ /datum/species/ghoul/on_species_loss(mob/living/carbon/human/former_ghoul, datum/species/new_species, pref_load) . = ..() - // 2) BODYPARTS UnregisterSignal(former_ghoul, COMSIG_ATOM_ITEM_INTERACTION) former_ghoul.part_default_head = /obj/item/bodypart/head former_ghoul.part_default_chest = /obj/item/bodypart/chest @@ -86,11 +65,10 @@ former_ghoul.part_default_r_leg = /obj/item/bodypart/leg/right /* -* ATTACK PROCS +* ATTACK PROCS */ /datum/species/ghoul/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - // Targeting Self? With "DISARM" if (user != target) return ..() @@ -104,20 +82,18 @@ to_chat(user, span_alert("You can't get a good enough grip with your hands bound.")) return FALSE - // Robot Arms Fail + // Robotic limbs cannot be detatched this way. if (!IS_ORGANIC_LIMB(affecting)) to_chat(user, "That thing is on there good. It's not coming off with a gentle tug.") return FALSE - // Pry it off... user.visible_message("[user] grabs onto [p_their()] own [affecting.name] and pulls.", span_notice("You grab hold of your [affecting.name] and yank hard.")) if (!do_after(user, 3 SECONDS, target)) return FALSE user.visible_message("[user]'s [affecting.name] comes right off in their hand.", span_notice("Your [affecting.name] pops right off.")) - playsound(get_turf(user), 'sound/effects/meatslap.ogg', 40, 1) //ill change these sounds later + playsound(get_turf(user), 'sound/effects/meatslap.ogg', 40, 1) - // Destroy Limb, Drop Meat, Pick Up var/obj/item/I = affecting.drop_limb() if (istype(I, /obj/item/food/meat/slab)) user.put_in_hands(I) @@ -134,12 +110,12 @@ if(!istype(target)) return NONE - // MEAT LIMBS: If our limb is missing, and we're using meat, stick it in! + // Meat can be used as a suitable limb replacement. if(target.stat == DEAD || !istype(tool, /obj/item/food/meat/slab)) return NONE var/target_zone = user.zone_selected - if(target.get_bodypart(target_zone)) // we already have a limb here + if(target.get_bodypart(target_zone)) return NONE if(!(target_zone in swappable_parts)) @@ -147,20 +123,17 @@ user.visible_message("[user] begins mashing [tool] into [target]'s torso.", span_notice("You begin mashing [tool] into [target == user ? "your" : "[target]'s"] torso.")) - // Leave Melee Chain (so deleting the meat doesn't throw an error) <--- aka, deleting the meat that called this very proc. ASYNC if(do_after(user, 3 SECONDS, target)) - // Attach the part! - var/obj/item/bodypart/newBP = target.newBodyPart(target_zone, FALSE) - target.visible_message("The meat sprouts digits and becomes [target]'s new [newBP.name]!", span_notice("The meat sprouts digits and becomes your new [newBP.name]!")) - newBP.try_attach_limb(target) + var/obj/item/bodypart/new_limb = target.newBodyPart(target_zone, FALSE) + target.visible_message("The meat sprouts digits and becomes [target]'s new [new_limb.name]!", span_notice("The meat sprouts digits and becomes your new [new_limb.name]!")) + new_limb.try_attach_limb(target) qdel(tool) playsound(get_turf(target), 'sound/effects/meatslap.ogg', 50, 1) return ITEM_INTERACT_SUCCESS /mob/living/carbon - // Type References for Bodyparts var/obj/item/bodypart/head/part_default_head = /obj/item/bodypart/head var/obj/item/bodypart/chest/part_default_chest = /obj/item/bodypart/chest var/obj/item/bodypart/arm/left/part_default_l_arm = /obj/item/bodypart/arm/left diff --git a/modular_zubbers/code/modules/research/techweb/all_nodes.dm b/modular_zubbers/code/modules/research/techweb/all_nodes.dm index 302a3dca341..dcab939e082 100644 --- a/modular_zubbers/code/modules/research/techweb/all_nodes.dm +++ b/modular_zubbers/code/modules/research/techweb/all_nodes.dm @@ -69,6 +69,7 @@ design_ids += list( "limbdesign_hemophage", "limbdesign_tajaran", + "limbdesign_teshari", ) /datum/techweb_node/cyber/cyber_implants/New() diff --git a/modular_zubbers/code/modules/uplink/uplink_items/syndie_cheerleader/_syndie_cheerleader.dm b/modular_zubbers/code/modules/uplink/uplink_items/syndie_cheerleader/_syndie_cheerleader.dm new file mode 100644 index 00000000000..9c73cfa65b8 --- /dev/null +++ b/modular_zubbers/code/modules/uplink/uplink_items/syndie_cheerleader/_syndie_cheerleader.dm @@ -0,0 +1,20 @@ +// Syndicate Cheerleader Outfit - Traitor Uplink Entry + +/datum/uplink_item/badass/syndie_cheerleader + name = "Syndicate Cheerleader Outfit" + desc = "Cybersun Industries is proud to support operative wellness. \ + Studies show that having someone in your corner makes contract completion 12% more likely." + item = /obj/item/storage/box/syndie_cheerleader + cost = 6 + uplink_item_flags = SYNDIE_TRIPS_CONTRABAND + +/obj/item/storage/box/syndie_cheerleader + name = "suspicious red box" + desc = "A sleek, sturdy box. The Cybersun logo is printed on the side for some reason." + icon_state = "syndiebox" + +/obj/item/storage/box/syndie_cheerleader/PopulateContents() + . = ..() + new /obj/item/clothing/under/syndicate/ba_cheerleader(src) + new /obj/item/clothing/gloves/ba_cheerleader/syndicate(src) + new /obj/item/clothing/shoes/sneakers/ba_cheerleader/syndicate(src) diff --git a/modular_zubbers/code/modules/vending/clothesmate.dm b/modular_zubbers/code/modules/vending/clothesmate.dm index 9e5a81712ef..d58cdb91c23 100644 --- a/modular_zubbers/code/modules/vending/clothesmate.dm +++ b/modular_zubbers/code/modules/vending/clothesmate.dm @@ -47,6 +47,7 @@ /obj/item/clothing/glasses/rosecolored = 5, /obj/item/clothing/glasses/thin = 5, /obj/item/clothing/glasses/welding/steampunk_goggles = 5, + /obj/item/clothing/gloves/ba_cheerleader = 5, /obj/item/clothing/gloves/bracer/wraps = 5, /obj/item/clothing/gloves/cat = 5, /obj/item/clothing/gloves/elofy = 5, @@ -76,6 +77,7 @@ "name" = "Under", "icon" = "shirt", "products" = list( + /obj/item/clothing/under/costume/ba_cheerleader = 5, /obj/item/clothing/under/caged_dress/skirt = 5, /obj/item/clothing/under/costume/skyrat/kilt/royal = 5, /obj/item/clothing/under/costume/skyrat/kimono/sigmar = 5, @@ -207,6 +209,7 @@ "name" = "Shoes", "icon" = "socks", "products" = list( + /obj/item/clothing/shoes/sneakers/ba_cheerleader = 5, /obj/item/clothing/shoes/colorable_laceups = 5, /obj/item/clothing/shoes/colorable_sandals = 5, /obj/item/clothing/shoes/fancy_heels/drag = 5, diff --git a/modular_zubbers/code/modules/vending/comdrobe.dm b/modular_zubbers/code/modules/vending/comdrobe.dm index e142eb427f6..d387f4304e6 100644 --- a/modular_zubbers/code/modules/vending/comdrobe.dm +++ b/modular_zubbers/code/modules/vending/comdrobe.dm @@ -214,8 +214,9 @@ /obj/item/clothing/under/rank/security/viro/head_of_security/formal/skirt = 1, /obj/item/clothing/suit/armor/hos/viro/trenchcoat/winter = 1, /obj/item/clothing/suit/armor/hos/viro/trenchcoat = 1, + /obj/item/clothing/suit/armor/hos/viro/vest = 1, /obj/item/clothing/suit/armor/hos/viro = 1, - /obj/item/clothing/head/helmet/viro/hos = 1, + /obj/item/clothing/head/helmet/sec/viro/hos = 1, /obj/item/clothing/under/rank/security/head_of_security/battledress/red = 1, /obj/item/clothing/under/rank/security/head_of_security/turtleneck/red = 1, /obj/item/clothing/under/rank/security/head_of_security/turtleneck/red/skirt = 1, @@ -277,6 +278,9 @@ ) access_lists["[ACCESS_COMMAND]"] = list( + /obj/item/clothing/under/rank/centcom/ba_cheerleader = 1, + /obj/item/clothing/gloves/ba_cheerleader/command = 1, + /obj/item/clothing/shoes/sneakers/ba_cheerleader/command = 1, /obj/item/clothing/head/hats/caphat/naval/fleet_admiral = 5, /obj/item/clothing/suit/armor/vest/bridge = 5, /obj/item/clothing/suit/armor/skyy = 5, diff --git a/modular_zubbers/code/modules/vending/multisec.dm b/modular_zubbers/code/modules/vending/multisec.dm index 9246567b7fb..8d0e193662e 100644 --- a/modular_zubbers/code/modules/vending/multisec.dm +++ b/modular_zubbers/code/modules/vending/multisec.dm @@ -82,6 +82,7 @@ /obj/item/clothing/suit/armor/vest/viro/leatherjacket = 6, /obj/item/clothing/suit/armor/vest/viro/softshell = 6, /obj/item/clothing/head/sec/viro = 6, + /obj/item/clothing/head/helmet/sec/viro = 6, /obj/item/clothing/head/sec/viro/beanie = 6, ), diff --git a/modular_zubbers/icons/mob/clothing/head/hats.dmi b/modular_zubbers/icons/mob/clothing/head/hats.dmi index cb911e5ac9b..1a11e4f0d77 100644 Binary files a/modular_zubbers/icons/mob/clothing/head/hats.dmi and b/modular_zubbers/icons/mob/clothing/head/hats.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/suits/armor.dmi b/modular_zubbers/icons/mob/clothing/suits/armor.dmi index 269388297b4..28c8e7f6cca 100644 Binary files a/modular_zubbers/icons/mob/clothing/suits/armor.dmi and b/modular_zubbers/icons/mob/clothing/suits/armor.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi b/modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi new file mode 100644 index 00000000000..fbcad232bd7 Binary files /dev/null and b/modular_zubbers/icons/mob/clothing/under/ba_cheerleader.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/under/security.dmi b/modular_zubbers/icons/mob/clothing/under/security.dmi index d067248da07..a631f94b346 100644 Binary files a/modular_zubbers/icons/mob/clothing/under/security.dmi and b/modular_zubbers/icons/mob/clothing/under/security.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi b/modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi new file mode 100644 index 00000000000..fbcad232bd7 Binary files /dev/null and b/modular_zubbers/icons/obj/clothing/under/ba_cheerleader.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 7f27a9e89b4..77015792ce5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9668,6 +9668,7 @@ #include "modular_zubbers\code\modules\clothing\suits\nerd.dm" #include "modular_zubbers\code\modules\clothing\suits\wintercoats.dm" #include "modular_zubbers\code\modules\clothing\under\_under.dm" +#include "modular_zubbers\code\modules\clothing\under\ba_cheerleader.dm" #include "modular_zubbers\code\modules\clothing\under\clown.dm" #include "modular_zubbers\code\modules\clothing\under\costume.dm" #include "modular_zubbers\code\modules\clothing\under\misc.dm" @@ -10294,6 +10295,7 @@ #include "modular_zubbers\code\modules\uplink\uplink_items\uplinkitems.dm" #include "modular_zubbers\code\modules\uplink\uplink_items\species\lycan_booster.dm" #include "modular_zubbers\code\modules\uplink\uplink_items\syndicat\_syndicat.dm" +#include "modular_zubbers\code\modules\uplink\uplink_items\syndie_cheerleader\_syndie_cheerleader.dm" #include "modular_zubbers\code\modules\uplink\uplink_items\syndimaid\_syndimaid.dm" #include "modular_zubbers\code\modules\uplink\uplink_items\syndimaid\clothes.dm" #include "modular_zubbers\code\modules\vehicles\mech_fabricator.dm"