From 7b41a505f7f9cc68936b4c719c5e330cd6c94e1c Mon Sep 17 00:00:00 2001 From: Guti <32563288+TheCaramelion@users.noreply.github.com> Date: Mon, 23 Sep 2024 18:15:04 +0200 Subject: [PATCH] Graffitis now take into account where on the tile you click (#8982) --- code/game/objects/effects/decals/crayon.dm | 33 ++++++--- code/game/objects/items/crayons.dm | 16 ++++- code/game/turfs/simulated/floor_attackby.dm | 4 +- code/game/turfs/simulated/wall_attacks.dm | 6 +- code/game/turfs/turf.dm | 16 ++++- .../persistence/datum/persistence_datum.dm | 12 ++-- code/modules/persistence/effects/filth.dm | 70 +++++++++++++++++-- code/modules/persistence/effects/graffiti.dm | 15 ++++ code/modules/persistence/effects/trash.dm | 3 +- 9 files changed, 146 insertions(+), 29 deletions(-) diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 493529cede..a05d2aa572 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -5,27 +5,40 @@ plane = DIRTY_PLANE layer = DIRTY_LAYER anchored = TRUE +// CHOMPEdit Start - Pretty much all of this file changed + var/art_type + var/art_color + var/art_shade -/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune") - ..() - loc = location - +/obj/effect/decal/cleanable/crayon/Initialize(var/ml, main = "#FFFFFF",shade = "#000000",var/type = "rune") + . = ..(ml, 0) // mapload, age name = type desc = "A [type] drawn in crayon." + // Persistence vars. + art_type = type + art_color = main + art_shade = shade + switch(type) if("rune") type = "rune[rand(1,6)]" if("graffiti") type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa") - var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1) - var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1) + update_icon() - mainOverlay.Blend(main,ICON_ADD) - shadeOverlay.Blend(shade,ICON_ADD) + add_hiddenprint(usr) + +/obj/effect/decal/cleanable/crayon/update_icon() + cut_overlays() + var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]",2.1) + var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]s",2.1) + + mainOverlay.Blend(art_color,ICON_ADD) + shadeOverlay.Blend(art_shade,ICON_ADD) add_overlay(mainOverlay) add_overlay(shadeOverlay) - - add_hiddenprint(usr) + return +// CHOMPEdit End diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 9f0ed10b0c..5ee740bb77 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -65,7 +65,7 @@ shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color return -/obj/item/weapon/pen/crayon/afterattack(atom/target, mob/user as mob, proximity) +/obj/item/weapon/pen/crayon/afterattack(atom/target, mob/user as mob, proximity, click_parameters) // CHOMPEdit - Click parameters if(!proximity) return if(istype(target,/turf/simulated/floor)) var/drawtype = tgui_input_list(user, "Choose what you'd like to draw.", "Crayon scribbles", list("graffiti","rune","letter","arrow")) @@ -95,7 +95,19 @@ return to_chat(user, "You start drawing an arrow on the [target.name].") if(instant || do_after(user, 50)) - new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) + // CHOMPEdit Start - Better graffiti + //new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) + var/list/mouse_control = params2list(click_parameters) + var/p_x = 0 + var/p_y = 0 + if(mouse_control["icon-x"]) + p_x = text2num(mouse_control["icon-x"]) - 16 + if(mouse_control["icon-y"]) + p_y = text2num(mouse_control["icon-y"]) - 16 + var/atom/new_graffiti = new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) + new_graffiti.pixel_x = p_x + new_graffiti.pixel_y = p_y + // CHOMPEdit End to_chat(user, "You finish drawing.") var/msg = "[user.client.key] ([user]) has drawn [drawtype] (with [src]) at [target.x],[target.y],[target.z]." diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 919ffa7ede..1b9143808f 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -1,4 +1,4 @@ -/turf/simulated/floor/attackby(var/obj/item/C, var/mob/user) +/turf/simulated/floor/attackby(var/obj/item/C, var/mob/user, attack_modifier, click_parameters) // CHOMPAdd - Attack_modifier, click_parameters if(!C || !user) return 0 @@ -7,7 +7,7 @@ var/mob/living/L = user if(L.a_intent != I_HELP) if(L.a_intent == I_GRAB) - try_graffiti(L, C) // back by unpopular demand + try_graffiti(L, C, click_parameters) // back by unpopular demand - CHOMPEdit Add - Click parameters return attack_tile(C, L) // Be on help intent if you want to decon something. return //CHOMPEDIT END diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 3118aa5e03..9c62ce573b 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -127,14 +127,14 @@ return success_smash(user) return fail_smash(user) -/turf/simulated/wall/attackby(var/obj/item/weapon/W, var/mob/user) +/turf/simulated/wall/attackby(var/obj/item/weapon/W, var/mob/user, attack_modifier, click_parameters) // CHOMPEdit - attack_modifier, click_parameters user.setClickCooldown(user.get_attack_speed(W)) /* //As with the floors, only this time it works AND tries pushing the wall after it's done. if(!construction_stage && user.a_intent == I_HELP) - if(try_graffiti(user,W)) + if(try_graffiti(user,W, click_parameters)) // CHOMPEdit - Commented, but- Still. Just in case. return */ @@ -411,5 +411,3 @@ else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers)) return attack_hand(user) - - diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e059b2c599..63b8ad2831 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -328,7 +328,7 @@ /turf/proc/can_engrave() return FALSE -/turf/proc/try_graffiti(var/mob/vandal, var/obj/item/tool) +/turf/proc/try_graffiti(var/mob/vandal, var/obj/item/tool, click_parameters) // CHOMPEdt - click_parameters if(!tool || !tool.sharp || !can_engrave()) //CHOMP Edit return FALSE @@ -361,6 +361,20 @@ graffiti.message = message graffiti.author = vandal.ckey + // CHOMPAdd - Cooler graffitis + if(click_parameters) + var/list/mouse_control = params2list(click_parameters) + var/p_x = 0 + var/p_y = 0 + if(mouse_control["icon-x"]) + p_x = text2num(mouse_control["icon-x"]) - 16 + if(mouse_control["icon-y"]) + p_y = text2num(mouse_control["icon-y"]) - 16 + + graffiti.pixel_x = p_x + graffiti.pixel_y = p_y + // CHOMPAdd End + if(lowertext(message) == "elbereth") to_chat(vandal, "You feel much safer.") diff --git a/code/modules/persistence/datum/persistence_datum.dm b/code/modules/persistence/datum/persistence_datum.dm index fb1cb166b9..818363b967 100644 --- a/code/modules/persistence/datum/persistence_datum.dm +++ b/code/modules/persistence/datum/persistence_datum.dm @@ -104,7 +104,7 @@ /datum/persistent/proc/Shutdown() if(fexists(filename)) fdel(filename) - + var/list/to_store = list() for(var/thing in SSpersistence.tracking_values[type]) if(!IsValidEntry(thing)) @@ -121,12 +121,16 @@ var/list/my_tracks = SSpersistence.tracking_values[type] if(!my_tracks?.len) return - + . = list("