Antag Uplink Expansion

This commit is contained in:
Mechoid
2020-03-16 21:21:41 -07:00
committed by VirgoBot
parent a7fc7b3786
commit 487c39eab8
33 changed files with 723 additions and 28 deletions

View File

@@ -13,7 +13,7 @@
/datum/uplink_item/abstract/announcements/fake_centcom
name = "Command Update Announcement"
desc = "Causes a falsified Command Update. Triggers immediately after supplying additional data."
item_cost = 40
item_cost = 20
/datum/uplink_item/abstract/announcements/fake_centcom/extra_args(var/mob/user)
var/title = sanitize(input("Enter your announcement title.", "Announcement Title") as null|text)
@@ -41,7 +41,7 @@
/datum/uplink_item/abstract/announcements/fake_crew_arrival
name = "Crew Arrival Announcement/Records"
desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!"
item_cost = 30
item_cost = 15
/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
if(!user)

View File

@@ -13,3 +13,18 @@
name = "Heavy Armor Vest"
item_cost = 40
path = /obj/item/clothing/suit/storage/vest/heavy/merc
/datum/uplink_item/item/armor/gorlexsuit
name = "Mercenary Voidsuit"
item_cost = 40
path = /obj/item/weapon/storage/box/syndie_kit/voidsuit
/datum/uplink_item/item/armor/gorlexsuit_fire
name = "Mercenary Voidsuit (Fire)"
item_cost = 40
path = /obj/item/weapon/storage/box/syndie_kit/voidsuit/fire
/datum/uplink_item/item/armor/combat
name = "Combat Platecarrier Set"
item_cost = 60
path = /obj/item/clothing/suit/armor/pcarrier/merc

View File

@@ -25,51 +25,51 @@
path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink
/datum/uplink_item/item/implants/imp_shades
name = "Integrated Thermal-Shades Implant (Organic)"
name = "Integrated Thermal-Shades Implant"
item_cost = 80
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug
/datum/uplink_item/item/implants/imp_taser
name = "Integrated Taser Implant (Organic)"
name = "Integrated Taser Implant"
item_cost = 30
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/taser
/datum/uplink_item/item/implants/imp_laser
name = "Integrated Laser Implant (Organic)"
name = "Integrated Laser Implant"
item_cost = 50
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/laser
/datum/uplink_item/item/implants/imp_dart
name = "Integrated Dart Implant (Organic)"
name = "Integrated Dart Implant"
item_cost = 60
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/dart
/datum/uplink_item/item/implants/imp_toolkit
name = "Integrated Toolkit Implant (Organic)"
name = "Integrated Toolkit Implant"
item_cost = 80
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/toolkit
/datum/uplink_item/item/implants/imp_medkit
name = "Integrated Medkit Implant (Organic)"
name = "Integrated Medkit Implant"
item_cost = 60
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/medkit
/datum/uplink_item/item/implants/imp_analyzer
name = "Integrated Research Scanner Implant (Organic)"
name = "Integrated Research Scanner Implant"
item_cost = 20
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/analyzer
/datum/uplink_item/item/implants/imp_sword
name = "Integrated Sword Implant (Organic)"
name = "Integrated Sword Implant"
item_cost = 40
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/sword
/datum/uplink_item/item/implants/imp_sprinter
name = "Integrated Sprinter Implant (Organic)"
name = "Integrated Sprinter Implant"
item_cost = 40
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/sprinter
/datum/uplink_item/item/implants/imp_sprinter
name = "Integrated Surge Implant (Organic)"
name = "Integrated Surge Implant"
item_cost = 40
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/surge

View File

@@ -24,11 +24,23 @@
item_cost = 10
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting
/datum/uplink_item/item/medical/clotting_case
name = "Clotting Medicine case"
item_cost = 20
desc = "A case of three myelamine injectors. Can rapidly remove and stow up to six injectors."
path = /obj/item/weapon/storage/quickdraw/syringe_case/clotting
/datum/uplink_item/item/medical/bonemeds
name = "Bone Repair injector"
item_cost = 10
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed
/datum/uplink_item/item/medical/bonemeds_case
name = "Bone Repair case"
item_cost = 20
desc = "A case of three osteodaxon injectors. Can rapidly remove and stow up to six injectors."
path = /obj/item/weapon/storage/quickdraw/syringe_case/bonemed
/datum/uplink_item/item/medical/ambrosiadeusseeds
name = "Box of 7x ambrosia deus seed packets"
item_cost = 10

View File

