From 59d9098d26052a3707b508344b7851307cd1d1b9 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Fri, 5 Jun 2015 23:30:07 -0600 Subject: [PATCH 1/3] Gang Update --- code/game/gamemodes/gang/dominator.dm | 206 ++++++++++++++++++ code/game/gamemodes/gang/gang.dm | 122 +++++++++-- .../devices => gamemodes/gang}/recaller.dm | 129 +++++++---- code/game/objects/items/crayons.dm | 7 +- code/modules/mob/dead/observer/observer.dm | 7 + code/modules/mob/living/living.dm | 12 + code/orphaned procs/priority_announce.dm | 3 +- html/changelogs/Ikarrus-gangupdoot.yml | 46 ++++ icons/obj/crayons.dmi | Bin 1173 -> 984 bytes icons/obj/device.dmi | Bin 27791 -> 27749 bytes icons/obj/machines/dominator.dmi | Bin 0 -> 4191 bytes tgstation.dme | 3 +- 12 files changed, 477 insertions(+), 58 deletions(-) create mode 100644 code/game/gamemodes/gang/dominator.dm rename code/game/{objects/items/devices => gamemodes/gang}/recaller.dm (75%) create mode 100644 html/changelogs/Ikarrus-gangupdoot.yml create mode 100644 icons/obj/machines/dominator.dmi diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm new file mode 100644 index 00000000000..f0f4bbfe2af --- /dev/null +++ b/code/game/gamemodes/gang/dominator.dm @@ -0,0 +1,206 @@ +/obj/machinery/dominator + name = "dominator" + desc = "A visibly sinister device. Looks like you can break it if you hit it enough." + icon = 'icons/obj/machines/dominator.dmi' + icon_state = "dominator" + density = 1 + anchored = 1.0 + layer = 3.6 + var/health = 200 + var/gang + var/operating = 0 + var/broken = 0 + +/obj/machinery/dominator/New() + if(!istype(ticker.mode, /datum/game_mode/gang)) + qdel(src) + return + SetLuminosity(2) + +/obj/machinery/dominator/examine(mob/user) + ..() + if(broken) + user << "It looks completely busted." + return + + var/datum/game_mode/gang/mode = ticker.mode + var/time = null + if(isnum(mode.A_timer)) + time = max(mode.A_timer, 0) + if(isnum(mode.B_timer)) + time = max(mode.B_timer, 0) + if(isnum(time)) + if(time > 0) + user << "Hostile Takeover in progress. Estimated [time] seconds remain." + else + user << "Hostile Takeover of [station_name()] successful. Have a great day." + else + user << "System on standby." + user << "System Integrity: [health/2]%" + + +/obj/machinery/dominator/proc/healthcheck(var/damage) + var/iconname = "dominator" + if(gang) + iconname += "-[gang]" + SetLuminosity(3) + + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread + + health -= damage + + switch(health) + if(101 to INFINITY) + if(prob(damage*2)) + sparks.set_up(5, 1, src) + sparks.start() + if(1 to 100) + sparks.set_up(5, 1, src) + sparks.start() + iconname += "-damaged" + + if(!broken) + if(health <= 0) + set_broken() + else + icon_state = iconname + + if(health <= -50) + new /obj/item/stack/sheet/plasteel(src.loc) + qdel(src) + +/obj/machinery/dominator/proc/set_broken() + var/datum/game_mode/gang/mode = ticker.mode + if(gang == "A") + mode.A_timer = "OFFLINE" + if(gang == "B") + mode.B_timer = "OFFLINE" + if(!isnum(mode.A_timer) && !isnum(mode.B_timer)) + SSshuttle.emergencyNoEscape = 0 + if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) + SSshuttle.emergency.mode = SHUTTLE_DOCKED + SSshuttle.emergency.timer = world.time + priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") + else + priority_announce("All hostile activity within station systems have ceased.","Network Alert") + SetLuminosity(0) + icon_state = "dominator-broken" + broken = 1 + +/obj/machinery/dominator/Destroy() + set_broken() + ..() + +/obj/machinery/dominator/emp_act(severity) + healthcheck(100) + ..() + +/obj/machinery/dominator/ex_act(severity, target) + if(target == src) + qdel(src) + return + switch(severity) + if(1.0) + qdel(src) + if(2.0) + healthcheck(120) + if(3.0) + healthcheck(30) + return + +/obj/machinery/dominator/bullet_act(var/obj/item/projectile/Proj) + if(Proj.damage) + if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + visible_message("[src] was hit by [Proj].") + healthcheck(Proj.damage) + ..() + +/obj/machinery/dominator/blob_act() + healthcheck(110) + +/obj/machinery/dominator/attackby(I as obj, user as mob, params) + + return + +/obj/machinery/dominator/attack_hand(mob/user) + if(operating||broken) + examine(user) + return + + var/datum/game_mode/gang/mode = ticker.mode + var/gang_territory + var/timer + + var/tempgang + if(user.mind in (ticker.mode.A_gang|ticker.mode.A_bosses)) + tempgang = "A" + gang_territory = ticker.mode.A_territory.len + timer = mode.A_timer + else if(user.mind in (ticker.mode.B_gang|ticker.mode.B_bosses)) + tempgang = "B" + gang_territory = ticker.mode.B_territory.len + timer = mode.B_timer + + if(!tempgang) + examine(user) + return + + if(isnum(timer)) //In theory, this shouldn't happen. But if it does, they get this meme + user << "Error: Hostile Takeover is already in progress." + return + + var/time = max(180,900 - ((round((gang_territory/start_state.num_territories)*200, 1) - 60) * 15)) + if(alert(user,"With [round((gang_territory/start_state.num_territories)*100, 1)]% station control, a takeover will require [time] seconds.\nThe entire station will likely be alerted once it starts.\nYour gang must be prepared to defend this device throughout the duration.\nAre you ready?","Confirmation","Yes","No") == "Yes") + if ((!in_range(src, user) || !istype(src.loc, /turf))) + return 0 + var/area/srcloc = get_area(src.loc) + gang = tempgang + mode.domination(gang,1,srcloc.name) + src.name = "[gang_name(gang)] Gang [src.name]" + healthcheck(0) + operating = 1 + +/obj/machinery/dominator/attack_alien(mob/living/user) + user.do_attack_animation(src) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + user.visible_message("[user] smashes against [src] with its claws.",\ + "You smash against [src] with your claws.",\ + "You hear metal scraping.") + healthcheck(15) + +/obj/machinery/dominator/attack_animal(mob/living/user as mob) + if(!isanimal(user)) + return + var/mob/living/simple_animal/M = user + M.do_attack_animation(src) + if(M.melee_damage_upper <= 0) + return + healthcheck(M.melee_damage_upper) + +/obj/machinery/dominator/mech_melee_attack(obj/mecha/M) + if(M.damtype == "brute") + playsound(src, 'sound/effects/bang.ogg', 50, 1) + visible_message("[M.name] has hit [src].") + healthcheck(M.force) + return + +/obj/machinery/dominator/attack_hulk(mob/user) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + user.visible_message("[user] smashes [src].",\ + "You punch [src].",\ + "You hear metal being slammed.") + healthcheck(5) + +/obj/machinery/dominator/attackby(obj/item/weapon/I as obj, mob/living/user as mob, params) + if(istype(I, /obj/item/weapon)) + add_fingerprint(user) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + if( (I.flags&NOBLUDGEON) || !I.force ) + return + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + visible_message("[user] has hit \the [src] with [I].") + if(I.damtype == BURN || I.damtype == BRUTE) + healthcheck(I.force) + return diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 6967dc894c7..874e646e524 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -15,6 +15,10 @@ var/list/A_territory_lost = list() var/list/B_territory_new = list() var/list/B_territory_lost = list() + var/gang_A_style + var/gang_A_headgear + var/gang_B_style + var/gang_B_headgear /datum/game_mode/gang name = "gang war" @@ -26,14 +30,15 @@ recommended_enemies = 2 enemy_minimum_age = 14 var/finished = 0 - var/goal_scalar = 0.5 //Goal = Total territories x goal_scalar - + // Victory timers + var/A_timer = "OFFLINE" + var/B_timer = "OFFLINE" /////////////////////////// //Announces the game type// /////////////////////////// /datum/game_mode/gang/announce() world << "The current game mode is - Gang War!" - world << "A violent turf war has erupted on the station!
Gangsters - Take over the station by claiming more than [round(100*goal_scalar,1)]% of the station!
Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!
" + world << "A violent turf war has erupted on the station!
Gangsters - Take over the station by activating and defending a Dominator!
Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!
" /////////////////////////////////////////////////////////////////////////////// @@ -73,6 +78,15 @@ modePlayer += B_bosses ..() +/datum/game_mode/gang/process(seconds) + if(!finished) + if(isnum(A_timer)) + A_timer -= seconds + if(isnum(B_timer)) + B_timer -= seconds + + ticker.mode.check_win() + /datum/game_mode/gang/proc/assign_bosses() var/datum/mind/boss = pick(antag_candidates) A_bosses += boss @@ -91,7 +105,7 @@ /datum/game_mode/proc/forge_gang_objectives(var/datum/mind/boss_mind) var/datum/objective/rival_obj = new rival_obj.owner = boss_mind - rival_obj.explanation_text = "Claim more than 50% the station before the [(boss_mind in A_bosses) ? gang_name("B") : gang_name("A")] Gang does." + rival_obj.explanation_text = "Preform a hostile takeover of the station with a Dominator." boss_mind.objectives += rival_obj @@ -103,6 +117,17 @@ boss_mind.current << "Objective #[obj_count]: [objective.explanation_text]" obj_count++ +/datum/game_mode/gang/proc/domination(var/gang,var/modifier=1,var/dominatorloc) + if(gang=="A") + A_timer = max(180,900 - ((round((ticker.mode.A_territory.len/start_state.num_territories)*200, 1) - 60) * 15)) * modifier + if(gang=="B") + B_timer = max(180,900 - ((round((ticker.mode.B_territory.len/start_state.num_territories)*200, 1) - 60) * 15)) * modifier + if(gang && dominatorloc) + priority_announce("Hostile runtimes detected in all station systems. A network breach by the [gang_name(gang)] Gang has been traced to [dominatorloc].","Network Alert") + if(get_security_level() != "delta") + set_security_level("red") + SSshuttle.emergencyNoEscape = 1 + /////////////////////////////////////////////////////////////////////////// //This equips the bosses with their gear, and makes the clown not clumsy// /////////////////////////////////////////////////////////////////////////// @@ -134,7 +159,7 @@ mob << "Your Syndicate benefactors were unfortunately unable to get you a Gangtool." else gangtool.register_device(mob) - mob << "The Gangtool in your [where] will allow you to use your influence to purchase items and prevent the station from evacuating before you can take over. Use it to recall the emergency shuttle from anywhere on the station." + mob << "The Gangtool in your [where] will allow you to purchase items, send messages to your gangsters and to recall the emergency shuttle from anywhere on the station." mob << "You can also promote your gang members to lieutenant by giving them an unregistered gangtool. Lieutenants cannot be deconverted and are able to use recruitment pens and gangtools." . += 1 @@ -155,14 +180,84 @@ return . +//Used by recallers when purchasing a gang outfit. First time a gang outfit is purchased the buyer decides a gang style which is stored so gang outfits are uniform +/datum/game_mode/proc/gang_outfit(mob/user,var/obj/item/device/gangtool/gangtool,var/gang) + if(!user || !gangtool || !gang) + return 0 + if(!gangtool.can_use(user)) + return 0 + + var/gang_style_list = list("Gang Colors","Leather Jackets","Fine Suits") + var/style + var/headgear + if(gang == "A") + if(!gang_A_style) + gang_A_style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list + if(gang_A_style && (alert(user,"Include headgear?","Option","Yes","No") == "Yes")) + gang_A_headgear = 1 + style = gang_A_style + headgear = gang_A_headgear + + if(gang == "B") + if(!gang_B_style) + gang_B_style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list + if(gang_B_style && (alert(user,"Include headgear?","Option","Yes","No") == "Yes")) + gang_B_headgear = 1 + style = gang_B_style + headgear = gang_B_headgear + + if(!style) + return 0 + + if(gangtool.can_use(user) && (((gang == "A") ? gang_points.A : gang_points.B) >= 1)) + switch(style) + if("Gang Colors") + if(gang == "A") + new /obj/item/clothing/under/color/blue(user.loc) + if(headgear) + new /obj/item/clothing/mask/bandana/blue(user.loc) + if(gang == "B") + new /obj/item/clothing/under/color/red(user.loc) + if(headgear) + new /obj/item/clothing/mask/bandana/red(user.loc) + if("Leather Jackets") + new /obj/item/clothing/suit/jacket/leather(user.loc) + if(headgear) + if(gang == "A") + new /obj/item/clothing/mask/bandana/blue(user.loc) + if(gang == "B") + new /obj/item/clothing/mask/bandana/red(user.loc) + if("Fine Suits") + new /obj/item/clothing/under/suit_jacket/really_black(user.loc) + if(headgear) + new /obj/item/clothing/head/fedora(user.loc) + + return 1 + + return 0 + ///////////////////////////////////////////// //Checks if the either gang have won or not// ///////////////////////////////////////////// /datum/game_mode/gang/check_win() - if(A_territory.len > (start_state.num_territories * goal_scalar)) - finished = "A" //Gang A wins - else if(B_territory.len > (start_state.num_territories * goal_scalar)) - finished = "B" //Gang B wins + var/winner = 0 + + if(isnum(A_timer)) + if(A_timer < 0) + winner += 1 + if(isnum(B_timer)) + if(B_timer < 0) + winner += 2 + + if(winner) + if(winner == 3) //Edge Case: If both dominators activate at the same time + domination("A",0.5) + domination("B",0.5) + priority_announce("Multiple station takeover attempts have made simultaneously. Conflicting hostile runtimes have delayed both attempts.","Network Alert") + else if(winner == 1) + finished = "A" //Gang A wins + else if(winner == 2) + finished = "B" //Gang B wins /////////////////////////////// //Checks if the round is over// @@ -282,7 +377,7 @@ if(!finished) world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before either gang could claim it!"]" else - world << "The [finished=="A" ? gang_name("A") : gang_name("B")] Gang has claimed over [round(100*goal_scalar,1)]% of the station and has assumed control!" + world << "The [finished=="A" ? gang_name("A") : gang_name("B")] Gang successfully preformed a hostile takeover of the station!!" ..() return 1 @@ -429,12 +524,9 @@ var/A_control = round((ticker.mode.A_territory.len/start_state.num_territories)*100, 1) var/B_control = round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1) ticker.mode.message_gangtools((ticker.mode.A_tools),"Your gang now has [A_control]% control of the station.",0) - ticker.mode.message_gangtools((ticker.mode.A_tools),"The [gang_name("B")] Gang has [B_control]% control of the station.",0,1) + //ticker.mode.message_gangtools((ticker.mode.A_tools),"The [gang_name("B")] Gang has [B_control]% control of the station.",0,1) ticker.mode.message_gangtools((ticker.mode.B_tools),"Your gang now has [B_control]% control of the station.",0) - ticker.mode.message_gangtools((ticker.mode.B_tools),"The [gang_name("A")] Gang has [A_control]% control of the station.",0,1) - - //Victory check - ticker.mode.check_win() + //ticker.mode.message_gangtools((ticker.mode.B_tools),"The [gang_name("A")] Gang has [A_control]% control of the station.",0,1) //Restart the counter start() diff --git a/code/game/objects/items/devices/recaller.dm b/code/game/gamemodes/gang/recaller.dm similarity index 75% rename from code/game/objects/items/devices/recaller.dm rename to code/game/gamemodes/gang/recaller.dm index de3f046635c..e3c83458d92 100644 --- a/code/game/objects/items/devices/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -2,7 +2,7 @@ /obj/item/device/gangtool name = "suspicious device" desc = "A strange device of sorts. Hard to really make out what it actually does just by looking." - icon_state = "recaller" + icon_state = "gangtool" item_state = "walkietalkie" throwforce = 0 w_class = 1.0 @@ -33,30 +33,28 @@ else dat += "Register Device
" else + var/datum/game_mode/gang/gangmode + if(istype(ticker.mode, /datum/game_mode/gang)) + gangmode = ticker.mode + var/gang_size = ((gang == "A")? (ticker.mode.A_gang.len + ticker.mode.A_bosses.len) : (ticker.mode.B_gang.len + ticker.mode.B_bosses.len)) var/gang_territory = ((gang == "A")? ticker.mode.A_territory.len : ticker.mode.B_territory.len) var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B) + var/timer + if(gangmode) + timer = ((gang == "A") ? gangmode.A_timer : gangmode.B_timer) + if(isnum(timer)) + dat += "
Takeover In Progress:
[timer] seconds remain

" dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Lieutenant"]
" - dat += "Organization Size: [gang_size]
" - dat += "Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
" + dat += "Organization Size: [gang_size] | Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
" + dat += "Send Gang-wide Message
" dat += "Recall Emergency Shuttle
" dat += "
" dat += "Influence: [points]
" - dat += "Time until Influence grows: [(points >= 100) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
" - dat += "Purchase Items:
" - - dat += "(5 Influence) " - if(points >= 5) - dat += "Send Gang-wide Message
" - else - dat += "Send Gang-wide Message
" - - dat += "(10 Influence) " - if(points >= 10) - dat += "Territory Spraycan
" - else - dat += "Territory Spraycan
" + dat += "Time until Influence grows: [(points >= 999) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
" + dat += "
" + dat += "Purchase Weapons:
" dat += "(10 Influence) " if(points >= 10) @@ -64,8 +62,8 @@ else dat += "Switchblade
" - dat += "(25 Influence) " - if(points >= 25) + dat += "(20 Influence) " + if(points >= 20) dat += "10mm Pistol
" else dat += "10mm Pistol
" @@ -76,8 +74,29 @@ else dat += "10mm Ammo
" - dat += "(40 Influence) " - if(points >= 40) + dat += "(50 Influence) " + if(points >= 50) + dat += "Thompson SMG
" + else + dat += "Thompson SMG
" + + dat += "
" + dat += "Purchase Utilities:
" + + dat += "(10 Influence) " + if(points >= 10) + dat += "Territory Spraycan
" + else + dat += "Territory Spraycan
" + + dat += "(1 Influence) " + if(points >= 1) + dat += "Gang Outfit
" + else + dat += "Gang Outfit
" + + dat += "(30 Influence) " + if(points >= 30) dat += "Recruitment Pen
" else dat += "Recruitment Pen
" @@ -91,14 +110,23 @@ dat += "Promote a Gangster
" else dat += "Promote a Gangster
" + if(gangmode) + dat += "(50 Influence) " + if(points >= 50) + dat += "Station Dominator
" + dat += "(Estimated Takeover Time: [round(max(180,900 - ((round((gang_territory/start_state.num_territories)*200, 10) - 60) * 15))/60,1)] minutes)
" + else + dat += "Station Dominator
" dat += "
" dat += "Refresh
" - var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v0.4") + var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v0.4", 350, 550) popup.set_content(dat) popup.open() + + /obj/item/device/gangtool/Topic(href, href_list) if(!can_use(usr)) return @@ -115,6 +143,10 @@ var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B) var/item_type switch(href_list["purchase"]) + if("outfit") + if(points >= 1) + item_type = ticker.mode.gang_outfit(usr,src,gang) + points = 1 if("spraycan") if(points >= 10) item_type = /obj/item/toy/crayon/spraycan/gang @@ -124,31 +156,56 @@ item_type = /obj/item/weapon/switchblade points = 10 if("pistol") - if(points >= 25) + if(points >= 20) item_type = /obj/item/weapon/gun/projectile/automatic/pistol - points = 25 + points = 20 if("ammo") if(points >= 10) item_type = /obj/item/ammo_box/magazine/m10mm points = 10 + if("SMG") + if(points >= 50) + item_type = /obj/item/weapon/gun/projectile/automatic/tommygun + points = 50 if("pen") - if(points >= 40) + if(points >= 30) item_type = /obj/item/weapon/pen/gang - points = 40 + points = 30 if("gangtool") if((promotions < 3) && (points >= (promotions*20)+10)) item_type = /obj/item/device/gangtool/lt points = (promotions*20)+10 promotions++ + if("dominator") + if(istype(ticker.mode, /datum/game_mode/gang)) + var/datum/game_mode/gang/mode = ticker.mode + if(isnum((gang == "A") ? mode.A_timer : mode.B_timer)) + return + + var/fail = 0 + var/usrarea = get_area(usr.loc) + var/usrturf = get_turf(usr.loc) + if(istype(usrarea,/area/space) || istype(usrturf,/turf/space) || usr.z != 1) + usr << "You can only use this on the station!" + fail = 1 + for(var/obj/obj in usrturf) + if(obj.density) + usr << "There's not enough room here!" + fail = 1 + break + if(!fail && points >= 50) + item_type = /obj/machinery/dominator + points = 50 if(item_type) if(gang == "A") ticker.mode.gang_points.A -= points else if(gang == "B") ticker.mode.gang_points.B -= points - var/obj/purchased = new item_type(get_turf(usr)) - var/mob/living/carbon/human/H = usr - H.put_in_any_hand_if_possible(purchased) + if(ispath(item_type)) + var/obj/purchased = new item_type(get_turf(usr)) + var/mob/living/carbon/human/H = usr + H.put_in_any_hand_if_possible(purchased) ticker.mode.message_gangtools(((gang=="A")? ticker.mode.A_tools : ticker.mode.B_tools), "A [href_list["purchase"]] was purchased by [usr] for [points] Influence.") log_game("A [href_list["purchase"]] was purchased by [key_name(usr)] for [points] Influence.") @@ -172,17 +229,13 @@ return var/list/members = list() if(gang == "A") - if(ticker.mode.gang_points.A >= 5) - members += ticker.mode.A_bosses | ticker.mode.A_gang - ticker.mode.gang_points.A -= 5 + members += ticker.mode.A_bosses | ticker.mode.A_gang else if(gang == "B") - if(ticker.mode.gang_points.B >= 5) - members += ticker.mode.B_bosses | ticker.mode.B_gang - ticker.mode.gang_points.B -= 5 + members += ticker.mode.B_bosses | ticker.mode.B_gang if(members.len) for(var/datum/mind/ganger in members) if(ganger.current.z <= 2) - ganger.current << "BOSS: [message]" + ganger.current << "GANG BOSS: [message]" message_admins("[key_name_admin(user)] sent a global message to the [gang_name(gang)] Gang ([gang]): [message].") log_game("[key_name(user)] sent a global message to the [gang_name(gang)] Gang ([gang]): [message].") @@ -196,6 +249,7 @@ if(user.mind in (ticker.mode.A_gang | ticker.mode.A_bosses)) ticker.mode.A_tools += src gang = "A" + icon_state = "gangtool-a" if(!(user.mind in ticker.mode.A_bosses)) ticker.mode.remove_gangster(user.mind, 0, 2) ticker.mode.A_bosses += user.mind @@ -206,6 +260,7 @@ else if(user.mind in (ticker.mode.B_gang | ticker.mode.B_bosses)) ticker.mode.B_tools += src gang = "B" + icon_state = "gangtool-b" if(!(user.mind in ticker.mode.B_bosses)) ticker.mode.remove_gangster(user.mind, 0, 2) ticker.mode.B_bosses += user.mind @@ -218,7 +273,7 @@ user << "You have been promoted to Lieutenant!" ticker.mode.forge_gang_objectives(user.mind) ticker.mode.greet_gang(user.mind,0) - user << "The Gangtool you registered will allow you to use your gang's influence to purchase items and prevent the station from evacuating before your gang can take over. Use it to recall the emergency shuttle from anywhere on the station." + user << "The Gangtool you registered will allow you to purchase items, send messages to your gangsters and to recall the emergency shuttle from anywhere on the station." user << "You may also now use recruitment pens to grow your gang membership. Use them on unsuspecting crew members to recruit them." if(!gang) usr << "ACCESS DENIED: Unauthorized user." diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 731a7324b81..0d50ab09e69 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -98,7 +98,7 @@ /obj/item/toy/crayon/spraycan/New() ..() if(gang) - name = "Modified Paint Applicator" + name = "off-brand Rapid Paint Applicator" else name = "NanoTrasen-brand Rapid Paint Applicator" update_icon() @@ -116,7 +116,7 @@ if("Toggle Cap") user << "You [capped ? "Remove" : "Replace"] the cap of the [src]" capped = capped ? 0 : 1 - icon_state = "spraycan[gang ? "_gang" : ""][capped ? "_cap" : ""]" + icon_state = "spraycan[capped ? "_cap" : ""]" update_icon() if("Change Drawing") ..() @@ -155,8 +155,7 @@ overlays += I /obj/item/toy/crayon/spraycan/gang - desc = "A suspicious-looking spraycan modified to use special paint used by gangsters to mark territory." - icon_state = "spraycan_gang_cap" + desc = "A metallic container containing suspicious paint." gang = 1 uses = 20 instant = -1 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2c411d2778e..5f4793276f2 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -141,6 +141,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(malf.malf_mode_declared && (malf.apcs > 0)) stat(null, "Time left: [max(malf.AI_win_timeleft/malf.apcs, 0)]") + if(istype(ticker.mode, /datum/game_mode/gang)) + var/datum/game_mode/gang/mode = ticker.mode + if(isnum(mode.A_timer)) + stat(null, "[gang_name("A")] Gang Takeover: [max(mode.A_timer, 0)]") + if(isnum(mode.B_timer)) + stat(null, "[gang_name("B")] Gang Takeover: [max(mode.B_timer, 0)]") + /mob/dead/observer/verb/reenter_corpse() set category = "Ghost" set name = "Re-enter Corpse" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 0f1fe82505d..2d30833bfc1 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -816,3 +816,15 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/get_standard_pixel_y_offset(lying = 0) return initial(pixel_y) + +/mob/living/Stat() + ..() + if(statpanel("Status")) + if(ticker) + if(ticker.mode) + if(istype(ticker.mode, /datum/game_mode/gang)) + var/datum/game_mode/gang/mode = ticker.mode + if(isnum(mode.A_timer)) + stat(null, "[gang_name("A")] Gang Takeover: [max(mode.A_timer, 0)]") + if(isnum(mode.B_timer)) + stat(null, "[gang_name("B")] Gang Takeover: [max(mode.B_timer, 0)]") \ No newline at end of file diff --git a/code/orphaned procs/priority_announce.dm b/code/orphaned procs/priority_announce.dm index e085fa783ca..3630b9d58df 100644 --- a/code/orphaned procs/priority_announce.dm +++ b/code/orphaned procs/priority_announce.dm @@ -6,7 +6,8 @@ if(type == "Priority") announcement += "

Priority Announcement

" - + if (title && length(title) > 0) + announcement += "

[html_encode(title)]

" else if(type == "Captain") announcement += "

Captain Announces

" news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null) diff --git a/html/changelogs/Ikarrus-gangupdoot.yml b/html/changelogs/Ikarrus-gangupdoot.yml new file mode 100644 index 00000000000..06a0cd02c07 --- /dev/null +++ b/html/changelogs/Ikarrus-gangupdoot.yml @@ -0,0 +1,46 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Ikarrus + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - experiment: "Gang Updates" + - rscadd: "New objective: To win, Gangs must now buy a Dominator machine (50 influence) and defend it for a varying time frame.
\ + * The location of the dominator is broadcasted to the entire station the moment it is activated
\ + * The more territories the gang controls, the less time it will take
\ + * Gangs no longer win by capturing territories" + - rscadd: "A choice of gang outfits are now purchasable for 1 influence each" + - rscadd: "Thompson SMGs aka \"tommy guns\" are now purchasable for 50 influence" + - tweak: Gang messages are now free to send + - tweak: Prices of pistols and pens reduced to 20 and 30, respectively + - tweak: Gang spraycans have been made a lot less obvious. They look nearly identical to regular ones, now. + - rscdel: Gangs will no longer be notified how much territory the enemy controls \ No newline at end of file diff --git a/icons/obj/crayons.dmi b/icons/obj/crayons.dmi index a3966103053556d20f34a4642bb5b4f9ae7b9305..7d3489285c387f9cf48abbb9955dd9ea9b700403 100644 GIT binary patch delta 866 zcmV-o1D*Vp3D^ga7Y=|30{{R3yS{WkjmkLxdlq;YRT!<8s$O)y~ zzERmav}UudXUp=Fb8#(iRV|8p#h-vdJ1Z{YyxVg&>n;u{IUPA0K=(sjlMrQu6lMzL z;w(acmvPo<45@bD?16HGHU1(UO4|bwUceYP6X6~KERk)^MBTwp=nWN~2OX*Gs7ES_ zQrnh%h}OOSk`!S?RYXZNJtQ$iCBdh2C}|rd{U*3k&NvL@o(;o)4$ehc7oRVD0|_+^ zBW|FJBQ0&Tqax=e_z=$;u8{|&amNpfen`{Y`ETF!|e_mPG?gXpD*Sx zzFaL~e7#x2_;$C2@d5E062B4g8xy|?^~2{oB`Es;s-V?0ycd4*=U&izex%nPe+sA6NyiLy)=HF`}~%q;KAs}`ZrG9 zznqm`uOtNz#`9(U8zt|L&PuaxF7Fu0<0$S^nzw|j-&xqsAJ z^V<}tDx07wzfA$>aDk$HU_PZuMS;>N2=ghSjz?s9No@JNKpFqYEn~)(-=aWI=HR0W sNU-;U?BA(}=eMX}{8riTZ>8UpKcSUCZ~op*%K!iX07*qoM6N<$f;}COh5!Hn delta 1057 zcmV++1m64D2bBqs7Y?8Z0{{R3yb+fl0001lktJ|{z`(#+Sy?eLF=}dRR~Z@10093p zGlz$V;ngmn00001bW%=J06^y0W&i*H)Ou7{bVOxyV{&P5bZKvH004NLm6Od1!Y~Yg z&+Su`?JoXZy~sp%aIY}BE^dXcEotZ6+gsgD5VKnnzJ!pEUE^DgC3|TN^KkRAsYAmOHzapRS_l8^pM05l?0#8p`@*q z^sC@nIpZ*pdsYlzH@NPSfpzP@JATo*xKzb|=gVI;6DqAZj9~r%00Q4hL_t(|ob8(1 zj@mF3Ma}&V2_{o$rk5m&f%5>*;LHui@BIDS4%NpZ`NYo1Acvf z;5Pt%L*O@pe)9bG!Tb)u{0_nVj==mz?>7d1Q{XoTeoNrD1}hl!Pl5g^&_4zGr$GM* zA%qY@2qA=!50j+HoiyoM=P#12-rmt$!Egs&Dg*fo$iF;&Hr2@^I(3fUA7sPqt8AF% zvf=Bur-rG1k5h1e*n9cCfPD1*_386}sZJkp3hq4pQ2&Om`!81M#~r8O&U1cI{|3(c zM^@?Q9hac5AL?J(gZ?Q{ALi2i$M)MyN2H0K=$T&VmEP!s zPT~{%ldgpbA%qY@2qAQ z0*B7v6$^O93SO~s1<`kq5JCtcgb+ex@+)0ixXFtv@fzk?gD6;*|IOwJSTL{3F8d1w zbCnfJGR&12`+@|mUsXwl#qFwKV8O?SC-|;0SRj`R+;$*oAM)I#^6M0ci$E-p7ft>N z+mP!Fq3=HTY5Sz>kXc^9eNM!Gcl;X%SAnW2P<>p`bNn054wjYW<6Euo_%;Q~(ofK9 ze47GF$px|^;CM)j0)?lbI3AK$%@p}862I}dK+(L(eYP3D@hu8OvJZwTK*8t*(buWq z<6Bhl{8btEuTnw?Aw;RV?%F`c9Bb3HgM?AXT19MV{fk_R` zuH4kd(%~{O=h||1cM#;kG4(HtyF(}sj;W8$G8F{nJUHq~9_g!iDF2PghT61(8(CgA+2LwRt_xe<^)>f}5)(SOug1B*}}<>6_*PWj{{ bK7IoUsc2K~+Ez^f00008NkvXXu0mjfaAyhe diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 473e51f6964529e701f7eac80ad4081e64c41904..5a3e80c66f70b2d1be141a9cceeadf9ff0c7d783 100644 GIT binary patch delta 6934 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 diff --git a/icons/obj/machines/dominator.dmi b/icons/obj/machines/dominator.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7671dedff861b71fac4a138d489ec2da8d4212b5 GIT binary patch literal 4191 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 Nzv~f~cl*vJ{1-$j?~DKd literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 55616d11204..76f5720ea0c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -326,7 +326,9 @@ #include "code\game\gamemodes\cult\runes.dm" #include "code\game\gamemodes\cult\talisman.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\recaller.dm" #include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\malfunction\malfunction.dm" #include "code\game\gamemodes\meteor\meteor.dm" @@ -579,7 +581,6 @@ #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\pizza_bomb.dm" #include "code\game\objects\items\devices\powersink.dm" -#include "code\game\objects\items\devices\recaller.dm" #include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\sensor_device.dm" #include "code\game\objects\items\devices\taperecorder.dm" From 351fa89c3aa7af91460210c9c0f821aaaf51ad01 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Thu, 11 Jun 2015 00:11:44 -0600 Subject: [PATCH 2/3] - Renamed tommy guns and made them w_class 5. They're powerful as hell, so they're going to have to be non-concealable. (+3 squashed commit) Squashed commit: [acab7ea] - Gang messages distinct between bosses and lieutenants. - Initial gang points reduced to 25 so they can't buy a pen right away [140e599] 20 -> 10 [b03fbba] Bulletproof vest + Bugfixes (+1 squashed commits) Squashed commits: [b03fbba] Bulletproof vest + Bugfixes --- code/game/gamemodes/gang/dominator.dm | 5 ++++- code/game/gamemodes/gang/gang.dm | 10 +++++----- code/game/gamemodes/gang/recaller.dm | 14 ++++++++++++-- .../projectiles/guns/projectile/automatic.dm | 3 ++- html/changelogs/Ikarrus-gangupdoot.yml | 9 +++++---- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index f0f4bbfe2af..4fbae44af79 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -70,6 +70,8 @@ qdel(src) /obj/machinery/dominator/proc/set_broken() + if(!gang) + return var/datum/game_mode/gang/mode = ticker.mode if(gang == "A") mode.A_timer = "OFFLINE" @@ -88,7 +90,8 @@ broken = 1 /obj/machinery/dominator/Destroy() - set_broken() + if(!broken) + set_broken() ..() /obj/machinery/dominator/emp_act(severity) diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 874e646e524..97ed4eecbcd 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -157,25 +157,25 @@ var/where = mob.equip_in_one_of_slots(gangtool, slots) if (!where) mob << "Your Syndicate benefactors were unfortunately unable to get you a Gangtool." + . += 1 else gangtool.register_device(mob) mob << "The Gangtool in your [where] will allow you to purchase items, send messages to your gangsters and to recall the emergency shuttle from anywhere on the station." mob << "You can also promote your gang members to lieutenant by giving them an unregistered gangtool. Lieutenants cannot be deconverted and are able to use recruitment pens and gangtools." - . += 1 var/where2 = mob.equip_in_one_of_slots(T, slots) if (!where2) mob << "Your Syndicate benefactors were unfortunately unable to get you a recruitment pen to start." + . += 1 else mob << "The recruitment pen in your [where2] will help you get your gang started. Use it on unsuspecting crew members to recruit them." - . += 1 var/where3 = mob.equip_in_one_of_slots(SC, slots) if (!where3) mob << "Your Syndicate benefactors were unfortunately unable to get you a territory spraycan to start." + . += 1 else mob << "The territory spraycan in your [where3] can be used to claim areas of the station for your gang. The more territory your gang controls, the more influence you get. Distribute these to your gangsters to grow your influence faster." - . += 1 mob.update_icons() return . @@ -433,8 +433,8 @@ ////////////////////////////////////////////////////////// /datum/gang_points - var/A = 30 - var/B = 30 + var/A = 25 + var/B = 25 var/next_point_interval = 1800 var/next_point_time diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index e3c83458d92..60637b227cf 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -44,7 +44,7 @@ if(gangmode) timer = ((gang == "A") ? gangmode.A_timer : gangmode.B_timer) if(isnum(timer)) - dat += "
Takeover In Progress:
[timer] seconds remain

" + dat += "
Takeover In Progress:
[timer] seconds remain

" dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Lieutenant"]
" dat += "Organization Size: [gang_size] | Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
" @@ -95,6 +95,12 @@ else dat += "Gang Outfit
" + dat += "(10 Influence) " + if(points >= 10) + dat += "Bulletproof Vest
" + else + dat += "Bulletproof Vest
" + dat += "(30 Influence) " if(points >= 30) dat += "Recruitment Pen
" @@ -167,6 +173,10 @@ if(points >= 50) item_type = /obj/item/weapon/gun/projectile/automatic/tommygun points = 50 + if("vest") + if(points >= 10) + item_type = /obj/item/clothing/suit/armor/bulletproof + points = 10 if("pen") if(points >= 30) item_type = /obj/item/weapon/pen/gang @@ -235,7 +245,7 @@ if(members.len) for(var/datum/mind/ganger in members) if(ganger.current.z <= 2) - ganger.current << "GANG BOSS: [message]" + ganger.current << "[boss ? "GANG BOSS" : "Gang Lieutenant"]: [message]" message_admins("[key_name_admin(user)] sent a global message to the [gang_name(gang)] Gang ([gang]): [message].") log_game("[key_name(user)] sent a global message to the [gang_name(gang)] Gang ([gang]): [message].") diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index fdec6f437b9..8a6ffca294b 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -230,10 +230,11 @@ return /obj/item/weapon/gun/projectile/automatic/tommygun - name = "tommy gun" + name = "thompson SMG" desc = "A genuine 'Chicago Typewriter'." icon_state = "tommygun" item_state = "shotgun" + w_class = 5 slot_flags = 0 origin_tech = "combat=5;materials=1;syndicate=2" mag_type = /obj/item/ammo_box/magazine/tommygunm45 diff --git a/html/changelogs/Ikarrus-gangupdoot.yml b/html/changelogs/Ikarrus-gangupdoot.yml index 06a0cd02c07..18663d867c5 100644 --- a/html/changelogs/Ikarrus-gangupdoot.yml +++ b/html/changelogs/Ikarrus-gangupdoot.yml @@ -40,7 +40,8 @@ changes: * Gangs no longer win by capturing territories" - rscadd: "A choice of gang outfits are now purchasable for 1 influence each" - rscadd: "Thompson SMGs aka \"tommy guns\" are now purchasable for 50 influence" - - tweak: Gang messages are now free to send - - tweak: Prices of pistols and pens reduced to 20 and 30, respectively - - tweak: Gang spraycans have been made a lot less obvious. They look nearly identical to regular ones, now. - - rscdel: Gangs will no longer be notified how much territory the enemy controls \ No newline at end of file + - rscadd: "Bulletproof armor vests are now purchasable for 10 influence" + - tweak: "Gang messages are now free to send" + - tweak: "Prices of pistols and pens reduced to 20 and 30, respectively" + - tweak: "Gang spraycans have been made a lot less obvious. They look nearly identical to regular ones, now." + - rscdel: "Gangs will no longer be notified how much territory the enemy controls" \ No newline at end of file From 78ec879f2704ad34cf2ead21f4fa89c23c0f8ac2 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Fri, 12 Jun 2015 08:22:42 -0600 Subject: [PATCH 3/3] - Ghosts can hear gang messages - Gang spraycans no longer have a unique name for more stealth --- code/game/gamemodes/gang/recaller.dm | 6 ++++-- code/game/objects/items/crayons.dm | 7 ++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 60637b227cf..addef28d740 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -243,10 +243,12 @@ else if(gang == "B") members += ticker.mode.B_bosses | ticker.mode.B_gang if(members.len) + var/ping = "[boss ? "Gang Boss" : "Gang Lieutenant"]: [message]" for(var/datum/mind/ganger in members) if(ganger.current.z <= 2) - ganger.current << "[boss ? "GANG BOSS" : "Gang Lieutenant"]: [message]" - message_admins("[key_name_admin(user)] sent a global message to the [gang_name(gang)] Gang ([gang]): [message].") + ganger.current << "[ping]" + for(var/mob/M in dead_mob_list) + M << "[gang_name(gang)] [ping]" log_game("[key_name(user)] sent a global message to the [gang_name(gang)] Gang ([gang]): [message].") diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 0d50ab09e69..a512741096f 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -97,10 +97,7 @@ /obj/item/toy/crayon/spraycan/New() ..() - if(gang) - name = "off-brand Rapid Paint Applicator" - else - name = "NanoTrasen-brand Rapid Paint Applicator" + name = "spray can" update_icon() /obj/item/toy/crayon/spraycan/examine(mob/user) @@ -155,7 +152,7 @@ overlays += I /obj/item/toy/crayon/spraycan/gang - desc = "A metallic container containing suspicious paint." + desc = "A modified container containing suspicious paint." gang = 1 uses = 20 instant = -1