Merge branch 'master' into Arokha/machinerybreak

This commit is contained in:
Aronai Sieyes
2021-06-21 11:11:31 -04:00
committed by GitHub
999 changed files with 250656 additions and 483402 deletions
+4 -4
View File
@@ -108,14 +108,14 @@ proc/cardinalrange(var/center)
/obj/machinery/am_shielding/update_icon()
overlays.Cut()
cut_overlays()
for(var/direction in alldirs)
var/machine = locate(/obj/machinery, get_step(loc, direction))
if((istype(machine, /obj/machinery/am_shielding) && machine:control_unit == control_unit)||(istype(machine, /obj/machinery/power/am_control_unit) && machine == control_unit))
overlays += "shield_[direction]"
add_overlay("shield_[direction]")
if(core_check())
overlays += "core"
add_overlay("core")
if(!processing) setup_core()
else if(processing) shutdown_core()
@@ -194,7 +194,7 @@ proc/cardinalrange(var/center)
throwforce = 5
throw_speed = 1
throw_range = 2
matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 2000)
matter = list(DEFAULT_WALL_MATERIAL = 100)
/obj/item/device/am_shielding_container/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
+16 -50
View File
@@ -85,6 +85,7 @@ GLOBAL_LIST_EMPTY(apcs)
use_power = USE_POWER_OFF
clicksound = "switch"
req_access = list(access_engine_equip)
blocks_emissive = FALSE
var/area/area
var/areastring = null
var/obj/item/weapon/cell/cell
@@ -128,10 +129,6 @@ GLOBAL_LIST_EMPTY(apcs)
var/failure_timer = 0
var/force_update = 0
var/updating_icon = 0
var/global/list/status_overlays_lock
var/global/list/status_overlays_charging
var/global/list/status_overlays_equipment
var/global/list/status_overlays_lighting
var/global/list/status_overlays_environ
var/alarms_hidden = FALSE //If power alarms from this APC are visible on consoles
@@ -306,42 +303,6 @@ GLOBAL_LIST_EMPTY(apcs)
// update the APC icon to show the three base states
// also add overlays for indicator lights
/obj/machinery/power/apc/update_icon()
if(!status_overlays)
status_overlays = 1
status_overlays_lock = new
status_overlays_charging = new
status_overlays_equipment = new
status_overlays_lighting = new
status_overlays_environ = new
status_overlays_lock.len = 2
status_overlays_charging.len = 3
status_overlays_equipment.len = 4
status_overlays_lighting.len = 4
status_overlays_environ.len = 4
status_overlays_lock[1] = image(icon, "apcox-0") // 0=blue 1=red
status_overlays_lock[2] = image(icon, "apcox-1")
status_overlays_charging[1] = image(icon, "apco3-0")
status_overlays_charging[2] = image(icon, "apco3-1")
status_overlays_charging[3] = image(icon, "apco3-2")
status_overlays_equipment[1] = image(icon, "apco0-0")
status_overlays_equipment[2] = image(icon, "apco0-1")
status_overlays_equipment[3] = image(icon, "apco0-2")
status_overlays_equipment[4] = image(icon, "apco0-3")
status_overlays_lighting[1] = image(icon, "apco1-0")
status_overlays_lighting[2] = image(icon, "apco1-1")
status_overlays_lighting[3] = image(icon, "apco1-2")
status_overlays_lighting[4] = image(icon, "apco1-3")
status_overlays_environ[1] = image(icon, "apco2-0")
status_overlays_environ[2] = image(icon, "apco2-1")
status_overlays_environ[3] = image(icon, "apco2-2")
status_overlays_environ[4] = image(icon, "apco2-3")
var/update = check_updates() //returns 0 if no need to update icons.
// 1 if we need to update the icon_state
// 2 if we need to update the overlays
@@ -368,20 +329,25 @@ GLOBAL_LIST_EMPTY(apcs)
icon_state = "apcemag"
if(!(update_state & UPDATE_ALLGOOD))
if(overlays.len)
overlays = 0
return
cut_overlays()
return
if(update & 2)
if(overlays.len)
overlays.len = 0
cut_overlays()
if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD)
overlays += status_overlays_lock[locked+1]
overlays += status_overlays_charging[charging+1]
var/list/new_overlays = list()
new_overlays += mutable_appearance(icon, "apcox-[locked]")
new_overlays += emissive_appearance(icon, "apcox-[locked]")
new_overlays += mutable_appearance(icon, "apco3-[charging]")
new_overlays += emissive_appearance(icon, "apco3-[charging]")
if(operating)
overlays += status_overlays_equipment[equipment+1]
overlays += status_overlays_lighting[lighting+1]
overlays += status_overlays_environ[environ+1]
new_overlays += mutable_appearance(icon, "apco0-[equipment]")
new_overlays += emissive_appearance(icon, "apco0-[equipment]")
new_overlays += mutable_appearance(icon, "apco1-[lighting]")
new_overlays += emissive_appearance(icon, "apco1-[lighting]")
new_overlays += mutable_appearance(icon, "apco2-[environ]")
new_overlays += emissive_appearance(icon, "apco2-[environ]")
add_overlay(new_overlays)
if(update & 3)
if(update_state & UPDATE_BLUESCREEN)
+5 -5
View File
@@ -62,22 +62,22 @@
return ..()
/obj/machinery/power/smes/batteryrack/update_icon()
overlays.Cut()
cut_overlays()
icon_update = 0
var/cellcount = 0
var/charge_level = between(0, round(Percentage() / 12), 7)
overlays += "charge[charge_level]"
add_overlay("charge[charge_level]")
for(var/obj/item/weapon/cell/C in internal_cells)
cellcount++
overlays += "cell[cellcount]"
add_overlay("cell[cellcount]")
if(C.fully_charged())
overlays += "cell[cellcount]f"
add_overlay("cell[cellcount]f")
else if(!C.charge)
overlays += "cell[cellcount]e"
add_overlay("cell[cellcount]e")
// Recalculate maxcharge and similar variables.
/obj/machinery/power/smes/batteryrack/proc/update_maxcharge()
+3 -2
View File
@@ -112,7 +112,8 @@
var/used = FALSE
/obj/item/device/fbp_backup_cell/Initialize()
overlays += image(icon,"[icon_state]1")
. = ..()
add_overlay("[icon_state]1")
/obj/item/device/fbp_backup_cell/attack(mob/living/M as mob, mob/user as mob)
if(!used && ishuman(M))
@@ -134,7 +135,7 @@
return
used = TRUE
desc += " This one has already been used."
overlays.Cut()
cut_overlays()
target.adjust_nutrition(amount)
user.custom_emote(message = "connects \the [src] to [user == target ? "their" : "[target]'s"] charging port, expending it.")
@@ -38,7 +38,7 @@
icon_state = "blank"
var/image/I = image(icon, "fuel_assembly")
I.color = fuel_colour
overlays += list(I, image(icon, "fuel_assembly_bracket"))
add_overlay(list(I, image(icon, "fuel_assembly_bracket")))
rod_quantities[fuel_type] = initial_amount
/obj/item/weapon/fuel_assembly/process()
+3 -3
View File
@@ -24,12 +24,12 @@
/obj/machinery/power/generator_type2/proc/updateicon()
if(stat & (NOPOWER|BROKEN))
overlays.Cut()
cut_overlays()
else
overlays.Cut()
cut_overlays()
if(lastgenlev != 0)
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
add_overlay("teg-op[lastgenlev]")
#define GENRATE 800 // generator output coefficient from Q
+34 -11
View File
@@ -283,7 +283,7 @@ var/global/list/light_type_cache = list()
plane = OBJ_PLANE
layer = OBJ_LAYER
desc = "A floor lamp."
light_type = /obj/item/weapon/light/bulb
light_type = /obj/item/weapon/light/bulb/large
construct_type = /obj/machinery/light_construct/flamp
shows_alerts = FALSE //VOREStation Edit
var/lamp_shade = 1
@@ -885,20 +885,34 @@ var/global/list/light_type_cache = list()
force = 2
throwforce = 5
w_class = ITEMSIZE_TINY
var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
var/base_state
var/switchcount = 0 // number of times switched
matter = list(DEFAULT_WALL_MATERIAL = 60)
var/rigged = 0 // true if rigged to explode
///LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
var/status = LIGHT_OK
///Base icon_state name to append suffixes for status
var/base_state
///Number of times switched on/off
var/switchcount = 0
///Is this light set to explode
var/rigged = 0
///The chance (prob()) that this light will be broken at roundstart
var/broken_chance = 2
var/brightness_range = 2 //how much light it gives off
///The raidus in turfs this light will reach. It will be at it's most dim this many turfs away.
/// This is also used in power draw calculation for machinery/lights.
var/brightness_range = 8
///The light will fall off over more/less range based on this. The formula is complicated.
var/brightness_power = 1
///The color of the light emitted.
var/brightness_color = LIGHT_COLOR_INCANDESCENT_TUBE
///Replaces brightness_range during nightshifts.
var/nightshift_range = 8
var/nightshift_power = 1
///Replaces brightness_power during nightshifts.
var/nightshift_power = 0.45
///Replaces brightness_color during nightshifts.
var/nightshift_color = LIGHT_COLOR_NIGHTSHIFT
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
@@ -909,14 +923,14 @@ var/global/list/light_type_cache = list()
base_state = "ltube"
item_state = "c_tube"
matter = list("glass" = 100)
brightness_range = 10 // luminosity when on, also used in power calculation //VOREStation Edit
brightness_power = 6
brightness_range = 7
brightness_power = 2
/obj/item/weapon/light/tube/large
w_class = ITEMSIZE_SMALL
name = "large light tube"
brightness_range = 15
brightness_power = 9
brightness_power = 4
nightshift_range = 10
nightshift_power = 1.5
@@ -929,12 +943,21 @@ var/global/list/light_type_cache = list()
item_state = "contvapour"
matter = list("glass" = 100)
brightness_range = 5
brightness_power = 4
brightness_power = 1
brightness_color = LIGHT_COLOR_INCANDESCENT_BULB
nightshift_range = 3
nightshift_power = 0.5
// For 'floor lamps' in outdoor use and such
/obj/item/weapon/light/bulb/large
name = "large light bulb"
brightness_range = 7
brightness_power = 1.5
nightshift_range = 4
nightshift_power = 0.75
/obj/item/weapon/light/throw_impact(atom/hit_atom)
..()
shatter()
+32
View File
@@ -17,3 +17,35 @@
//Vorestation addition, so large mobs stop looking stupid in front of lights.
if (dir == SOUTH) // Lights are backwards, SOUTH lights face north (they are on south wall)
layer = ABOVE_MOB_LAYER
// Wall tube lights
/obj/item/weapon/light/tube
brightness_range = 6
brightness_power = 1
nightshift_range = 6
nightshift_power = 0.45
// Big tubes, unused I think
/obj/item/weapon/light/tube/large
brightness_range = 8
brightness_power = 2
nightshift_range = 8
nightshift_power = 1
// Small wall lights
/obj/item/weapon/light/bulb
brightness_range = 4
brightness_power = 1
nightshift_range = 4
nightshift_power = 0.45
// Floor lamps
/obj/item/weapon/light/bulb/large
brightness_range = 6
brightness_power = 1
nightshift_range = 6
nightshift_power = 0.45
+3 -3
View File
@@ -138,13 +138,13 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/proc/update_icons()
overlays.Cut()
cut_overlays()
if(P)
overlays += image('icons/obj/singularity.dmi', "ptank")
add_overlay("ptank")
if(stat & (NOPOWER|BROKEN))
return
if(active)
overlays += image('icons/obj/singularity.dmi', "on")
add_overlay("on")
/obj/machinery/power/rad_collector/proc/toggle_power()
@@ -169,6 +169,7 @@
disconnect_from_network()
if(2)
to_chat(user, "<span class='warning'>\The [src] needs to be unwelded from the floor.</span>")
update_icon() // VOREStation Add
return
if(istype(W, /obj/item/weapon/weldingtool))
@@ -205,6 +206,7 @@
disconnect_from_network()
else
to_chat(user, "<span class='warning'>You need more welding fuel to complete this task.</span>")
update_icon() // VOREStation Add
return
if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL)
@@ -233,6 +235,7 @@
if(src.allowed(user))
src.locked = !src.locked
to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]")
update_icon() // VOREStation Add
else
to_chat(user, "<span class='warning'>Access denied.</span>")
return
@@ -0,0 +1,37 @@
/obj/machinery/power/emitter
icon = 'icons/obj/singularity_vr.dmi' // New emitter sprite
var/previous_state = 0
/obj/machinery/power/emitter/Initialize()
. = ..()
previous_state = state
/obj/machinery/power/emitter/update_icon()
cut_overlays()
icon_state = "emitter[state]"
if (state != previous_state)
flick("emitterflick-[previous_state][state]",src)
previous_state = state
if(powered && powernet && avail(active_power_usage) && active)
var/image/emitterbeam = image(icon,"emitter-beam")
emitterbeam.plane = PLANE_LIGHTING_ABOVE
add_overlay(emitterbeam)
if(locked)
var/image/emitterlock = image(icon,"emitter-lock")
emitterlock.plane = PLANE_LIGHTING_ABOVE
add_overlay(emitterlock)
// The old emitter sprite
/obj/machinery/power/emitter/antique
name = "antique emitter"
desc = "An old fashioned heavy duty industrial laser."
icon_state = "emitter"
/obj/machinery/power/emitter/antique/update_icon()
if(powered && powernet && avail(active_power_usage) && active)
icon_state = "emitter_+a"
else
icon_state = "emitter"
@@ -38,19 +38,19 @@ field_generator power level display
/obj/machinery/field_generator/update_icon()
overlays.Cut()
cut_overlays()
if(!active)
if(warming_up)
overlays += "+a[warming_up]"
add_overlay("+a[warming_up]")
if(fields.len)
overlays += "+on"
add_overlay("+on")
// Power level indicator
// Scale % power to % num_power_levels and truncate value
var/level = round(num_power_levels * power / field_generator_max_power)
// Clamp between 0 and num_power_levels for out of range power values
level = between(0, level, num_power_levels)
if(level)
overlays += "+p[level]"
add_overlay("+p[level]")
return
@@ -465,15 +465,15 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
move_self = 0
switch (current_size)
if(STAGE_ONE)
overlays += image('icons/obj/singularity.dmi',"chain_s1")
add_overlay(image('icons/obj/singularity.dmi',"chain_s1"))
if(STAGE_TWO)
overlays += image('icons/effects/96x96.dmi',"chain_s3")
add_overlay(image('icons/effects/96x96.dmi',"chain_s3"))
if(STAGE_THREE)
overlays += image('icons/effects/160x160.dmi',"chain_s5")
add_overlay(image('icons/effects/160x160.dmi',"chain_s5"))
if(STAGE_FOUR)
overlays += image('icons/effects/224x224.dmi',"chain_s7")
add_overlay(image('icons/effects/224x224.dmi',"chain_s7"))
if(STAGE_FIVE)
overlays += image('icons/effects/288x288.dmi',"chain_s9")
add_overlay(image('icons/effects/288x288.dmi',"chain_s9"))
/obj/singularity/proc/on_release()
chained = 0
+2 -2
View File
@@ -286,8 +286,8 @@
// Description: Allows us to use special icon overlay for critical SMESs
/obj/machinery/power/smes/buildable/update_icon()
if (failing)
overlays.Cut()
overlays += image('icons/obj/power.dmi', "smes-crit")
cut_overlays()
add_overlay("smes-crit")
else
..()
+7 -7
View File
@@ -88,11 +88,11 @@ GLOBAL_LIST_EMPTY(solars_list)
/obj/machinery/power/solar/update_icon()
..()
overlays.Cut()
cut_overlays()
if(stat & BROKEN)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
add_overlay("solar_panel-b")
else
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
add_overlay("solar_panel")
src.set_dir(angle2dir(adir))
return
@@ -367,16 +367,16 @@ GLOBAL_LIST_EMPTY(solars_list)
/obj/machinery/power/solar_control/update_icon()
if(stat & BROKEN)
icon_state = "broken"
overlays.Cut()
cut_overlays()
return
if(stat & NOPOWER)
icon_state = "c_unpowered"
overlays.Cut()
cut_overlays()
return
icon_state = "solar"
overlays.Cut()
cut_overlays()
if(cdir > -1)
overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir))
add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)))
return
/obj/machinery/power/solar_control/attack_hand(mob/user)
+7 -7
View File
@@ -150,7 +150,7 @@
return
if(!starter)
return
overlays.Cut()
cut_overlays()
rpm = 0.9* rpm + 0.1 * rpmtarget
var/datum/gas_mixture/environment = inturf.return_air()
@@ -172,13 +172,13 @@
rpmtarget = 0
if(rpm>50000)
overlays += image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER)
add_overlay(image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER))
else if(rpm>10000)
overlays += image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER)
add_overlay(image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER))
else if(rpm>2000)
overlays += image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER)
add_overlay(image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER))
else if(rpm>500)
overlays += image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER)
add_overlay(image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER))
//TODO: DEFERRED
@@ -248,7 +248,7 @@
return
if(!compressor.starter)
return
overlays.Cut()
cut_overlays()
// This is the power generation function. If anything is needed it's good to plot it in EXCEL before modifying
// the TURBGENQ and TURBGENG values
@@ -271,7 +271,7 @@
// If it works, put an overlay that it works!
if(lastgen > 100)
overlays += image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER)
add_overlay(image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER))
updateDialog()