@@ -0,0 +1,48 @@
/datum/uplink_item/crated/resources
name = "Resource Crate"
desc = "A crate routed from an in-system trading post, containing various valuable materials."
item_cost = 60
category = /datum/uplink_category/services
paths = list(\
/obj/fiftyspawner/uranium,\
/obj/fiftyspawner/phoron,\
/obj/fiftyspawner/gold,\
/obj/fiftyspawner/silver,\
/obj/fiftyspawner/osmium,\
/obj/fiftyspawner/plasteel\
)
/datum/uplink_item/crated/seeds
name = "Exotic Plantlife Crate"
desc = "A crate routed from an in-system trading post, containing various exotic plants."
item_cost = 20
category = /datum/uplink_category/services
paths = list(\
/obj/item/seeds/random,\
/obj/item/seeds/random,\
/obj/item/seeds/random,\
/obj/item/seeds/random,\
/obj/item/seeds/random,\
/obj/item/seeds/random,\
/obj/item/seeds/random,\
/obj/item/seeds/random\
)
/datum/uplink_item/crated/spare_organs
name = "Spare Organ Crate"
desc = "A crate stolen from a medical relief ship, containing various bioprinted organs."
item_cost = 20
category = /datum/uplink_category/services
crate_path = /obj/structure/closet/crate/freezer
paths = list(\
/obj/item/organ/internal/eyes/replicant,\
/obj/item/organ/internal/heart/replicant,\
/obj/item/organ/internal/kidneys/replicant,\
/obj/item/organ/internal/liver/replicant,\
/obj/item/organ/internal/lungs/replicant,\
/obj/item/organ/internal/voicebox/replicant\
)

View File

@@ -37,4 +37,16 @@
/datum/uplink_item/item/stealth_items/makeover
name = "Makeover Kit"
item_cost = 5
path = /obj/item/weapon/makeover
path = /obj/item/weapon/makeover
/datum/uplink_item/item/stealth_items/thievesgloves
name = "Thieve's Gloves"
desc = "A pair of sterile gloves that allow the wearer to inspect the backpacks of other players, and swap pocket items."
item_cost = 30
path = /obj/item/clothing/gloves/sterile/thieves
/datum/uplink_item/item/stealth_items/deadringer
name = "Stealth Watch"
desc = "A strange watch which can be used to create a fake corpse if you are injured when it is active, as it projects a cloaking field around your person."
item_cost = 50
path = /obj/item/weapon/deadringer

View File

@@ -33,3 +33,51 @@
name = "Random Toxin - Beaker"
item_cost = 10
path = /obj/item/weapon/storage/box/syndie_kit/toxin
/datum/uplink_item/item/stealthy_weapons/penblade
name = "Energy Penblade, Black"
desc = "A concealed energy dagger with the functional casing of a pen. Makes an impressive throwing weapon."
item_cost = 20
path = /obj/item/weapon/pen/blade
/datum/uplink_item/item/stealthy_weapons/penblade_red
name = "Energy Penblade, Red"
desc = "A concealed energy dagger with the functional casing of a pen. Makes an impressive throwing weapon."
item_cost = 20
path = /obj/item/weapon/pen/blade/red
/datum/uplink_item/item/stealthy_weapons/penblade_blue
name = "Energy Penblade, Blue"
desc = "A concealed energy dagger with the functional casing of a pen. Makes an impressive throwing weapon."
item_cost = 20
path = /obj/item/weapon/pen/blade/blue
/datum/uplink_item/item/stealthy_weapons/penblade_fancy
name = "Energy Penblade, Fountain"
desc = "A concealed energy dagger with the functional casing of a pen. Makes an impressive throwing weapon."
item_cost = 20
path = /obj/item/weapon/pen/blade/fountain
/datum/uplink_item/item/stealthy_weapons/angrybuzzer
name = "Morphium Shock Ring"
desc = "An enigmatic ring used to create powerful electric shocks when punching. Can be used as a brute-force method of defibrillation."
item_cost = 40
path = /obj/item/clothing/gloves/ring/buzzer
/datum/uplink_item/item/stealthy_weapons/huntingtrap
name = "Camonetted Beartraps"
desc = "A box of unique beartraps which will partially cloak when deployed, allowing for more effective hunting."
item_cost = 30
path = /obj/item/weapon/storage/box/syndie_kit/deadliest_game
/datum/uplink_item/item/stealthy_weapons/virus
name = "Virus Cultures"
desc = "A box of three unique virus cultures. As dangerous to you as anyone else if handled improperly."
item_cost = 40
path = /obj/item/weapon/storage/box/syndie_kit/viral
/datum/uplink_item/item/stealthy_weapons/syringe_case
name = "Quickdraw Syringe Case"
desc = "A small box capable of holding six syringes for rapid deployment. Fits in your pocket."
item_cost = 20
path = /obj/item/weapon/storage/quickdraw/syringe_case

View File

