The Families Gamemode. Home. At least it was 'til I fucked everything up. (#49274)

Adds the Families gamemode to the codebase. In this 1 hour showdown, 
multiple criminal families are placed onto the station with their goal 
to rack up the most points by the end of 1 hour. At which point, the 
Space Cops hit up the station to crack down on the family activity. The 
severity of the Space Cops is based on how much carnage and murder the 
families have committed.

## Why It's Good For The Game

With an actual official medium/heavy RP server, and the codebase taking 
a much harder swing towards heavier consequences for death, a more 
player focused gamemode with a unique swing on teamwork, the concept of 
what exactly is an antagonist, and trust/paranoia will do wonders to 
help improve that atmosphere.

Previous tests went extremely well(when administrators weren't 
intentionally sabotaging it by welderbombing families as the Head of 
Security every single round immediately with no escalation), but 
suffered from "this just isn't a gamemode for no RP servers like /tg/".

However, /tg/ is now an RP server.

Get ready to rep your family.

## Isn't this just Gang?
Heck no. Only thing similar is tagging turf and the fact criminal 
groups are involved. This mode is completely different otherwise.

## Heck yeah, where do I sign up?
Ask a family member where their Signup Point is, and then simply click 
on it with an open hand. You'll be signed up for the family instantly, 
and given some sick threads and a spraycan for tagging.

## How do I rep my family?
Wear your gang's uniform or colors similar.

## What does it mean to roll with a crew?
Travel in a group of four or more for bonus points towards your gang.
However, you receive less for having eight or more, so be careful. Try 
to spread your crews out!

## I'm an X, what do?
Gangster: Yeah, go do whatever. Wanna backstab your gang? Go for it. 
You can switch sides at any time by clicking on an enemy gang's sign up 
point. Wanna murder some snitch because they ratted you out to the 
pigs? Do it. Wanna pressure the locals into supplying you with goods to 
export? Emergent gameplay.
Civilians: Wanna join a gang? Go for it. Gangsters probably shouldn't 
be arbitrarily murdering you, but if you're repping someone else's 
colors, don't expect to be given a free pass. After all, uniforms are 
the only way to really identify a gang member.
SPACE COP: Get rid of all the gangsters. Secure the station. Protect 
the law. Uphold the law. Eat donuts.

## No huds? How can I tell if someone's part of my group?
Tough shit, man. I hope you like trust.

In short, this gamemode will be a fun exercise in how far the 
playerbase can go in regards to trusting eachother and unifying to meet 
a common goal for their group with no rules, gameplay mechanics, or 
anything actively forcing them to work together.

## How do I know if someone is a gangster?
1. Are they wearing a gang uniform/color?
   If yes, they're probably a gangster.
   If no, they're probably a civvie.
2. Are they attacking gangsters?
   If yes, they're probably a gangster.
   If no, they're probably a civvie.
This commit is contained in:
Iamgoofball
2020-03-08 18:33:54 -07:00
committed by GitHub
parent 73db0b203e
commit 3203f19290
50 changed files with 1330 additions and 31 deletions

View File

@@ -77,6 +77,9 @@
#define ANTAG_HUD_BROTHER 22
#define ANTAG_HUD_OBSESSED 23
#define ANTAG_HUD_FUGITIVE 24
#define ANTAG_HUD_GANGSTER 25
#define ANTAG_HUD_SPACECOP 26
// Notification action types
#define NOTIFY_JUMP "jump"

View File

@@ -324,6 +324,8 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE)))
#define CLOCK_SILICONS 22
#define CLOCK_PROSELYTIZATION 23
#define SHUTTLE_HIJACK 24
#define GANG_DESTROYED 25
#define GANG_OPERATING 26
#define FIELD_TURF 1
#define FIELD_EDGE 2

View File

@@ -169,3 +169,5 @@
#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24"
#define ui_ghost_teleport "SOUTH:6,CENTER+1:24"
#define ui_ghost_pai "SOUTH: 6, CENTER+2:24"
#define ui_wanted_lvl "NORTH,11"

View File

@@ -57,8 +57,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
var/obj/screen/healths
var/obj/screen/healthdoll
var/obj/screen/internals
var/obj/screen/wanted_lvl
var/obj/screen/spacesuit
// subtypes can override this to force a specific UI style
var/ui_style
@@ -81,6 +81,13 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
plane_masters["[instance.plane]"] = instance
instance.backdrop(mymob)
wanted_lvl = new /obj/screen()
wanted_lvl.icon = 'icons/obj/gang/wanted_160x32.dmi'
wanted_lvl.icon_state = "wanted_0"
wanted_lvl.screen_loc = ui_wanted_lvl
infodisplay += wanted_lvl
/datum/hud/Destroy()
if(mymob.hud_used == src)
mymob.hud_used = null
@@ -101,6 +108,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
healths = null
healthdoll = null
wanted_lvl = null
internals = null
spacesuit = null
lingchemdisplay = null

View File

@@ -540,6 +540,10 @@ SUBSYSTEM_DEF(ticker)
news_message = "The burst of energy released near [station_name()] has been confirmed as merely a test of a new weapon. However, due to an unexpected mechanical error, their communications system has been knocked offline."
if(SHUTTLE_HIJACK)
news_message = "During routine evacuation procedures, the emergency shuttle of [station_name()] had its navigation protocols corrupted and went off course, but was recovered shortly after."
if(GANG_OPERATING)
news_message = "The company would like to state that any rumors of criminal organizing on board stations such as [station_name()] are falsehoods, and not to be emulated."
if(GANG_DESTROYED)
news_message = "The crew of [station_name()] would like to thank the Spinward Stellar Coalition Police Department for quickly resolving a minor terror threat to the station."
if(news_message)
send2otherserver(news_source, news_message,"News_Report")

View File

@@ -27,7 +27,9 @@ GLOBAL_LIST_INIT(huds, list(
ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_OBSESSED = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_FUGITIVE = new/datum/atom_hud/antag()
ANTAG_HUD_FUGITIVE = new/datum/atom_hud/antag(),
ANTAG_HUD_GANGSTER = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_SPACECOP = new/datum/atom_hud/antag()
))
/datum/atom_hud

View File

@@ -51,6 +51,7 @@
var/gamemode_ready = FALSE //Is the gamemode all set up and ready to start checking for ending conditions.
var/setup_error //What stopepd setting up the mode.
/datum/game_mode/proc/announce() //Shows the gamemode's name and a fast description.
to_chat(world, "<b>The gamemode is: <span class='[announce_span]'>[name]</span>!</b>")
to_chat(world, "<b>[announce_text]</b>")

View File

