From 03f129fa6efe70d33a0cbfd738a3d7ea96374a0a Mon Sep 17 00:00:00 2001
From: JTGSZ <46565256+JTGSZ@users.noreply.github.com>
Date: Sun, 19 May 2019 07:29:09 -0400
Subject: [PATCH] More changes
---
code/game/objects/items/crayons.dm | 137 ++++++++--
.../code/game/gamemodes/gangs/dominator.dm | 16 +-
.../code/game/gamemodes/gangs/gang_crayon.dm | 236 ------------------
.../code/game/gamemodes/gangs/gang_datums.dm | 8 +-
.../code/game/gamemodes/gangs/gang_items.dm | 2 +-
tgstation.dme | 1 -
6 files changed, 131 insertions(+), 269 deletions(-)
delete mode 100644 modular_citadel/code/game/gamemodes/gangs/gang_crayon.dm
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 26f8a73cb3..b76a9b9c98 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -68,6 +68,8 @@
var/pre_noise = FALSE
var/post_noise = FALSE
+ var/datum/team/gang/gang //For marking territory, spraycans are gang-locked to their initial gang due to colors
+
/obj/item/toy/crayon/suicide_act(mob/user)
user.visible_message("[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!")
@@ -288,7 +290,8 @@
else if(drawing in numerals)
temp = "number"
-
+ temp = gang_check(user,target)
+ if(!temp) return // gang check
var/graf_rot
if(drawing in oriented)
switch(user.dir)
@@ -310,7 +313,7 @@
clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
if(!instant)
- to_chat(user, "You start drawing a [temp] on the [target.name]...")
+ to_chat(user, "You start drawing a [temp] on the [target.name]...")
if(pre_noise)
audible_message("You hear spraying.")
@@ -322,6 +325,7 @@
if(paint_mode == PAINT_LARGE_HORIZONTAL)
wait_time *= 3
+ if(gang) takes_time = TRUE // gang tagging takes time.
if(takes_time)
if(!do_after(user, 50, target = target))
return
@@ -332,26 +336,29 @@
var/list/turf/affected_turfs = list()
- if(actually_paints)
- switch(paint_mode)
- if(PAINT_NORMAL)
- var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot)
- C.add_hiddenprint(user)
- C.pixel_x = clickx
- C.pixel_y = clicky
- affected_turfs += target
- if(PAINT_LARGE_HORIZONTAL)
- var/turf/left = locate(target.x-1,target.y,target.z)
- var/turf/right = locate(target.x+1,target.y,target.z)
- if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
- var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
+ if(!gang) //drawing is done in gang_final() if it's a gang type
+ if(actually_paints)
+ switch(paint_mode)
+ if(PAINT_NORMAL)
+ var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot)
C.add_hiddenprint(user)
- affected_turfs += left
- affected_turfs += right
+ C.pixel_x = clickx
+ C.pixel_y = clicky
affected_turfs += target
- else
- to_chat(user, "There isn't enough space to paint!")
- return
+ if(PAINT_LARGE_HORIZONTAL)
+ var/turf/left = locate(target.x-1,target.y,target.z)
+ var/turf/right = locate(target.x+1,target.y,target.z)
+ if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
+ var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
+ C.add_hiddenprint(user)
+ affected_turfs += left
+ affected_turfs += right
+ affected_turfs += target
+ else
+ to_chat(user, "There isn't enough space to paint!")
+ return
+ else // gangstuff
+ if(gang_final(user, target, affected_turfs)) return // gangstuff
if(!instant)
to_chat(user, "You finish drawing \the [temp].")
@@ -373,6 +380,77 @@
reagents.trans_to(t, ., volume_multiplier)
check_empty(user)
+
+//////////////Gang mode stuff/////////////////
+/obj/item/toy/crayon/proc/gang_check(mob/user, atom/target) // hooked into afterattack
+ var/gang_mode = FALSE
+ if(gang && user.mind)
+ var/datum/antagonist/gang/G = user.mind.has_antag_datum(/datum/antagonist/gang)
+ if(G.gang != gang)
+ to_chat(user, "This spraycan's color isn't your gang's one! You cannot use it.")
+ return FALSE
+ gang_mode = TRUE
+ instant = FALSE
+ . = "graffiti"
+ // discontinue if the area isn't valid for tagging because gang "honour"
+ if(gang_mode && (!can_claim_for_gang(user, target)))
+ return FALSE
+
+/obj/item/toy/crayon/proc/gang_final(mob/user, atom/target, list/affected_turfs) // hooked into afterattack
+ // Double check it wasn't tagged in the meanwhile
+ if(!can_claim_for_gang(user, target))
+ return TRUE
+ tag_for_gang(user, target)
+ affected_turfs += target
+
+/obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target)
+ // Check area validity.
+ // Reject space, player-created areas, and non-station z-levels.
+ var/area/A = get_area(target)
+ if(!A || (!is_station_level(A.z)) || !A.valid_territory)
+ to_chat(user, "[A] is unsuitable for tagging.")
+ return FALSE
+
+ var/spraying_over = FALSE
+ for(var/G in target)
+ var/obj/effect/decal/cleanable/crayon/gang/gangtag = G
+ if(istype(gangtag))
+ var/datum/antagonist/gang/GA = user.mind.has_antag_datum(/datum/antagonist/gang)
+ if(gangtag.gang != GA.gang)
+ spraying_over = TRUE
+ break
+
+ for(var/obj/machinery/power/apc in target)
+ to_chat(user, "You can't tag an APC.")
+ return FALSE
+
+ var/occupying_gang = territory_claimed(A, user)
+ if(occupying_gang && !spraying_over)
+ to_chat(user, "[A] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!")
+ return FALSE
+
+ // If you pass the gauntlet of checks, you're good to proceed
+ return TRUE
+
+/obj/item/toy/crayon/proc/territory_claimed(area/territory, mob/user)
+ for(var/datum/team/gang/G in GLOB.gangs)
+ if(territory.type in (G.territories|G.new_territories))
+ . = G.name
+ break
+
+/obj/item/toy/crayon/proc/tag_for_gang(mob/user, atom/target)
+ //Delete any old markings on this tile, including other gang tags
+ for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
+ qdel(old_marking)
+
+ var/datum/antagonist/gang/G = user.mind.has_antag_datum(/datum/antagonist/gang)
+ var/area/territory = get_area(target)
+
+ new /obj/effect/decal/cleanable/crayon/gang(target,G.gang,"graffiti",0,user)
+ to_chat(user, "You tagged [territory] for your gang!")
+////////////Gang end////////////////////
+
+
/obj/item/toy/crayon/attack(mob/M, mob/user)
if(edible && (M == user))
to_chat(user, "You take a bite of the [src.name]. Delicious!")
@@ -703,6 +781,25 @@
post_noise = FALSE
reagent_contents = list("nothing" = 1, "mutetoxin" = 1)
+/obj/item/toy/crayon/spraycan/gang
+ charges = 20
+ gang = TRUE
+
+ pre_noise = FALSE
+ post_noise = TRUE
+
+/obj/item/toy/crayon/spraycan/gang/Initialize(loc, datum/team/gang/G)
+ ..()
+ if(G)
+ gang = G
+ paint_color = G.color
+ update_icon()
+
+/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
+ . = ..()
+ if(user.mind && user.mind.has_antag_datum(/datum/antagonist/gang) || isobserver(user))
+ to_chat(user, "This spraycan has been specially modified for tagging territory.")
+
#undef RANDOM_GRAFFITI
#undef RANDOM_LETTER
#undef RANDOM_NUMBER
diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator.dm b/modular_citadel/code/game/gamemodes/gangs/dominator.dm
index 418c26ab3c..0d89c78010 100644
--- a/modular_citadel/code/game/gamemodes/gangs/dominator.dm
+++ b/modular_citadel/code/game/gamemodes/gangs/dominator.dm
@@ -1,5 +1,6 @@
#define DOM_BLOCKED_SPAM_CAP 6
-#define DOM_REQUIRED_TURFS 30
+//32 instead of 40 for safety reasons. How many turfs aren't walls around dominator for it to work
+#define DOM_REQUIRED_TURFS 32
#define DOM_HULK_HITS_REQUIRED 10
/obj/machinery/dominator
@@ -22,7 +23,7 @@
/obj/machinery/dominator/Initialize()
. = ..()
- set_light(2)
+ set_light(l_range = 2, l_power = 0.75)
GLOB.poi_list |= src
spark_system = new
spark_system.set_up(5, TRUE, src)
@@ -86,10 +87,10 @@
if(time_remaining > 0)
if(excessive_walls_check())
gang.domination_time += 20
- playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
if(spam_prevention < DOM_BLOCKED_SPAM_CAP)
spam_prevention++
else
+ playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) // Play sound buzz-two.ogg, not before cause its annoying.
gang.message_gangtools("Warning: There are too many walls around your gang's dominator, its signal is being blocked!")
say("Error: Takeover signal is currently blocked! There are too many walls within 3 standard units of this device.")
spam_prevention = 0
@@ -190,7 +191,8 @@
countdown.start()
countdown.color = gang.color
- set_light(3)
+ set_light(l_range = 3, l_power = 0.9)
+ light_color = gang.color
START_PROCESSING(SSmachines, src)
gang.message_gangtools("Hostile takeover in progress: Estimated [time] minutes until victory.[gang.dom_attempts ? "" : " This is your final attempt."]")
@@ -200,15 +202,15 @@
vagos.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1)
/obj/machinery/dominator/proc/excessive_walls_check() // why the fuck was this even a global proc...
- var/open = FALSE
+ var/open = 0
for(var/turf/T in view(3, src))
- if(!isclosedturf(T))
+ if(!iswallturf(T)) //Check for /closed/wall, isclosedturf() moves it back to just checking for /closed/ which makes it very finicky.
open++
+ //to_chat(world, "THE DOMINATOR SEES [open] OPEN TURFS") uncomment to see what this shitty fucking wallcheck sees
if(open < DOM_REQUIRED_TURFS)
return TRUE
else
return FALSE
-
/obj/machinery/dominator/proc/set_broken()
if(gang)
gang.domination_time = NOT_DOMINATING
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_crayon.dm b/modular_citadel/code/game/gamemodes/gangs/gang_crayon.dm
deleted file mode 100644
index 2edc2ba945..0000000000
--- a/modular_citadel/code/game/gamemodes/gangs/gang_crayon.dm
+++ /dev/null
@@ -1,236 +0,0 @@
-#define RANDOM_GRAFFITI "Random Graffiti"
-#define RANDOM_LETTER "Random Letter"
-#define RANDOM_NUMBER "Random Number"
-#define RANDOM_ORIENTED "Random Oriented"
-#define RANDOM_RUNE "Random Rune"
-#define RANDOM_ANY "Random Anything"
-
-/obj/item/toy/crayon
- var/datum/team/gang/gang //For marking territory, spraycans are gang-locked to their initial gang due to colors
-
-/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params)
- if(!proximity || !check_allowed_items(target))
- return
-
- var/cost = 1
- if(paint_mode == PAINT_LARGE_HORIZONTAL)
- cost = 5
- if(istype(target, /obj/item/canvas))
- cost = 0
-
- if(istype(target, /obj/effect/decal/cleanable))
- target = target.loc
-
- if(!is_type_in_list(target,validSurfaces))
- return
-
- var/drawing = drawtype
- switch(drawtype)
- if(RANDOM_LETTER)
- drawing = pick(letters)
- if(RANDOM_GRAFFITI)
- drawing = pick(graffiti)
- if(RANDOM_RUNE)
- drawing = pick(runes)
- if(RANDOM_ORIENTED)
- drawing = pick(oriented)
- if(RANDOM_NUMBER)
- drawing = pick(numerals)
- if(RANDOM_ANY)
- drawing = pick(all_drawables)
-
- var/temp = "rune"
- if(drawing in letters)
- temp = "letter"
- else if(drawing in graffiti)
- temp = "graffiti"
- else if(drawing in numerals)
- temp = "number"
-
- temp = gang_check(user,target)
- if(!temp) return // hippie
- var/graf_rot
- if(drawing in oriented)
- switch(user.dir)
- if(EAST)
- graf_rot = 90
- if(SOUTH)
- graf_rot = 180
- if(WEST)
- graf_rot = 270
- else
- graf_rot = 0
-
- var/list/click_params = params2list(params)
- var/clickx
- var/clicky
-
- if(click_params && click_params["icon-x"] && click_params["icon-y"])
- clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
- clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
-
- if(!instant)
- to_chat(user, "You start drawing a [temp] on the [target.name]...")
-
- if(pre_noise)
- audible_message("You hear spraying.")
- playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
-
- var/takes_time = !instant
-
- var/wait_time = 50
- if(paint_mode == PAINT_LARGE_HORIZONTAL)
- wait_time *= 3
- if(gang) takes_time = TRUE // hippie
- if(takes_time)
- if(!do_after(user, 50, target = target))
- return
-
- if(length(text_buffer))
- drawing = copytext(text_buffer,1,2)
-
-
- var/list/turf/affected_turfs = list()
-
- if(!gang) // hippie - drawing is done in gang_final() if it's a gang type
- if(actually_paints)
- switch(paint_mode)
- if(PAINT_NORMAL)
- var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot)
- C.add_hiddenprint(user)
- C.pixel_x = clickx
- C.pixel_y = clicky
- affected_turfs += target
- if(PAINT_LARGE_HORIZONTAL)
- var/turf/left = locate(target.x-1,target.y,target.z)
- var/turf/right = locate(target.x+1,target.y,target.z)
- if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
- var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
- C.add_hiddenprint(user)
- affected_turfs += left
- affected_turfs += right
- affected_turfs += target
- else
- to_chat(user, "There isn't enough space to paint!")
- return
- else // hippie
- if(gang_final(user, target, affected_turfs)) return // hippie
-
- if(!instant)
- to_chat(user, "You finish drawing \the [temp].")
- else
- to_chat(user, "You spray a [temp] on \the [target.name]")
-
- var/charges_used = use_charges(user, cost)
- if(!charges_used)
- return
- . = charges_used
-
- if(length(text_buffer))
- text_buffer = copytext(text_buffer,2)
-
- if(post_noise)
- audible_message("You hear spraying.")
- playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
-
- var/fraction = min(1, . / reagents.maximum_volume)
- if(affected_turfs.len)
- fraction /= affected_turfs.len
- for(var/t in affected_turfs)
- reagents.reaction(t, TOUCH, fraction * volume_multiplier)
- reagents.trans_to(t, ., volume_multiplier)
- check_empty(user)
-
-/obj/item/toy/crayon/proc/gang_check(mob/user, atom/target) // hooked into afterattack
- var/gang_mode = FALSE
- if(gang && user.mind)
- var/datum/antagonist/gang/G = user.mind.has_antag_datum(/datum/antagonist/gang)
- if(G.gang != gang)
- to_chat(user, "This spraycan's color isn't your gang's one! You cannot use it.")
- return FALSE
- gang_mode = TRUE
- instant = FALSE
- . = "graffiti"
- // discontinue if the area isn't valid for tagging because gang "honour"
- if(gang_mode && (!can_claim_for_gang(user, target)))
- return FALSE
-
-/obj/item/toy/crayon/proc/gang_final(mob/user, atom/target, list/affected_turfs) // hooked into afterattack
- // Double check it wasn't tagged in the meanwhile
- if(!can_claim_for_gang(user, target))
- return TRUE
- tag_for_gang(user, target)
- affected_turfs += target
-
-/obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target)
- // Check area validity.
- // Reject space, player-created areas, and non-station z-levels.
- var/area/A = get_area(target)
- if(!A || (!is_station_level(A.z)) || !A.valid_territory)
- to_chat(user, "[A] is unsuitable for tagging.")
- return FALSE
-
- var/spraying_over = FALSE
- for(var/G in target)
- var/obj/effect/decal/cleanable/crayon/gang/gangtag = G
- if(istype(gangtag))
- var/datum/antagonist/gang/GA = user.mind.has_antag_datum(/datum/antagonist/gang)
- if(gangtag.gang != GA.gang)
- spraying_over = TRUE
- break
-
- for(var/obj/machinery/power/apc in target)
- to_chat(user, "You can't tag an APC.")
- return FALSE
-
- var/occupying_gang = territory_claimed(A, user)
- if(occupying_gang && !spraying_over)
- to_chat(user, "[A] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!")
- return FALSE
-
- // If you pass the gaunlet of checks, you're good to proceed
- return TRUE
-
-/obj/item/toy/crayon/proc/territory_claimed(area/territory, mob/user)
- for(var/datum/team/gang/G in GLOB.gangs)
- if(territory.type in (G.territories|G.new_territories))
- . = G.name
- break
-
-/obj/item/toy/crayon/proc/tag_for_gang(mob/user, atom/target)
- //Delete any old markings on this tile, including other gang tags
- for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
- qdel(old_marking)
-
- var/datum/antagonist/gang/G = user.mind.has_antag_datum(/datum/antagonist/gang)
- var/area/territory = get_area(target)
-
- new /obj/effect/decal/cleanable/crayon/gang(target,G.gang,"graffiti",0,user)
- to_chat(user, "You tagged [territory] for your gang!")
-
-/obj/item/toy/crayon/spraycan/gang
- //desc = "A modified container containing suspicious paint."
- charges = 20
- gang = TRUE
-
- pre_noise = FALSE
- post_noise = TRUE
-
-/obj/item/toy/crayon/spraycan/gang/Initialize(loc, datum/team/gang/G)
- ..()
- if(G)
- gang = G
- paint_color = G.color
- update_icon()
-
-/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
- . = ..()
- if(user.mind && user.mind.has_antag_datum(/datum/antagonist/gang) || isobserver(user))
- to_chat(user, "This spraycan has been specially modified for tagging territory.")
-
-#undef RANDOM_GRAFFITI
-#undef RANDOM_LETTER
-#undef RANDOM_NUMBER
-#undef RANDOM_ORIENTED
-#undef RANDOM_RUNE
-#undef RANDOM_ANY
\ No newline at end of file
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm b/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
index 66dfdd0ca3..c2a31abe17 100644
--- a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
+++ b/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
@@ -38,7 +38,7 @@
/datum/team/gang/waffle
name = "Waffle"
- color = "#808000"
+ color = "#808000" //shared color with cyber, but they can keep brown cause waffles.
inner_outfits = list(/obj/item/clothing/under/suit_jacket/green)
outer_outfits = list(/obj/item/clothing/suit/poncho)
@@ -62,7 +62,7 @@
/datum/team/gang/cyber
name = "Cyber"
- color = "#808000"
+ color = "#00f904" //Cyber and waffle shared colors, I made these guys green and made weed darker green.
inner_outfits = list(/obj/item/clothing/under/color/lightbrown)
outer_outfits = list(/obj/item/clothing/suit/nemes)
@@ -80,7 +80,7 @@
/datum/team/gang/gib
name = "Gib"
- color = "#636060" //Applying black to grayscale... Zero-G is already grey too.
+ color = "#636060" //Applying black to grayscale... Zero-G is already grey too. oh well.
inner_outfits = list(/obj/item/clothing/under/color/black)
outer_outfits = list(/obj/item/clothing/suit/jacket/leather/overcoat)
@@ -134,6 +134,6 @@
/datum/team/gang/weed
name = "Weed"
- color = "#66ff33"
+ color = "#6cd648"
inner_outfits = list(/obj/item/clothing/under/color/darkgreen)
outer_outfits = list(/obj/item/clothing/suit/vapeshirt)
\ No newline at end of file
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_items.dm b/modular_citadel/code/game/gamemodes/gangs/gang_items.dm
index ceb08b3da3..f808229661 100644
--- a/modular_citadel/code/game/gamemodes/gangs/gang_items.dm
+++ b/modular_citadel/code/game/gamemodes/gangs/gang_items.dm
@@ -385,7 +385,7 @@
/datum/gang_item/equipment/dominator/get_extra_info(mob/living/carbon/user, datum/team/gang/gang, obj/item/device/gangtool/gangtool)
if(gang)
- return "This device requires a 5x5 area clear of walls to work. (Estimated Takeover Time: [round(gang.determine_domination_time()/60,0.1)] minutes)"
+ return "This device requires a 5x5 area clear of walls to work best. (Estimated Takeover Time: [round(gang.determine_domination_time()/60,0.1)] minutes)"
/datum/gang_item/equipment/dominator/purchase(mob/living/carbon/user, datum/team/gang/gang, obj/item/device/gangtool/gangtool)
var/area/userarea = get_area(user)
diff --git a/tgstation.dme b/tgstation.dme
index 7c9185699a..7f6d07438c 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2813,7 +2813,6 @@
#include "modular_citadel\code\game\gamemodes\gangs\dominator.dm"
#include "modular_citadel\code\game\gamemodes\gangs\dominator_countdown.dm"
#include "modular_citadel\code\game\gamemodes\gangs\gang.dm"
-#include "modular_citadel\code\game\gamemodes\gangs\gang_crayon.dm"
#include "modular_citadel\code\game\gamemodes\gangs\gang_datums.dm"
#include "modular_citadel\code\game\gamemodes\gangs\gang_decals.dm"
#include "modular_citadel\code\game\gamemodes\gangs\gang_hud.dm"