diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 4fbae44af79..0bb8c7b21de 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -25,10 +25,12 @@ 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(gang == "A") + if(isnum(mode.A_timer)) + time = max(mode.A_timer, 0) + if(gang == "B") + 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." @@ -70,8 +72,6 @@ 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" @@ -85,6 +85,8 @@ 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") + if(gang) + ticker.mode.message_gangtools(((gang=="A") ? ticker.mode.A_tools : ticker.mode.B_tools),"Hostile takeover cancelled: Dominator is no longer operational.",1,1) SetLuminosity(0) icon_state = "dominator-broken" broken = 1 @@ -154,7 +156,7 @@ 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(alert(user,"With [round((gang_territory/start_state.num_territories)*100, 1)]% station control, a takeover will require [time] seconds.\nYour gang will be unable to gain influence while it is active.\nThe entire station will likely be alerted to it once it starts.\nAre you ready?","Confirm","Ready","Later") == "Ready") if ((!in_range(src, user) || !istype(src.loc, /turf))) return 0 var/area/srcloc = get_area(src.loc) @@ -163,6 +165,7 @@ src.name = "[gang_name(gang)] Gang [src.name]" healthcheck(0) operating = 1 + ticker.mode.message_gangtools(((gang=="A") ? ticker.mode.A_tools : ticker.mode.B_tools),"Hostile takeover in progress: Estimated [time] seconds until victory.") /obj/machinery/dominator/attack_alien(mob/living/user) user.do_attack_animation(src) diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 97ed4eecbcd..197c2d96358 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -123,7 +123,7 @@ 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") + priority_announce("Hostile runtimes detected in all station systems. A network breach by the [gang_name(gang)] Gang has been located in [dominatorloc].","Network Alert") if(get_security_level() != "delta") set_security_level("red") SSshuttle.emergencyNoEscape = 1 @@ -160,7 +160,7 @@ . += 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 << "The Gangtool in your [where] will allow you to purchase items, send messages to your gangsters and 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." var/where2 = mob.equip_in_one_of_slots(T, slots) @@ -168,14 +168,14 @@ 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." + mob << "The recruitment pen in your [where2] will help you get your gang started. Stab unsuspecting crew members with it to recruit them." 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." + 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. All gangsters can use these, so distribute them to grow your influence faster." mob.update_icons() return . @@ -187,24 +187,17 @@ if(!gangtool.can_use(user)) return 0 - var/gang_style_list = list("Gang Colors","Leather Jackets","Fine Suits") + var/gang_style_list = list("Gang Colors","Leather Jackets","Black Suits","White 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 @@ -214,23 +207,14 @@ 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) + if("Black Suits") + new /obj/item/clothing/under/suit_jacket/charcoal(user.loc) + if("White Suits") + new /obj/item/clothing/under/suit_jacket/white(user.loc) return 1 @@ -253,7 +237,7 @@ 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") + priority_announce("Multiple station takeover attempts have made simultaneously. Conflicting hostile runtimes appears to have delayed both attempts.","Network Alert") else if(winner == 1) finished = "A" //Gang A wins else if(winner == 2) @@ -466,25 +450,43 @@ B_lost_names += "[ticker.mode.B_territory_lost[area]], " ticker.mode.B_territory -= area + var/datum/game_mode/gang/gangmode + if(istype(ticker.mode, /datum/game_mode/gang)) + gangmode = ticker.mode + //Calculate and report influence growth ticker.mode.message_gangtools(ticker.mode.A_tools,"[gang_name("A")] Gang Status Report:") - var/A_new = min(999,A + 15 + ticker.mode.A_territory.len) var/A_message = "" - if(A_new != A) - A_message += "Your gang has gained [A_new - A] Influence for holding on to [ticker.mode.A_territory.len] territories." - if(A_new == 999) - A_message += " You cannot gain any more influence without spending some with this device." - A = A_new + if(gangmode && isnum(gangmode.A_timer)) + var/new_time = min(180,gangmode.A_timer - (ticker.mode.A_territory.len * 2)) + if(new_time < gangmode.A_timer) + A_message += "Your takeover has been rushed by [gangmode.A_timer - new_time] seconds for holding on to [ticker.mode.A_territory.len] territories. " + gangmode.A_timer = new_time + A_message += "[gangmode.A_timer] seconds remain in hostile takeover." + else + var/A_new = min(999,A + 15 + ticker.mode.A_territory.len) + if(A_new != A) + A_message += "Your gang has gained [A_new - A] Influence for holding on to [ticker.mode.A_territory.len] territories." + if(A_new == 999) + A_message += " You cannot gain any more influence without spending some with this device." + A = A_new ticker.mode.message_gangtools(ticker.mode.A_tools,A_message,0) ticker.mode.message_gangtools(ticker.mode.B_tools,"[gang_name("B")] Gang Status Report:") - var/B_new = min(999,B + 15 + ticker.mode.B_territory.len) var/B_message = "" - if(B_new != B) - B_message += "Your gang has gained [B_new - B] Influence for holding on to [ticker.mode.B_territory.len] territories." - if(B_new == 999) - B_message += " You cannot gain any more influence without spending some with this device." - B = B_new + if(gangmode && isnum(gangmode.B_timer)) + var/new_time = min(180,gangmode.B_timer - (ticker.mode.B_territory.len * 2)) + if(new_time < gangmode.B_timer) + B_message += "Your takeover has been rushed by [gangmode.B_timer - new_time] seconds for holding on to [ticker.mode.B_territory.len] territories. " + gangmode.B_timer = new_time + B_message += "[gangmode.B_timer] seconds remain in hostile takeover." + else + var/B_new = min(999,B + 15 + ticker.mode.B_territory.len) + if(B_new != B) + B_message += "Your gang has gained [B_new - B] Influence for holding on to [ticker.mode.B_territory.len] territories." + if(B_new == 999) + B_message += " You cannot gain any more influence without spending some with this device." + B = B_new ticker.mode.message_gangtools(ticker.mode.B_tools,B_message,0) @@ -524,9 +526,11 @@ 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.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) + + //Increase outfit stock + for(var/obj/item/device/gangtool/tool in (ticker.mode.A_tools | ticker.mode.B_tools)) + tool.outfits = min(tool.outfits+3,10) //Restart the counter start() diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 05c0ce477d3..c9022b4b7f6 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -13,6 +13,7 @@ var/boss = 1 //If it has the power to promote gang members var/recalling = 0 var/promotions = 0 + var/outfits = 5 /obj/item/device/gangtool/New() //Initialize supply point income if it hasn't already been started if(!ticker.mode.gang_points) @@ -48,10 +49,16 @@ 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)]%
" + if(outfits > 0) + dat += "Create Gang Outfit
" + else + dat += "Create Gang Outfit (Restocking)
" dat += "Send Gang-wide Message
" if(gangmode) dat += "Recall Emergency Shuttle
" + dat += "
" + dat += "Influence: [points]
" dat += "Time until Influence grows: [(points >= 999) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
" dat += "
" @@ -84,23 +91,17 @@ dat += "
" dat += "Purchase Utilities:
" - dat += "(10 Influence) " - if(points >= 10) + dat += "(5 Influence) " + if(points >= 5) dat += "Territory Spraycan
" else dat += "Territory Spraycan
" - dat += "(1 Influence) " - if(points >= 1) - dat += "Gang Outfit
" - else - dat += "Gang Outfit
" - dat += "(10 Influence) " if(points >= 10) dat += "Bulletproof Vest
" else - dat += "Bulletproof Vest
" + dat += "Bulletproof Vest
" dat += "(30 Influence) " if(points >= 30) @@ -121,14 +122,14 @@ 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 += "(Estimated Takeover Time: [round(max(180,900 - ((round((gang_territory/start_state.num_territories)*200, 10) - 60) * 15))/60,1)] minutes)
" dat += "
" dat += "Refresh
" - var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v0.4", 350, 550) + var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v0.4", 340, 600) popup.set_content(dat) popup.open() @@ -150,14 +151,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) + if(points >= 5) item_type = /obj/item/toy/crayon/spraycan/gang - points = 10 + points = 5 if("switchblade") if(points >= 10) item_type = /obj/item/weapon/switchblade @@ -193,18 +190,18 @@ 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 + return + for(var/obj/obj in usrturf) if(obj.density) usr << "There's not enough room here!" - fail = 1 - break - if(!fail && points >= 50) + return + + if(points >= 50) item_type = /obj/machinery/dominator points = 50 @@ -222,6 +219,10 @@ else if(href_list["choice"]) switch(href_list["choice"]) + if("outfit") + if(outfits > 0) + ticker.mode.gang_outfit(usr,src,gang) + outfits -= 1 if("recall") recall(usr) if("ping") diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index e392f101ae7..6fe17405212 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -228,9 +228,9 @@ */ /datum/intercept_text/proc/build_gang(datum/mind/correct_person) - src.text += "

