Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync

This commit is contained in:
xPokee
2025-10-03 07:05:54 -04:00
517 changed files with 24339 additions and 21253 deletions
@@ -17,15 +17,15 @@
return !existing || istype(existing, status_effect)
/// Called when someone actually eats this
/datum/golem_food_buff/proc/on_consumption(mob/living/carbon/consumer, atom/movable/consumed)
/datum/golem_food_buff/proc/on_consumption(mob/living/carbon/consumer, atom/movable/consumed, multiplier = 1)
if (!HAS_TRAIT(consumer, TRAIT_ROCK_METAMORPHIC))
return
apply_effects(consumer, consumed)
apply_effects(consumer, consumed, multiplier)
/// Apply our desired effects to the eater
/datum/golem_food_buff/proc/apply_effects(mob/living/carbon/consumer, atom/movable/consumed)
/datum/golem_food_buff/proc/apply_effects(mob/living/carbon/consumer, atom/movable/consumed, multiplier = 1)
if (status_effect)
consumer.apply_status_effect(status_effect)
consumer.apply_status_effect(status_effect, multiplier)
/// Can eat at any time, but isn't very nutritious
/datum/golem_food_buff/glass
@@ -42,10 +42,10 @@
/// Order in which to heal damage types
var/list/damage_heal_order = list(BRUTE, BURN, TOX, OXY)
/datum/golem_food_buff/iron/apply_effects(mob/living/carbon/consumer, atom/movable/consumed)
/datum/golem_food_buff/iron/apply_effects(mob/living/carbon/consumer, atom/movable/consumed, multiplier = 1)
if (consumer.health == consumer.maxHealth)
return
consumer.heal_ordered_damage(healed_amount, damage_heal_order)
consumer.heal_ordered_damage(healed_amount * multiplier, damage_heal_order)
new /obj/effect/temp_visual/heal(get_turf(consumer), COLOR_HEALING_CYAN)
/datum/golem_food_buff/uranium
@@ -90,7 +90,7 @@
exclusive = FALSE
added_info = "After consumption, you can launch this mineral like a rocket. It's a little hard to keep down."
/datum/golem_food_buff/gibtonite/apply_effects(mob/living/carbon/human/consumer, atom/movable/consumed)
/datum/golem_food_buff/gibtonite/apply_effects(mob/living/carbon/human/consumer, atom/movable/consumed, multiplier = 1)
var/obj/item/gibtonite_hand/new_hand = new(null, /* held_gibtonite = */ consumed)
if(consumer.put_in_hands(new_hand))
@@ -108,10 +108,14 @@
exclusive = FALSE
added_info = "After consumption, you can use the stored power to teleport yourself."
/datum/golem_food_buff/bluespace/apply_effects(mob/living/carbon/human/consumer, obj/item/stack/consumed)
/datum/golem_food_buff/bluespace/apply_effects(mob/living/carbon/human/consumer, atom/movable/consumed, multiplier = 1)
if(multiplier <= 0.2)
return
var/obj/item/bluespace_finger/new_hand = new
if (consumed.amount == 1)
consumer.dropItemToGround(consumed)
if (isstack(consumed))
var/obj/item/stack/stack = consumed
if(stack.amount == 1)
consumer.dropItemToGround(stack)
if (consumer.put_in_hands(new_hand, del_on_fail = TRUE))
return
consumer.balloon_alert(consumer, "no free hands!")
@@ -94,9 +94,16 @@
animate(alpha = 50, time = 7.5 SECONDS, loop = -1, easing = SINE_EASING)
return TRUE
/datum/status_effect/golem/on_creation(mob/living/new_owner)
/datum/status_effect/golem/on_creation(mob/living/new_owner, multiplier = 1)
///instead of straight out multiplying the duration, we use exponents to flatten the duration so it doesn't become exceedingly long for golems
var/exponent = 0.2
if(!isgolem(new_owner))
duration *= 0.1
exponent = 0.5 //non-golem benefit more from higher multipliers since it normally only lasts for 30 seconds for them.
if(multiplier > 1)
duration *= multiplier ** exponent
else // if the multiplier is lower than 1, don't bother using powers.
duration *= multiplier
var/buff_duration = duration
. = ..()
if (!.)
+2 -1
View File
@@ -182,7 +182,8 @@
if(!use(1) || !repeating || amount <= 0)
var/atom/alert_loc = QDELETED(src) ? user : src
alert_loc.balloon_alert(user, repeating ? "all used up!" : "treated [parse_zone(healed_zone)]")
playsound(patient, heal_end_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
if(heal_end_sound)
playsound(patient, heal_end_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
return
if(heal_continuous_sound && (continuous || !silent))
playsound(patient, heal_continuous_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
@@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
throw_speed = 3
throw_range = 5
mats_per_unit = list(/datum/material/sandstone=SHEET_MATERIAL_AMOUNT)
sheettype = "sandstone"
construction_path_type = "sandstone"
merge_type = /obj/item/stack/sheet/mineral/sandstone
walltype = /turf/closed/wall/mineral/sandstone
material_type = /datum/material/sandstone
@@ -99,7 +99,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
icon_state = "sheet-diamond"
inhand_icon_state = "sheet-diamond"
singular_name = "diamond"
sheettype = "diamond"
construction_path_type = "diamond"
mats_per_unit = list(/datum/material/diamond=SHEET_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/carbon = 20)
gulag_valid = TRUE
@@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
icon_state = "sheet-uranium"
inhand_icon_state = "sheet-uranium"
singular_name = "uranium sheet"
sheettype = "uranium"
construction_path_type = "uranium"
mats_per_unit = list(/datum/material/uranium=SHEET_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/uranium = 20)
gulag_valid = TRUE
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
icon_state = "sheet-plasma"
inhand_icon_state = "sheet-plasma"
singular_name = "plasma sheet"
sheettype = "plasma"
construction_path_type = "plasma"
resistance_flags = FLAMMABLE
max_integrity = 100
mats_per_unit = list(/datum/material/plasma=SHEET_MATERIAL_AMOUNT)
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
icon_state = "sheet-gold"
inhand_icon_state = "sheet-gold"
singular_name = "gold bar"
sheettype = "gold"
construction_path_type = "gold"
mats_per_unit = list(/datum/material/gold=SHEET_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/gold = 20)
gulag_valid = TRUE
@@ -236,7 +236,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
icon_state = "sheet-silver"
inhand_icon_state = "sheet-silver"
singular_name = "silver bar"
sheettype = "silver"
construction_path_type = "silver"
mats_per_unit = list(/datum/material/silver=SHEET_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/silver = 20)
gulag_valid = TRUE
@@ -266,7 +266,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
icon_state = "sheet-bananium"
inhand_icon_state = null
singular_name = "bananium sheet"
sheettype = "bananium"
construction_path_type = "bananium"
mats_per_unit = list(/datum/material/bananium=SHEET_MATERIAL_AMOUNT)
grind_results = list(/datum/reagent/consumable/banana = 20)
gulag_valid = TRUE
@@ -298,7 +298,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 1
throw_range = 3
sheettype = "titanium"
construction_path_type = "titanium"
mats_per_unit = list(/datum/material/titanium=SHEET_MATERIAL_AMOUNT)
gulag_valid = TRUE
merge_type = /obj/item/stack/sheet/mineral/titanium
@@ -352,7 +352,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 1
throw_range = 3
sheettype = "plastitanium"
construction_path_type = "plastitanium"
mats_per_unit = list(/datum/material/alloy/plastitanium=SHEET_MATERIAL_AMOUNT)
gulag_valid = TRUE
material_type = /datum/material/alloy/plastitanium
@@ -463,7 +463,7 @@ GLOBAL_LIST_INIT(adamantine_recipes, list(
icon_state = "sheet-abductor"
inhand_icon_state = "sheet-abductor"
singular_name = "alien alloy sheet"
sheettype = "abductor"
construction_path_type = "abductor"
mats_per_unit = list(/datum/material/alloy/alien=SHEET_MATERIAL_AMOUNT)
merge_type = /obj/item/stack/sheet/mineral/abductor
material_type = /datum/material/alloy/alien
@@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \
inhand_icon_state = "sheet-runed"
icon = 'icons/obj/stack_objects.dmi'
mats_per_unit = list(/datum/material/runedmetal = SHEET_MATERIAL_AMOUNT)
sheettype = "runed"
construction_path_type = "runed"
merge_type = /obj/item/stack/sheet/runed_metal
grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15)
material_type = /datum/material/runedmetal
@@ -416,7 +416,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
inhand_icon_state = "sheet-wood"
icon = 'icons/obj/stack_objects.dmi'
mats_per_unit = list(/datum/material/wood=SHEET_MATERIAL_AMOUNT)
sheettype = "wood"
construction_path_type = "wood"
armor_type = /datum/armor/mineral_wood
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/wood
@@ -481,7 +481,7 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
icon_state = "sheet-bamboo"
inhand_icon_state = "sheet-bamboo"
icon = 'icons/obj/stack_objects.dmi'
sheettype = "bamboo"
construction_path_type = "bamboo"
mats_per_unit = list(/datum/material/bamboo = SHEET_MATERIAL_AMOUNT)
throwforce = 15
armor_type = /datum/armor/mineral_bamboo
@@ -794,7 +794,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
lefthand_file = 'icons/mob/inhands/items/sheets_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/sheets_righthand.dmi'
resistance_flags = FIRE_PROOF | ACID_PROOF
sheettype = "bronze"
construction_path_type = "bronze"
force = 5
throwforce = 10
max_amount = 50
@@ -18,14 +18,13 @@
pickup_sound = 'sound/items/handling/materials/metal_pick_up.ogg'
drop_sound = 'sound/items/handling/materials/metal_drop.ogg'
sound_vary = TRUE
/// this is used for girders in the creation of walls/false walls
var/sheettype = null
usable_for_construction = TRUE
/// text string used to find typepaths used in door and wall (false and tram too) construction for door assemblies and girders respectively
var/construction_path_type = null
///If true, this is worth points in the gulag labour stacker
var/gulag_valid = FALSE
///Set to true if this is vended from a material storage
var/manufactured = FALSE
///What type of wall does this sheet spawn
var/walltype
/// whether this sheet can be sniffed by the material sniffer
var/sniffable = FALSE
+7 -2
View File
@@ -45,8 +45,6 @@
// these amounts will be multiplied by the stack size in on_grind()
/// Amount of matter given back to RCDs
var/matter_amount = 0
/// Does this stack require a unique girder in order to make a wall?
var/has_unique_girder = FALSE
/// What typepath table we create from this stack
var/obj/structure/table/table_type
/// What typepath stairs do we create from this stack
@@ -73,6 +71,13 @@
/// or until the cut heals, whichever comes first
var/absorption_rate
/// Can this stack be used for contruction of girders?
var/usable_for_construction = FALSE
/// Does this stack require a unique girder in order to make a wall?
var/has_unique_girder = FALSE
///What type of wall does this sheet spawn
var/walltype
/obj/item/stack/Initialize(mapload, new_amount = amount, merge = TRUE, list/mat_override=null, mat_amt=1)
amount = new_amount
if(amount <= 0)