@@ -91,6 +91,12 @@
item_cost = 30
path = /obj/item/weapon/card/emag
/datum/uplink_item/item/tools/graviton
name = "Graviton Goggles"
desc = "An obvious, if useful pair of advanced imaging goggles that allow you to see objects and turfs through walls."
item_cost = 15
path = /obj/item/clothing/glasses/graviton
/datum/uplink_item/item/tools/thermal
name = "Thermal Imaging Glasses"
item_cost = 30
@@ -111,6 +117,11 @@
item_cost = 60
path = /obj/item/weapon/storage/box/syndie_kit/demolitions_heavy
/datum/uplink_item/item/tools/integratedcircuitprinter
name = "Integrated Circuit Printer (Upgraded)"
item_cost = 10
path = /obj/item/device/integrated_circuit_printer/upgraded
/*
/datum/uplink_item/item/tools/packagebomb/huge
name = "Package Bomb (Huge)

View File

@@ -52,4 +52,4 @@ datum/uplink_category/ammunition
name = "Telecrystals"
/datum/uplink_category/backup
name = "Backup"
name = "Backup"

View File

@@ -162,6 +162,36 @@ datum/uplink_item/dd_SortValue()
return "[bicon(default_abstract_uplink_icon)]"
/*
* Crated goods.
*/
/datum/uplink_item/crated
var/crate_path = /obj/structure/largecrate
var/list/paths = list() // List of paths to be spawned into the crate.
/datum/uplink_item/crated/get_goods(var/obj/item/device/uplink/U, var/loc)
var/obj/L = new crate_path(get_turf(loc))
L.adjust_scale(rand(9, 12) / 10, rand(9, 12) / 10) // Some variation in the crate / locker size.
for(var/path in paths)
var/obj/O = new path(L)
O.forceMove(L)
return L
/datum/uplink_item/crated/description()
if(!desc)
// Fallback description
var/obj/temp = crate_path
desc = initial(temp.desc)
return ..()
/datum/uplink_item/crated/log_icon()
var/obj/I = crate_path
return "\icon[I]"
/****************
* Support procs *
****************/

View File

@@ -61,7 +61,7 @@
/datum/uplink_item/item/visible_weapons/riggedlaser
name = "Exosuit Rigged Laser"
item_cost = 60
item_cost = 30
path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
/datum/uplink_item/item/visible_weapons/revolver
@@ -146,7 +146,7 @@
/datum/uplink_item/item/visible_weapons/egun
name = "Energy Gun"
item_cost = 60
item_cost = 30
path = /obj/item/weapon/gun/energy/gun
/datum/uplink_item/item/visible_weapons/lasercannon
@@ -171,5 +171,17 @@
/datum/uplink_item/item/visible_weapons/xray
name = "Xray Gun"
item_cost = 85
item_cost = 60
path = /obj/item/weapon/gun/energy/xray
/datum/uplink_item/item/visible_weapons/flamethrower
name = "Heavy Flamethrower"
desc = "A large flamethrower that runs on pressurized, gaseous phoron and electric charge."
item_cost = 60
path = /obj/item/weapon/storage/secure/briefcase/flamer
/datum/uplink_item/item/visible_weapons/concussion_grenades
name = "Concussion Grenades (8)"
desc = "A box of eight concussion grenades."
item_cost = 30
path = /obj/item/weapon/storage/box/syndie_kit/concussion_grenade

View File

@@ -634,6 +634,8 @@ modules/mob/mob_movement.dm if you move you will be zoomed out
modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
*/
//Looking through a scope or binoculars should /not/ improve your periphereal vision. Still, increase viewsize a tiny bit so that sniping isn't as restricted to NSEW
/obj/item/var/ignore_visor_zoom_restriction = FALSE
/obj/item/proc/zoom(var/tileoffset = 14,var/viewsize = 9) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view
var/devicename
@@ -682,7 +684,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
H.client.pixel_y = 0
H.visible_message("[usr] peers through the [zoomdevicename ? "[zoomdevicename] of the [src.name]" : "[src.name]"].")
H.looking_elsewhere = TRUE
if(!ignore_visor_zoom_restriction)
H.looking_elsewhere = TRUE
H.handle_vision()
else

View File

@@ -75,12 +75,12 @@
var/obj/item/organ/external/E = setup_augment_slots(H, NewOrgan)
to_chat(H, "<span class='notice'>You feel a tingling sensation in your [part].</span>")
if(E && istype(E) && !(H.internal_organs_by_name[NewOrgan.organ_tag]))
NewOrgan.forceMove(H)
NewOrgan.owner = H
if(E && istype(E) && !(H.internal_organs_by_name[NewOrgan.organ_tag]) && NewOrgan.check_verb_compatability())
spawn(rand(1 SECONDS, 30 SECONDS))
to_chat(H, "<span class='alien'>You feel a pressure in your [E] as the tingling fades, the lump caused by the implant now gone.</span>")
NewOrgan.forceMove(H)
NewOrgan.owner = H
if(E.internal_organs == null)
E.internal_organs = list()
E.internal_organs |= NewOrgan

