diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 9db0d34f83ecc..7db5a3acf652d 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -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 << "You are the founding member of the [(boss_mind in A_bosses) ? gang_name("A") : gang_name("B")] Gang!" + boss_mind.current << "You are [isboss ? "the Boss of" : "a Lieutenant in"] the [(boss_mind in A_bosses) ? gang_name("A") : gang_name("B")] Gang!" for(var/datum/objective/objective in boss_mind.objectives) boss_mind.current << "Objective #[obj_count]: [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,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 recall the emergency shuttle from anywhere on the station." - mob << "You can also promote your gang members to lieutenant 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 Gangtool in your [where] will allow you to purchase weapons and equipment, send messages to your gang, and recall the emergency shuttle from anywhere on the station." var/where2 = mob.equip_in_one_of_slots(T, slots) if (!where2) @@ -198,7 +212,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 +222,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 << "Your gang boss hasn't picked a style yet!" 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 << "Your gang boss hasn't picked a style yet!" style = B_style if(!style) @@ -252,6 +272,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 @@ -305,11 +326,11 @@ carbon_mob.silent = max(carbon_mob.silent, 5) carbon_mob.flash_eyes(1, 1) gangster_mind.current.Stun(5) - gangster_mind.current << "You are now a member of the [gang=="A" ? gang_name("A") : gang_name("B")] Gang!" + gangster_mind.current << "You are now a member of the [gang_name(gang)] Gang!" gangster_mind.current << "Help your bosses take over the station by claiming territory with special spraycans only they can provide. Simply spray on any unclaimed area of the station." gangster_mind.current << "You can identify your bosses by their red \[G\] icon." - gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]!" - gangster_mind.special_role = "[gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]" + gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [gang_name(gang)] Gang ([gang])!" + gangster_mind.special_role = "[gang_name(gang)] Gang ([gang])" update_gang_icons_added(gangster_mind,gang) return 2 //////////////////////////////////////////////////////////////////// @@ -340,13 +361,13 @@ gangster_mind.special_role = null if(silent < 2) - gangster_mind.current.attack_log += "\[[time_stamp()]\] Has reformed and defected from the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]!" + gangster_mind.current.attack_log += "\[[time_stamp()]\] Has reformed and defected from the [gang_name(gang)] Gang ([gang])!" if(beingborged) if(!silent) gangster_mind.current.visible_message("The frame beeps contentedly from the MMI before initalizing it.") gangster_mind.current << "The frame's firmware detects and deletes your criminal behavior! You are no longer a gangster!" - message_admins("[key_name_admin(gangster_mind.current)] ? (FLW) has been borged while being a member of the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"] Gang. They are no longer a gangster.") + message_admins("[key_name_admin(gangster_mind.current)] ? (FLW) has been borged while being a member of the [gang_name(gang)] Gang ([gang]). They are no longer a gangster.") else if(!silent) gangster_mind.current.Paralyse(5) @@ -397,7 +418,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 successfully performed a hostile takeover of the station!!" + world << "The [get_gang_bosses(finished)] Gang successfully performed a hostile takeover of the station!!" ..() return 1 diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index 0b978d39c4f49..679f0aa6a5966 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -6,10 +6,11 @@ var/cooldown /obj/item/weapon/pen/gang/attack(mob/living/M, mob/user) - if(!istype(M)) return - if(..(M,user,1)) - if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && ((user.mind in ticker.mode.A_bosses) || (user.mind in ticker.mode.B_bosses))) + if(!istype(M)) + return + if(ishuman(M) && ishuman(user) && M.stat != DEAD) + if(user.mind && ((user.mind in ticker.mode.A_bosses) || (user.mind in ticker.mode.B_bosses))) + if(..(M,user,1)) if(cooldown) user << "[src] needs more time to recharge before it can be used." return @@ -35,6 +36,8 @@ user << "This mind is resistant to recruitment!" else user << "This mind has already been recruited into a gang!" + return + ..() /obj/item/weapon/pen/gang/proc/cooldown(modifier) cooldown = 1 @@ -43,4 +46,52 @@ cooldown = 0 icon_state = "pen" var/mob/M = get(src, /mob) - M << "\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly." \ No newline at end of file + M << "\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly." + + +////////////// +// 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 = {"Implant Specifications:
+ Name: Criminal Loyalty Implant
+ Life: A few seconds after injection.
+ Important Notes: Illegal
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.
+ Special Features: This device will also emit a small EMP pulse, destroying any other implants within the host's brain.
+ Integrity: 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("[target] seems to resist the implant!", "You feel the influence of your enemies try to invade your mind!") + qdel(src) + +/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() \ No newline at end of file diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index f8bfa02bbd8d2..ca88f7c986bb8 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -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) @@ -26,26 +25,16 @@ if (!can_use(user)) return - var/gang_bosses = ((gang == "A")? ticker.mode.A_bosses.len : ticker.mode.B_bosses.len) - var/dat if(!gang) dat += "This device is not registered.

