Merge pull request #8802 from Ghommie/Ghommie-cit101

Ports in RPGs for nuke ops, failsafe uplink codes, some carp plushie exploit fix etc.
This commit is contained in:
kevinz000
2019-07-07 02:39:07 -07:00
committed by GitHub
28 changed files with 358 additions and 197 deletions

View File

@@ -21,6 +21,9 @@ GLOBAL_LIST_EMPTY(uplinks)
var/datum/uplink_purchase_log/purchase_log var/datum/uplink_purchase_log/purchase_log
var/list/uplink_items var/list/uplink_items
var/hidden_crystals = 0 var/hidden_crystals = 0
var/unlock_note
var/unlock_code
var/failsafe_code
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20) /datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20)
if(!isitem(parent)) if(!isitem(parent))
@@ -219,7 +222,10 @@ GLOBAL_LIST_EMPTY(uplinks)
/datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text) /datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text)
var/obj/item/pda/master = parent var/obj/item/pda/master = parent
if(trim(lowertext(new_ring_text)) != trim(lowertext(master.lock_code))) //why is the lock code stored on the pda? if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code)))
if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code)))
failsafe()
return COMPONENT_STOP_RINGTONE_CHANGE
return return
locked = FALSE locked = FALSE
interact(null, user) interact(null, user)
@@ -233,7 +239,9 @@ GLOBAL_LIST_EMPTY(uplinks)
/datum/component/uplink/proc/new_frequency(datum/source, list/arguments) /datum/component/uplink/proc/new_frequency(datum/source, list/arguments)
var/obj/item/radio/master = parent var/obj/item/radio/master = parent
var/frequency = arguments[1] var/frequency = arguments[1]
if(frequency != master.traitor_frequency) if(frequency != unlock_code)
if(frequency == failsafe_code)
failsafe()
return return
locked = FALSE locked = FALSE
if(ismob(master.loc)) if(ismob(master.loc))
@@ -243,9 +251,38 @@ GLOBAL_LIST_EMPTY(uplinks)
/datum/component/uplink/proc/pen_rotation(datum/source, degrees, mob/living/carbon/user) /datum/component/uplink/proc/pen_rotation(datum/source, degrees, mob/living/carbon/user)
var/obj/item/pen/master = parent var/obj/item/pen/master = parent
if(degrees != master.traitor_unlock_degrees) if(degrees != unlock_code)
if(degrees == failsafe_code) //Getting failsafes on pens is risky business
failsafe()
return return
locked = FALSE locked = FALSE
master.degrees = 0 master.degrees = 0
interact(null, user) interact(null, user)
to_chat(user, "<span class='warning'>Your pen makes a clicking noise, before quickly rotating back to 0 degrees!</span>") to_chat(user, "<span class='warning'>Your pen makes a clicking noise, before quickly rotating back to 0 degrees!</span>")
/datum/component/uplink/proc/setup_unlock_code()
unlock_code = generate_code()
var/obj/item/P = parent
if(istype(parent,/obj/item/pda))
unlock_note = "<B>Uplink Passcode:</B> [unlock_code] ([P.name])."
else if(istype(parent,/obj/item/radio))
unlock_note = "<B>Radio Frequency:</B> [format_frequency(unlock_code)] ([P.name])."
else if(istype(parent,/obj/item/pen))
unlock_note = "<B>Uplink Degrees:</B> [unlock_code] ([P.name])."
/datum/component/uplink/proc/generate_code()
if(istype(parent,/obj/item/pda))
return "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]"
else if(istype(parent,/obj/item/radio))
return sanitize_frequency(rand(MIN_FREQ, MAX_FREQ))
else if(istype(parent,/obj/item/pen))
return rand(1, 360)
/datum/component/uplink/proc/failsafe()
if(!parent)
return
var/turf/T = get_turf(parent)
if(!T)
return
explosion(T,1,2,3)
qdel(parent) //Alternatively could brick the uplink.

View File

@@ -233,13 +233,10 @@
/datum/mind/proc/remove_antag_equip() /datum/mind/proc/remove_antag_equip()
var/list/Mob_Contents = current.get_contents() var/list/Mob_Contents = current.get_contents()
for(var/obj/item/I in Mob_Contents) for(var/obj/item/I in Mob_Contents)
if(istype(I, /obj/item/pda)) var/datum/component/uplink/O = I.GetComponent(/datum/component/uplink)
var/obj/item/pda/P = I //Todo make this reset signal
P.lock_code = "" if(O)
O.unlock_code = null
else if(istype(I, /obj/item/radio))
var/obj/item/radio/R = I
R.traitor_frequency = 0
/datum/mind/proc/remove_all_antag() //For the Lazy amongst us. /datum/mind/proc/remove_all_antag() //For the Lazy amongst us.
remove_changeling() remove_changeling()
@@ -304,33 +301,22 @@
. = 0 . = 0
else else
. = uplink_loc . = uplink_loc
uplink_loc.AddComponent(/datum/component/uplink, traitor_mob.key) var/datum/component/uplink/U = uplink_loc.AddComponent(/datum/component/uplink, traitor_mob.key)
var/unlock_note if(!U)
CRASH("Uplink creation failed.")
if(uplink_loc == R) U.setup_unlock_code()
R.traitor_frequency = sanitize_frequency(rand(MIN_FREQ, MAX_FREQ)) if(!silent)
if(uplink_loc == R)
if(!silent) to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as your [R.name]. Simply dial the frequency [format_frequency(U.unlock_code)] to unlock its hidden features.")
to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as your [R.name]. Simply dial the frequency [format_frequency(R.traitor_frequency)] to unlock its hidden features.") else if(uplink_loc == PDA)
unlock_note = "<B>Radio Frequency:</B> [format_frequency(R.traitor_frequency)] ([R.name])." to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as your [PDA.name]. Simply enter the code \"[U.unlock_code]\" into the ringtone select to unlock its hidden features.")
else if(uplink_loc == PDA) else if(uplink_loc == P)
PDA.lock_code = "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]" to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as your [P.name]. Simply twist the top of the pen [U.unlock_code] from its starting position to unlock its hidden features.")
if(!silent)
to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as your [PDA.name]. Simply enter the code \"[PDA.lock_code]\" into the ringtone select to unlock its hidden features.")
unlock_note = "<B>Uplink Passcode:</B> [PDA.lock_code] ([PDA.name])."
else if(uplink_loc == P)
P.traitor_unlock_degrees = rand(1, 360)
if(!silent)
to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as your [P.name]. Simply twist the top of the pen [P.traitor_unlock_degrees] from its starting position to unlock its hidden features.")
unlock_note = "<B>Uplink Degrees:</B> [P.traitor_unlock_degrees] ([P.name])."
if(uplink_owner) if(uplink_owner)
uplink_owner.antag_memory += unlock_note + "<br>" uplink_owner.antag_memory += U.unlock_note + "<br>"
else else
traitor_mob.mind.store_memory(unlock_note) traitor_mob.mind.store_memory(U.unlock_note)
//Link a new mobs mind to the creator of said mob. They will join any team they are currently on, and will only switch teams when their creator does. //Link a new mobs mind to the creator of said mob. They will join any team they are currently on, and will only switch teams when their creator does.

View File

@@ -305,7 +305,7 @@
name = "\improper SRM-8 missile rack" name = "\improper SRM-8 missile rack"
desc = "A weapon for combat exosuits. Shoots light explosive missiles." desc = "A weapon for combat exosuits. Shoots light explosive missiles."
icon_state = "mecha_missilerack" icon_state = "mecha_missilerack"
projectile = /obj/item/projectile/bullet/srmrocket projectile = /obj/item/projectile/bullet/a84mm_he
fire_sound = 'sound/weapons/grenadelaunch.ogg' fire_sound = 'sound/weapons/grenadelaunch.ogg'
projectiles = 8 projectiles = 8
projectile_energy_cost = 1000 projectile_energy_cost = 1000

View File

@@ -19,6 +19,9 @@
else else
return ..() return ..()
/obj/item/toy/plush/carpplushie/dehy_carp/plop(obj/item/toy/plush/Daddy)
return FALSE
/obj/item/toy/plush/carpplushie/dehy_carp/proc/Swell() /obj/item/toy/plush/carpplushie/dehy_carp/proc/Swell()
desc = "It's growing!" desc = "It's growing!"
visible_message("<span class='notice'>[src] swells up!</span>") visible_message("<span class='notice'>[src] swells up!</span>")

View File

@@ -68,7 +68,6 @@ GLOBAL_LIST_EMPTY(PDAs)
var/last_everyone //No text for everyone spamming var/last_everyone //No text for everyone spamming
var/last_noise //Also no honk spamming that's bad too var/last_noise //Also no honk spamming that's bad too
var/ttone = "beep" //The ringtone! var/ttone = "beep" //The ringtone!
var/lock_code = "" // Lockcode to unlock uplink
var/honkamt = 0 //How many honks left when infected with honk.exe var/honkamt = 0 //How many honks left when infected with honk.exe
var/mimeamt = 0 //How many silence left when infected with mime.exe var/mimeamt = 0 //How many silence left when infected with mime.exe
var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant! To help with navigation, we have provided the following definitions. North: Fore. South: Aft. West: Port. East: Starboard. Quarter is either side of aft." //Current note in the notepad function var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant! To help with navigation, we have provided the following definitions. North: Fore. South: Aft. West: Port. East: Starboard. Quarter is either side of aft." //Current note in the notepad function

View File

@@ -98,7 +98,7 @@
GET_COMPONENT_FROM(hidden_uplink, /datum/component/uplink, target) GET_COMPONENT_FROM(hidden_uplink, /datum/component/uplink, target)
if(!hidden_uplink) if(!hidden_uplink)
hidden_uplink = target.AddComponent(/datum/component/uplink) hidden_uplink = target.AddComponent(/datum/component/uplink)
target.lock_code = lock_code hidden_uplink.unlock_code = lock_code
else else
hidden_uplink.hidden_crystals += hidden_uplink.telecrystals //Temporarially hide the PDA's crystals, so you can't steal telecrystals. hidden_uplink.hidden_crystals += hidden_uplink.telecrystals //Temporarially hide the PDA's crystals, so you can't steal telecrystals.
hidden_uplink.telecrystals = telecrystals hidden_uplink.telecrystals = telecrystals