View File

@@ -186,15 +186,22 @@
var/mutable_appearance/blade_overlay = mutable_appearance(icon, "[icon_state]_blade")
if(lcolor)
blade_overlay.color = lcolor
color = lcolor
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
if(active)
add_overlay(blade_overlay)
item_state = "[icon_state]_blade"
set_light(lrange, lpower, lcolor)
else
color = "FFFFFF"
set_light(0)
item_state = "[icon_state]"
if(istype(usr,/mob/living/carbon/human))
var/mob/living/carbon/human/H = usr
H.update_inv_l_hand()
H.update_inv_r_hand()
/obj/item/weapon/shield/energy/AltClick(mob/living/user)
if(!in_range(src, user)) //Basic checks to prevent abuse
return
@@ -204,7 +211,7 @@
if(alert("Are you sure you want to recolor your shield?", "Confirm Recolor", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null
if(energy_color_input)
lcolor = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
lcolor = sanitize_hexcolor(energy_color_input)
update_icon()
/obj/item/weapon/shield/energy/examine(mob/user)

View File

@@ -78,4 +78,22 @@
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe
)
)
/obj/item/weapon/storage/quickdraw/syringe_case/clotting
desc = "A small case for safely carrying sharps around. This one is deluxe!"
max_w_class = ITEMSIZE_SMALL
starts_with = list(
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting
)
/obj/item/weapon/storage/quickdraw/syringe_case/bonemed
desc = "A small case for safely carrying sharps around. This one is deluxe!"
max_w_class = ITEMSIZE_SMALL
starts_with = list(
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bonemed
)

View File

@@ -266,6 +266,37 @@
/obj/item/weapon/tool/screwdriver
)
/obj/item/weapon/storage/box/syndie_kit/voidsuit
starts_with = list(
/obj/item/clothing/suit/space/void/merc,
/obj/item/clothing/head/helmet/space/void/merc,
/obj/item/clothing/shoes/magboots,
/obj/item/weapon/tank/jetpack/oxygen
)
/obj/item/weapon/storage/box/syndie_kit/voidsuit/fire
starts_with = list(
/obj/item/clothing/suit/space/void/merc/fire,
/obj/item/clothing/head/helmet/space/void/merc/fire,
/obj/item/clothing/shoes/magboots,
/obj/item/weapon/tank/jetpack/oxygen
)
/obj/item/weapon/storage/box/syndie_kit/concussion_grenade
starts_with = list(
/obj/item/weapon/grenade/concussion = 8
)
/obj/item/weapon/storage/box/syndie_kit/deadliest_game
starts_with = list(
/obj/item/weapon/beartrap/hunting = 4
)
/obj/item/weapon/storage/box/syndie_kit/viral
starts_with = list(
/obj/item/weapon/virusdish/random = 3
)
/obj/item/weapon/storage/secure/briefcase/rifle
name = "secure briefcase"
starts_with = list(
@@ -275,6 +306,15 @@
/obj/item/ammo_casing/a145 = 4
)
/obj/item/weapon/storage/secure/briefcase/flamer
name = "secure briefcase"
starts_with = list(
/obj/item/weapon/gun/magnetic/gasthrower,
/obj/item/weapon/cell/super,
/obj/item/weapon/stock_parts/capacitor/adv,
/obj/item/weapon/tank/phoron/pressurized = 2
)
/obj/item/weapon/storage/secure/briefcase/fuelrod
name = "heavy briefcase"
desc = "A heavy, locked briefcase."

View File

