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"