@@ -0,0 +1,449 @@
#define LOWPOP_FAMILIES_COUNT 50
#define TWO_STARS_HIGHPOP 11
#define THREE_STARS_HIGHPOP 16
#define FOUR_STARS_HIGHPOP 21
#define FIVE_STARS_HIGHPOP 31
#define TWO_STARS_LOW 6
#define THREE_STARS_LOW 9
#define FOUR_STARS_LOW 12
#define FIVE_STARS_LOW 15
#define CREW_SIZE_MIN 4
#define CREW_SIZE_MAX 8
GLOBAL_VAR_INIT(deaths_during_shift, 0)
/datum/game_mode/gang
name = "Families"
config_tag = "families"
antag_flag = ROLE_TRAITOR
false_report_weight = 5
required_players = 0
required_enemies = 1
recommended_enemies = 4
announce_span = "danger"
announce_text = "Grove For Lyfe!"
reroll_friendly = FALSE
restricted_jobs = list("Cyborg", "AI", "Prisoner","Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel")//N O
protected_jobs = list()
var/check_counter = 0
var/endtime = null
var/fuckingdone = FALSE
var/time_to_end = 60 MINUTES
var/gangs_to_generate = 3
var/list/gangs_to_use
var/list/datum/mind/gangbangers = list()
var/list/datum/mind/pigs = list()
var/datum/mind/undercover_cop
var/list/gangs = list()
var/gangs_still_alive = 0
var/sent_announcement = FALSE
var/list/gang_locations = list()
var/lock_stars = FALSE
var/cops_arrived = FALSE
var/gang_balance_cap = 5
var/current_stars = "wanted_0"
/datum/game_mode/gang/warriors
name = "Warriors"
config_tag = "warriors"
announce_text = "Can you survive this onslaught?"
gang_balance_cap = 3
/datum/game_mode/gang/warriors/pre_setup()
gangs_to_use = subtypesof(/datum/antagonist/gang)
gangs_to_generate = gangs_to_use.len
. = ..()
/datum/game_mode/gang/pre_setup()
gangs_to_use = subtypesof(/datum/antagonist/gang)
for(var/j = 0, j < gangs_to_generate, j++)
if (!antag_candidates.len)
break
var/datum/mind/gangbanger = antag_pick(antag_candidates)
gangbangers += gangbanger
gangbanger.restricted_roles = restricted_jobs
log_game("[key_name(gangbanger)] has been selected as a starting gangster!")
antag_candidates.Remove(gangbanger)
if(antag_candidates.len)
var/datum/mind/one_eight_seven_on_an_undercover_cop = antag_pick(antag_candidates)
pigs += one_eight_seven_on_an_undercover_cop
undercover_cop = one_eight_seven_on_an_undercover_cop
undercover_cop.restricted_roles = restricted_jobs
log_game("[key_name(one_eight_seven_on_an_undercover_cop)] has been selected as a starting undercover cop!")
antag_candidates.Remove(one_eight_seven_on_an_undercover_cop)
endtime = world.time + time_to_end
return TRUE
/datum/game_mode/gang/post_setup()
var/replacement_gangsters = 0
for(var/datum/mind/gangbanger in gangbangers)
if(!ishuman(gangbanger.current))
gangbangers.Remove(gangbanger)
log_game("[gangbanger] was not a human, and thus has lost their gangster role.")
replacement_gangsters++
if(replacement_gangsters)
for(var/j = 0, j < replacement_gangsters, j++)
if(!antag_candidates.len)
log_game("Unable to find more replacement gangsters. Not all of the gangs will spawn.")
break
var/datum/mind/gangbanger = antag_pick(antag_candidates)
gangbangers += gangbanger
log_game("[key_name(gangbanger)] has been selected as a replacement gangster!")
if(undercover_cop && !ishuman(undercover_cop.current))
pigs.Remove(undercover_cop)
log_game("[undercover_cop] was not a human, and thus has lost their undercover cop role.")
if(!antag_candidates.len)
var/datum/mind/one_eight_seven_on_an_undercover_cop = antag_pick(antag_candidates)
pigs += one_eight_seven_on_an_undercover_cop
undercover_cop = one_eight_seven_on_an_undercover_cop
else
log_game("Unable to find a replacement undercover cop.")
if(undercover_cop)
var/datum/antagonist/ert/families/undercover_cop/one_eight_seven_on_an_undercover_cop = new()
undercover_cop.add_antag_datum(one_eight_seven_on_an_undercover_cop)
undercover_cop.current.playsound_local(undercover_cop.current, 'sound/effects/families_police.ogg', 100, FALSE, pressure_affected = FALSE)
for(var/datum/mind/gangbanger in gangbangers)
var/gang_to_use = pick_n_take(gangs_to_use)
var/datum/antagonist/gang/new_gangster = new gang_to_use()
var/datum/team/gang/ballas = new /datum/team/gang()
new_gangster.my_gang = ballas
new_gangster.starter_gangster = TRUE
gangs += ballas
ballas.add_member(gangbanger)
ballas.name = new_gangster.gang_name
ballas.acceptable_clothes = new_gangster.acceptable_clothes.Copy()
ballas.free_clothes = new_gangster.free_clothes.Copy()
ballas.my_gang_datum = new_gangster
for(var/C in ballas.free_clothes)
var/obj/O = new C(gangbanger.current)
var/list/slots = list (
"backpack" = ITEM_SLOT_BACKPACK,
"left pocket" = ITEM_SLOT_LPOCKET,
"right pocket" = ITEM_SLOT_RPOCKET
)
var/mob/living/carbon/human/H = gangbanger.current
var/equipped = H.equip_in_one_of_slots(O, slots)
if(!equipped)
to_chat(gangbanger.current, "Unfortunately, you could not bring your [O] to this shift. You will need to find one.")
qdel(O)
gangbanger.add_antag_datum(new_gangster)
gangbanger.current.playsound_local(gangbanger.current, 'sound/ambience/antag/thatshowfamiliesworks.ogg', 100, FALSE, pressure_affected = FALSE)
to_chat(gangbanger.current, "<B>As you're the first gangster, your uniform and spraycan are in your inventory!</B>")
addtimer(CALLBACK(src, .proc/announce_gang_locations), 5 MINUTES)
addtimer(CALLBACK(src, .proc/five_minute_warning), time_to_end - 5 MINUTES)
gamemode_ready = TRUE
..()
/datum/game_mode/gang/proc/announce_gang_locations()
var/list/readable_gang_names = list()
for(var/GG in gangs)
var/datum/team/gang/G = GG
readable_gang_names += "[G.name]"
var/finalized_gang_names = english_list(readable_gang_names)
priority_announce("Julio G coming to you live from Radio Los Spess! We've been hearing reports of gang activity on [station_name()], with the [finalized_gang_names] duking it out, looking for fresh territory and drugs to sling! Stay safe out there for the hour 'till the space cops get there, and keep it cool, yeah? Play music, not gunshots, I say. Peace out!", "Radio Los Spess", 'sound/voice/beepsky/radio.ogg')
sent_announcement = TRUE
/datum/game_mode/gang/proc/five_minute_warning()
priority_announce("Julio G coming to you live from Radio Los Spess! The space cops are closing in on [station_name()] and will arrive in about 5 minutes! Better clear on out of there if you don't want to get hurt!", "Radio Los Spess", 'sound/voice/beepsky/radio.ogg')
/datum/game_mode/gang/check_win()
var/alive_gangsters = 0
var/alive_cops = 0
for(var/datum/mind/gangbanger in gangbangers)
if(!ishuman(gangbanger.current))
continue
var/mob/living/carbon/human/H = gangbanger.current
if(H.stat)
continue
alive_gangsters++
for(var/datum/mind/bacon in pigs)
if(!ishuman(bacon.current)) // always returns false
continue
var/mob/living/carbon/human/H = bacon.current
if(H.stat)
continue
alive_cops++
if(alive_gangsters > alive_cops)
SSticker.mode_result = "win - gangs survived"
SSticker.news_report = GANG_OPERATING
return TRUE
SSticker.mode_result = "loss - police destroyed the gangs"
SSticker.news_report = GANG_DESTROYED
return FALSE
/datum/game_mode/gang/process()
if(sent_announcement)
for(var/mob/M in GLOB.player_list)
if(M.hud_used && !istype(M, /mob/dead/new_player))
var/datum/hud/H = M.hud_used
var/icon_state_to_use = "wanted_1"
if(lock_stars)
H.wanted_lvl.icon_state = current_stars
continue
if(GLOB.joined_player_list.len > LOWPOP_FAMILIES_COUNT)
switch(GLOB.deaths_during_shift)
if(0 to TWO_STARS_HIGHPOP-1)
icon_state_to_use = "wanted_1"
if(TWO_STARS_HIGHPOP to THREE_STARS_HIGHPOP-1)
icon_state_to_use = "wanted_2"
if(THREE_STARS_HIGHPOP to FOUR_STARS_HIGHPOP-1)
icon_state_to_use = "wanted_3"
if(FOUR_STARS_HIGHPOP to FIVE_STARS_HIGHPOP-1)
icon_state_to_use = "wanted_4"
if(FIVE_STARS_HIGHPOP to INFINITY)
icon_state_to_use = "wanted_5"
else
switch(GLOB.deaths_during_shift)
if(0 to TWO_STARS_LOW-1)
icon_state_to_use = "wanted_1"
if(TWO_STARS_LOW to THREE_STARS_LOW-1)
icon_state_to_use = "wanted_2"
if(THREE_STARS_LOW to FOUR_STARS_LOW-1)
icon_state_to_use = "wanted_3"
if(FOUR_STARS_LOW to FIVE_STARS_LOW-1)
icon_state_to_use = "wanted_4"
if(FIVE_STARS_LOW to INFINITY)
icon_state_to_use = "wanted_5"
if(cops_arrived)
icon_state_to_use += "_active"
lock_stars = TRUE
current_stars = icon_state_to_use
H.wanted_lvl.icon_state = icon_state_to_use
check_counter++
if(check_counter >= 5)
if (world.time > endtime && !fuckingdone)
fuckingdone = TRUE
send_in_the_fuzz()
check_counter = 0
SSticker.mode.check_win()
check_tagged_turfs()
check_gang_clothes()
check_rollin_with_crews()
/datum/game_mode/gang/proc/send_in_the_fuzz()
var/team_size
var/cops_to_send
var/announcement_message = "PUNK ASS BALLA BITCH"
var/announcer = "Spinward Stellar Coalition"
if(GLOB.joined_player_list.len > LOWPOP_FAMILIES_COUNT)
switch(GLOB.deaths_during_shift)
if(0 to TWO_STARS_HIGHPOP-1)
team_size = 8
cops_to_send = /datum/antagonist/ert/families/beatcop
announcement_message = "Hello, crewmembers of [station_name()]! We've received a few calls about some potential violent gang activity on board your station, so we're sending some beat cops to check things out. Nothing extreme, just a courtesy call. However, while they check things out for about 10 minutes, we're going to have to ask that you keep your escape shuttle parked.\n\nHave a pleasant day!"
announcer = "Spinward Stellar Coalition Police Department"
if(TWO_STARS_HIGHPOP to THREE_STARS_HIGHPOP-1)
team_size = 9
cops_to_send = /datum/antagonist/ert/families/beatcop/armored
announcement_message = "Crewmembers of [station_name()]. We have received confirmed reports of violent gang activity from your station. We are dispatching some armed officers to help keep the peace and investigate matters. Do not get in their way, and comply with any and all requests from them. We have blockaded the local warp gate, and your shuttle cannot depart for another 10 minutes.\n\nHave a secure day."
announcer = "Spinward Stellar Coalition Police Department"
if(THREE_STARS_HIGHPOP to FOUR_STARS_HIGHPOP-1)
team_size = 10
cops_to_send = /datum/antagonist/ert/families/beatcop/swat
announcement_message = "Crewmembers of [station_name()]. We have received confirmed reports of extreme gang activity from your station resulting in heavy civilian casualties. The Spinward Stellar Coalition does not tolerate abuse towards our citizens, and we will be responding in force to keep the peace and reduce civilian casualties. We have your station surrounded, and all gangsters must drop their weapons and surrender peacefully.\n\nHave a secure day."
announcer = "Spinward Stellar Coalition Police Department"
if(FOUR_STARS_HIGHPOP to FIVE_STARS_HIGHPOP-1)
team_size = 11
cops_to_send = /datum/antagonist/ert/families/beatcop/fbi
announcement_message = "We are dispatching our top agents to [station_name()] at the request of the Spinward Stellar Coalition government due to an extreme terrorist level threat against this Nanotrasen owned station. All gangsters must surrender IMMEDIATELY. Failure to comply can and will result in death. We have blockaded your warp gates and will not allow any escape until the situation is resolved within our standard response time of 10 minutes.\n\nSurrender now or face the consequences of your actions."
announcer = "Federal Bureau of Investigation"
if(FIVE_STARS_HIGHPOP to INFINITY)
team_size = 12
cops_to_send = /datum/antagonist/ert/families/beatcop/military
announcement_message = "Due to an insane level of civilian casualties aboard [station_name()], we have dispatched the National Guard to curb any and all gang activity on board the station. We have heavy cruisers watching the shuttle. Attempt to leave before we allow you to, and we will obliterate your station and your escape shuttle.\n\nYou brought this on yourselves by murdering so many civilians."
announcer = "Spinward Stellar Coalition National Guard"
else
switch(GLOB.deaths_during_shift)
if(0 to TWO_STARS_LOW-1)
team_size = 5
cops_to_send = /datum/antagonist/ert/families/beatcop
announcement_message = "Hello, crewmembers of [station_name()]! We've received a few calls about some potential violent gang activity on board your station, so we're sending some beat cops to check things out. Nothing extreme, just a courtesy call. However, while they check things out for about 10 minutes, we're going to have to ask that you keep your escape shuttle parked.\n\nHave a pleasant day!"
announcer = "Spinward Stellar Coalition Police Department"
if(TWO_STARS_LOW to THREE_STARS_LOW-1)
team_size = 6
cops_to_send = /datum/antagonist/ert/families/beatcop/armored
announcement_message = "Crewmembers of [station_name()]. We have received confirmed reports of violent gang activity from your station. We are dispatching some armed officers to help keep the peace and investigate matters. Do not get in their way, and comply with any and all requests from them. We have blockaded the local warp gate, and your shuttle cannot depart for another 10 minutes.\n\nHave a secure day."
announcer = "Spinward Stellar Coalition Police Department"
if(THREE_STARS_LOW to FOUR_STARS_LOW-1)
team_size = 7
cops_to_send = /datum/antagonist/ert/families/beatcop/swat
announcement_message = "Crewmembers of [station_name()]. We have received confirmed reports of extreme gang activity from your station resulting in heavy civilian casualties. The Spinward Stellar Coalition does not tolerate abuse towards our citizens, and we will be responding in force to keep the peace and reduce civilian casualties. We have your station surrounded, and all gangsters must drop their weapons and surrender peacefully.\n\nHave a secure day."
announcer = "Spinward Stellar Coalition Police Department"
if(FOUR_STARS_LOW to FIVE_STARS_LOW-1)
team_size = 8
cops_to_send = /datum/antagonist/ert/families/beatcop/fbi
announcement_message = "We are dispatching our top agents to [station_name()] at the request of the Spinward Stellar Coalition government due to an extreme terrorist level threat against this Nanotrasen owned station. All gangsters must surrender IMMEDIATELY. Failure to comply can and will result in death. We have blockaded your warp gates and will not allow any escape until the situation is resolved within our standard response time of 10 minutes.\n\nSurrender now or face the consequences of your actions."
announcer = "Federal Bureau of Investigation"
if(FIVE_STARS_LOW to INFINITY)
team_size = 10
cops_to_send = /datum/antagonist/ert/families/beatcop/military
announcement_message = "Due to an insane level of civilian casualties aboard [station_name()], we have dispatched the National Guard to curb any and all gang activity on board the station. We have heavy cruisers watching the shuttle. Attempt to leave before we allow you to, and we will obliterate your station and your escape shuttle.\n\nYou brought this on yourselves by murdering so many civilians."
announcer = "Spinward Stellar Coalition National Guard"
priority_announce(announcement_message, announcer, 'sound/effects/families_police.ogg')
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to help clean up crime on this station?", "deathsquad", null)
if(candidates.len)
//Pick the (un)lucky players
var/numagents = min(team_size,candidates.len)
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
var/index = 0
while(numagents && candidates.len)
var/spawnloc = spawnpoints[index+1]
//loop through spawnpoints one at a time
index = (index + 1) % spawnpoints.len
var/mob/dead/observer/chosen_candidate = pick(candidates)
candidates -= chosen_candidate
if(!chosen_candidate.key)
continue
//Spawn the body
var/mob/living/carbon/human/cop = new(spawnloc)
chosen_candidate.client.prefs.copy_to(cop)
cop.key = chosen_candidate.key
//Give antag datum
var/datum/antagonist/ert/ert_antag = new cops_to_send
cop.mind.add_antag_datum(ert_antag)
cop.mind.assigned_role = ert_antag.name
SSjob.SendToLateJoin(cop)
//Logging and cleanup
log_game("[key_name(cop)] has been selected as an [ert_antag.name]")
numagents--
cops_arrived = TRUE
SSshuttle.registerHostileEnvironment(src)
addtimer(CALLBACK(src, .proc/end_hostile_sit), 10 MINUTES)
return TRUE
/datum/game_mode/gang/proc/end_hostile_sit()
SSshuttle.clearHostileEnvironment(src)
/datum/game_mode/gang/proc/check_tagged_turfs()
for(var/T in GLOB.gang_tags)
var/obj/effect/decal/cleanable/crayon/gang/tag = T
if(tag.my_gang)
tag.my_gang.adjust_points(50)
CHECK_TICK
/datum/game_mode/gang/proc/check_gang_clothes() // TODO: make this grab the sprite itself, average out what the primary color would be, then compare how close it is to the gang color so I don't have to manually fill shit out for 5 years for every gang type
for(var/mob/living/carbon/human/H in GLOB.player_list)
if(!H.mind || !H.client)
continue
var/datum/antagonist/gang/is_gangster = H.mind.has_antag_datum(/datum/antagonist/gang)
for(var/clothing in list(H.head, H.wear_mask, H.wear_suit, H.w_uniform, H.back, H.gloves, H.shoes, H.belt, H.s_store, H.glasses, H.ears, H.wear_id))
if(is_gangster)
if(is_type_in_list(clothing, is_gangster.acceptable_clothes))
is_gangster.add_gang_points(10)
else
for(var/G in gangs)
var/datum/team/gang/gang_clothes = G
if(is_type_in_list(clothing, gang_clothes.acceptable_clothes))
gang_clothes.adjust_points(5)
CHECK_TICK
/datum/game_mode/gang/proc/check_rollin_with_crews()
var/list/areas_to_check = list()
for(var/G in gangbangers)
var/datum/mind/gangster = G
areas_to_check += get_area(gangster.current)
for(var/AA in areas_to_check)
var/area/A = AA
var/list/gang_members = list()
for(var/mob/living/carbon/human/H in A)
if(H.stat || !H.mind || !H.client)
continue
var/datum/antagonist/gang/is_gangster = H.mind.has_antag_datum(/datum/antagonist/gang)
if(is_gangster)
gang_members[is_gangster.my_gang]++
CHECK_TICK
if(gang_members.len)
for(var/datum/team/gang/gangsters in gang_members)
if(gang_members[gangsters] >= CREW_SIZE_MIN)
if(gang_members[gangsters] >= CREW_SIZE_MAX)
gangsters.adjust_points(5) // Discourage larger clumps, spread ur people out
else
gangsters.adjust_points(10)
/datum/game_mode/gang/generate_report()
return "Something something grove street home at least until I fucked everything up idk nobody reads these reports."
/datum/game_mode/gang/send_intercept(report = 0)
return
/datum/game_mode/gang/special_report()
var/list/report = list()
var/highest_point_value = 0
var/highest_gang = "Leet Like Jeff K"
report += "<span class='header'>The families in the round were:</span>"
var/objective_failures = TRUE
for(var/datum/team/gang/GG in gangs)
if(GG.my_gang_datum.check_gang_objective())
objective_failures = FALSE
break
for(var/datum/team/gang/G in gangs)
report += "<span class='header'>[G.name]:</span>"
if(G.members.len)
report += "[G.my_gang_datum.roundend_category] were:"
report += printplayerlist(G.members)
report += "<span class='header'>Points: [G.points]</span>"
report += "<span class='header'>Objective: [G.my_gang_datum.gang_objective]</span>"
if(G.my_gang_datum.check_gang_objective())
report += "<span class='greentext'>The family completed their objective!</span>"
else
report += "<span class='redtext'>The family failed their objective!</span>"
else
report += "<span class='redtext'>The family was wiped out!</span>"
if(!objective_failures)
if(G.points >= highest_point_value && G.members.len && G.my_gang_datum.check_gang_objective())
highest_point_value = G.points
highest_gang = G.name
else
if(G.points >= highest_point_value && G.members.len)
highest_point_value = G.points
highest_gang = G.name
var/alive_gangsters = 0
var/alive_cops = 0
for(var/datum/mind/gangbanger in gangbangers)
if(gangbanger.current)
if(!ishuman(gangbanger.current))
continue
var/mob/living/carbon/human/H = gangbanger.current
if(H.stat)
continue
alive_gangsters++
for(var/datum/mind/bacon in pigs)
if(bacon.current)
if(!ishuman(bacon.current)) // always returns false
continue
var/mob/living/carbon/human/H = bacon.current
if(H.stat)
continue
alive_cops++
if(alive_gangsters > alive_cops)
if(!objective_failures)
report += "<span class='header greentext'>[highest_gang] won the round by completing their objective and having the most points!</span>"
else
report += "<span class='header greentext'>[highest_gang] won the round by having the most points!</span>"
else if(alive_gangsters == alive_cops)
report += "<span class='header redtext'>Legend has it the police and the families are still duking it out to this day!</span>"
else
report += "<span class='header greentext'>The police put the boots to the families, medium style!</span>"
return "<div class='panel redborder'>[report.Join("<br>")]</div>"

