mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
Ported TG's mechbay. Functional. Still can't make/break mechbay floors. No nanoUI yet. Unsure what the effects of commenting that line in admin.dm is.
This commit is contained in:
+64
-213
@@ -2,9 +2,6 @@
|
||||
name = "Mech Bay Recharge Station"
|
||||
icon = 'icons/mecha/mech_bay.dmi'
|
||||
icon_state = "recharge_floor"
|
||||
var/obj/machinery/mech_bay_recharge_port/recharge_port
|
||||
var/obj/machinery/computer/mech_bay_power_console/recharge_console
|
||||
var/obj/mecha/recharging_mecha = null
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/airless
|
||||
icon_state = "recharge_floor_asteroid"
|
||||
@@ -12,82 +9,6 @@
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
|
||||
|
||||
///turf/simulated/floor/mech_bay_recharge_floor/BeforeChange() //I'm told this is a better thing to call this request by. Undefinied proc error though.
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/Destroy()
|
||||
if(recharge_console && recharge_console.recharge_floor == src)
|
||||
recharge_console.recharge_floor = null
|
||||
recharge_console = null
|
||||
if(recharge_port && recharge_port.recharge_floor == src)
|
||||
recharge_port.recharge_floor = null
|
||||
recharge_port = null
|
||||
recharging_mecha = null
|
||||
return ..()
|
||||
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob, params)
|
||||
if(!C || !user) // I don't know what these do, they're leftovers from floor.dm
|
||||
return 1
|
||||
if(..()) // Ditto
|
||||
return 1
|
||||
if(intact && istype(C, /obj/item/weapon/screwdriver)) //Can't be a crowbar, because otherwise the attackby() for floor.dm intercepts the call, I think
|
||||
to_chat(user, "<span class='danger'>You disassemble the mech bay recharge station.</span>")
|
||||
new /obj/item/stack/sheet/plasteel(src, 2)
|
||||
qdel() //calls the proc above that stops the machine from working - Not required with BeforeChange, but that isn't working.
|
||||
make_plating() //turns the floor back into uncovered plates
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 80, 1)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/Entered(var/obj/mecha/mecha, atom/OL, ignoreRest = 0)
|
||||
. = ..()
|
||||
if(istype(mecha))
|
||||
mecha.occupant_message("<b>Initializing power control devices.</b>")
|
||||
init_devices()
|
||||
if(recharge_console && recharge_port)
|
||||
recharging_mecha = mecha
|
||||
recharge_console.mecha_in(mecha)
|
||||
return
|
||||
else if(!recharge_console)
|
||||
mecha.occupant_message("<font color='red'>Control console not found. Terminating.</font>")
|
||||
else if(!recharge_port)
|
||||
mecha.occupant_message("<font color='red'>Power port not found. Terminating.</font>")
|
||||
return
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/Exited(atom)
|
||||
. = ..()
|
||||
if(atom == recharging_mecha)
|
||||
recharging_mecha = null
|
||||
if(recharge_console)
|
||||
recharge_console.mecha_out()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/proc/init_devices()
|
||||
if(!recharge_console)
|
||||
recharge_console = locate() in range(1,src)
|
||||
if(!recharge_port)
|
||||
recharge_port = locate() in get_step(src, WEST)
|
||||
|
||||
if(recharge_console)
|
||||
recharge_console.recharge_floor = src
|
||||
if(recharge_port)
|
||||
recharge_console.recharge_port = recharge_port
|
||||
if(recharge_port)
|
||||
recharge_port.recharge_floor = src
|
||||
if(recharge_console)
|
||||
recharge_port.recharge_console = recharge_console
|
||||
return
|
||||
|
||||
/* // temporary fix for broken icon until somebody gets around to make these player-buildable
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob)
|
||||
..()
|
||||
if(floor_type)
|
||||
icon_state = "recharge_floor"
|
||||
else
|
||||
icon_state = "support_lattice" */
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port
|
||||
name = "Mech Bay Power Port"
|
||||
density = 1
|
||||
@@ -95,9 +16,12 @@
|
||||
dir = EAST
|
||||
icon = 'icons/mecha/mech_bay.dmi'
|
||||
icon_state = "recharge_port"
|
||||
var/turf/simulated/floor/mech_bay_recharge_floor/recharge_floor
|
||||
var/obj/mecha/recharging_mecha
|
||||
var/obj/machinery/computer/mech_bay_power_console/recharge_console
|
||||
var/datum/global_iterator/mech_bay_recharger/pr_recharger
|
||||
var/max_charge = 50
|
||||
var/on = 0
|
||||
var/repairability = 0 //What's this? I don't think this is a thing on paradise
|
||||
var/turf/recharging_turf = null
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/New()
|
||||
..()
|
||||
@@ -110,8 +34,7 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
RefreshParts()
|
||||
|
||||
pr_recharger = new /datum/global_iterator/mech_bay_recharger(null,0)
|
||||
recharging_turf = get_step(loc, dir) // this is new. It picks the turf based on the direction the recharger is facing by the looks of it. Still needs to be a recharge_floor
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/upgraded/New()
|
||||
..()
|
||||
@@ -129,17 +52,7 @@
|
||||
var/MC
|
||||
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
|
||||
MC += C.rating
|
||||
if(pr_recharger)
|
||||
pr_recharger.max_charge = MC * 10
|
||||
if(recharge_console)
|
||||
recharge_console.voltage = MC * 10
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/Destroy()
|
||||
qdel(pr_recharger)
|
||||
pr_recharger = null
|
||||
recharge_console.recharge_port = null
|
||||
recharge_floor.recharge_port = null
|
||||
return ..()
|
||||
max_charge = MC * 25
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params)
|
||||
if(default_deconstruction_screwdriver(user, "recharge_port-o", "recharge_port", I))
|
||||
@@ -151,70 +64,49 @@
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
default_deconstruction_crowbar(I)
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/start_charge(var/obj/mecha/recharging_mecha)
|
||||
if(stat&(NOPOWER|BROKEN))
|
||||
recharging_mecha.occupant_message("<font color='red'>Power port not responding. Terminating.</font>")
|
||||
return 0
|
||||
else
|
||||
if(recharging_mecha.cell)
|
||||
recharging_mecha.occupant_message("Now charging...")
|
||||
pr_recharger.start(list(src,recharging_mecha))
|
||||
return 1
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/process()
|
||||
if(stat & NOPOWER || !recharge_console)
|
||||
return
|
||||
if(!recharging_mecha)
|
||||
recharging_mecha = locate(/obj/mecha) in recharging_turf
|
||||
if(recharging_mecha)
|
||||
recharge_console.update_icon()
|
||||
if(recharging_mecha && recharging_mecha.cell)
|
||||
if(recharging_mecha.cell.charge < recharging_mecha.cell.maxcharge)
|
||||
var/delta = min(max_charge, recharging_mecha.cell.maxcharge - recharging_mecha.cell.charge)
|
||||
recharging_mecha.give_power(delta)
|
||||
use_power(delta*150)
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/stop_charge()
|
||||
if(recharge_console && !recharge_console.stat)
|
||||
update_icon()
|
||||
pr_recharger.stop()
|
||||
return
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/active()
|
||||
if(pr_recharger.active())
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
recharge_console.update_icon()
|
||||
if(recharging_mecha.loc != recharging_turf)
|
||||
recharging_mecha = null
|
||||
recharge_console.update_icon()
|
||||
return //This was missing... Is it not needed? Appeared in the original, but not in the port. Added it back in, to be safe.
|
||||
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/power_change()
|
||||
if(powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
stat |= NOPOWER
|
||||
pr_recharger.stop()
|
||||
return
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/set_voltage(new_voltage)
|
||||
if(new_voltage && isnum(new_voltage))
|
||||
pr_recharger.max_charge = new_voltage
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/datum/global_iterator/mech_bay_recharger
|
||||
delay = 20
|
||||
var/max_charge = 50
|
||||
check_for_null = 0 //since port.stop_charge() must be called. The checks are made in process()
|
||||
|
||||
/datum/global_iterator/mech_bay_recharger/process(var/obj/machinery/mech_bay_recharge_port/port, var/obj/mecha/mecha)
|
||||
if(!port)
|
||||
return 0
|
||||
if(mecha && mecha in port.recharge_floor)
|
||||
if(!mecha.cell)
|
||||
return
|
||||
var/delta = min(max_charge, mecha.cell.maxcharge - mecha.cell.charge)
|
||||
if(delta>0)
|
||||
mecha.give_power(delta)
|
||||
port.use_power(delta*150)
|
||||
/obj/machinery/computer/mech_bay_power_console/proc/reconnect()
|
||||
if(recharge_port)
|
||||
return
|
||||
recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in range(1)
|
||||
if(!recharge_port )
|
||||
for(var/D in cardinal)
|
||||
var/turf/A = get_step(src, D)
|
||||
A = get_step(A, D)
|
||||
recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in A
|
||||
if(recharge_port)
|
||||
break
|
||||
if(recharge_port)
|
||||
if(!recharge_port.recharge_console)
|
||||
recharge_port.recharge_console = src
|
||||
else
|
||||
mecha.occupant_message("<font color='blue'><b>Fully charged.</b></font>")
|
||||
port.stop_charge()
|
||||
else
|
||||
port.stop_charge()
|
||||
return
|
||||
recharge_port = null
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console
|
||||
name = "mech bay power control console"
|
||||
@@ -225,82 +117,35 @@
|
||||
icon_screen = "recharge_comp"
|
||||
light_color = LIGHT_COLOR_FADEDPURPLE
|
||||
circuit = /obj/item/weapon/circuitboard/mech_bay_power_console
|
||||
var/autostart = 1
|
||||
var/voltage = 50
|
||||
var/turf/simulated/floor/mech_bay_recharge_floor/recharge_floor
|
||||
var/obj/machinery/mech_bay_recharge_port/recharge_port
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/Destroy()
|
||||
recharge_port.recharge_console = null
|
||||
recharge_floor.recharge_console = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/proc/mecha_in(var/obj/mecha/mecha)
|
||||
if(stat&(NOPOWER|BROKEN))
|
||||
mecha.occupant_message("<font color='red'>Control console not responding. Terminating...</font>")
|
||||
return
|
||||
if(recharge_port && autostart)
|
||||
var/answer = recharge_port.start_charge(mecha)
|
||||
if(answer)
|
||||
recharge_port.set_voltage(voltage)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/proc/mecha_out()
|
||||
if(recharge_port)
|
||||
recharge_port.stop_charge()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/power_change()
|
||||
..()
|
||||
if(stat & BROKEN)
|
||||
update_icon()
|
||||
if(recharge_port)
|
||||
recharge_port.stop_charge()
|
||||
else if(powered())
|
||||
update_icon()
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
update_icon()
|
||||
stat |= NOPOWER
|
||||
if(recharge_port)
|
||||
recharge_port.stop_charge()
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/set_broken()
|
||||
..()
|
||||
if(recharge_port)
|
||||
recharge_port.stop_charge()
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/update_icon()
|
||||
if(!recharge_floor || !recharge_floor.recharging_mecha || !recharge_floor.recharging_mecha.cell || !(recharge_floor.recharging_mecha.cell.charge < recharge_floor.recharging_mecha.cell.maxcharge))
|
||||
if(!recharge_port || !recharge_port.recharging_mecha || !recharge_port.recharging_mecha.cell || !(recharge_port.recharging_mecha.cell.charge < recharge_port.recharging_mecha.cell.maxcharge) || stat & (NOPOWER|BROKEN))
|
||||
icon_screen = "recharge_comp"
|
||||
else
|
||||
icon_screen = "recharge_comp_on"
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(!recharge_floor || !recharge_port)
|
||||
var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src)
|
||||
if(F)
|
||||
F.init_devices()
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/list/data = list()
|
||||
data["has_floor"] = recharge_floor
|
||||
data["has_port"] = recharge_port
|
||||
if(recharge_floor && recharge_floor.recharging_mecha && recharge_floor.recharging_mecha.cell)
|
||||
data["has_mech"] = 1
|
||||
data["mecha_name"] = recharge_floor.recharging_mecha || "None"
|
||||
data["mecha_charge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.charge
|
||||
data["mecha_maxcharge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.maxcharge
|
||||
data["mecha_charge_percentage"] = isnull(recharge_floor.recharging_mecha) ? 0 : round(recharge_floor.recharging_mecha.cell.percent())
|
||||
else
|
||||
data["has_mech"] = 0
|
||||
if(recharge_port && !qdeleted(recharge_port))
|
||||
data["recharge_port"] = list("mech" = null)
|
||||
if(recharge_port.recharging_mecha && !qdeleted(recharge_port.recharging_mecha))
|
||||
data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mecha.health, "maxhealth" = initial(recharge_port.recharging_mecha.health), "cell" = null)
|
||||
if(recharge_port.recharging_mecha.cell && !qdeleted(recharge_port.recharging_mecha.cell))
|
||||
data["recharge_port"]["mech"]["cell"] = list(
|
||||
"critfail" = recharge_port.recharging_mecha.cell.crit_fail,
|
||||
"charge" = recharge_port.recharging_mecha.cell.charge,
|
||||
"maxcharge" = recharge_port.recharging_mecha.cell.maxcharge
|
||||
)
|
||||
/* Need to update the nanoUI for these new data types.
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
@@ -312,3 +157,9 @@
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
ui.set_auto_update(1)
|
||||
return data
|
||||
*/
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/initialize()
|
||||
reconnect()
|
||||
update_icon() //this the right place for it? Otherwise the computer sits there with a black screen.
|
||||
@@ -897,8 +897,8 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
|
||||
toArea = locate(/area/shuttle/gamma/space)
|
||||
fromArea.move_contents_to(toArea)
|
||||
|
||||
for(var/turf/simulated/floor/mech_bay_recharge_floor/F in toArea)
|
||||
F.init_devices()
|
||||
// for(var/turf/simulated/floor/mech_bay_recharge_floor/F in toArea)
|
||||
// F.init_devices()
|
||||
|
||||
for(var/obj/machinery/power/apc/A in toArea)
|
||||
A.init()
|
||||
|
||||
Reference in New Issue
Block a user