Qol and bugfix variety pack (#21367)

changes:
  - qol: "Added detailed extended examine info on mechanics to pens."
- qol: "Added detailed extended examine info on mechanics to the
psychiatrist/chaplain Mesmetron."
- qol: "Added detailed extended examine info on mechanics to
barricades."
- qol: "Added some extended examine info to (hanging) flags, crayons,
misc."
  - code_imp: "Updated dmdocs in many locations."
- bugfix: "You can no longer force-feed people crayons. However, you can
still offer a bite of crayon for them to accept or refuse, for
tradition's sake."
- bugfix: "Reading the contents of a noticeboard now makes you actually
face the noticeboard."
This commit is contained in:
Batrachophreno
2025-09-28 12:12:48 +00:00
committed by GitHub
parent f2a59a207c
commit 28a4128ab8
16 changed files with 216 additions and 53 deletions
@@ -4,19 +4,25 @@
anchored = TRUE
density = TRUE
atom_flags = ATOM_FLAG_CHECKS_BORDER
/// The type of stack the barricade dropped when disassembled if any.
var/stack_type
/// The amount of stack dropped when disassembled at full health
var/stack_amount = 5
/// to specify a non-zero amount of stack to drop when destroyed
var/destroyed_stack_amount
/// Pretty tough. Changes sprites at 300 and 150
var/health = 100
/// Basic code functions
var/maxhealth = 100
var/stack_type //The type of stack the barricade dropped when disassembled if any.
var/stack_amount = 5 //The amount of stack dropped when disassembled at full health
var/destroyed_stack_amount //to specify a non-zero amount of stack to drop when destroyed
var/health = 100 //Pretty tough. Changes sprites at 300 and 150
var/maxhealth = 100 //Basic code functions
///Used for calculating some stuff related to maxhealth as it constantly changes due to e.g. barbed wire. set to 100 to avoid possible divisions by zero
/// Used for calculating some stuff related to maxhealth as it constantly changes due to e.g. barbed wire. set to 100 to avoid possible divisions by zero
var/starting_maxhealth = 100
var/force_level_absorption = 5 //How much force an item needs to even damage it at all.
/// How much force an item needs to even damage it at all.
var/force_level_absorption = 5
var/barricade_hitsound
var/barricade_type = "barricade" //"metal", "plasteel", etc.
/// "metal", "plasteel", etc.
var/barricade_type = "barricade"
var/can_change_dmg_state = TRUE
var/damage_state = BARRICADE_DMG_NONE
var/closed = FALSE
@@ -43,12 +49,15 @@
/obj/structure/barricade/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "RIGHT-click on this to rotate it (if not anchored to the floor)."
if(!is_wired)
. += "Use a length of barbed wire on this barricade to restrict enemies from climbing it and damage them on attacking it at close range."
. += "Use a length of barbed wire on this barricade to prevent enemies from climbing it and damage them on attacking it at close range."
else
. += "Wirecutters could remove the barbed wire on this, but it will take several moments."
/obj/structure/barricade/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += SPAN_INFO("It is recommended to stand flush to a barricade or one tile away for maximum efficiency.")
. += SPAN_INFO("It is recommended to stand flush to a barricade or one tile away for maximum effectiveness.")
if(is_wired)
. += SPAN_INFO("There is a length of barbed wire strewn across the top of this barricade, preventing it from being climbed and making it hazardous to attack at close range.")
@@ -1,6 +1,6 @@
/obj/structure/barricade/metal
name = "metal barricade"
desc = "A sturdy and easily assembled barricade made of metal plates, often used for quick fortifications. Use a blowtorch to repair."
desc = "A sturdy and easily assembled barricade made of metal plates, often used for quick fortifications."
icon_state = "metal_0"
build_amt = 4
health = 450
@@ -12,8 +12,20 @@
barricade_hitsound = 'sound/effects/metalhit.ogg'
barricade_type = "metal"
can_wire = TRUE
var/build_state = BARRICADE_BSTATE_SECURED //Look at __game.dm for barricade defines
/// Look at __game.dm for barricade defines
var/build_state = BARRICADE_BSTATE_SECURED
// Duplicated in /obj/structure/barricade/plasteel. If you change one, also change the other.
/obj/structure/barricade/metal/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Damage (up to a point) can be repaired with a welding torch."
switch(build_state)
if(BARRICADE_BSTATE_MOVABLE)
. += "The barricade is ready to have its <b>anchor bolts</b> tightened."
if(BARRICADE_BSTATE_UNSECURED)
. += "The protection panel is ready to be <b>screwed</b> into place."
// Duplicated in /obj/structure/barricade/plasteel. If you change one, also change the other.
/obj/structure/barricade/metal/disassembly_hints(mob/user, distance, is_adjacent)
. += ..()
switch(build_state)
@@ -1,6 +1,6 @@
/obj/structure/barricade/plasteel
name = "plasteel barricade"
desc = "A very sturdy barricade made out of plasteel panels, the pinnacle of strongpoints. Use a blowtorch to repair. Can be flipped down to create a path."
desc = "A very sturdy barricade made out of plasteel panels, the pinnacle of strongpoints."
icon_state = "plasteel_closed_0"
health = 800
maxhealth = 800
@@ -15,9 +15,12 @@
closed = TRUE
can_wire = TRUE
var/build_state = BARRICADE_BSTATE_SECURED //Look at __game.dm for barricade defines
var/tool_cooldown = 0 //Delay to apply tools to prevent spamming
var/busy = 0 //Standard busy check
/// Look at __game.dm for barricade defines
var/build_state = BARRICADE_BSTATE_SECURED
/// Delay to apply tools to prevent spamming
var/tool_cooldown = 0
/// Standard busy check
var/busy = 0
var/linked = 0
var/recentlyflipped = FALSE
var/hasconnectionoverlay = TRUE
@@ -35,22 +38,37 @@
overlays += image('icons/obj/barricades.dmi', icon_state = "[src.barricade_type]_connection_[get_dir(src, cade)]")
continue
/obj/structure/barricade/plasteel/handle_barrier_chance(mob/living/M)
if(!closed) // Closed = gate down for plasteel for some reason
return ..()
else
return 0
/obj/structure/barricade/plasteel/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/structure/barricade/plasteel/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use this with an empty active hand to toggle it closed or open."
. += "Multiple plasteel barricades aligned in a row can be linked together by using a crowbar on adjacent ones sequentially."
// Duplicated in /obj/structure/barricade/metal. If you change one, also change the other.
/obj/structure/barricade/plasteel/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Damage (up to a point) can be repaired with a welding torch."
switch(build_state)
if(BARRICADE_BSTATE_MOVABLE)
. += "The barricade is ready to have its <b>anchor bolts</b> tightened."
if(BARRICADE_BSTATE_UNSECURED)
. += "The protection panel is ready to be <b>screwed</b> into place."
// Duplicated in /obj/structure/barricade/metal. If you change one, also change the other.
/obj/structure/barricade/plasteel/disassembly_hints(mob/user, distance, is_adjacent)
. += ..()
switch(build_state)
if(BARRICADE_BSTATE_SECURED)
. += SPAN_INFO("The protection panel is still tighly screwed in place.")
. += "The protection panel is still tighly <b>screwed</b> in place."
if(BARRICADE_BSTATE_UNSECURED)
. += SPAN_INFO("The protection panel has been removed, you can see the anchor bolts.")
. += "The protection panel has been removed, you can see the <b>anchor bolts</b>."
if(BARRICADE_BSTATE_MOVABLE)
. += SPAN_INFO("The protection panel has been removed and the anchor bolts loosened. It's ready to be taken apart.")
. += "The protection panel has been removed and the anchor bolts loosened. It's ready to be <b>pried</b> apart."
/obj/structure/barricade/plasteel/weld_cade(obj/item/W, mob/user)
busy = TRUE
@@ -15,6 +15,10 @@
can_wire = FALSE
metallic = FALSE
/obj/structure/barricade/wooden/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
. += "A plank of wood can be used on this to repair damage."
/obj/structure/barricade/wooden/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/stack/material/wood))
var/obj/item/stack/material/wood/D = attacking_item
@@ -27,7 +31,7 @@
if(D.use(1))
update_health(-0.5*maxhealth)
update_damage_state()
visible_message(SPAN_NOTICE("[user] clumsily repairs [src]."))
visible_message(SPAN_NOTICE("[user] haphazardly repairs [src]."))
return
. = ..()
@@ -243,7 +243,7 @@
user.put_in_hands(chosen_item)
to_chat(user, SPAN_NOTICE("You take [my_plasteel[chosen_item]] from [src]."))
my_plasteel -= chosen_item
if(/obj/item/device/lightreplacer)
if(/obj/item/device/lightreplacer, /obj/item/device/lightreplacer/advanced)
if(my_lightreplacer)
user.put_in_hands(my_lightreplacer)
to_chat(user, SPAN_NOTICE("You take [my_lightreplacer] from [src]."))
+3 -2
View File
@@ -1,12 +1,13 @@
/obj/structure/coatrack
name = "coat rack"
desc = "Rack that holds coats, or hats, if you're so inclined."
desc = "Rack that holds coats, or hats, if you're so inclined. Well, exactly one coat and one hat, at least."
icon = 'icons/obj/coatrack.dmi'
icon_state = "coatrack"
layer = ABOVE_HUMAN_LAYER
var/obj/item/clothing/coat
var/obj/item/clothing/head/hat
var/list/custom_sprites = list(/obj/item/clothing/head/beret/security, /obj/item/clothing/accessory/poncho/tajarancloak) // Custom manual sprite override.
/// Custom manual sprite override.
var/list/custom_sprites = list(/obj/item/clothing/head/beret/security, /obj/item/clothing/accessory/poncho/tajarancloak)
/obj/structure/coatrack/attack_hand(mob/user as mob)
if(use_check_and_message(user))
+14 -7
View File
@@ -10,7 +10,7 @@
icon_state = "flag_boxed"
var/flag_path
///Boolean, set to `TRUE` if a flag is large (2x1)
/// Boolean, set to `TRUE` if a flag is large (2x1)
var/flag_size = FALSE
var/obj/structure/sign/flag/flag_structure
@@ -23,17 +23,17 @@
icon = 'icons/obj/structure/flags.dmi'
icon_state = "flag"
///If a big flag, the other half of the flag is referenced here
/// If a big flag, the other half of the flag is referenced here
var/obj/structure/sign/flag/linked_flag
/// For returning your flag
var/obj/item/flag/flag_item
var/obj/item/flag/flag_item //For returning your flag
///Boolean, if we've been torn down
/// Boolean, if we've been torn down
var/ripped = FALSE
///Default offset value. Used in accurately locating the turf we're standing on.
/// Default offset value. Used in accurately locating the turf we're standing on.
var/offset_constant = 32
///Boolean, set to TRUE if someone is folding the banner.
/// Boolean, set to TRUE if someone is folding the banner.
var/currently_folding = FALSE
var/ripped_outline_state = "flag_ripped"
var/flag_path
@@ -45,6 +45,13 @@
var/unmovable = FALSE
var/stand_icon = "banner_stand"
/obj/structure/sign/flag/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "With the HELP intent, use an empty hand on this to examine it."
. += "With the DISARM intent, use an empty hand on this to fold it back up."
. += "With the GRAB intent, use an empty hand on this to salute it. How patriotic!"
. += "With the HURT intent, use an empty hand on this rip it down. You will receive a prompt to confirm the action."
/obj/structure/sign/flag/Initialize(mapload, var/newdir, var/linked_flag_path, var/deploy, var/icon_file, var/item_flag_path)
. = ..()
dir = newdir
+5 -8
View File
@@ -9,7 +9,8 @@
pass_flags_self = PASSTABLE
var/state = 0
var/health = 200
var/cover = 50 //how much cover the girder provides against projectiles.
/// How much cover the girder provides against projectiles.
var/cover = 50
build_amt = 2
var/material/reinf_material
var/reinforcing = 0
@@ -30,15 +31,13 @@
state = SPAN_NOTICE("The support struts look completely intact.")
. += state
/obj/structure/girder/mechanics_hints()
. = list()
/obj/structure/girder/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
if (state == 0 && anchored)
. += SPAN_NOTICE("It could be <b>pried</b> to subtly displace it to build a fake wall.")
return .
/obj/structure/girder/assembly_hints()
. = list()
/obj/structure/girder/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
if (health < initial(health))
. += "It could be repaired with a few choice <b>welds</b>."
@@ -55,8 +54,7 @@
. += "It [anchored ? "is" : "could be"] anchored to the floor with some <b>bolts</b>."
return .
/obj/structure/girder/disassembly_hints()
. = list()
/obj/structure/girder/disassembly_hints(mob/user, distance, is_adjacent)
. += ..()
// Reinf wall deconstruction.
if (state == 2)
@@ -66,7 +64,6 @@
if (!anchored)
. += "It is held together by a couple of <b>bolts</b>; a heavy <b>cutting</b> tool might also take it apart."
/obj/structure/girder/displaced
name = "displaced girder"
icon_state = "displaced"
@@ -47,6 +47,7 @@
// level, it should be fine to let anyone mess with the board other than ghosts.
/obj/structure/noticeboard/examine(mob/user, distance, is_adjacent, infix, suffix, show_extended)
if(is_adjacent)
user.face_atom(src)
var/dat = "<B>Noticeboard</B><BR>"
for(var/obj/item/paper/P in src)
dat += "<A href='byond://?src=[REF(src)];read=[REF(P)]'>[P.name]</A> <A href='byond://?src=[REF(src)];write=[REF(P)]'>Write</A> <A href='byond://?src=[REF(src)];remove=[REF(P)]'>Remove</A><BR>"
+8 -1
View File
@@ -1,6 +1,6 @@
/obj/item/mesmetron
name = "mesmetron pocketwatch"
desc = "An elaborate pocketwatch, with a captivating gold etching and an enchanting face. . ."
desc = "An elaborate pocketwatch, with a captivating gold etching and an enchanting face..."
icon = 'icons/obj/item/clothing/wrists/wrist.dmi'
icon_state = "pocketwatch"
item_state = "pocketwatch"
@@ -14,6 +14,13 @@
var/time_counter = 0
var/closed = FALSE
/obj/item/mesmetron/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "ALT-click this to snap it open or shut."
. += "Use this on yourself (when opened) to check the date and time."
. += "Use this on someone (when opened) to attempt to hypnotize them! They will receive a prompt; if they believe in hypnosis, they will fall into a deep slumber."
. += "While you have someone hypnotized, use this on yourself to either awaken them, or to whisper a suggestion to them!"
/obj/item/mesmetron/AltClick(mob/user)
if(!closed)
icon_state = "[initial(icon_state)]_closed"