View File

@@ -0,0 +1,47 @@
/obj/item/gang_induction_package
name = "family signup package"
icon = 'icons/obj/gang/signup_points.dmi'
icon_state = "signup_book"
var/gang_to_use
var/datum/team/gang/team_to_use
/obj/item/gang_induction_package/attack_self(mob/living/user)
..()
if(HAS_TRAIT(user, TRAIT_MINDSHIELD))
to_chat(user, "You attended a seminar on not signing up for a gang, and are not interested.")
return
var/datum/antagonist/gang/is_gangster = user.mind.has_antag_datum(/datum/antagonist/gang)
if(is_gangster && is_gangster.starter_gangster)
to_chat(user, "You started your family. You can't turn your back on it now.")
return
attempt_join_gang(user)
/obj/item/gang_induction_package/proc/add_to_gang(var/mob/living/user)
var/datum/game_mode/gang/F = SSticker.mode
var/datum/antagonist/gang/swappin_sides = new gang_to_use()
user.mind.add_antag_datum(swappin_sides)
swappin_sides.my_gang = team_to_use
team_to_use.add_member(user.mind)
for(var/threads in team_to_use.free_clothes)
new threads(get_turf(user))
if (!F.gangbangers.Find(user.mind))
F.gangbangers += user.mind
team_to_use.adjust_points(30)
/obj/item/gang_induction_package/proc/attempt_join_gang(mob/living/user)
if(user && user.mind)
var/datum/antagonist/gang/is_gangster = user.mind.has_antag_datum(/datum/antagonist/gang)
if(is_gangster)
if(is_gangster.my_gang == team_to_use)
return
else
is_gangster.my_gang.adjust_points(-30)
is_gangster.my_gang.remove_member(user.mind)
user.mind.remove_antag_datum(/datum/antagonist/gang)
add_to_gang(user)
qdel(src)
else
add_to_gang(user)
qdel(src)