@@ -113,6 +113,19 @@
air_contents.adjust_gas("phoron", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
/obj/item/weapon/tank/phoron/pressurized
name = "fuel can"
icon_state = "phoron_vox"
w_class = ITEMSIZE_NORMAL
/obj/item/weapon/tank/phoron/pressurized/Initialize()
..()
adjust_scale(0.8)
air_contents.adjust_gas("phoron", (7*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
/*
* Emergency Oxygen
*/

View File

@@ -105,6 +105,7 @@
L.Stun(stun_length)
to_chat(L, "<span class='danger'>The steel jaws of \the [src] bite into you, trapping you in place!</span>")
deployed = 0
anchored = FALSE
can_buckle = initial(can_buckle)
/obj/item/weapon/beartrap/Crossed(atom/movable/AM as mob|obj)

View File

@@ -0,0 +1,157 @@
/*
* Antagonist-specific gloves, such as traitor or ling-only types.
*/
// Thief - Traitor / Merc
/obj/item/clothing/gloves/sterile/thieves
name = "sterile gloves"
desc = "Sterile gloves."
description_antag = "These gloves are uniquely suited for stealing, as well as breaking and entering. They have minor insulation.\
Attempting to 'help' someone will open their backpack, if it exists, or their belt if they have no backpack, allowing you to deposit\
items into the inventories. Be careful about making too much noise.\
Disarm intent will swap the items in your LEFT pockets. Grab will swap RIGHT pockets."
icon_state = "latex"
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
siemens_coefficient = 0.5 // Not perfect, but slightly more protective than nothing.
permeability_coefficient = 0.01
germ_level = 0
fingerprint_chance = 10 // They're thieves' gloves. What do you think?
/obj/item/clothing/gloves/sterile/thieves/proc/pickpocket(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/proximity)
if(!proximity || !user || !target)
return 0
if(!istype(target))
return 0
if(user.a_intent != I_HURT && (turn(target.dir, 180) == get_dir(user, target)))
to_chat(target, "<span class='warning'>[user] rifles in your pockets!</span>")
if(user.a_intent == I_HELP)
if(istype(target.back,/obj/item/weapon/storage) && do_after(user, 3 SECONDS, target))
var/obj/item/weapon/storage/Backpack = target.back
Backpack.open(user)
else if(istype(target.belt, /obj/item/weapon/storage) && do_after(user, 5 SECONDS, target))
var/obj/item/weapon/storage/Belt = target.belt
Belt.open(user)
return 1
if(user.a_intent == I_DISARM)
var/obj/item/LTarg = target.l_store
var/obj/item/LUser = user.l_store
if(do_after(user, 1 SECOND, target))
if(istype(LTarg) && do_after(user, 1 SECOND, target))
target.drop_from_inventory(LTarg)
target.l_store = null
user.l_store = LTarg
LTarg.forceMove(user)
LTarg.equipped(user, slot_l_store)
else
target.drop_from_inventory(LTarg)
if(istype(LUser) && do_after(user, 1 SECOND, target))
user.drop_from_inventory(LUser)
target.l_store = LUser
LUser.forceMove(target)
LUser.equipped(target, slot_l_store)
else if(istype(LUser) && LUser != user.l_store) // We've taken something, so drop the one that's in bluespace.
user.drop_from_inventory(LUser)
return 1
if(user.a_intent == I_GRAB)
var/obj/item/RTarg = target.r_store
var/obj/item/RUser = user.r_store
if(do_after(user, 1 SECOND, target))
if(istype(RTarg) && do_after(user, 1 SECOND, target))
target.drop_from_inventory(RTarg)
target.r_store = null
user.r_store = RTarg
RTarg.forceMove(user)
RTarg.equipped(user, slot_r_store)
else
target.drop_from_inventory(RTarg)
if(istype(RUser) && do_after(user, 1 SECOND, target))
user.drop_from_inventory(RUser)
target.r_store = RUser
RUser.forceMove(target)
RUser.equipped(target, slot_r_store)
else if(istype(RUser) && RUser != user.r_store) // We've taken something, so drop the one that's in bluespace.
user.drop_from_inventory(RUser)
return 1
/obj/item/clothing/gloves/sterile/thieves/Touch(var/atom/A, var/proximity)
if(proximity && istype(usr, /mob/living/carbon/human) && do_after(usr, 1 SECOND, A))
return pickpocket(usr, A, proximity)
return 0
// Buzzer Ring - Traitor, Merc.
/obj/item/clothing/gloves/ring/buzzer
name = "ring"
desc = "A plain metal band."
description_antag = "This morphium-alloy ring continually generates an electric field, capable of electrocuting a target while not injuring the wearer.\
The device is also capable of 'frankenstein'-ing a corpse, long after normal technology would be able to save them. The body will still be tied to the\
normal damage limits for survival, however, so care must be taken."
icon_state = "material"
var/battery_type = /obj/item/weapon/cell/device/weapon/recharge
var/obj/item/weapon/cell/battery = null
/obj/item/clothing/gloves/ring/buzzer/get_cell()
return battery
/obj/item/clothing/gloves/ring/buzzer/Initialize()
..()
if(!battery)
battery = new battery_type(src)
/obj/item/clothing/gloves/ring/buzzer/Touch(var/atom/A, var/proximity)
if(proximity && istype(usr, /mob/living/carbon/human))
return zap(usr, A, proximity)
return 0
/obj/item/clothing/gloves/ring/buzzer/proc/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
. = FALSE
if(user.a_intent == I_HURT && battery.percent() >= 50)
if(isliving(target))
var/mob/living/L = target
if(ishuman(L) && battery.percent() >= 90) // Silent text-wise, for maximum potential for gimmicks.
var/mob/living/carbon/human/H = L
if(H.stat == DEAD)
. = TRUE
do_defib(H)
to_chat(L, "<span class='warning'>You feel a powerful shock!</span>")
if(!.)
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
L.electrocute_act(battery.percent() * 0.25, src)
battery.emp_act(2)
return .
return 0
/obj/item/clothing/gloves/ring/buzzer/proc/do_defib(var/mob/living/carbon/human/H = null)
if(!istype(H))
return 0
dead_mob_list.Remove(H)
if((H in living_mob_list) || (H in dead_mob_list))
WARNING("Mob [H] was ring-defibbed but already in the living or dead list still!")
living_mob_list += H
H.timeofdeath = 0
H.stat = UNCONSCIOUS
H.failed_last_breath = 0
H.reload_fullscreen()
H.emote("gasp")
H.Weaken(rand(10,25))
H.updatehealth()
battery.emp_act(1)

View File

@@ -17,6 +17,9 @@
/datum/modifier/fire/tick()
holder.inflict_heat_damage(damage_per_tick)
/datum/modifier/fire/weak
damage_per_tick = 1
/*
* Modifier used by projectiles, like the flamethrower, that rely heavily on fire_stacks to persist.
*/

View File

@@ -12,7 +12,7 @@
organ_verbs = list(/mob/living/carbon/human/proc/augment_menu) // Verbs added by the organ when present in the body.
target_parent_classes = list() // Is the parent supposed to be organic, robotic, assisted?
forgiving_class = FALSE // Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
forgiving_class = TRUE // Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
var/obj/item/integrated_object // Objects held by the organ, used for re-usable, deployable things.
var/integrated_object_type // Object type the organ will spawn.

View File

@@ -48,6 +48,11 @@
var/selectedColor = 1
var/colors = list("black","blue","red")
/obj/item/weapon/pen/AltClick(mob/user)
to_chat(user, "<span class='notice'>Click.</span>")
playsound(loc, 'sound/items/penclick.ogg', 50, 1)
return
/obj/item/weapon/pen/multi/attack_self(mob/user)
if(++selectedColor > 3)
selectedColor = 1
@@ -92,6 +97,98 @@
var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD)
add_attack_logs(user,M,"Injected with [src.name] containing [contained], trasferred [trans] units")
/*
* Blade pens.
*/
/obj/item/weapon/pen/blade
desc = "It's a normal black ink pen."
description_antag = "This pen can be transformed into a dangerous melee and thrown assassination weapon with an Alt-Click.\
When active, it cannot be caught safely."
name = "pen"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "pen"
item_state = "pen"
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 3
w_class = ITEMSIZE_TINY
throw_speed = 7
throw_range = 15
armor_penetration = 20
var/active = 0
var/active_embed_chance = 0
var/active_force = 15
var/active_throwforce = 30
var/active_w_class = ITEMSIZE_NORMAL
var/active_icon_state
var/default_icon_state
/obj/item/weapon/pen/blade/Initialize()
..()
active_icon_state = "[icon_state]-x"
default_icon_state = icon_state
/obj/item/weapon/pen/blade/AltClick(mob/user)
..()
if(active)
deactivate(user)
else
activate(user)
to_chat(user, "<span class='notice'>You [active ? "de" : ""]activate \the [src]'s blade.</span>")
/obj/item/weapon/pen/blade/proc/activate(mob/living/user)
if(active)
return
active = 1
icon_state = active_icon_state
embed_chance = active_embed_chance
force = active_force
throwforce = active_throwforce
sharp = 1
edge = 1
w_class = active_w_class
playsound(user, 'sound/weapons/saberon.ogg', 15, 1)
damtype = SEARING
catchable = FALSE
attack_verb |= list(\
"slashed",\
"cut",\
"shredded",\
"stabbed"\
)
/obj/item/weapon/pen/blade/proc/deactivate(mob/living/user)
if(!active)
return
playsound(user, 'sound/weapons/saberoff.ogg', 15, 1)
active = 0
icon_state = default_icon_state
embed_chance = initial(embed_chance)
force = initial(force)
throwforce = initial(throwforce)
sharp = initial(sharp)
edge = initial(edge)
w_class = initial(w_class)
damtype = BRUTE
catchable = TRUE
/obj/item/weapon/pen/blade/blue
desc = "It's a normal blue ink pen."
icon_state = "pen_blue"
colour = "blue"
/obj/item/weapon/pen/blade/red
desc = "It's a normal red ink pen."
icon_state = "pen_red"
colour = "red"
/obj/item/weapon/pen/blade/fountain
desc = "A well made fountain pen."
icon_state = "pen_fountain"
/*
* Sleepy Pens
*/

View File

@@ -76,12 +76,17 @@
var/start_nutrition = H.nutrition
var/end_nutrition = 0
H.nutrition -= rechargeamt / 10
H.nutrition -= rechargeamt / 15
end_nutrition = H.nutrition
if(start_nutrition - max(0, end_nutrition) < rechargeamt / 10)
H.remove_blood((rechargeamt / 10) - (start_nutrition - max(0, end_nutrition)))
if(start_nutrition - max(0, end_nutrition) < rechargeamt / 15)
if(H.isSynthetic())
H.adjustToxLoss((rechargeamt / 15) - (start_nutrition - max(0, end_nutrition)))
else
H.remove_blood((rechargeamt / 15) - (start_nutrition - max(0, end_nutrition)))
power_supply.give(rechargeamt) //... to recharge 1/5th the battery
update_icon()

View File

@@ -0,0 +1,77 @@
/obj/item/weapon/gun/magnetic/gasthrower
name = "phoronthrower"
desc = "A modernized flamethrower utilizing pressurized phoron gas as both a propellant and combustion medium."
description_fluff = "A weapon designed to effectively combat the threat posed by Almachi soldiers without the danger of other forms of flamethrower."
icon_state = "gasthrower"
item_state = "bore"
wielded_item_state = "bore-wielded"
icon = 'icons/obj/railgun.dmi'
one_handed_penalty = 20
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_PHORON = 4)
w_class = ITEMSIZE_LARGE
burst = 3
burst_delay = 1
fire_sound = 'sound/weapons/towelwipe.ogg'
removable_components = TRUE
gun_unreliable = 0
load_type = /obj/item/weapon/tank
projectile_type = /obj/item/projectile/scatter/flamethrower
power_cost = 250
/obj/item/weapon/gun/magnetic/gasthrower/check_ammo()
if(!loaded || !istype(loaded, load_type))
return 0
var/obj/item/weapon/tank/Tank = loaded
Tank.air_contents.update_values() // Safety
var/turf/T = get_turf(src)
var/phoron_amt = Tank.air_contents.gas["phoron"]
var/co2_amt = Tank.air_contents.gas["carbon_dioxide"]
var/oxy_amt = Tank.air_contents.gas["oxygen"]
var/n2o_amt = Tank.air_contents.gas["sleeping_agent"]
if(isnull(co2_amt))
co2_amt = 0
if(isnull(oxy_amt))
oxy_amt = 0
if(isnull(n2o_amt))
n2o_amt = 0
var/phoron_mix_proper = TRUE
if(!phoron_amt || phoron_amt < max(0.25, 3 + co2_amt - oxy_amt - (n2o_amt / 2)))
phoron_mix_proper = FALSE
if(Tank.air_contents.return_pressure() >= T.air.return_pressure() && phoron_mix_proper)
return 1
return 0
/obj/item/weapon/gun/magnetic/gasthrower/use_ammo()
var/obj/item/weapon/tank/Tank = loaded
var/moles_to_pull = 0.25
Tank.air_contents.remove(moles_to_pull)
/obj/item/weapon/gun/magnetic/gasthrower/show_ammo(var/mob/user)
..()
if(loaded)
var/obj/item/weapon/tank/T = loaded
to_chat(user, "<span class='notice'>\The [T]'s pressure meter shows: [T.air_contents.return_pressure()] kpa.</span>")
switch(check_ammo())
if(TRUE)
to_chat(user, "<span class='notice'>\The [src]'s display registers a proper fuel mixture.</span>")
if(FALSE)
to_chat(user, "<span class='warning'>\The [src]'s display registers an improper fuel mixture.</span>")

View File

@@ -18,6 +18,7 @@
projectile_type = /obj/item/projectile/bullet/rifle/a145
accuracy = -75
scoped_accuracy = 75
ignore_visor_zoom_restriction = TRUE // Ignore the restriction on vision modifiers when using this gun's scope.
// one_handed_penalty = 90
var/bolt_open = 0

View File

@@ -95,7 +95,7 @@
var/spread_submunition_damage = FALSE // Do we assign damage to our sub projectiles based on our main projectile damage?
var/damage = 10
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS, ELECTROCUTE, BIOACID are the only things that should be in here
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS, ELECTROCUTE, BIOACID, SEARING are the only things that should be in here
var/SA_bonus_damage = 0 // Some bullets inflict extra damage on simple animals.
var/SA_vulnerability = null // What kind of simple animal the above bonus damage should be applied to. Set to null to apply to all SAs.
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions

View File

@@ -266,6 +266,14 @@
flammability = 2
range = 6
/obj/item/projectile/bullet/incendiary/flamethrower/tiny
damage = 2
incendiary = 0
modifier_type_to_apply = /datum/modifier/fire/weak
modifier_duration = 20 SECONDS
range = 7
agony = 3
/* Practice rounds and blanks */
/obj/item/projectile/bullet/practice

View File

@@ -60,3 +60,13 @@
submunitions = list(
/obj/item/projectile/bullet/shotgun/ion = 3
)
/obj/item/projectile/scatter/flamethrower
damage = 5
submunition_spread_max = 100
submunition_spread_min = 30
force_max_submunition_spread = TRUE
submunitions = list(
/obj/item/projectile/bullet/incendiary/flamethrower/tiny = 7
)

View File

@@ -0,0 +1,58 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Mechoid
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Energy Daggerpens (20): Disguised energy-knives, which do 15 searing on melee, or 30 when thrown."
- rscadd: "Thieves gloves (30): Special gloves that allow you to peep in others' backpacks and belts, and plant items in their bags / pockets."
- rscadd: "Buzzer Ring (30): Makes your first two punches electrically charged, first with 25 damage in a shock, then approximately 12.5 damage in the second. If the charge is over 90%, you can force-defib a corpse, even if it's a mindless one. Damage rules still apply, however time-of-death does not."
- rscadd: "Resource Crate (60): A crate of uranium, phoron, gold, silver, osmium, and plasteel."
- rscadd: "Exotic Plantlife Crate (20): A crate of numerous random seeds."
- rscadd: "Spare Organ Crate (20): A crate of bioprinted organs."
- rscadd: "Graviton goggles (15): A pair of combined meson/material goggles."
- rscadd: "Integrated Circuit Printer (10): An upgraded circuit printer used to make integrated machine."
- rscadd: "Flamethrower (60): A large, flame-based weapon."
- rscadd: "8 Concussion Grenades (30): A box of eight concussion grenades."
- rscadd: "4 Hunting Traps (30): A box of four hunting-traps, similar to those found in the explorer vendor."
- rscadd: "3 Virus Samples (40): A box of three unique virus samples."
- rscadd: "Quickdraw Syringe Case (20): A case that can hold six syringes, and rapidly deploy them. Fits in your pocket."
- rscadd: "Clotting Injector Case (20): A case like above which starts with 3 clotting med injectors instead."
- rscadd: "Bonemed Injector Case (20): The same as above, but with bonemeds."
- tweak: "Announcement costs lowered to be more equivalent."
- tweak: "Egun changed from 60 to 30 TC. It is nowhere near as powerful as a lascannon."
- tweak: "Exosuit rigged laser from 60 to 30 TC."
- tweak: "Xray gun from 85 to 60 TC."
- tweak: "Augments can now be used by everyone, as robot-specific ones will require FBP organ revamp."
- tweak: "Anti-Materiel Rifle can once again be used with thermals."
- tweak: "Augment guns use slightly less blood / system instability to charge, so it doesn't kill you dead in moments."
- bugfix: "Energy Shields work again, and can be colored."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -424,7 +424,11 @@
#include "code\datums\uplink\hardsuit_modules.dm"
#include "code\datums\uplink\implants.dm"
#include "code\datums\uplink\medical.dm"
<<<<<<< HEAD:vorestation.dme
#include "code\datums\uplink\medical_vr.dm"
=======
#include "code\datums\uplink\resources.dm"
>>>>>>> c7ba2a8... Antag Uplink Expansion (#6788):polaris.dme
#include "code\datums\uplink\stealth_items.dm"
#include "code\datums\uplink\stealthy_weapons.dm"
#include "code\datums\uplink\telecrystals.dm"
@@ -1721,7 +1725,11 @@
#include "code\modules\clothing\glasses\glasses.dm"
#include "code\modules\clothing\glasses\glasses_vr.dm"
#include "code\modules\clothing\glasses\hud.dm"
<<<<<<< HEAD:vorestation.dme
#include "code\modules\clothing\glasses\hud_vr.dm"
=======
#include "code\modules\clothing\gloves\antagonist.dm"
>>>>>>> c7ba2a8... Antag Uplink Expansion (#6788):polaris.dme
#include "code\modules\clothing\gloves\arm_guards.dm"
#include "code\modules\clothing\gloves\arm_guards_vr.dm"
#include "code\modules\clothing\gloves\boxing.dm"
@@ -3007,6 +3015,7 @@
#include "code\modules\projectiles\guns\launcher\rocket.dm"
#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
#include "code\modules\projectiles\guns\magnetic\bore.dm"
#include "code\modules\projectiles\guns\magnetic\gasthrower.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm"