Merge remote-tracking branch 'upstream/master' into upstream-sync

This commit is contained in:
xPokee
2025-09-18 08:57:11 -04:00
45 changed files with 452 additions and 13 deletions
+2 -2
View File
@@ -233,8 +233,8 @@
"iq" = (
/obj/structure/table/reinforced,
/obj/machinery/fax{
fax_name = "NRI Ship";
name = "NRI ship fax machine"
fax_name = "PSC Ship";
name = "PSC ship fax machine"
},
/obj/item/paper/fluff/nri_police,
/turf/open/floor/pod,
+1 -1
View File
@@ -119,7 +119,7 @@ SUBSYSTEM_DEF(weather)
var/datum/weather/A
for(var/V in processing)
var/datum/weather/W = V
if((z in W.impacted_z_levels) && W.area_type == active_area.type)
if((z in W.impacted_z_levels) && istype(active_area, W.area_type)) // BUBBER EDIT: This proc was broken, fixed to now use istype.
A = W
break
return A
@@ -271,7 +271,7 @@
var/immediately_stun = should_stun && !(flags & SHOCK_DELAY_STUN)
if (immediately_stun)
if (paralyze)
StaminaKnockdown(stun_duration / 4) // SKYRAT EDIT CHANGE - ORIGINAL: Paralyze(40)
Paralyze(stun_duration)
else
Knockdown(stun_duration)
//Jitter and other fluff.
@@ -285,7 +285,7 @@
///Called slightly after electrocute act to apply a secondary stun.
/mob/living/carbon/proc/secondary_shock(paralyze, stun_duration)
if (paralyze)
StaminaKnockdown(stun_duration / 6) // SKYRAT EDIT CHANGE - ORIGINAL: Paralyze(60)
Paralyze(stun_duration)
else
Knockdown(stun_duration)
@@ -641,3 +641,16 @@
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE,
)
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
// BUBBER EDIT: Adds Umbrellas
/datum/design/umbrella
name = "Collapsable Umbrella"
id = "collapsable_umbrella"
build_type = PROTOLATHE | AUTOLATHE
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.75, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 0.25)
build_path = /obj/item/umbrella/collapsible
category = list(
RND_CATEGORY_INITIAL,
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE,
)
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
@@ -37,6 +37,7 @@
"ticket_machine",
"radio_entertainment",
"photocopier",
"collapsable_umbrella",
)
/datum/techweb_node/sanitation
@@ -0,0 +1,4 @@
author: "Alecksohs"
delete-after: True
changes:
- rscadd: "Added umbrellas for Rimpoint at Autolathes and Service Protolathes which block rain reagants."
@@ -0,0 +1,4 @@
author: "ArrisFairburne"
delete-after: True
changes:
- rscadd: "The sex holobarrier is now loadout-available"
@@ -0,0 +1,4 @@
author: "theselfish"
delete-after: True
changes:
- rscadd: "Finally, cats can have four sets of ears with a brand new hoodie. (Also comes in earless variety)"
@@ -0,0 +1,5 @@
author: "Redrover1760"
delete-after: True
changes:
- balance: "Shocked airlocks and grilles now stun you instead of just a knockdown and mild stamina damage."
- bugfix: "Fixed repeatedly shocking yourself to crit on airlocks and grilles due to not being stunned by airlocks/grilles. Should be less directly deadly now if you don't react to stop yourself."
@@ -0,0 +1,4 @@
author: "BasilTamaya"
delete-after: True
changes:
- qol: "Racks now have a precise placement (left click) vs center placement (right click) mechanic, making shelfs and racks fancier."
@@ -0,0 +1,5 @@
author: "ElisavetPinko"
delete-after: True
changes:
- bugfix: "Fixed couple names related to the PSC."
- rscadd: "Teshari can now interact with the \"Police\" pirates by joining."
@@ -0,0 +1,4 @@
author: "theselfish"
delete-after: True
changes:
- bugfix: "Entertainer related Pets no longer speak what they see. Or something. I dunno. $4 a pound."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

@@ -48,8 +48,9 @@
"honk!",
"mrow!",
"henk!",
emote_see = list("plays tricks.", "slips.", "honks a tiny horn.")
)
emote_see = list("plays tricks.", "slips.", "honks a tiny horn.")
/mob/living/basic/pet/cat/mime
name = "mime cat"
@@ -81,8 +82,9 @@
speak = list(
"...",
"....",
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a tiny cat shaped wall in front of them.")
)
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a tiny cat shaped wall in front of them.")
/mob/living/basic/pet/cat/tiger
name = "tiger cat"
@@ -670,6 +670,43 @@
name = "Branded Hoodie Worn"
json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json'
//Doppler Hoodies.
/datum/greyscale_config/big_hoodie
name = "Big Hoodie"
icon_file = 'modular_skyrat/modules/GAGS/icons/suit/dopplerhoodieobj.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/hoodies/big_hoodie.json'
/datum/greyscale_config/big_hoodie/worn
name = "Big Hoodie (Worn)"
icon_file = 'modular_skyrat/modules/GAGS/icons/suit/dopplerhoodie.dmi'
/datum/greyscale_config/big_hoodie_hood
name = "Big Hoodie Hood"
icon_file = 'modular_skyrat/modules/GAGS/icons/suit/dopplerhoodie.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/hoodies/big_hoodie_hood.json'
/datum/greyscale_config/big_hoodie_hood/worn
name = "Big Hoodie Hood (Worn)"
/datum/greyscale_config/twee_hoodie
name = "Twee Hoodie"
icon_file = 'modular_skyrat/modules/GAGS/icons/suit/dopplerhoodieobj.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/hoodies/twee_hoodie.json'
/datum/greyscale_config/twee_hoodie/worn
name = "Twee Hoodie (Worn)"
icon_file = 'modular_skyrat/modules/GAGS/icons/suit/dopplerhoodie.dmi'
/datum/greyscale_config/twee_hoodie_hood
name = "Twee Hoodie Hood"
icon_file = 'modular_skyrat/modules/GAGS/icons/suit/dopplerhoodie.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/hoodies/twee_hoodie_hood.json'
/datum/greyscale_config/twee_hoodie_hood/worn
name = "Twee Hoodie Hood (Worn)"
// CARDIGAN
/datum/greyscale_config/cardigan
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