View File

@@ -0,0 +1,22 @@
/obj/mecha/combat/five_stars
desc = "A state of the art tank deployed by the Spinward Stellar Coalition National Guard."
name = "\improper Tank"
icon = 'icons/mecha/mecha_96x96.dmi'
icon_state = "five_stars"
armor = list("melee" = 100, "bullet" = 50, "laser" = 35, "energy" = 35, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
exit_delay = 40
step_in = 4
dir_in = 1 //Facing North.
max_integrity = 800
pixel_x = -32
pixel_y = -32
/obj/mecha/combat/five_stars/Initialize()
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/spacecops(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src)
ME.attach(src)
max_ammo()

View File

@@ -342,6 +342,9 @@
harmful = TRUE
ammo_type = "missiles_he"
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/spacecops
projectiles = 420
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching
name = "\improper BRM-6 missile rack"
desc = "A weapon for combat exosuits. Launches low-explosive breaching missiles designed to explode only when striking a sturdy target."

View File

@@ -1,3 +1,5 @@
GLOBAL_LIST(gang_tags)
/obj/effect/decal/cleanable/crayon
name = "rune"
desc = "Graffiti. Damn kids."
@@ -28,6 +30,20 @@
if(main)
paint_colour = main
add_atom_colour(paint_colour, FIXED_COLOUR_PRIORITY)
/obj/effect/decal/cleanable/crayon/NeverShouldHaveComeHere(turf/T)
return isgroundlessturf(T)
/obj/effect/decal/cleanable/crayon/gang
name = "Leet Like Jeff K gang tag"
desc = "Looks like someone's claimed this area for Leet Like Jeff K."
icon = 'icons/obj/gang/tags.dmi'
layer = BELOW_MOB_LAYER
var/datum/team/gang/my_gang
/obj/effect/decal/cleanable/crayon/gang/Initialize(mapload, main, type, e_name, graf_rot, alt_icon = null)
. = ..()
LAZYADD(GLOB.gang_tags, src)
/obj/effect/decal/cleanable/crayon/gang/Destroy()
LAZYREMOVE(GLOB.gang_tags, src)
..()

View File

@@ -317,6 +317,13 @@
else if(drawing in graffiti|oriented)
temp = "graffiti"
var/gang_mode
if(user.mind)
gang_mode = user.mind.has_antag_datum(/datum/antagonist/gang)
if(gang_mode && (!can_claim_for_gang(user, target)))
return
var/graf_rot
if(drawing in oriented)
@@ -349,7 +356,7 @@
if(paint_mode == PAINT_LARGE_HORIZONTAL)
wait_time *= 3
if(!instant)
if(gang_mode || !instant)
if(!do_after(user, 50, target = target))
return
@@ -361,28 +368,34 @@
if(actually_paints)
var/obj/effect/decal/cleanable/crayon/C
switch(paint_mode)
if(PAINT_NORMAL)
C = new(target, paint_color, drawing, temp, graf_rot)
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(isValidSurface(left) && isValidSurface(right))
C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
affected_turfs += left
affected_turfs += right
affected_turfs += target
else
to_chat(user, "<span class='warning'>There isn't enough space to paint!</span>")
return
C.add_hiddenprint(user)
if(istagger)
C.AddComponent(/datum/component/art, GOOD_ART)
if(gang_mode)
if(!can_claim_for_gang(user, target))
return
tag_for_gang(user, target, gang_mode)
affected_turfs += target
else
C.AddComponent(/datum/component/art, BAD_ART)
switch(paint_mode)
if(PAINT_NORMAL)
C = new(target, paint_color, drawing, temp, graf_rot)
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(isValidSurface(left) && isValidSurface(right))
C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
affected_turfs += left
affected_turfs += right
affected_turfs += target
else
to_chat(user, "<span class='warning'>There isn't enough space to paint!</span>")
return
C.add_hiddenprint(user)
if(istagger)
C.AddComponent(/datum/component/art, GOOD_ART)
else
C.AddComponent(/datum/component/art, BAD_ART)
if(!instant)
to_chat(user, "<span class='notice'>You finish drawing \the [temp].</span>")
@@ -428,6 +441,46 @@
else
..()
/obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target)
var/area/A = get_area(target)
if(!A || (!is_station_level(A.z)))
to_chat(user, "<span class='warning'>[A] is unsuitable for tagging.</span>")
return FALSE
var/spraying_over = FALSE
for(var/obj/effect/decal/cleanable/crayon/gang/G in target)
spraying_over = TRUE
for(var/obj/machinery/power/apc in target)
to_chat(user, "<span class='warning'>You can't tag an APC.</span>")
return FALSE
var/occupying_gang = territory_claimed(A, user)
if(occupying_gang && !spraying_over)
to_chat(user, "<span class='danger'>[A] has already been tagged by a gang! You must find and spray over the old tag first!</span>")
return FALSE
// stolen from oldgang lmao
return TRUE
/obj/item/toy/crayon/proc/tag_for_gang(mob/user, atom/target, datum/antagonist/gang/user_gang)
for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
qdel(old_marking)
var/area/territory = get_area(target)
var/obj/effect/decal/cleanable/crayon/gang/tag = new /obj/effect/decal/cleanable/crayon/gang(target)
tag.my_gang = user_gang.my_gang
tag.icon_state = "[user_gang.gang_id]_tag"
tag.name = "[tag.my_gang.name] gang tag"
tag.desc = "Looks like someone's claimed this area for [tag.my_gang.name]."
to_chat(user, "<span class='notice'>You tagged [territory] for [tag.my_gang.name]!</span>")
/obj/item/toy/crayon/proc/territory_claimed(area/territory, mob/user)
for(var/obj/effect/decal/cleanable/crayon/gang/G in GLOB.gang_tags)
if(get_area(G) == territory)
return TRUE
/obj/item/toy/crayon/red
icon_state = "crayonred"
paint_color = "#DA0000"
@@ -665,7 +718,7 @@
return
if(isobj(target))
if(isobj(target) && !istype(target, /obj/effect/decal/cleanable/crayon/gang))
if(actually_paints)
if(color_hex2num(paint_color) < 350 && !istype(target, /obj/structure/window) && !istype(target, /obj/effect/decal/cleanable/crayon)) //Colors too dark are rejected
to_chat(usr, "<span class='warning'>A color that dark on an object like this? Surely not...</span>")

