diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index ad8c54e1ca9..cb817850ac4 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1172,7 +1172,8 @@ var/global/list/common_tools = list( /obj/item/clothing/glasses/sunglasses/gar,\ /obj/item/clothing/glasses/hud/security/sunglasses/gars,\ /obj/item/clothing/glasses/meson/gar,\ - /obj/item/weapon/twohanded/spear) + /obj/item/weapon/twohanded/spear,\ + /obj/item/weapon/melee/energy/sword/cyborg/saw) //Because is_sharp is used for food or something. var/list/sharp_things_2 = list(\ @@ -1420,7 +1421,7 @@ B --><-- A //but then you can never stop it and that's just silly. /atom/movable/var/atom/orbiting = null //we raise this each time orbit is called to prevent mutiple calls in a short time frame from breaking things -/atom/movable/var/orbitid = 0 +/atom/movable/var/orbitid = 0 /atom/movable/proc/orbit(atom/A, radius = 10, clockwise = 1, angle_increment = 15, lockinorbit = 0) if(!istype(A)) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 387badc8c8b..07b98685d23 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -146,8 +146,8 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/crossbow name = "Miniature Energy Crossbow" - desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag unnoticed. It fires bolts tipped with a paralyzing toxin collected from a rare organism. \ - The bow generates bolts using an internal power source but must be manually charged between shots." + desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag unnoticed. It will synthesize and fire bolts tipped with a paralyzing toxin that will \ + briefly stun targets and cause them to slur as if inebriated. It can produce an infinite amount of bolts, but must be manually recharged with each shot." item = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow cost = 12 excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) @@ -157,13 +157,14 @@ var/list/uplink_items = list() name = "Flamethrower" desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen stations. Make a statement by roasting the filth in their own greed. Use with caution." item = /obj/item/weapon/flamethrower/full/tank - cost = 11 + cost = 4 gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) surplus = 40 /datum/uplink_item/dangerous/sword name = "Energy Sword" - desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise." + desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise. One can combine two \ + energy swords to create a double energy sword, which must be wielded in two hands but is more robust and deflects all energy projectiles." item = /obj/item/weapon/melee/energy/sword/saber cost = 8 @@ -175,7 +176,7 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/syndicate_minibomb name = "Syndicate Minibomb" - desc = "The Minibomb is a grenade with a five-second fuse." + desc = "The minibomb is a grenade with a five-second fuse. Upon detonation, it will create a small hull breach in addition to dealing high amounts of damage to nearby personnel." item = /obj/item/weapon/grenade/syndieminibomb cost = 6 @@ -305,7 +306,7 @@ var/list/uplink_items = list() /datum/uplink_item/ammo/bioterror name = "Box of Bioterror Syringes" - desc = "A box full of preloaded syringes, containing various chemicals that seize up the victim's motor and broca system , making it impossible for them to move or speak while in their system." + desc = "A box full of preloaded syringes, containing various chemicals that seize up the victim's motor and broca systems, making it impossible for them to move or speak for some time." item = /obj/item/weapon/storage/box/syndie_kit/bioterror cost = 6 gamemodes = list(/datum/game_mode/nuclear) @@ -332,12 +333,11 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 -/datum/uplink_item/ammo/toydarts +/datum/uplink_item/ammo/toydarts //This used to only be for nuke ops, but had the cost lowered and made available to traitors because >a box of foam darts is more expensive than four carbine magazines 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!" item = /obj/item/ammo_box/foambox/riot - cost = 10 - gamemodes = list(/datum/game_mode/nuclear) + cost = 2 surplus = 0 // STEALTHY WEAPONS @@ -348,7 +348,7 @@ var/list/uplink_items = list() /datum/uplink_item/stealthy_weapons/throwingstars name = "Box of Throwing Stars" - desc = "A box of throwing stars with a high chance of embedding themselves in people's limbs." + desc = "A box of shurikens from ancient Earth martial arts. They are highly effective throwing weapons, and will embed into limbs when possible." item = /obj/item/weapon/storage/box/throwing_stars cost = 6 excludefrom = list(/datum/game_mode/nuclear) @@ -360,17 +360,17 @@ var/list/uplink_items = list() cost = 2 /datum/uplink_item/stealthy_weapons/foampistol - name = "Toy Gun (with Stun Darts)" - desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade darts, to incapacitate a target." + name = "Toy Gun with Riot Darts" + desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade darts effective at incapacitating a target." item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot - cost = 6 + cost = 3 surplus = 10 excludefrom = list(/datum/game_mode/gang) /datum/uplink_item/stealthy_weapons/sleepy_pen name = "Sleepy Pen" - desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a strong anaesthetic and a chemical that is capable of blocking the movement of the vocal chords. \ - The pen holds one dose of the mixture, and cannot be refilled." + 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. \ + The pen holds one dose of the mixture, and cannot be refilled. Note that before the target falls asleep, they will be able to move and act." item = /obj/item/weapon/pen/sleepy cost = 4 excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) @@ -384,11 +384,18 @@ var/list/uplink_items = list() /datum/uplink_item/stealthy_weapons/traitor_chem_bottle name = "Poison Kit" - desc = "An assortment of nasty chemicals." + desc = "An assortment of deadly chemicals packed into a compact box. Hard to utilize if there is no method of application." item = /obj/item/weapon/storage/box/syndie_kit/chemical cost = 6 surplus = 50 +/datum/uplink_item/stealthy_weapons/dart_pistol + name = "Dart Pistol" + desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any space a small item can." + item = /obj/item/weapon/gun/syringe/syndicate + cost = 4 + surplus = 50 //High chance of surplus due to poison kit also having a high chance + /datum/uplink_item/stealthy_weapons/detomatix name = "Detomatix PDA Cartridge" 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. \ @@ -407,7 +414,7 @@ var/list/uplink_items = list() name = "Pizza Bomb" desc = "A pizza box with a bomb taped inside it. The timer needs to be set by opening the box; afterwards, opening the box again will trigger the detonation." item = /obj/item/device/pizza_bomb - cost = 5 + cost = 6 surplus = 8 /datum/uplink_item/stealthy_weapons/dehy_carp @@ -420,7 +427,7 @@ var/list/uplink_items = list() name = "Explosive Airlock Charge" desc = "A small, easily concealable device. It can be applied to an open airlock panel, and the next person to open that airlock will be knocked down in an explosion. The airlock's maintenance panel will also be destroyed by this." item = /obj/item/device/doorCharge - cost = 5 + cost = 2 surplus = 10 excludefrom = list(/datum/game_mode/nuclear) @@ -431,7 +438,7 @@ var/list/uplink_items = list() /datum/uplink_item/stealthy_tools/chameleon_jumpsuit name = "Chameleon Jumpsuit" - desc = "A jumpsuit used to imitate the uniforms of Nanotrasen crewmembers." + desc = "A jumpsuit used to imitate the uniforms of Nanotrasen crewmembers. It can change form at any time to resemble another jumpsuit. May react unpredictably to electromagnetic disruptions." item = /obj/item/clothing/under/chameleon cost = 2 @@ -445,46 +452,47 @@ var/list/uplink_items = list() /datum/uplink_item/stealthy_tools/syndigaloshes name = "No-Slip Brown Shoes" - desc = "These allow you to run on wet floors. They do not work on lubricated surfaces." + desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. They do not work on heavily lubricated surfaces." item = /obj/item/clothing/shoes/sneakers/syndigaloshes cost = 2 excludefrom = list(/datum/game_mode/nuclear) /datum/uplink_item/stealthy_tools/syndigaloshes/nuke name = "Tactical No-Slip Brown Shoes" - desc = "These allow you to run on wet floors. They do not work on lubricated surfaces, and the maker swears they're better than normal ones, somehow." + desc = "These allow you to run on wet floors. They do not work on lubricated surfaces, but the manufacturer guarantees they're somehow better than the normal ones." cost = 4 //but they aren't gamemodes = list(/datum/game_mode/nuclear) /datum/uplink_item/stealthy_tools/agent_card - name = "Agent Identification card" - desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access from other identification cards. The access is cumulative, so scanning one card does not erase the access gained from another." + name = "Agent Identification Card" + desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access from other identification cards. The access is cumulative, so scanning one card does not erase the access gained from another. \ + In addition, they can be forged to display a new assignment and name. This can be done an unlimited amount of times. Some Syndicate areas can only be accessed with these cards." item = /obj/item/weapon/card/id/syndicate cost = 2 /datum/uplink_item/stealthy_tools/voice_changer name = "Voice Changer" item = /obj/item/clothing/mask/gas/voice - desc = "A conspicuous gas mask that mimics the voice named on your identification card. When no identification is worn, the mask will render your voice unrecognizable." + desc = "A conspicuous gas mask that mimics the voice named on your identification card. It can be toggled on and off." cost = 3 /datum/uplink_item/stealthy_tools/chameleon_proj - name = "Chameleon-Projector" - desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't move the projector from their hand. Disguised users cannot run, and projectiles pass over them." + name = "Chameleon Projector" + desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't move the projector from their hand. Disguised users move slowly, and projectiles pass over them." item = /obj/item/device/chameleon cost = 7 excludefrom = list(/datum/game_mode/gang) /datum/uplink_item/stealthy_tools/camera_bug name = "Camera Bug" - desc = "Enables you to view all cameras on the network and track a target. Bugging cameras allows you to disable them remotely" + desc = "Enables you to view all cameras on the network and track a target. Bugging cameras allows you to disable them remotely." item = /obj/item/device/camera_bug cost = 1 surplus = 90 /datum/uplink_item/stealthy_tools/smugglersatchel name = "Smuggler's Satchel" - desc = "This satchel is thin enough to be hidden in the gap between plating and tiling, great for stashing your stolen goods. Comes with a crowbar and a floor tile inside." + desc = "This satchel is thin enough to be hidden in the gap between plating and tiling; great for stashing your stolen goods. Comes with a crowbar and a floor tile inside." item = /obj/item/weapon/storage/backpack/satchel_flat cost = 2 surplus = 30 @@ -503,14 +511,14 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/emag name = "Cryptographic Sequencer" - desc = "The cryptographic sequencer, or emag, is a small card that unlocks hidden functions in electronic devices, subverts intended functions and characteristically breaks security mechanisms." + desc = "The cryptographic sequencer, or emag, is a small card that unlocks hidden functions in electronic devices, subverts intended functions, and characteristically breaks security mechanisms." item = /obj/item/weapon/card/emag cost = 6 excludefrom = list(/datum/game_mode/gang) /datum/uplink_item/device_tools/toolbox name = "Full Syndicate Toolbox" - desc = "The syndicate toolbox is a suspicious black and red. Aside from tools, it comes with cable and a multitool. Insulated gloves are not included." + 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." item = /obj/item/weapon/storage/toolbox/syndicate cost = 1 @@ -522,15 +530,15 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/military_belt name = "Military Belt" - desc = "A robust seven-slot red belt made for carrying a broad variety of weapons, ammunition and explosives" + desc = "A robust seven-slot red belt that is capable of holding all items that can fit into it." item = /obj/item/weapon/storage/belt/military cost = 3 excludefrom = list(/datum/game_mode/nuclear) /datum/uplink_item/device_tools/medkit name = "Syndicate Combat Medic Kit" - desc = "The syndicate medkit is a suspicious black and red. Included is a combat stimulant injector for rapid healing, a medical hud for quick identification of injured comrades, \ - and other medical supplies helpful for a medical field operative." + 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, \ + and other supplies helpful for a field medic." item = /obj/item/weapon/storage/firstaid/tactical cost = 9 gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) @@ -544,18 +552,18 @@ var/list/uplink_items = list() excludefrom = list(/datum/game_mode/gang) /datum/uplink_item/device_tools/hardsuit - name = "Blood-red Hardsuit" + name = "Blood-Red Hardsuit" desc = "The feared suit of a syndicate nuclear agent. Features slightly better armoring and a built in jetpack that runs off standard atmospheric tanks. \ When the built in helmet is deployed your identity will be protected, even in death, as the suit cannot be removed by outside forces. Toggling the suit into combat mode \ will allow you all the mobility of a loose fitting uniform without sacrificing armoring. Additionally the suit is collapsible, small enough to fit within a backpack. \ - Nanotrasen crewmembers are trained to report red space suit sightings, these suits in particular are known to drive employees into a panic." + Nanotrasen crewmembers are trained to report red space suit sightings; these suits in particular are known to drive employees into a panic." item = /obj/item/clothing/suit/space/hardsuit/syndi cost = 8 excludefrom = list(/datum/game_mode/gang) /datum/uplink_item/device_tools/thermal name = "Thermal Imaging Glasses" - desc = "These glasses are thermals disguised as engineers' optical meson scanners. \ + desc = "These goggles can be turned to resemble common eyewears throughout the station. \ They allow you to see organisms through walls by capturing the upper portion of the infrared light spectrum, emitted as heat and light by objects. \ Hotter objects, such as warm bodies, cybernetic organisms and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks." //THEN WHY CANT THEY SEE PLASMA FIRES???? item = /obj/item/clothing/glasses/thermal/syndi @@ -563,14 +571,16 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/binary name = "Binary Translator Key" - desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary. " + desc = "A key that, when inserted into a radio headset, allows you to listen to and talk with silicon-based lifeforms, such as AI units and cyborgs, over their private binary channel. Caution should \ + be taken while doing this, as unless they are allied with you, they are programmed to report such intrusions." item = /obj/item/device/encryptionkey/binary cost = 5 surplus = 75 /datum/uplink_item/device_tools/encryptionkey name = "Syndicate Encryption Key" - desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel." + desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel with other agents that have the same \ + key." item = /obj/item/device/encryptionkey/syndicate cost = 2 //Nowhere near as useful as the Binary Key! surplus = 75 @@ -603,25 +613,26 @@ var/list/uplink_items = list() cost = 1 /datum/uplink_item/device_tools/powersink - name = "Power sink" - desc = "When screwed to wiring attached to an electric grid, then activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink cannot be carried because of its excessive size. \ - Ordering this sends you a small beacon that will teleport the power sink to your location on activation." + name = "Power Sink" + desc = "When screwed to wiring attached to a power grid and activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink is large and cannot be stored in \ + most traditional bags and boxes." item = /obj/item/device/powersink cost = 10 /datum/uplink_item/device_tools/singularity_beacon name = "Singularity Beacon" - desc = "When screwed to wiring attached to an electric grid, then activated, this large device pulls the singularity towards it. \ - Does not work when the singularity is still in containment. A singularity beacon can cause catastrophic damage to a space station, \ - leading to an emergency evacuation. Because of its size, it cannot be carried. Ordering this sends you a small beacon that will teleport the larger beacon to your location on activation." + desc = "When screwed to wiring attached to an electric grid and activated, this large device pulls any active gravitational singularities towards it. \ + This will not work when the singularity is still in containment. A singularity beacon can cause catastrophic damage to a space station, \ + leading to an emergency evacuation. Because of its size, it cannot be carried. Ordering this sends you a small beacon that will teleport the larger beacon to your location upon activation." item = /obj/item/device/sbeacondrop cost = 14 excludefrom = list(/datum/game_mode/gang) /datum/uplink_item/device_tools/syndicate_bomb name = "Syndicate Bomb" - desc = "The Syndicate Bomb has an adjustable timer with a minimum setting of 60 seconds. Ordering the bomb sends you a small beacon, which will teleport the explosive to your location when you activate it. \ - You can wrench the bomb down to prevent removal. The crew may attempt to defuse the bomb." + desc = "The Syndicate bomb is a fearsome device capable of massive destruction. It has an adjustable timer, 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 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." item = /obj/item/device/sbeacondrop/bomb cost = 11 @@ -634,7 +645,7 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/syndicate_detonator name = "Syndicate Detonator" - desc = "The Syndicate Detonator is a companion device to the Syndicate Bomb. Simply press the included button and an encrypted radio frequency will instruct all live syndicate bombs to detonate. \ + desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of the blast radius before using the detonator." item = /obj/item/device/syndicatedetonator cost = 3 @@ -642,7 +653,7 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/teleporter name = "Teleporter Circuit Board" - desc = "A printed circuit board that completes the teleporter onboard the mothership. Advise you test fire the teleporter before entering it, as malfunctions can occur." + desc = "A printed circuit board that completes the teleporter onboard the mothership. It is advised you calibrate the teleporter before entering it, as malfunctions can occur." item = /obj/item/weapon/circuitboard/teleporter cost = 40 gamemodes = list(/datum/game_mode/nuclear) @@ -664,34 +675,34 @@ var/list/uplink_items = list() /datum/uplink_item/implants/freedom name = "Freedom Implant" - desc = "An implant injected into the body and later activated using a bodily gesture to attempt to slip restraints." + desc = "An implant injected into the body and later activated at the user's will. It will attempt to free the user from common restraints such as handcuffs." item = /obj/item/weapon/storage/box/syndie_kit/imp_freedom cost = 5 /datum/uplink_item/implants/uplink name = "Uplink Implant" - desc = "An implant injected into the body, and later activated using a bodily gesture to open an uplink with 10 telecrystals. \ - The ability for an agent to open an uplink after their possessions have been stripped from them makes this implant excellent for escaping confinement." + desc = "An implant injected into the body, and later activated at the user's will. It will open a separate uplink with 10 telecrystals. The ability to have these telecrystals, combined with no easy \ + way to detect the ipmlant, makes this excellent for escaping confinement." item = /obj/item/weapon/storage/box/syndie_kit/imp_uplink cost = 14 surplus = 0 /datum/uplink_item/implants/adrenal name = "Adrenal Implant" - desc = "An implant injected into the body, and later activated using a bodily gesture to inject a chemical cocktail, which has a mild healing effect along with removing all stuns and increasing his speed." + 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." item = /obj/item/weapon/storage/box/syndie_kit/imp_adrenal cost = 8 /datum/uplink_item/implants/storage name = "Storage Implant" - desc = "An implant injected into the body and later used to store up to two big items in a subspace pocket." + desc = "An implant injected into the body, and later activated at the user's will. It will open a small subspace pocket capable of storing two items." item = /obj/item/weapon/storage/box/syndie_kit/imp_storage cost = 8 /datum/uplink_item/implants/microbomb name = "Microbomb Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. The more implants inside of you, the higher the explosive power. \ - Will permanently destroy your body, however." + This will permanently destroy your body, however." item = /obj/item/weapon/storage/box/syndie_kit/imp_microbomb cost = 2 gamemodes = list(/datum/game_mode/nuclear) @@ -706,31 +717,31 @@ var/list/uplink_items = list() /datum/uplink_item/cyber_implants/thermals name = "Thermal Vision Implant" - desc = "These cybernetic eyes will give you thermal vision." + desc = "These cybernetic eyes will give you thermal vision. They must be implanted via surgery." item = /obj/item/organ/internal/cyberimp/eyes/thermals cost = 8 /datum/uplink_item/cyber_implants/xray name = "X-Ray Vision Implant" - desc = "These cybernetic eyes will give you X-ray vision." + desc = "These cybernetic eyes will give you X-ray vision. They must be implanted via surgery." item = /obj/item/organ/internal/cyberimp/eyes/xray cost = 10 /datum/uplink_item/cyber_implants/antistun name = "CNS Rebooter Implant" - desc = "This implant will help you get back up on your feet faster after being stunned." + desc = "This implant will help you get back up on your feet faster after being stunned. It must be implanted via surgery." item = /obj/item/organ/internal/cyberimp/brain/anti_stun cost = 12 /datum/uplink_item/cyber_implants/reviver name = "Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness." + desc = "This implant will attempt to revive you if you lose consciousness. It must be implanted via surgery." item = /obj/item/organ/internal/cyberimp/chest/reviver cost = 8 /datum/uplink_item/cyber_implants/bundle name = "Cybernetic Implants Bundle" - desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants." + desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. They must be implanted via surgery." item = /obj/item/weapon/storage/box/cyber_implants cost = 40 @@ -743,7 +754,7 @@ var/list/uplink_items = list() /datum/uplink_item/badass/syndiecigs name = "Syndicate Smokes" - desc = "Strong flavor, dense smoke, infused with Omnizine." + desc = "Strong flavor, dense smoke, infused with omnizine." item = /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate cost = 2 @@ -771,14 +782,14 @@ var/list/uplink_items = list() cost = 1 /datum/uplink_item/badass/balloon - name = "For showing that you are The Boss" - desc = "A useless red balloon with the syndicate logo on it, which can blow the deepest of covers." + name = "For showing that you are THE BOSS" + desc = "A useless red balloon with the Syndicate logo on it. Can blow the deepest of covers." item = /obj/item/toy/syndicateballoon cost = 20 /datum/uplink_item/implants/macrobomb name = "Macrobomb Implant" - desc = "An implant injected into the body, and later activated either manually or automatically upon death. Maximum explosion power." + desc = "An implant injected into the body, and later activated either manually or automatically upon death. Upon death, releases a massive explosion that will wipe out everything nearby." item = /obj/item/weapon/storage/box/syndie_kit/imp_macrobomb cost = 20 gamemodes = list(/datum/game_mode/nuclear) diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 722f1bce2af..99541008be4 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -120,16 +120,21 @@ target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store) /obj/item/weapon/antag_spawner/borg_tele - name = "Syndicate Cyborg Teleporter" - desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field." + name = "syndicate cyborg teleporter" + desc = "A single-use teleporter used to deploy a Syndicate cyborg on the field." icon = 'icons/obj/device.dmi' icon_state = "locator" var/TC_cost = 0 + var/borg_to_spawn + var/list/possible_types = list("Assault", "Medical") /obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user) if(used) user << "The teleporter is out of power." return + borg_to_spawn = input("What type?", "Cyborg Type", type) as null|anything in possible_types + if(!borg_to_spawn) + return var/list/borg_candicates = get_candidates(BE_OPERATIVE) if(borg_candicates.len > 0) used = 1 @@ -139,10 +144,18 @@ user << "Unable to connect to Syndicate Command. Please wait and try again later or use the teleporter on your uplink to get your points refunded." /obj/item/weapon/antag_spawner/borg_tele/spawn_antag(client/C, turf/T, type = "") + if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything + used = 0 + return var/datum/effect/effect/system/spark_spread/S = new /datum/effect/effect/system/spark_spread S.set_up(4, 1, src) S.start() - var/mob/living/silicon/robot/R = new /mob/living/silicon/robot/syndicate(T) + var/mob/living/silicon/robot/R + switch(borg_to_spawn) + if("Medical") + R = new /mob/living/silicon/robot/syndicate/medical(T) + else + R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default R.key = C.key ticker.mode.syndicates += R.mind ticker.mode.update_synd_icons_added(R.mind) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 44170c8a8a2..e16f3f851ab 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -1,3 +1,7 @@ +#define CAMERA_UPGRADE_XRAY 1 +#define CAMERA_UPGRADE_EMP_PROOF 2 +#define CAMERA_UPGRADE_MOTION 4 + /obj/machinery/camera name = "security camera" desc = "It's used to monitor rooms." @@ -29,6 +33,9 @@ var/busy = 0 var/emped = 0 //Number of consecutive EMP's on this camera + // Upgrades bitflag + var/upgrades = 0 + /obj/machinery/camera/New() ..() assembly = new(src) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index cc1139e511d..94049ba063d 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -61,25 +61,25 @@ // CHECKS /obj/machinery/camera/proc/isEmpProof() - var/O = locate(/obj/item/stack/sheet/mineral/plasma) in assembly.upgrades - return O + return upgrades & CAMERA_UPGRADE_EMP_PROOF /obj/machinery/camera/proc/isXRay() - var/O = locate(/obj/item/device/analyzer) in assembly.upgrades - return O + return upgrades & CAMERA_UPGRADE_XRAY /obj/machinery/camera/proc/isMotion() - var/O = locate(/obj/item/device/assembly/prox_sensor) in assembly.upgrades - return O + return upgrades & CAMERA_UPGRADE_MOTION // UPGRADE PROCS /obj/machinery/camera/proc/upgradeEmpProof() assembly.upgrades.Add(new /obj/item/stack/sheet/mineral/plasma(assembly)) + upgrades |= CAMERA_UPGRADE_EMP_PROOF /obj/machinery/camera/proc/upgradeXRay() assembly.upgrades.Add(new /obj/item/device/analyzer(assembly)) + upgrades |= CAMERA_UPGRADE_XRAY // If you are upgrading Motion, and it isn't in the camera's New(), add it to the machines list. /obj/machinery/camera/proc/upgradeMotion() assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly)) + upgrades |= CAMERA_UPGRADE_MOTION diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 8f8a5fdfeaf..dc8c80861cb 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -324,7 +324,9 @@ About the new airlock wires panel: /obj/machinery/door/airlock/examine(mob/user) ..() if(charge && !p_open && in_range(user, src)) - user << "The maintenance panel is bulging slightly." + user << "The maintenance panel seems haphazardly fastened." + if(charge && p_open) + user << "Something is wired up to the airlock's electronics!" /obj/machinery/door/airlock/attack_ai(mob/user) if(!src.canAIControl()) @@ -802,7 +804,7 @@ About the new airlock wires panel: if(p_open && charge) user << "You carefully start removing [charge] from [src]..." playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(!do_after(user, 150)) + if(!do_after(user, 150, target = src)) user << "You slip and [charge] detonates!" charge.ex_act(1) user.Weaken(3) @@ -810,9 +812,6 @@ About the new airlock wires panel: user.visible_message("[user] removes [charge] from [src].", \ "You gently pry out [charge] from [src] and unhook its wires.") charge.loc = get_turf(user) - if(prob(25)) - charge.ex_act(1) - return charge = null return if( beingcrowbarred && (density && welded && !operating && src.p_open && (!hasPower()) && !src.locked) ) @@ -920,6 +919,7 @@ About the new airlock wires panel: p_open = 1 update_icon(AIRLOCK_OPENING) visible_message("[src]'s panel is blown off in a spray of deadly shrapnel!") + charge.loc = get_turf(src) charge.ex_act(1) detonated = 1 charge = null @@ -927,6 +927,7 @@ About the new airlock wires panel: H.Paralyse(8) H.adjust_fire_stacks(1) H.IgniteMob() //Guaranteed knockout and ignition for nearby people + H.apply_damage(20, BRUTE, "chest") return if(forced < 2) if(emagged) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index efba67616bc..a58e46a89b6 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -281,10 +281,24 @@ var/cooldown = 0 var/busy = 0 var/obj/item/weapon/defibrillator/defib + var/req_defib = 1 + var/combat = 0 //If it penetrates armor and gives additional functionality + +/obj/item/weapon/twohanded/shockpaddles/proc/recharge(var/time) + if(req_defib || !time) + return + cooldown = 1 + update_icon() + sleep(time) + var/turf/T = get_turf(src) + T.audible_message("[src] beeps: Unit is recharged.") + playsound(T, 'sound/machines/defib_ready.ogg', 50, 0) + cooldown = 0 + update_icon() /obj/item/weapon/twohanded/shockpaddles/New(mainunit) ..() - if(check_defib_exists(mainunit, src)) + if(check_defib_exists(mainunit, src) && req_defib) defib = mainunit loc = defib busy = 0 @@ -299,11 +313,14 @@ /obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user) user.visible_message("[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.") - defib.deductcharge(revivecost) + if(req_defib) + defib.deductcharge(revivecost) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) return (OXYLOSS) /obj/item/weapon/twohanded/shockpaddles/dropped(mob/user) + if(!req_defib) + return ..() if(user) var/obj/item/weapon/twohanded/O = user.get_inactive_hand() if(istype(O)) @@ -315,6 +332,8 @@ return unwield(user) /obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O) + if(!req_defib) + return 1 //If it doesn't need a defib, just say it exists if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns M.unEquip(O) qdel(O) @@ -327,22 +346,35 @@ if(busy) return - if(!defib.powered) + if(req_defib && !defib.powered) user.visible_message("[defib] beeps: Unit is unpowered.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) return if(!wielded) - user << "You need to wield the paddles in both hands before you can use them on someone!" + if(isrobot(user)) + user << "You must activate the paddles in your active module before you can use them on someone!" + else + user << "You need to wield the paddles in both hands before you can use them on someone!" return if(cooldown) - user << "[defib] is recharging!" + if(req_defib) + user << "[defib] is recharging!" + else + user << "[src] are recharging!" return if(!ishuman(M)) - user << "The instructions on [defib] don't mention how to revive that..." + if(req_defib) + user << "The instructions on [defib] don't mention how to revive that..." + else + user << "You aren't sure how to revive that..." return else var/mob/living/carbon/human/H = M - if(user.a_intent == "disarm" && !defib.safety) + if(user.a_intent == "disarm") + if(req_defib && defib.safety) + return + if(!req_defib && !combat) + return busy = 1 H.visible_message("[user] has touched [H.name] with [src]!", \ "[user] has touched [H.name] with [src]!") @@ -351,15 +383,23 @@ H.updatehealth() //forces health update before next life tick playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) H.emote("gasp") - add_logs(user, M, "stunned", defib) - defib.deductcharge(revivecost) - cooldown = 1 + add_logs(user, M, "stunned", src) + if(req_defib) + defib.deductcharge(revivecost) + cooldown = 1 busy = 0 update_icon() - defib.cooldowncheck(user) + if(req_defib) + defib.cooldowncheck(user) + else + recharge(60) return if(user.zone_sel && user.zone_sel.selecting == "chest") - if(!defib.safety && user.a_intent == "harm") + if(user.a_intent == "harm") + if(req_defib && defib.safety) + return + if(!req_defib && !combat) + return user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You overcharge the paddles and begin to place them onto [M]'s chest...") busy = 1 @@ -369,9 +409,16 @@ "You place [src] on [M.name]'s chest and begin to charge them.") var/turf/T = get_turf(defib) playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - T.audible_message("\The [defib] lets out an urgent beep and lets out a steadily rising hum...") + if(req_defib) + T.audible_message("\The [defib] lets out an urgent beep and lets out a steadily rising hum...") + else + user.audible_message("[src] let out an urgent beep.") if(do_after(user, 30, target = M)) //Takes longer due to overcharging - if(M.stat == DEAD) + if(!M) + busy = 0 + update_icon() + return + if(M && M.stat == DEAD) user << "[M] is dead." playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = 0 @@ -391,12 +438,15 @@ add_logs(user, M, "overloaded the heart of", defib) M.Weaken(5) M.Jitter(100) - defib.deductcharge(revivecost) - cooldown = 1 + if(req_defib) + defib.deductcharge(revivecost) + cooldown = 1 busy = 0 update_icon() - defib.cooldowncheck(user) - return + if(!req_defib) + recharge(60) + if(req_defib && (defib.cooldowncheck(user))) + return busy = 0 update_icon() return @@ -416,8 +466,8 @@ if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total for(var/obj/item/carried_item in H.contents) if(istype(carried_item, /obj/item/clothing/suit/space)) - if(!defib.combat) - user.visible_message("[defib] buzzes: Patient's chest is obscured. Operation aborted.") + if((!src.combat && !req_defib) || (req_defib && !defib.combat)) + user.audible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = 0 update_icon() @@ -432,13 +482,13 @@ var/failed = null if (H.suiciding || (H.disabilities & NOCLONE)) - failed = "[defib] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." else if ((tplus > tlimit) || !H.getorgan(/obj/item/organ/internal/heart)) - failed = "[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return. Further attempts futile." + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return. Further attempts futile." else if(total_burn >= 180 || total_brute >= 180) - failed = "[defib] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile." + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile." else if(H.get_ghost() || !H.getorgan(/obj/item/organ/internal/brain)) - failed = "[defib] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful." + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful." if(failed) @@ -455,7 +505,7 @@ H.adjustToxLoss((mobhealth - halfwaycritdeath) * (H.getToxLoss() / overall_damage)) H.adjustFireLoss((mobhealth - halfwaycritdeath) * (total_burn / overall_damage)) H.adjustBruteLoss((mobhealth - halfwaycritdeath) * (total_brute / overall_damage)) - user.visible_message("[defib] pings: Resuscitation successful.") + user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.") playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) H.stat = UNCONSCIOUS dead_mob_list -= H @@ -464,19 +514,32 @@ if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) add_logs(user, M, "revived", defib) - defib.deductcharge(revivecost) + if(req_defib) + defib.deductcharge(revivecost) + cooldown = 1 update_icon() - cooldown = 1 - defib.cooldowncheck(user) + if(req_defib) + defib.cooldowncheck(user) + else + recharge(60) else if(H.heart_attack) H.heart_attack = 0 - user.visible_message("[defib] pings: Patient's heart is now beating again.") + user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.") playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) else - user.visible_message("[defib] buzzes: Patient is not in a valid state. Operation aborted.") + user.visible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = 0 update_icon() else user << "You need to target your patient's chest with [src]!" return + +/obj/item/weapon/twohanded/shockpaddles/syndicate + name = "syndicate defibrillator paddles" + desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and todeliver powerful shocks offensively." + combat = 1 + icon = 'icons/obj/weapons.dmi' + icon_state = "defibpaddles0" + item_state = "defibpaddles0" + req_defib = 0 diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 24c9a6de8cb..4e2fe6f2ae3 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -91,7 +91,7 @@ return /obj/item/weapon/melee/energy/sword/cyborg - var/hitcost = 500 + var/hitcost = 50 /obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R) if(R.cell) @@ -103,6 +103,28 @@ ..() return +/obj/item/weapon/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs + name = "energy saw" + desc = "For heavy duty cutting. It has a carbon-fiber blade and an energy capacitor that can be toggled to make it more powerful." + icon_state = "esaw" + force_on = 30 + force = 18 //About as much as a spear + hitsound = 'sound/weapons/circsawhit.ogg' + origin_tech = "materials=3;biotech=3;syndicate=3" + icon = 'icons/obj/surgery.dmi' + icon_state = "esaw_0" + icon_state_on = "esaw_1" + hitcost = 75 //Costs more because it's not intended to be a murderbone weapon + item_color = null + w_class = 3 + +/obj/item/weapon/melee/energy/sword/cyborg/saw/New() + ..() + item_color = null + +/obj/item/weapon/melee/energy/sword/cyborg/saw/IsShield() + return 0 + /obj/item/weapon/melee/energy/sword/saber /obj/item/weapon/melee/energy/sword/saber/blue diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index e342de7ac9a..06285181170 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -37,7 +37,10 @@ else //something wrong name = "[initial(name)]" update_icon() - user << "You are now carrying the [name] with one hand." + if(isrobot(user)) + user << "You free up your module." + else + user << "You are now carrying the [name] with one hand." if(unwieldsound) playsound(loc, unwieldsound, 50, 1) var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand() @@ -57,7 +60,10 @@ force = force_wielded name = "[name] (Wielded)" update_icon() - user << "You grab the [name] with both hands." + if(isrobot(user)) + user << "You dedicate your module to [name]." + else + user << "You grab the [name] with both hands." if (wieldsound) playsound(loc, wieldsound, 50, 1) var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 35dee19e978..d244d7a8626 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -28,6 +28,8 @@ /datum/round_event/alien_infestation/start() var/list/vents = list() for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world) + if(qdeleted(temp_vent)) + continue if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 if(temp_vent_parent.other_atmosmch.len > 20) //Stops Aliens getting stuck in small networks. See: Security, Virology diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c007fb21077..6930c4524a7 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1109,8 +1109,12 @@ scrambledcodes = 1 modtype = "Synd" faction = list("syndicate") - designation = "Syndicate" + designation = "Syndicate Assault" req_access = list(access_syndicate) + var/playstyle_string = "You are a Syndicate assault cyborg!
\ + You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ + Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \ + Help the operatives secure the disk at all costs!" /mob/living/silicon/robot/syndicate/New(loc) ..() @@ -1120,6 +1124,23 @@ module = new /obj/item/weapon/robot_module/syndicate(src) laws = new /datum/ai_laws/syndicate_override() +/mob/living/silicon/robot/syndicate/medical + icon_state = "syndi-medi" + designation = "Syndicate Medical" + playstyle_string = "You are a Syndicate medical cyborg!
\ + You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ + Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ + Your defibrillator paddles can revive operatives through their hardsuits, or can be used on harm intent to shock enemies! \ + Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \ + Help the operatives secure the disk at all costs!" + +/mob/living/silicon/robot/syndicate/New(loc) + ..() + module = new /obj/item/weapon/robot_module/syndicate_medical(src) + spawn(5) + if(playstyle_string) + src << playstyle_string + /mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname) if(!connected_ai) return diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ad5e2644e66..4073292af07 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -248,7 +248,7 @@ /obj/item/weapon/robot_module/syndicate - name = "syndicate robot module" + name = "syndicate assault robot module" /obj/item/weapon/robot_module/syndicate/New() ..() @@ -262,6 +262,37 @@ emag = null fix_modules() +/obj/item/weapon/robot_module/syndicate_medical + name = "syndicate medical robot module" + +/obj/item/weapon/robot_module/syndicate_medical/New() + ..() + modules += new /obj/item/weapon/reagent_containers/borghypo/syndicate(src) + modules += new /obj/item/weapon/twohanded/shockpaddles/syndicate(src) + modules += new /obj/item/device/healthanalyzer(src) + modules += new /obj/item/weapon/reagent_containers/syringe(src) + modules += new /obj/item/weapon/surgical_drapes(src) + modules += new /obj/item/weapon/retractor(src) + modules += new /obj/item/weapon/hemostat(src) + modules += new /obj/item/weapon/cautery(src) + modules += new /obj/item/weapon/scalpel(src) + modules += new /obj/item/weapon/melee/energy/sword/cyborg/saw(src) //Energy saw -- primary weapon + modules += new /obj/item/roller/robo(src) + modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) + modules += new /obj/item/weapon/crowbar(src) + modules += new /obj/item/weapon/pinpointer/operative(src) + emag = null + + var/datum/robot_energy_storage/gauze/gauzestore = new /datum/robot_energy_storage/gauze(src) + + var/obj/item/stack/medical/gauze/cyborg/G = new /obj/item/stack/medical/gauze/cyborg(src) + G.source = gauzestore + modules += G + + storages += gauzestore + + fix_modules() + /datum/robot_energy_storage var/name = "Generic energy storage" var/max_energy = 30000 diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ff7b09b6632..7a2aa6fd408 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -426,14 +426,10 @@ /mob/living/carbon/human/proc/Blobize() if (notransform) return - var/obj/effect/blob/core/new_blob = new /obj/effect/blob/core (loc) - if(!client) - for(var/mob/dead/observer/G in player_list) - if(ckey == "@[G.ckey]") - new_blob.create_overmind(G.client , 1) - break + if(!client) //TOO BAD + new /obj/effect/blob/core (loc) else - new_blob.create_overmind(src.client , 1) + new /obj/effect/blob/core (loc,new_overmind = src.client) gib(src) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b9749cc3e98..dff25cc5c59 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -23,6 +23,7 @@ var/fire_sound = "gunshot" var/suppressed = 0 //whether or not a message is displayed when fired var/can_suppress = 0 + var/can_unsuppress = 1 var/recoil = 0 //boom boom shake the room var/clumsy_check = 1 var/obj/item/ammo_casing/chambered = null diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 028cf8f7f68..f3f93102e14 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -89,7 +89,7 @@ /obj/item/weapon/gun/projectile/attack_hand(mob/user) if(loc == user) - if(suppressed) + if(suppressed && can_unsuppress) var/obj/item/weapon/suppressor/S = suppressed if(user.l_hand != src && user.r_hand != src) ..() diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index e44ae121576..8f22c228f21 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -78,3 +78,14 @@ desc = "A modification of the syringe gun design, using a rotating cylinder to store up to six syringes." icon_state = "rapidsyringegun" max_syringes = 6 + +/obj/item/weapon/gun/syringe/syndicate + name = "dart pistol" + desc = "A small spring-loaded sidearm that functions identically to a syringe gun." + icon_state = "syringe_pistol" + item_state = "gun" //Smaller inhand + w_class = 2 + origin_tech = "combat=2;syndicate=2" + force = 2 //Also very weak because it's smaller + suppressed = 1 //Softer fire sound + can_unsuppress = 0 //Permanently silenced diff --git a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm index 43a4c5c8a39..2368f87e60d 100644 --- a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm @@ -902,3 +902,20 @@ datum/reagent/medicine/tricordrazine/overdose_process(mob/living/M) M.adjustFireLoss(2*REM) ..() return + +datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs + name = "Restorative Nanites" + id = "syndicate_nanites" + description = "Miniature medical robots that swiftly restore bodily damage." + reagent_state = SOLID + color = "#555555" + +datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M) + M.adjustBruteLoss(-2*REM) + M.adjustFireLoss(-2*REM) + M.adjustOxyLoss(-2*REM) + M.adjustToxLoss(-2*REM) + M.adjustBrainLoss(-5*REM) + M.adjustCloneLoss(-1*REM) + ..() + return diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index b971a49f98a..51e5e9e8756 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -125,6 +125,15 @@ Borg Hypospray if(empty) usr << "It is currently empty! Allow some time for the internal syntheszier to produce more." + +/obj/item/weapon/reagent_containers/borghypo/syndicate + name = "syndicate cyborg hypospray" + desc = "A modified hypospray that generates reagents more quickly and consumes less power." + icon_state = "borghypo_s" + charge_cost = 20 + recharge_time = 2 + reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine") + /* Borg Shaker */ diff --git a/code/modules/surgery/generic_steps.dm b/code/modules/surgery/generic_steps.dm index 2eec6061949..8ae69a48768 100644 --- a/code/modules/surgery/generic_steps.dm +++ b/code/modules/surgery/generic_steps.dm @@ -74,7 +74,7 @@ //saw bone /datum/surgery_step/saw name = "saw bone" - implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/twohanded/fireaxe = 50, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25) + implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/energy/sword/cyborg/saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/twohanded/fireaxe = 50, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25) time = 54 /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 7fcf8616e62..236bba1082e 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -12,7 +12,7 @@ //cut fat /datum/surgery_step/cut_fat name = "cut excess fat" - implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25) + implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/energy/sword/cyborg/saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25) time = 64 /datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 53380e15d7c..7186a9b1365 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -86,7 +86,6 @@ origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") - /obj/item/weapon/surgical_drapes name = "surgical drapes" desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control." diff --git a/html/changelog.html b/html/changelog.html index 658fc52d737..ea4c8d14c32 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,49 @@ -->
+

22 September 2015

+

Kor updated:

+ +

Xhuis updated:

+ +

phil235 updated:

+ +

xxalpha updated:

+ +

20 September 2015

Xhuis updated: