fix conflicts

This commit is contained in:
Greenjoe12345
2020-09-02 02:07:20 +01:00
256 changed files with 25059 additions and 323 deletions
@@ -397,6 +397,7 @@
/datum/gear/suit/teshcoat/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/teshcoatwhite
@@ -417,4 +418,17 @@
/datum/gear/accessory/teshneckscarf/New()
..()
gear_tweaks += gear_tweak_free_color_choice
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/shoes/toelessjack
display_name = "toe-less jackboots"
path = /obj/item/clothing/shoes/boots/jackboots/toeless
/datum/gear/shoes/toelessknee
display_name = "toe-less jackboots, knee-length"
path = /obj/item/clothing/shoes/boots/jackboots/toeless/knee
/datum/gear/shoes/toelessthigh
display_name = "toe-less jackboots, thigh-length"
path = /obj/item/clothing/shoes/boots/jackboots/toeless/thigh
+17
View File
@@ -42,6 +42,23 @@
w_class = ITEMSIZE_SMALL
armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0)
//Turn it into a hailer mask
/obj/item/clothing/mask/gas/half/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/device/hailer))
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
user.drop_item(src)
var/obj/item/clothing/mask/gas/sechailer/N = new /obj/item/clothing/mask/gas/sechailer(src.loc)
N.fingerprints = src.fingerprints
N.fingerprintshidden = src.fingerprintshidden
N.fingerprintslast = src.fingerprintslast
N.suit_fibers = src.suit_fibers
N.hailer = I
I.loc = N
if(!isturf(N.loc))
user.put_in_hands(N)
qdel(src)
..()
//Plague Dr suit can be found in clothing/suits/bio.dm
/obj/item/clothing/mask/gas/plaguedoctor
name = "plague doctor mask"
+165
View File
@@ -0,0 +1,165 @@
/obj/item/clothing/mask/gas/sechailer
name = "hailer face mask"
desc = "A compact, durable gas mask that can be connected to an air supply. This one possesses a security hailer."
description_info = "This mask has a hailer attached, you can activate it on the button or use the Halt! verb, for switching phrases you can alt+click it or change it using the change phrase verb."
icon_state = "halfgas"
armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0)
action_button_name = "HALT!"
body_parts_covered = FACE
var/obj/item/device/hailer/hailer
var/cooldown = 0
var/phrase = 1
var/aggressiveness = 1
var/safety = 1
var/list/phrase_list = list(
"halt" = "HALT! HALT! HALT! HALT!",
"bobby" = "Stop in the name of the Law.",
"compliance" = "Compliance is in your best interest.",
"justice" = "Prepare for justice!",
"running" = "Running will only increase your sentence.",
"dontmove" = "Don't move, Creep!",
"floor" = "Down on the floor, Creep!",
"robocop" = "Dead or alive you're coming with me.",
"god" = "God made today for the crooks we could not catch yesterday.",
"freeze" = "Freeze, Scum Bag!",
"imperial" = "Stop right there, criminal scum!",
"bash" = "Stop or I'll bash you.",
"harry" = "Go ahead, make my day.",
"asshole" = "Stop breaking the law, asshole.",
"stfu" = "You have the right to shut the fuck up",
"shutup" = "Shut up crime!",
"super" = "Face the wrath of the golden bolt.",
"dredd" = "I am, the LAW!"
)
/obj/item/clothing/mask/gas/sechailer/swat/hos
name = "\improper HOS SWAT mask"
desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a tan stripe."
icon_state = "hosmask"
/obj/item/clothing/mask/gas/sechailer/swat/warden
name = "\improper Warden SWAT mask"
desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a blue stripe."
icon_state = "wardenmask"
/obj/item/clothing/mask/gas/sechailer/swat
name = "\improper SWAT mask"
desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000."
icon_state = "officermask"
body_parts_covered = HEAD|FACE|EYES
flags_inv = HIDEFACE|BLOCKHAIR
aggressiveness = 3
phrase = 12
/obj/item/clothing/mask/gas/sechailer/ui_action_click()
halt()
/obj/item/clothing/mask/gas/sechailer/AltClick(mob/user)
selectphrase()
/obj/item/clothing/mask/gas/sechailer/verb/selectphrase()
set name = "Select gas mask phrase"
set category = "Object"
set desc = "Alter the message shouted by your complionator gas mask."
var/key = phrase_list[phrase]
var/message = phrase_list[key]
if (!safety)
to_chat(usr, "<span class='notice'>You set the restrictor to: FUCK YOUR CUNT YOU SHIT EATING COCKSUCKER MAN EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND DO SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT.</span>")
return
switch(aggressiveness)
if(1)
phrase = (phrase < 6) ? (phrase + 1) : 1
key = phrase_list[phrase]
message = phrase_list[key]
to_chat(usr,"<span class='notice'>You set the restrictor to: [message]</span>")
if(2)
phrase = (phrase < 11 && phrase >= 7) ? (phrase + 1) : 7
key = phrase_list[phrase]
message = phrase_list[key]
to_chat(usr,"<span class='notice'>You set the restrictor to: [message]</span>")
if(3)
phrase = (phrase < 18 && phrase >= 12 ) ? (phrase + 1) : 12
key = phrase_list[phrase]
message = phrase_list[key]
to_chat(usr,"<span class='notice'>You set the restrictor to: [message]</span>")
if(4)
phrase = (phrase < 18 && phrase >= 1 ) ? (phrase + 1) : 1
key = phrase_list[phrase]
message = phrase_list[key]
to_chat(usr,"<span class='notice'>You set the restrictor to: [message]</span>")
else
to_chat(usr, "<span class='notice'>It's broken.</span>")
/obj/item/clothing/mask/gas/sechailer/emag_act(mob/user)
if(safety)
safety = 0
to_chat(user, "<span class='warning'>You silently fry [src]'s vocal circuit with the cryptographic sequencer.</span>")
else
return
/obj/item/clothing/mask/gas/sechailer/attackby(obj/item/I, mob/user)
if(I.is_screwdriver())
switch(aggressiveness)
if(1)
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the second position.</span>")
aggressiveness = 2
phrase = 7
if(2)
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the third position.</span>")
aggressiveness = 3
phrase = 13
if(3)
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the fourth position.</span>")
aggressiveness = 4
phrase = 1
if(4)
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the first position.</span>")
aggressiveness = 1
phrase = 1
if(5)
to_chat(user, "<span class='warning'>You adjust the restrictor but nothing happens, probably because its broken.</span>")
if(I.is_wirecutter())
if(aggressiveness != 5)
to_chat(user, "<span class='warning'>You broke it!</span>")
aggressiveness = 5
if(I.is_crowbar())
if(!hailer)
to_chat(user, "<span class='warning'>This mask has an integrated hailer, you can't remove it!</span>")
else
var/obj/N = new /obj/item/clothing/mask/gas/half(src.loc)
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
N.fingerprints = src.fingerprints
N.fingerprintshidden = src.fingerprintshidden
N.fingerprintslast = src.fingerprintslast
N.suit_fibers = src.suit_fibers
if(!isturf(N.loc))
user.put_in_hands(hailer)
user.put_in_hands(N)
else
hailer.loc = N.loc
qdel(src)
return
..()
/obj/item/clothing/mask/gas/sechailer/verb/halt()
set name = "HALT!"
set category = "Objects"
set desc = "Activate your face mask hailer."
var/key = phrase_list[phrase]
var/message = phrase_list[key]
if(cooldown < world.time - 35) // A cooldown, to stop people being jerks
if(!safety)
message = "FUCK YOUR CUNT YOU SHIT EATING COCKSUCKER MAN EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND DO SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT."
usr.visible_message("[usr]'s Compli-o-Nator: <font color='red' size='4'><b>[message]</b></font>")
playsound(src, 'sound/voice/binsult.ogg', 50, 0, 4) //Future sound channel = something like SFX
cooldown = world.time
return
usr.visible_message("[usr]'s Compli-o-Nator: <font color='red' size='4'><b>[message]</b></font>")
playsound(src, "sound/voice/complionator/[key].ogg", 50, 0, 4) //future sound channel = something like SFX
cooldown = world.time
+4 -4
View File
@@ -39,19 +39,19 @@
/obj/item/clothing/under/seromi/smock/dress/science
name = "small research dress"
icon_state = "seromi_dress_science"
icon_state = "tesh_dress_science"
/obj/item/clothing/under/seromi/smock/dress/security
name = "small security dress"
icon_state = "seromi_dress_security"
icon_state = "tesh_dress_security"
/obj/item/clothing/under/seromi/smock/dress/engine
name = "small engineering dress"
icon_state = "seromi_dress_engine"
icon_state = "tesh_dress_engine"
/obj/item/clothing/under/seromi/smock/dress/medical
name = "small medical dress"
icon_state = "seromi_dress_medical"
icon_state = "tesh_dress_medical"
/obj/item/clothing/under/seromi/smock/uniform
name = "small command uniform"
+2 -2
View File
@@ -133,9 +133,9 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE")
if(5)
to_chat(M, "<br>")
to_chat(M, "<font color='red'>THE COLONY DIRECTOR, HOP AND HOS ARE [who2]...LAWS UPDATED</font>")
to_chat(M, "<font color='red'>THE SITE MANAGER, HOP AND HOS ARE [who2]...LAWS UPDATED</font>")
to_chat(M, "<br>")
M.add_ion_law("THE COLONY DIRECTOR, HOP AND HOS ARE [who2]")
M.add_ion_law("THE SITE MANAGER, HOP AND HOS ARE [who2]")
if(6)
to_chat(M, "<br>")
to_chat(M, "<font color='red'>THE STATION IS BUILT FOR [who2]...LAWS UPDATED</font>")
+1 -1
View File
@@ -6,7 +6,7 @@
item_state = "electronic"
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
matter = list(DEFAULT_WALL_MATERIAL = 150)
var/scan_time = 5 SECONDS
var/scan_time = 2 SECONDS
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
to_chat(user, "<span class='notice'>You begin sweeping \the [src] about, scanning for metal deposits.</span>")
+1 -1
View File
@@ -63,7 +63,7 @@ var/global/list/SKILL_PRE = list("Engineer" = SKILL_ENGINEER, "Roboticist" = SKI
/datum/skill/knowledge/law
ID = "law"
name = "Corporate Law"
desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for Colony Directors."
desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for Site Managers."
field = "Security"
secondary = 1
+9 -1
View File
@@ -71,6 +71,10 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
if(linked)
apply_visual(user)
user.reset_view(linked)
if(isliving(user))
var/mob/living/L = user
L.looking_elsewhere = 1
L.handle_vision()
user.set_viewsize(world.view + extra_view)
GLOB.moved_event.register(user, src, /obj/machinery/computer/ship/proc/unlook)
// TODO GLOB.stat_set_event.register(user, src, /obj/machinery/computer/ship/proc/unlook)
@@ -78,6 +82,10 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
/obj/machinery/computer/ship/proc/unlook(var/mob/user)
user.reset_view()
if(isliving(user))
var/mob/living/L = user
L.looking_elsewhere = 0
L.handle_vision()
user.set_viewsize() // reset to default
GLOB.moved_event.unregister(user, src, /obj/machinery/computer/ship/proc/unlook)
// TODO GLOB.stat_set_event.unregister(user, src, /obj/machinery/computer/ship/proc/unlook)
@@ -109,4 +117,4 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
var/M = W.resolve()
if(M)
unlook(M)
. = ..()
. = ..()
+21
View File
@@ -45,8 +45,29 @@ proc/get_deepspace(x,y)
for(var/atom/movable/AM in contents)
if(!AM.lost_in_space())
return FALSE
if(has_buckled_mobs())
for(var/mob/M in buckled_mobs)
if(!M.lost_in_space())
return FALSE
return TRUE
/obj/item/device/uav/lost_in_space()
if(state == 1)
return FALSE
return ..()
/obj/machinery/power/supermatter/lost_in_space()
return FALSE
/obj/singularity/lost_in_space()
return FALSE
/obj/vehicle/lost_in_space()
if(load && !load.lost_in_space())
return FALSE
return ..()
/mob/lost_in_space()
return isnull(client)
@@ -5,12 +5,14 @@
/obj/item/weapon/gun/energy/hooklauncher
name = "gravity whip"
desc = "A large, strange gauntlet."
icon = 'icons/obj/gun2.dmi'
icon_state = "gravwhip"
item_state = "gravwhip"
fire_sound_text = "laser blast"
fire_delay = 15
charge_cost = 300
charge_meter = FALSE
cell_type = /obj/item/weapon/cell/device/weapon
projectile_type = /obj/item/projectile/energy/hook
@@ -29,7 +31,6 @@
cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien
battery_lock = TRUE
charge_cost = 400
charge_meter = FALSE
projectile_type = /obj/item/projectile/energy/hook/ring
+60
View File
@@ -0,0 +1,60 @@
/*
* "Magic" "Guns"
*/
/obj/item/weapon/gun/magic
name = "staff of nothing"
desc = "This staff is boring to watch because even though it came first you've seen everything it can do in other staves for years."
icon = 'icons/obj/wizard.dmi'
icon_state = "staffofnothing"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_magic.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_magic.dmi',
)
fire_sound = 'sound/weapons/emitter.ogg'
w_class = ITEMSIZE_HUGE
projectile_type = null
var/checks_antimagic = TRUE
var/max_charges = 6
var/charges = 0
var/recharge_rate = 4
var/charge_tick = 0
var/can_charge = TRUE
/obj/item/weapon/gun/magic/consume_next_projectile()
if(checks_antimagic && locate(/obj/item/weapon/nullrod) in usr) return null
if(!ispath(projectile_type)) return null
if(charges <= 0) return null
charges -= 1
return new projectile_type(src)
/obj/item/weapon/gun/magic/Initialize()
. = ..()
charges = max_charges
if(can_charge)
START_PROCESSING(SSobj, src)
/obj/item/weapon/gun/magic/Destroy()
if(can_charge)
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/gun/magic/process()
if (charges >= max_charges)
charge_tick = 0
return
charge_tick++
if(charge_tick < recharge_rate)
return 0
charge_tick = 0
charges++
return 1
/obj/item/weapon/gun/magic/handle_click_empty(mob/user)
if (user)
user.visible_message("*wzhzhzh*", "<span class='danger'>The [name] whizzles quietly.</span>")
else
src.visible_message("*wzhzh*")
playsound(src, 'sound/weapons/empty.ogg', 100, 1)
@@ -0,0 +1,17 @@
/obj/item/weapon/gun/magic/firestaff
name = "flaming staff"
desc = "A long, everburning torch."
icon = 'icons/obj/wizard.dmi'
icon_state = "staffoffire"
item_state = "staff"
fire_sound = 'sound/weapons/emitter.ogg'
w_class = ITEMSIZE_HUGE
checks_antimagic = TRUE
max_charges = 6
charges = 0
recharge_rate = 4
charge_tick = 0
can_charge = TRUE
projectile_type = /obj/item/projectile/energy/fireball
+2
View File
@@ -739,6 +739,8 @@
shot_from = launcher.name
silenced = launcher.silenced
if(user)
firer = user
return launch_projectile(target, target_zone, user, params, angle_override, forced_spread)
+15 -1
View File
@@ -27,13 +27,15 @@
var/list/help_messages = list("slaps", "pokes", "nudges", "bumps", "pinches")
var/done_mob_unique = FALSE // Has the projectile already done something to a mob?
var/datum/beam/chain = null
/obj/item/projectile/energy/hook/launch_projectile(atom/target, target_zone, mob/user, params, angle_override, forced_spread = 0)
var/expected_distance = get_dist(target, loc)
range = expected_distance // So the hook hits the ground if no mob is hit.
target_distance = expected_distance
if(firer) // Needed to ensure later checks in impact and on hit function.
launcher_intent = firer.a_intent
firer.Beam(src,icon_state=beam_state,icon='icons/effects/beam.dmi',time=60, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=1)
chain = firer.Beam(src,icon_state=beam_state,icon='icons/effects/beam.dmi',time=60, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=1)
if(launcher_intent)
switch(launcher_intent)
@@ -58,10 +60,22 @@
..() // Does the regular launching stuff.
/obj/item/projectile/energy/hook/after_move()
if(chain)
var/origin_turf = get_turf(firer)
var/target_turf = get_turf(src)
if(!chain.static_beam && (origin_turf != chain.origin_oldloc || target_turf != chain.target_oldloc))
chain.origin_oldloc = origin_turf //so we don't keep checking against their initial positions, leading to endless Reset()+Draw() calls
chain.target_oldloc = target_turf
chain.Reset()
chain.Draw()
return
/obj/item/projectile/energy/hook/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
if(..())
perform_intent_unique(target)
/obj/item/projectile/energy/hook/on_impact(var/atom/A)
perform_intent_unique(get_turf(A))
@@ -0,0 +1,20 @@
/obj/item/projectile/energy/fireball
name = "fireball"
icon_state = "fireball2"
damage = 15
damage_type = BURN
check_armour = "bomb"
armor_penetration = 25 // It's a great ball of fire.
combustion = TRUE
/obj/item/projectile/energy/fireball/on_hit(var/atom/target, var/blocked = 0)
new /obj/effect/explosion(get_turf(target))
explosion(target, -1, 0, 2)
..()
/obj/item/projectile/energy/fireball/on_impact(var/atom/target)
new /obj/effect/explosion(get_turf(target))
explosion(target, -1, 0, 2)
..()
@@ -110,7 +110,7 @@
remove_self(volume)
/datum/reagent/blood/synthblood
name = "Synthetic blood"
name = "synthetic blood"
id = "synthblood"
color = "#999966"
volume_mod = 2
@@ -119,8 +119,16 @@
..()
if(data && !data["blood_type"])
data["blood_type"] = "O-"
if(data && data["species"])
data["species"] = null
return
/datum/reagent/blood/synthblood/dilute
name = "synthetic plasma"
id = "synthblood_dilute"
color = "#cacaaf"
volume_mod = 1.2
// pure concentrated antibodies
/datum/reagent/antibodies
data = list("antibodies"=list())
@@ -128,6 +128,17 @@
temp_range = list(T0C + 100, T0C + 120)
/datum/chemical_reaction/distilling/synthplas
name = "Distilling Synthplas"
id = "distill_synthplas"
result = "synthblood_dilute"
required_reagents = list("protein" = 2, "antibodies" = 1, "bicaridine" = 1)
result_amount = 3
reaction_rate = HALF_LIFE(15)
temp_range = list(T0C + 110, T0C + 130)
// Alcohol
/datum/chemical_reaction/distilling/beer
name = "Distilling Beer"
+11 -1
View File
@@ -19,7 +19,7 @@
var/target_temp = T20C
var/max_temp = T20C + 300
var/max_temp = T0C + 300
var/min_temp = T0C - 10
var/current_temp = T20C
@@ -86,6 +86,16 @@
update_icon()
/obj/machinery/portable_atmospherics/powered/reagent_distillery/RefreshParts()
var/total_laser_rating = 0
for(var/obj/item/weapon/stock_parts/micro_laser/ML in component_parts)
total_laser_rating += ML.rating
max_temp = initial(max_temp) + (50 * (total_laser_rating - 1))
min_temp = max(1, initial(min_temp) - (30 * (total_laser_rating - 1)))
return
/obj/machinery/portable_atmospherics/powered/reagent_distillery/proc/setup_overlay_vars()
overlay_output_beaker = image(icon = src.icon, icon_state = "[base_state]-output")
overlay_input_beaker = image(icon = src.icon, icon_state = "[base_state]-input")
@@ -27,6 +27,7 @@
var/label_text = ""
var/blood_type = null
var/reag_id = "blood"
/obj/item/weapon/reagent_containers/blood/Initialize()
. = ..()
@@ -35,7 +36,7 @@
if(blood_type != null)
label_text = "[blood_type]"
update_iv_label()
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
reagents.add_reagent(reag_id, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
/obj/item/weapon/reagent_containers/blood/on_reagent_change()
@@ -95,6 +96,14 @@
/obj/item/weapon/reagent_containers/blood/OMinus
blood_type = "O-"
/obj/item/weapon/reagent_containers/blood/synthplas
blood_type = "O-"
reag_id = "synthblood_dilute"
/obj/item/weapon/reagent_containers/blood/synthblood
blood_type = "O-"
reag_id = "synthblood"
/obj/item/weapon/reagent_containers/blood/empty
name = "Empty BloodPack"
desc = "Seems pretty useless... Maybe if there were a way to fill it?"
@@ -1,157 +1,159 @@
/obj/item/weapon/reagent_containers/borghypo
name = "cyborg hypospray"
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
icon = 'icons/obj/syringe.dmi'
item_state = "hypo"
icon_state = "borghypo"
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
var/mode = 1
var/charge_cost = 50
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
var/bypass_protection = FALSE // If true, can inject through things like spacesuits and armor.
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
var/list/reagent_volumes = list()
var/list/reagent_names = list()
/obj/item/weapon/reagent_containers/borghypo/surgeon
reagent_ids = list("tricordrazine", "inaprovaline", "oxycodone", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/crisis
reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/lost
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/merc
name = "advanced cyborg hypospray"
desc = "An advanced nanite and chemical synthesizer and injection system, designed for heavy-duty medical equipment. This type is capable of safely bypassing \
thick materials that other hyposprays would struggle with."
bypass_protection = TRUE // Because mercs tend to be in spacesuits.
reagent_ids = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine", "synthblood")
/obj/item/weapon/reagent_containers/borghypo/Initialize()
. = ..()
for(var/T in reagent_ids)
reagent_volumes[T] = volume
var/datum/reagent/R = SSchemistry.chemical_reagents[T]
reagent_names += R.name
START_PROCESSING(SSobj, src)
/obj/item/weapon/reagent_containers/borghypo/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+
if(++charge_tick < recharge_time)
return 0
charge_tick = 0
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R && R.cell)
for(var/T in reagent_ids)
if(reagent_volumes[T] < volume)
R.cell.use(charge_cost)
reagent_volumes[T] = min(reagent_volumes[T] + 5, volume)
return 1
/obj/item/weapon/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user)
if(!istype(M))
return
if(!reagent_volumes[reagent_ids[mode]])
to_chat(user, "<span class='warning'>The injector is empty.</span>")
return
var/mob/living/carbon/human/H = M
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
return
else if(affected.robotic >= ORGAN_ROBOT)
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
return
if(M.can_inject(user, 1, ignore_thickness = bypass_protection))
to_chat(user, "<span class='notice'>You inject [M] with the injector.</span>")
to_chat(M, "<span class='notice'>You feel a tiny prick!</span>")
if(M.reagents)
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
M.reagents.add_reagent(reagent_ids[mode], t)
reagent_volumes[reagent_ids[mode]] -= t
add_attack_logs(user, M, "Borg injected with [reagent_ids[mode]]")
to_chat(user, "<span class='notice'>[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining.</span>")
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode
var/t = ""
for(var/i = 1 to reagent_ids.len)
if(t)
t += ", "
if(mode == i)
t += "<b>[reagent_names[i]]</b>"
else
t += "<a href='?src=\ref[src];reagent=[reagent_ids[i]]'>[reagent_names[i]]</a>"
t = "Available reagents: [t]."
to_chat(user,t)
return
/obj/item/weapon/reagent_containers/borghypo/Topic(var/href, var/list/href_list)
if(href_list["reagent"])
var/t = reagent_ids.Find(href_list["reagent"])
if(t)
playsound(src, 'sound/effects/pop.ogg', 50, 0)
mode = t
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
to_chat(usr, "<span class='notice'>Synthesizer is now producing '[R.name]'.</span>")
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 2)
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
. += "<span class='notice'>It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.</span>"
/obj/item/weapon/reagent_containers/borghypo/service
name = "cyborg drink synthesizer"
desc = "A portable drink dispencer."
icon = 'icons/obj/drinks.dmi'
icon_state = "shaker"
charge_cost = 20
recharge_time = 3
volume = 60
possible_transfer_amounts = list(5, 10, 20, 30)
reagent_ids = list("ale", "cider", "beer", "berryjuice", "bitters", "coffee", "cognac", "cola", "dr_gibb", "egg", "gin", "gingerale", "hot_coco", "ice", "icetea", "kahlua", "lemonjuice", "lemon_lime", "limejuice", "mead", "milk", "mint", "orangejuice", "rum", "sake", "sodawater", "soymilk", "space_up", "spacemountainwind", "specialwhiskey", "sugar", "tea", "tequilla", "tomatojuice", "tonic", "vermouth", "vodka", "water", "watermelonjuice", "whiskey", "wine")
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
return
/obj/item/weapon/reagent_containers/borghypo/service/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!proximity)
return
if(!target.is_open_container() || !target.reagents)
return
if(!reagent_volumes[reagent_ids[mode]])
to_chat(user, "<span class='notice'>[src] is out of this reagent, give it some time to refill.</span>")
return
if(!target.reagents.get_free_space())
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
target.reagents.add_reagent(reagent_ids[mode], t)
reagent_volumes[reagent_ids[mode]] -= t
to_chat(user, "<span class='notice'>You transfer [t] units of the solution to [target].</span>")
return
/obj/item/weapon/reagent_containers/borghypo
name = "cyborg hypospray"
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
icon = 'icons/obj/syringe.dmi'
item_state = "hypo"
icon_state = "borghypo"
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
var/mode = 1
var/charge_cost = 50
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
var/bypass_protection = FALSE // If true, can inject through things like spacesuits and armor.
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
var/list/reagent_volumes = list()
var/list/reagent_names = list()
/obj/item/weapon/reagent_containers/borghypo/surgeon
reagent_ids = list("tricordrazine", "inaprovaline", "oxycodone", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/crisis
reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/lost
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/merc
name = "advanced cyborg hypospray"
desc = "An advanced nanite and chemical synthesizer and injection system, designed for heavy-duty medical equipment. This type is capable of safely bypassing \
thick materials that other hyposprays would struggle with."
bypass_protection = TRUE // Because mercs tend to be in spacesuits.
reagent_ids = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine", "synthblood")
/obj/item/weapon/reagent_containers/borghypo/Initialize()
. = ..()
for(var/T in reagent_ids)
reagent_volumes[T] = volume
var/datum/reagent/R = SSchemistry.chemical_reagents[T]
reagent_names += R.name
START_PROCESSING(SSobj, src)
/obj/item/weapon/reagent_containers/borghypo/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+
if(++charge_tick < recharge_time)
return 0
charge_tick = 0
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R && R.cell)
for(var/T in reagent_ids)
if(reagent_volumes[T] < volume)
R.cell.use(charge_cost)
reagent_volumes[T] = min(reagent_volumes[T] + 5, volume)
return 1
/obj/item/weapon/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user)
if(!istype(M))
return
if(!reagent_volumes[reagent_ids[mode]])
to_chat(user, "<span class='warning'>The injector is empty.</span>")
return
var/mob/living/carbon/human/H = M
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
return
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
else if(affected.robotic >= ORGAN_ROBOT)
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
return
*/
if(M.can_inject(user, 1, ignore_thickness = bypass_protection))
to_chat(user, "<span class='notice'>You inject [M] with the injector.</span>")
to_chat(M, "<span class='notice'>You feel a tiny prick!</span>")
if(M.reagents)
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
M.reagents.add_reagent(reagent_ids[mode], t)
reagent_volumes[reagent_ids[mode]] -= t
add_attack_logs(user, M, "Borg injected with [reagent_ids[mode]]")
to_chat(user, "<span class='notice'>[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining.</span>")
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode
var/t = ""
for(var/i = 1 to reagent_ids.len)
if(t)
t += ", "
if(mode == i)
t += "<b>[reagent_names[i]]</b>"
else
t += "<a href='?src=\ref[src];reagent=[reagent_ids[i]]'>[reagent_names[i]]</a>"
t = "Available reagents: [t]."
to_chat(user,t)
return
/obj/item/weapon/reagent_containers/borghypo/Topic(var/href, var/list/href_list)
if(href_list["reagent"])
var/t = reagent_ids.Find(href_list["reagent"])
if(t)
playsound(src, 'sound/effects/pop.ogg', 50, 0)
mode = t
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
to_chat(usr, "<span class='notice'>Synthesizer is now producing '[R.name]'.</span>")
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 2)
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
. += "<span class='notice'>It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.</span>"
/obj/item/weapon/reagent_containers/borghypo/service
name = "cyborg drink synthesizer"
desc = "A portable drink dispencer."
icon = 'icons/obj/drinks.dmi'
icon_state = "shaker"
charge_cost = 20
recharge_time = 3
volume = 60
possible_transfer_amounts = list(5, 10, 20, 30)
reagent_ids = list("ale", "cider", "beer", "berryjuice", "bitters", "coffee", "cognac", "cola", "dr_gibb", "egg", "gin", "gingerale", "hot_coco", "ice", "icetea", "kahlua", "lemonjuice", "lemon_lime", "limejuice", "mead", "milk", "mint", "orangejuice", "rum", "sake", "sodawater", "soymilk", "space_up", "spacemountainwind", "specialwhiskey", "sugar", "tea", "tequilla", "tomatojuice", "tonic", "vermouth", "vodka", "water", "watermelonjuice", "whiskey", "wine")
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
return
/obj/item/weapon/reagent_containers/borghypo/service/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!proximity)
return
if(!target.is_open_container() || !target.reagents)
return
if(!reagent_volumes[reagent_ids[mode]])
to_chat(user, "<span class='notice'>[src] is out of this reagent, give it some time to refill.</span>")
return
if(!target.reagents.get_free_space())
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
target.reagents.add_reagent(reagent_ids[mode], t)
reagent_volumes[reagent_ids[mode]] -= t
to_chat(user, "<span class='notice'>You transfer [t] units of the solution to [target].</span>")
return
@@ -42,9 +42,11 @@
if(!affected)
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
return
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
else if(affected.robotic >= ORGAN_ROBOT)
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
return
*/
if(!H.stat)
if(H != user)
@@ -169,9 +169,11 @@
if(!affected)
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
return
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
else if(affected.robotic >= ORGAN_ROBOT)
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
return
*/
var/cycle_time = injtime*0.33 //33% of the time slept between 5u doses
var/warmup_time = 0 //0 for containers