View File

@@ -609,3 +609,9 @@
new /obj/item/clothing/mask/gas/clown_hat(src)
new /obj/item/bikehorn(src)
new /obj/item/implanter/sad_trombone(src)
/obj/item/storage/backpack/henchmen
name = "wings"
desc = "Granted to the henchmen who deserve it. This probably doesn't include you."
icon_state = "henchmen"
item_state = "henchmen"

View File

@@ -12,6 +12,8 @@
var/list/name_source
var/random_names = TRUE
var/rip_and_tear = FALSE
var/equip_ert = TRUE
var/forge_objectives_for_ert = TRUE
show_in_antagpanel = FALSE
antag_moodlet = /datum/mood_event/focused
can_hijack = HIJACK_PREVENT
@@ -19,8 +21,10 @@
/datum/antagonist/ert/on_gain()
if(random_names)
update_name()
forge_objectives()
equipERT()
if(forge_objectives_for_ert)
forge_objectives()
if(equip_ert)
equipERT()
. = ..()
/datum/antagonist/ert/get_team()
@@ -173,6 +177,7 @@
return
H.equipOutfit(outfit)
/datum/antagonist/ert/greet()
if(!ert_team)
return
@@ -189,3 +194,99 @@
missiondesc += "<BR><B>Your Mission</B> : [ert_team.mission.explanation_text]"
to_chat(owner,missiondesc)
/datum/antagonist/ert/families
name = "Space Police Responder"
antag_hud_type = ANTAG_HUD_SPACECOP
antag_hud_name = "hud_spacecop"
/datum/antagonist/ert/families/apply_innate_effects(mob/living/mob_override)
..()
var/mob/living/M = mob_override || owner.current
add_antag_hud(antag_hud_type, antag_hud_name, M)
/datum/antagonist/ert/families/remove_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
remove_antag_hud(antag_hud_type, M)
..()
/datum/antagonist/ert/families/greet()
to_chat(owner, "<B><font size=3 color=red>You are the [name].</font></B>")
var/missiondesc = "After an uptick in gang violence on [station_name()], you are responding to emergency calls from the station for immediate SSC Police assistance!\n"
missiondesc += "<BR><B>Your Mission</B>:"
missiondesc += "<BR> <B>1.</B> Secure the situation and crack down on any gang activity. You can view gangsters with your sunglasses."
missiondesc += "<BR> <B>2.</B> There is an undercover police officer on station. Secure him, receive his intel, and extract him safely."
missiondesc += "<BR> <B>3.</B> Minimize civilian casualties, but defend yourself and civilians from hostile gangsters."
missiondesc += "<BR> <B>3.</B> If Security is found to be violating the rights of citizens, detain them as per your authority as Spinward Stellar Coalition officers."
missiondesc += "<BR> <B>4.</B> If the situation demands it, evacuate the station. Otherwise, remain on station and keep the peace."
to_chat(owner,missiondesc)
/datum/antagonist/ert/families/undercover_cop
name = "Undercover Cop"
role = "Undercover Cop"
outfit = /datum/outfit/families_police/beatcop
var/free_clothes = list(/obj/item/clothing/glasses/hud/spacecop/hidden,
/obj/item/clothing/under/rank/security/officer/beatcop,
/obj/item/clothing/head/spacepolice)
forge_objectives_for_ert = FALSE
equip_ert = FALSE
random_names = FALSE
/datum/antagonist/ert/families/undercover_cop/on_gain()
for(var/C in free_clothes)
var/obj/O = new C(owner.current)
var/list/slots = list (
"backpack" = ITEM_SLOT_BACKPACK,
"left pocket" = ITEM_SLOT_LPOCKET,
"right pocket" = ITEM_SLOT_RPOCKET
)
var/mob/living/carbon/human/H = owner.current
var/equipped = H.equip_in_one_of_slots(O, slots)
if(!equipped)
to_chat(owner.current, "Unfortunately, you could not bring your [O] to this shift. You will need to find one.")
qdel(O)
. = ..()
/datum/antagonist/ert/families/undercover_cop/greet()
to_chat(owner, "<B><font size=3 color=red>You are the [name].</font></B>")
var/missiondesc = "You are an undercover police officer on board [station_name()]. You've been sent here by the Spinward Stellar Coalition because of suspected abusive behavior by the security department, and to keep tabs on a potential criminal organization operation."
missiondesc += "<BR><B>Your Mission</B>:"
missiondesc += "<BR> <B>1.</B> Keep a close eye on any gangsters you spot. You can view gangsters using your sunglasses in your backpack."
missiondesc += "<BR> <B>2.</B> Keep an eye on how Security handles any gangsters, and watch for excessive security brutality."
missiondesc += "<BR> <B>3.</B> Remain undercover and do not get found out by Security or any gangs. Nanotrasen does not take kindly to being spied on."
missiondesc += "<BR> <B>4.</B> When your backup arrives to extract you in 1 hour, inform them of everything you saw of note, and assist them in securing the situation."
to_chat(owner,missiondesc)
/datum/antagonist/ert/families/beatcop
name = "Beat Cop"
role = "Police Officer"
outfit = /datum/outfit/families_police/beatcop
/datum/antagonist/ert/families/beatcop/armored
name = "Armored Beat Cop"
role = "Police Officer"
outfit = /datum/outfit/families_police/beatcop/armored
/datum/antagonist/ert/families/beatcop/swat
name = "S.W.A.T. Member"
role = "S.W.A.T. Officer"
outfit = /datum/outfit/families_police/beatcop/swat
/datum/antagonist/ert/families/beatcop/fbi
name = "FBI Agent"
role = "FBI Agent"
outfit = /datum/outfit/families_police/beatcop/fbi
/datum/antagonist/ert/families/beatcop/military
name = "Space Military"
role = "Sergeant"
outfit = /datum/outfit/families_police/beatcop/military
/datum/antagonist/ert/families/beatcop/military/New()
. = ..()
name_source = GLOB.commando_names

View File

@@ -0,0 +1,426 @@
/datum/antagonist/gang
name = "Family Member"
roundend_category = "gangsters"
var/gang_name = "Leet Like Jeff K"
var/gang_id = "LLJK"
var/datum/team/gang/my_gang
var/list/acceptable_clothes = list()
var/list/free_clothes = list()
var/datum/action/cooldown/spawn_induction_package/package_spawner = new()
var/gang_objective = "Be super cool and stuff."
var/starter_gangster = FALSE
antag_hud_type = ANTAG_HUD_GANGSTER
antag_hud_name = "hud_gangster"
/datum/antagonist/gang/apply_innate_effects(mob/living/mob_override)
..()
package_spawner.Grant(owner.current)
package_spawner.my_gang_datum = src
var/mob/living/M = mob_override || owner.current
add_antag_hud(antag_hud_type, antag_hud_name, M)
/datum/antagonist/gang/remove_innate_effects(mob/living/mob_override)
package_spawner.Remove(owner.current)
var/mob/living/M = mob_override || owner.current
remove_antag_hud(antag_hud_type, M)
..()
/datum/antagonist/gang/get_team()
return my_gang
/datum/antagonist/gang/proc/add_gang_points(var/points_to_add)
if(my_gang)
my_gang.adjust_points(points_to_add)
/datum/antagonist/gang/proc/check_gang_objective() // used to determine if a gang has completed their special objective
return TRUE
/datum/antagonist/gang/greet()
to_chat(owner.current, "<B><font size=3 color=red>[gang_name] for life!</font></B>")
to_chat(owner.current, "<B><font size=2 color=red>You're a member of the [gang_name] now!<br>Tag turf with a spraycan, wear your group's colors, and recruit more gangsters with the Induction Packages!</font></B>")
to_chat(owner.current, "<B><font size=4 color=red>Don't fuck with non-gangsters unless they fuck with you first.</font></B>")
to_chat(owner.current, "<B><font size=4 color=red>Don't blow shit up or make the station uninhabitable.</font></B>")
to_chat(owner.current, "<B><font size=4 color=red>Family's Objective:</B> [gang_objective]</font>")
/datum/antagonist/gang/red
name = "San Fierro Triad"
roundend_category = "The San Fierro Triad gangsters"
gang_name = "San Fierro Triad"
gang_id = "SFT"
acceptable_clothes = list(/obj/item/clothing/head/soft/red,
/obj/item/clothing/neck/scarf/red,
/obj/item/clothing/suit/jacket/letterman_red,
/obj/item/clothing/under/color/red,
/obj/item/clothing/mask/bandana/red,
/obj/item/clothing/under/suit/red)
free_clothes = list(/obj/item/clothing/suit/jacket/letterman_red,
/obj/item/clothing/under/color/red,
/obj/item/toy/crayon/spraycan)
gang_objective = "The Spinward Stellar Coalition police intend to interfere with our operations, by sending an undercover cop. Find him and eliminate him."
antag_hud_name = "Triad"
/datum/antagonist/gang/red/check_gang_objective()
var/datum/game_mode/gang/F = SSticker.mode
var/mob/living/carbon/human/H = F.undercover_cop.current
if(considered_alive(H))
return FALSE
return TRUE
/datum/antagonist/gang/purple
name = "Ballas"
roundend_category = "The Ballas gangsters"
gang_name = "Ballas"
gang_id = "B"
acceptable_clothes = list(/obj/item/clothing/head/soft/purple,
/obj/item/clothing/under/color/lightpurple,
/obj/item/clothing/neck/scarf/purple,
/obj/item/clothing/head/beanie/purple,
/obj/item/clothing/suit/apron/purple_bartender,
/obj/item/clothing/mask/bandana/skull,
/obj/item/clothing/under/suit/green)
free_clothes = list(/obj/item/clothing/head/beanie/purple,
/obj/item/clothing/under/color/lightpurple,
/obj/item/toy/crayon/spraycan)
var/list/cop_roles = list("Security Officer", "Warden", "Detective", "Head of Security")
gang_objective = "We got a deal with the security pigs on this station. We scratch their back, they scratch ours. You feel me? Keep all of security safe from any trouble, and make sure they get out alive."
antag_hud_name = "Ballas"
/datum/antagonist/gang/purple/check_gang_objective()
for(var/mob/M in GLOB.player_list)
if(M.mind.assigned_role in cop_roles)
if(!considered_alive(M) && !M.suiciding)
return FALSE
return TRUE
/datum/antagonist/gang/green
name = "Grove Street Families"
roundend_category = "The Grove Street Families gangsters"
gang_name = "Grove Street Families"
gang_id = "GSF"
acceptable_clothes = list(/obj/item/clothing/head/soft/green,
/obj/item/clothing/under/color/darkgreen,
/obj/item/clothing/neck/scarf/green,
/obj/item/clothing/head/beanie/green,
/obj/item/clothing/suit/poncho/green,
/obj/item/clothing/mask/bandana/green)
free_clothes = list(/obj/item/clothing/mask/bandana/green,
/obj/item/clothing/under/color/darkgreen,
/obj/item/toy/crayon/spraycan)
gang_objective = "We lost a lot of territory recently. We gotta get that shit back. Make sure 45 rooms are tagged for Grove Street."
antag_hud_name = "Grove"
/datum/antagonist/gang/green/check_gang_objective()
var/tag_amount = 0
for(var/T in GLOB.gang_tags)
var/obj/effect/decal/cleanable/crayon/gang/tag = T
if(tag.my_gang.gang_id == gang_id)
tag_amount++
if(tag_amount >= 45)
return TRUE
return FALSE
/datum/antagonist/gang/russian_mafia
name = "Russian Mafia"
roundend_category = "The Russian mafiosos"
gang_name = "Russian Mafia"
gang_id = "RM"
acceptable_clothes = list(/obj/item/clothing/head/soft/red,
/obj/item/clothing/neck/scarf/red,
/obj/item/clothing/under/suit/white,
/obj/item/clothing/head/beanie/red,
/obj/item/clothing/head/ushanka)
free_clothes = list(/obj/item/clothing/head/ushanka,
/obj/item/clothing/under/suit/white,
/obj/item/toy/crayon/spraycan)
gang_objective = "We are starting to run low on supplies at the home base, my friend. Make sure every comrade has a bottle of some kind of booze on them, friend."
antag_hud_name = "Russian"
/datum/antagonist/gang/russian_mafia/check_gang_objective()
var/datum/game_mode/gang/F = SSticker.mode
for(var/M in F.gangbangers)
var/datum/mind/MI = M
if(MI.has_antag_datum(src.type))
if(!considered_alive(MI.current))
continue // dead people cant really do the objective lol
var/list/items_to_check = MI.current.GetAllContents()
for(var/I in items_to_check)
var/obj/IT = I
if(istype(IT, /obj/item/reagent_containers/food/drinks/bottle))
continue
return FALSE // didnt pass the bottle check, no point in continuing to loop
return TRUE
/datum/antagonist/gang/italian_mob
name = "Italian Mob"
roundend_category = "The Italian mobsters"
gang_name = "Italian Mob"
gang_id = "IM"
acceptable_clothes = list(/obj/item/clothing/under/suit/checkered,
/obj/item/clothing/head/fedora,
/obj/item/clothing/neck/scarf/green,
/obj/item/clothing/mask/bandana/green)
free_clothes = list(/obj/item/clothing/head/fedora,
/obj/item/clothing/under/suit/checkered,
/obj/item/toy/crayon/spraycan)
gang_objective = "The boss wants it made very clear that all our esteemed members are to be held with respect. If a friend falls, ensure they are properly buried with a coffin. And keep the Chaplain alive, to ensure the corpses are properly taken care of."
antag_hud_name = "Italian"
/datum/antagonist/gang/italian_mob/check_gang_objective()
var/datum/game_mode/gang/F = SSticker.mode
for(var/M in F.gangbangers)
var/datum/mind/MI = M
if(MI.has_antag_datum(src.type))
if(considered_alive(MI.current))
continue
if(istype(MI.current.loc, /obj/structure/closet/crate/coffin))
continue
return FALSE
for(var/mob/M in GLOB.player_list)
if(M.mind.assigned_role == "Chaplain")
if(!considered_alive(M) && !M.suiciding)
return FALSE
return TRUE
/datum/antagonist/gang/tunnel_snakes
name = "Tunnel Snakes"
roundend_category = "The Tunnel Snakes"
gang_name = "Tunnel Snakes"
gang_id = "TS"
acceptable_clothes = list(/obj/item/clothing/under/pants/classicjeans,
/obj/item/clothing/suit/jacket,
/obj/item/clothing/mask/bandana/skull)
free_clothes = list(/obj/item/clothing/suit/jacket,
/obj/item/clothing/under/pants/classicjeans,
/obj/item/toy/crayon/spraycan)
gang_objective = "TUNNEL SNAKES RULE!!! Make sure that everyone knows that, by getting 50% of people on station to wear any part of our uniform! TUNNEL SNAKES RULE!!!"
antag_hud_name = "Snakes"
/datum/antagonist/gang/tunnel_snakes/check_gang_objective()
var/people_on_station = 0
var/people_reppin_tunnel_snakes = 0
for(var/mob/M in GLOB.player_list)
if(!considered_alive(M))
continue
if(ishuman(M))
var/mob/living/carbon/human/H = M
people_on_station++
for(var/clothing in list(H.head, H.wear_mask, H.wear_suit, H.w_uniform, H.back, H.gloves, H.shoes, H.belt, H.s_store, H.glasses, H.ears, H.wear_id))
if(is_type_in_list(clothing, acceptable_clothes))
people_reppin_tunnel_snakes++
if(0.5*people_on_station > people_reppin_tunnel_snakes)
return FALSE
return TRUE
/datum/antagonist/gang/vagos
name = "Los Santos Vagos"
roundend_category = "The Los Santos Vagos gangsters"
gang_name = "Los Santos Vagos"
gang_id = "LSV"
acceptable_clothes = list(/obj/item/clothing/head/soft/yellow,
/obj/item/clothing/under/color/yellow,
/obj/item/clothing/neck/scarf/yellow,
/obj/item/clothing/head/beanie/yellow,
/obj/item/clothing/mask/bandana/gold)
free_clothes = list(/obj/item/clothing/mask/bandana/gold,
/obj/item/clothing/under/color/yellow,
/obj/item/toy/crayon/spraycan)
gang_objective = "Orders from up high. We need to up our drug operation. Ensure that at least 25% of the station is addicted to Crank."
antag_hud_name = "Vagos"
/datum/antagonist/gang/vagos/check_gang_objective()
var/people_on_station = 0
var/people_on_crack = 0
for(var/mob/M in GLOB.player_list)
if(!considered_alive(M))
continue
if(ishuman(M))
var/mob/living/carbon/human/H = M
people_on_station++
for(var/R in H.reagents.addiction_list)
if(istype(R, /datum/reagent/drug/crank))
people_on_crack++
if(0.5*people_on_station > people_on_crack)
return FALSE
return TRUE
/datum/antagonist/gang/henchmen
name = "Monarch Crew"
roundend_category = "The Monarch henchmen"
gang_name = "Monarch Crew"
gang_id = "HENCH"
acceptable_clothes = list(/obj/item/clothing/head/soft/yellow,
/obj/item/clothing/under/suit/henchmen,
/obj/item/clothing/neck/scarf/yellow,
/obj/item/clothing/head/beanie/yellow,
/obj/item/clothing/mask/bandana/gold,
/obj/item/storage/backpack/henchmen)
free_clothes = list(/obj/item/storage/backpack/henchmen,
/obj/item/clothing/under/suit/henchmen,
/obj/item/toy/crayon/spraycan)
gang_objective = "I have it on VERY GOOD AUTHORITY that the Research Director on this station helped Venture on a science project back in college! ENSURE THAT HE DOES NOT LEAVE THIS STATION ALIVE, HENCHMEN! THE MIGHTY MONARCH DEMANDS IT!!!"
antag_hud_name = "Monarch"
/datum/antagonist/gang/henchmen/check_gang_objective() // gotta arch dr. venture indirectly
for(var/mob/M in GLOB.player_list)
if(M.mind.assigned_role == "Research Director")
if(considered_alive(M))
return FALSE
return TRUE
/datum/antagonist/gang/yakuza
name = "Tojo Clan"
roundend_category = "The Yakuza"
gang_name = "Tojo Clan"
gang_id = "YAK"
acceptable_clothes = list(/obj/item/clothing/head/soft/yellow,
/obj/item/clothing/under/costume/yakuza,
/obj/item/clothing/shoes/yakuza,
/obj/item/clothing/neck/scarf/yellow,
/obj/item/clothing/head/beanie/yellow,
/obj/item/clothing/mask/bandana/gold,
/obj/item/clothing/head/hardhat,
/obj/item/clothing/suit/yakuza)
free_clothes = list(/obj/item/clothing/under/costume/yakuza,
/obj/item/clothing/shoes/yakuza,
/obj/item/clothing/suit/yakuza,
/obj/item/clothing/head/hardhat,
/obj/item/toy/crayon/spraycan)
gang_objective = "The boss is thrilled about this new construction opportunity we've all been given, yadda yadda, look, he knows we're here to expand our business ventures for the clan, but Majima wanted it made VERY clear that we do NOT fuck this station's infrastructure up. If more than 85% of this station is busted when we get the hell out of here, it's your ass on the line."
antag_hud_name = "Tojo"
/datum/antagonist/gang/yakuza/check_gang_objective()
var/datum/station_state/current_state = new /datum/station_state()
current_state.count()
var/station_integrity = min(PERCENT(GLOB.start_state.score(current_state)), 100)
if(station_integrity < 85)
return FALSE
return TRUE
/datum/antagonist/gang/jackbros
name = "Jack Bros"
roundend_category = "The Hee-hos"
gang_name = "Jack Bros"
gang_id = "JB"
acceptable_clothes = list(/obj/item/clothing/head/soft/blue,
/obj/item/clothing/under/costume/jackbros,
/obj/item/clothing/shoes/jackbros,
/obj/item/clothing/head/jackbros,
/obj/item/clothing/mask/bandana/blue)
free_clothes = list(/obj/item/clothing/under/costume/jackbros,
/obj/item/clothing/shoes/jackbros,
/obj/item/clothing/head/jackbros,
/obj/item/toy/crayon/spraycan)
gang_objective = "Hee-hello friends! We need to expand our influence, ho! Get a King Frost in as the Captain of this joint! Either get the original Captain on board with the program, or Hee-ho a fellow Jack Frost into the position yourselves!"
antag_hud_name = "JackFrost"
/datum/antagonist/gang/jackbros/check_gang_objective()
var/datum/game_mode/gang/F = SSticker.mode
for(var/M in F.gangbangers)
var/datum/mind/MI = M
if(MI.has_antag_datum(src.type))
if(!considered_alive(MI.current))
continue // dead people cant really do the objective lol
if(ishuman(MI.current))
var/mob/living/carbon/human/H = MI.current
if(H.get_assignment() == "Captain")
return TRUE
return FALSE
/datum/antagonist/gang/dutch
name = "Dutch van der Linde's Gang"
roundend_category = "Dutch's outlaws"
gang_name = "Dutch van der Linde's Gang"
gang_id = "VDL"
acceptable_clothes = list(/obj/item/clothing/head/soft/black,
/obj/item/clothing/under/costume/dutch,
/obj/item/clothing/suit/dutch,
/obj/item/clothing/head/bowler,
/obj/item/clothing/mask/bandana/black)
free_clothes = list(/obj/item/clothing/under/costume/dutch,
/obj/item/clothing/head/bowler,
/obj/item/clothing/suit/dutch,
/obj/item/toy/crayon/spraycan)
gang_objective = "Listen here, fellas. I have a plan. Just one more score on this crappy little po-dunk station. Gold bars, friends. Get all the gold out of the silos, and leave nothing behind! Spread the gold amongst yourselves for the escape plan, make sure everyone has at least 1 bar. After this, it'll be space mangos at Tahiti. You just gotta have a little faith."
antag_hud_name = "Dutch"
/datum/antagonist/gang/dutch/check_gang_objective()
var/datum/game_mode/gang/F = SSticker.mode
for(var/M in F.gangbangers)
var/datum/mind/MI = M
if(MI.has_antag_datum(src.type))
if(!considered_alive(MI.current))
continue // dead people cant really do the objective lol
var/list/items_to_check = MI.current.GetAllContents()
for(var/I in items_to_check)
var/obj/IT = I
if(istype(IT, /obj/item/stack/sheet/mineral/gold))
continue
return FALSE // didnt pass the bar check, no point in continuing to loop
var/obj/machinery/ore_silo/S = GLOB.ore_silo_default
var/datum/component/material_container/mat_container = S.GetComponent(/datum/component/material_container)
if(mat_container.materials[SSmaterials.GetMaterialRef(/datum/material/gold)] >= 2000) // if theres at least 1 bar of gold left in the silo, they've failed to heist all of it
return FALSE
return TRUE
/datum/team/gang
var/points = 0
var/gang_id = "LLJK"
var/list/acceptable_clothes = list()
var/list/free_clothes = list()
var/datum/antagonist/gang/my_gang_datum
/datum/team/gang/proc/adjust_points(var/points_to_adjust)
points += points_to_adjust
/datum/team/gang/roundend_report()
return "<div class='panel redborder'><br></div>"
/datum/action/cooldown/spawn_induction_package
name = "Create Induction Package"
desc = "Generate an induction package for your family."
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "recruit"
icon_icon = 'icons/obj/gang/actions.dmi'
cooldown_time = 300
var/datum/antagonist/gang/my_gang_datum
/datum/action/cooldown/spawn_induction_package/Trigger()
if(!..())
return FALSE
if(!IsAvailable())
return FALSE
if(!my_gang_datum)
return FALSE
if(!istype(owner, /mob/living/carbon/human))
return FALSE
var/mob/living/carbon/human/H = owner
if(H.stat)
return FALSE
var/datum/game_mode/gang/mode = SSticker.mode
var/lowest_gang_count = my_gang_datum.my_gang.members.len
for(var/datum/team/gang/TT in mode.gangs)
var/alive_gangsters = 0
for(var/datum/mind/gangers in TT.members)
if(ishuman(gangers.current) && gangers.current.client && !gangers.current.stat)
alive_gangsters++
if(TT != my_gang_datum.my_gang)
if(alive_gangsters < lowest_gang_count)
lowest_gang_count = alive_gangsters
if(my_gang_datum.my_gang.members.len >= (lowest_gang_count + mode.gang_balance_cap))
to_chat(H, "Your gang is pretty packed right now. You don't need more members just yet. If the other families expand, you can recruit more members.")
return FALSE
to_chat(H, "You pull an induction package from your pockets and place it on the ground.")
var/obj/item/gang_induction_package/GP = new(get_turf(H))
GP.name = "\improper [my_gang_datum.name] signup package"
GP.gang_to_use = my_gang_datum.type
GP.team_to_use = my_gang_datum.my_gang
StartCooldown()
return TRUE