" - 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.
" - dat += "If this is meant as a spare device for yourself:
" - dat += "Register Device
" - else if (gang_bosses < 3) - dat += "You have been selected for a promotion!
" - dat += "Register Device
" - else - dat += "No promotions available: All positions filled." + 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_bosses + ((gang == "A")? ticker.mode.A_gang.len : ticker.mode.B_gang.len) + var/gang_size = ((gang == "A")? (ticker.mode.A_bosses.len+ticker.mode.A_gang.len) : (ticker.mode.B_bosses.len+ticker.mode.B_gang.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 @@ -54,9 +43,9 @@ 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 += "Registration: [gang_name(gang)] Gang [boss ? "Boss" : "Lieutenant"]
" dat += "Organization Size: [gang_size] | Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
" - dat += "Influence: [points]
" + dat += "Gang Influence: [points] | Outfit Stock: [outfits]
" dat += "Time until Influence grows: [(points >= 999) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
" dat += "
" dat += "Gangtool Functions:
" @@ -151,24 +140,23 @@ else dat += "C4 Explosive
" - if(free_pen) - dat += "(ONE FREE) " + dat += "(10 Influence) " + if(points >= 10) + dat += "Implant Breaker
" else - dat += "(50 Influence) " - if(free_pen || (points >= 50)) + dat += "Implant Breaker
" + + dat += "(50 Influence) " + if(points >= 50) dat += "Recruitment Pen
" else dat += "Recruitment Pen
" - 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 += "[gangtooldesc]
" + dat += "(30 Influence) " + if(points >= 30) + dat += "Spare Gangtool
" else - dat += "[gangtooldesc]
" + dat += "Spare Gangtool
" if(gangmode) if(gang == "A" ? !gangmode.A_dominations : !gangmode.B_dominations) @@ -184,7 +172,7 @@ dat += "
" dat += "Refresh
" - 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() @@ -230,39 +218,42 @@ 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 << "Anyone who reads the sleeping carp scroll will learn secrets of the sleeping carp martial arts style." points = 30 if("wrestlingbelt") if(points >= 20) item_type = /obj/item/weapon/storage/belt/champion/wrestling + usr << "Anyone wearing the wresting belt will know how to be effective with wrestling." 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 + usr << "More recruitmen pens will allow you to recruit gangsters faster. Only gang leaders can recruit with pens." points = 50 + if("implant") + if(points >= 10) + item_type = /obj/item/weapon/implanter/gang + usr << "The implant breaker is a single-use device that destroys all implants within the target before trying to recruit them to your gang. Also works on enemy gangsters." + 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 +276,7 @@ if(points >= 30) item_type = /obj/machinery/dominator + usr << "The dominator will secure your gang's dominance over the station. Turn it on when you are ready to defend it." points = 30 if(item_type) @@ -293,7 +285,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) @@ -309,8 +301,8 @@ 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 +323,7 @@ else if(gang == "B") members += ticker.mode.B_bosses | ticker.mode.B_gang if(members.len) - var/ping = "[gang_name(gang)] [boss ? "Gang Boss" : "Gang Lieutenant"]: [message]" + var/ping = "[gang_name(gang)] [boss ? "Gang Boss" : "Lieutenant"] [user.real_name]: [message]" for(var/datum/mind/ganger in members) if((ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS)) ganger.current << ping @@ -341,46 +333,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 << "\icon[src] Error: All positions filled." - return - - if(jobban_isbanned(user, "gangster") || jobban_isbanned(user, "Syndicate")) - user << "\icon[src] ACCESS DENIED: Blacklisted user." - 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 << "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 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 recruitment pens 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 << "ACCESS DENIED: Unauthorized user." @@ -392,6 +352,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 << "\icon[src]Generating shuttle recall order with codes retrieved from last call signal..." @@ -461,4 +422,3 @@ /obj/item/device/gangtool/lt boss = 0 outfits = 1 - free_pen = 1 diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 7031edd688f65..3dad31930c634 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -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("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") return 0 + if(target.mind in (ticker.mode.A_gang | ticker.mode.B_gang)) + ticker.mode.remove_gangster(target.mind,exclude_bosses=1) + target.visible_message("[src] was destroyed in the process!", "You feel a surge of loyalty towards Nanotrasen.") + 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.cult) target << "You feel the corporate tendrils of Nanotrasen try to invade your mind!" else target << "You feel a surge of loyalty towards Nanotrasen." return 1 +/obj/item/weapon/implant/loyalty/Destroy() + loc << "You feel a sense of liberation as Nanotrasen's grip on your mind fades away." + ..() /obj/item/weapon/implant/adrenalin name = "adrenal implant" diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 291b287fc141e..77d634dc35f0c 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -20,11 +20,16 @@ if(!iscarbon(M)) return if(user && imp) + if(M.head) + user << "[M]'s [M.head.name] is in the way! Take it off first!" + return M.visible_message("[user] is attemping to implant [M].") 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].", "[user] implants you with the implant.") add_logs(user, M, "implanted", object="[name]") user << "You implant the implant into [M]." diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 8e21fae2ff22d..86851838afc8c 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -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]!", "You successfully remove [I] from [target]'s [target_zone].") - if(istype(I, /obj/item/weapon/implant/loyalty)) - target << "You feel a sense of liberation as Nanotrasen's grip on your mind fades away." qdel(I) if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target diff --git a/html/changelogs/ikarrus-penis.yml b/html/changelogs/ikarrus-penis.yml new file mode 100644 index 0000000000000..064875711f962 --- /dev/null +++ b/html/changelogs/ikarrus-penis.yml @@ -0,0 +1,40 @@ +################################ +# 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: "Multiple gang leaders are spawned at round start, the number which depends on server population" + - 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
* 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" + - rscdel: "Implanters no longer work if the target is wearing headgear. Remove them first."