@@ -0,0 +1,18 @@
{
"big_hoodie": [
{
"type": "icon_state",
"icon_state": "big_hoodie",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
],
"big_hoodie_t": [
{
"type": "icon_state",
"icon_state": "big_hoodie_t",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,10 @@
{
"big_hoodie_hood": [
{
"type": "icon_state",
"icon_state": "big_hoodie_hood",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,18 @@
{
"twee_hoodie": [
{
"type": "icon_state",
"icon_state": "twee_hoodie",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
],
"twee_hoodie_t": [
{
"type": "icon_state",
"icon_state": "twee_hoodie_t",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,10 @@
{
"twee_hoodie_hood": [
{
"type": "icon_state",
"icon_state": "twee_hoodie_hood",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -7,6 +7,44 @@
icon = 'modular_skyrat/modules/aesthetics/rack/icons/rack.dmi'
icon_state = "shelf"
/obj/structure/rack/Initialize(mapload)
. = ..()
/obj/structure/rack/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
if(isnull(held_item))
return .
// Add tooltips if the item is not a wrench (wrenches handled by parent)
if(held_item.tool_behaviour != TOOL_WRENCH)
context[SCREENTIP_CONTEXT_LMB] = "Precise placement"
context[SCREENTIP_CONTEXT_RMB] = "Center item"
. |= CONTEXTUAL_SCREENTIP_SET
return .
/obj/structure/rack/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
// Wrench deconstruction
if(tool.tool_behaviour == TOOL_WRENCH)
return ..()
// Right click to center item placement
if(LAZYACCESS(modifiers, RIGHT_CLICK))
if(user.transfer_item_to_turf(tool, get_turf(src), silent = FALSE))
return ITEM_INTERACT_SUCCESS
return ITEM_INTERACT_BLOCKING
// Left click for precise placement
if(LAZYACCESS(modifiers, ICON_X) && LAZYACCESS(modifiers, ICON_Y))
var/x_offset = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X * 0.5), ICON_SIZE_X * 0.5)
var/y_offset = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y * 0.5), ICON_SIZE_Y * 0.5)
if(user.transfer_item_to_turf(tool, get_turf(src), x_offset, y_offset, silent = FALSE))
return ITEM_INTERACT_SUCCESS
return ITEM_INTERACT_BLOCKING
// Default rack behavior otherwise
return ..()
/obj/item/gun
var/on_rack = FALSE
@@ -48,7 +48,7 @@ GLOBAL_VAR(first_officer)
threat_content = "Greetings %STATION, this is the %SHIPNAME dispatch outpost. \
Due to recent Imperial regulatory violations, such as %RESULT and many other smaller issues, your station has been fined %PAYOFF credits. \
Inadequate imperial police activity is currently present in your sector, thus the failure to comply might instead result in a police patrol dispatch \
for second attempt negotiations, sector police presence reinforcement and close-up inspections. Novaya Rossiyskaya Imperiya collegial secretary out."
for second attempt negotiations, sector police presence reinforcement and close-up inspections. Pan Slavic Commonwealth's collegial secretary out."
arrival_announcement = "Regulation-identified vessel approaching. Vessel ID tag is %NUMBER1-%NUMBER2-%NUMBER3. \
Vessel Model: Potato Beetle, Flight ETA: three minutes minimal. Vessel is authorised by the international regulations to perform its duties. \
We're clear for close orbit. Friendly reminder not to measure the distance between the vessel and the destination location, nor install any tracking devices anywhere on board of the vessel or in its close vicinity, \
@@ -187,9 +187,9 @@ GLOBAL_VAR(first_officer)
faction = list(FACTION_RAIDER)
you_are_text = "You are a Pan-Slavic Commonwealth task force."
flavour_text = "The station has refused to pay the fine for breaking Imperial regulations, you are here to recover the debt. Do so by demanding the funds. Force approach is usually recommended, but isn't the only method."
important_text = "Allowed races are humans, Akulas, IPCs. Follow your field officer's orders. Important mention - while you are listed as the pirates gamewise, you really aren't lore-and-everything-else-wise. Roleplay accordingly."
important_text = "Allowed races are Humans, Akula, Teshari and Synths. Follow your field officer's orders. Important mention - while you are listed as the pirates gamewise, you really aren't lore-and-everything-else-wise. Roleplay accordingly."
outfit = /datum/outfit/pirate/nri
restricted_species = list(/datum/species/human, /datum/species/akula, /datum/species/synthetic)
restricted_species = list(/datum/species/human, /datum/species/akula, /datum/species/synthetic, /datum/species/teshari)
random_appearance = FALSE
show_flavor = TRUE
@@ -221,7 +221,7 @@ GLOBAL_VAR(first_officer)
mob_name = "Pan-Slavic Commonwealth police patrol's field officer"
outfit = /datum/outfit/pirate/nri/officer
flavour_text = "The station has refused to pay the fine for breaking Imperial regulations, as a consequence you are here to perform a prolonged inspection."
important_text = "Allowed races are humans, Akulas, IPCs. Roleplay accordingly. There is an important document in your pocket I'd advise you to read and keep safe."
important_text = "Allowed races are Humans, Akula, Teshari and Synths. Roleplay accordingly. There is an important document in your pocket I'd advise you to read and keep safe."
/obj/effect/mob_spawn/ghost_role/human/nri_raider/officer/apply_codename(mob/living/carbon/human/spawned_human)
var/callsign = pick(GLOB.callsigns_nri)
@@ -46,7 +46,7 @@
missiondesc += "<BR> <B>3.</B> Stabilise the situation."
missiondesc += "<BR> <B>4.</B> Contact whoever called you and assist in resolving the matter."
missiondesc += "<BR> <B>5.</B> Protect, ensure, and uphold the rights of Pan-Slavic Commonwealth's, Kingdom of Agurkrral's and Free Teshari League's citizens on board [station_name()]. TerraGov citizens' wellbeing is up to your discretion."
missiondesc += "<BR> <B>6.</B> Attempt to subvert the station's crew in order to shift the station's territory under control of Novaya Rossiyskaya Imperiya."
missiondesc += "<BR> <B>6.</B> Attempt to subvert the station's crew in order to shift the station's territory under control of Pan-Slavic Commonwealth."
missiondesc += span_warning("<BR><B>Your Mission</B>: [ert_team.mission.explanation_text]")
to_chat(owner,missiondesc)
@@ -30,7 +30,7 @@
id_trim = /datum/id_trim/nri
/datum/outfit/centcom/ert/nri/commander
name = "Novaya Rossiyskaya Imperiya Platoon Commander"
name = "Pan-Slavic Commonwealth Platoon Commander"
head = null
glasses = /obj/item/clothing/glasses/thermal/eyepatch
uniform = /obj/item/clothing/under/costume/nri/captain
@@ -531,6 +531,7 @@
dog_fashion = null
armor_type = /datum/armor/armor_hos
strip_delay = 80
//SERVICE
/obj/item/clothing/suit/armor/hop_tailcoat
@@ -743,3 +744,99 @@
worn_icon = 'modular_zubbers/icons/mob/clothing/suits/jacket.dmi'
icon_state = "galfed"
body_parts_covered = CHEST|ARMS|GROIN
//Doppler Hoodies, sprites seemingly by kittysmooch of who woulda guessed, Doppler.
/obj/item/clothing/suit/hooded/big_hoodie
name = "oversized hoodie"
desc = "Cotton fibres grown in vertical aeroponic farming systems were ringspun and knit into a continuous loop fleece with \
a soft pile and little stretch. This fabric was cut oversized with soft sloping shoulders and cuffs that fall right at the first knuckle."
icon = 'icons/map_icons/clothing/suit/_suit.dmi'
icon_state = "/obj/item/clothing/suit/hooded/big_hoodie"
post_init_icon_state = "big_hoodie"
greyscale_config = /datum/greyscale_config/big_hoodie
greyscale_config_worn = /datum/greyscale_config/big_hoodie/worn
greyscale_colors = "#5d6161"
hoodtype = /obj/item/clothing/head/hooded/big_hoodie_hood
flags_1 = IS_PLAYER_COLORABLE_1
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
/obj/item/clothing/head/hooded/big_hoodie_hood
name = "oversized hood"
desc = "Cotton fibres grown in vertical aeroponic farming systems were ringspun and knit into a continuous loop fleece with \
a soft pile and little stretch. The hood was cut comfortably oversized."
icon = 'icons/map_icons/clothing/head/_head.dmi'
icon_state = "/obj/item/clothing/head/hooded/big_hoodie_hood"
post_init_icon_state = "big_hoodie_hood"
body_parts_covered = HEAD
cold_protection = HEAD
flags_inv = HIDEEARS|HIDEHAIR
flags_1 = IS_PLAYER_COLORABLE_1
hair_mask = /datum/hair_mask/winterhood
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
greyscale_config = /datum/greyscale_config/big_hoodie_hood
greyscale_config_worn = /datum/greyscale_config/big_hoodie_hood/worn
greyscale_colors = "#5d6161"
/obj/item/clothing/suit/hooded/big_hoodie/set_greyscale(list/colors, new_config, new_worn_config, new_inhand_left, new_inhand_right)
. = ..()
if(!hood)
return
var/list/hoodie_colors = SSgreyscale.ParseColorString(greyscale_colors)
var/list/new_hoodie_colors = hoodie_colors.Copy(1)
hood.set_greyscale(new_hoodie_colors)
hood.update_slot_icon()
/obj/item/clothing/suit/hooded/big_hoodie/on_hood_created(obj/item/clothing/head/hooded/hood)
. = ..()
var/list/hoodie_colors = (SSgreyscale.ParseColorString(greyscale_colors))
var/list/new_hoodie_colors = hoodie_colors.Copy(1)
hood.set_greyscale(new_hoodie_colors)
/obj/item/clothing/suit/hooded/twee_hoodie
name = "disconcertingly twee hoodie"
desc = "A sweatshirt of heavy and soft ringspun fleece has been adorned with a fabric simulation of ears."
icon = 'icons/map_icons/clothing/suit/_suit.dmi'
icon_state = "/obj/item/clothing/suit/hooded/twee_hoodie"
post_init_icon_state = "twee_hoodie"
greyscale_config = /datum/greyscale_config/twee_hoodie
greyscale_config_worn = /datum/greyscale_config/twee_hoodie/worn
greyscale_colors = "#dbc0e0"
hoodtype = /obj/item/clothing/head/hooded/twee_hoodie_hood
flags_1 = IS_PLAYER_COLORABLE_1
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
/obj/item/clothing/head/hooded/twee_hoodie_hood
name = "disconcertingly twee hood"
desc = "A hood of heavy and soft ringspun fleece has been adorned with a fabric simulation of ears."
icon = 'icons/map_icons/clothing/head/_head.dmi'
icon_state = "/obj/item/clothing/head/hooded/twee_hoodie_hood"
post_init_icon_state = "twee_hoodie_hood"
body_parts_covered = HEAD
cold_protection = HEAD
flags_inv = HIDEEARS|HIDEHAIR
flags_1 = IS_PLAYER_COLORABLE_1
hair_mask = /datum/hair_mask/winterhood
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
greyscale_config = /datum/greyscale_config/twee_hoodie_hood
greyscale_config_worn = /datum/greyscale_config/twee_hoodie_hood/worn
greyscale_colors = "#dbc0e0"
/obj/item/clothing/suit/hooded/twee_hoodie/set_greyscale(list/colors, new_config, new_worn_config, new_inhand_left, new_inhand_right)
. = ..()
if(!hood)
return
var/list/hoodie_colors = SSgreyscale.ParseColorString(greyscale_colors)
var/list/new_hoodie_colors = hoodie_colors.Copy(1,2)
hood.set_greyscale(new_hoodie_colors)
hood.update_slot_icon()
/obj/item/clothing/suit/hooded/twee_hoodie/on_hood_created(obj/item/clothing/head/hooded/hood)
. = ..()
var/list/hoodie_colors = (SSgreyscale.ParseColorString(greyscale_colors))
var/list/new_hoodie_colors = hoodie_colors.Copy(1,2)
hood.set_greyscale(new_hoodie_colors)
@@ -4,6 +4,7 @@
max_signs = 4
creation_time = 10
holosign_type = /obj/structure/holosign/sexsign
w_class = WEIGHT_CLASS_TINY
//The janitor sign is also purple so no need to make custom sprites here.
/obj/structure/holosign/sexsign
@@ -27,3 +27,7 @@
/datum/loadout_item/inhand/wheelchair
name = "folded wheelchair"
item_path = /obj/item/wheelchair
/datum/loadout_item/inhand/sex_sign
name = "sex holosign projector"
item_path = /obj/item/holosign_creator/sex
@@ -163,3 +163,13 @@
/datum/loadout_item/suit/frontier_colonist_short
name = "Frontier jacket"
item_path = /obj/item/clothing/suit/jacket/frontier_colonist/short/loadout
//Doppler hoodies.
/datum/loadout_item/suit/hoodie/big_hoodie
name = "Big Hoodie"
item_path = /obj/item/clothing/suit/hooded/big_hoodie
/datum/loadout_item/suit/hoodie/twee_hoodie
name = "Disconcertingly Twee Hoodie"
item_path = /obj/item/clothing/suit/hooded/twee_hoodie
@@ -0,0 +1,146 @@
/obj/item/umbrella
name = "umbrella"
icon = 'modular_zubbers/icons/obj/equipment/umbrella.dmi'
icon_state = "umbrella"
lefthand_file = 'modular_zubbers/icons/obj/equipment/umbrella_inhand_l.dmi'
righthand_file = 'modular_zubbers/icons/obj/equipment/umbrella_inhand_r.dmi'
inhand_icon_state = "umbrella"
w_class = WEIGHT_CLASS_BULKY
custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.75, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 0.25)
custom_premium_price = PAYCHECK_COMMAND * 2
// Sound effect from the rain hitting it.
var/datum/looping_sound/umbrella/rain_on_plastic/looping_sound
// Seems easier to do this.
var/mob/user_holding
// For some overhang.
inhand_x_dimension = 64
inhand_y_dimension = 64
// The umbrella provides some protection against weather effects. Perhaps you may want to change this. I don't judge.
var/immunity_type = TRAIT_RAINSTORM_IMMUNE
/obj/item/umbrella/equipped(mob/user, slot, initial = FALSE)
. = ..()
if(!looping_sound)
looping_sound = new(src, FALSE)
if(!user_holding)
RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
user_holding = user
proccess_rainsounds()
/obj/item/umbrella/dropped(mob/user, silent)
. = ..()
revoke_trait(user, immunity_type)
QDEL_NULL(looping_sound)
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
user_holding = null
/obj/item/umbrella/proc/on_move(atom/old_loc, dir, forced, list/old_locs)
SIGNAL_HANDLER
proccess_rainsounds(old_loc)
/obj/item/umbrella/proc/proccess_rainsounds()
if(!SSweather)
return
var/turf/turf = get_turf(user_holding)
if(!turf)
return
var/datum/weather/weather = SSweather.get_weather(turf.z, get_area(turf))
if(!weather || !(turf.loc in weather.impacted_areas) )
looping_sound.stop() // If there is no weather, why even have a sound?
return
if(weather.recursive_weather_protection_check(user_holding)) // If the player is protected by the weather, play the umbrella sounds.
looping_sound.start()
else
looping_sound.stop()
/obj/item/umbrella/collapsible
name = "collapsible umbrella"
icon = 'modular_zubbers/icons/obj/equipment/umbrella.dmi'
icon_state = "umbrella_retract_off"
slot_flags = ITEM_SLOT_POCKETS
w_class = WEIGHT_CLASS_SMALL
inhand_icon_state = "sheathed_umbrella"
/// Whether the umbrella is currently collapsed or open.
var/collapsed = FALSE
/// sound when toggled open/closed
var/toggle_sound = 'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/umbrella_open.ogg'
var/close_sound = 'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/umbrella_close.ogg'
/obj/item/umbrella/collapsible/Initialize(mapload)
. = ..()
AddComponent( \
/datum/component/transforming, \
w_class_on = WEIGHT_CLASS_BULKY, \
attack_verb_continuous_on = list("whaps", "thwacks", "whacks", "beats"), \
attack_verb_simple_on = list("whap", "thwack", "whack", "beat"), \
)
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
/obj/item/umbrella/collapsible/proc/on_transform(obj/item/source, mob/user, active)
SIGNAL_HANDLER
collapsed = active
if(!user)
return COMPONENT_BLOCK_TRANSFORM // Just in case.
if(collapsed)
icon_state = "umbrella_retract_on"
give_trait(user, immunity_type)
inhand_icon_state = "umbrella"
slot_flags = NONE
if(toggle_sound)
playsound(user, toggle_sound, 100)
to_chat(user, "You open the umbrella.")
else
icon_state = "umbrella_retract_off"
inhand_icon_state = "sheathed_umbrella"
slot_flags = ITEM_SLOT_POCKETS
revoke_trait(user, immunity_type)
if(toggle_sound)
playsound(user, close_sound, 100)
to_chat(user, "You close the umbrella.")
balloon_alert(user, active ? "extended" : "collapsed")
proccess_rainsounds()
return COMPONENT_NO_DEFAULT_MESSAGE
/obj/item/umbrella/proc/give_trait(mob/living/user,immunity_type)
ADD_TRAIT(user, immunity_type, REF(src))
/obj/item/umbrella/proc/revoke_trait(mob/living/user,immunity_type)
REMOVE_TRAIT(user, immunity_type, REF(src))
/datum/looping_sound/umbrella/rain_on_plastic
mid_sounds = list(
'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/rain_on_plastic2.ogg' = 1,
'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/rain_on_plastic3.ogg' = 1,
'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/rain_on_plastic4.ogg' = 1,
'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/rain_on_plastic5.ogg' = 1,
'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/rain_on_plastic6.ogg' = 1,
'modular_zubbers/code/modules/rimpoint_newfeatures/sound/effects/rain_on_plastic7.ogg' = 1,
)
mid_length = 2.5 SECONDS
falloff_distance = 1
falloff_exponent = 10
volume = 25
use_reverb = TRUE
in_order = TRUE
/datum/loadout_item/inhand/collapsible_umbrella
name = "Umbrella"
item_path = /obj/item/umbrella/collapsible
@@ -0,0 +1 @@
raindrops.umbrella.flac by dobroide -- https://freesound.org/s/14901/ -- License: Attribution 4.0
@@ -63,6 +63,8 @@
/obj/item/clothing/suit/hooded/sigmarcoat = 5,
/obj/item/clothing/suit/jacket/skyy = 5,
/obj/item/clothing/suit/jacket/tailcoat = 5,
/obj/item/clothing/suit/hooded/big_hoodie = 5,
/obj/item/clothing/suit/hooded/twee_hoodie = 5,
/obj/item/clothing/under/dress/skirt/skyrat/black_skirt = 5,
/obj/item/clothing/suit/misc/suit_harness = 5,
/obj/item/clothing/under/dress/miniskirt = 5,
Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -9639,6 +9639,7 @@
#include "modular_zubbers\code\modules\research\designs\autolathe\security_designs.dm"
#include "modular_zubbers\code\modules\research\techweb\all_nodes.dm"
#include "modular_zubbers\code\modules\research\techweb\circuit_nodes.dm"
#include "modular_zubbers\code\modules\rimpoint_newfeatures\code\umbrella.dm"
#include "modular_zubbers\code\modules\rr_opt_in\examine.dm"
#include "modular_zubbers\code\modules\rr_opt_in\rr_opt_config.dm"
#include "modular_zubbers\code\modules\rr_opt_in\rr_optin_preferences.dm"