We have recieved reports of a sudden increase of criminal activity in close proximity to our operations within your sector." - src.text += "Ensure law and order is maintained on the station and be on the lookout for unusually territorial behavior from the crew." - src.text += "In the event of a full-scale takeover attempt, sensitive research items are to be secured and the station evacuated ASAP." + src.text += "

We have reports of criminal activity in close proximity to our operations within your sector." + src.text += "Ensure law and order is maintained on the station and be on the lookout for aggressive factionalism within the crew." + src.text += "In the event of a full-scale criminal takeover threat, sensitive research items are to be secured and the station evacuated ASAP." src.text += "

" /datum/intercept_text/proc/build_wizard(datum/mind/correct_person) @@ -289,3 +289,4 @@ */ src.text += "These lifeforms are associated with the [orgname1] [orgname2] and may be attempting to acquire sensitive materials on their behalf. " src.text += "Please take care not to alarm the crew, as [cname] may take advantage of a panic situation. Remember, they can be anybody, suspect everybody!" + src.text += "

" \ No newline at end of file diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 0331e5cf8cb..9159c1a6e6a 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -95,24 +95,22 @@ if(user.mind in ticker.mode.A_bosses) if(ticker.mode.add_gangster(M.mind,"A")) M.Paralyse(5) - cooldown(ticker.mode.A_gang.len, ) + cooldown(max(0,ticker.mode.B_gang.len - ticker.mode.A_gang.len)) else user << "This mind is resistant to recruitment!" else if(user.mind in ticker.mode.B_bosses) if(ticker.mode.add_gangster(M.mind,"B")) M.Paralyse(5) - cooldown(ticker.mode.B_gang.len) + cooldown(max(0,ticker.mode.A_gang.len - ticker.mode.B_gang.len)) else user << "This mind is resistant to recruitment!" else user << "This mind is so vacant that it is not susceptible to influence!" /obj/item/weapon/pen/gang/proc/cooldown(modifier) - if(!modifier) - return cooldown = 1 icon_state = "pen_blink" - spawn(1200) + spawn(max(50,1200-(modifier*100))) cooldown = 0 icon_state = "pen" var/mob/M = get(src, /mob) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 48f4b74cd9c..3e363056825 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -31,7 +31,6 @@ caliber = ".45" projectile_type = /obj/item/projectile/bullet/midbullet - /obj/item/ammo_casing/shotgun name = "shotgun slug" desc = "A 12 gauge lead slug." diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index b1296f8b2cf..342f7234c62 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -157,11 +157,11 @@ ..() icon_state = "c20r45-[round(ammo_count(),2)]" -obj/item/ammo_box/magazine/tommygunm45 - name = "drum magazine (.45)" +obj/item/ammo_box/magazine/tommygunm9mm + name = "drum magazine (9mm)" icon_state = "drum45" - ammo_type = /obj/item/ammo_casing/c45 - caliber = ".45" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" max_ammo = 50 /obj/item/ammo_box/magazine/m50 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 8a6ffca294b..badf178b878 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -231,13 +231,13 @@ /obj/item/weapon/gun/projectile/automatic/tommygun name = "thompson SMG" - desc = "A genuine 'Chicago Typewriter'." + desc = "Based on the classic '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 + mag_type = /obj/item/ammo_box/magazine/tommygunm9mm fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 4 diff --git a/html/changelogs/Ikarrus-gangtweaks.yml b/html/changelogs/Ikarrus-gangtweaks.yml new file mode 100644 index 00000000000..c260c99e114 --- /dev/null +++ b/html/changelogs/Ikarrus-gangtweaks.yml @@ -0,0 +1,42 @@ +################################ +# 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: + - rscadd: "White suits added to gang outfits" + - tweak: "Gang outfits are now free, but are now limited in stock (that replenishes over time)" + - tweak: "While attempting a Hostile Takeover, gangs do not gain influence. Instead, the takeover timer will be reduced by how many territories they control." + - tweak: "Spraycan cost reduced to 5 influence." + - tweak: "Recruitment Pen cooldown increased to 2 minutes, but is reduced if the enemy gang has more members than yours." + - tweak: "Tommy guns no longer deal stamina damage." + - rscdel: "Gangtools can no longer recall the shuttle if the game mode is not Gang War"