mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Graffitis now take into account where on the tile you click (#8982)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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]."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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, "<span class='notice'>You feel much safer.</span>")
|
||||
|
||||
|
||||
@@ -126,7 +126,11 @@
|
||||
. += "<tr><td colspan = 4><hr></td></tr>"
|
||||
|
||||
for(var/thing in my_tracks)
|
||||
// CHOMPAdd
|
||||
var/data = GetAdminDataStringFor(thing, can_modify, user)
|
||||
if(!isnull(data))
|
||||
. += "<tr>[GetAdminDataStringFor(thing, can_modify, user)]</tr>"
|
||||
// CHOMPAdd End
|
||||
. += "<tr><td colspan = 4><hr></td></tr>"
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,17 @@
|
||||
name = "filth"
|
||||
entries_expire_at = 4 // 4 rounds, 24 hours.
|
||||
var/saves_dirt = TRUE //VOREStation edit
|
||||
has_admin_data = TRUE // CHOMPEdit
|
||||
|
||||
// CHOMPAdd
|
||||
/datum/persistent/filth/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user)
|
||||
if(istype(thing, /obj/effect/decal/cleanable/crayon))
|
||||
var/obj/effect/decal/cleanable/crayon/CRAY = thing
|
||||
if(can_modify)
|
||||
return "<td colspan = 3>[thing]</td><td>Loc:([CRAY.x],[CRAY.y],[CRAY.z]) P_X: [CRAY.pixel_x] P_Y: [CRAY.pixel_y] Color: [CRAY.art_color] Shading: [CRAY.art_shade] Type: [CRAY.art_type]</td><td><a href='byond://?src=\ref[src];caller=\ref[user];remove_entry=\ref[thing]'>Destroy</a></td>"
|
||||
return "<td colspan = 4>[thing]</td>"
|
||||
return null
|
||||
// CHOMPEnd
|
||||
|
||||
/datum/persistent/filth/IsValidEntry(var/atom/entry)
|
||||
. = ..() && entry.invisibility == 0
|
||||
@@ -9,15 +20,48 @@
|
||||
/datum/persistent/filth/CheckTokenSanity(var/list/token)
|
||||
// byond's json implementation is "questionable", and uses types as keys and values without quotes sometimes even though they aren't valid json
|
||||
token["path"] = istext(token["path"]) ? text2path(token["path"]) : token["path"]
|
||||
return ..() && ispath(token["path"])
|
||||
|
||||
// CHOMPAdd - Cooler graffiti
|
||||
token["pixel_x"] = istext(token["pixel_x"]) ? text2num(token["pixel_x"]) : token["pixel_x"]
|
||||
token["pixel_y"] = istext(token["pixel_y"]) ? text2num(token["pixel_y"]) : token["pixel_y"]
|
||||
return ..() && ispath(token["path"]) && isnum(token["pixel_x"]) && isnum(token["pixel_y"])
|
||||
// CHOMPAdd End
|
||||
/datum/persistent/filth/CheckTurfContents(var/turf/T, var/list/token)
|
||||
var/_path = token["path"]
|
||||
// CHOMPEdit Start - Cooler graffitis
|
||||
// return (locate(_path) in T) ? FALSE : TRUE
|
||||
if(!ispath(_path, /obj/effect/decal/cleanable/crayon))
|
||||
return (locate(_path) in T) ? FALSE : TRUE
|
||||
|
||||
// Crayon drawings aren't handled in graffiti, so we need to check if someone made "art" seperately from blood, dirt, etc.
|
||||
var/too_much_crayon = 0
|
||||
for(var/obj/effect/decal/cleanable/crayon/C in T)
|
||||
too_much_crayon++
|
||||
if(too_much_crayon >= 5)
|
||||
return FALSE
|
||||
return TRUE
|
||||
// CHOMPEdit End
|
||||
|
||||
/datum/persistent/filth/CreateEntryInstance(var/turf/creating, var/list/token)
|
||||
var/_path = token["path"]
|
||||
new _path(creating, token["age"]+1)
|
||||
// CHOMPEdit Start
|
||||
// new _path(creating, token["age"]+1)
|
||||
var/atom/inst = new _path(creating, token["age"]+1)
|
||||
if(token["pixel_x"])
|
||||
inst.pixel_x = token["pixel_x"]
|
||||
if(token["pixel_y"])
|
||||
inst.pixel_y = token["pixel_y"]
|
||||
|
||||
if(istype(inst, /obj/effect/decal/cleanable/crayon))
|
||||
var/obj/effect/decal/cleanable/crayon/Crayart = inst
|
||||
if(token["art_type"])
|
||||
Crayart.art_type = token["art_type"]
|
||||
if(token["art_color"])
|
||||
Crayart.art_color = token["art_color"]
|
||||
if(token["art_shade"])
|
||||
Crayart.art_shade = token["art_shade"]
|
||||
|
||||
Crayart.update_icon()
|
||||
// CHOMPEdit End
|
||||
|
||||
/datum/persistent/filth/GetEntryAge(var/atom/entry)
|
||||
var/obj/effect/decal/cleanable/filth = entry
|
||||
@@ -30,3 +74,19 @@
|
||||
/datum/persistent/filth/CompileEntry(var/atom/entry)
|
||||
. = ..()
|
||||
LAZYADDASSOC(., "path", "[GetEntryPath(entry)]")
|
||||
// CHOMPAdd Start - Cooler graffiti
|
||||
to_world("path is [GetEntryPath(entry)]")
|
||||
LAZYADDASSOC(., "pixel_x", "[entry.pixel_x]")
|
||||
to_world("pixel_x is [entry.pixel_x]")
|
||||
LAZYADDASSOC(., "pixel_y", "[entry.pixel_y]")
|
||||
to_world("pixel_y is [entry.pixel_y]")
|
||||
|
||||
if(istype(entry, /obj/effect/decal/cleanable/crayon))
|
||||
var/obj/effect/decal/cleanable/crayon/Inst = entry
|
||||
LAZYADDASSOC(., "art_type", "[Inst.art_type]")
|
||||
to_world("art type is [Inst.art_type]")
|
||||
LAZYADDASSOC(., "art_color", "[Inst.art_color]")
|
||||
to_world("art color is [Inst.art_color]")
|
||||
LAZYADDASSOC(., "art_shade", "[Inst.art_shade]")
|
||||
to_world("art shade is [Inst.art_shade]")
|
||||
// CHOMPAdd End
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
entries_expire_at = 4 // This previously was at 50 rounds??? Over 10 days.
|
||||
has_admin_data = TRUE
|
||||
|
||||
// CHOMPAdd Start
|
||||
/datum/persistent/graffiti/CheckTokenSanity(var/list/token)
|
||||
token["pixel_x"] = istext(token["pixel_x"]) ? text2num(token["pixel_x"]) : token["pixel_x"]
|
||||
token["pixel_y"] = istext(token["pixel_y"]) ? text2num(token["pixel_y"]) : token["pixel_y"]
|
||||
return ..() && isnum(token["pixel_x"]) && isnum(token["pixel_y"])
|
||||
// CHOMPAdd End
|
||||
|
||||
/datum/persistent/graffiti/GetValidTurf(var/turf/T, var/list/token)
|
||||
var/turf/checking_turf = ..()
|
||||
if(istype(checking_turf) && checking_turf.can_engrave())
|
||||
@@ -20,6 +27,12 @@
|
||||
var/obj/effect/decal/writing/inst = new /obj/effect/decal/writing(creating, token["age"]+1, token["message"], token["author"])
|
||||
if(token["icon_state"])
|
||||
inst.icon_state = token["icon_state"]
|
||||
// CHOMPAdd Start
|
||||
if(token["pixel_x"])
|
||||
inst.pixel_x = token["pixel_x"]
|
||||
if(token["pixel_y"])
|
||||
inst.pixel_y = token["pixel_y"]
|
||||
// CHOMPAdd End
|
||||
|
||||
/datum/persistent/graffiti/IsValidEntry(var/atom/entry)
|
||||
. = ..()
|
||||
@@ -37,6 +50,8 @@
|
||||
LAZYADDASSOC(., "author", "[save_graffiti.author ? save_graffiti.author : "unknown"]")
|
||||
LAZYADDASSOC(., "message", "[save_graffiti.message]")
|
||||
LAZYADDASSOC(., "icon_state", "[save_graffiti.icon_state]")
|
||||
LAZYADDASSOC(., "pixel_x", "[save_graffiti.pixel_x]") // CHOMPAdd
|
||||
LAZYADDASSOC(., "pixel_y", "[save_graffiti.pixel_y]") // CHOMPAdd
|
||||
|
||||
/datum/persistent/graffiti/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user)
|
||||
var/obj/effect/decal/writing/save_graffiti = thing
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/persistent/filth/trash
|
||||
name = "trash"
|
||||
saves_dirt = FALSE //VOREStation edit
|
||||
has_admin_data = FALSE // CHOMPEdit
|
||||
|
||||
/datum/persistent/filth/trash/CheckTurfContents(var/turf/T, var/list/tokens)
|
||||
var/too_much_trash = 0
|
||||
|
||||
Reference in New Issue
Block a user