View File

@@ -0,0 +1,56 @@
/datum/outfit/families_police/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/card/id/W = H.wear_id
W.access = get_all_accesses() // I have a warrant.
W.assignment = "Space Police"
W.registered_name = H.real_name
W.update_label()
..()
/datum/outfit/families_police/beatcop
name = "Families: Beat Cop"
uniform = /obj/item/clothing/under/rank/security/officer/beatcop
suit = null
shoes = /obj/item/clothing/shoes/combat/swat
gloves = null
glasses = /obj/item/clothing/glasses/hud/spacecop
ears = /obj/item/radio/headset/headset_sec
mask = null
head = /obj/item/clothing/head/spacepolice
belt = /obj/item/gun/energy/e_gun/mini
r_pocket = /obj/item/lighter
l_pocket = /obj/item/restraints/handcuffs
back = /obj/item/storage/backpack/satchel/leather
id = /obj/item/card/id
/datum/outfit/families_police/beatcop/armored
name = "Families: Armored Beat Cop"
suit = /obj/item/clothing/suit/armor/vest/blueshirt
head = /obj/item/clothing/head/helmet/blueshirt
belt = /obj/item/gun/energy/e_gun
/datum/outfit/families_police/beatcop/swat
name = "Families: SWAT Beat Cop"
suit = /obj/item/clothing/suit/armor/riot
head = /obj/item/clothing/head/helmet/riot
gloves = /obj/item/clothing/gloves/combat
belt = /obj/item/gun/energy/e_gun
/datum/outfit/families_police/beatcop/fbi
name = "Families: Space FBI Officer"
suit = /obj/item/clothing/suit/armor/laserproof
head = /obj/item/clothing/head/helmet/riot
belt = /obj/item/gun/energy/laser/scatter
gloves = /obj/item/clothing/gloves/combat
/datum/outfit/families_police/beatcop/military
name = "Families: Space Military"
uniform = /obj/item/clothing/under/syndicate/camo
suit = /obj/item/clothing/suit/armor/laserproof
head = /obj/item/clothing/head/beret/durathread
belt = /obj/item/gun/energy/laser/scatter
gloves = /obj/item/clothing/gloves/combat

