mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 22:19:30 +01:00
Gang Update: Implants Edition
- Multiple gang leaders are spawned at round start, the number which depends on server population - Only one boss per gang, the rest are lieutenants - Only the gang boss can recall the shuttle - Gangsters can no longer be promoted mid-game. - Security can once again deconvert gangsters with loyalty implants - A message is shown if the deconversion destroys the implant in the process - Added an Implant Breaker item to the gangtool as a purchasable item for 10 influence each - They are a one-use item that destroys all implants in the target, including loyalty implants - They will also attempt to recruit the target before destroying itself - As this is an implanter it requires the target to remain still for a few seconds to administer it - Implanters no longer work if the target is wearing headgear. Remove them first - Added help text whenever you buy certain items from the gangtool - Spare gangtools now cost 30 influence for everyone - They no longer give you a free pen - Increases domination limit back to 3 - Purchased outfits are automatically equipped in your hand, if possible - Gang boss has a 3 minute window at round start to select an outfit style. If he doesn't select one, the his lieutenants may pick one. No gang outfits can be created without a style picked first. - This is just to give the gang boss the first opportunity to pick an outfit style for his gang - You can now see how many outfits your gangtool has in stock - Outfits are no longer used up if you cancel the style selection prompt - Loyalty implant destruction message has been moved to its Destroy()
This commit is contained in:
@@ -34,8 +34,8 @@
|
||||
var/A_timer = "OFFLINE"
|
||||
var/B_timer = "OFFLINE"
|
||||
//How many attempts at domination each team is allowed
|
||||
var/A_dominations = 2
|
||||
var/B_dominations = 2
|
||||
var/A_dominations = 3
|
||||
var/B_dominations = 3
|
||||
///////////////////////////
|
||||
//Announces the game type//
|
||||
///////////////////////////
|
||||
@@ -54,7 +54,11 @@
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
if(antag_candidates.len >= 2)
|
||||
//Spawn more bosses depending on server population
|
||||
assign_bosses(1)
|
||||
if(num_players() >= 30) //30
|
||||
assign_bosses()
|
||||
if(num_players() >= 40) //40
|
||||
assign_bosses()
|
||||
|
||||
if(!A_bosses.len || !B_bosses.len)
|
||||
@@ -91,20 +95,23 @@
|
||||
|
||||
check_win()
|
||||
|
||||
/datum/game_mode/gang/proc/assign_bosses()
|
||||
/datum/game_mode/gang/proc/assign_bosses(var/leader)
|
||||
if(antag_candidates.len < 2) //Not enough bosses
|
||||
return
|
||||
|
||||
var/datum/mind/boss = pick(antag_candidates)
|
||||
A_bosses += boss
|
||||
antag_candidates -= boss
|
||||
boss.special_role = "[gang_name("A")] Gang (A) Boss"
|
||||
boss.special_role = "[gang_name("A")] Gang (A) [leader ? "Boss" : "Lieutenant"]"
|
||||
boss.restricted_roles = restricted_jobs
|
||||
log_game("[boss.key] has been selected as the boss for the [gang_name("A")] Gang (A)")
|
||||
log_game("[boss.key] has been selected as a [leader ? "Boss" : "Lieutenant"] for the [gang_name("A")] Gang (A)")
|
||||
|
||||
boss = pick(antag_candidates)
|
||||
B_bosses += boss
|
||||
antag_candidates -= boss
|
||||
boss.special_role = "[gang_name("B")] Gang (B) Boss"
|
||||
boss.special_role = "[gang_name("B")] Gang (B) [leader ? "Boss" : "Lieutenant"]"
|
||||
boss.restricted_roles = restricted_jobs
|
||||
log_game("[boss.key] has been selected as the boss for the [gang_name("B")] Gang (B)")
|
||||
log_game("[boss.key] has been selected as a [leader ? "Boss" : "Lieutenant"] for the [gang_name("B")] Gang (B)")
|
||||
|
||||
/datum/game_mode/proc/forge_gang_objectives(var/datum/mind/boss_mind)
|
||||
if(istype(ticker.mode, /datum/game_mode/gang))
|
||||
@@ -127,8 +134,9 @@
|
||||
|
||||
/datum/game_mode/proc/greet_gang(var/datum/mind/boss_mind, var/you_are=1)
|
||||
var/obj_count = 1
|
||||
var/isboss = (boss_mind==A_bosses[1] || boss_mind==B_bosses[1])
|
||||
if (you_are)
|
||||
boss_mind.current << "<FONT size=3 color=red><B>You are the founding member of the [(boss_mind in A_bosses) ? gang_name("A") : gang_name("B")] Gang!</B></FONT>"
|
||||
boss_mind.current << "<FONT size=3 color=red><B>You are [isboss ? "the Boss of" : "a Lieutenant in"] the [(boss_mind in A_bosses) ? gang_name("A") : gang_name("B")] Gang!</B></FONT>"
|
||||
for(var/datum/objective/objective in boss_mind.objectives)
|
||||
boss_mind.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
@@ -151,13 +159,20 @@
|
||||
if(!istype(mob))
|
||||
return
|
||||
|
||||
var/isboss
|
||||
if (mob.mind)
|
||||
isboss = (mob.mind==A_bosses[1] || mob.mind==B_bosses[1])
|
||||
if (mob.mind.assigned_role == "Clown")
|
||||
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
mob.dna.remove_mutation(CLOWNMUT)
|
||||
|
||||
var/obj/item/device/gangtool/gangtool
|
||||
if(isboss)
|
||||
gangtool = new(mob)
|
||||
else
|
||||
var/obj/item/device/gangtool/lt/lt_tool = new(mob)
|
||||
gangtool = lt_tool
|
||||
var/obj/item/weapon/pen/gang/T = new(mob)
|
||||
var/obj/item/device/gangtool/gangtool = new(mob)
|
||||
var/obj/item/toy/crayon/spraycan/gang/SC = new(mob)
|
||||
|
||||
var/list/slots = list (
|
||||
@@ -176,8 +191,9 @@
|
||||
. += 1
|
||||
else
|
||||
gangtool.register_device(mob)
|
||||
mob << "The <b>Gangtool</b> 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 <b>lieutenant</b> by having them use an unregistered gangtool. Unlike regular gangsters, Lieutenants cannot be deconverted and are able to use recruitment pens and gangtools."
|
||||
mob << "The <b>Gangtool</b> in your [where] will allow you to use your influence to purchase weapons and equipment and communicate with your gangsters."
|
||||
if(isboss)
|
||||
mob << "<b>As the Gang Boss</b> you also have the power to recall the emergency shuttle from anywhere on the station."
|
||||
|
||||
var/where2 = mob.equip_in_one_of_slots(T, slots)
|
||||
if (!where2)
|
||||
@@ -198,7 +214,7 @@
|
||||
|
||||
|
||||
//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)
|
||||
/datum/game_mode/proc/gang_outfit(mob/living/carbon/user,var/obj/item/device/gangtool/gangtool,var/gang)
|
||||
if(!user || !gangtool || !gang)
|
||||
return 0
|
||||
if(!gangtool.can_use(user))
|
||||
@@ -208,12 +224,18 @@
|
||||
var/style
|
||||
if(gang == "A")
|
||||
if(!A_style)
|
||||
A_style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list
|
||||
if(gangtool.outfits >=3) //Gives the gang boss a few minutes to pick a style first before someone else gets to
|
||||
A_style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list
|
||||
else
|
||||
user << "<span class='warning'>Your gang boss hasn't picked a style yet!</span>"
|
||||
style = A_style
|
||||
|
||||
if(gang == "B")
|
||||
if(!B_style)
|
||||
B_style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list
|
||||
if(gangtool.outfits >=3) //Gives the gang boss a few minutes to pick a style first before someone else gets to
|
||||
B_style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list
|
||||
else
|
||||
user << "<span class='warning'>Your gang boss hasn't picked a style yet!</span>"
|
||||
style = B_style
|
||||
|
||||
if(!style)
|
||||
@@ -252,6 +274,7 @@
|
||||
outfit.armor = list(melee = 20, bullet = 30, laser = 10, energy = 10, bomb = 20, bio = 0, rad = 0)
|
||||
outfit.desc += " Tailored for the [gang_name(gang)] Gang to offer the wearer moderate protection against ballistics and physical trauma."
|
||||
outfit.gang = gang
|
||||
user.put_in_any_hand_if_possible(outfit)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
@@ -43,4 +43,73 @@
|
||||
cooldown = 0
|
||||
icon_state = "pen"
|
||||
var/mob/M = get(src, /mob)
|
||||
M << "<span class='notice'>\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly.</span>"
|
||||
M << "<span class='notice'>\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly.</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/implant/gang
|
||||
name = "gang implant"
|
||||
desc = "Makes you a gangster or such."
|
||||
activated = 0
|
||||
|
||||
/obj/item/weapon/implant/gang/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Criminal Loyalty Implant<BR>
|
||||
<b>Life:</b> A few seconds after injection.<BR>
|
||||
<b>Important Notes:</b> Illegal<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.<BR>
|
||||
<b>Special Features:</b> This device will also emit a small EMP pulse, destroying any other implants within the host's brain.<BR>
|
||||
<b>Integrity:</b> Implant's EMP function will destroy itself in the process."}
|
||||
return dat
|
||||
|
||||
|
||||
//////////////
|
||||
// IMPLANTS //
|
||||
//////////////
|
||||
|
||||
/obj/item/weapon/implant/gang
|
||||
name = "gang implant"
|
||||
desc = "Makes you a gangster or such."
|
||||
activated = 0
|
||||
var/gang
|
||||
|
||||
/obj/item/weapon/implant/gang/New(loc,var/setgang)
|
||||
..()
|
||||
gang = setgang
|
||||
|
||||
/obj/item/weapon/implant/gang/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Criminal Loyalty Implant<BR>
|
||||
<b>Life:</b> A few seconds after injection.<BR>
|
||||
<b>Important Notes:</b> Illegal<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.<BR>
|
||||
<b>Special Features:</b> This device will also emit a small EMP pulse, destroying any other implants within the host's brain.<BR>
|
||||
<b>Integrity:</b> Implant's EMP function will destroy itself in the process."}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/gang/implanted(mob/target)
|
||||
..()
|
||||
for(var/obj/item/weapon/implant/I in target)
|
||||
if(I != src)
|
||||
qdel(I)
|
||||
|
||||
ticker.mode.remove_gangster(target.mind,0,1,1)
|
||||
if(ticker.mode.add_gangster(target.mind,gang))
|
||||
target.Paralyse(5)
|
||||
else
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the influence of your enemies try to invade your mind!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/implanter/gang
|
||||
name = "implanter-gang"
|
||||
|
||||
/obj/item/weapon/implanter/gang/New(loc,var/gang)
|
||||
if(!gang)
|
||||
qdel(src)
|
||||
return
|
||||
imp = new /obj/item/weapon/implant/gang(src,gang)
|
||||
..()
|
||||
update_icon()
|
||||
@@ -10,10 +10,9 @@
|
||||
throw_range = 7
|
||||
flags = CONDUCT
|
||||
var/gang //Which gang uses this?
|
||||
var/boss = 1 //Is this the original boss?
|
||||
var/boss = 1 //If this gangtool belongs to the big boss
|
||||
var/recalling = 0
|
||||
var/outfits = 3
|
||||
var/free_pen = 0
|
||||
|
||||
/obj/item/device/gangtool/New() //Initialize supply point income if it hasn't already been started
|
||||
if(!ticker.mode.gang_points)
|
||||
@@ -31,15 +30,7 @@
|
||||
var/dat
|
||||
if(!gang)
|
||||
dat += "This device is not registered.<br><br>"
|
||||
if(user.mind in (ticker.mode.A_bosses | ticker.mode.B_bosses))
|
||||
dat += "Give this device to another member of your organization to use to promote them.<hr>"
|
||||
dat += "If this is meant as a spare device for yourself:<br>"
|
||||
dat += "<a href='?src=\ref[src];register=1'>Register Device</a><br>"
|
||||
else if (gang_bosses < 3)
|
||||
dat += "You have been selected for a promotion!<br>"
|
||||
dat += "<a href='?src=\ref[src];register=1'>Register Device</a><br>"
|
||||
else
|
||||
dat += "No promotions available: All positions filled."
|
||||
dat += "<a href='?src=\ref[src];register=1'>Register Device</a><br>"
|
||||
else
|
||||
var/datum/game_mode/gang/gangmode
|
||||
if(istype(ticker.mode, /datum/game_mode/gang))
|
||||
@@ -54,9 +45,9 @@
|
||||
if(isnum(timer))
|
||||
dat += "<center><font color='red'>Takeover In Progress:<br><B>[timer] seconds remain</B></font></center><br>"
|
||||
|
||||
dat += "Registration: <B>[(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Lieutenant"]</B><br>"
|
||||
dat += "Registration: <B>[(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Boss" : "Lieutenant"]</B><br>"
|
||||
dat += "Organization Size: <B>[gang_size]</B> | Station Control: <B>[round((gang_territory/start_state.num_territories)*100, 1)]%</B><br>"
|
||||
dat += "Influence: <B>[points]</B><br>"
|
||||
dat += "Gang Influence: <B>[points]</B> | Outfit Stock: <B>[outfits]</B><br>"
|
||||
dat += "Time until Influence grows: <B>[(points >= 999) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]</B><br>"
|
||||
dat += "<hr>"
|
||||
dat += "<B>Gangtool Functions:</B><br>"
|
||||
@@ -66,7 +57,7 @@
|
||||
dat += "<a href='?src=\ref[src];choice=outfit'>Create Armored Gang Outfit</a><br>"
|
||||
else
|
||||
dat += "<b>Create Gang Outfit</b> (Restocking)<br>"
|
||||
if(gangmode)
|
||||
if(gangmode && boss)
|
||||
dat += "<a href='?src=\ref[src];choice=recall'>Recall Emergency Shuttle</a><br>"
|
||||
|
||||
dat += "<br>"
|
||||
@@ -151,24 +142,23 @@
|
||||
else
|
||||
dat += "C4 Explosive<br>"
|
||||
|
||||
if(free_pen)
|
||||
dat += "(ONE FREE) "
|
||||
dat += "(10 Influence) "
|
||||
if(points >= 10)
|
||||
dat += "<a href='?src=\ref[src];purchase=implant'>Implant Breaker</a><br>"
|
||||
else
|
||||
dat += "(50 Influence) "
|
||||
if(free_pen || (points >= 50))
|
||||
dat += "Implant Breaker<br>"
|
||||
|
||||
dat += "(50 Influence) "
|
||||
if(points >= 50)
|
||||
dat += "<a href='?src=\ref[src];purchase=pen'>Recruitment Pen</a><br>"
|
||||
else
|
||||
dat += "Recruitment Pen<br>"
|
||||
|
||||
var/tool_cost = (boss ? 10 : 30)
|
||||
var/gangtooldesc = "Promote a Gangster ([3-gang_bosses] left)"
|
||||
if(gang_bosses >= 3)
|
||||
gangtooldesc = "Additional Gangtools"
|
||||
dat += "([tool_cost] Influence) "
|
||||
if(points >= tool_cost)
|
||||
dat += "<a href='?src=\ref[src];purchase=gangtool'>[gangtooldesc]</a><br>"
|
||||
dat += "(30 Influence) "
|
||||
if(points >= 30)
|
||||
dat += "<a href='?src=\ref[src];purchase=gangtool'>Spare Gangtool</a><br>"
|
||||
else
|
||||
dat += "[gangtooldesc]<br>"
|
||||
dat += "Spare Gangtool<br>"
|
||||
|
||||
if(gangmode)
|
||||
if(gang == "A" ? !gangmode.A_dominations : !gangmode.B_dominations)
|
||||
@@ -184,7 +174,7 @@
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=\ref[src];choice=refresh'>Refresh</a><br>"
|
||||
|
||||
var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v2.1", 340, 600)
|
||||
var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v2.2", 340, 620)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -196,10 +186,6 @@
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
if(recalling)
|
||||
usr << "<span class='warning'>Device is busy. Shuttle recall in progress.</span>"
|
||||
return
|
||||
|
||||
if(href_list["register"])
|
||||
register_device(usr)
|
||||
|
||||
@@ -230,39 +216,41 @@
|
||||
if(points >= 50)
|
||||
item_type = /obj/item/weapon/gun/projectile/automatic/mini_uzi
|
||||
points = 50
|
||||
if("9mmammo")
|
||||
if(points >= 20)
|
||||
item_type = /obj/item/ammo_box/magazine/uzim9mm
|
||||
points = 20
|
||||
if("scroll")
|
||||
if(points >= 30)
|
||||
item_type = /obj/item/weapon/sleeping_carp_scroll
|
||||
usr << "<span class='notice'>Anyone who reads the <b>sleeping carp scroll</b> will learn secrets of the sleeping carp martial arts style.</span>"
|
||||
points = 30
|
||||
if("wrestlingbelt")
|
||||
if(points >= 20)
|
||||
item_type = /obj/item/weapon/storage/belt/champion/wrestling
|
||||
usr << "<span class='notice'>Anyone wearing the <b>wresting belt</b> will know how to be effective with wrestling.</span>"
|
||||
points = 20
|
||||
if("bostaff")
|
||||
if(points >= 10)
|
||||
item_type = /obj/item/weapon/twohanded/bostaff
|
||||
points = 10
|
||||
if("9mmammo")
|
||||
if(points >= 20)
|
||||
item_type = /obj/item/ammo_box/magazine/uzim9mm
|
||||
points = 20
|
||||
if("C4")
|
||||
if(points >= 10)
|
||||
item_type = /obj/item/weapon/c4
|
||||
points = 10
|
||||
if("pen")
|
||||
if(free_pen)
|
||||
item_type = /obj/item/weapon/pen/gang
|
||||
free_pen = 0
|
||||
points = 0
|
||||
else if(points >= 50)
|
||||
if(points >= 50)
|
||||
item_type = /obj/item/weapon/pen/gang
|
||||
points = 50
|
||||
if("implant")
|
||||
if(points >= 10)
|
||||
item_type = /obj/item/weapon/implanter/gang
|
||||
usr << "<span class='notice'>The <b>implant breaker</b> destroys all other implants within the target before trying to recruit them to your gang. Implant is destroyed after one use.</span>"
|
||||
points = 10
|
||||
if("gangtool")
|
||||
var/tool_cost = (boss ? 10 : 30)
|
||||
if(points >= tool_cost)
|
||||
if(points >= 30)
|
||||
item_type = /obj/item/device/gangtool/lt
|
||||
points = tool_cost
|
||||
points = 30
|
||||
if("dominator")
|
||||
if(istype(ticker.mode, /datum/game_mode/gang))
|
||||
var/datum/game_mode/gang/mode = ticker.mode
|
||||
@@ -285,6 +273,7 @@
|
||||
|
||||
if(points >= 30)
|
||||
item_type = /obj/machinery/dominator
|
||||
usr << "<span class='notice'>The <b>dominator</b> will secure your gang's dominance over the station. Turn it on when you are ready to defend it.</span>"
|
||||
points = 30
|
||||
|
||||
if(item_type)
|
||||
@@ -293,7 +282,7 @@
|
||||
else if(gang == "B")
|
||||
ticker.mode.gang_points.B -= points
|
||||
if(ispath(item_type))
|
||||
var/obj/purchased = new item_type(get_turf(usr))
|
||||
var/obj/purchased = new item_type(get_turf(usr),gang)
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.put_in_any_hand_if_possible(purchased)
|
||||
if(points)
|
||||
@@ -306,11 +295,12 @@
|
||||
else if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("recall")
|
||||
recall(usr)
|
||||
if(boss)
|
||||
recall(usr)
|
||||
if("outfit")
|
||||
if(outfits > 0)
|
||||
ticker.mode.gang_outfit(usr,src,gang)
|
||||
outfits -= 1
|
||||
if(ticker.mode.gang_outfit(usr,src,gang))
|
||||
outfits -= 1
|
||||
if("ping")
|
||||
ping_gang(usr)
|
||||
attack_self(usr)
|
||||
@@ -331,7 +321,7 @@
|
||||
else if(gang == "B")
|
||||
members += ticker.mode.B_bosses | ticker.mode.B_gang
|
||||
if(members.len)
|
||||
var/ping = "<span class='danger'><B><i>[gang_name(gang)] [boss ? "Gang Boss" : "Gang Lieutenant"]</i>: [message]</B></span>"
|
||||
var/ping = "<span class='danger'><B><i>[gang_name(gang)] [boss ? "Gang Boss" : "Lieutenant"] [user.real_name]</i>: [message]</B></span>"
|
||||
for(var/datum/mind/ganger in members)
|
||||
if((ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS))
|
||||
ganger.current << ping
|
||||
@@ -341,46 +331,14 @@
|
||||
|
||||
|
||||
/obj/item/device/gangtool/proc/register_device(var/mob/user)
|
||||
if(!(user.mind in (ticker.mode.A_bosses|ticker.mode.B_bosses)))
|
||||
var/gang_bosses = ((gang == "A")? ticker.mode.A_bosses.len : ticker.mode.B_bosses.len)
|
||||
if(gang_bosses >= 3)
|
||||
user << "<span class='warning'>\icon[src] Error: All positions filled.</span>"
|
||||
return
|
||||
|
||||
if(jobban_isbanned(user, "gangster") || jobban_isbanned(user, "Syndicate"))
|
||||
user << "<span class='warning'>\icon[src] ACCESS DENIED: Blacklisted user.</span>"
|
||||
return 0
|
||||
|
||||
var/promoted
|
||||
if(user.mind in (ticker.mode.A_gang | ticker.mode.A_bosses))
|
||||
if(user.mind in 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
|
||||
user.mind.special_role = "[gang_name("A")] Gang (A) Lieutenant"
|
||||
ticker.mode.update_gang_icons_added(user.mind, "A")
|
||||
log_game("[key_name(user)] has been promoted to Lieutenant in the [gang_name("A")] Gang (A)")
|
||||
promoted = 1
|
||||
else if(user.mind in (ticker.mode.B_gang | ticker.mode.B_bosses))
|
||||
else if(user.mind in 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
|
||||
user.mind.special_role = "[gang_name("B")] Gang (B) Lieutenant"
|
||||
ticker.mode.update_gang_icons_added(user.mind, "B")
|
||||
log_game("[key_name(user)] has been promoted to Lieutenant in the [gang_name("B")] Gang (B)")
|
||||
promoted = 1
|
||||
if(promoted)
|
||||
ticker.mode.message_gangtools(((gang=="A")? ticker.mode.A_tools : ticker.mode.B_tools), "[user] has been promoted to Lieutenant.")
|
||||
user << "<FONT size=3 color=red><B>You have been promoted to Lieutenant!</B></FONT>"
|
||||
ticker.mode.forge_gang_objectives(user.mind)
|
||||
ticker.mode.greet_gang(user.mind,0)
|
||||
user << "The <b>Gangtool</b> 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 << "Unlike regular gangsters, you may use <b>recruitment pens</b> to add recruits to your gang. Use them on unsuspecting crew members to recruit them. Don't forget to get your one free pen from the gangtool."
|
||||
if(!gang)
|
||||
usr << "<span class='warning'>ACCESS DENIED: Unauthorized user.</span>"
|
||||
|
||||
@@ -392,6 +350,7 @@
|
||||
return 0
|
||||
|
||||
var/datum/game_mode/gang/mode = ticker.mode
|
||||
mode.message_gangtools(((gang=="A")? ticker.mode.A_tools : ticker.mode.B_tools), "[usr] is attempting to recall the emergency shuttle.")
|
||||
recalling = 1
|
||||
loc << "<span class='info'>\icon[src]Generating shuttle recall order with codes retrieved from last call signal...</span>"
|
||||
|
||||
@@ -461,4 +420,3 @@
|
||||
/obj/item/device/gangtool/lt
|
||||
boss = 0
|
||||
outfits = 1
|
||||
free_pen = 1
|
||||
|
||||
@@ -238,17 +238,24 @@
|
||||
|
||||
/obj/item/weapon/implant/loyalty/implanted(mob/target)
|
||||
..()
|
||||
if((target.mind in ticker.mode.head_revolutionaries) || is_shadow_or_thrall(target))
|
||||
if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.A_bosses | ticker.mode.B_bosses)) || is_shadow_or_thrall(target))
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
|
||||
return 0
|
||||
if(target.mind in ticker.mode.revolutionaries)
|
||||
ticker.mode.remove_revolutionary(target.mind)
|
||||
if(target.mind in (ticker.mode.cult| ticker.mode.A_bosses | ticker.mode.B_bosses | ticker.mode.A_gang | ticker.mode.B_gang))
|
||||
if(target.mind in (ticker.mode.A_gang | ticker.mode.B_gang))
|
||||
ticker.mode.remove_gangster(target.mind,exclude_bosses=1)
|
||||
target.visible_message("<span class='warning'>[src] was destroyed in the process!</span>", "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>")
|
||||
return
|
||||
if(target.mind in ticker.mode.cult)
|
||||
target << "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>"
|
||||
else
|
||||
target << "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>"
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/loyalty/Destroy()
|
||||
loc << "<span class='notice'><b>You feel a sense of liberation as Nanotrasen's grip on your mind fades away.</b></span>"
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implant/adrenalin
|
||||
name = "adrenal implant"
|
||||
|
||||
@@ -20,11 +20,16 @@
|
||||
if(!iscarbon(M))
|
||||
return
|
||||
if(user && imp)
|
||||
if(M.head)
|
||||
user << "<span class='warning'>[M]'s [M.head.name] is in the way! Take it off first!</span>"
|
||||
return
|
||||
M.visible_message("<span class='warning'>[user] is attemping to implant [M].</span>")
|
||||
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && (M == user || do_after(user, 50, target = M)))
|
||||
if(user && M && (get_turf(M) == T) && src && imp)
|
||||
if(M.head)
|
||||
return
|
||||
M.visible_message("[user] has implanted [M].", "<span class='notice'>[user] implants you with the implant.</span>")
|
||||
add_logs(user, M, "implanted", object="[name]")
|
||||
user << "<span class='notice'>You implant the implant into [M].</span>"
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(I)
|
||||
user.visible_message("[user] successfully removes [I] from [target]'s [target_zone]!", "<span class='notice'>You successfully remove [I] from [target]'s [target_zone].</span>")
|
||||
if(istype(I, /obj/item/weapon/implant/loyalty))
|
||||
target << "<span class='notice'><b>You feel a sense of liberation as Nanotrasen's grip on your mind fades away.</b></span>"
|
||||
qdel(I)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
################################
|
||||
# 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: N3X15
|
||||
|
||||
# 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: "Multiple gang leaders are spawned at round start, the number which depends on server population"
|
||||
- tweak: "Only the gang boss can recall the shuttle"
|
||||
- rscdel: "Gangsters can no longer be promoted mid-game."
|
||||
- rscadd: "Security can once again deconvert gangsters with loyalty implants"
|
||||
- rscadd: "Added an Implant Breaker item to the gangtool as a purchasable item for 10 influence each<BR>* They are a one-use item that destroys all implants in the target, including loyalty implants<BR>* They will also attempt to recruit the target before destroying itself"
|
||||
- rscdel: "Implanters no longer work if the target is wearing headgear. Remove them first."
|
||||
Reference in New Issue
Block a user