Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-01-19

# Conflicts:
#	code/_onclick/hud/hud.dm
#	code/modules/clothing/glasses/glasses.dm
#	code/modules/mob/living/carbon/human/update_icons.dm
#	maps/southern_cross/southern_cross-1.dmm
#	maps/southern_cross/southern_cross-3.dmm
#	maps/southern_cross/southern_cross-6.dmm
#	vorestation.dme
This commit is contained in:
Leshana
2018-01-19 17:52:25 -05:00
81 changed files with 2358 additions and 16423 deletions
+6 -21
View File
@@ -517,11 +517,15 @@
E.state = 2
E.connect_to_network()
E.active = TRUE
for(var/obj/machinery/field_generator/F in world)
if(istype(get_area(F), /area/space))
F.Varedit_start = 1
for(var/obj/machinery/power/grounding_rod/GR in world)
GR.anchored = TRUE
GR.update_icon()
for(var/obj/machinery/power/tesla_coil/TC in world)
TC.anchored = TRUE
TC.update_icon()
for(var/obj/structure/particle_accelerator/PA in world)
PA.anchored = TRUE
PA.construction_state = 3
@@ -531,25 +535,6 @@
PA.construction_state = 3
PA.update_icon()
spawn(30)
for(var/obj/machinery/the_singularitygen/G in world)
if(G.anchored)
var/obj/singularity/S = new /obj/singularity(get_turf(G), 50)
spawn(0)
qdel(G)
S.energy = 1750
S.current_size = 7
S.icon = 'icons/effects/224x224.dmi'
S.icon_state = "singularity_s7"
S.pixel_x = -96
S.pixel_y = -96
S.grav_pull = 0
//S.consume_range = 3
S.dissipate = 0
//S.dissipate_delay = 10
//S.dissipate_track = 0
//S.dissipate_strength = 10
for(var/obj/machinery/power/rad_collector/Rad in world)
if(Rad.anchored)
if(!Rad.P)
@@ -9,10 +9,19 @@
path = /obj/item/weapon/clipboard
/datum/gear/utility/communicator
display_name = "personal communicator"
display_name = "communicator selection"
path = /obj/item/device/communicator
cost = 0
display_name = "communicator watch"
/datum/gear/utility/communicator/New()
..()
var/list/communicators = list()
for(var/communicator in typesof(/obj/item/device/communicator) - list(/obj/item/device/communicator/integrated))
var/obj/item/device/communicator_type = communicator
communicators[initial(communicator_type.name)] = communicator_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(communicators))
/datum/gear/utility/camera
display_name = "camera"
path = /obj/item/device/camera
+1 -1
View File
@@ -191,7 +191,7 @@ BLIND // can't see anything
vision_flags = SEE_OBJS
enables_planes = list(VIS_FULLBRIGHT)
/obj/item/clothing/glasses/material/New() //VOREStation Edit - There's a Polaris PR for this. Maybe they'll accept someday.
/obj/item/clothing/glasses/material/New()
..()
overlay = global_hud.material
@@ -125,6 +125,42 @@
siemens_coefficient = 0.9
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/mask/shark
name = "shark mask"
desc = "A rubber shark mask."
icon_state = "shark"
flags_inv = HIDEFACE
w_class = ITEMSIZE_SMALL
siemens_coefficient = 0.9
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/mask/dolphin
name = "dolphin mask"
desc = "A rubber dolphin mask."
icon_state = "dolphin"
flags_inv = HIDEFACE
w_class = ITEMSIZE_SMALL
siemens_coefficient = 0.9
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/mask/goblin
name = "goblin mask"
desc = "A rubber goblin mask."
icon_state = "goblin"
flags_inv = HIDEFACE
w_class = ITEMSIZE_SMALL
siemens_coefficient = 0.9
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/mask/demon
name = "demon mask"
desc = "A rubber demon mask."
icon_state = "demon"
flags_inv = HIDEFACE
w_class = ITEMSIZE_SMALL
siemens_coefficient = 0.9
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/mask/horsehead
name = "horse head mask"
desc = "A mask made of soft vinyl and latex, representing the head of a horse."
@@ -1,6 +1,6 @@
/obj/item/clothing/accessory/locket
name = "silver locket"
desc = "This oval shaped, argentium sterling silver locket hangs on an incredibly fine, refractive string, almost thin as hair and microweaved from links to a deceptive strength, of similar material. The edges are engraved very delicately with an elegant curving design, but overall the main is unmarked and smooth to the touch, leaving room for either remaining as a stolid piece or future alterations. There is an obvious internal place for a picture or lock of some sort, but even behind that is a very thin compartment unhinged with the pinch of a thumb and forefinger."
desc = "A small locket of high-quality metal."
icon_state = "locket"
slot_flags = 0
w_class = ITEMSIZE_SMALL
+1 -1
View File
@@ -245,7 +245,7 @@
seed_name = "apple"
display_name = "apple tree"
mutants = list("poisonapple","goldapple")
chems = list("nutriment" = list(1,10))
chems = list("nutriment" = list(1,10),"applejuice" = list(10,20))
kitchen_tag = "apple"
/datum/seed/apple/New()
@@ -208,7 +208,7 @@ Please contact me on #coderbus IRC. ~Carn x
M.Scale(desired_scale)
M.Translate(1,-6)
ma.transform = M
ma.layer = MOB_LAYER -0.1 // Fix for a byond bug where turf entry order no longer matters
ma.layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters
else
var/matrix/M = matrix()
M.Scale(desired_scale)
+8
View File
@@ -138,6 +138,14 @@
..()
return
// Power machinery should also connect/disconnect from the network.
/obj/machinery/power/default_unfasten_wrench(var/mob/user, var/obj/item/weapon/wrench/W, var/time = 20)
if((. = ..()))
if(anchored)
connect_to_network()
else
disconnect_from_network()
// Used for power spikes by the engine, has specific effects on different machines.
/obj/machinery/power/proc/overload(var/obj/machinery/power/source)
return
+2 -1
View File
@@ -8,11 +8,12 @@
density = 1
use_power = 0
var/energy = 0
var/creation_type = /obj/singularity
/obj/machinery/the_singularitygen/process()
var/turf/T = get_turf(src)
if(src.energy >= 200)
new /obj/singularity/(T, 50)
new creation_type(T, 50)
if(src) qdel(src)
/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user)
@@ -29,15 +29,11 @@
var/chained = 0//Adminbus chain-grab
/obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0)
/obj/singularity/New(loc, var/starting_energy = 50)
//CARN: admin-alert for chuckle-fuckery.
admin_investigate_setup()
energy = starting_energy
if (temp)
spawn (temp)
qdel(src)
..()
processing_objects += src
for(var/obj/machinery/power/singularity_beacon/singubeacon in machines)
+133
View File
@@ -0,0 +1,133 @@
/obj/machinery/power/tesla_coil
name = "tesla coil"
desc = "For the union!"
icon = 'icons/obj/tesla_engine/tesla_coil.dmi'
icon_state = "coil0"
anchored = FALSE
density = TRUE
// Executing a traitor caught releasing tesla was never this fun!
can_buckle = TRUE
buckle_lying = FALSE
circuit = /obj/item/weapon/circuitboard/tesla_coil
var/power_loss = 2
var/input_power_multiplier = 1
var/zap_cooldown = 100
var/last_zap = 0
var/datum/wires/tesla_coil/wires = null
/obj/machinery/power/tesla_coil/New()
..()
wires = new(src)
/obj/machinery/power/tesla_coil/initialize()
. = ..()
default_apply_parts()
/obj/machinery/power/tesla_coil/Destroy()
qdel_null(wires)
return ..()
/obj/machinery/power/tesla_coil/RefreshParts()
var/power_multiplier = 0
zap_cooldown = 100
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
power_multiplier += C.rating
zap_cooldown -= (C.rating * 20)
input_power_multiplier = power_multiplier
/obj/machinery/power/tesla_coil/update_icon()
if(panel_open)
icon_state = "coil_open[anchored]"
else
icon_state = "coil[anchored]"
/obj/machinery/power/tesla_coil/attackby(obj/item/W, mob/user, params)
src.add_fingerprint(user)
//if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W))
if(default_deconstruction_screwdriver(user, W))
return
if(default_part_replacement(user, W))
return
if(default_unfasten_wrench(user, W))
return
if(default_deconstruction_crowbar(user, W))
return
if(is_wire_tool(W))
return wires.Interact(user)
return ..()
/obj/machinery/power/tesla_coil/attack_hand(mob/user)
if(user.a_intent == I_GRAB && user_buckle_mob(user.pulling, user))
return
..()
/obj/machinery/power/tesla_coil/tesla_act(var/power)
if(anchored && !panel_open)
being_shocked = TRUE
//don't lose arc power when it's not connected to anything
//please place tesla coils all around the station to maximize effectiveness
var/power_produced = powernet ? power / power_loss : power
add_avail(power_produced*input_power_multiplier)
flick("coilhit", src)
playsound(src.loc, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 5, power_produced)
//addtimer(CALLBACK(src, .proc/reset_shocked), 10)
spawn(10) reset_shocked()
else
..()
/obj/machinery/power/tesla_coil/proc/zap()
if((last_zap + zap_cooldown) > world.time || !powernet)
return FALSE
last_zap = world.time
var/coeff = (20 - ((input_power_multiplier - 1) * 3))
coeff = max(coeff, 10)
var/power = (powernet.avail/2)
draw_power(power)
playsound(src.loc, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 10, power/(coeff/2))
/obj/machinery/power/grounding_rod
name = "grounding rod"
desc = "Keep an area from being fried from Edison's Bane."
icon = 'icons/obj/tesla_engine/tesla_coil.dmi'
icon_state = "grounding_rod0"
anchored = FALSE
density = TRUE
can_buckle = TRUE
buckle_lying = FALSE
/obj/machinery/power/grounding_rod/update_icon()
if(panel_open)
icon_state = "grounding_rod_open[anchored]"
else
icon_state = "grounding_rod[anchored]"
/obj/machinery/power/grounding_rod/attackby(obj/item/W, mob/user, params)
//if(default_deconstruction_screwdriver(user, "grounding_rod_open[anchored]", "grounding_rod[anchored]", W))
if(default_deconstruction_screwdriver(user, W))
return
if(default_part_replacement(user, W))
return
if(default_unfasten_wrench(user, W))
return
if(default_deconstruction_crowbar(user, W))
return
return ..()
/obj/machinery/power/grounding_rod/attack_hand(mob/user)
if(user.a_intent == I_GRAB && user_buckle_mob(user.pulling, user))
return
..()
/obj/machinery/power/grounding_rod/tesla_act(var/power)
if(anchored && !panel_open)
flick("grounding_rodhit", src)
else
..()
+298
View File
@@ -0,0 +1,298 @@
#define TESLA_DEFAULT_POWER 1738260
#define TESLA_MINI_POWER 869130
/obj/singularity/energy_ball
name = "energy ball"
desc = "An energy ball."
icon = 'icons/obj/tesla_engine/energy_ball.dmi'
icon_state = "energy_ball"
pixel_x = -32
pixel_y = -32
current_size = STAGE_TWO
move_self = 1
grav_pull = 0
contained = 0
density = TRUE
energy = 0
dissipate = 1
dissipate_delay = 5
dissipate_strength = 1
var/list/orbiting_balls = list()
var/miniball = FALSE
var/produced_power
var/energy_to_raise = 32
var/energy_to_lower = -20
/obj/singularity/energy_ball/New(loc, starting_energy = 50, is_miniball = FALSE)
..()
miniball = is_miniball
/obj/singularity/energy_ball/initialize()
. = ..()
if(!miniball)
set_light(10, 7, "#EEEEFF")
/obj/singularity/energy_ball/ex_act(severity, target)
return
/obj/singularity/energy_ball/Destroy()
if(orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
var/obj/singularity/energy_ball/EB = orbiting.orbiting
EB.orbiting_balls -= src
for(var/ball in orbiting_balls)
var/obj/singularity/energy_ball/EB = ball
qdel(EB)
. = ..()
/obj/singularity/energy_ball/admin_investigate_setup()
if(miniball)
return //don't annnounce miniballs
..()
/obj/singularity/energy_ball/process(var/wait = 20)
set waitfor = FALSE
if(!orbiting)
handle_energy()
move_the_basket_ball(max(wait - 5, 4 + orbiting_balls.len * 1.5))
playsound(src.loc, 'sound/effects/lightningbolt.ogg', 100, 1, extrarange = 30)
set_dir(tesla_zap(src.loc, 7, TESLA_DEFAULT_POWER, TRUE))
for (var/ball in orbiting_balls)
var/range = rand(1, Clamp(orbiting_balls.len, 3, 7))
tesla_zap(ball, range, TESLA_MINI_POWER/7*range, TRUE)
else
energy = 0 // ensure we dont have miniballs of miniballs
/obj/singularity/energy_ball/examine(mob/user)
..()
if(orbiting_balls.len)
to_chat(user, "The amount of orbiting mini-balls is [orbiting_balls.len].")
/obj/singularity/energy_ball/proc/move_the_basket_ball(var/move_amount)
//we face the last thing we zapped, so this lets us favor that direction a bit
var/move_bias = dir
for(var/i in 0 to move_amount)
var/move_dir = pick(global.alldirs + move_bias) //ensures large-ball teslas don't just sit around
if(target && prob(10))
move_dir = get_dir(src,target)
var/turf/T = get_step(src, move_dir)
if(can_move(T))
forceMove(T)
set_dir(move_dir)
for(var/mob/living/carbon/C in loc)
dust_mobs(C)
sleep(1) // So movement is smooth
/obj/singularity/energy_ball/proc/handle_energy()
if(energy >= energy_to_raise)
energy_to_lower = energy_to_raise - 20
energy_to_raise = energy_to_raise * 1.25
playsound(src.loc, 'sound/effects/lightning_chargeup.ogg', 100, 1, extrarange = 30)
//addtimer(CALLBACK(src, .proc/new_mini_ball), 100)
spawn(100) new_mini_ball()
else if(energy < energy_to_lower && orbiting_balls.len)
energy_to_raise = energy_to_raise / 1.25
energy_to_lower = (energy_to_raise / 1.25) - 20
var/Orchiectomy_target = pick(orbiting_balls)
qdel(Orchiectomy_target)
else if(orbiting_balls.len)
dissipate() //sing code has a much better system.
/obj/singularity/energy_ball/proc/new_mini_ball()
if(!loc)
return
var/obj/singularity/energy_ball/EB = new(loc, 0, TRUE)
EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7)
var/icon/I = icon(icon,icon_state,dir)
var/orbitsize = (I.Width() + I.Height()) * pick(0.4, 0.5, 0.6, 0.7, 0.8)
orbitsize -= (orbitsize / world.icon_size) * (world.icon_size * 0.25)
EB.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36))
/obj/singularity/energy_ball/Bump(atom/A)
dust_mobs(A)
/obj/singularity/energy_ball/Bumped(atom/movable/AM)
dust_mobs(AM)
/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target)
if (istype(target))
target.orbiting_balls += src
//TODO-LESH-DEL global.poi_list -= src
target.dissipate_strength = target.orbiting_balls.len
. = ..()
/obj/singularity/energy_ball/stop_orbit()
if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting
orbitingball.orbiting_balls -= src
orbitingball.dissipate_strength = orbitingball.orbiting_balls.len
..()
if (!loc && !QDELETED(src))
qdel(src)
/obj/singularity/energy_ball/proc/dust_mobs(atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.incorporeal_move)
return
if(!iscarbon(A))
return
for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2))
if(GR.anchored)
return
var/mob/living/carbon/C = A
// C.dust() - Changing to do fatal elecrocution instead
C.electrocute_act(500, src, def_zone = BP_TORSO)
/proc/tesla_zap(atom/source, zap_range = 3, power, explosive = FALSE, stun_mobs = TRUE)
. = source.dir
if(power < 1000)
return
var/closest_dist = 0
var/closest_atom
var/obj/machinery/power/tesla_coil/closest_tesla_coil
var/obj/machinery/power/grounding_rod/closest_grounding_rod
var/mob/living/closest_mob
var/obj/machinery/closest_machine
var/obj/structure/closest_structure
var/obj/structure/blob/closest_blob
var/static/things_to_shock = typecacheof(list(/obj/machinery, /mob/living, /obj/structure))
var/static/blacklisted_tesla_types = typecacheof(list(
/obj/machinery/atmospherics,
/obj/machinery/power/emitter,
/obj/machinery/field_generator,
/mob/living/simple_animal,
/obj/machinery/door/blast,
/obj/machinery/particle_accelerator/control_box,
/obj/structure/particle_accelerator/fuel_chamber,
/obj/structure/particle_accelerator/particle_emitter/center,
/obj/structure/particle_accelerator/particle_emitter/left,
/obj/structure/particle_accelerator/particle_emitter/right,
/obj/structure/particle_accelerator/power_box,
/obj/structure/particle_accelerator/end_cap,
/obj/machinery/containment_field,
/obj/structure/disposalpipe,
/obj/structure/sign,
/obj/machinery/gateway,
/obj/structure/lattice,
/obj/structure/grille,
/obj/machinery/the_singularitygen/tesla))
for(var/A in typecache_filter_multi_list_exclusion(oview(source, zap_range+2), things_to_shock, blacklisted_tesla_types))
if(istype(A, /obj/machinery/power/tesla_coil))
var/dist = get_dist(source, A)
var/obj/machinery/power/tesla_coil/C = A
if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !C.being_shocked)
closest_dist = dist
//we use both of these to save on istype and typecasting overhead later on
//while still allowing common code to run before hand
closest_tesla_coil = C
closest_atom = C
else if(closest_tesla_coil)
continue //no need checking these other things
else if(istype(A, /obj/machinery/power/grounding_rod))
var/dist = get_dist(source, A)-2
if(dist <= zap_range && (dist < closest_dist || !closest_grounding_rod))
closest_grounding_rod = A
closest_atom = A
closest_dist = dist
else if(closest_grounding_rod)
continue
else if(isliving(A))
var/dist = get_dist(source, A)
var/mob/living/L = A
if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD && !(L.status_flags & GODMODE))
closest_mob = L
closest_atom = A
closest_dist = dist
else if(closest_mob)
continue
else if(istype(A, /obj/machinery))
var/obj/machinery/M = A
var/dist = get_dist(source, A)
if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !M.being_shocked)
closest_machine = M
closest_atom = A
closest_dist = dist
else if(closest_mob)
continue
else if(istype(A, /obj/structure/blob))
var/obj/structure/blob/B = A
var/dist = get_dist(source, A)
if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !B.being_shocked)
closest_blob = B
closest_atom = A
closest_dist = dist
else if(closest_blob)
continue
else if(istype(A, /obj/structure))
var/obj/structure/S = A
var/dist = get_dist(source, A)
if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked)
closest_structure = S
closest_atom = A
closest_dist = dist
//Alright, we've done our loop, now lets see if was anything interesting in range
if(closest_atom)
//common stuff
source.Beam(closest_atom, icon_state="lightning[rand(1,12)]", time=5, maxdistance = INFINITY)
var/zapdir = get_dir(source, closest_atom)
if(zapdir)
. = zapdir
//per type stuff:
if(closest_tesla_coil)
closest_tesla_coil.tesla_act(power, explosive, stun_mobs)
else if(closest_grounding_rod)
closest_grounding_rod.tesla_act(power, explosive, stun_mobs)
else if(closest_mob)
var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
closest_mob.electrocute_act(shock_damage, source, 1/*, tesla_shock = 1, stun = stun_mobs*/)
if(issilicon(closest_mob))
var/mob/living/silicon/S = closest_mob
if(stun_mobs)
S.emp_act(3 /*EMP_LIGHT*/)
tesla_zap(closest_mob, 7, power / 1.5, explosive, stun_mobs) // metallic folks bounce it further
else
tesla_zap(closest_mob, 5, power / 1.5, explosive, stun_mobs)
else if(closest_machine)
closest_machine.tesla_act(power, explosive, stun_mobs)
else if(closest_blob)
closest_blob.tesla_act(power, explosive, stun_mobs)
else if(closest_structure)
closest_structure.tesla_act(power, explosive, stun_mobs)
+10
View File
@@ -0,0 +1,10 @@
/obj/machinery/the_singularitygen/tesla
name = "energy ball generator"
desc = "Makes the wardenclyffe look like a child's plaything when shot with a particle accelerator."
icon = 'icons/obj/tesla_engine/tesla_generator.dmi'
icon_state = "TheSingGen"
creation_type = /obj/singularity/energy_ball
/obj/machinery/the_singularitygen/tesla/tesla_act(power, explosive = FALSE)
if(explosive)
energy += power
@@ -0,0 +1,31 @@
//////////////////////////
// Circuits and Research
//////////////////////////
// Tesla coils are built as machines using a circuit researchable in RnD
/obj/item/weapon/circuitboard/tesla_coil
name = T_BOARD("tesla coil")
build_path = /obj/machinery/power/tesla_coil
board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_MAGNET = 2, TECH_POWER = 4)
req_components = list(/obj/item/weapon/stock_parts/capacitor = 1)
/datum/design/circuit/tesla_coil
name = "Machine Design (Tesla Coil Board)"
desc = "The circuit board for a tesla coil."
id = "tesla_coil"
build_path = /obj/item/weapon/circuitboard/tesla_coil
req_tech = list(TECH_MAGNET = 2, TECH_POWER = 4)
sort_string = "MAAAC"
// Grounding rods can be built as machines using a circuit made in an autolathe.
/obj/item/weapon/circuitboard/grounding_rod
name = T_BOARD("grounding rod")
build_path = /obj/machinery/power/grounding_rod
board_type = new /datum/frame/frame_types/machine
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list()
/datum/category_item/autolathe/engineering/grounding_rod
name = "grounding rod electronics"
path = /obj/item/weapon/circuitboard/grounding_rod
+68
View File
@@ -0,0 +1,68 @@
////////////////////////////////////////
// Vars and Default tesla_act behavior
////////////////////////////////////////
/obj
var/being_shocked = FALSE
/obj/proc/tesla_act(var/power)
being_shocked = TRUE
var/power_bounced = power / 2
tesla_zap(src, 3, power_bounced)
//addtimer(CALLBACK(src, .proc/reset_shocked), 10)
//schedule_task_with_source_in(10, src, .proc/reset_shocked)
spawn(10) reset_shocked()
/obj/proc/reset_shocked()
being_shocked = FALSE
// Overrides for behavior on specific types
/obj/structure/blob/tesla_act(power)
..()
adjust_integrity(-power/400)
/obj/machinery/nuclearbomb/tesla_act(power, explosive)
..()
if(explosive)
qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over
/obj/machinery/tesla_act(power, explosive = FALSE)
..()
if(prob(85) && explosive)
explosion(loc, 1, 2, 4, /*flame_range = 2,*/ adminlog = FALSE/*, smoke = FALSE*/)
else if(prob(50))
emp_act(2)
else
ex_act(2)
/obj/machinery/camera/tesla_act(var/power)//EMP proof upgrade also makes it tesla immune
if(isEmpProof())
return
..()
qdel(src) //to prevent bomb testing camera from exploding over and over forever
/obj/machinery/light/tesla_act(power, explosive = FALSE)
if(explosive)
explosion(loc, 0, 0, 0/*, flame_range = 5*/, adminlog = FALSE)
qdel(src)
/obj/structure/closet/tesla_act(var/power)
..() //extend the zap
visible_message("<span class='danger'>[src] is blown apart by the bolt of electricity!</span>", "<span class='danger'>You hear a metallic screeching sound.</span>")
dump_contents()
qdel(src)
/obj/structure/reagent_dispensers/fueltank/tesla_act()
..() //extend the zap
explode()
@@ -524,6 +524,17 @@
glass_name = "lemon juice"
glass_desc = "Sour..."
/datum/reagent/drink/juice/apple
name = "Apple Juice"
id = "applejuice"
description = "The most basic juice."
taste_description = "crispness"
taste_mult = 1.1
color = "#E2A55F"
glass_name = "apple juice"
glass_desc = "An earth favorite."
/datum/reagent/drink/juice/lime
name = "Lime Juice"
id = "limejuice"
@@ -1327,7 +1338,7 @@
glass_name = "Ent's Draught"
glass_desc = "You can almost smell the tranquility emanating from this."
/datum/reagent/drink/lovepotion
name = "Love Potion"
id = "lovepotion"
@@ -2783,7 +2794,7 @@
glass_name = "Pisco Sour"
glass_desc = "South American bliss, served ice cold."
/datum/reagent/ethanol/coldfront
name = "Cold Front"
id = "coldfront"
@@ -2793,10 +2804,10 @@
strength = 30
adj_temp = -20
targ_temp = 220 //Dangerous to certain races. Drink in moderation.
glass_name = "Cold Front"
glass_desc = "Minty, rich, and painfully cold. It's a blizzard in a cup."
/datum/reagent/ethanol/mintjulep
name = "Mint Julep"
id = "mintjulep"
@@ -2805,6 +2816,6 @@
color = "#bbfc8a" // rgb(187, 252, 138)
strength = 25
adj_temp = -5
glass_name = "Mint Julep"
glass_desc = "Minty and refreshing, perfect for a hot day."
@@ -90,6 +90,9 @@ Drinks Data
/datum/reagent/drink/juice/lemon
glass_icon_state = "lemonjuice"
/datum/reagent/drink/juice/apple
glass_icon_state = "applejuice"
/datum/reagent/drink/juice/lime
glass_icon_state = "glass_green"
@@ -19,6 +19,8 @@
var/label_text = ""
var/list/prefill = null //Reagents to fill the container with on New(), formatted as "reagentID" = quantity
var/list/can_be_placed_into = list(
/obj/machinery/chem_master/,
/obj/machinery/chemical_dispenser,
@@ -47,6 +49,11 @@
/obj/item/weapon/reagent_containers/glass/New()
..()
if(LAZYLEN(prefill))
for(var/R in prefill)
reagents.add_reagent(R,prefill[R])
prefill = null
update_icon()
base_name = name
base_desc = desc
@@ -222,18 +229,14 @@
volume = 30
w_class = ITEMSIZE_TINY
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25)
possible_transfer_amounts = list(5,10,15,30)
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New()
..()
reagents.add_reagent("cryoxadone", 30)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
prefill = list("cryoxadone" = 30)
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New()
..()
reagents.add_reagent("sacid", 60)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
prefill = list("sacid" = 60)
/obj/item/weapon/reagent_containers/glass/bucket
desc = "It's a bucket."
@@ -61,11 +61,7 @@
desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline/New()
..()
reagents.add_reagent("inaprovaline", 60)
update_icon()
prefill = list("inaprovaline" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/toxin
@@ -73,11 +69,7 @@
desc = "A small bottle of toxins. Do not drink, it is poisonous."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
/obj/item/weapon/reagent_containers/glass/bottle/toxin/New()
..()
reagents.add_reagent("toxin", 60)
update_icon()
prefill = list("toxin" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/cyanide
@@ -85,23 +77,15 @@
desc = "A small bottle of cyanide. Bitter almonds?"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
prefill = list("cyanide" = 30) //volume changed to match chloral
/obj/item/weapon/reagent_containers/glass/bottle/cyanide/New()
..()
reagents.add_reagent("cyanide", 30) //volume changed to match chloral
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/stoxin
name = "soporific bottle"
desc = "A small bottle of soporific. Just the fumes make you sleepy."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
/obj/item/weapon/reagent_containers/glass/bottle/stoxin/New()
..()
reagents.add_reagent("stoxin", 60)
update_icon()
prefill = list("stoxin" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
@@ -109,11 +93,7 @@
desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate/New()
..()
reagents.add_reagent("chloralhydrate", 30) //Intentionally low since it is so strong. Still enough to knock someone out.
update_icon()
prefill = list("chloralhydrate" = 30) //Intentionally low since it is so strong. Still enough to knock someone out.
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
@@ -121,11 +101,7 @@
desc = "A small bottle of dylovene. Counters poisons, and repairs damage. A wonder drug."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin/New()
..()
reagents.add_reagent("anti_toxin", 60)
update_icon()
prefill = list("anti_toxin" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/mutagen
@@ -133,11 +109,7 @@
desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-1"
/obj/item/weapon/reagent_containers/glass/bottle/mutagen/New()
..()
reagents.add_reagent("mutagen", 60)
update_icon()
prefill = list("mutagen" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/ammonia
@@ -145,11 +117,7 @@
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-1"
/obj/item/weapon/reagent_containers/glass/bottle/ammonia/New()
..()
reagents.add_reagent("ammonia", 60)
update_icon()
prefill = list("ammonia" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient
@@ -157,11 +125,7 @@
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient/New()
..()
reagents.add_reagent("eznutrient", 60)
update_icon()
prefill = list("eznutrient" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/left4zed
@@ -169,11 +133,7 @@
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/left4zed/New()
..()
reagents.add_reagent("left4zed", 60)
update_icon()
prefill = list("left4zed" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/robustharvest
@@ -181,11 +141,7 @@
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/robustharvest/New()
..()
reagents.add_reagent("robustharvest", 60)
update_icon()
prefill = list("robustharvest" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
@@ -193,23 +149,14 @@
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine/New()
..()
reagents.add_reagent("diethylamine", 60)
update_icon()
prefill = list("diethylamine" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/pacid
name = "Polytrinic Acid Bottle"
desc = "A small bottle. Contains a small amount of Polytrinic Acid"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/pacid/New()
..()
reagents.add_reagent("pacid", 60)
update_icon()
prefill = list("pacid" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
@@ -217,12 +164,7 @@
desc = "A small bottle. Contains the liquid essence of the gods."
icon = 'icons/obj/drinks.dmi'
icon_state = "holyflask"
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine/New()
..()
reagents.add_reagent("adminordrazine", 60)
update_icon()
prefill = list("adminordrazine" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
@@ -230,11 +172,7 @@
desc = "A small bottle. Contains hot sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/capsaicin/New()
..()
reagents.add_reagent("capsaicin", 60)
update_icon()
prefill = list("capsaicin" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/frostoil
@@ -242,8 +180,4 @@
desc = "A small bottle. Contains cold sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/frostoil/New()
..()
reagents.add_reagent("frostoil", 60)
update_icon()
prefill = list("frostoil" = 60)
@@ -13,11 +13,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
reagent = "inaprovaline"
/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline/New()
..()
reagents.add_reagent("inaprovaline", 60)
update_icon()
prefill = list("inaprovaline" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
@@ -26,9 +22,4 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
reagent = "anti_toxin"
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin/New()
..()
reagents.add_reagent("anti_toxin", 60)
update_icon()
prefill = list("anti_toxin" = 60)
+2 -10
View File
@@ -141,11 +141,7 @@
desc = "A small bottle. Contains some really weird liquid metal."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/metamorphic/New()
..()
reagents.add_reagent("metamorphic", 60)
update_icon()
prefill = list("metamorphic" = 60)
// This is kind of a waste since iron is in the chem dispenser but it would be inconsistent if this wasn't here.
@@ -216,11 +212,7 @@
desc = "A small bottle. Contains some really weird liquid metal."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
/obj/item/weapon/reagent_containers/glass/bottle/binding/New()
..()
reagents.add_reagent("binding", 60)
update_icon()
prefill = list("binding" = 60)
/datum/chemical_reaction/binding