View File

@@ -5,7 +5,7 @@
var/hud_type = null
///Used for topic calls. Just because you have a HUD display doesn't mean you should be able to interact with stuff.
var/hud_trait = null
/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot)
..()
@@ -223,3 +223,16 @@
if(. & EMP_PROTECT_SELF)
return
thermal_overload()
/obj/item/clothing/glasses/hud/spacecop
name = "police aviators"
desc = "For thinking you look cool while brutalizing protestors and minorities."
icon_state = "bigsunglasses"
hud_type = ANTAG_HUD_GANGSTER
/obj/item/clothing/glasses/hud/spacecop/hidden // for the undercover cop
name = "sunglasses"
desc = "These sunglasses are special, and let you view potential criminals."
icon_state = "sun"
item_state = "sunglasses"

View File

@@ -8,6 +8,12 @@
armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
strip_delay = 80
/obj/item/clothing/head/spacepolice
name = "space police cap"
desc = "A blue cap for patrolling the daily beat."
icon_state = "policecap_families"
item_state = "policecap_families"
/obj/item/clothing/head/powdered_wig
name = "powdered wig"
desc = "A powdered wig."
@@ -501,3 +507,10 @@
..()
if (slot == ITEM_SLOT_HEAD)
user.faction |= "goat"
/obj/item/clothing/head/jackbros
name = "frosty hat"
desc = "Hee-ho!"
icon_state = "JackFrostHat"
item_state = "JackFrostHat"

View File

@@ -419,3 +419,15 @@
desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!"
name = "grilling sandals"
icon_state = "cookflops"
/obj/item/clothing/shoes/yakuza
name = "tojo clan shoes"
desc = "Steel-toed and intimidating."
icon_state = "MajimaShoes"
item_state = "MajimaShoes_worn"
/obj/item/clothing/shoes/jackbros
name = "frosty boots"
desc = "For when you're stepping on up to the plate."
icon_state = "JackFrostShoes"
item_state = "JackFrostShoes_worn"

View File

@@ -772,3 +772,18 @@
desc = "A cool shirt for chilling on the beach."
icon_state = "hawaiian_blue"
item_state = "hawaiian_blue"
/obj/item/clothing/suit/yakuza
name = "tojo clan jacket"
desc = "The jacket of a mad dog."
icon_state = "MajimaJacket"
item_state = "MajimaJacket"
body_parts_covered = ARMS
/obj/item/clothing/suit/dutch
name = "dutch's jacket"
desc = "For those long nights on the beach in Tahiti."
icon_state = "DutchJacket"
item_state = "DutchJacket"
body_parts_covered = ARMS

View File

@@ -253,3 +253,24 @@
strip_delay = 50
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
/obj/item/clothing/under/costume/jackbros
name = "jack bros outfit"
desc = "For when it's time to hee some hos."
icon_state = "JackFrostUniform"
item_state = "JackFrostUniform"
can_adjust = FALSE
/obj/item/clothing/under/costume/yakuza
name = "tojo clan pants"
desc = "For those long nights under the traffic cone."
icon_state = "MajimaPants"
item_state = "MajimaPants"
can_adjust = FALSE
/obj/item/clothing/under/costume/dutch
name = "dutch's suit"
desc = "You can feel a <b>god damn plan</b> coming on."
icon_state = "DutchUniform"
item_state = "DutchUniform"
can_adjust = FALSE

View File

@@ -229,3 +229,10 @@
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/security/officer/beatcop
name = "space police uniform"
desc = "A police uniform often found in the lines at donut shops."
icon_state = "spacepolice_families"
item_state = "spacepolice_families"
can_adjust = FALSE

View File

@@ -124,3 +124,12 @@
desc = "An excellent light colored suit, experts in the field stress that it should not to be confused with the inferior tan suit."
icon_state = "beige_suit"
item_state = "beige_suit"
/obj/item/clothing/under/suit/henchmen
name = "henchmen jumpsuit"
desc = "A very gaudy jumpsuit for a proper Henchman. Guild regulations, you understand."
icon = 'icons/obj/clothing/under/syndicate.dmi'
mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi'
icon_state = "henchmen"
item_state = "henchmen"
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS|HEAD
flags_inv = HIDEGLOVES|HIDESHOES|HIDEEARS|HIDEEYES|HIDEHAIR

View File

@@ -1,3 +1,4 @@
GLOBAL_LIST_EMPTY(dead_players_during_shift)
/mob/living/carbon/human/gib_animation()
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-h")
@@ -28,7 +29,9 @@
dizziness = 0
jitteriness = 0
if(client && !suiciding && !(client in GLOB.dead_players_during_shift))
GLOB.dead_players_during_shift += client
GLOB.deaths_during_shift++
if(ismecha(loc))
var/obj/mecha/M = loc
if(M.occupant == src)

View File

@@ -220,7 +220,7 @@ BROTHER_OBJECTIVES_AMOUNT 2
## Uncomment to prohibit jobs that start with loyalty
## implants from being most antagonists.
#PROTECT_ROLES_FROM_ANTAGONIST
PROTECT_ROLES_FROM_ANTAGONIST
## Uncomment to prohibit assistants from becoming most antagonists.
#PROTECT_ASSISTANT_FROM_ANTAGONIST

BIN
icons/mecha/mecha_96x96.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
icons/obj/gang/actions.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

BIN
icons/obj/gang/tags.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -674,6 +674,8 @@
#include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm"
#include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\gang\gang.dm"
#include "code\game\gamemodes\gang\gang_things.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
#include "code\game\gamemodes\monkey\monkey.dm"
@@ -825,6 +827,7 @@
#include "code\game\mecha\mecha_wreckage.dm"
#include "code\game\mecha\combat\combat.dm"
#include "code\game\mecha\combat\durand.dm"
#include "code\game\mecha\combat\five_stars.dm"
#include "code\game\mecha\combat\gygax.dm"
#include "code\game\mecha\combat\honker.dm"
#include "code\game\mecha\combat\marauder.dm"
@@ -1437,6 +1440,8 @@
#include "code\modules\antagonists\fugitive\fugitive_outfits.dm"
#include "code\modules\antagonists\fugitive\fugitive_ship.dm"
#include "code\modules\antagonists\fugitive\hunter.dm"
#include "code\modules\antagonists\gang\gang.dm"
#include "code\modules\antagonists\gang\outfits.dm"
#include "code\modules\antagonists\greentext\greentext.dm"
#include "code\modules\antagonists\highlander\highlander.dm"
#include "code\modules\antagonists\magic_servant\servant.dm"