Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-04a

This commit is contained in:
Waterpig
2025-04-08 18:58:45 +02:00
1089 changed files with 42417 additions and 34460 deletions
+91 -9
View File
@@ -9,6 +9,8 @@
anchored = FALSE
pass_flags = PASSTABLE // Able to place on tables
max_integrity = 5000 // To make attacking it not instantly break it
throwforce = 2
interaction_flags_mouse_drop = NEED_HANDS
/// The amount of times this bell has been rang, used to check the chance it breaks
var/times_rang = 0
@@ -60,6 +62,10 @@
times_rang += weapon.force
ring_bell(user)
/obj/structure/desk_bell/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
ring_bell()
// Fix the clapper
/obj/structure/desk_bell/screwdriver_act(mob/living/user, obj/item/tool)
if(broken_ringer)
@@ -91,7 +97,10 @@
/// Check if the clapper breaks, and if it does, break it
/obj/structure/desk_bell/proc/check_clapper(mob/living/user)
if(((times_rang >= 10000) || prob(times_rang/100)) && ring_cooldown_length)
to_chat(user, span_notice("You hear [src]'s clapper fall off of its hinge. Nice job, you broke it."))
if (user)
to_chat(user, span_notice("You hear [src]'s clapper fall off of its hinge. Nice job, you broke it."))
else
audible_message(span_notice("You hear [src]'s clapper fall off of its hinge. Nice job, you broke it."))
broken_ringer = TRUE
/// Ring the bell
@@ -105,20 +114,93 @@
times_rang++
return TRUE
/obj/structure/desk_bell/mouse_drop_dragged(atom/over_object, mob/user)
if(over_object != user)
return FALSE
var/obj/item/inhand_desk_bell/held_bell = new (user, src)
user.put_in_hands(held_bell, del_on_fail = FALSE)
// A warning to all who enter; the ringing sound STACKS. It won't be deafening because it only goes every decisecond,
// but I did feel like my ears were going to start bleeding when I tested it with my autoclicker.
/obj/structure/desk_bell/speed_demon
desc = "The cornerstone of any customer service job. This one's been modified for hyper-performance."
ring_cooldown_length = 0
/obj/structure/desk_bell/mouse_drop_dragged(atom/over_object, mob/user)
if(!istype(over_object, /obj/vehicle/ridden/wheelchair))
/// Handheld bell
/obj/item/inhand_desk_bell
name = "held desk bell"
force = 1
w_class = WEIGHT_CLASS_SMALL
obj_flags = CONDUCTS_ELECTRICITY
force = 1
throwforce = 2
/// Our contained bell
var/obj/structure/desk_bell/bell
/obj/item/inhand_desk_bell/Initialize(mapload, obj/structure/desk_bell/bell)
if (mapload)
stack_trace("You shouldn't map in this item, use /obj/structure/desk_bell")
if (!bell)
return INITIALIZE_HINT_QDEL
register_item_context()
src.bell = bell
bell.forceMove(src)
appearance = bell.appearance
RegisterSignals(bell, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(on_bell_gone))
return ..()
/// If we don't have a bell we're nothing
/obj/item/inhand_desk_bell/proc/on_bell_gone()
SIGNAL_HANDLER
UnregisterSignal(bell, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED))
bell = null
qdel(src)
/obj/item/inhand_desk_bell/add_item_context(obj/item/source, list/context, atom/target, mob/living/user)
. = NONE
if(istype(target, /obj/vehicle/ridden/wheelchair))
var/obj/vehicle/ridden/wheelchair/chair = target
if(!chair.bell_attached)
context[SCREENTIP_CONTEXT_LMB] = "Attach bell to wheelchair."
return CONTEXTUAL_SCREENTIP_SET
/obj/item/inhand_desk_bell/examine(mob/user)
return bell.examine(user)
/obj/item/inhand_desk_bell/on_thrown(mob/living/carbon/user, atom/target)
var/obj/throwing_bell = bell // We are about to null this variable but also want to return it
bell.forceMove(user.drop_location())
return throwing_bell
/obj/item/inhand_desk_bell/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
. = ..()
if (isturf(loc))
bell.forceMove(loc)
/obj/item/inhand_desk_bell/attack(mob/living/target_mob, mob/living/user, params)
. = ..()
if (.)
return
var/obj/vehicle/ridden/wheelchair/target = over_object
if(target.bell_attached)
bell.ring_bell(user)
/obj/item/inhand_desk_bell/attack_self(mob/user, modifiers)
. = ..()
if (.)
return
bell.ring_bell(user)
/obj/item/inhand_desk_bell/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
. = ..()
if (!istype(interacting_with, /obj/vehicle/ridden/wheelchair))
return NONE
var/obj/vehicle/ridden/wheelchair/chair = interacting_with
if (chair.bell_attached)
user.balloon_alert(user, "already has a bell!")
return
return ITEM_INTERACT_FAILURE
user.balloon_alert(user, "attaching bell...")
if(!do_after(user, 0.5 SECONDS))
return
target.attach_bell(src)
if (!do_after(user, 0.5 SECONDS, chair))
return ITEM_INTERACT_FAILURE
chair.attach_bell(bell)
return ITEM_INTERACT_SUCCESS
+5 -1
View File
@@ -17,7 +17,6 @@
icon_state = "paper"
inhand_icon_state = "paper"
worn_icon_state = "paper"
custom_fire_overlay = "paper_onfire_overlay"
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_range = 1
@@ -86,6 +85,11 @@
LAZYREMOVE(SSpersistence.queued_message_bottles, src)
return ..()
/obj/item/paper/custom_fire_overlay()
if (!custom_fire_overlay)
custom_fire_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paper_onfire_overlay", appearance_flags = RESET_COLOR|KEEP_APART)
return custom_fire_overlay
/// Determines whether this paper has been written or stamped to.
/obj/item/paper/proc/is_empty()
return !(LAZYLEN(raw_text_inputs) || LAZYLEN(raw_stamp_data))
+5 -1
View File
@@ -4,7 +4,6 @@
icon = 'icons/obj/service/bureaucracy.dmi'
icon_state = "paperplane"
base_icon_state = "paperplane"
custom_fire_overlay = "paperplane_onfire"
throw_range = 7
throw_speed = 1
throwforce = 0
@@ -59,6 +58,11 @@
internal_paper = null
return ..()
/obj/item/paperplane/custom_fire_overlay()
if (!custom_fire_overlay)
custom_fire_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paperplane_onfire", appearance_flags = RESET_COLOR|KEEP_APART)
return custom_fire_overlay
/obj/item/paperplane/suicide_act(mob/living/user)
var/obj/item/organ/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
user.Stun(20 SECONDS)
+1 -1
View File
@@ -484,7 +484,7 @@
target_turf = get_turf(src)
if(ismineralturf(target_turf))
var/turf/closed/mineral/mineral_turf = target_turf
mineral_turf.gets_drilled(firer, TRUE)
mineral_turf.gets_drilled(firer, 1)
/obj/item/pen/destroyer
name = "Fine Tipped Pen"
+1
View File
@@ -663,6 +663,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks())
desc = "A small, lightweight cartridge of Nanotrasen ValueBrand toner. Fits photocopiers and autopainters alike."
icon = 'icons/obj/service/bureaucracy.dmi'
icon_state = "tonercartridge"
w_class = WEIGHT_CLASS_SMALL
grind_results = list(/datum/reagent/iodine = 40, /datum/reagent/iron = 10)
var/charges = 5
var/max_charges = 5