Merge branch 'master' into upstream-2026-06-23

This commit is contained in:
Roxy
2026-06-27 13:07:00 -04:00
58 changed files with 801 additions and 141 deletions
+4
View File
@@ -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()
@@ -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)
+1 -1
View File
@@ -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)
@@ -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
+2 -2
View File
@@ -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! "))
+3
View File
@@ -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
@@ -1,4 +0,0 @@
author: "Robwo"
delete-after: True
changes:
- map: "Risk of Pubby Station Returns"
@@ -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."
@@ -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"
@@ -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."
@@ -0,0 +1,4 @@
author: "Ghommie"
delete-after: True
changes:
- bugfix: "Fixed invisible fish tails from DNA infusions."
@@ -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.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

@@ -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'
@@ -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
@@ -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
@@ -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 \
@@ -59,6 +59,7 @@
)
/obj/item/organ/tongue/teshari
name = "teshari tongue"
liked_foodtypes = SEAFOOD | VEGETABLES | NUTS
disliked_foodtypes = GROSS | GRAIN
@@ -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)
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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 ]
}
]
}
@@ -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()
. = ..()
@@ -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'
@@ -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
@@ -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"
@@ -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
@@ -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)
@@ -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
@@ -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)
@@ -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!"))
@@ -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
)
. = ..()
@@ -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
@@ -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
@@ -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)
@@ -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
@@ -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
@@ -69,6 +69,7 @@
design_ids += list(
"limbdesign_hemophage",
"limbdesign_tajaran",
"limbdesign_teshari",
)
/datum/techweb_node/cyber/cyber_implants/New()
@@ -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)
@@ -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,
@@ -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,
@@ -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,
),
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

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