Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into hijackbackup
This commit is contained in:
+37
-45
@@ -56,6 +56,8 @@
|
||||
integrity_failure = 50
|
||||
var/damage_deflection = 10
|
||||
resistance_flags = FIRE_PROOF
|
||||
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50)
|
||||
req_access = list(ACCESS_ENGINE_EQUIP)
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON
|
||||
|
||||
var/lon_range = 1.5
|
||||
@@ -150,12 +152,40 @@
|
||||
if(terminal)
|
||||
terminal.connect_to_network()
|
||||
|
||||
/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0)
|
||||
if (!req_access)
|
||||
req_access = list(ACCESS_ENGINE_EQUIP)
|
||||
if (!armor)
|
||||
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50)
|
||||
..()
|
||||
/obj/machinery/power/apc/Initialize(mapload, ndir, building = FALSE)
|
||||
. = ..()
|
||||
var/area/A = get_base_area(src)
|
||||
if(!building)
|
||||
has_electronics = APC_ELECTRONICS_SECURED
|
||||
// is starting with a power cell installed, create it and set its charge level
|
||||
if(cell_type)
|
||||
cell = new cell_type
|
||||
cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value)
|
||||
|
||||
//if area isn't specified use current
|
||||
if(areastring)
|
||||
area = get_area_instance_from_text(areastring)
|
||||
if(!area)
|
||||
area = A
|
||||
stack_trace("Bad areastring path for [src], [src.areastring]")
|
||||
else if(isarea(A) && !areastring)
|
||||
area = A
|
||||
if(auto_name)
|
||||
name = "\improper [A.name] APC"
|
||||
update_icon()
|
||||
|
||||
make_terminal()
|
||||
update_nightshift_auth_requirement()
|
||||
|
||||
else
|
||||
area = A
|
||||
opened = APC_COVER_OPENED
|
||||
operating = FALSE
|
||||
name = "\improper [A.name] APC"
|
||||
stat |= MAINT
|
||||
update_icon()
|
||||
addtimer(CALLBACK(src, .proc/update), 5)
|
||||
|
||||
GLOB.apcs_list += src
|
||||
|
||||
wires = new /datum/wires/apc(src)
|
||||
@@ -166,9 +196,6 @@
|
||||
src.tdir = dir // to fix Vars bug
|
||||
setDir(SOUTH)
|
||||
|
||||
if(auto_name)
|
||||
name = "\improper [get_area(src)] APC"
|
||||
|
||||
switch(tdir)
|
||||
if(NORTH)
|
||||
pixel_y = 23
|
||||
@@ -178,14 +205,6 @@
|
||||
pixel_x = 24
|
||||
if(WEST)
|
||||
pixel_x = -25
|
||||
if (building)
|
||||
area = get_area(src)
|
||||
opened = APC_COVER_OPENED
|
||||
operating = FALSE
|
||||
name = "[area.name] APC"
|
||||
stat |= MAINT
|
||||
src.update_icon()
|
||||
addtimer(CALLBACK(src, .proc/update), 5)
|
||||
|
||||
/obj/machinery/power/apc/Destroy()
|
||||
GLOB.apcs_list -= src
|
||||
@@ -219,33 +238,6 @@
|
||||
terminal.setDir(tdir)
|
||||
terminal.master = src
|
||||
|
||||
/obj/machinery/power/apc/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!mapload)
|
||||
return
|
||||
has_electronics = APC_ELECTRONICS_SECURED
|
||||
// is starting with a power cell installed, create it and set its charge level
|
||||
if(cell_type)
|
||||
cell = new cell_type
|
||||
cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value)
|
||||
|
||||
var/area/A = src.loc.loc
|
||||
|
||||
//if area isn't specified use current
|
||||
if(areastring)
|
||||
src.area = get_area_instance_from_text(areastring)
|
||||
if(!src.area)
|
||||
src.area = A
|
||||
stack_trace("Bad areastring path for [src], [src.areastring]")
|
||||
else if(isarea(A) && src.areastring == null)
|
||||
src.area = A
|
||||
update_icon()
|
||||
|
||||
make_terminal()
|
||||
update_nightshift_auth_requirement()
|
||||
|
||||
addtimer(CALLBACK(src, .proc/update), 5)
|
||||
|
||||
/obj/machinery/power/apc/examine(mob/user)
|
||||
. = ..()
|
||||
if(stat & BROKEN)
|
||||
@@ -1504,7 +1496,7 @@
|
||||
return
|
||||
for(var/A in GLOB.ai_list)
|
||||
var/mob/living/silicon/ai/I = A
|
||||
if(get_area(I) == area)
|
||||
if(get_base_area(I) == area)
|
||||
return
|
||||
|
||||
failure_timer = max(failure_timer, round(duration))
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
cut_overlays()
|
||||
switch(status) // set icon_states
|
||||
if(LIGHT_OK)
|
||||
var/area/A = get_area(src)
|
||||
var/area/A = get_base_area(src)
|
||||
if(emergency_mode || (A && A.fire))
|
||||
icon_state = "[base_state]_emergency"
|
||||
else
|
||||
@@ -327,7 +327,7 @@
|
||||
var/CO = bulb_colour
|
||||
if(color)
|
||||
CO = color
|
||||
var/area/A = get_area(src)
|
||||
var/area/A = get_base_area(src)
|
||||
if (A && A.fire)
|
||||
CO = bulb_emergency_colour
|
||||
else if (hijacked)
|
||||
|
||||
@@ -382,6 +382,7 @@
|
||||
return null
|
||||
|
||||
/area/proc/get_apc()
|
||||
var/target = base_area ? base_area : src
|
||||
for(var/obj/machinery/power/apc/APC in GLOB.apcs_list)
|
||||
if(APC.area == src)
|
||||
if(APC.area == target)
|
||||
return APC
|
||||
@@ -30,7 +30,7 @@
|
||||
var/locked = FALSE
|
||||
var/allow_switch_interact = TRUE
|
||||
|
||||
var/projectile_type = /obj/item/projectile/beam/emitter
|
||||
var/projectile_type = /obj/item/projectile/beam/emitter/hitscan
|
||||
var/projectile_sound = 'sound/weapons/emitter.ogg'
|
||||
var/datum/effect_system/spark_spread/sparks
|
||||
|
||||
|
||||
+27
-21
@@ -19,6 +19,8 @@
|
||||
var/ndir = SOUTH // target dir
|
||||
var/turn_angle = 0
|
||||
var/obj/machinery/power/solar_control/control = null
|
||||
var/obj/item/solar_assembly/assembly
|
||||
var/efficiency = 1
|
||||
|
||||
/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
|
||||
. = ..()
|
||||
@@ -45,14 +47,13 @@
|
||||
|
||||
/obj/machinery/power/solar/proc/Make(obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
S = new /obj/item/solar_assembly(src)
|
||||
S.glass_type = /obj/item/stack/sheet/glass
|
||||
S = new /obj/item/solar_assembly
|
||||
S.glass_type = new /obj/item/stack/sheet/glass(null, 2)
|
||||
S.anchored = TRUE
|
||||
else
|
||||
S.forceMove(src)
|
||||
if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass
|
||||
max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
|
||||
obj_integrity = max_integrity
|
||||
S.moveToNullspace()
|
||||
S.glass_type.on_solar_construction(src)
|
||||
obj_integrity = max_integrity
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I)
|
||||
@@ -85,14 +86,14 @@
|
||||
/obj/machinery/power/solar/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(disassembled)
|
||||
var/obj/item/solar_assembly/S = locate() in src
|
||||
if(S)
|
||||
S.forceMove(loc)
|
||||
S.give_glass(stat & BROKEN)
|
||||
if(assembly)
|
||||
assembly.forceMove(loc)
|
||||
assembly.give_glass(stat & BROKEN)
|
||||
else
|
||||
playsound(src, "shatter", 70, 1)
|
||||
new /obj/item/shard(src.loc)
|
||||
new /obj/item/shard(src.loc)
|
||||
var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard
|
||||
new shard(loc)
|
||||
new shard(loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -131,7 +132,7 @@
|
||||
if(powernet == control.powernet)//check if the panel is still connected to the computer
|
||||
if(obscured) //get no light from the sun, so don't generate power
|
||||
return
|
||||
var/sgen = SOLARGENRATE * sunfrac
|
||||
var/sgen = SOLARGENRATE * sunfrac * efficiency
|
||||
add_avail(sgen)
|
||||
control.gen += sgen
|
||||
else //if we're no longer on the same powernet, remove from control computer
|
||||
@@ -186,19 +187,23 @@
|
||||
w_class = WEIGHT_CLASS_BULKY // Pretty big!
|
||||
anchored = FALSE
|
||||
var/tracker = 0
|
||||
var/glass_type = null
|
||||
var/obj/item/stack/sheet/glass_type
|
||||
var/static/list/allowed_sheets = typecacheof(list(/obj/item/stack/sheet/glass, /obj/item/stack/sheet/rglass,
|
||||
/obj/item/stack/sheet/plasmaglass, /obj/item/stack/sheet/plasmarglass,
|
||||
/obj/item/stack/sheet/titaniumglass, /obj/item/stack/sheet/plastitaniumglass))
|
||||
|
||||
// Give back the glass type we were supplied with
|
||||
/obj/item/solar_assembly/proc/give_glass(device_broken)
|
||||
var/atom/Tsec = drop_location()
|
||||
if(device_broken)
|
||||
new /obj/item/shard(Tsec)
|
||||
new /obj/item/shard(Tsec)
|
||||
var/shard = glass_type ? glass_type.shard_type : /obj/item/shard
|
||||
if(shard)
|
||||
new shard(Tsec)
|
||||
new shard(Tsec)
|
||||
else if(glass_type)
|
||||
new glass_type(Tsec, 2)
|
||||
forceMove(glass_type, Tsec)
|
||||
glass_type = null
|
||||
|
||||
|
||||
/obj/item/solar_assembly/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench) && isturf(loc))
|
||||
if(isinspace())
|
||||
@@ -213,13 +218,14 @@
|
||||
W.play_tool_sound(src, 75)
|
||||
return 1
|
||||
|
||||
if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass))
|
||||
if(is_type_in_typecache(W, allowed_sheets))
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>You need to secure the assembly before you can add glass.</span>")
|
||||
return
|
||||
var/obj/item/stack/sheet/S = W
|
||||
if(S.use(2))
|
||||
glass_type = W.type
|
||||
var/obj/item/stack/sheet/G = S.change_stack(null, 2)
|
||||
if(G)
|
||||
glass_type = G
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
user.visible_message("[user] places the glass on the solar assembly.", "<span class='notice'>You place the glass on the solar assembly.</span>")
|
||||
if(tracker)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
var/id = 0
|
||||
var/sun_angle = 0 // sun angle as set by sun datum
|
||||
var/obj/machinery/power/solar_control/control = null
|
||||
var/obj/item/solar_assembly/assembly
|
||||
|
||||
/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S)
|
||||
. = ..()
|
||||
@@ -42,11 +43,12 @@
|
||||
|
||||
/obj/machinery/power/tracker/proc/Make(obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
S = new /obj/item/solar_assembly(src)
|
||||
S.glass_type = /obj/item/stack/sheet/glass
|
||||
S.tracker = 1
|
||||
S = new /obj/item/solar_assembly
|
||||
S.glass_type = new /obj/item/stack/sheet/glass(null, 2)
|
||||
S.tracker = TRUE
|
||||
S.anchored = TRUE
|
||||
S.forceMove(src)
|
||||
else
|
||||
S.moveToNullspace()
|
||||
update_icon()
|
||||
|
||||
//updates the tracker icon and the facing angle for the control computer
|
||||
@@ -77,14 +79,14 @@
|
||||
/obj/machinery/power/solar/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(disassembled)
|
||||
var/obj/item/solar_assembly/S = locate() in src
|
||||
if(S)
|
||||
S.forceMove(loc)
|
||||
S.give_glass(stat & BROKEN)
|
||||
if(assembly)
|
||||
assembly.forceMove(loc)
|
||||
assembly.give_glass(stat & BROKEN)
|
||||
else
|
||||
playsound(src, "shatter", 70, 1)
|
||||
new /obj/item/shard(src.loc)
|
||||
new /obj/item/shard(src.loc)
|
||||
var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard
|
||||
new shard(loc)
|
||||
new shard(loc)
|
||||
qdel(src)
|
||||
|
||||
// Tracker Electronic
|
||||
|
||||
Reference in New Issue
Block a user