Merge branch 'master' into Projectile_Rework
This commit is contained in:
@@ -137,7 +137,7 @@ Class Procs:
|
||||
|
||||
/obj/machinery/Initialize()
|
||||
if(!armor)
|
||||
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
|
||||
armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
|
||||
. = ..()
|
||||
GLOB.machines += src
|
||||
|
||||
@@ -371,7 +371,7 @@ Class Procs:
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
|
||||
user.visible_message("<span class='danger'>[user.name] smashes against \the [src.name] with its paws.</span>", null, null, COMBAT_MESSAGE_RANGE)
|
||||
take_damage(4, BRUTE, "melee", 1)
|
||||
take_damage(4, BRUTE, MELEE, 1)
|
||||
|
||||
/obj/machinery/attack_robot(mob/user)
|
||||
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
|
||||
@@ -597,7 +597,7 @@ Class Procs:
|
||||
if(prob(85) && (zap_flags & ZAP_MACHINE_EXPLOSIVE))
|
||||
explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE)
|
||||
else if(zap_flags & ZAP_OBJ_DAMAGE)
|
||||
take_damage(power/2000, BURN, "energy")
|
||||
take_damage(power/2000, BURN, ENERGY)
|
||||
if(prob(40))
|
||||
emp_act(50)
|
||||
|
||||
@@ -621,7 +621,7 @@ Class Procs:
|
||||
AM.pixel_y = -8 + (round( . / 3)*8)
|
||||
|
||||
/obj/machinery/rust_heretic_act()
|
||||
take_damage(500, BRUTE, "melee", 1)
|
||||
take_damage(500, BRUTE, MELEE, 1)
|
||||
|
||||
/**
|
||||
* Alerts the AI that a hack is in progress.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
|
||||
plane = FLOOR_PLANE
|
||||
max_integrity = 200
|
||||
armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
|
||||
|
||||
var/uses = 20
|
||||
var/cooldown = 0
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/device_type = null
|
||||
var/id = null
|
||||
var/initialized_button = 0
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 70)
|
||||
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 70)
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 2
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 50)
|
||||
armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 50)
|
||||
max_integrity = 100
|
||||
integrity_failure = 0.5
|
||||
var/list/network = list("ss13")
|
||||
@@ -273,7 +273,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/camera/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
|
||||
if(damage_flag == "melee" && damage_amount < 12 && !(stat & BROKEN))
|
||||
if(damage_flag == MELEE && damage_amount < 12 && !(stat & BROKEN))
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
active_power_usage = 300
|
||||
max_integrity = 200
|
||||
integrity_failure = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 20)
|
||||
var/brightness_on = 1
|
||||
var/icon_keyboard = "generic_key"
|
||||
var/icon_screen = "generic"
|
||||
@@ -101,10 +101,10 @@
|
||||
switch(severity)
|
||||
if(1)
|
||||
if(prob(50))
|
||||
obj_break("energy")
|
||||
obj_break(ENERGY)
|
||||
if(2)
|
||||
if(prob(10))
|
||||
obj_break("energy")
|
||||
obj_break(ENERGY)
|
||||
|
||||
/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user)
|
||||
on_deconstruction()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name = "gas sensor"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "gsensor1"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 0)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 0)
|
||||
|
||||
var/on = TRUE
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
anchored = FALSE
|
||||
max_integrity = 180
|
||||
proj_pass_rate = 20
|
||||
armor = list("melee" = 10, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 10, "acid" = 0)
|
||||
armor = list(MELEE = 10, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 0)
|
||||
|
||||
var/deploy_time = 40
|
||||
var/deploy_message = TRUE
|
||||
|
||||
@@ -576,7 +576,7 @@
|
||||
desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state."
|
||||
normal_integrity = 150
|
||||
damage_deflection = 5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
|
||||
|
||||
//Pinion airlocks: Clockwork doors that only let servants of Ratvar through.
|
||||
/obj/machinery/door/airlock/clockwork
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
power_channel = ENVIRON
|
||||
max_integrity = 350
|
||||
damage_deflection = 10
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70)
|
||||
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70)
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
flags_1 = PREVENT_CLICK_UNDER_1|DEFAULT_RICOCHET_1
|
||||
ricochet_chance_mod = 0.8
|
||||
@@ -107,19 +107,6 @@
|
||||
return
|
||||
bumpopen(M)
|
||||
return
|
||||
|
||||
if(ismecha(AM))
|
||||
var/obj/mecha/mecha = AM
|
||||
if(density)
|
||||
if(mecha.occupant)
|
||||
if(world.time - mecha.occupant.last_bumped <= 10)
|
||||
return
|
||||
mecha.occupant.last_bumped = world.time
|
||||
if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
|
||||
open()
|
||||
else
|
||||
do_animate("deny")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/door/Move()
|
||||
@@ -366,7 +353,7 @@
|
||||
C.bleed(DOOR_CRUSH_DAMAGE)
|
||||
else
|
||||
L.add_splatter_floor(location)
|
||||
for(var/obj/mecha/M in get_turf(src))
|
||||
for(var/obj/vehicle/sealed/mecha/M in get_turf(src))
|
||||
M.take_damage(DOOR_CRUSH_DAMAGE)
|
||||
|
||||
/obj/machinery/door/proc/autoclose()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
layer = BELOW_OPEN_DOOR_LAYER
|
||||
closingLayer = CLOSED_FIREDOOR_LAYER
|
||||
assemblytype = /obj/structure/firelock_frame
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70)
|
||||
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 95, ACID = 70)
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
|
||||
air_tight = TRUE
|
||||
attack_hand_is_action = TRUE
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
explosion_block = 3
|
||||
heat_proof = TRUE
|
||||
max_integrity = 600
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
|
||||
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
|
||||
damage_deflection = 70
|
||||
var/password = "Swordfish"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
heat_proof = TRUE
|
||||
safe = FALSE
|
||||
max_integrity = 600
|
||||
armor = list("melee" = 50, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
|
||||
armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
|
||||
resistance_flags = FIRE_PROOF
|
||||
damage_deflection = 70
|
||||
poddoor = TRUE
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon = 'icons/obj/doors/shutters.dmi'
|
||||
layer = SHUTTER_LAYER
|
||||
closingLayer = SHUTTER_LAYER
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
|
||||
armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
|
||||
damage_deflection = 20
|
||||
max_integrity = 100
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
desc = "These shutters have an armoured frame; it looks like plasteel. These shutters look robust enough to survive explosions."
|
||||
icon = 'icons/obj/doors/shutters_old.dmi'
|
||||
icon_state = "closed"
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 75, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
|
||||
armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 75, BOMB = 30, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
|
||||
max_integrity = 300
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/old/preopen
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/base_state = "left"
|
||||
max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file
|
||||
integrity_failure = 0
|
||||
armor = list("melee" = 20, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 70, "acid" = 100)
|
||||
armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100)
|
||||
visible = FALSE
|
||||
flags_1 = ON_BORDER_1|DEFAULT_RICOCHET_1
|
||||
pass_flags_self = PASSGLASS
|
||||
@@ -78,11 +78,13 @@
|
||||
return
|
||||
if (!( ismob(AM) ))
|
||||
if(ismecha(AM))
|
||||
var/obj/mecha/mecha = AM
|
||||
if(mecha.occupant && src.allowed(mecha.occupant))
|
||||
open_and_close()
|
||||
else
|
||||
do_animate("deny")
|
||||
var/obj/vehicle/sealed/mecha/mecha = AM
|
||||
for(var/O in mecha.occupants)
|
||||
var/mob/living/occupant = O
|
||||
if(allowed(occupant))
|
||||
open_and_close()
|
||||
return
|
||||
do_animate("deny")
|
||||
return
|
||||
if (!( SSticker ))
|
||||
return
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
plane = ABOVE_WALL_PLANE
|
||||
max_integrity = 250
|
||||
integrity_failure = 0.4
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 6
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
return flash()
|
||||
|
||||
/obj/machinery/flasher/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
|
||||
if(damage_flag == "melee" && damage_amount < 10) //any melee attack below 10 dmg does nothing
|
||||
if(damage_flag == MELEE && damage_amount < 10) //any melee attack below 10 dmg does nothing
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ Possible to do for anyone motivated enough:
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
max_integrity = 300
|
||||
armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
|
||||
armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0)
|
||||
circuit = /obj/item/circuitboard/machine/holopad
|
||||
/// List of living mobs that use the holopad
|
||||
var/list/masters
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 4
|
||||
max_integrity = 300
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
|
||||
armor = list(MELEE = 50, BULLET = 30, LASER = 70, ENERGY = 50, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 70)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/id = null
|
||||
var/on = FALSE
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
level = 1 // underfloor
|
||||
layer = LOW_OBJ_LAYER
|
||||
max_integrity = 500
|
||||
armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 70, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
|
||||
armor = list(MELEE = 70, BULLET = 70, LASER = 70, ENERGY = 70, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80)
|
||||
|
||||
var/open = FALSE // true if cover is open
|
||||
var/locked = TRUE // true if controls are locked
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
power_channel = EQUIP //drains power from the EQUIPMENT channel
|
||||
max_integrity = 160 //the turret's health
|
||||
integrity_failure = 0.5
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
|
||||
/// Base turret icon state
|
||||
base_icon_state = "standard"
|
||||
/// Scan range of the turret for locating targets
|
||||
@@ -478,10 +478,12 @@
|
||||
|
||||
for(var/A in GLOB.mechas_list)
|
||||
if((get_dist(A, base) < scan_range) && can_see(base, A, scan_range))
|
||||
var/obj/mecha/Mech = A
|
||||
if(Mech.occupant && !in_faction(Mech.occupant)) //If there is a user and they're not in our faction
|
||||
if(assess_perp(Mech.occupant) >= 4)
|
||||
targets += Mech
|
||||
var/obj/vehicle/sealed/mecha/mech = A
|
||||
for(var/O in mech.occupants)
|
||||
var/mob/living/occupant = O
|
||||
if(!in_faction(occupant)) //If there is a user and they're not in our faction
|
||||
if(assess_perp(occupant) >= 4)
|
||||
targets += mech
|
||||
|
||||
if((turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS) && GLOB.blobs.len && (mode == TURRET_LETHAL))
|
||||
for(var/obj/structure/blob/B in view(scan_range, base))
|
||||
@@ -774,7 +776,7 @@
|
||||
/obj/machinery/porta_turret/syndicate/energy/pirate
|
||||
max_integrity = 260
|
||||
integrity_failure = 0.08
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/energy/raven
|
||||
stun_projectile = /obj/item/projectile/beam/laser
|
||||
@@ -794,7 +796,7 @@
|
||||
lethal_projectile = /obj/item/projectile/bullet/p50/penetrator/shuttle
|
||||
lethal_projectile_sound = 'sound/weapons/gunshot_smg.ogg'
|
||||
stun_projectile_sound = 'sound/weapons/gunshot_smg.ogg'
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 80, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 80, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/pod/toolbox
|
||||
max_integrity = 100
|
||||
|
||||
@@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from
|
||||
var/receive_ore_updates = FALSE //If ore redemption machines will send an update when it receives new ores.
|
||||
max_integrity = 300
|
||||
armor = list("melee" = 70, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
|
||||
|
||||
/obj/machinery/requests_console/power_change()
|
||||
..()
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if(severity >= 70)
|
||||
qdel(src)
|
||||
else
|
||||
take_damage(severity/1.3, BRUTE, "energy", 0)
|
||||
take_damage(severity/1.3, BRUTE, ENERGY, 0)
|
||||
|
||||
/obj/structure/emergency_shield/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0)
|
||||
switch(damage_type)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
density = TRUE
|
||||
max_integrity = 400
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 30)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 30)
|
||||
layer = OBJ_LAYER
|
||||
showpipe = TRUE
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
name = "space heater"
|
||||
desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire. Warranty void if used in engines."
|
||||
max_integrity = 250
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 10)
|
||||
circuit = /obj/item/circuitboard/machine/space_heater
|
||||
var/obj/item/stock_parts/cell/cell
|
||||
var/on = FALSE
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
#define STASIS_TOGGLE_COOLDOWN 50
|
||||
/obj/machinery/stasis
|
||||
name = "Lifeform Stasis Unit"
|
||||
desc = "A not so comfortable looking bed with some nozzles at the top and bottom. It will keep someone in stasis."
|
||||
icon = 'icons/obj/machines/stasis.dmi'
|
||||
icon_state = "stasis"
|
||||
density = FALSE
|
||||
can_buckle = TRUE
|
||||
buckle_lying = 90
|
||||
circuit = /obj/item/circuitboard/machine/stasis
|
||||
idle_power_usage = 40
|
||||
active_power_usage = 340
|
||||
fair_market_price = 10
|
||||
payment_department = ACCOUNT_MED
|
||||
var/stasis_enabled = TRUE
|
||||
var/last_stasis_sound = FALSE
|
||||
var/stasis_can_toggle = 0
|
||||
var/mattress_state = "stasis_on"
|
||||
var/obj/effect/overlay/vis/mattress_on
|
||||
|
||||
/obj/machinery/stasis/examine(mob/user)
|
||||
..()
|
||||
var/turn_on_or_off = stasis_enabled ? "turn off" : "turn on"
|
||||
to_chat(user, "<span class='notice'>Alt-click to [turn_on_or_off] the machine.</span>")
|
||||
|
||||
/obj/machinery/stasis/proc/play_power_sound()
|
||||
var/_running = stasis_running()
|
||||
if(last_stasis_sound != _running)
|
||||
var/sound_freq = rand(5120, 8800)
|
||||
if(_running)
|
||||
playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = sound_freq)
|
||||
else
|
||||
playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq)
|
||||
last_stasis_sound = _running
|
||||
|
||||
/obj/machinery/stasis/AltClick(mob/user)
|
||||
if(world.time >= stasis_can_toggle && user.canUseTopic(src))
|
||||
stasis_enabled = !stasis_enabled
|
||||
stasis_can_toggle = world.time + STASIS_TOGGLE_COOLDOWN
|
||||
playsound(src, 'sound/machines/click.ogg', 60, TRUE)
|
||||
play_power_sound()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/stasis/Exited(atom/movable/AM, atom/newloc)
|
||||
if(AM == occupant)
|
||||
var/mob/living/L = AM
|
||||
if(IS_IN_STASIS(L))
|
||||
thaw_them(L)
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/stasis/proc/stasis_running()
|
||||
return stasis_enabled && is_operational()
|
||||
|
||||
/obj/machinery/stasis/update_icon()
|
||||
. = ..()
|
||||
var/_running = stasis_running()
|
||||
var/list/overlays_to_remove = managed_vis_overlays
|
||||
|
||||
if(mattress_state)
|
||||
if(!mattress_on || !managed_vis_overlays)
|
||||
mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, layer, plane, dir, alpha = 0, unique = TRUE)
|
||||
|
||||
if(mattress_on.alpha ? !_running : _running) //check the inverse of _running compared to truthy alpha, to see if they differ
|
||||
var/new_alpha = _running ? 255 : 0
|
||||
var/easing_direction = _running ? EASE_OUT : EASE_IN
|
||||
animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction)
|
||||
|
||||
overlays_to_remove = managed_vis_overlays - mattress_on
|
||||
|
||||
SSvis_overlays.remove_vis_overlay(src, overlays_to_remove)
|
||||
|
||||
if(occupant)
|
||||
SSvis_overlays.add_vis_overlay(src, 'icons/obj/machines/stasis.dmi', "tubes", LYING_MOB_LAYER + 0.1, plane, dir) //using vis_overlays instead of normal overlays for mouse_opacity here
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "stasis_broken"
|
||||
return
|
||||
if(panel_open || stat & MAINT)
|
||||
icon_state = "stasis_maintenance"
|
||||
return
|
||||
icon_state = "stasis"
|
||||
|
||||
/obj/machinery/stasis/obj_break(damage_flag)
|
||||
. = ..()
|
||||
play_power_sound()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/stasis/power_change()
|
||||
. = ..()
|
||||
play_power_sound()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/stasis/proc/chill_out(mob/living/target)
|
||||
if(target != occupant)
|
||||
return
|
||||
var/freq = rand(24750, 26550)
|
||||
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = freq)
|
||||
target.apply_status_effect(/datum/status_effect/grouped/stasis, STASIS_MACHINE_EFFECT)
|
||||
|
||||
target.ExtinguishMob()
|
||||
use_power = ACTIVE_POWER_USE
|
||||
|
||||
/obj/machinery/stasis/proc/thaw_them(mob/living/target)
|
||||
target.remove_status_effect(/datum/status_effect/grouped/stasis, STASIS_MACHINE_EFFECT)
|
||||
if(target == occupant)
|
||||
use_power = IDLE_POWER_USE
|
||||
|
||||
/obj/machinery/stasis/post_buckle_mob(mob/living/L)
|
||||
if(!can_be_occupant(L))
|
||||
return
|
||||
occupant = L
|
||||
if(stasis_running() && check_nap_violations())
|
||||
chill_out(L)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/stasis/post_unbuckle_mob(mob/living/L)
|
||||
thaw_them(L)
|
||||
if(L == occupant)
|
||||
occupant = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/stasis/process()
|
||||
if( !( occupant && isliving(occupant) && check_nap_violations() ) )
|
||||
use_power = IDLE_POWER_USE
|
||||
return
|
||||
var/mob/living/L_occupant = occupant
|
||||
if(stasis_running())
|
||||
if(!IS_IN_STASIS(L_occupant))
|
||||
chill_out(L_occupant)
|
||||
else if(IS_IN_STASIS(L_occupant))
|
||||
thaw_them(L_occupant)
|
||||
|
||||
/obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I)
|
||||
. = default_deconstruction_screwdriver(user, "stasis_maintenance", "stasis", I)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/stasis/crowbar_act(mob/living/user, obj/item/I)
|
||||
return default_deconstruction_crowbar(I)
|
||||
|
||||
/obj/machinery/stasis/nap_violation(mob/violator)
|
||||
unbuckle_mob(violator, TRUE)
|
||||
#undef STASIS_TOGGLE_COOLDOWN
|
||||
@@ -14,7 +14,7 @@
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 100
|
||||
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
|
||||
armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
|
||||
var/obj/item/stored
|
||||
|
||||
/obj/machinery/blackbox_recorder/Initialize()
|
||||
|
||||
Reference in New Issue
Block a user