mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-12 09:32:38 +01:00
298 lines
10 KiB
Plaintext
298 lines
10 KiB
Plaintext
//This might just be the file that finally breaks angriestibm.
|
|
//I just nilly willy directly use the cruiser object instead of sending packets.
|
|
|
|
/datum/computer/file/terminal_program/cruiser
|
|
name = "Cruiser"
|
|
size = 32
|
|
|
|
disposing()
|
|
..()
|
|
|
|
initialize()
|
|
src.print_text("Cruiser Control Assistant<br>Type \"help\" for commands.")
|
|
|
|
input_text(text)
|
|
if(..())
|
|
return
|
|
|
|
var/list/command_list = parse_string(text)
|
|
var/command = command_list[1]
|
|
command_list -= command_list[1] //Remove the command we are now processing.
|
|
|
|
var/obj/item/peripheral/cruiser/adapter = find_peripheral("SHIP_ADAPTER")
|
|
|
|
switch(lowertext(command))
|
|
if ("help")
|
|
src.print_text("Command List:<br> read_power - Gets power usage<br>power_ratios - Displays sub-system power ratios.<br>damage - Lists damaged systems<br>set_power (thrusters/weapons/shields) (percentage) - Adjusts how much power subsystems recieve.<br>reboot (turret_l/turret_r/engine/life_support/pod_weapons/pod_navigation/pod_defense) - Restores basic functions of the given system while degrading the ship.")
|
|
return
|
|
|
|
if ("reboot")
|
|
if(command_list.len >= 1)
|
|
//for(var/t in command_list)
|
|
// command_list -= t
|
|
var/t = command_list[1]
|
|
if(lowertext(t) in list("turret_l","turret_r","engine","life_support","pod_weapons","pod_navigation","pod_defense"))
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
newsignal.data["system"] = lowertext(t)
|
|
print_text("Rebooting [lowertext(t)]. Please wait ...")
|
|
src.peripheral_command("reboot", newsignal, "\ref[adapter]")
|
|
else
|
|
print_text("Unknown system: [lowertext(t)]")
|
|
|
|
if ("set_power","spwr")
|
|
if(command_list.len == 2)
|
|
var/system = command_list[1]
|
|
var/percentage = command_list[2]
|
|
|
|
if(lowertext(system) != "thrusters" && lowertext(system) != "weapons" && lowertext(system) != "shields")
|
|
print_text("Unknown sub-system: [system]")
|
|
return
|
|
if(!text2num(percentage))
|
|
print_text("Invalid setting: [percentage]")
|
|
return
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
newsignal.data["system"] = system
|
|
newsignal.data["percentage"] = percentage
|
|
|
|
src.peripheral_command("set_power", newsignal, "\ref[adapter]")
|
|
else
|
|
print_text("Usage: set_power (thrusters/weapons/shields) (percentage)")
|
|
|
|
if ("power_ratios", "p%", "pwrr")
|
|
src.peripheral_command("power_ratios", null, "\ref[adapter]")
|
|
|
|
if ("read_power", "power", "pwr")
|
|
src.peripheral_command("read_power", null, "\ref[adapter]")
|
|
|
|
if ("damage", "dmg")
|
|
src.peripheral_command("get_damage", null, "\ref[adapter]")
|
|
|
|
if ("quit","exit")
|
|
src.master.temp = ""
|
|
print_text("Now quitting...")
|
|
src.master.unload_program(src)
|
|
return
|
|
|
|
else
|
|
src.print_text("Unknown command.")
|
|
|
|
receive_command(obj/source, command, datum/signal/signal)
|
|
if ((..()) || (!signal))
|
|
return
|
|
if (command == "read_power")
|
|
var/list/recieved = params2list(signal.data["usage_breakdown"])
|
|
src.print_text("Power: [signal.data["used_last"]]Pu / [signal.data["prod_last"]]Pu")
|
|
for(var/X in recieved)
|
|
src.print_text("--[X]: [recieved[X]]")
|
|
src.print_text("<br>")
|
|
return
|
|
|
|
else if (command == "get_damage")
|
|
src.print_text("Number of damaged systems: [signal.data["damage_num"]]")
|
|
src.print_text("Total damage: [signal.data["damage_total"]]")
|
|
src.print_text("Ship degradation: [signal.data["degradation"]]%")
|
|
if(signal.data["damage_breakdown"])
|
|
src.print_text(signal.data["damage_breakdown"])
|
|
return
|
|
|
|
else if (command == "power_ratios")
|
|
src.print_text("Thrusters power: [signal.data["ratio_movement"]]%")
|
|
src.print_text("Weapons power: [signal.data["ratio_offense"]]%")
|
|
src.print_text("Shields power: [signal.data["ratio_defense"]]%")
|
|
return
|
|
else if (command == "set_power")
|
|
src.print_text("[signal.data["info"]]")
|
|
return
|
|
else if (command == "reboot")
|
|
src.print_text("[signal.data["info"]]")
|
|
return
|
|
|
|
/obj/machinery/computer3/generic/cruiser
|
|
name = "cruiser console"
|
|
icon_state = "cruiser"
|
|
base_icon_state = "cruiser"
|
|
setup_drive_size = 64
|
|
setup_frame_type = /obj/computer3frame/terminal
|
|
setup_starting_os = /datum/computer/file/terminal_program/os/main_os/no_login
|
|
setup_starting_peripheral1 = /obj/item/peripheral/cruiser
|
|
setup_starting_program = /datum/computer/file/terminal_program/cruiser
|
|
setup_idscan_path = null
|
|
|
|
power_change()
|
|
if(stat & BROKEN)
|
|
icon_state = src.base_icon_state
|
|
src.icon_state += "b"
|
|
light.disable()
|
|
else
|
|
icon_state = src.base_icon_state
|
|
stat &= ~NOPOWER
|
|
light.enable()
|
|
|
|
|
|
/obj/item/peripheral/cruiser
|
|
name = "cruiser interface module"
|
|
desc = "A computer interface card designed to interface with a small starcraft's main bus."
|
|
icon_state = "power_mod"
|
|
func_tag = "SHIP_ADAPTER"
|
|
var/obj/machinery/cruiser/cruiser
|
|
|
|
installed(var/obj/machinery/computer3/newhost)
|
|
if(..())
|
|
return 1
|
|
|
|
check_cruiser()
|
|
|
|
return 0
|
|
|
|
uninstalled()
|
|
src.cruiser = null
|
|
return 0
|
|
|
|
disposing()
|
|
uninstalled()
|
|
|
|
..()
|
|
receive_command(obj/source, command, datum/signal/signal)
|
|
if(..())
|
|
return 1
|
|
|
|
if(!src.check_cruiser())
|
|
return 1
|
|
|
|
switch (command)
|
|
if ("read_power")
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
newsignal.data["used_last"] = cruiser.power_used_last
|
|
newsignal.data["prod_last"] = cruiser.power_produced_last
|
|
|
|
var/usage_count_builder = ""
|
|
for(var/X in cruiser.powerUse)
|
|
var/decodeList = params2list(cruiser.powerUse[X])
|
|
|
|
usage_count_builder += "[X]=[decodeList[1]];"
|
|
|
|
if (usage_count_builder)
|
|
newsignal.data["usage_breakdown"] = usage_count_builder
|
|
|
|
spawn(4)
|
|
send_command("read_power", newsignal)
|
|
|
|
return newsignal
|
|
|
|
if ("get_damage")
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
var/dmg_total = 0
|
|
var/dmg_count = 0
|
|
|
|
var/damage_builder = ""
|
|
|
|
for(var/obj/machinery/cruiser_destroyable/D in cruiser.interior_area)
|
|
if(D.ignore || D.health == D.health_max) continue
|
|
damage_builder += "--[D.name]: [D.health]/[D.health_max]<br>"
|
|
dmg_count++
|
|
dmg_total += (D.health_max - D.health)
|
|
|
|
if (damage_builder)
|
|
newsignal.data["damage_breakdown"] = damage_builder
|
|
|
|
newsignal.data["damage_total"] = dmg_total
|
|
newsignal.data["damage_num"] = dmg_count
|
|
newsignal.data["degradation"] = cruiser.degradation
|
|
|
|
spawn(4)
|
|
send_command("get_damage", newsignal)
|
|
|
|
if ("power_ratios")
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
|
|
newsignal.data["ratio_movement"] = cruiser.power_movement
|
|
newsignal.data["ratio_defense"] = cruiser.power_defense
|
|
newsignal.data["ratio_offense"] = cruiser.power_offense
|
|
|
|
spawn(4)
|
|
send_command("power_ratios", newsignal)
|
|
|
|
return newsignal
|
|
|
|
if ("reboot")
|
|
var/system = signal.data["system"]
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
switch(system)
|
|
if("turret_l")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/left/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/left) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
if("turret_r")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/right/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/right) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
if("engine")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/engine/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/engine) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
if("life_support")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/life_support/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/life_support) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
if("pod_weapons")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_pod/security/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_pod/security) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
if("pod_navigation")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_pod/movement/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_pod/movement) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
if("pod_defense")
|
|
if(cruiser.interior_area)
|
|
var/obj/machinery/cruiser_destroyable/cruiser_pod/engineering/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_pod/engineering) in cruiser.interior_area)
|
|
if(istype(P))
|
|
newsignal.data["info"] = P.reboot()
|
|
cruiser.degradation = min(cruiser.degradation + 5, 100)
|
|
else
|
|
newsignal.data["info"] = "INTERNAL ERROR. UNKNOWN SYSTEM"
|
|
spawn(4)
|
|
send_command("reboot", newsignal)
|
|
return
|
|
|
|
if ("set_power")
|
|
var/percentage = text2num(signal.data["percentage"])
|
|
if(!percentage)
|
|
return
|
|
var/datum/signal/newsignal = get_free_signal()
|
|
|
|
percentage = min(max(percentage, 1), 500)
|
|
|
|
switch(lowertext(signal.data["system"]))
|
|
if("thrusters")
|
|
cruiser.power_movement = percentage
|
|
if("weapons")
|
|
cruiser.power_offense = percentage
|
|
if("shields")
|
|
cruiser.power_defense = percentage
|
|
|
|
newsignal.data["info"] = "Set [signal.data["system"]] to [percentage]%"
|
|
spawn(4)
|
|
send_command("set_power", newsignal)
|
|
|
|
else
|
|
return "Valid commands: read_power get_damage power_ratios set_power reboot"
|
|
|
|
//Return true if cruiser is valid/found.
|
|
proc/check_cruiser()
|
|
var/area/ship_interior/A = get_area(src.host)
|
|
if(istype(A))
|
|
cruiser = A.ship
|
|
return 1
|
|
return 0 |