Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gangs Rework Part 2: Vandalism and Graffiti #18986

Open
wants to merge 23 commits into
base: master
Choose a base branch
from

Conversation

TDHooligan
Copy link
Contributor

@TDHooligan TDHooligan commented May 18, 2024

[GAMEMODES] [FEATURE] [QOL]

About the PR

Adds a new feature: Vandalism!

image

Occasionally, gangs are tasked with vandalising a department instead of having a duffle drop.
Vandalism includes:

  • Graffiti with the new Spray Can
    • A bunch of new graffiti sprites, made by myself and a few community contributors
  • Crowbarring floor tiles (with some prevention)
  • Violence against NPCs
  • Breaking glass tables/Vending machines
  • Breaking lights

Gang members must achieve 500 'Vandalism Points' by breaking stuff in the department, where the Duffle bag they're looking for will drop by their feet.

2024-05-18.06-00-36.mp4

Additional Features:

  • Gang members start with 1500 points.
  • Cheap weapons now rebalanced, to compete for your starting points.
  • New graffiti special attack that partially blinds for a few seconds, tagging the victim
  • Baseball bat special now knocks back on crit, with no stuns. Added to gang locker as a middle-tier weapon.
  • New 'Machete' end-game item, competing with D-Saber and Katana
    • New special 'Massacre' attack, with an even more lethal version added to Slasher since Zonespace liked it.
  • 'View scoreboard' button added to the Gang Locker to see where your gang stands
  • Slightly improved locker UI
  • Spawns have been improved for Duffle Bags.

Graffiti special:
'Spray Burst' - A quick, harmless attack that temporarily blinds, defaces and disorients targets.
https://github.com/goonstation/goonstation/assets/6061314/93b8f3ef-b0bf-45fe-a901-9f549b106224

Baseball special:
'Baseball Swing' - Swipe, but knocks back on crit (15% chance)

Machete special:
'Butcher' - A risky all-in manoeuvre. Three quick low-damage swipes. If they all hit, the user sacrifices all their stamina to continue swinging until they're out of stamina or miss. If they miss, they take a few seconds of disorient.
https://github.com/goonstation/goonstation/assets/6061314/1149a1d5-933b-43fa-b915-776eeda58037

Machete special - Slasher
'Massacre' - Similar, but doesn't risk stamina. If the victim doesn't escape, damage escalates, then eventually delimbs, then decapitates.
https://github.com/goonstation/goonstation/assets/6061314/ee67e576-bbdc-47c9-ad7f-1c03769c98c9

Why's this needed?

More ways to get duffles reliably. Less dependence on players going along with it.
Also more gang/crew tension. Smashing a department has consequences...
Fixbatch for several QoL issues in there too, and a little more content for more gang variety.

Changelog

(u)TDHooligan
(*)Gangs may now be tasked with vandalising departments!
(*)Gangs have new weapons & equipment available in their locker.
(*)Gangs can now view a scoreboard from their locker.
(+)Gangs start with 1500 points.
(+)Gangs now have access to regular, cleanable graffiti. This can't be used to claim territory.
(+)Baseball bats' special attack knocks back on crit.
(+)Item costs have been rebalanced to compete for these starting points.

@boring-cyborg boring-cyborg bot added C-Sound Automatically applied on any .ogg or sound folder change. C-Sprites Automatically applied on any .dmi or icons folder change labels May 18, 2024
@github-actions github-actions bot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label May 18, 2024
@keywordlabeler keywordlabeler bot added A-Gamemodes Changes or additions to any gamemode's main features C-Feature A new feature or enhancements to existing features C-QoL A quality of life improvement that makes the game easier to play labels May 18, 2024
@TDHooligan
Copy link
Contributor Author

TDHooligan commented May 18, 2024

graffiti hit sfx still needs implementing
lower graffiti times
telesci fx for the duffle spawning
make machinery/objects count tiles as ineligible for duffle spawns

@github-actions github-actions bot added the S-Merge-Conflict Applied and removed when a PR has or no longer has a merge conflict label May 18, 2024
@Glamurio
Copy link
Contributor

This has everything I'd want it to have. It's good that doing the floor graffiti gives significantly more points than simply smashing things, so there's an extra incentive to do that.

Is there any kind of tracker to avoid boring point farming? Like... standing in one spot, and repeatedly breaking the floor tile and fixing it? Does fixing things in a department detract points? If not, maybe it should.

@TDHooligan
Copy link
Contributor Author

TDHooligan commented May 18, 2024

boring shit like that is hard to code fixes for and is boring for players anyway. if its an issue ill do something about it.

@github-actions github-actions bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels May 19, 2024
Copy link
Contributor

@FlameArrow57 FlameArrow57 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool! Just did a minor styling/sanity check review, not in-depth

