diff --git a/code/WorkInProgress/Cael_Aislinn/energy_field.dm b/code/WorkInProgress/Cael_Aislinn/energy_field.dm index 363b1ada26b..96a849f9472 100644 --- a/code/WorkInProgress/Cael_Aislinn/energy_field.dm +++ b/code/WorkInProgress/Cael_Aislinn/energy_field.dm @@ -1,41 +1,41 @@ - -//---------- actual energy field - -/obj/effect/energy_field - name = "energy field" - desc = "Impenetrable field of energy, capable of blocking anything as long as it's active." - icon = 'shielding.dmi' - icon_state = "shieldsparkles" - anchored = 1 - layer = 2.1 - density = 0 - invisibility = 2 - var/strength = 0 - var/obj/machinery/shield_gen/parent - var/stress = 0 - -/obj/effect/energy_field/ex_act(var/severity) - Stress(2) - //nothing - -/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj) - if(M) - walk(M,0) - -/obj/effect/energy_field/proc/Stress(var/severity) - strength -= severity - stress += severity - - //if we take too much damage, drop out - the generator will bring us back up if we have enough power - if(strength < 1) - invisibility = 2 - density = 0 - -/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - //Purpose: Determines if the object (or airflow) can pass this atom. - //Called by: Movement, airflow. - //Inputs: The moving atom (optional), target turf, "height" and air group - //Outputs: Boolean if can pass. - - //return (!density || !height || air_group) - return 0 + +//---------- actual energy field + +/obj/effect/energy_field + name = "energy field" + desc = "Impenetrable field of energy, capable of blocking anything as long as it's active." + icon = 'shielding.dmi' + icon_state = "shieldsparkles" + anchored = 1 + layer = 2.1 + density = 0 + invisibility = 2 + var/strength = 0 + var/obj/machinery/shield_gen/parent + var/stress = 0 + +/obj/effect/energy_field/ex_act(var/severity) + Stress(2) + //nothing + +/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj) + if(M) + walk(M,0) + +/obj/effect/energy_field/proc/Stress(var/severity) + strength -= severity + stress += severity + + //if we take too much damage, drop out - the generator will bring us back up if we have enough power + if(strength < 1) + invisibility = 2 + density = 0 + +/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) + //Purpose: Determines if the object (or airflow) can pass this atom. + //Called by: Movement, airflow. + //Inputs: The moving atom (optional), target turf, "height" and air group + //Outputs: Boolean if can pass. + + //return (!density || !height || air_group) + return 0 diff --git a/code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm index c4524ad94e0..9c84a7b2a79 100644 --- a/code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm +++ b/code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm @@ -1,64 +1,64 @@ - -//---------- external shield generator -//generates an energy field that loops around any built up area in space (is useless inside) halts movement and airflow, is blocked by walls, windows, airlocks etc - -/obj/machinery/shield_gen/external/New() - ..() - -/obj/machinery/shield_gen/external/get_shielded_turfs() - var - list - open = list(get_turf(src)) - closed = list() - - while(open.len) - for(var/turf/T in open) - for(var/turf/O in orange(1, T)) - if(get_dist(O,src) > field_radius) - continue - var/add_this_turf = 0 - if(istype(O,/turf/space)) - for(var/turf/simulated/G in orange(1, O)) - add_this_turf = 1 - break - for(var/obj/structure/S in orange(1, O)) - add_this_turf = 1 - break - for(var/obj/structure/S in O) - add_this_turf = 0 - break - - if(add_this_turf && !(O in open) && !(O in closed)) - open += O - open -= T - closed += T - - return closed - -/obj/machinery/shield_gen/external/process() - /*if(stat & (NOPOWER|BROKEN)) - return*/ - if(!active) - return - /*spawn(100) - power()*/ - /*if(src.active >= 1) - if(src.power == 0) - src.visible_message("\red The [src.name] shuts down due to lack of power!", \ - "You hear heavy droning fade out") - icon_state = "generator0" - src.active = 0*/ - ..() - -/obj/item/weapon/circuitboard/shield_gen/external - name = "Circuit Board (External Shield Generator)" - build_path = "/obj/machinery/shield_gen/external" - board_type = "machine" - origin_tech = "electromagnetic=3;engineering=2;power=1" - frame_desc = "Requires, 2 Cable Coil, 2 Nano Manipulator, 1 Advanced Matter Bin, 1 Console Screen and 1 High-Power Micro-Laser. " - req_components = list( - "/obj/item/weapon/cable_coil" = 2, - "/obj/item/weapon/stock_parts/manipulator/nano" = 2, - "/obj/item/weapon/stock_parts/matter_bin/adv" = 1, - "/obj/item/weapon/stock_parts/console_screen" = 1, - "/obj/item/weapon/stock_parts/micro_laser/high" = 1) + +//---------- external shield generator +//generates an energy field that loops around any built up area in space (is useless inside) halts movement and airflow, is blocked by walls, windows, airlocks etc + +/obj/machinery/shield_gen/external/New() + ..() + +/obj/machinery/shield_gen/external/get_shielded_turfs() + var + list + open = list(get_turf(src)) + closed = list() + + while(open.len) + for(var/turf/T in open) + for(var/turf/O in orange(1, T)) + if(get_dist(O,src) > field_radius) + continue + var/add_this_turf = 0 + if(istype(O,/turf/space)) + for(var/turf/simulated/G in orange(1, O)) + add_this_turf = 1 + break + for(var/obj/structure/S in orange(1, O)) + add_this_turf = 1 + break + for(var/obj/structure/S in O) + add_this_turf = 0 + break + + if(add_this_turf && !(O in open) && !(O in closed)) + open += O + open -= T + closed += T + + return closed + +/obj/machinery/shield_gen/external/process() + /*if(stat & (NOPOWER|BROKEN)) + return*/ + if(!active) + return + /*spawn(100) + power()*/ + /*if(src.active >= 1) + if(src.power == 0) + src.visible_message("\red The [src.name] shuts down due to lack of power!", \ + "You hear heavy droning fade out") + icon_state = "generator0" + src.active = 0*/ + ..() + +/obj/item/weapon/circuitboard/shield_gen/external + name = "Circuit Board (External Shield Generator)" + build_path = "/obj/machinery/shield_gen/external" + board_type = "machine" + origin_tech = "electromagnetic=3;engineering=2;power=1" + frame_desc = "Requires, 2 Cable Coil, 2 Nano Manipulator, 1 Advanced Matter Bin, 1 Console Screen and 1 High-Power Micro-Laser. " + req_components = list( + "/obj/item/weapon/cable_coil" = 2, + "/obj/item/weapon/stock_parts/manipulator/nano" = 2, + "/obj/item/weapon/stock_parts/matter_bin/adv" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/micro_laser/high" = 1) diff --git a/code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm b/code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm index 50896434d7f..16897b90335 100644 --- a/code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm +++ b/code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm @@ -1,156 +1,156 @@ - -//---------- shield capacitor -//pulls energy out of a power net and charges an adjacent generator - -/obj/machinery/shield_capacitor - name = "shield capacitor" - desc = "Machine that charges a shield generator." - icon = 'shielding.dmi' - icon_state = "capacitor" - var/active = 1 - density = 1 - anchored = 1 - var/obj/machinery/shield_gen/target_generator - var/stored_charge = 0 - var/time_since_fail = 100 - var/max_charge = 1000000 - var/max_charge_rate = 100000 - var/min_charge_rate = 0 - var/locked = 0 - // - use_power = 1 //0 use nothing - //1 use idle power - //2 use active power - idle_power_usage = 10 - active_power_usage = 100 - var/charge_rate = 100 - -/obj/machinery/shield_capacitor/New() - ..() - target_generator = locate() in get_step(src,dir) - if(target_generator && !target_generator.owned_capacitor) - target_generator.owned_capacitor = src - /*spawn(10) - check_powered()*/ - -/obj/machinery/shield_capacitor/power_change() - if(stat & BROKEN) - icon_state = "broke" - else - if( powered() ) - if (src.active) - icon_state = "capacitor" - else - icon_state = "capacitor" - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - src.icon_state = "capacitor" - stat |= NOPOWER - -/obj/machinery/shield_capacitor/process() - // - if(active) - use_power = 2 - if(stored_charge + charge_rate > max_charge) - active_power_usage = max_charge - stored_charge - else - active_power_usage = charge_rate - stored_charge += active_power_usage - else - use_power = 1 - - time_since_fail++ - if(stored_charge < active_power_usage * 1.5) - time_since_fail = 0 - // - updateDialog() - -/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user) - /*if(istype(W, /obj/item/weapon/wrench)) - if(active) - user << "Turn off the field generator first." - return - - else if(state == 0) - state = 1 - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "You secure the external reinforcing bolts to the floor." - src.anchored = 1 - return - - else if(state == 1) - state = 0 - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "You undo the external reinforcing bolts." - src.anchored = 0 - return*/ - - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) - src.locked = !src.locked - user << "Controls are now [src.locked ? "locked." : "unlocked."]" - else - user << "\red Access denied." - - else - src.add_fingerprint(user) - user << "\red You hit the [src.name] with your [W.name]!" - for(var/mob/M in viewers(src)) - if(M == user) continue - M.show_message("\red The [src.name] has been hit with the [W.name] by [user.name]!") - -/obj/machinery/shield_capacitor/attack_hand(mob/user as mob) - interact(user) - src.add_fingerprint(user) - -/obj/machinery/shield_capacitor/Topic(href, href_list[]) - ..() - if( href_list["close"] ) - usr << browse(null, "window=shield_capacitor") - usr.machine = null - return - if( href_list["toggle"] ) - active = !active - if(active) - use_power = 2 - else - use_power = 1 - if( href_list["charge_rate"] ) - charge_rate += text2num(href_list["charge_rate"]) - if(charge_rate > max_charge_rate) - charge_rate = max_charge_rate - else if(charge_rate < min_charge_rate) - charge_rate = min_charge_rate - // - updateDialog() - -/obj/machinery/shield_capacitor/proc/interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.machine = null - user << browse(null, "window=shield_capacitor") - return - var/t = "Shield Capacitor Control Console
" - t += "[target_generator ? "Shield generator connected." : "Unable to locate shield generator!"]
" - t += "This capacitor is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" - t += "[time_since_fail > 2 ? "Charging stable." : "Warning, low charge!"]
" - t += "Capacitor charge: [stored_charge] Watts ([100 * stored_charge/max_charge]%)
" - t += "Capacitor charge rate (approx): \[min\] \[--\] \[-\][charge_rate] Watts/sec \[+\] \[++\] \[max\]
" - t += "
" - t += "Close
" - user << browse(t, "window=shield_capacitor;size=500x800") - user.machine = src - -/obj/item/weapon/circuitboard/shield_capacitor - name = "Circuit Board (Shield Capacitor)" - build_path = "/obj/machinery/shield_capacitor" - board_type = "machine" - origin_tech = "electromagnetic=3;engineering=2;power=1" - frame_desc = "Requires, 2 Cable Coil, 2 Nano Manipulator, 1 Advanced Matter Bin, 1 Console Screen and 1 High-Power Micro-Laser. " - req_components = list( - "/obj/item/weapon/cable_coil" = 2, - "/obj/item/weapon/stock_parts/manipulator/nano" = 2, - "/obj/item/weapon/stock_parts/matter_bin/adv" = 1, - "/obj/item/weapon/stock_parts/console_screen" = 1, - "/obj/item/weapon/stock_parts/micro_laser/high" = 1) + +//---------- shield capacitor +//pulls energy out of a power net and charges an adjacent generator + +/obj/machinery/shield_capacitor + name = "shield capacitor" + desc = "Machine that charges a shield generator." + icon = 'shielding.dmi' + icon_state = "capacitor" + var/active = 1 + density = 1 + anchored = 1 + var/obj/machinery/shield_gen/target_generator + var/stored_charge = 0 + var/time_since_fail = 100 + var/max_charge = 1000000 + var/max_charge_rate = 100000 + var/min_charge_rate = 0 + var/locked = 0 + // + use_power = 1 //0 use nothing + //1 use idle power + //2 use active power + idle_power_usage = 10 + active_power_usage = 100 + var/charge_rate = 100 + +/obj/machinery/shield_capacitor/New() + ..() + target_generator = locate() in get_step(src,dir) + if(target_generator && !target_generator.owned_capacitor) + target_generator.owned_capacitor = src + /*spawn(10) + check_powered()*/ + +/obj/machinery/shield_capacitor/power_change() + if(stat & BROKEN) + icon_state = "broke" + else + if( powered() ) + if (src.active) + icon_state = "capacitor" + else + icon_state = "capacitor" + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "capacitor" + stat |= NOPOWER + +/obj/machinery/shield_capacitor/process() + // + if(active) + use_power = 2 + if(stored_charge + charge_rate > max_charge) + active_power_usage = max_charge - stored_charge + else + active_power_usage = charge_rate + stored_charge += active_power_usage + else + use_power = 1 + + time_since_fail++ + if(stored_charge < active_power_usage * 1.5) + time_since_fail = 0 + // + updateDialog() + +/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user) + /*if(istype(W, /obj/item/weapon/wrench)) + if(active) + user << "Turn off the field generator first." + return + + else if(state == 0) + state = 1 + playsound(src.loc, 'Ratchet.ogg', 75, 1) + user << "You secure the external reinforcing bolts to the floor." + src.anchored = 1 + return + + else if(state == 1) + state = 0 + playsound(src.loc, 'Ratchet.ogg', 75, 1) + user << "You undo the external reinforcing bolts." + src.anchored = 0 + return*/ + + if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if (src.allowed(user)) + src.locked = !src.locked + user << "Controls are now [src.locked ? "locked." : "unlocked."]" + else + user << "\red Access denied." + + else + src.add_fingerprint(user) + user << "\red You hit the [src.name] with your [W.name]!" + for(var/mob/M in viewers(src)) + if(M == user) continue + M.show_message("\red The [src.name] has been hit with the [W.name] by [user.name]!") + +/obj/machinery/shield_capacitor/attack_hand(mob/user as mob) + interact(user) + src.add_fingerprint(user) + +/obj/machinery/shield_capacitor/Topic(href, href_list[]) + ..() + if( href_list["close"] ) + usr << browse(null, "window=shield_capacitor") + usr.machine = null + return + if( href_list["toggle"] ) + active = !active + if(active) + use_power = 2 + else + use_power = 1 + if( href_list["charge_rate"] ) + charge_rate += text2num(href_list["charge_rate"]) + if(charge_rate > max_charge_rate) + charge_rate = max_charge_rate + else if(charge_rate < min_charge_rate) + charge_rate = min_charge_rate + // + updateDialog() + +/obj/machinery/shield_capacitor/proc/interact(mob/user) + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + if (!istype(user, /mob/living/silicon)) + user.machine = null + user << browse(null, "window=shield_capacitor") + return + var/t = "Shield Capacitor Control Console
" + t += "[target_generator ? "Shield generator connected." : "Unable to locate shield generator!"]
" + t += "This capacitor is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" + t += "[time_since_fail > 2 ? "Charging stable." : "Warning, low charge!"]
" + t += "Capacitor charge: [stored_charge] Watts ([100 * stored_charge/max_charge]%)
" + t += "Capacitor charge rate (approx): \[min\] \[--\] \[-\][charge_rate] Watts/sec \[+\] \[++\] \[max\]
" + t += "
" + t += "Close
" + user << browse(t, "window=shield_capacitor;size=500x800") + user.machine = src + +/obj/item/weapon/circuitboard/shield_capacitor + name = "Circuit Board (Shield Capacitor)" + build_path = "/obj/machinery/shield_capacitor" + board_type = "machine" + origin_tech = "electromagnetic=3;engineering=2;power=1" + frame_desc = "Requires, 2 Cable Coil, 2 Nano Manipulator, 1 Advanced Matter Bin, 1 Console Screen and 1 High-Power Micro-Laser. " + req_components = list( + "/obj/item/weapon/cable_coil" = 2, + "/obj/item/weapon/stock_parts/manipulator/nano" = 2, + "/obj/item/weapon/stock_parts/matter_bin/adv" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/micro_laser/high" = 1)