Stickynotes bugfix (#21887)

A handful of bugfixes covering stuff I missed in the original
stickynotes PR.
- Stickynotes can now interact with machinery, such as disposals or the
papershredder.
- - Turns out that after attack still has priority over interacting with
machines. You learn something every PR.
- Crumpled stickynotes can no longer be attached like a normal
stickynote. They can also no longer be written on.
- - As part of this, paper now uses a variable to track if it's
crumpled. Before, it would just check the icon_state.
- Crumpled stickynotes now use the crumpled sprite when being shredded.
Before it was just a normal paper sprite.
This commit is contained in:
CatsinHD
2026-02-19 03:37:04 +00:00
committed by GitHub
parent 09955a8c5e
commit 9be4bde7db
4 changed files with 100 additions and 11 deletions
+37 -10
View File
@@ -51,6 +51,8 @@
var/can_fold = TRUE
/// Is it made of paper and/or burnable material?
var/paper_like = TRUE
// Is the paper crumpled up?
var/crumpled = FALSE
var/const/deffont = "Verdana"
var/const/signfont = "Times New Roman"
@@ -119,7 +121,10 @@
/obj/item/paper/update_icon()
if(!can_change_icon_state)
return
else if (info && length(trim(info)))
if (crumpled)
icon_state = "scrap"
return
if (info && length(trim(info)))
icon_state = "[base_state]_words"
else
icon_state = "[base_state]"
@@ -179,7 +184,7 @@
/obj/item/paper/attack_self(mob/living/user as mob)
if(user.a_intent == I_HURT && paper_like)
if(icon_state == "scrap")
if(crumpled)
user.show_message(SPAN_WARNING("\The [src] is already crumpled."))
return
//crumple dat paper
@@ -191,9 +196,10 @@
else
icon_state = "scrap"
throw_range = 4 //you can now make epic paper ball hoops into the disposals (kinda dumb that you could only throw crumpled paper 1 tile) -wezzy
crumpled = TRUE
return
if (user.a_intent == I_GRAB && icon_state != "scrap" && can_fold)
if (user.a_intent == I_GRAB && !crumpled && can_fold)
if (icon_state == "paper_plane")
user.show_message(SPAN_ALERT("The paper is already folded into a plane."))
return
@@ -207,7 +213,7 @@
ClearOverlays() //Removes stamp icons
return
if (user.a_intent == I_DISARM && icon_state != "scrap" && can_fold)
if (user.a_intent == I_DISARM && !crumpled && can_fold)
if (icon_state == "paper_swan")
user.show_message(SPAN_ALERT("The paper is already folded into a swan."))
return
@@ -674,7 +680,7 @@
B.update_icon()
else if(attacking_item.tool_behaviour == TOOL_PEN)
if(icon_state == "scrap")
if(crumpled)
to_chat(user, SPAN_WARNING("The [src] is too crumpled to write on."))
return
@@ -738,6 +744,7 @@
/obj/item/paper/crumpled
name = "paper scrap"
icon_state = "scrap"
crumpled = TRUE
/obj/item/paper/crumpled/update_icon()
return
@@ -843,10 +850,14 @@
color = COLOR_PALE_YELLOW
free_space = MAX_MESSAGE_LEN //Smaller piece of paper means less space to write.
slot_flags = 0
item_flags = ITEM_FLAG_NO_BLUDGEON
/obj/item/paper/stickynotes/update_icon()
if(icon_state == "stickynote_scrap")
return
if(crumpled)
icon_state = "stickynote_scrap"
return
icon_state = info ? "stickynote_words" : "stickynote"
@@ -872,19 +883,35 @@
..()
/obj/item/paper/stickynotes/afterattack(var/A, mob/user, var/prox, var/params)
if(!in_range(user, A) || istype(A, /obj/machinery/door) || istype(A, /obj/item/paper))
if(!in_range(user, A) || istype(A, /obj/machinery) || istype(A, /obj/item/paper) || crumpled)
return
var/turf/target_turf = get_turf(A)
var/turf/source_turf = get_turf(user)
var/dir_offset = 0
if(target_turf != source_turf)
dir_offset = get_dir(source_turf, target_turf)
if(!params || !prox)
return
SSpersistence.register_track(src, ckey(user.key))
user.drop_from_inventory(src,target_turf)
var/list/mouse_control = mouse_safe_xy(params)
pixel_x = mouse_control["icon-x"] - 16
pixel_y = mouse_control["icon-y"] - 16
user.drop_from_inventory(src,source_turf)
if(params) //Parallels taped paper placement method, and avoids seeing stickynotes through walls
var/list/mouse_control = mouse_safe_xy(params)
if(mouse_control["icon-x"])
pixel_x = mouse_control["icon-x"] - 16
if(dir_offset & EAST)
pixel_x += 32
else if(dir_offset & WEST)
pixel_x -= 32
if(mouse_control["icon-y"])
pixel_y = mouse_control["icon-y"] - 16
if(dir_offset & NORTH)
pixel_y += 32
else if(dir_offset & SOUTH)
pixel_y -= 32
/obj/item/paper/stickynotes/pad
name = "sticky note pad"
+2
View File
@@ -36,6 +36,8 @@
/obj/item/paper_bundle/attackby(obj/item/attacking_item, mob/user)
..()
if (istype(attacking_item, /obj/item/paper/stickynotes/pad))
return
if (istype(attacking_item, /obj/item/paper/carbon))
var/obj/item/paper/carbon/C = attacking_item
+1 -1
View File
@@ -45,7 +45,7 @@
return
if (paper_result > 0)
paperamount += paper_result
if(attacking_item.icon_state == "scrap")
if(astype(attacking_item, /obj/item/paper)?.crumpled)
flick("papershredder_s_on", src)
else if(attacking_item.icon_state == "paper_words")
flick("papershredder_w_on", src)
@@ -0,0 +1,60 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################
# Your name.
author: CatsinHD
# 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:
- bugfix: "Stickynotes can now interact with machinery normally, such as disposals."
- bugfix: "Crumpled stickynotes can no longer be written on or attached to a surface."
- bugfix: "Paper shredders now show the correct(ish) sprite when shredding a crumbled stickynote."