diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index cca88750b5..a380bf523c 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -392,8 +392,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
#define NUKE_SYNDICATE_BASE 3
#define STATION_DESTROYED_NUKE 4
#define STATION_EVACUATED 5
-#define GANG_LOSS 6
-#define GANG_TAKEOVER 7
#define BLOB_WIN 8
#define BLOB_NUKE 9
#define BLOB_DESTROYED 10
@@ -430,10 +428,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
#define GIBTONITE_DETONATE 3
//for obj explosion block calculation
#define EXPLOSION_BLOCK_PROC -1
-//Gangster starting influences
-
-#define GANGSTER_SOLDIER_STARTING_INFLUENCE 5
-#define GANGSTER_BOSS_STARTING_INFLUENCE 20
//for determining which type of heartbeat sound is playing
#define BEAT_FAST 1
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index cb4d552e5d..fbefab15bb 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -18,7 +18,6 @@
#define ROLE_BLOB "blob"
#define ROLE_NINJA "space ninja"
#define ROLE_MONKEY "monkey"
-#define ROLE_GANG "gangster"
#define ROLE_ABDUCTOR "abductor"
#define ROLE_REVENANT "revenant"
#define ROLE_DEVIL "devil"
@@ -41,7 +40,6 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_BLOB = /datum/game_mode/blob,
ROLE_NINJA,
ROLE_MONKEY = /datum/game_mode/monkey,
- ROLE_GANG = /datum/game_mode/gang,
ROLE_REVENANT,
ROLE_ABDUCTOR = /datum/game_mode/abduction,
ROLE_DEVIL = /datum/game_mode/devil,
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index d196c9cb10..79972e7017 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -315,11 +315,6 @@ SUBSYSTEM_DEF(ticker)
flick("station_corrupted",cinematic)
SEND_SOUND(world, sound('sound/effects/ghost.ogg'))
actually_blew_up = FALSE
- if("gang war") //Gang Domination (just show the override screen)
- cinematic.icon_state = "intro_malf_still"
- flick("intro_malf",cinematic)
- actually_blew_up = FALSE
- sleep(70)
if("fake") //The round isn't over, we're just freaking people out for fun
flick("intro_nuke",cinematic)
sleep(35)
@@ -733,10 +728,6 @@ SUBSYSTEM_DEF(ticker)
news_message = "We would like to reassure all employees that the reports of a Syndicate backed nuclear attack on [station_name()] are, in fact, a hoax. Have a secure day!"
if(STATION_EVACUATED)
news_message = "The crew of [station_name()] has been evacuated amid unconfirmed reports of enemy activity."
- if(GANG_LOSS)
- news_message = "Organized crime aboard [station_name()] has been stamped out by members of our ever vigilant security team. Remember to thank your assigned officers today!"
- if(GANG_TAKEOVER)
- news_message = "Contact with [station_name()] has been lost after a sophisticated hacking attack by organized criminal elements. Stay vigilant!"
if(BLOB_WIN)
news_message = "[station_name()] was overcome by an unknown biological outbreak, killing all crew on board. Don't let it happen to you! Remember, a clean work station is a safe work station."
if(BLOB_NUKE)
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index dc78eea396..0d4f7810c6 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -75,12 +75,7 @@ GLOBAL_LIST_INIT(huds, list(
//MOB PROCS
/mob/proc/reload_huds()
- var/gang_huds = list()
- if(SSticker.mode)
- for(var/datum/gang/G in SSticker.mode.gangs)
- gang_huds += G.ganghud
-
- for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds|GLOB.active_alternate_appearances))
+ for(var/datum/atom_hud/hud in (GLOB.huds|GLOB.active_alternate_appearances))
if(hud && hud.hudusers[src])
hud.add_hud_to(src)
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index af44f9c8ae..0634d40806 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -56,7 +56,6 @@
var/list/antag_datums
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
- var/datum/gang/gang_datum //Which gang this mind belongs to, if any
var/damnation_type = 0
var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
var/hasSoul = TRUE // If false, renders the character unable to sell their soul.
@@ -228,11 +227,6 @@
remove_objectives()
remove_antag_equip()
-
-/datum/mind/proc/remove_gang()
- SSticker.mode.remove_gangster(src,0,1,1)
- remove_objectives()
-
/datum/mind/proc/remove_antag_equip()
var/list/Mob_Contents = current.get_contents()
for(var/obj/item/I in Mob_Contents)
@@ -251,14 +245,11 @@
remove_wizard()
remove_cultist()
remove_rev()
- remove_gang()
SSticker.mode.update_changeling_icons_removed(src)
SSticker.mode.update_traitor_icons_removed(src)
SSticker.mode.update_wiz_icons_removed(src)
SSticker.mode.update_cult_icons_removed(src)
SSticker.mode.update_rev_icons_removed(src)
- if(gang_datum)
- gang_datum.remove_gang_hud(src)
/datum/mind/proc/equip_traitor(var/employer = "The Syndicate", var/silent = FALSE)
if(!current)
@@ -328,9 +319,6 @@
if(iscultist(creator))
SSticker.mode.add_cultist(src)
- else if(is_gangster(creator))
- SSticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE)
-
else if(is_revolutionary_in_general(creator))
SSticker.mode.add_revolutionary(src)
@@ -378,7 +366,6 @@
var/list/sections = list(
"revolution",
- "gang",
"cult",
"wizard",
"changeling",
@@ -438,46 +425,6 @@
sections["revolution"] = text
- /** GANG ***/
- text = "gang"
- if (SSticker.mode.config_tag=="gang")
- text = uppertext(text)
- text = "[text]: "
- text += "[current.isloyal() ? "LOYAL" : "loyal"]|"
- if(src in SSticker.mode.get_all_gangsters())
- text += "none"
- else
- text += "NONE"
-
- if(current && current.client && (ROLE_GANG in current.client.prefs.be_special))
- text += "|Enabled in Prefs
"
- else
- text += "|Disabled in Prefs
"
-
- for(var/datum/gang/G in SSticker.mode.gangs)
- text += "[G.name]: "
- if(src in (G.gangsters))
- text += "GANGSTER"
- else
- text += "gangster"
- text += "|"
- if(src in (G.bosses))
- text += "GANG LEADER"
- text += "|Equipment: give"
- var/list/L = current.get_contents()
- var/obj/item/device/gangtool/gangtool = locate() in L
- if (gangtool)
- text += "|take"
-
- else
- text += "gang leader"
- text += "
"
-
- if(GLOB.gang_colors_pool.len)
- text += "Create New Gang"
-
- sections["gang"] = text
-
/** Abductors **/
text = "Abductor"
if(SSticker.mode.config_tag == "abductor")
@@ -1018,73 +965,6 @@
-//////////////////// GANG MODE
-
- else if (href_list["gang"])
- switch(href_list["gang"])
- if("clear")
- remove_gang()
- message_admins("[key_name_admin(usr)] has de-gang'ed [current].")
- log_admin("[key_name(usr)] has de-gang'ed [current].")
-
- if("equip")
- switch(SSticker.mode.equip_gang(current,gang_datum))
- if(1)
- to_chat(usr, "Unable to equip territory spraycan!")
- if(2)
- to_chat(usr, "Unable to equip recruitment pen and spraycan!")
- if(3)
- to_chat(usr, "Unable to equip gangtool, pen, and spraycan!")
-
- if("takeequip")
- var/list/L = current.get_contents()
- for(var/obj/item/pen/gang/pen in L)
- qdel(pen)
- for(var/obj/item/device/gangtool/gangtool in L)
- qdel(gangtool)
- for(var/obj/item/toy/crayon/spraycan/gang/SC in L)
- qdel(SC)
-
- if("new")
- if(GLOB.gang_colors_pool.len)
- var/list/names = list("Random") + GLOB.gang_name_pool
- var/gangname = input("Pick a gang name.","Select Name") as null|anything in names
- if(gangname && GLOB.gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time
- if(!(gangname in GLOB.gang_name_pool))
- gangname = null
- var/datum/gang/newgang = new(null,gangname)
- SSticker.mode.gangs += newgang
- message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.")
- log_admin("[key_name(usr)] has created the [newgang.name] Gang.")
-
- else if (href_list["gangboss"])
- var/datum/gang/G = locate(href_list["gangboss"]) in SSticker.mode.gangs
- if(!G || (src in G.bosses))
- return
- SSticker.mode.remove_gangster(src,0,2,1)
- G.bosses[src] = GANGSTER_BOSS_STARTING_INFLUENCE
- gang_datum = G
- special_role = "[G.name] Gang Boss"
- G.add_gang_hud(src)
- to_chat(current, "You are a [G.name] Gang Boss!")
- message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.")
- log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.")
- SSticker.mode.forge_gang_objectives(src)
- SSticker.mode.greet_gang(src,0)
-
- else if (href_list["gangster"])
- var/datum/gang/G = locate(href_list["gangster"]) in SSticker.mode.gangs
- if(!G || (src in G.gangsters))
- return
- SSticker.mode.remove_gangster(src,0,2,1)
- SSticker.mode.add_gangster(src,G,0)
- message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).")
- log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).")
-
-/////////////////////////////////
-
-
-
else if (href_list["cult"])
switch(href_list["cult"])
if("clear")
@@ -1570,16 +1450,6 @@
var/fail = 0
fail |= !SSticker.mode.equip_revolutionary(current)
-
-/datum/mind/proc/make_Gang(datum/gang/G)
- special_role = "[G.name] Gang Boss"
- G.bosses += src
- gang_datum = G
- G.add_gang_hud(src)
- SSticker.mode.forge_gang_objectives(src)
- SSticker.mode.greet_gang(src)
- SSticker.mode.equip_gang(current,G)
-
/datum/mind/proc/make_Abductor()
var/role = alert("Abductor Role ?","Role","Agent","Scientist")
var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4)
diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm
index 26279ece7e..4fba08101c 100644
--- a/code/game/gamemodes/antag_hud.dm
+++ b/code/game/gamemodes/antag_hud.dm
@@ -48,41 +48,4 @@
newhud.join_hud(current)
/datum/mind/proc/leave_all_antag_huds()
- for(var/datum/atom_hud/antag/hud in GLOB.huds)
- if(hud.hudusers[current])
- hud.leave_hud(current)
-
-/datum/atom_hud/antag/gang
- var/color = null
-
-/datum/atom_hud/antag/gang/add_to_hud(atom/A)
- if(!A)
- return
- var/image/holder = A.hud_list[ANTAG_HUD]
- if(holder)
- holder.color = color
- ..()
-
-/datum/atom_hud/antag/gang/remove_from_hud(atom/A)
- if(!A)
- return
- var/image/holder = A.hud_list[ANTAG_HUD]
- if(holder)
- holder.color = null
- ..()
-
-/datum/atom_hud/antag/gang/join_hud(mob/M)
- if(!istype(M))
- CRASH("join_hud(): [M] ([M.type]) is not a mob!")
- var/image/holder = M.hud_list[ANTAG_HUD]
- if(holder)
- holder.color = color
- ..()
-
-/datum/atom_hud/antag/gang/leave_hud(mob/M)
- if(!istype(M))
- CRASH("leave_hud(): [M] ([M.type]) is not a mob!")
- var/image/holder = M.hud_list[ANTAG_HUD]
- if(holder)
- holder.color = null
- ..()
+ for(var/datum/atom_hud/antag/hud in GLOB.huds)
\ No newline at end of file
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 1aee6ee7d3..1c134205b2 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -313,7 +313,7 @@
intercepttext += "Central Command has intercepted and partially decoded a Syndicate transmission with vital information regarding their movements. The following report outlines the most \
likely threats to appear in your sector."
var/list/possible_modes = list()
- possible_modes.Add("blob", "changeling", "clock_cult", "cult", "extended", "gang", "malf", "nuclear", "revolution", "traitor", "wizard")
+ possible_modes.Add("blob", "changeling", "clock_cult", "cult", "extended", "malf", "nuclear", "revolution", "traitor", "wizard")
possible_modes -= name //remove the current gamemode to prevent it from being randomly deleted, it will be readded later
for(var/i in 1 to 6) //Remove a few modes to leave four
@@ -571,7 +571,6 @@
/datum/game_mode/proc/remove_antag_for_borging(datum/mind/newborgie)
SSticker.mode.remove_cultist(newborgie, 0, 0)
SSticker.mode.remove_revolutionary(newborgie, 0)
- SSticker.mode.remove_gangster(newborgie, 0, remove_bosses=1)
/datum/game_mode/proc/generate_station_goals()
var/list/possible = list()
diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm
index febef46e74..af138c689e 100644
--- a/code/game/gamemodes/intercept_report.dm
+++ b/code/game/gamemodes/intercept_report.dm
@@ -30,11 +30,6 @@
altogether."
if("extended")
text += "The transmission mostly failed to mention your sector. It is possible that there is nothing in the Syndicate that could threaten your station during this shift."
- if("gang")
- text += "Cybersun Industries representatives claimed that they, in joint research with the Tiger Cooperative, have made a major breakthrough in brainwashing technology, and have \
- made the nanobots that apply the \"conversion\" very small and capable of fitting into usually innocent objects - namely, pens. While they refused to outsource this technology for \
- months to come due to its flaws, they reported some as missing but passed it off to carelessness. At Central Command, we don't like mysteries, and we have reason to believe that this \
- technology was stolen for anti-Nanotrasen use. Be on the lookout for territory claims and unusually violent crew behavior, applying mindshield implants as necessary."
if("malf")
text += "A large ionospheric anomaly recently passed through your sector. Although physically undetectable, ionospherics tend to have an extreme effect on telecommunications equipment \
as well as artificial intelligence units. Closely observe the behavior of artificial intelligence, and treat any machine malfunctions as purposeful. If necessary, termination of the \
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index bbd78ff76a..63a22c4ea1 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -301,10 +301,6 @@
to_chat(S, "This device is attempting to corrupt our entire network; attempting to interact with it is too risky. Aborting.")
return FALSE
-/obj/effect/decal/cleanable/crayon/gang/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- to_chat(S, "Searching... sensor malfunction! Target lost. Aborting.")
- return FALSE
-
/obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
to_chat(S, "Searching... sensor malfunction! Target lost. Aborting.")
return FALSE
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 59e4db9893..f4847e30a7 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -8,7 +8,9 @@
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city."
icon = 'icons/obj/wizard.dmi'
icon_state = "render"
- item_state = "render"
+ item_state = "knife"
+ lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
force = 15
throwforce = 10
w_class = WEIGHT_CLASS_NORMAL
@@ -196,258 +198,6 @@
H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
-
-/////////////////////Multiverse Blade////////////////////
-
-/obj/item/multisword
- name = "multiverse sword"
- desc = "A weapon capable of conquering the universe and beyond. Activate it to summon copies of yourself from others dimensions to fight by your side."
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "multiverse"
- item_state = "multiverse"
- lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- hitsound = 'sound/weapons/bladeslice.ogg'
- flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
- sharpness = IS_SHARP
- force = 20
- throwforce = 10
- w_class = WEIGHT_CLASS_NORMAL
- attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- var/faction = list("unassigned")
- var/cooldown = 0
- var/assigned = "unassigned"
- var/static/list/multiverse = list()
-
-/obj/item/multisword/New()
- ..()
- multiverse += src
-
-
-/obj/item/multisword/Destroy()
- multiverse.Remove(src)
- return ..()
-
-/obj/item/multisword/attack_self(mob/user)
- if(user.mind.special_role == "apprentice")
- to_chat(user, "You know better than to touch your teacher's stuff.")
- return
- if(cooldown < world.time)
- var/faction_check = 0
- for(var/F in faction)
- if(F in user.faction)
- faction_check = 1
- break
- if(faction_check == 0)
- faction = list("[user.real_name]")
- assigned = "[user.real_name]"
- user.faction = list("[user.real_name]")
- to_chat(user, "You bind the sword to yourself. You can now use it to summon help.")
- if(!is_gangster(user))
- var/datum/gang/multiverse/G = new(src, "[user.real_name]")
- SSticker.mode.gangs += G
- G.bosses[user.mind] = 0
- G.add_gang_hud(user.mind)
- user.mind.gang_datum = G
- to_chat(user, "With your new found power you could easily conquer the station!")
- var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
- hijack_objective.owner = user.mind
- user.mind.objectives += hijack_objective
- hijack_objective.explanation_text = "Ensure only [user.real_name] and their copies are on the shuttle!"
- to_chat(user, "Objective #[1]: [hijack_objective.explanation_text]")
- SSticker.mode.traitors += user.mind
- user.mind.special_role = "[user.real_name] Prime"
- else
- var/list/candidates = get_candidates(ROLE_WIZARD)
- if(candidates.len)
- var/client/C = pick(candidates)
- spawn_copy(C, get_turf(user.loc), user)
- to_chat(user, "The sword flashes, and you find yourself face to face with...you!")
- cooldown = world.time + 400
- for(var/obj/item/multisword/M in multiverse)
- if(M.assigned == assigned)
- M.cooldown = cooldown
-
- else
- to_chat(user, "You fail to summon any copies of yourself. Perhaps you should try again in a bit.")
- else
- to_chat(user, "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.")
-
-
-/obj/item/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user)
- var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
- C.prefs.copy_to(M, icon_updates=0)
- M.key = C.key
- M.mind.name = user.real_name
- to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.")
- SSticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE)
- M.real_name = user.real_name
- M.name = user.real_name
- M.faction = list("[user.real_name]")
- if(prob(50))
- var/list/all_species = list()
- for(var/speciestype in subtypesof(/datum/species))
- var/datum/species/S = speciestype
- if(!initial(S.dangerous_existence))
- all_species += speciestype
- M.set_species(pick(all_species), icon_update=0)
- M.update_body()
- M.update_hair()
- M.update_body_parts()
- M.dna.update_dna_identity()
- equip_copy(M)
-
-/obj/item/multisword/proc/equip_copy(var/mob/living/carbon/human/M)
-
- var/obj/item/multisword/sword = new /obj/item/multisword
- sword.assigned = assigned
- sword.faction = list("[assigned]")
-
- var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator")
-
- switch(randomize)
- if("mobster")
- M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform)
- M.put_in_hands_or_del(sword)
-
- if("roman")
- var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire)
- M.equip_to_slot_or_del(new hat(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes)
- M.put_in_hands_or_del(new /obj/item/shield/riot/roman(M))
- M.put_in_hands_or_del(sword)
-
- if("wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head)
- M.put_in_hands_or_del(sword)
- if("cyborg")
- for(var/X in M.bodyparts)
- var/obj/item/bodypart/affecting = X
- affecting.change_bodypart_status(BODYPART_ROBOTIC, FALSE, TRUE)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
- M.put_in_hands_or_del(sword)
-
- if("syndicate")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask)
- M.put_in_hands_or_del(sword)
-
- if("assistant")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
- M.put_in_hands_or_del(sword)
-
- if("animu")
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform)
- M.put_in_hands_or_del(sword)
-
- if("cultist")
- M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.put_in_hands_or_del(sword)
-
- if("highlander")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.put_in_hands_or_del(sword)
-
- if("clown")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/bikehorn(M), slot_l_store)
- M.put_in_hands_or_del(sword)
-
- if("killer")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/kitchen/knife(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/scalpel(M), slot_r_store)
- M.put_in_hands_or_del(sword)
- for(var/obj/item/carried_item in M.get_equipped_items())
- carried_item.add_mob_blood(M)
- for(var/obj/item/I in M.held_items)
- I.add_mob_blood(M)
- if("pirate")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.put_in_hands_or_del(sword)
-
- if("soviet")
- M.equip_to_slot_or_del(new /obj/item/clothing/head/pirate/captain(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate/captain(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
- M.put_in_hands_or_del(sword)
-
- if("officer")
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/jacket/miljacket(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
- M.put_in_hands_or_del(sword)
-
- if("gladiator")
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/gladiator(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
- M.put_in_hands_or_del(sword)
-
-
- else
- return
-
- M.update_body_parts()
-
- var/obj/item/card/id/W = new /obj/item/card/id
- W.icon_state = "centcom"
- W.access += ACCESS_MAINT_TUNNELS
- W.assignment = "Multiverse Traveller"
- W.registered_name = M.real_name
- W.update_label(M.real_name)
- M.equip_to_slot_or_del(W, slot_wear_id)
-
-
/obj/item/voodoo
name = "wicker doll"
desc = "Something creepy about it."
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index 05ba68d51e..76208f54fa 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -97,21 +97,6 @@
var/completion = round(C.get_completion())
return completion
-/obj/effect/countdown/dominator
- name = "dominator countdown"
- text_size = 1
- color = "#ff00ff" // Overwritten when the dominator starts
-
-/obj/effect/countdown/dominator/get_value()
- var/obj/machinery/dominator/D = attached_to
- if(!istype(D))
- return
- else if(D.gang && D.gang.is_dominating)
- var/timer = D.gang.domination_time_remaining()
- return timer
- else
- return "OFFLINE"
-
/obj/effect/countdown/clockworkgate
name = "gateway countdown"
text_size = 1
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 00987d7859..eb84caf15f 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -11,8 +11,6 @@
name = e_name
desc = "A [name] vandalizing the station."
- if(type == "poseur tag")
- type = pick(GLOB.gang_name_pool)
if(alt_icon)
icon = alt_icon
@@ -24,41 +22,3 @@
src.transform = M
add_atom_colour(main, FIXED_COLOUR_PRIORITY)
-
-
-/obj/effect/decal/cleanable/crayon/gang
- layer = HIGH_OBJ_LAYER //Harder to hide
- do_icon_rotate = FALSE //These are designed to always face south, so no rotation please.
- var/datum/gang/gang
- var/datum/mind/user_mind
- var/area/territory
-
-/obj/effect/decal/cleanable/crayon/gang/Initialize(mapload, var/datum/gang/G, var/e_name = "gang tag", var/rotation = 0, var/mob/user)
- if(!type || !G)
- qdel(src)
- user_mind = user.mind
- territory = get_area(src)
- gang = G
- var/newcolor = G.color_hex
- icon_state = G.name
- G.territory_new |= list(territory.type = territory.name)
- //If this isn't tagged by a specific gangster there's no bonus income.
- set_mind_owner(user_mind)
- ..(mapload, newcolor, icon_state, e_name, rotation)
-
-/obj/effect/decal/cleanable/crayon/gang/proc/set_mind_owner(datum/mind/mind)
- if(istype(user_mind) && istype(gang) && islist(gang.tags_by_mind[user_mind])) //Clear us out of old ownership
- gang.tags_by_mind[user_mind] -= src
- if(istype(mind))
- if(!islist(gang.tags_by_mind[mind]))
- gang.tags_by_mind[mind] = list()
- gang.tags_by_mind[mind] += src
- user_mind = mind
-
-/obj/effect/decal/cleanable/crayon/gang/Destroy()
- if(gang)
- gang.territory -= territory.type
- set_mind_owner(null)
- gang.territory_new -= territory.type
- gang.territory_lost |= list(territory.type = territory.name)
- return ..()
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 6ff939482c..ca5fa2c28b 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -54,7 +54,6 @@
var/self_contained = TRUE // If it deletes itself when it is empty
var/list/validSurfaces = list(/turf/open/floor)
- var/gang = FALSE //For marking territory
var/edible = TRUE // That doesn't mean eating it is a good idea
@@ -278,15 +277,6 @@
else if(drawing in numerals)
temp = "number"
- // If a gang member is using a gang spraycan, it'll behave differently
- var/gang_mode = FALSE
- if(gang && user.mind && user.mind.gang_datum)
- gang_mode = TRUE
-
- // discontinue if the area isn't valid for tagging because gang "honour"
- if(gang_mode && (!can_claim_for_gang(user, target)))
- return
-
var/graf_rot
if(drawing in oriented)
switch(user.dir)
@@ -307,8 +297,6 @@
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
var/takes_time = !instant
- if(gang_mode)
- takes_time = TRUE
var/wait_time = 50
if(PAINT_LARGE_HORIZONTAL)
@@ -325,28 +313,21 @@
var/list/turf/affected_turfs = list()
if(actually_paints)
- if(gang_mode)
- // Double check it wasn't tagged in the meanwhile
- if(!can_claim_for_gang(user, target))
- return
- tag_for_gang(user, target)
- affected_turfs += target
- else
- switch(paint_mode)
- if(PAINT_NORMAL)
- new /obj/effect/decal/cleanable/crayon(target, paint_color, drawing, temp, graf_rot)
+ switch(paint_mode)
+ if(PAINT_NORMAL)
+ new /obj/effect/decal/cleanable/crayon(target, paint_color, drawing, temp, graf_rot)
+ 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))
+ new /obj/effect/decal/cleanable/crayon(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
+ affected_turfs += left
+ affected_turfs += right
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))
- new /obj/effect/decal/cleanable/crayon(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
- affected_turfs += left
- affected_turfs += right
- affected_turfs += target
- else
- to_chat(user, "There isn't enough space to paint!")
- return
+ else
+ to_chat(user, "There isn't enough space to paint!")
+ return
if(!instant)
to_chat(user, "You finish drawing \the [temp].")
@@ -385,47 +366,6 @@
else
..()
-/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 || (A.z != ZLEVEL_STATION) || !A.valid_territory)
- to_chat(user, "[A] is unsuitable for tagging.")
- 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, "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/gang/G in SSticker.mode.gangs)
- if(territory.type in (G.territory|G.territory_new))
- . = 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/gangID = user.mind.gang_datum
- var/area/territory = get_area(target)
-
- new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",0,user)
- to_chat(user, "You tagged [territory] for your gang!")
-
/obj/item/toy/crayon/red
icon_state = "crayonred"
paint_color = "#DA0000"
@@ -676,25 +616,9 @@
spray_overlay.color = paint_color
add_overlay(spray_overlay)
-/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/New(loc, datum/gang/G)
- ..()
- if(G)
- paint_color = G.color_hex
- update_icon()
-
-/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
- . = ..()
- if((user.mind && user.mind.gang_datum) || isobserver(user))
- to_chat(user, "This spraycan has been specially modified for tagging territory.")
-
/obj/item/toy/crayon/spraycan/borg
name = "cyborg spraycan"
desc = "A metallic container containing shiny synthesised paint."
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 406f98d631..205d230ecb 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -135,8 +135,6 @@
message_say = "FOR NAR-SIE!"
else if(role == "revolutionary" || role == "head revolutionary")
message_say = "VIVA LA REVOLUTION!"
- else if(user.mind.gang_datum)
- message_say = "[uppertext(user.mind.gang_datum.name)] RULES!"
user.say(message_say)
explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes
user.gib(1, 1)
@@ -192,8 +190,6 @@
message_say = "FOR NAR-SIE!"
else if(role == "revolutionary" || role == "head revolutionary")
message_say = "VIVA LA REVOLUTION!"
- else if(user.mind.gang_datum)
- message_say = "[uppertext(user.mind.gang_datum.name)] RULES!"
user.say(message_say)
target = user
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1)
diff --git a/code/game/objects/items/implants/implant_loyality.dm b/code/game/objects/items/implants/implant_loyality.dm
index 78bcf91026..e25fc8dda6 100644
--- a/code/game/objects/items/implants/implant_loyality.dm
+++ b/code/game/objects/items/implants/implant_loyality.dm
@@ -19,19 +19,12 @@
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
if(..())
- if((target.mind in (SSticker.mode.head_revolutionaries | SSticker.mode.get_gang_bosses())))
+ if((target.mind in (SSticker.mode.head_revolutionaries)))
if(!silent)
target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!")
removed(target, 1)
qdel(src)
return 0
- if(target.mind in SSticker.mode.get_gangsters())
- SSticker.mode.remove_gangster(target.mind)
- if(!silent)
- target.visible_message("[src] was destroyed in the process!", "You feel a sense of peace and security. You are now protected from brainwashing.")
- removed(target, 1)
- qdel(src)
- return 0
if(target.mind in SSticker.mode.revolutionaries)
SSticker.mode.remove_revolutionary(target.mind)
if(!silent)
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 3ae72087c8..20e4170e1a 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -441,24 +441,6 @@
dat += "
PM | "
dat += ""
- for(var/datum/gang/G in SSticker.mode.gangs)
- dat += "
| [G.name] Gang: [round((G.territory.len/GLOB.start_state.num_territories)*100, 1)]% Control | |
"
- for(var/datum/mind/N in G.bosses)
- var/mob/M = N.current
- if(!M)
- dat += "| [N.name]([N.key])Gang Boss body destroyed! | "
- dat += "PM |
"
- else
- dat += "| [M.real_name] (Boss)[M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""] | "
- dat += "PM | "
- dat += "FLW |
"
- for(var/datum/mind/N in G.gangsters)
- var/mob/M = N.current
- if(M)
- dat += "| [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""] | "
- dat += "PM |
"
- dat += "
"
-
if(SSticker.mode.changelings.len > 0)
dat += "
| Changelings | | |
"
for(var/datum/mind/changeling in SSticker.mode.changelings)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index f3de43b6c6..c39cb8fe7d 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -94,13 +94,6 @@
message_admins("[key_name(usr)] spawned a blob with base resource gain [strength].")
log_admin("[key_name(usr)] spawned a blob with base resource gain [strength].")
new/datum/round_event/ghost_role/blob(TRUE, strength)
- if("gangs")
- if(src.makeGangsters())
- message_admins("[key_name(usr)] created gangs.")
- log_admin("[key_name(usr)] created gangs.")
- else
- message_admins("[key_name(usr)] tried to create gangs. Unfortunately, there were not enough candidates available.")
- log_admin("[key_name(usr)] failed create gangs.")
if("centcom")
message_admins("[key_name(usr)] is creating a CentCom response team...")
if(src.makeEmergencyresponseteam())
@@ -804,14 +797,6 @@
else
dat += "Revolutionary | "
- //Gangster
- if(jobban_isbanned(M, "gangster") || isbanned_dept)
- dat += "Gangster | "
- else
- dat += "Gangster | "
-
- dat += "" //Breaking it up so it fits nicer on the screen every 5 entries
-
//Cultist
if(jobban_isbanned(M, "cultist") || isbanned_dept)
dat += "| Cultist | "
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index c8df7f56f1..532064196c 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -17,7 +17,6 @@
Make Cult
Make Clockwork Cult
Make Blob
- Make Gangsters
Make Wizard (Requires Ghosts)
Make Nuke Team (Requires Ghosts)
Make CentCom Response Team (Requires Ghosts)
@@ -358,43 +357,6 @@
return
-
-/datum/admins/proc/makeGangsters()
-
- var/datum/game_mode/gang/temp = new
- if(config.protect_roles_from_antagonist)
- temp.restricted_jobs += temp.protected_jobs
-
- if(config.protect_assistant_from_antagonist)
- temp.restricted_jobs += "Assistant"
-
- var/list/mob/living/carbon/human/candidates = list()
- var/mob/living/carbon/human/H = null
-
- for(var/mob/living/carbon/human/applicant in GLOB.player_list)
- if(ROLE_GANG in applicant.client.prefs.be_special)
- var/turf/T = get_turf(applicant)
- if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION)
- if(!jobban_isbanned(applicant, ROLE_GANG) && !jobban_isbanned(applicant, "Syndicate"))
- if(temp.age_check(applicant.client))
- if(!(applicant.job in temp.restricted_jobs))
- candidates += applicant
-
- if(candidates.len >= 2)
- for(var/needs_assigned=2,needs_assigned>0,needs_assigned--)
- H = pick(candidates)
- if(GLOB.gang_colors_pool.len)
- var/datum/gang/newgang = new()
- SSticker.mode.gangs += newgang
- H.mind.make_Gang(newgang)
- candidates.Remove(H)
- else if(needs_assigned == 2)
- return 0
- return 1
-
- return 0
-
-
/datum/admins/proc/makeOfficial()
var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered to be a CentCom Official?", "deathsquad")
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index 7301724eb6..b675815602 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -50,8 +50,8 @@ GLOBAL_VAR_INIT(highlander, FALSE)
equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(src), slot_ears)
equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(src), slot_head)
equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(src), slot_shoes)
- equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_l_store)
- for(var/obj/item/pinpointer/P in src)
+ equip_to_slot_or_del(new /obj/item/pinpointer/nuke(src), slot_l_store)
+ for(var/obj/item/pinpointer/nuke/P in src)
P.attack_self(src)
var/obj/item/card/id/W = new(src)
W.icon_state = "centcom"
@@ -77,48 +77,3 @@ GLOBAL_VAR_INIT(highlander, FALSE)
to_chat(src, "Your [H1.name] cries out for blood. Claim the lives of others, and your own will be restored!\n\
Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.")
-
-/proc/only_me()
- if(!SSticker.HasRoundStarted())
- alert("The game hasn't started yet!")
- return
-
- for(var/mob/living/carbon/human/H in GLOB.player_list)
- if(H.stat == 2 || !(H.client)) continue
- if(is_special_character(H)) continue
-
- SSticker.mode.traitors += H.mind
- H.mind.special_role = "[H.real_name] Prime"
-
- var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
- hijack_objective.owner = H.mind
- H.mind.objectives += hijack_objective
-
- to_chat(H, "You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side.")
- H.mind.announce_objectives()
-
- var/datum/gang/multiverse/G = new(src, "[H.real_name]")
- SSticker.mode.gangs += G
- G.bosses[H.mind] = 0 //No they don't use influence but this prevents runtimes.
- G.add_gang_hud(H.mind)
- H.mind.gang_datum = G
-
- var/obj/item/slot_item_ID = H.get_item_by_slot(slot_wear_id)
- qdel(slot_item_ID)
- var/obj/item/slot_item_hand = H.get_item_for_held_index(2)
- H.dropItemToGround(slot_item_hand)
-
- var /obj/item/multisword/multi = new(H)
- H.put_in_hands_or_del(multi)
-
- var/obj/item/card/id/W = new(H)
- W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
- W.assignment = "Multiverse Summoner"
- W.registered_name = H.real_name
- W.update_label(H.real_name)
- H.equip_to_slot_or_del(W, slot_wear_id)
-
- message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME!")
- log_admin("[key_name(usr)] used there can be only me.")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 3d89cd49f5..69fe8df8ea 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -615,7 +615,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]")
if(isobserver(M))
- new /obj/effect/gibspawner/generic(get_turf(M))
+ new /obj/effect/gibspawner/generic(get_turf(M))
return
if(confirm == "Yes")
M.gib()
@@ -649,9 +649,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
set desc = "switches between 1x and custom views"
if(view == world.view)
- change_view(input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128))
+ change_view(input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128))
else
- change_view(world.view)
+ change_view(world.view)
log_admin("[key_name(usr)] changed their view range to [view].")
//message_admins("\blue [key_name_admin(usr)] changed their view range to [view].") //why? removed by order of XSI
@@ -970,10 +970,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(istype(H, /datum/atom_hud/antag))
(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr)
- for(var/datum/gang/G in SSticker.mode.gangs)
- var/datum/atom_hud/antag/H = G.ganghud
- (adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr)
-
to_chat(usr, "You toggled your admin antag HUD [adding_hud ? "ON" : "OFF"].")
message_admins("[key_name_admin(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].")
log_admin("[key_name(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].")
@@ -1157,14 +1153,14 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
set category = "Server"
set name = "Toggle Hub"
- world.update_hub_visibility(!GLOB.hub_visibility)
+ world.update_hub_visibility(!GLOB.hub_visibility)
- log_admin("[key_name(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.")
- message_admins("[key_name_admin(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.")
- if (GLOB.hub_visibility && !world.reachable)
+ log_admin("[key_name(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.")
+ message_admins("[key_name_admin(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.")
+ if (GLOB.hub_visibility && !world.reachable)
message_admins("WARNING: The server will not show up on the hub because byond is detecting that a filewall is blocking incoming connections.")
- SSblackbox.add_details("admin_toggle","Toggled Hub Visibility|[GLOB.hub_visibility]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ SSblackbox.add_details("admin_toggle","Toggled Hub Visibility|[GLOB.hub_visibility]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/smite(mob/living/carbon/human/target as mob)
set name = "Smite"
@@ -1208,6 +1204,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(!message)
return
- message_admins("[key_name_admin(usr)] triggered a CentCom recall, with the admiral message of: [message]")
- log_game("[key_name(usr)] triggered a CentCom recall, with the message of: [message]")
+ message_admins("[key_name_admin(usr)] triggered a CentCom recall, with the admiral message of: [message]")
+ log_game("[key_name(usr)] triggered a CentCom recall, with the message of: [message]")
SSshuttle.centcom_recall(SSshuttle.emergency.timer, message)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index a04a34cf00..909df94d14 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -81,8 +81,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
be_special += ROLE_NINJA
if(2048)
be_special += ROLE_MONKEY
- if(4096)
- be_special += ROLE_GANG
if(16384)
be_special += ROLE_ABDUCTOR
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 88ec800c00..c51d0ebbe7 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -22,7 +22,6 @@
var/cooldown = 0
var/obj/item/device/flashlight/F = null
var/can_flashlight = 0
- var/gang //Is this a gang outfit?
var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
//Var modification - PLEASE be careful with this I know who you are and where you live
diff --git a/code/modules/clothing/neck/neck.dm b/code/modules/clothing/neck/neck.dm
index defe797ce7..af3049aefd 100644
--- a/code/modules/clothing/neck/neck.dm
+++ b/code/modules/clothing/neck/neck.dm
@@ -163,6 +163,3 @@
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bling"
item_color = "bling"
-
-/obj/item/clothing/neck/necklace/dope/gang_contraband_value()
- return 2
diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm
new file mode 100644
index 0000000000..7e7d499fac
--- /dev/null
+++ b/code/modules/jobs/job_exp.dm
@@ -0,0 +1,265 @@
+GLOBAL_LIST_EMPTY(exp_to_update)
+GLOBAL_PROTECT(exp_to_update)
+
+
+// Procs
+/datum/job/proc/required_playtime_remaining(client/C)
+ if(!C)
+ return 0
+ if(!config.use_exp_tracking)
+ return 0
+ if(!exp_requirements || !exp_type)
+ return 0
+ if(!job_is_xp_locked(src.title))
+ return 0
+ if(config.use_exp_restrictions_admin_bypass && check_rights(R_ADMIN, FALSE, C.mob))
+ return 0
+ var/isexempt = C.prefs.db_flags & DB_FLAG_EXEMPT
+ if(isexempt)
+ return 0
+ var/my_exp = C.calc_exp_type(get_exp_req_type())
+ var/job_requirement = get_exp_req_amount()
+ if(my_exp >= job_requirement)
+ return 0
+ else
+ return (job_requirement - my_exp)
+
+/datum/job/proc/get_exp_req_amount()
+ if(title in GLOB.command_positions)
+ if(config.use_exp_restrictions_heads_hours)
+ return config.use_exp_restrictions_heads_hours * 60
+ return exp_requirements
+
+/datum/job/proc/get_exp_req_type()
+ if(title in GLOB.command_positions)
+ if(config.use_exp_restrictions_heads_department && exp_type_department)
+ return exp_type_department
+ return exp_type
+
+/proc/job_is_xp_locked(jobtitle)
+ if(!config.use_exp_restrictions_heads && jobtitle in GLOB.command_positions)
+ return FALSE
+ if(!config.use_exp_restrictions_other && !(jobtitle in GLOB.command_positions))
+ return FALSE
+ return TRUE
+
+/client/proc/calc_exp_type(exptype)
+ var/list/explist = prefs.exp.Copy()
+ var/amount = 0
+ var/list/typelist = GLOB.exp_jobsmap[exptype]
+ if(!typelist)
+ return -1
+ for(var/job in typelist["titles"])
+ if(job in explist)
+ amount += explist[job]
+ return amount
+
+/client/proc/get_exp_report()
+ if(!config.use_exp_tracking)
+ return "Tracking is disabled in the server configuration file."
+ var/list/play_records = prefs.exp
+ if(!play_records.len)
+ set_exp_from_db()
+ play_records = prefs.exp
+ if(!play_records.len)
+ return "[key] has no records."
+ var/return_text = list()
+ return_text += ""
+ var/list/exp_data = list()
+ for(var/category in SSjob.name_occupations)
+ if(play_records[category])
+ exp_data[category] = text2num(play_records[category])
+ else
+ exp_data[category] = 0
+ for(var/category in GLOB.exp_specialmap)
+ if(play_records[category])
+ exp_data[category] = text2num(play_records[category])
+ else
+ exp_data[category] = 0
+ if(prefs.db_flags & DB_FLAG_EXEMPT)
+ return_text += "- Exempt (all jobs auto-unlocked)
"
+
+ for(var/dep in exp_data)
+ if(exp_data[dep] > 0)
+ if(exp_data[EXP_TYPE_LIVING] > 0)
+ var/percentage = num2text(round(exp_data[dep]/exp_data[EXP_TYPE_LIVING]*100))
+ return_text += "- [dep] [get_exp_format(exp_data[dep])] ([percentage]%)
"
+ else
+ return_text += "- [dep] [get_exp_format(exp_data[dep])]
"
+ if(config.use_exp_restrictions_admin_bypass && check_rights(R_ADMIN, 0, mob))
+ return_text += "- Admin (all jobs auto-unlocked)
"
+ return_text += "
"
+ var/list/jobs_locked = list()
+ var/list/jobs_unlocked = list()
+ for(var/datum/job/job in SSjob.occupations)
+ if(job.exp_requirements && job.exp_type)
+ if(!job_is_xp_locked(job.title))
+ continue
+ else if(!job.required_playtime_remaining(mob.client))
+ jobs_unlocked += job.title
+ else
+ var/xp_req = job.get_exp_req_amount()
+ jobs_locked += "[job.title] [get_exp_format(text2num(calc_exp_type(job.get_exp_req_type())))] / [get_exp_format(xp_req)] as [job.get_exp_req_type()])"
+ if(jobs_unlocked.len)
+ return_text += "
Jobs Unlocked:- "
+ return_text += jobs_unlocked.Join("
- ")
+ return_text += "
"
+ if(jobs_locked.len)
+ return_text += "
Jobs Not Unlocked:- "
+ return_text += jobs_locked.Join("
- ")
+ return_text += "
"
+ return return_text
+
+
+/client/proc/get_exp_living()
+ if(!prefs.exp)
+ return "No data"
+ var/exp_living = text2num(prefs.exp[EXP_TYPE_LIVING])
+ return get_exp_format(exp_living)
+
+/proc/get_exp_format(expnum)
+ if(expnum > 60)
+ return num2text(round(expnum / 60)) + "h"
+ else if(expnum > 0)
+ return num2text(expnum) + "m"
+ else
+ return "0h"
+
+/datum/controller/subsystem/blackbox/proc/update_exp(mins, ann = FALSE)
+ if(!SSdbcore.Connect())
+ return -1
+ for(var/client/L in GLOB.clients)
+ if(L.is_afk())
+ continue
+ addtimer(CALLBACK(L,/client/proc/update_exp_list,mins,ann),10)
+
+/datum/controller/subsystem/blackbox/proc/update_exp_db()
+ SSdbcore.MassInsert(format_table_name("role_time"),GLOB.exp_to_update,TRUE)
+ LAZYCLEARLIST(GLOB.exp_to_update)
+
+//resets a client's exp to what was in the db.
+/client/proc/set_exp_from_db()
+ if(!config.use_exp_tracking)
+ return -1
+ if(!SSdbcore.Connect())
+ return -1
+ var/datum/DBQuery/exp_read = SSdbcore.NewQuery("SELECT job, minutes FROM [format_table_name("role_time")] WHERE ckey = '[sanitizeSQL(ckey)]'")
+ if(!exp_read.Execute())
+ return -1
+ var/list/play_records = list()
+ while(exp_read.NextRow())
+ play_records[exp_read.item[1]] = text2num(exp_read.item[2])
+
+ for(var/rtype in SSjob.name_occupations)
+ if(!play_records[rtype])
+ play_records[rtype] = 0
+ for(var/rtype in GLOB.exp_specialmap)
+ if(!play_records[rtype])
+ play_records[rtype] = 0
+
+ prefs.exp = play_records
+
+
+//updates player db flags
+/client/proc/update_flag_db(newflag, state = FALSE)
+
+ if(!SSdbcore.Connect())
+ return -1
+
+ if(!set_db_player_flags())
+ return -1
+
+ if((prefs.db_flags & newflag) && !state)
+ prefs.db_flags &= ~newflag
+ else
+ prefs.db_flags |= newflag
+
+ var/datum/DBQuery/flag_update = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET flags = '[prefs.db_flags]' WHERE ckey='[sanitizeSQL(ckey)]'")
+
+ if(!flag_update.Execute())
+ return -1
+
+
+/client/proc/update_exp_list(minutes, announce_changes = FALSE)
+ if(!config.use_exp_tracking)
+ return -1
+ if(!SSdbcore.Connect())
+ return -1
+ var/datum/DBQuery/exp_read = SSdbcore.NewQuery("SELECT job, minutes FROM [format_table_name("role_time")] WHERE ckey = '[sanitizeSQL(ckey)]'")
+ if(!exp_read.Execute())
+ return -1
+ var/list/play_records = list()
+ while(exp_read.NextRow())
+ play_records[exp_read.item[1]] = text2num(exp_read.item[2])
+
+ for(var/rtype in SSjob.name_occupations)
+ if(!play_records[rtype])
+ play_records[rtype] = 0
+ for(var/rtype in GLOB.exp_specialmap)
+ if(!play_records[rtype])
+ play_records[rtype] = 0
+ var/list/old_records = play_records.Copy()
+ if(isliving(mob))
+ if(mob.stat != DEAD)
+ var/rolefound = FALSE
+ play_records[EXP_TYPE_LIVING] += minutes
+ if(announce_changes)
+ to_chat(src,"You got: [minutes] Living EXP!")
+ if(mob.mind.assigned_role)
+ for(var/job in SSjob.name_occupations)
+ if(mob.mind.assigned_role == job)
+ rolefound = TRUE
+ play_records[job] += minutes
+ if(announce_changes)
+ to_chat(src,"You got: [minutes] [job] EXP!")
+ if(!rolefound)
+ for(var/role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])
+ if(mob.mind.assigned_role == role)
+ rolefound = TRUE
+ play_records[role] += minutes
+ if(announce_changes)
+ to_chat(mob,"You got: [minutes] [role] EXP!")
+ if(mob.mind.special_role && !mob.mind.var_edited)
+ var/trackedrole = mob.mind.special_role
+ play_records[trackedrole] += minutes
+ if(announce_changes)
+ to_chat(src,"You got: [minutes] [trackedrole] EXP!")
+ if(!rolefound)
+ play_records["Unknown"] += minutes
+ else
+ play_records[EXP_TYPE_GHOST] += minutes
+ if(announce_changes)
+ to_chat(src,"You got: [minutes] Ghost EXP!")
+ else if(isobserver(mob))
+ play_records[EXP_TYPE_GHOST] += minutes
+ if(announce_changes)
+ to_chat(src,"You got: [minutes] Ghost EXP!")
+ else if(minutes) //Let "refresh" checks go through
+ return
+ prefs.exp = play_records
+
+ for(var/jtype in play_records)
+ if(play_records[jtype] != old_records[jtype])
+ LAZYINITLIST(GLOB.exp_to_update)
+ GLOB.exp_to_update.Add(list(list(
+ "job" = "'[sanitizeSQL(jtype)]'",
+ "ckey" = "'[sanitizeSQL(ckey)]'",
+ "minutes" = play_records[jtype])))
+ addtimer(CALLBACK(SSblackbox,/datum/controller/subsystem/blackbox/proc/update_exp_db),20,TIMER_OVERRIDE|TIMER_UNIQUE)
+
+
+//ALWAYS call this at beginning to any proc touching player flags, or your database admin will probably be mad
+/client/proc/set_db_player_flags()
+ if(!SSdbcore.Connect())
+ return FALSE
+
+ var/datum/DBQuery/flags_read = SSdbcore.NewQuery("SELECT flags FROM [format_table_name("player")] WHERE ckey='[ckey]'")
+
+ if(!flags_read.Execute())
+ return FALSE
+
+ if(flags_read.NextRow())
+ prefs.db_flags = text2num(flags_read.item[1])
+ else if(isnull(prefs.db_flags))
+ prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry.
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 126f3bcf01..a17e73c7bb 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -309,13 +309,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
..()
if(statpanel("Status"))
if(SSticker.HasRoundStarted())
- for(var/datum/gang/G in SSticker.mode.gangs)
- if(G.is_dominating)
- stat(null, "[G.name] Gang Takeover: [max(G.domination_time_remaining(), 0)]")
- if(istype(SSticker.mode, /datum/game_mode/blob))
- var/datum/game_mode/blob/B = SSticker.mode
- if(B.message_sent)
- stat(null, "Blobs to Blob Win: [GLOB.blobs_legit.len]/[B.blobwincount]")
+ var/datum/game_mode/blob/B = SSticker.mode
+ if(B.message_sent)
+ stat(null, "Blobs to Blob Win: [GLOB.blobs_legit.len]/[B.blobwincount]")
/mob/dead/observer/verb/reenter_corpse()
set category = "Ghost"
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index cd6231094c..3a3a051baa 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -560,7 +560,7 @@
// climbing out of a gut
if(attempt_vr(src,"vore_process_resist",args)) return TRUE
-
+
//Breaking out of a container (Locker, sleeper, cryo...)
else if(isobj(loc))
var/obj/C = loc
@@ -740,9 +740,6 @@
if(statpanel("Status"))
if(SSticker && SSticker.mode)
- for(var/datum/gang/G in SSticker.mode.gangs)
- if(G.is_dominating)
- stat(null, "[G.name] Gang Takeover: [max(G.domination_time_remaining(), 0)]")
if(istype(SSticker.mode, /datum/game_mode/blob))
var/datum/game_mode/blob/B = SSticker.mode
if(B.message_sent)
diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm
index 9474b787ea..b0e9d41038 100644
--- a/code/modules/mob/living/silicon/login.dm
+++ b/code/modules/mob/living/silicon/login.dm
@@ -2,5 +2,4 @@
if(mind && SSticker.mode)
SSticker.mode.remove_cultist(mind, 0, 0)
SSticker.mode.remove_revolutionary(mind, 0)
- SSticker.mode.remove_gangster(mind, remove_bosses=1)
..()
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index b7987322a7..a9a2f899fb 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -5,4 +5,3 @@
show_laws(0)
if(mind)
SSticker.mode.remove_revolutionary(mind)
- SSticker.mode.remove_gangster(mind,1,remove_bosses=1)
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 85f32b745d..af03453e45 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -301,16 +301,6 @@
var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]")
query_round_shuttle_name.Execute()
- // Gangs only have one attempt left if the shuttle has
- // docked with the station to prevent suffering from
- // endless dominator delays
- for(var/datum/gang/G in SSticker.mode.gangs)
- if(G.is_dominating)
- G.dom_attempts = 0
- else
- G.dom_attempts = min(1,G.dom_attempts)
-
-
if(SHUTTLE_DOCKED)
if(time_left <= ENGINES_START_TIME)
mode = SHUTTLE_IGNITING
diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm
index 924c37adf6..e864603681 100644
--- a/code/modules/uplink/uplink_item.dm
+++ b/code/modules/uplink/uplink_item.dm
@@ -218,10 +218,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
surplus = 40
include_modes = list(/datum/game_mode/nuclear)
-/datum/uplink_item/dangerous/smg/unrestricted
- item = /obj/item/gun/ballistic/automatic/c20r/unrestricted
- include_modes = list(/datum/game_mode/gang)
-
/datum/uplink_item/dangerous/machinegun
name = "L6 Squad Automatic Weapon"
desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \
@@ -265,7 +261,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/gun/energy/kinetic_accelerator/crossbow
cost = 12
surplus = 50
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/dangerous/flamethrower
name = "Flamethrower"
@@ -274,7 +270,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/flamethrower/full/tank
cost = 4
surplus = 40
- include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/dangerous/sword
name = "Energy Sword"
@@ -361,7 +357,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/reagent_containers/spray/chemsprayer/bioterror
cost = 20
surplus = 0
- include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/virus_grenade
name = "Fungal Tuberculosis Grenade"
@@ -466,7 +462,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
These bullets pack a lot of punch that can knock most targets down, but do limited overall damage."
item = /obj/item/ammo_box/magazine/smgm45
cost = 3
- include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/smg/bag
name = ".45 Ammo Duffel Bag"
@@ -607,7 +603,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/sleeping_carp_scroll
cost = 17
surplus = 0
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/cqc
name = "CQC Manual"
@@ -637,7 +633,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/gun/ballistic/automatic/toy/pistol/riot
cost = 3
surplus = 10
- exclude_modes = list(/datum/game_mode/gang)
/datum/uplink_item/stealthy_weapons/sleepy_pen
name = "Sleepy Pen"
@@ -647,7 +642,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
falls asleep, they will be able to move and act."
item = /obj/item/pen/sleepy
cost = 4
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/soap
name = "Syndicate Soap"
@@ -670,7 +665,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/storage/box/syndie_kit/romerol
cost = 25
cant_discount = TRUE
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/dart_pistol
name = "Dart Pistol"
@@ -778,7 +773,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
move the projector from their hand. Disguised users move slowly, and projectiles pass over them."
item = /obj/item/device/chameleon
cost = 7
- exclude_modes = list(/datum/game_mode/gang)
/datum/uplink_item/stealthy_tools/camera_bug
name = "Camera Bug"
@@ -812,7 +806,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/reagent_containers/syringe/mulligan
cost = 4
surplus = 30
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_tools/emplight
name = "EMP Flashlight"
@@ -840,7 +834,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
//Space Suits and Hardsuits
/datum/uplink_item/suits
category = "Space Suits and Hardsuits"
- exclude_modes = list(/datum/game_mode/gang)
surplus = 40
/datum/uplink_item/suits/space_suit
@@ -891,7 +884,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
in electronic devices, subverts intended functions, and easily breaks security mechanisms."
item = /obj/item/card/emag
cost = 6
- exclude_modes = list(/datum/game_mode/gang)
/datum/uplink_item/device_tools/toolbox
name = "Full Syndicate Toolbox"
@@ -921,7 +913,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
and other supplies helpful for a field medic."
item = /obj/item/storage/firstaid/tactical
cost = 4
- include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/syndietome
name = "Syndicate Tome"
@@ -1038,7 +1030,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
sends you a small beacon that will teleport the larger beacon to your location upon activation."
item = /obj/item/device/sbeacondrop
cost = 14
- exclude_modes = list(/datum/game_mode/gang)
/datum/uplink_item/device_tools/syndicate_bomb
name = "Syndicate Bomb"
@@ -1084,7 +1075,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/item/shield/energy
cost = 16
surplus = 20
- include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/medgun
name = "Medbeam Gun"
@@ -1372,7 +1363,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
you will receive."
item = /obj/item/storage/box/syndicate
cost = 20
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
cant_discount = TRUE
/datum/uplink_item/badass/surplus
@@ -1382,7 +1373,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
item = /obj/structure/closet/crate
cost = 20
player_minimum = 25
- exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
+ exclude_modes = list(/datum/game_mode/nuclear)
cant_discount = TRUE
/datum/uplink_item/badass/surplus/spawn_item(turf/loc, obj/item/device/uplink/U)
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 6d05b89039..0cdee31ae1 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 1e1c153493..a8d98a120f 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -504,12 +504,6 @@
#include "code\game\gamemodes\devil\true_devil\_true_devil.dm"
#include "code\game\gamemodes\devil\true_devil\inventory.dm"
#include "code\game\gamemodes\extended\extended.dm"
-#include "code\game\gamemodes\gang\dominator.dm"
-#include "code\game\gamemodes\gang\gang.dm"
-#include "code\game\gamemodes\gang\gang_datum.dm"
-#include "code\game\gamemodes\gang\gang_items.dm"
-#include "code\game\gamemodes\gang\gang_pen.dm"
-#include "code\game\gamemodes\gang\recaller.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
@@ -871,7 +865,6 @@
#include "code\game\objects\items\implants\implant_exile.dm"
#include "code\game\objects\items\implants\implant_explosive.dm"
#include "code\game\objects\items\implants\implant_freedom.dm"
-#include "code\game\objects\items\implants\implant_gang.dm"
#include "code\game\objects\items\implants\implant_krav_maga.dm"
#include "code\game\objects\items\implants\implant_loyality.dm"
#include "code\game\objects\items\implants\implant_misc.dm"
@@ -1459,6 +1452,7 @@
#include "code\modules\hydroponics\grown\tomato.dm"
#include "code\modules\hydroponics\grown\towercap.dm"
#include "code\modules\jobs\access.dm"
+#include "code\modules\jobs\job_exp.dm"
#include "code\modules\jobs\jobs.dm"
#include "code\modules\jobs\job_types\assistant.dm"
#include "code\modules\jobs\job_types\captain.dm"