View File

@@ -16,7 +16,6 @@
var/on = TRUE var/on = TRUE
var/frequency = FREQ_COMMON var/frequency = FREQ_COMMON
var/traitor_frequency = 0 // If tuned to this frequency, uplink will be unlocked.
var/canhear_range = 3 // The range around the radio in which mobs can hear what it receives. var/canhear_range = 3 // The range around the radio in which mobs can hear what it receives.
var/emped = 0 // Tracks the number of EMPs currently stacked. var/emped = 0 // Tracks the number of EMPs currently stacked.

View File

@@ -16,6 +16,7 @@
var/obj/item/toy/plush/plush_child var/obj/item/toy/plush/plush_child
var/obj/item/toy/plush/paternal_parent //who initiated creation var/obj/item/toy/plush/paternal_parent //who initiated creation
var/obj/item/toy/plush/maternal_parent //who owns, see love() var/obj/item/toy/plush/maternal_parent //who owns, see love()
var/static/list/breeding_blacklist = typecacheof(/obj/item/toy/plush/carpplushie/dehy_carp) // you cannot have sexual relations with this plush
var/list/scorned = list() //who the plush hates var/list/scorned = list() //who the plush hates
var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy() var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy()
var/heartbroken = FALSE var/heartbroken = FALSE
@@ -203,9 +204,9 @@
else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop
user.visible_message("<span class='notice'>[user] is going to break [Kisser] and [src] by bashing them like that.</span>", user.visible_message("<span class='notice'>[user] is going to break [Kisser] and [src] by bashing them like that.</span>",
"<span class='notice'>[Kisser] passionately embraces [src] in your hands. Look away you perv!</span>") "<span class='notice'>[Kisser] passionately embraces [src] in your hands. Look away you perv!</span>")
plop(Kisser) if(plop(Kisser))
user.visible_message("<span class='notice'>Something drops at the feet of [user].</span>", user.visible_message("<span class='notice'>Something drops at the feet of [user].</span>",
"<span class='notice'>The miracle of oh god did that just come out of [src]?!</span>") "<span class='notice'>The miracle of oh god did that just come out of [src]?!</span>")
//then comes protection, or abstinence if we are catholic //then comes protection, or abstinence if we are catholic
else if(Kisser.partner == src && plush_child) else if(Kisser.partner == src && plush_child)
@@ -271,7 +272,10 @@
/obj/item/toy/plush/proc/plop(obj/item/toy/plush/Daddy) /obj/item/toy/plush/proc/plop(obj/item/toy/plush/Daddy)
if(partner != Daddy) if(partner != Daddy)
return //we do not have bastards in our toyshop return FALSE //we do not have bastards in our toyshop
if(is_type_in_typecache(Daddy, breeding_blacklist))
return FALSE // some love is forbidden
if(prob(50)) //it has my eyes if(prob(50)) //it has my eyes
plush_child = new type(get_turf(loc)) plush_child = new type(get_turf(loc))

View File

@@ -487,7 +487,7 @@
item_state = "duffel-syndieammo" item_state = "duffel-syndieammo"
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun /obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun
desc = "A large duffel bag, packed to the brim with Bulldog shotgun ammo." desc = "A large duffel bag, packed to the brim with Bulldog shotgun drum magazines."
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
for(var/i in 1 to 6) for(var/i in 1 to 6)
@@ -497,14 +497,14 @@
new /obj/item/ammo_box/magazine/m12g/dragon(src) new /obj/item/ammo_box/magazine/m12g/dragon(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg /obj/item/storage/backpack/duffelbag/syndie/ammo/smg
desc = "A large duffel bag, packed to the brim with C20r magazines." desc = "A large duffel bag, packed to the brim with C-20r magazines."
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
for(var/i in 1 to 9) for(var/i in 1 to 9)
new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src)
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle /obj/item/storage/backpack/duffelbag/syndie/c20rbundle
desc = "A large duffel bag containing a C20r, some magazines, and a cheap looking suppressor." desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor."
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src)
@@ -513,7 +513,7 @@
new /obj/item/suppressor/specialoffer(src) new /obj/item/suppressor/specialoffer(src)
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
desc = "A large duffel bag containing a Bulldog, several drums, and a collapsed hardsuit." desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses."
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g(src)
@@ -522,16 +522,7 @@
new /obj/item/clothing/glasses/thermal/syndi(src) new /obj/item/clothing/glasses/thermal/syndi(src)
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft machine gun, a big jumbo box of darts, and a knock-off pair of magboots." desc = "A large duffel bag containing a tactical medkit, a Donksoft machine gun, a big jumbo box of riot darts, and a knock-off pair of magboots."
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
new /obj/item/storage/firstaid/tactical(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft machine gun, a big jumbo box of darts, and a knock-off pair of magboots."
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/clothing/shoes/magboots/syndie(src)
@@ -540,7 +531,7 @@
new /obj/item/ammo_box/foambox/riot(src) new /obj/item/ammo_box/foambox/riot(src)
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
desc = "A large duffel bag containing a deadly chemicals, a chemical spray, chemical grenade, a Donksoft assault rifle, riot grade darts, a minature syringe gun, and a box of syringes." desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, a Donksoft assault rifle, box of riot grade darts, a dart pistol, and a box of syringes."
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src) new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
@@ -562,7 +553,7 @@
new /obj/item/grenade/plastic/x4(src) new /obj/item/grenade/plastic/x4(src)
/obj/item/storage/backpack/duffelbag/syndie/firestarter /obj/item/storage/backpack/duffelbag/syndie/firestarter
desc = "A large duffel bag containing New Russian pyro backpack sprayer, a pistol, a pipebomb, fireproof hardsuit, ammo, and other equipment." desc = "A large duffel bag containing a New Russian pyro backpack sprayer, Elite hardsuit, a Stechkin APS pistol, minibomb, ammo, and other equipment."
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/clothing/under/syndicate/soviet(src) new /obj/item/clothing/under/syndicate/soviet(src)

View File

@@ -68,9 +68,8 @@
..() ..()
/obj/item/storage/briefcase/sniperbundle /obj/item/storage/briefcase/sniperbundle
desc = "It's label reads genuine hardened Captain leather, but suspiciously has no other tags or branding. Smells like L'Air du Temps." desc = "Its label reads \"genuine hardened Captain leather\", but suspiciously has no other tags or branding. Smells like L'Air du Temps."
force = 10 force = 10
/obj/item/storage/briefcase/sniperbundle/PopulateContents() /obj/item/storage/briefcase/sniperbundle/PopulateContents()
..() // in case you need any paperwork done after your rampage ..() // in case you need any paperwork done after your rampage
new /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate(src) new /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate(src)
@@ -82,7 +81,7 @@
/obj/item/storage/briefcase/modularbundle /obj/item/storage/briefcase/modularbundle
desc = "It's label reads genuine hardened Captain leather, but suspiciously has no other tags or branding." desc = "Its label reads \"genuine hardened Captain leather\", but suspiciously has no other tags or branding."
force = 10 force = 10
/obj/item/storage/briefcase/modularbundle/PopulateContents() /obj/item/storage/briefcase/modularbundle/PopulateContents()

View File

@@ -25,7 +25,6 @@
pressure_resistance = 2 pressure_resistance = 2
grind_results = list("iron" = 2, "iodine" = 1) grind_results = list("iron" = 2, "iodine" = 1)
var/colour = "black" //what colour the ink is! var/colour = "black" //what colour the ink is!
var/traitor_unlock_degrees = 0
var/degrees = 0 var/degrees = 0
var/font = PEN_FONT var/font = PEN_FONT

View File

@@ -6,9 +6,10 @@
/obj/item/ammo_casing/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread) /obj/item/ammo_casing/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread)
if (..()) //successfully firing if (..()) //successfully firing
moveToNullspace() moveToNullspace()
return 1 QDEL_NULL(src)
return TRUE
else else
return 0 return FALSE
/obj/item/ammo_casing/caseless/update_icon() /obj/item/ammo_casing/caseless/update_icon()
..() ..()

View File

@@ -1,5 +1,13 @@
/obj/item/ammo_casing/caseless/a84mm /obj/item/ammo_casing/caseless/rocket
desc = "An 84mm anti-armour rocket." name = "\improper PM-9HE"
desc = "An 84mm High Explosive rocket. Fire at people and pray."
caliber = "84mm"
icon_state = "srm-8"
projectile_type = /obj/item/projectile/bullet/a84mm_he
/obj/item/ammo_casing/caseless/rocket/hedp
name = "\improper PM-9HEDP"
desc = "An 84mm High Explosive Dual Purpose rocket. Pointy end toward mechs."
caliber = "84mm" caliber = "84mm"
icon_state = "s-casing-live" icon_state = "s-casing-live"
projectile_type = /obj/item/projectile/bullet/a84mm projectile_type = /obj/item/projectile/bullet/a84mm

View File

@@ -12,6 +12,6 @@
/obj/item/ammo_box/magazine/internal/rocketlauncher /obj/item/ammo_box/magazine/internal/rocketlauncher
name = "grenade launcher internal magazine" name = "grenade launcher internal magazine"
ammo_type = /obj/item/ammo_casing/caseless/a84mm ammo_type = /obj/item/ammo_casing/caseless/rocket
caliber = "84mm" caliber = "84mm"
max_ammo = 1 max_ammo = 1

View File

@@ -170,7 +170,7 @@
return return
if(weapon_weight == WEAPON_HEAVY && user.get_inactive_held_item()) if(weapon_weight == WEAPON_HEAVY && user.get_inactive_held_item())
to_chat(user, "<span class='userdanger'>You need both hands free to fire [src]!</span>") to_chat(user, "<span class='userdanger'>You need both hands free to fire \the [src]!</span>")
return return
//DUAL (or more!) WIELDING //DUAL (or more!) WIELDING
@@ -422,7 +422,7 @@
if(alight) if(alight)
alight.Remove(user) alight.Remove(user)
/obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params) /obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer)
if(!ishuman(user) || !ishuman(target)) if(!ishuman(user) || !ishuman(target))
return return
@@ -438,7 +438,7 @@
semicd = TRUE semicd = TRUE
if(!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH) if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH))
if(user) if(user)
if(user == target) if(user == target)
user.visible_message("<span class='notice'>[user] decided not to shoot.</span>") user.visible_message("<span class='notice'>[user] decided not to shoot.</span>")

View File

@@ -7,6 +7,7 @@
var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info
var/obj/item/ammo_box/magazine/magazine var/obj/item/ammo_box/magazine/magazine
var/casing_ejector = TRUE //whether the gun ejects the chambered casing var/casing_ejector = TRUE //whether the gun ejects the chambered casing
var/magazine_wording = "magazine"
/obj/item/gun/ballistic/Initialize() /obj/item/gun/ballistic/Initialize()
. = ..() . = ..()
@@ -57,7 +58,7 @@
if (!magazine && istype(AM, mag_type)) if (!magazine && istype(AM, mag_type))
if(user.transferItemToLoc(AM, src)) if(user.transferItemToLoc(AM, src))
magazine = AM magazine = AM
to_chat(user, "<span class='notice'>You load a new magazine into \the [src].</span>") to_chat(user, "<span class='notice'>You load a new [magazine_wording] into \the [src].</span>")
if(magazine.ammo_count()) if(magazine.ammo_count())
playsound(src, "gun_insert_full_magazine", 70, 1) playsound(src, "gun_insert_full_magazine", 70, 1)
if(!chambered) if(!chambered)
@@ -72,7 +73,7 @@
to_chat(user, "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>") to_chat(user, "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>")
return return
else if (magazine) else if (magazine)
to_chat(user, "<span class='notice'>There's already a magazine in \the [src].</span>") to_chat(user, "<span class='notice'>There's already a [magazine_wording] in \the [src].</span>")
if(istype(A, /obj/item/suppressor)) if(istype(A, /obj/item/suppressor))
var/obj/item/suppressor/S = A var/obj/item/suppressor/S = A
if(!can_suppress) if(!can_suppress)
@@ -222,7 +223,7 @@
/obj/item/suppressor /obj/item/suppressor
name = "suppressor" name = "suppressor"
desc = "A universal syndicate small-arms suppressor for maximum espionage." desc = "A syndicate small-arms suppressor for maximum espionage."
icon = 'icons/obj/guns/projectile.dmi' icon = 'icons/obj/guns/projectile.dmi'
icon_state = "suppressor" icon_state = "suppressor"
w_class = WEIGHT_CLASS_TINY w_class = WEIGHT_CLASS_TINY
@@ -231,6 +232,4 @@
/obj/item/suppressor/specialoffer /obj/item/suppressor/specialoffer
name = "cheap suppressor" name = "cheap suppressor"
desc = "A foreign knock-off suppressor, it feels flimsy, cheap, and brittle. Still fits all weapons." desc = "A foreign knock-off suppressor, it feels flimsy, cheap, and brittle. Still fits some weapons."
icon = 'icons/obj/guns/projectile.dmi'
icon_state = "suppressor"

View File

@@ -74,25 +74,91 @@
update_icon() update_icon()
chamber_round() chamber_round()
/obj/item/gun/ballistic/automatic/atlauncher /obj/item/gun/ballistic/rocketlauncher
desc = "A pre-loaded, single shot anti-armour launcher." name = "\improper PML-9"
name = "anti-armour grenade launcher" desc = "A reusable rocket propelled grenade launcher. The words \"NT this way\" and an arrow have been written near the barrel."
icon_state = "rocketlauncher" icon_state = "rocketlauncher"
item_state = "rocketlauncher" item_state = "rocketlauncher"
mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher
fire_sound = 'sound/weapons/rocketlaunch.ogg' fire_sound = 'sound/weapons/rocketlaunch.ogg'
w_class = WEIGHT_CLASS_BULKY w_class = WEIGHT_CLASS_BULKY
can_suppress = FALSE can_suppress = FALSE
pin = /obj/item/firing_pin/implant/pindicate
burst_size = 1 burst_size = 1
fire_delay = 0 fire_delay = 0
select = 0
actions_types = list()
casing_ejector = FALSE casing_ejector = FALSE
weapon_weight = WEAPON_HEAVY weapon_weight = WEAPON_HEAVY
magazine_wording = "rocket"
/obj/item/gun/ballistic/automatic/atlauncher/attack_self() /obj/item/gun/ballistic/rocketlauncher/unrestricted
return pin = /obj/item/firing_pin
/obj/item/gun/ballistic/automatic/atlauncher/update_icon() /obj/item/gun/ballistic/rocketlauncher/handle_atom_del(atom/A)
..() if(A == chambered)
icon_state = "rocketlauncher[magazine ? "-[get_ammo(1)]" : ""]" chambered = null
if(!QDELETED(magazine))
QDEL_NULL(magazine)
if(A == magazine)
magazine = null
if(!QDELETED(chambered))
QDEL_NULL(chambered)
update_icon()
return ..()
/obj/item/gun/ballistic/rocketlauncher/can_shoot()
return chambered?.BB
/obj/item/gun/ballistic/rocketlauncher/process_chamber()
if(chambered)
chambered = null
if(magazine)
QDEL_NULL(magazine)
update_icon()
/obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user)
return //too difficult to remove the rocket with TK
/obj/item/gun/ballistic/rocketlauncher/attack_self(mob/living/user)
if(magazine)
if(chambered)
chambered.forceMove(magazine)
magazine.stored_ammo.Insert(1, chambered)
chambered = null
else
stack_trace("Removed [magazine] from [src] without a chambered round")
magazine.forceMove(drop_location())
if(user.is_holding(src))
user.put_in_hands(magazine)
playsound(src, 'sound/weapons/gun_magazine_remove_full.ogg', 70, TRUE)
to_chat(user, "<span class='notice'>You work the [magazine] out from [src].</span>")
magazine = null
else
to_chat(user, "<span class='notice'>There's no rocket in [src].</span>")
update_icon()
/obj/item/gun/ballistic/rocketlauncher/update_icon()
icon_state = "[initial(icon_state)]-[chambered ? "1" : "0"]"
/obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user)
user.visible_message("<span class='warning'>[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!</span>", \
"<span class='userdanger'>You aim [src] at the ground to perform a bisnasty rocket jump...</span>")
if(can_shoot())
user.notransform = TRUE
playsound(src, 'sound/vehicles/rocketlaunch.ogg', 80, 1, 5)
animate(user, pixel_z = 300, time = 30, easing = LINEAR_EASING)
sleep(70)
animate(user, pixel_z = 0, time = 5, easing = LINEAR_EASING)
sleep(5)
user.notransform = FALSE
process_fire(user, user, TRUE)
if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good.
user.gib()
return MANUAL_SUICIDE
else
sleep(5)
shoot_with_empty_chamber(user)
sleep(20)
user.visible_message("<span class='warning'>[user] looks about the room realizing [user.p_theyre()] still there. [user.p_they(TRUE)] proceed to shove [src] down their throat and choke [user.p_them()]self with it!</span>", \
"<span class='userdanger'>You look around after realizing you're still here, then proceed to choke yourself to death with [src]!</span>")
sleep(20)
return OXYLOSS

View File

@@ -243,7 +243,7 @@
/obj/item/gun/energy/printer /obj/item/gun/energy/printer
name = "cyborg lmg" name = "cyborg lmg"
desc = "A machinegun that fires 3d-printed flechettes slowly regenerated using a cyborg's internal power source." desc = "A LMG that fires 3D-printed flechettes. They are slowly resupplied using the cyborg's internal power source."
icon_state = "l6closed0" icon_state = "l6closed0"
icon = 'icons/obj/guns/projectile.dmi' icon = 'icons/obj/guns/projectile.dmi'
cell_type = "/obj/item/stock_parts/cell/secborg" cell_type = "/obj/item/stock_parts/cell/secborg"

View File

@@ -9,9 +9,9 @@
return TRUE return TRUE
/obj/item/projectile/bullet/a84mm /obj/item/projectile/bullet/a84mm
name ="anti-armour rocket" name ="\improper HEDP rocket"
desc = "USE A WEEL GUN" desc = "USE A WEEL GUN"
icon_state= "atrocket" icon_state= "84mm-hedp"
damage = 80 damage = 80
var/anti_armour_damage = 200 var/anti_armour_damage = 200
armour_penetration = 100 armour_penetration = 100
@@ -29,17 +29,17 @@
S.take_overall_damage(anti_armour_damage*0.75, anti_armour_damage*0.25) S.take_overall_damage(anti_armour_damage*0.75, anti_armour_damage*0.25)
return TRUE return TRUE
/obj/item/projectile/bullet/srmrocket /obj/item/projectile/bullet/a84mm_he
name ="SRM-8 Rocket" name ="\improper HE missile"
desc = "Boom." desc = "Boom."
icon_state = "missile" icon_state = "missile"
damage = 30 damage = 30
ricochets_max = 0 //it's a MISSILE ricochets_max = 0 //it's a MISSILE
/obj/item/projectile/bullet/srmrocket/on_hit(atom/target, blocked=0) /obj/item/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0)
..() ..()
if(!isliving(target)) //if the target isn't alive, so is a wall or something if(!isliving(target)) //if the target isn't alive, so is a wall or something
explosion(target, 0, 1, 2, 4) explosion(target, 0, 1, 2, 4)
else else
explosion(target, 0, 0, 2, 4) explosion(target, 0, 0, 2, 4)
return TRUE return TRUE

View File

@@ -219,7 +219,7 @@
/datum/design/mech_missile_rack /datum/design/mech_missile_rack
name = "Exosuit Weapon (SRM-8 Missile Rack)" name = "Exosuit Weapon (SRM-8 Missile Rack)"
desc = "Allows for the construction of SRM-8 Missile Rack." desc = "Allows for the construction of an SRM-8 Missile Rack."
id = "mech_missile_rack" id = "mech_missile_rack"
build_type = MECHFAB build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack

View File

@@ -330,8 +330,8 @@
departmental_flags = DEPARTMENTAL_FLAG_SECURITY departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/suppressor /datum/design/suppressor
name = "Universal Suppressor" name = "Suppressor"
desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels." desc = "A reverse-engineered suppressor that fits on most small arms with threaded barrels."
id = "suppressor" id = "suppressor"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500) materials = list(MAT_METAL = 2000, MAT_SILVER = 500)

View File

@@ -42,6 +42,7 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/ballistic/revolver/grenadelauncher, /obj/item/gun/ballistic/revolver/grenadelauncher,
/obj/item/gun/ballistic/revolver/golden, /obj/item/gun/ballistic/revolver/golden,
/obj/item/gun/ballistic/automatic/sniper_rifle, /obj/item/gun/ballistic/automatic/sniper_rifle,
/obj/item/gun/ballistic/rocketlauncher,
/obj/item/gun/medbeam, /obj/item/gun/medbeam,
/obj/item/gun/energy/laser/scatter, /obj/item/gun/energy/laser/scatter,
/obj/item/gun/energy/gravity_gun)) /obj/item/gun/energy/gravity_gun))

View File

@@ -46,7 +46,7 @@
/obj/item/organ/cyberimp/chest/reviver /obj/item/organ/cyberimp/chest/reviver
name = "Reviver implant" name = "Reviver implant"
desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" desc = "This implant will attempt to revive and heal you if you lose consciousness. For the faint of heart!"
icon_state = "chest_implant" icon_state = "chest_implant"
implant_color = "#AD0000" implant_color = "#AD0000"
slot = ORGAN_SLOT_HEART_AID slot = ORGAN_SLOT_HEART_AID

View File

@@ -57,4 +57,3 @@
/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20) /obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20)
. = ..() . = ..()
AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount) AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount)
traitor_unlock_degrees = 360

View File

@@ -85,18 +85,18 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
return pick(4;0.75,2;0.5,1;0.25) return pick(4;0.75,2;0.5,1;0.25)
/datum/uplink_item/proc/purchase(mob/user, datum/component/uplink/U) /datum/uplink_item/proc/purchase(mob/user, datum/component/uplink/U)
var/atom/A = spawn_item(item, user) var/atom/A = spawn_item(item, user, U)
if(purchase_log_vis && U.purchase_log) if(purchase_log_vis && U.purchase_log)
U.purchase_log.LogPurchase(A, src, cost) U.purchase_log.LogPurchase(A, src, cost)
/datum/uplink_item/proc/spawn_item(spawn_item, mob/user) /datum/uplink_item/proc/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
if(!spawn_item) if(!spawn_path)
return return
var/atom/A var/atom/A
if(ispath(spawn_item)) if(ispath(spawn_path))
A = new spawn_item(get_turf(user)) A = new spawn_path(get_turf(user))
else else
A = spawn_item A = spawn_path
if(ishuman(user) && istype(A, /obj/item)) if(ishuman(user) && istype(A, /obj/item))
var/mob/living/carbon/human/H = user var/mob/living/carbon/human/H = user
if(H.put_in_hands(A)) if(H.put_in_hands(A))
@@ -117,23 +117,23 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/bundles_TC/chemical /datum/uplink_item/bundles_TC/chemical
name = "Bioterror bundle" name = "Bioterror bundle"
desc = "For the madman: Contains Bioterror spray, Bioterror grenade, chemicals, syringe gun, box of syringes,\ desc = "For the madman: Contains a handheld Bioterror chem sprayer, a Bioterror foam grenade, a box of lethal chemicals, a dart pistol, \
Donksoft assault rifle, and some darts. Remember: Seal suit and equip internals before use." box of syringes, Donksoft assault rifle, and some riot darts. Remember: Seal suit and equip internals before use."
item = /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle item = /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
cost = 30 // normally 42 cost = 30 // normally 42
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/bundles_TC/bulldog /datum/uplink_item/bundles_TC/bulldog
name = "Bulldog bundle" name = "Bulldog bundle"
desc = "Lean and mean: Optimised for people that want to get up close and personal. Contains the popular \ desc = "Lean and mean: Optimized for people that want to get up close and personal. Contains the popular \
Bulldog shotgun, two 12g drums, and a pair of Thermal imaging goggles." Bulldog shotgun, a 12g buckshot drum, a 12g taser slug drum and a pair of Thermal imaging goggles."
item = /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle item = /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
cost = 13 // normally 16 cost = 13 // normally 16
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/bundles_TC/c20r /datum/uplink_item/bundles_TC/c20r
name = "C-20r bundle" name = "C-20r bundle"
desc = "Old faithful: The classic C-20r, bundled with two magazines, and a (surplus) suppressor at discount price." desc = "Old Faithful: The classic C-20r, bundled with two magazines, and a (surplus) suppressor at discount price."
item = /obj/item/storage/backpack/duffelbag/syndie/c20rbundle item = /obj/item/storage/backpack/duffelbag/syndie/c20rbundle
cost = 14 // normally 16 cost = 14 // normally 16
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -147,8 +147,8 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/bundles_TC/medical /datum/uplink_item/bundles_TC/medical
name = "Medical bundle" name = "Medical bundle"
desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a Donksoft machine gun, \ desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \
a box of ammo, and a pair of magboots to rescue your friends in no-gravity environments." a Donksoft LMG, a box of riot darts and a pair of magboots to rescue your friends in no-gravity environments."
item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
cost = 15 // normally 20 cost = 15 // normally 20
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -170,15 +170,18 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/bundles_TC/sniper /datum/uplink_item/bundles_TC/sniper
name = "Sniper bundle" name = "Sniper bundle"
desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, a hollow-point \ desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, \
a soporific knockout magazine, a free surplus supressor, and a worn out suit and tie." two soporific knockout magazines, a free surplus supressor, and a sharp-looking tactical turtleneck suit. \
We'll throw in a free red tie if you order NOW."
item = /obj/item/storage/briefcase/sniperbundle item = /obj/item/storage/briefcase/sniperbundle
cost = 20 // normally 26 cost = 20 // normally 26
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/bundles_TC/firestarter /datum/uplink_item/bundles_TC/firestarter
name = "Spetsnaz Pyro bundle" name = "Spetsnaz Pyro bundle"
desc = "For systematic suppression of carbon lifeforms in close range: Contains a specialist Pyrotechnic equipment, foreign pistol, two magazines, a pipebomb, and a stimulant syringe." desc = "For systematic suppression of carbon lifeforms in close quarters: Contains a lethal New Russian backpack spray, Elite hardsuit, \
Stechkin APS pistol, two magazines, a minibomb and a stimulant syringe. \
Order NOW and comrade Boris will throw in an extra tracksuit."
item = /obj/item/storage/backpack/duffelbag/syndie/firestarter item = /obj/item/storage/backpack/duffelbag/syndie/firestarter
cost = 30 cost = 30
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -187,7 +190,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Syndicate Bundle" name = "Syndicate Bundle"
desc = "Syndicate Bundles are specialized groups of items that arrive in a plain box. \ desc = "Syndicate Bundles are specialized groups of items that arrive in a plain box. \
These items are collectively worth more than 20 telecrystals, but you do not know which specialization \ These items are collectively worth more than 20 telecrystals, but you do not know which specialization \
you will receive." you will receive. May contain discontinued and/or exotic items."
item = /obj/item/storage/box/syndicate item = /obj/item/storage/box/syndicate
cost = 20 cost = 20
exclude_modes = list(/datum/game_mode/nuclear) exclude_modes = list(/datum/game_mode/nuclear)
@@ -216,7 +219,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null, FALSE) var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null, FALSE)
var/crate_value = starting_crate_value var/crate_value = starting_crate_value
var/obj/structure/closet/crate/C = spawn_item(/obj/structure/closet/crate, user) var/obj/structure/closet/crate/C = spawn_item(/obj/structure/closet/crate, user, U)
if(U.purchase_log) if(U.purchase_log)
U.purchase_log.LogPurchase(C, src, cost) U.purchase_log.LogPurchase(C, src, cost)
while(crate_value) while(crate_value)
@@ -287,6 +290,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous /datum/uplink_item/dangerous
category = "Conspicuous and Dangerous Weapons" category = "Conspicuous and Dangerous Weapons"
/datum/uplink_item/dangerous/rawketlawnchair
name = "84mm Rocket Propelled Grenade Launcher"
desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \
Guaranteed to send your target out with a bang or your money back!"
item = /obj/item/gun/ballistic/rocketlauncher
cost = 8
surplus = 30
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/dangerous/antitank /datum/uplink_item/dangerous/antitank
name = "Anti Tank Pistol" name = "Anti Tank Pistol"
desc = "Essentially amounting to a sniper rifle with no stock and barrel (or indeed, any rifling at all), \ desc = "Essentially amounting to a sniper rifle with no stock and barrel (or indeed, any rifling at all), \
@@ -327,7 +339,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/bioterror /datum/uplink_item/dangerous/bioterror
name = "Biohazardous Chemical Sprayer" name = "Biohazardous Chemical Sprayer"
desc = "A chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger \ desc = "A handheld chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger \
Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \ Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \
Use with extreme caution, to prevent exposure to yourself and your fellow operatives." Use with extreme caution, to prevent exposure to yourself and your fellow operatives."
item = /obj/item/reagent_containers/spray/chemsprayer/bioterror item = /obj/item/reagent_containers/spray/chemsprayer/bioterror
@@ -427,7 +439,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/guardian /datum/uplink_item/dangerous/guardian
name = "Holoparasites" name = "Holoparasites"
desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \ desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \
organic host as a home base and source of fuel." organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host."
item = /obj/item/storage/box/syndie_kit/guardian item = /obj/item/storage/box/syndie_kit/guardian
cost = 15 cost = 15
refundable = TRUE refundable = TRUE
@@ -450,7 +462,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/carbine /datum/uplink_item/dangerous/carbine
name = "M-90gl Carbine" name = "M-90gl Carbine"
desc = "A fully-loaded, specialized three-round burst carbine that fires 5.56mm ammunition from a 30 round magazine \ desc = "A fully-loaded, specialized three-round burst carbine that fires 5.56mm ammunition from a 30 round magazine \
with a togglable 40mm under-barrel grenade launcher." with a toggleable 40mm underbarrel grenade launcher."
item = /obj/item/gun/ballistic/automatic/m90 item = /obj/item/gun/ballistic/automatic/m90
cost = 18 cost = 18
surplus = 50 surplus = 50
@@ -490,7 +502,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/revolver /datum/uplink_item/dangerous/revolver
name = "Syndicate Revolver" name = "Syndicate Revolver"
desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers." desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
item = /obj/item/gun/ballistic/revolver/syndie item = /obj/item/gun/ballistic/revolver/syndie
cost = 13 cost = 13
surplus = 50 surplus = 50
@@ -498,7 +510,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/foamsmg /datum/uplink_item/dangerous/foamsmg
name = "Toy Submachine Gun" name = "Toy Submachine Gun"
desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine."
item = /obj/item/gun/ballistic/automatic/c20r/toy item = /obj/item/gun/ballistic/automatic/c20r/toy
cost = 5 cost = 5
surplus = 0 surplus = 0
@@ -514,7 +526,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/dangerous/foampistol /datum/uplink_item/dangerous/foampistol
name = "Toy Gun with Riot Darts" name = "Toy Pistol with Riot Darts"
desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade \ desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade \
darts effective at incapacitating a target." darts effective at incapacitating a target."
item = /obj/item/gun/ballistic/automatic/toy/pistol/riot item = /obj/item/gun/ballistic/automatic/toy/pistol/riot
@@ -594,7 +606,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/stealthy_weapons/romerol_kit /datum/uplink_item/stealthy_weapons/romerol_kit
name = "Romerol" name = "Romerol"
desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. On death, these nodules take control of the dead body, causing limited revivification, along with slurred speech, aggression, and the ability to infect others with this agent." desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. \
On death, these nodules take control of the dead body, causing limited revivification, \
along with slurred speech, aggression, and the ability to infect others with this agent."
item = /obj/item/storage/box/syndie_kit/romerol item = /obj/item/storage/box/syndie_kit/romerol
cost = 25 cost = 25
cant_discount = TRUE cant_discount = TRUE
@@ -604,7 +618,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Sleepy Pen" name = "Sleepy Pen"
desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a \ desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a \
strong anesthetic and a chemical that prevents the target from speaking. \ strong anesthetic and a chemical that prevents the target from speaking. \
The pen holds one dose of the mixture, and can be refilled. Note that before the target \ The pen holds one dose of the mixture, and can be refilled with any chemicals. Note that before the target \
falls asleep, they will be able to move and act." falls asleep, they will be able to move and act."
item = /obj/item/pen/sleepy item = /obj/item/pen/sleepy
cost = 4 cost = 4
@@ -618,9 +632,9 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
include_modes = list(/datum/game_mode/nuclear/clown_ops) include_modes = list(/datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/stealthy_weapons/suppressor /datum/uplink_item/stealthy_weapons/suppressor
name = "Universal Suppressor" name = "Suppressor"
desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the \ desc = "This suppressor will silence the shots of the weapon it is attached to for increased stealth and superior ambushing capability. \
shots of the weapon for increased stealth and superior ambushing capability." It is compatible with many small ballistic guns including the Stechkin and C-20r, but not revolvers or energy guns."
item = /obj/item/suppressor item = /obj/item/suppressor
cost = 1 cost = 1
surplus = 10 surplus = 10
@@ -655,21 +669,24 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/ammo/pistolap /datum/uplink_item/ammo/pistolap
name = "10mm Armour Piercing Magazine" name = "10mm Armour Piercing Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. These rounds are less effective at injuring the target but penetrate protective gear." desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \
These rounds are less effective at injuring the target but penetrate protective gear."
item = /obj/item/ammo_box/magazine/m10mm/ap item = /obj/item/ammo_box/magazine/m10mm/ap
cost = 2 cost = 2
exclude_modes = list(/datum/game_mode/nuclear/clown_ops) exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/ammo/pistolhp /datum/uplink_item/ammo/pistolhp
name = "10mm Hollow Point Magazine" name = "10mm Hollow Point Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. These rounds are more damaging but ineffective against armour." desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \
These rounds are more damaging but ineffective against armour."
item = /obj/item/ammo_box/magazine/m10mm/hp item = /obj/item/ammo_box/magazine/m10mm/hp
cost = 3 cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops) exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/ammo/pistolfire /datum/uplink_item/ammo/pistolfire
name = "10mm Incendiary Magazine" name = "10mm Incendiary Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. Loaded with incendiary rounds which ignite the target." desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \
Loaded with incendiary rounds which inflict little damage, but ignite the target."
item = /obj/item/ammo_box/magazine/m10mm/fire item = /obj/item/ammo_box/magazine/m10mm/fire
cost = 2 cost = 2
exclude_modes = list(/datum/game_mode/nuclear/clown_ops) exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -706,7 +723,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/ammo/shotgun/meteor /datum/uplink_item/ammo/shotgun/meteor
name = "12g Meteorslug Shells" name = "12g Meteorslug Shells"
desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \ desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \
Great for blasting airlocks off their frames." Great for blasting airlocks off their frames and knocking down enemies."
item = /obj/item/ammo_box/magazine/m12g/meteor item = /obj/item/ammo_box/magazine/m12g/meteor
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -750,13 +767,12 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
name = ".45 Ammo Duffel Bag" name = ".45 Ammo Duffel Bag"
desc = "A duffel bag filled with enough .45 ammo to supply an entire team, at a discounted price." desc = "A duffel bag filled with enough .45 ammo to supply an entire team, at a discounted price."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg
cost = 20 cost = 20 //instead of 27 TC
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/smg /datum/uplink_item/ammo/smg
name = ".45 SMG Magazine" name = ".45 SMG Magazine"
desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun. \ desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun."
These bullets pack a lot of punch that can knock most targets down, but do limited overall damage."
item = /obj/item/ammo_box/magazine/smgm45 item = /obj/item/ammo_box/magazine/smgm45
cost = 3 cost = 3
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -786,7 +802,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/ammo/carbine /datum/uplink_item/ammo/carbine
name = "5.56mm Toploader Magazine" name = "5.56mm Toploader Magazine"
desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl carbine. \ desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl carbine. \
These bullets pack less punch than 1.95mm rounds, but they still offer more power than .45 ammo." These bullets pack less punch than 7.12x82mm rounds, but they still offer more power than .45 ammo."
item = /obj/item/ammo_box/magazine/m556 item = /obj/item/ammo_box/magazine/m556
cost = 4 cost = 4
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -799,7 +815,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/ammo/machinegun/basic /datum/uplink_item/ammo/machinegun/basic
name = "1.95x129mm Box Magazine" name = "1.95x129mm Box Magazine"
desc = "A 50-round magazine of 1.95x129mm ammunition for use with the L6 SAW. \ desc = "A 50-round magazine of 1.95x129mm ammunition for use with the L6 SAW. \
By the time you need to use this, you'll already be on a pile of corpses." By the time you need to use this, you'll already be standing on a pile of corpses"
item = /obj/item/ammo_box/magazine/mm195x129 item = /obj/item/ammo_box/magazine/mm195x129
/datum/uplink_item/ammo/machinegun/ap /datum/uplink_item/ammo/machinegun/ap
@@ -821,9 +837,25 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn." mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn."
item = /obj/item/ammo_box/magazine/mm195x129/incen item = /obj/item/ammo_box/magazine/mm195x129/incen
/datum/uplink_item/ammo/rocket
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/rocket/basic
name = "84mm HE Rocket"
desc = "A low-yield anti-personnel HE rocket. Gonna take you out in style!"
item = /obj/item/ammo_casing/caseless/rocket
cost = 4
/datum/uplink_item/ammo/rocket/hedp
name = "84mm HEDP Rocket"
desc = "A high-yield HEDP rocket; extremely effective against armored targets, as well as surrounding personnel. \
Strike fear into the hearts of your enemies."
item = /obj/item/ammo_casing/caseless/rocket/hedp
cost = 6
/datum/uplink_item/ammo/pistolaps /datum/uplink_item/ammo/pistolaps
name = "9mm Handgun Magazine" name = "9mm Handgun Magazine"
desc = "An additional 15-round 9mm magazine, compatible with the Stetchkin APS pistol, found in the Spetsnaz Pyro bundle." desc = "An additional 15-round 9mm magazine, compatible with the Stechkin APS pistol, found in the Spetsnaz Pyro bundle."
item = /obj/item/ammo_box/magazine/pistolm9mm item = /obj/item/ammo_box/magazine/pistolm9mm
cost = 2 cost = 2
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
@@ -847,7 +879,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/ammo/toydarts /datum/uplink_item/ammo/toydarts
name = "Box of Riot Darts" name = "Box of Riot Darts"
desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" desc = "A box of 40 Donksoft riot darts, for reloading any compatible foam dart magazine. Don't forget to share!"
item = /obj/item/ammo_box/foambox/riot item = /obj/item/ammo_box/foambox/riot
cost = 2 cost = 2
surplus = 0 surplus = 0
@@ -871,7 +903,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
category = "Grenades and Explosives" category = "Grenades and Explosives"
/datum/uplink_item/explosives/bioterrorfoam /datum/uplink_item/explosives/bioterrorfoam
name = "Chemical Foam Grenade" name = "Bioterror Foam Grenade"
desc = "A powerful chemical foam grenade which creates a deadly torrent of foam that will mute, blind, confuse, \ desc = "A powerful chemical foam grenade which creates a deadly torrent of foam that will mute, blind, confuse, \
mutate, and irritate carbon lifeforms. Specially brewed by Tiger Cooperative chemical weapons specialists \ mutate, and irritate carbon lifeforms. Specially brewed by Tiger Cooperative chemical weapons specialists \
using additional spore toxin. Ensure suit is sealed before use." using additional spore toxin. Ensure suit is sealed before use."
@@ -901,7 +933,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/explosives/c4 /datum/uplink_item/explosives/c4
name = "Composition C-4" name = "Composition C-4"
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls, sabotage equipment, or connect \ desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls, sabotage equipment, or connect \
an assembly to it in order to alter the way it detonates. It has a modifiable timer with a \ an assembly to it in order to alter the way it detonates. It can be attached to almost all objects and has a modifiable timer with a \
minimum setting of 10 seconds." minimum setting of 10 seconds."
item = /obj/item/grenade/plastic/c4 item = /obj/item/grenade/plastic/c4
cost = 1 cost = 1
@@ -915,8 +947,9 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/explosives/x4bag /datum/uplink_item/explosives/x4bag
name = "Bag of X-4 explosives" name = "Bag of X-4 explosives"
desc = "Contains 3 X-4 plastic explosives. Similar, but more powerful than C-4. X-4 can be placed on a solid surface, such as a wall or window, and it will \ desc = "Contains 3 X-4 shaped plastic explosives. Similar to C4, but with a stronger blast that is directional instead of circular. \
blast through the wall, injuring anything on the opposite side, while being safer to the user. For when you want a wider, deeper, hole." X-4 can be placed on a solid surface, such as a wall or window, and it will blast through the wall, injuring anything on the opposite side, while being safer to the user. \
For when you want a controlled explosion that leaves a wider, deeper, hole."
item = /obj/item/storage/backpack/duffelbag/syndie/x4 item = /obj/item/storage/backpack/duffelbag/syndie/x4
cost = 4 // cost = 4 //
cant_discount = TRUE cant_discount = TRUE
@@ -937,16 +970,15 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
name = "Detomatix PDA Cartridge" name = "Detomatix PDA Cartridge"
desc = "When inserted into a personal digital assistant, this cartridge gives you four opportunities to \ desc = "When inserted into a personal digital assistant, this cartridge gives you four opportunities to \
detonate PDAs of crewmembers who have their message feature enabled. \ detonate PDAs of crewmembers who have their message feature enabled. \
The concussive effect from the explosion will knock the recipient out for a short period, and deafen \ The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer."
them for longer. Beware, it has a chance to detonate your PDA."
item = /obj/item/cartridge/virus/syndicate item = /obj/item/cartridge/virus/syndicate
cost = 5 cost = 5
restricted = TRUE restricted = TRUE
/datum/uplink_item/explosives/emp /datum/uplink_item/explosives/emp
name = "EMP Grenades and Implanter Kit" name = "EMP Grenades and Implanter Kit"
desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \ desc = "A box that contains five EMP grenades and an EMP implant with three uses. Useful to disrupt communications, \
security's energy weapons, and silicon lifeforms when you're in a tight spot." security's energy weapons and silicon lifeforms when you're in a tight spot."
item = /obj/item/storage/box/syndie_kit/emp item = /obj/item/storage/box/syndie_kit/emp
cost = 2 cost = 2
@@ -963,7 +995,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/explosives/grenadier /datum/uplink_item/explosives/grenadier
name = "Grenadier's belt" name = "Grenadier's belt"
desc = "A belt of a large variety of lethally dangerous and destructive grenades." desc = "A belt containing 26 lethally dangerous and destructive grenades. Comes with an extra multitool and screwdriver."
item = /obj/item/storage/belt/grenade/full item = /obj/item/storage/belt/grenade/full
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
cost = 22 cost = 22
@@ -1050,7 +1082,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/support/reinforcement/assault_borg /datum/uplink_item/support/reinforcement/assault_borg
name = "Syndicate Assault Cyborg" name = "Syndicate Assault Cyborg"
desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel." desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel. \
Comes equipped with a self-resupplying LMG, a grenade launcher, energy sword, emag, pinpointer, flash and crowbar."
item = /obj/item/antag_spawner/nuke_ops/borg_tele/assault item = /obj/item/antag_spawner/nuke_ops/borg_tele/assault
refundable = TRUE refundable = TRUE
cost = 65 cost = 65
@@ -1058,17 +1091,18 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/support/reinforcement/medical_borg /datum/uplink_item/support/reinforcement/medical_borg
name = "Syndicate Medical Cyborg" name = "Syndicate Medical Cyborg"
desc = "A combat medic cyborg, with potent healing reagents and a medical beam gun, but limited offensive potential." desc = "A combat medical cyborg. Has limited offensive potential, but makes more than up for it with its support capabilities. \
It comes equipped with a nanite hypospray, a medical beamgun, combat defibrillator, full surgical kit including an energy saw, an emag, pinpointer and flash. \
Thanks to its organ storage bag, it can perform surgery as well as any humanoid."
item = /obj/item/antag_spawner/nuke_ops/borg_tele/medical item = /obj/item/antag_spawner/nuke_ops/borg_tele/medical
refundable = TRUE refundable = TRUE
cost = 35 cost = 35
restricted = TRUE restricted = TRUE
/datum/uplink_item/support/gygax /datum/uplink_item/support/gygax
name = "Gygax Exosuit" name = "Dark Gygax Exosuit"
desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \
for hit-and-run style attacks. This model lacks a method of space propulsion, and therefore it is \ for hit-and-run style attacks. Features an incendiary carbine, flash bang launcher, teleporter, ion thrusters and a Tesla energy array."
advised to utilize the drop pod if you wish to make use of it."
item = /obj/mecha/combat/gygax/dark/loaded item = /obj/mecha/combat/gygax/dark/loaded
cost = 80 cost = 80
@@ -1081,8 +1115,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/support/mauler /datum/uplink_item/support/mauler
name = "Mauler Exosuit" name = "Mauler Exosuit"
desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring, \ desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \
and deployable smoke." and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array."
item = /obj/mecha/combat/marauder/mauler/loaded item = /obj/mecha/combat/marauder/mauler/loaded
cost = 140 cost = 140
@@ -1111,7 +1145,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/stealthy_tools/chameleon /datum/uplink_item/stealthy_tools/chameleon
name = "Chameleon Kit" name = "Chameleon Kit"
desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more!" desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \
Due to budget cuts, the shoes don't provide protection against slipping."
item = /obj/item/storage/box/syndie_kit/chameleon item = /obj/item/storage/box/syndie_kit/chameleon
cost = 2 cost = 2
exclude_modes = list(/datum/game_mode/nuclear) exclude_modes = list(/datum/game_mode/nuclear)
@@ -1125,7 +1160,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/stealthy_tools/codespeak_manual /datum/uplink_item/stealthy_tools/codespeak_manual
name = "Codespeak Manual" name = "Codespeak Manual"
desc = "Syndicate agents can be trained to use a series of codewords to convey complex information, which sounds like random concepts and drinks to anyone listening. This manual teaches you this Codespeak. You can also hit someone else with the manual in order to teach them. This is the deluxe edition, which has unlimited used." desc = "Syndicate agents can be trained to use a series of codewords to convey complex information, which sounds like random concepts and drinks to anyone listening. \
This manual teaches you this Codespeak. You can also hit someone else with the manual in order to teach them. This is the deluxe edition, which has unlimited uses."
item = /obj/item/codespeak_manual/unlimited item = /obj/item/codespeak_manual/unlimited
cost = 3 cost = 3
@@ -1141,12 +1177,31 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/stealthy_tools/emplight /datum/uplink_item/stealthy_tools/emplight
name = "EMP Flashlight" name = "EMP Flashlight"
desc = "A small, self-charging, short-ranged EMP device disguised as a flashlight. \ desc = "A small, self-recharging, short-ranged EMP device disguised as a working flashlight. \
Useful for disrupting headsets, cameras, and borgs during stealth operations." Useful for disrupting headsets, cameras, doors, lockers and borgs during stealth operations. \
Attacking a target with this flashlight will direct an EM pulse at it and consumes a charge."
item = /obj/item/flashlight/emp item = /obj/item/flashlight/emp
cost = 2 cost = 2
surplus = 30 surplus = 30
/datum/uplink_item/stealthy_tools/failsafe
name = "Failsafe Uplink Code"
desc = "When entered the uplink will self-destruct immidiately."
item = /obj/effect/gibspawner/generic
cost = 1
surplus = 0
restricted = TRUE
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/stealthy_tools/failsafe/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
if(!U)
return
U.failsafe_code = U.generate_code()
to_chat(user, "The new failsafe code for this uplink is now : [U.failsafe_code].")
if(user.mind)
user.mind.store_memory("Failsafe code for [U.parent] : [U.failsafe_code]")
return U.parent //For log icon
/datum/uplink_item/stealthy_tools/mulligan /datum/uplink_item/stealthy_tools/mulligan
name = "Mulligan" name = "Mulligan"
desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \ desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \
@@ -1173,7 +1228,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/stealthy_tools/jammer /datum/uplink_item/stealthy_tools/jammer
name = "Radio Jammer" name = "Radio Jammer"
desc = "This device will disrupt any nearby outgoing radio communication when activated." desc = "This device will disrupt any nearby outgoing radio communication when activated. Does not affect binary chat."
item = /obj/item/jammer item = /obj/item/jammer
cost = 5 cost = 5
@@ -1204,7 +1259,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/suits/space_suit /datum/uplink_item/suits/space_suit
name = "Syndicate Space Suit" name = "Syndicate Space Suit"
desc = "This red and black syndicate space suit is less encumbering than Nanotrasen variants, \ desc = "This red and black Syndicate space suit is less encumbering than Nanotrasen variants, \
fits inside bags, and has a weapon slot. Nanotrasen crew members are trained to report red space suit \ fits inside bags, and has a weapon slot. Nanotrasen crew members are trained to report red space suit \
sightings, however." sightings, however."
item = /obj/item/storage/box/syndie_kit/space item = /obj/item/storage/box/syndie_kit/space
@@ -1212,7 +1267,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/suits/hardsuit /datum/uplink_item/suits/hardsuit
name = "Syndicate Hardsuit" name = "Syndicate Hardsuit"
desc = "The feared suit of a syndicate nuclear agent. Features slightly better armoring and a built in jetpack \ desc = "The feared suit of a Syndicate nuclear agent. Features slightly better armoring and a built in jetpack \
that runs off standard atmospheric tanks. Toggling the suit in and out of \ that runs off standard atmospheric tanks. Toggling the suit in and out of \
combat mode will allow you all the mobility of a loose fitting uniform without sacrificing armoring. \ combat mode will allow you all the mobility of a loose fitting uniform without sacrificing armoring. \
Additionally the suit is collapsible, making it small enough to fit within a backpack. \ Additionally the suit is collapsible, making it small enough to fit within a backpack. \
@@ -1223,8 +1278,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/suits/hardsuit/elite /datum/uplink_item/suits/hardsuit/elite
name = "Elite Syndicate Hardsuit" name = "Elite Syndicate Hardsuit"
desc = "An upgraded, elite version of the syndicate hardsuit. It features fireproofing, and also \ desc = "An upgraded, elite version of the Syndicate hardsuit. It features fireproofing, and also \
provides the user with superior armor and mobility compared to the standard syndicate hardsuit." provides the user with superior armor and mobility compared to the standard Syndicate hardsuit."
item = /obj/item/clothing/suit/space/hardsuit/syndi/elite item = /obj/item/clothing/suit/space/hardsuit/syndi/elite
cost = 8 cost = 8
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
@@ -1232,7 +1287,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/suits/hardsuit/shielded /datum/uplink_item/suits/hardsuit/shielded
name = "Shielded Syndicate Hardsuit" name = "Shielded Syndicate Hardsuit"
desc = "An upgraded version of the standard syndicate hardsuit. It features a built-in energy shielding system. \ desc = "An upgraded version of the standard Syndicate hardsuit. It features a built-in energy shielding system. \
The shields can handle up to three impacts within a short duration and will rapidly recharge while not under fire." The shields can handle up to three impacts within a short duration and will rapidly recharge while not under fire."
item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi
cost = 30 cost = 30
@@ -1245,15 +1300,15 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/cutouts /datum/uplink_item/device_tools/cutouts
name = "Adaptive Cardboard Cutouts" name = "Adaptive Cardboard Cutouts"
desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. This pack contains three as well as a \ desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. \
crayon for changing their appearances." This pack contains three as well as a crayon for changing their appearances."
item = /obj/item/storage/box/syndie_kit/cutouts item = /obj/item/storage/box/syndie_kit/cutouts
cost = 1 cost = 1
surplus = 20 surplus = 20
/datum/uplink_item/device_tools/assault_pod /datum/uplink_item/device_tools/assault_pod
name = "Assault Pod Targeting Device" name = "Assault Pod Targeting Device"
desc = "Use to select the landing zone of your assault pod." desc = "Use this to select the landing zone of your assault pod."
item = /obj/item/assault_pod item = /obj/item/assault_pod
cost = 30 cost = 30
surplus = 0 surplus = 0
@@ -1298,8 +1353,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/camera_bug /datum/uplink_item/device_tools/camera_bug
name = "Camera Bug" name = "Camera Bug"
desc = "Enables you to view all cameras on the network and track a target. Bugging cameras allows you \ desc = "Enables you to view all cameras on the main network, set up motion alerts and track a target. \
to disable them remotely." Bugging cameras allows you to disable them remotely."
item = /obj/item/camera_bug item = /obj/item/camera_bug
cost = 1 cost = 1
surplus = 90 surplus = 90
@@ -1326,7 +1381,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/fakenucleardisk /datum/uplink_item/device_tools/fakenucleardisk
name = "Decoy Nuclear Authentication Disk" name = "Decoy Nuclear Authentication Disk"
desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny by the Captain. Don't try to give this to us to complete your objective, we know better!" desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny by the Captain. \
Don't try to give this to us to complete your objective, we know better!"
item = /obj/item/disk/nuclear/fake item = /obj/item/disk/nuclear/fake
cost = 1 cost = 1
surplus = 1 surplus = 1
@@ -1334,7 +1390,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/frame /datum/uplink_item/device_tools/frame
name = "F.R.A.M.E. PDA Cartridge" name = "F.R.A.M.E. PDA Cartridge"
desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \ desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \
when used cause the targeted PDA to become a new uplink with zero TCs, and immediately become unlocked. \ when used cause the targeted PDA to become a new uplink with zero TCs, and immediately become unlocked. \
You will receive the unlock code upon activating the virus, and the new uplink may be charged with \ You will receive the unlock code upon activating the virus, and the new uplink may be charged with \
telecrystals normally." telecrystals normally."
item = /obj/item/cartridge/virus/frame item = /obj/item/cartridge/virus/frame
@@ -1343,7 +1399,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/toolbox /datum/uplink_item/device_tools/toolbox
name = "Full Syndicate Toolbox" name = "Full Syndicate Toolbox"
desc = "The syndicate toolbox is a suspicious black and red. It comes loaded with a full tool set including a \ desc = "The Syndicate toolbox is a suspicious black and red. It comes loaded with a full tool set including a \
multitool and combat gloves that are resistant to shocks and heat." multitool and combat gloves that are resistant to shocks and heat."
item = /obj/item/storage/toolbox/syndicate item = /obj/item/storage/toolbox/syndicate
cost = 1 cost = 1
@@ -1366,7 +1422,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/medgun /datum/uplink_item/device_tools/medgun
name = "Medbeam Gun" name = "Medbeam Gun"
desc = "A wonder of Syndicate engineering, the Medbeam gun, or Medi-Gun enables a medic to keep his fellow \ desc = "A wonder of Syndicate engineering, the Medbeam gun, or Medi-Gun enables a medic to keep his fellow \
operatives in the fight, even while under fire." operatives in the fight, even while under fire. Don't cross the streams!"
item = /obj/item/gun/medbeam item = /obj/item/gun/medbeam
cost = 15 cost = 15
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
@@ -1388,9 +1444,9 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/powersink /datum/uplink_item/device_tools/powersink
name = "Power Sink" name = "Power Sink"
desc = "When screwed to wiring attached to a power grid and activated, this large device places excessive \ desc = "When screwed to wiring attached to a power grid and activated, this large device lights up and places excessive \
load on the grid, causing a station-wide blackout. The sink is large and cannot be stored in most \ load on the grid, causing a station-wide blackout. The sink is large and cannot be stored in most \
traditional bags and boxes." traditional bags and boxes. Caution: Will explode if the powernet contains sufficient amounts of energy."
item = /obj/item/powersink item = /obj/item/powersink
cost = 6 cost = 6
@@ -1399,7 +1455,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a \ desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a \
powerful burst of radiation, which, after a short delay, can incapacitate all but the most protected \ powerful burst of radiation, which, after a short delay, can incapacitate all but the most protected \
of humanoids. It has two settings: intensity, which controls the power of the radiation, \ of humanoids. It has two settings: intensity, which controls the power of the radiation, \
and wavelength, which controls how long the radiation delay is." and wavelength, which controls the delay before the effect kicks in."
item = /obj/item/healthanalyzer/rad_laser item = /obj/item/healthanalyzer/rad_laser
cost = 3 cost = 3
@@ -1414,7 +1470,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/medkit /datum/uplink_item/device_tools/medkit
name = "Syndicate Combat Medic Kit" name = "Syndicate Combat Medic Kit"
desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector \ desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector \
for rapid healing, a medical HUD for quick identification of injured personnel, \ for rapid healing, a medical night vision HUD for quick identification of injured personnel, \
and other supplies helpful for a field medic." and other supplies helpful for a field medic."
item = /obj/item/storage/firstaid/tactical item = /obj/item/storage/firstaid/tactical
cost = 4 cost = 4
@@ -1429,7 +1485,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/surgerybag_adv /datum/uplink_item/device_tools/surgerybag_adv
name = "Advanced Syndicate Surgery Duffel Bag" name = "Advanced Syndicate Surgery Duffel Bag"
desc = "The Syndicate surgery duffel bag is a toolkit containing all newest surgery tools, surgical drapes, \ desc = "The Syndicate surgery duffel bag is a toolkit containing all advanced surgery tools, surgical drapes, \
a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit." a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit."
item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv
cost = 10 cost = 10
@@ -1445,7 +1501,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/syndietome /datum/uplink_item/device_tools/syndietome
name = "Syndicate Tome" name = "Syndicate Tome"
desc = "Using rare artifacts acquired at great cost, the syndicate has reverse engineered \ desc = "Using rare artifacts acquired at great cost, the Syndicate has reverse engineered \
the seemingly magical books of a certain cult. Though lacking the esoteric abilities \ the seemingly magical books of a certain cult. Though lacking the esoteric abilities \
of the originals, these inferior copies are still quite useful, being able to provide \ of the originals, these inferior copies are still quite useful, being able to provide \
both weal and woe on the battlefield, even if they do occasionally bite off a finger." both weal and woe on the battlefield, even if they do occasionally bite off a finger."
@@ -1464,7 +1520,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/potion /datum/uplink_item/device_tools/potion
name = "Syndicate Sentience Potion" name = "Syndicate Sentience Potion"
item = /obj/item/slimepotion/slime/sentience/nuclear item = /obj/item/slimepotion/slime/sentience/nuclear
desc = "A potion recovered at great risk by undercover syndicate operatives and then subsequently modified with syndicate technology. Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors." desc = "A potion recovered at great risk by undercover Syndicate operatives and then subsequently modified with Syndicate technology. \
Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors."
cost = 2 cost = 2
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
restricted = TRUE restricted = TRUE
@@ -1478,7 +1535,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/implants/adrenal /datum/uplink_item/implants/adrenal
name = "Adrenal Implant" name = "Adrenal Implant"
desc = "An implant injected into the body, and later activated at the user's will. It will inject a chemical \ desc = "An implant injected into the body, and later activated at the user's will. It will inject a chemical \
cocktail which has a mild healing effect along with removing all stuns and increasing movement speed." cocktail which removes all incapacitating effects, lets the user run faster and has a mild healing effect."
item = /obj/item/storage/box/syndie_kit/imp_adrenal item = /obj/item/storage/box/syndie_kit/imp_adrenal
cost = 8 cost = 8
player_minimum = 25 player_minimum = 25
@@ -1517,28 +1574,30 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/implants/radio /datum/uplink_item/implants/radio
name = "Internal Syndicate Radio Implant" name = "Internal Syndicate Radio Implant"
desc = "An implant injected into the body, allowing the use of an internal syndicate radio. Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \
Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection."
item = /obj/item/storage/box/syndie_kit/imp_radio item = /obj/item/storage/box/syndie_kit/imp_radio
cost = 4 cost = 4
restricted = TRUE restricted = TRUE
/datum/uplink_item/implants/reviver /datum/uplink_item/implants/reviver
name = "Reviver Implant" name = "Reviver Implant"
desc = "This implant will attempt to revive you if you lose consciousness. Comes with an autosurgeon." desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon."
item = /obj/item/autosurgeon/reviver item = /obj/item/autosurgeon/reviver
cost = 8 cost = 8
include_modes = list(/datum/game_mode/nuclear) include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/implants/stealthimplant /datum/uplink_item/implants/stealthimplant
name = "Stealth Implant" name = "Stealth Implant"
desc = "This one-of-a-kind implant will make you almost invisible if you play your cards right." desc = "This one-of-a-kind implant will make you almost invisible as long as you don't don't excessively move around. \
On activation, it will conceal you inside a chameleon cardboard box that is only revealed once someone bumps into it."
item = /obj/item/implanter/stealth item = /obj/item/implanter/stealth
cost = 8 cost = 8
/datum/uplink_item/implants/storage /datum/uplink_item/implants/storage
name = "Storage Implant" name = "Storage Implant"
desc = "An implant injected into the body, and later activated at the user's will. It will open a small bluespace \ desc = "An implant injected into the body, and later activated at the user's will. It will open a small bluespace \
pocket capable of storing two items." pocket capable of storing two regular-sized items."
item = /obj/item/storage/box/syndie_kit/imp_storage item = /obj/item/storage/box/syndie_kit/imp_storage
cost = 8 cost = 8
@@ -1551,7 +1610,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/implants/uplink /datum/uplink_item/implants/uplink
name = "Uplink Implant" name = "Uplink Implant"
desc = "An implant injected into the body, and later activated at the user's will. Has no telecrystals, must be charged by the use of physical telecrystals. Undetectable (except via surgery), and excellent for escaping confinement." desc = "An implant injected into the body, and later activated at the user's will. Has no telecrystals and must be charged by the use of physical telecrystals. \
Undetectable (except via surgery), and excellent for escaping confinement."
item = /obj/item/storage/box/syndie_kit/imp_uplink item = /obj/item/storage/box/syndie_kit/imp_uplink
cost = 4 cost = 4
// An empty uplink is kinda useless. // An empty uplink is kinda useless.
@@ -1610,7 +1670,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \
movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \
transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \
be defused, and some crew may attempt to do so." be defused, and some crew may attempt to do so. \
The bomb core can be pried out and manually detonated with other explosives."
item = /obj/item/sbeacondrop/clownbomb item = /obj/item/sbeacondrop/clownbomb
cost = 15 cost = 15
restricted_roles = list("Clown") restricted_roles = list("Clown")
@@ -1638,7 +1699,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/role_restricted/haunted_magic_eightball /datum/uplink_item/role_restricted/haunted_magic_eightball
name = "Haunted Magic Eightball" name = "Haunted Magic Eightball"
desc = "Most magic eightballs are toys with dice inside. Although identical in appearance to the harmless toys, this occult device reaches into the spirit world to find its answers. Be warned, that spirits are often capricious or just little assholes. To use, simply speak your question aloud, then begin shaking." desc = "Most magic eightballs are toys with dice inside. Although identical in appearance to the harmless toys, this occult device reaches into the spirit world to find its answers. \
Be warned, that spirits are often capricious or just little assholes. To use, simply speak your question aloud, then begin shaking."
item = /obj/item/toy/eightball/haunted item = /obj/item/toy/eightball/haunted
cost = 2 cost = 2
restricted_roles = list("Curator") restricted_roles = list("Curator")
@@ -1657,14 +1719,16 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/role_restricted/explosive_hot_potato /datum/uplink_item/role_restricted/explosive_hot_potato
name = "Exploding Hot Potato" name = "Exploding Hot Potato"
desc = "A potato rigged with explosives. On activation, a special mechanism is activated that prevents it from being dropped. The only way to get rid of it if you are holding it is to attack someone else with it, causing it to latch to that person instead." desc = "A potato rigged with explosives. On activation, a special mechanism is activated that prevents it from being dropped. \
The only way to get rid of it if you are holding it is to attack someone else with it, causing it to latch to that person instead."
item = /obj/item/hot_potato/syndicate item = /obj/item/hot_potato/syndicate
cost = 4 cost = 4
restricted_roles = list("Cook", "Botanist", "Clown", "Mime") restricted_roles = list("Cook", "Botanist", "Clown", "Mime")
/datum/uplink_item/role_restricted/ez_clean_bundle /datum/uplink_item/role_restricted/ez_clean_bundle
name = "EZ Clean Grenade Bundle" name = "EZ Clean Grenade Bundle"
desc = "A box with three cleaner grenades using the trademark Waffle Co. formula. Serves as a cleaner and causes acid damage to anyone standing nearby. The acid only affects carbon-based creatures." desc = "A box with three cleaner grenades using the trademark Waffle Co. formula. Serves as a cleaner and causes acid damage to anyone standing nearby. \
The acid only affects carbon-based creatures."
item = /obj/item/storage/box/syndie_kit/ez_clean item = /obj/item/storage/box/syndie_kit/ez_clean
cost = 6 cost = 6
surplus = 20 surplus = 20
@@ -1679,7 +1743,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/role_restricted/mimery /datum/uplink_item/role_restricted/mimery
name = "Guide to Advanced Mimery Series" name = "Guide to Advanced Mimery Series"
desc = "The classical two part series on how to further hone your mime skills. Upon studying the series, the user should be able to make 3x1 invisible walls, and shoot bullets out of their fingers. Obviously only works for Mimes." desc = "The classical two part series on how to further hone your mime skills. Upon studying the series, the user should be able to make 3x1 invisible walls, and shoot bullets out of their fingers. \
Obviously only works for Mimes."
cost = 12 cost = 12
item = /obj/item/storage/box/syndie_kit/mimery item = /obj/item/storage/box/syndie_kit/mimery
restricted_roles = list("Mime") restricted_roles = list("Mime")
@@ -1694,7 +1759,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/role_restricted/pressure_mod /datum/uplink_item/role_restricted/pressure_mod
name = "Kinetic Accelerator Pressure Mod" name = "Kinetic Accelerator Pressure Mod"
desc = "A modification kit which allows Kinetic Accelerators to do greatly increased damage while indoors. Occupies 35% mod capacity." desc = "A modification kit which allows Kinetic Accelerators to do greatly increased damage while indoors. \
Occupies 35% mod capacity."
item = /obj/item/borg/upgrade/modkit/indoors item = /obj/item/borg/upgrade/modkit/indoors
cost = 5 //you need two for full damage, so total of 10 for maximum damage cost = 5 //you need two for full damage, so total of 10 for maximum damage
limited_stock = 2 //you can't use more than two! limited_stock = 2 //you can't use more than two!
@@ -1702,7 +1768,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/role_restricted/kitchen_gun /datum/uplink_item/role_restricted/kitchen_gun
name = "Kitchen Gun (TM)" name = "Kitchen Gun (TM)"
desc = "A revolutionary .45 caliber cleaning solution! Say goodbye to daily stains and dirty surfaces with Kitchen Gun (TM)! Just five shots from Kitchen Gun (TM), and it'll sparkle like new! Includes two extra ammunition clips!" desc = "A revolutionary .45 caliber cleaning solution! Say goodbye to daily stains and dirty surfaces with Kitchen Gun (TM)! \
Just five shots from Kitchen Gun (TM), and it'll sparkle like new! Includes two extra ammunition clips!"
cost = 10 cost = 10
surplus = 40 surplus = 40
restricted_roles = list("Cook", "Janitor") restricted_roles = list("Cook", "Janitor")
@@ -1717,7 +1784,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/role_restricted/magillitis_serum /datum/uplink_item/role_restricted/magillitis_serum
name = "Magillitis Serum Autoinjector" name = "Magillitis Serum Autoinjector"
desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas." desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \
Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas."
item = /obj/item/reagent_containers/hypospray/magillitis item = /obj/item/reagent_containers/hypospray/magillitis
cost = 15 cost = 15
restricted_roles = list("Geneticist", "Chief Medical Officer") restricted_roles = list("Geneticist", "Chief Medical Officer")
@@ -1767,7 +1835,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/badass/costumes/obvious_chameleon /datum/uplink_item/badass/costumes/obvious_chameleon
name = "Broken Chameleon Kit" name = "Broken Chameleon Kit"
desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! Please note that this kit did NOT pass quality control." desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \
Please note that this kit did NOT pass quality control."
item = /obj/item/storage/box/syndie_kit/chameleon/broken item = /obj/item/storage/box/syndie_kit/chameleon/broken
/datum/uplink_item/badass/costumes /datum/uplink_item/badass/costumes
@@ -1777,7 +1846,8 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/badass/costumes/centcom_official /datum/uplink_item/badass/costumes/centcom_official
name = "CentCom Official Costume" name = "CentCom Official Costume"
desc = "Ask the crew to \"inspect\" their nuclear disk and weapons system, and then when they decline, pull out a fully automatic rifle and gun down the Captain. Radio headset does not include key. No gun included." desc = "Ask the crew to \"inspect\" their nuclear disk and weapons system, and then when they decline, pull out a fully automatic rifle and gun down the Captain. \
Radio headset does not include encryption key. No gun included."
item = /obj/item/storage/box/syndie_kit/centcom_costume item = /obj/item/storage/box/syndie_kit/centcom_costume
/datum/uplink_item/badass/costumes/clown /datum/uplink_item/badass/costumes/clown

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.