From 28a4128ab864cc1e804eeeeb08da7a1c79dcc213 Mon Sep 17 00:00:00 2001 From: Batrachophreno Date: Sun, 28 Sep 2025 08:12:48 -0400 Subject: [PATCH] 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." --- code/game/machinery/stasis_bed.dm | 2 +- code/game/machinery/washing_machine.dm | 14 ++++- code/game/objects/items/crayons.dm | 26 +++++++- .../items/weapons/storage/uplink_kits.dm | 4 +- .../structures/barricades/_barricade.dm | 31 ++++++---- .../objects/structures/barricades/metal.dm | 16 ++++- .../objects/structures/barricades/plasteel.dm | 38 ++++++++---- .../objects/structures/barricades/wood.dm | 6 +- .../game/objects/structures/carts/engicart.dm | 2 +- code/game/objects/structures/coatrack.dm | 5 +- code/game/objects/structures/flags_banners.dm | 21 ++++--- code/game/objects/structures/girders.dm | 13 ++-- code/game/objects/structures/noticeboard.dm | 1 + code/game/objects/structures/therapy.dm | 9 ++- code/modules/paperwork/pen.dm | 60 +++++++++++++++++-- html/changelogs/Bat-VarietyPack.yml | 21 +++++++ 16 files changed, 216 insertions(+), 53 deletions(-) create mode 100644 html/changelogs/Bat-VarietyPack.yml diff --git a/code/game/machinery/stasis_bed.dm b/code/game/machinery/stasis_bed.dm index 7501c107a94..bf511fde801 100644 --- a/code/game/machinery/stasis_bed.dm +++ b/code/game/machinery/stasis_bed.dm @@ -28,7 +28,7 @@ /obj/machinery/stasis_bed/mechanics_hints(mob/user, distance, is_adjacent) . += ..() - . += "You can alt-click this to toggle it on or off." + . += "ALT-click this to toggle it on or off." /obj/machinery/stasis_bed/Initialize(mapload, d, populate_components) . = ..() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index a82eb2547bc..091690ede4b 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/machinery/washing_machine.dmi' icon_state = "wm_10" density = 1 - anchored = 1.0 + anchored = TRUE clicksound = /singleton/sound_category/button_sound clickvol = 40 @@ -32,6 +32,10 @@ . += "ALT-click a washing machine to start and stop it." . += "Washing machines can be used as part of the leather tanning process by putting scraped bare hides in them." +/obj/machinery/washing_machine/assembly_hints(mob/user, distance, is_adjacent) + . += ..() + . += "It [anchored ? "is" : "could be"] anchored to the floor with some bolts." + /obj/machinery/washing_machine/antagonist_hints(mob/user, distance, is_adjacent) . += ..() . += "If you put Ian inside this machine and run it, terrible things will happen." @@ -109,6 +113,14 @@ state = 3 else return ..() + else if(attacking_item.iswrench()) + if(anchored) + to_chat(user, SPAN_NOTICE("You lean down and unwrench \the [src].")) + anchored = FALSE + else + to_chat(user, SPAN_NOTICE("You wrench \the [src] into place.")) + anchored = TRUE + return else if(contents.len < 5) if (state in list(1, 3)) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index f535df3cd1c..e9bb1d05284 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -69,6 +69,10 @@ colourName = "rainbow" reagents_to_add = list(/singleton/reagent/crayon_dust/brown = 20) +/obj/item/crayon/rainbow/mechanics_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use this on yourself to change the current primary and shade colors." + /obj/item/pen/crayon/rainbow/attack_self(mob/living/user as mob) colour = input(user, "Please select the main colour.", "Crayon colour") as color shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color @@ -80,6 +84,10 @@ shadeColour = "#886422" desc = "A crayon that is integrated into a user's finger. It can synthesize a multitude of colors." +/obj/item/crayon/augment/mechanics_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use this on yourself to change the current primary and shade colors." + /obj/item/pen/crayon/augment/Initialize() . = ..() name = "integrated crayon" @@ -141,8 +149,22 @@ if(ishuman(target_mob)) var/mob/living/carbon/human/H = target_mob if(H.check_has_mouth()) - target_mob.visible_message(SPAN_NOTICE("[target_mob] takes a bite of their crayon and swallows it."), - SPAN_NOTICE("You take a bite of your crayon and swallow it.")) + // The end of an era: no more force-feeding people crayons. + if(user != target_mob) + var/crayon_eater_response = alert(target_mob, "[user] is trying to feed you a crayon. How hungry are you?", "Hunger", "Very hungry!", "Not that hungry.") + // The ungrateful bastard doesn't want to eat any crayon. + if(crayon_eater_response == "Not that hungry.") + target_mob.visible_message(SPAN_NOTICE("[target_mob] pushes away the crayon [user] held out for them to eat."), + SPAN_NOTICE("[target_mob] doesn't want seem to eat any crayon right now.")) + return TRUE + // Yum yum! This message is handled separately to make it Very Clear to observers that someone is hand-feeding someone else a crayon. + else + target_mob.visible_message(SPAN_NOTICE("[target_mob] takes a bite of the crayon held out by [user] and swallows it."), + SPAN_NOTICE("You take a bite of crayon and swallow it.")) + + else + target_mob.visible_message(SPAN_NOTICE("[target_mob] takes a bite of crayon and swallows it."), + SPAN_NOTICE("You take a bite of crayon and swallow it.")) target_mob.adjustNutritionLoss(-1) reagents.trans_to_mob(target_mob, 2, CHEM_INGEST) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 0c08a1f2355..da7e75836ae 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -52,7 +52,7 @@ /obj/item/storage/box/syndie_kit/chameleon name = "chameleon kit" - desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." + desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." worn_overlay = "syndiesuit" starts_with = list( /obj/item/clothing/under/chameleon = 1, @@ -77,7 +77,7 @@ /obj/item/storage/box/syndie_kit/clerical name = "clerical kit" - desc = "Comes with all you need to fake paperwork. Assumes you have passed basic writing lessons." + desc = "Comes with all you need to fake paperwork or write with invisible ink. Assumes you have passed basic writing lessons." worn_overlay = "pen" starts_with = list( /obj/item/stamp/chameleon = 1, diff --git a/code/game/objects/structures/barricades/_barricade.dm b/code/game/objects/structures/barricades/_barricade.dm index 7c76b3dfd91..381272cc63e 100644 --- a/code/game/objects/structures/barricades/_barricade.dm +++ b/code/game/objects/structures/barricades/_barricade.dm @@ -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.") diff --git a/code/game/objects/structures/barricades/metal.dm b/code/game/objects/structures/barricades/metal.dm index 5b8beea297a..ae6b1f0fcda 100644 --- a/code/game/objects/structures/barricades/metal.dm +++ b/code/game/objects/structures/barricades/metal.dm @@ -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 anchor bolts tightened." + if(BARRICADE_BSTATE_UNSECURED) + . += "The protection panel is ready to be screwed 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) diff --git a/code/game/objects/structures/barricades/plasteel.dm b/code/game/objects/structures/barricades/plasteel.dm index 8910ab956e8..42d44ca2fc9 100644 --- a/code/game/objects/structures/barricades/plasteel.dm +++ b/code/game/objects/structures/barricades/plasteel.dm @@ -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 anchor bolts tightened." + if(BARRICADE_BSTATE_UNSECURED) + . += "The protection panel is ready to be screwed 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 screwed 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 anchor bolts." 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 pried apart." /obj/structure/barricade/plasteel/weld_cade(obj/item/W, mob/user) busy = TRUE diff --git a/code/game/objects/structures/barricades/wood.dm b/code/game/objects/structures/barricades/wood.dm index 88a84b5c447..f4bcfb9bdc9 100644 --- a/code/game/objects/structures/barricades/wood.dm +++ b/code/game/objects/structures/barricades/wood.dm @@ -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 . = ..() diff --git a/code/game/objects/structures/carts/engicart.dm b/code/game/objects/structures/carts/engicart.dm index 7a10a2e75bc..4004c8d399b 100644 --- a/code/game/objects/structures/carts/engicart.dm +++ b/code/game/objects/structures/carts/engicart.dm @@ -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].")) diff --git a/code/game/objects/structures/coatrack.dm b/code/game/objects/structures/coatrack.dm index abd61b51b53..d8f04df6c53 100644 --- a/code/game/objects/structures/coatrack.dm +++ b/code/game/objects/structures/coatrack.dm @@ -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)) diff --git a/code/game/objects/structures/flags_banners.dm b/code/game/objects/structures/flags_banners.dm index 1f4a4359fa9..c90ef2ef8cd 100644 --- a/code/game/objects/structures/flags_banners.dm +++ b/code/game/objects/structures/flags_banners.dm @@ -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 diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 2bb492c3677..e54849a465c 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -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 pried 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 welds." @@ -55,8 +54,7 @@ . += "It [anchored ? "is" : "could be"] anchored to the floor with some bolts." 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 bolts; a heavy cutting tool might also take it apart." - /obj/structure/girder/displaced name = "displaced girder" icon_state = "displaced" diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index d5f88f74ba9..275691e9275 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -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 = "Noticeboard
" for(var/obj/item/paper/P in src) dat += "[P.name] Write Remove
" diff --git a/code/game/objects/structures/therapy.dm b/code/game/objects/structures/therapy.dm index b043f39de08..24a6358b0fa 100644 --- a/code/game/objects/structures/therapy.dm +++ b/code/game/objects/structures/therapy.dm @@ -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" diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 51453ac13be..c8531e59cc9 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -21,7 +21,7 @@ \[br\] : Creates a linebreak. \[center\] - \[/center\] : Centers the text. \[h1\] - \[/h1\] : Makes the text a first level heading. - \[h2\] - \[/h2\] : Makes the text a second level headin. + \[h2\] - \[/h2\] : Makes the text a second level heading. \[h3\] - \[/h3\] : Makes the text a third level heading. \[b\] - \[/b\] : Makes the text bold. \[i\] - \[/i\] : Makes the text italic. @@ -50,8 +50,14 @@ drop_sound = 'sound/items/drop/accessory.ogg' pickup_sound = 'sound/items/pickup/accessory.ogg' - var/colour = "black" // Ink colour. - var/cursive = FALSE // Done here so other pen variants can access the cursive variable. + /// Ink colour. + var/colour = "black" + /// Done here so other pen variants can access the cursive variable. + var/cursive = FALSE + +/obj/item/pen/mechanics_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Pens can be used on paper to write, or on a wide variety of objects, machinery, etc. to label or rename them." /obj/item/pen/ispen() return TRUE @@ -97,7 +103,7 @@ colour = "green" /obj/item/pen/invisible - desc = "An instrument for writing or drawing with ink. This one has invisible ink." + desc = "An instrument for writing or drawing with ink. This one has invisible (white) ink." icon_state = "pen" colour = "white" @@ -107,6 +113,10 @@ var/selectedColor = 1 var/colors = list("black", "blue", "red", "green", "yellow") +/obj/item/pen/multi/mechanics_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use this on yourself to change the current pen color." + /obj/item/pen/multi/attack_self(mob/user) if(++selectedColor > 3) selectedColor = 1 @@ -134,6 +144,10 @@ throwforce = 1 //pointy colour = "#1c1713" //dark ashy brownish +/obj/item/pen/fountain/mechanics_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use this on yourself to toggle between normal and cursive script." + /obj/item/pen/fountain/attack_self(var/mob/user) playsound(loc, 'sound/items/penclick.ogg', 50, 1) to_chat(user, SPAN_NOTICE("You snap the nib into position to write [cursive ? "normally" : "in cursive"].")) @@ -172,6 +186,10 @@ slot_flags = SLOT_BELT origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) +/obj/item/pen/reagent/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use this on someone to inject them with its current reagents. They'll definitely notice." + /obj/item/pen/reagent/Initialize() . = ..() create_reagents(30) @@ -203,48 +221,78 @@ /* * Parapens */ + /obj/item/pen/reagent/paralysis icon_state = "pen_red" colour = "red" origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) reagents_to_add = list(/singleton/reagent/toxin/dextrotoxin = 10) // ~5 minutes worth of paralysis. Measured from falling over to getting up. +/obj/item/pen/reagent/paralysis/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "You recall this pen contains approximately five minutes' worth of paralyzing agents." + /obj/item/pen/reagent/purge icon_state = "pen_green" colour = "green" origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) reagents_to_add = list(/singleton/reagent/fluvectionem = 5) +/obj/item/pen/reagent/purge/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "You recall this pen contains a paralysis counteragent for removing the effect early if desired." + /obj/item/pen/reagent/healing icon_state = "pen_green" colour = "green" origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) reagents_to_add = list(/singleton/reagent/tricordrazine = 10, /singleton/reagent/dermaline = 5, /singleton/reagent/bicaridine = 5) +/obj/item/pen/reagent/healing/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "You recall this pen contains a number of healing chemicals." + /obj/item/pen/reagent/pacifier icon_state = "pen_blue" colour = "blue" origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) reagents_to_add = list(/singleton/reagent/wulumunusha = 2, /singleton/reagent/pacifier = 15, /singleton/reagent/drugs/cryptobiolin = 10) +/obj/item/pen/reagent/pacifier/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "You recall this pen contains a mixture of chemicals to pacify its victim." + /obj/item/pen/reagent/hyperzine icon_state = "pen_yellow" colour = "yellow" origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) reagents_to_add = list(/singleton/reagent/hyperzine = 10) +/obj/item/pen/reagent/hyperzine/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "You recall this pen contains hyperzine." + /obj/item/pen/reagent/poison icon_state = "pen_red" colour = "red" origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) reagents_to_add = list(/singleton/reagent/toxin/cyanide = 1, /singleton/reagent/lexorin = 20) +/obj/item/pen/reagent/poison/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "You recall this pen contains deadly poison." + /* * Chameleon pen */ /obj/item/pen/chameleon var/signature = "" +/obj/item/pen/chameleon/antagonist_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use the Change Pen Colour verb to set the colour you want to use. Note that this pen can write in invisible (white) ink!" + . += "Use this on yourself to set the current signature you want to use. Perfect for forging names on otherwise foolproof signature fields." + /obj/item/pen/chameleon/attack_self(mob/user) signature = sanitize(input("Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) @@ -327,6 +375,10 @@ cursive = FALSE w_class = WEIGHT_CLASS_TINY +/obj/item/pen/augment/mechanics_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Use this on yourself to change the current pen color, or to toggle between normal and cursive script." + /obj/item/pen/augment/attack_self(mob/user) var/choice = input(user, "Would you like to change colour or writing style?", "Pen Selector") as null|anything in list("Colour", "Style") if(!choice) diff --git a/html/changelogs/Bat-VarietyPack.yml b/html/changelogs/Bat-VarietyPack.yml new file mode 100644 index 00000000000..1c0b87d416c --- /dev/null +++ b/html/changelogs/Bat-VarietyPack.yml @@ -0,0 +1,21 @@ +# Your name. +author: Batrachophrenoboocosmomachia + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +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." + - qol: "Washing machines can now be anchored/unanchored with a wrench." + - 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." + - bugfix: "Fixed Advanced light replacers not being retrievable from Engineering Carts."