code/obj/table.dm Outdated Show resolved Hide resolved
code/obj/table.dm Outdated Show resolved Hide resolved
code/modules/vending/vending.dm Outdated Show resolved Hide resolved
_std/defines/gang.dm Show resolved Hide resolved
code/datums/controllers/process/gang.dm Outdated Show resolved Hide resolved
code/modules/items/specials/ItemSpecials.dm Outdated Show resolved Hide resolved
code/modules/items/specials/ItemSpecials.dm Outdated Show resolved Hide resolved
code/modules/items/specials/ItemSpecials.dm Outdated Show resolved Hide resolved
code/modules/items/specials/ItemSpecials.dm Outdated Show resolved Hide resolved
code/datums/gamemodes/gangwar.dm Outdated Show resolved Hide resolved
@TDHooligan TDHooligan marked this pull request as ready for review May 23, 2024 13:33
@TDHooligan TDHooligan requested a review from Kyle2143 as a code owner May 23, 2024 13:33
@TDHooligan
Copy link
Contributor Author

merging caused buggery.

@github-actions github-actions bot removed the S-Merge-Conflict Applied and removed when a PR has or no longer has a merge conflict label May 23, 2024
@NightmareChamillian
Copy link
Contributor

I love this! Can I suggest breaking (or maybe only damaging to prevent depressurization) windows as well?

@TDHooligan
Copy link
Contributor Author

I love this! Can I suggest breaking (or maybe only damaging to prevent depressurization) windows as well?

already considered but if you're told smack a window and get points for it, odds are youre not gonna stop just because you arent getting number for it any more

@github-actions github-actions bot added the S-Merge-Conflict Applied and removed when a PR has or no longer has a merge conflict label May 26, 2024
@github-actions github-actions bot removed the S-Merge-Conflict Applied and removed when a PR has or no longer has a merge conflict label Jun 6, 2024
Copy link
Member

@ZeWaka ZeWaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tldr organize please




/obj/item/gang_machete
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please put this in an organized file, not dump it here

@@ -2232,3 +2363,153 @@ ABSTRACT_TYPE(/datum/item_special/spark)
if(progress == 1)
state = ACTIONSTATE_FINISH
return


/datum/item_special/massacre
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

@@ -1853,6 +1864,86 @@ ABSTRACT_TYPE(/datum/item_special/spark)
playsound(master, 'sound/effects/swoosh.ogg', 50, FALSE)
return


/datum/item_special/graffiti
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

Copy link
Contributor

@TobleroneSwordfish TobleroneSwordfish left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I absolutely love the new graffiti stuff, it feels great to use and the sprites look incredible!
But for the love of god in future please atomize these changes 🥺 this could have been at least 3 separate PRs very easily and would likely have gotten reviewed/merged a lot faster!

Comment on lines +1348 to +1354
switch (length(spraycan.graffititargets))
if (1)
duration = 4 SECONDS
if (2)
duration = 6 SECONDS
if (3)
duration = 8 SECONDS
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be a little smoother if you call updateBar after this (and maybe also do it on start because the bar seems to stutter at first)

inventory_counter_enabled = TRUE
w_class = W_CLASS_TINY

update_icon()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should call this on New to set the initial counter.

Comment on lines +2479 to +2484
category = "Consumable"

/datum/gang_item/equipment/graffiti
name = "'ProPaint' Spray Can"
desc = "Non-permanent graffiti, great for vandalism & blinding the fuzz. Not able to claim territory."
class2 = "consumable"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consumable and consumable?

@@ -2422,7 +2422,7 @@
if (thr?.get_throw_travelled() <= 410)
if (!((thr.throw_type & THROW_CHAIRFLIP) && ismob(hit)))
random_brute_damage(src, min((6 + (thr?.get_throw_travelled() / 5)), (src.health - 5) < 0 ? src.health : (src.health - 5)))
if (!src.hasStatus("knockdown"))
if (!src.hasStatus("knockdown") && (thr.throw_type & THROW_BASEBALL))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This changes global behaviour to make only baseball throws stun, I don't think that's what you want.

for(var/turf/T in list(one, two, three))
for(var/atom/movable/A in T)
if(A in attacked) continue
if(isliving(A))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make this a continue guard too, cleaner

Comment on lines +2807 to +2809
var/counter = 0
var/sound = 'sound/effects/electric_shock_short.ogg'
var/count = 7
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doc comment counter and count, easily confused var intent

Comment on lines +2849 to +2852
onRemove()
qdel(hud)
hud = null
. = ..()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Double onRemove definition (don't you just love that this is legal byond code?)


New()
..()
src.AddComponent(/datum/component/bloodflick)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this an issue with the base component but this seems to cause a runtime on the third attack of each chain
image

Comment on lines +2242 to +2244
on_spin_emote(mob/user)
SEND_SIGNAL(src, COMSIG_ITEM_TWIRLED, user, src)
animate_spin(src, prob(50) ? "L" : "R", 1, 0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this actually doing? It just seems to be recreating some of the base behaviour of the twirl emote (and sending the signal twice). If you want the behaviour of the twirl emote then just make the user do the emote instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Gamemodes Changes or additions to any gamemode's main features C-Feature A new feature or enhancements to existing features C-QoL A quality of life improvement that makes the game easier to play C-Sound Automatically applied on any .ogg or sound folder change. C-Sprites Automatically applied on any .dmi or icons folder change size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants