//////////////////////////////////// ///// Rendering stats window /////// //////////////////////////////////// /obj/vehicle/sealed/mecha/proc/get_stats_html(mob/user) . = {" [name] data
[get_stats_part(user)]
[get_equipment_list()]

[get_commands()]
[get_equipment_menu()]
"} ///Returns the status of the mech. /obj/vehicle/sealed/mecha/proc/get_stats_part(mob/user) var/integrity = obj_integrity/max_integrity*100 var/cell_charge = get_charge() var/datum/gas_mixture/int_tank_air = 0 var/tank_pressure = 0 var/tank_temperature = 0 var/cabin_pressure = 0 if (internal_tank) int_tank_air = internal_tank.return_air() tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None" tank_temperature = internal_tank ? int_tank_air.return_temperature() : "Unknown" cabin_pressure = round(return_pressure(),0.01) . = {"[report_internal_damage()] [integrity<30?"DAMAGE LEVEL CRITICAL
":null] Integrity: [integrity]%
Power cell charge: [isnull(cell_charge)?"No power cell installed":"[cell.percent()]%"]
Air source: [internal_tank?"[use_internal_tank?"Internal Airtank":"Environment"]":"Environment"]
Airtank pressure: [internal_tank?"[tank_pressure]kPa":"N/A"]
Airtank temperature: [internal_tank?"[tank_temperature]°K|[tank_temperature - T0C]°C":"N/A"]
Cabin pressure: [internal_tank?"[cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa":"N/A"]
Cabin temperature: [internal_tank?"[return_temperature()]°K|[return_temperature() - T0C]°C":"N/A"]
[dna_lock?"DNA-locked:
[dna_lock] \[Reset\]
":""]
"} . += "[get_actions(user)]
" ///Returns HTML for mech actions. Ideally, this proc would be empty for the base mecha. Segmented for easy refactoring. /obj/vehicle/sealed/mecha/proc/get_actions(mob/user) . = "" . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_defense_mode) ? "Defense Mode: [defense_mode ? "Enabled" : "Disabled"]
" : ""]" . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_overload_mode) ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
" : ""]" . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_smoke) ? "Smoke Charges remaining: [smoke_charges]
" : ""]" . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_zoom) ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"]
" : ""]" . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_switch_damtype) ? "Damtype: [damtype]
" : ""]" . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_toggle_phasing) ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"]
" : ""]" ///HTML for internal damage. /obj/vehicle/sealed/mecha/proc/report_internal_damage() . = "" var/list/dam_reports = list( "[MECHA_INT_FIRE]" = "INTERNAL FIRE", "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" ) for(var/tflag in dam_reports) var/intdamflag = text2num(tflag) if(internal_damage & intdamflag) . += dam_reports[tflag] . += "
" if(return_pressure() > WARNING_HIGH_PRESSURE) . += "DANGEROUSLY HIGH CABIN PRESSURE
" ///HTML for list of equipment. /obj/vehicle/sealed/mecha/proc/get_equipment_list() //outputs mecha equipment list in html if(!LAZYLEN(equipment)) return . = "Equipment:
" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) . += "
[MT.get_equip_info()]
" . += "
" ///HTML for commands. /obj/vehicle/sealed/mecha/proc/get_commands() . = {"
Electronics
Permissions & Logging
"} /obj/vehicle/sealed/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu . = {"
Equipment
"} /obj/vehicle/sealed/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user) if(!id_card || !user) return . = {"

Following keycodes are present in this system:

"} for(var/a in operation_req_access) . += "[get_access_desc(a)] - Delete
" . += "

Following keycodes were detected on portable device:

" for(var/a in id_card.access) if(a in operation_req_access) continue var/a_name = get_access_desc(a) if(!a_name) continue //there's some strange access without a name . += "[a_name] - Add
" . +={"
Lock ID panel
(Warning! The ID upload panel can be unlocked only through Exosuit Interface.) "} user << browse(., "window=exosuit_add_access") onclose(user, "exosuit_add_access") /obj/vehicle/sealed/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user) if(!id_card || !user) return . = {" [(mecha_flags & ADDING_ACCESS_POSSIBLE)?"Edit operation keycodes":null] [(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"[(construction_state > MECHA_LOCKED) ? "Terminate" : "Initiate"] maintenance protocol":null] [(construction_state == MECHA_OPEN_HATCH) ?"--------------------
":null] [(construction_state == MECHA_OPEN_HATCH) ?"[cell?"Drop power cell":"No cell installed
"]":null] [(construction_state == MECHA_OPEN_HATCH) ?"[scanmod?"Drop scanning module":"No scanning module installed
"]":null] [(construction_state == MECHA_OPEN_HATCH) ?"[capacitor?"Drop capacitor":"No capacitor installed
"]":null] [(construction_state == MECHA_OPEN_HATCH) ?"--------------------
":null] [(construction_state > MECHA_LOCKED) ?"Set Cabin Air Pressure":null] "} user << browse(., "window=exosuit_maint_console") onclose(user, "exosuit_maint_console") ///////////////// ///// Topic ///// ///////////////// /obj/vehicle/sealed/mecha/Topic(href, href_list) ..() if(!usr) return if(href_list["close"]) return if(usr.incapacitated()) return if(in_range(src, usr)) //Start of ID requirements. if(href_list["id_card"]) var/obj/item/card/id/id_card id_card = locate(href_list["id_card"]) if(!istype(id_card)) return if(href_list["req_access"]) if(!(mecha_flags & ADDING_ACCESS_POSSIBLE)) return output_access_dialog(id_card,usr) return if(href_list["maint_access"]) if(!(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)) return if(construction_state == MECHA_LOCKED) construction_state = MECHA_SECURE_BOLTS to_chat(usr, "The securing bolts are now exposed.") else if(construction_state == MECHA_SECURE_BOLTS) construction_state = MECHA_LOCKED to_chat(usr, "The securing bolts are now hidden.") output_maintenance_dialog(id_card,usr) return if(href_list["drop_cell"]) if(construction_state == MECHA_OPEN_HATCH) cell.forceMove(get_turf(src)) cell = null output_maintenance_dialog(id_card,usr) return if(href_list["drop_scanmod"]) if(construction_state == MECHA_OPEN_HATCH) scanmod.forceMove(get_turf(src)) scanmod = null output_maintenance_dialog(id_card,usr) return if(href_list["drop_cap"]) if(construction_state == MECHA_OPEN_HATCH) capacitor.forceMove(get_turf(src)) capacitor = null output_maintenance_dialog(id_card,usr) return if(href_list["add_req_access"]) if(!(mecha_flags & ADDING_ACCESS_POSSIBLE)) return operation_req_access += text2num(href_list["add_req_access"]) output_access_dialog(id_card,usr) return if(href_list["del_req_access"]) if(!(mecha_flags & ADDING_ACCESS_POSSIBLE)) return operation_req_access -= text2num(href_list["del_req_access"]) output_access_dialog(id_card, usr) return return //Here end everything requiring an ID. //Here ID access stuff goes to die. if(href_list["finish_req_access"]) mecha_flags &= ~ADDING_ACCESS_POSSIBLE usr << browse(null,"window=exosuit_add_access") return //Set pressure. if(href_list["set_internal_tank_valve"] && construction_state) var/new_pressure = input(usr,"Input new output pressure","Pressure setting",internal_tank_valve) as num|null if(isnull(new_pressure) || usr.incapacitated() || !construction_state) return internal_tank_valve = new_pressure to_chat(usr, "The internal pressure valve has been set to [internal_tank_valve]kPa.") return //Start of all internal topic stuff. if(!locate(usr) in occupants) return if(href_list["update_content"]) send_byjax(usr,"exosuit.browser","content", get_stats_part()) return //Selects the mech equipment/weapon. if(href_list["select_equip"]) var/obj/item/mecha_parts/mecha_equipment/equip = locate(href_list["select_equip"]) in src if(!equip || !equip.selectable) return selected = equip to_chat(occupants, "[icon2html(src, occupants)]You switch to [equip].") visible_message("[src] raises [equip].") send_byjax(usr, "exosuit.browser", "eq_list", get_equipment_list()) return //Toggles radio broadcasting if(href_list["rmictoggle"]) radio.broadcasting = !radio.broadcasting send_byjax(usr,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) return //Toggles radio listening if(href_list["rspktoggle"]) radio.listening = !radio.listening send_byjax(usr,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) return //Changes radio freqency. if(href_list["rfreq"]) var/new_frequency = radio.frequency + text2num(href_list["rfreq"]) radio.set_frequency(sanitize_frequency(new_frequency, radio.freerange)) send_byjax(usr,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") return //Changes the exosuit name. if(href_list["change_name"]) var/userinput = stripped_input(usr, "Choose a new exosuit name.", "Rename exosuit", "", MAX_NAME_LEN) if(!userinput || !locate(usr) in occupants || usr.incapacitated()) return name = userinput return //Toggles ID upload. if (href_list["toggle_id_upload"]) mecha_flags ^= ADDING_ACCESS_POSSIBLE send_byjax(usr,"exosuit.browser","t_id_upload","[(mecha_flags & ADDING_ACCESS_POSSIBLE)?"L":"Unl"]ock ID upload panel") return //Toggles main access. if(href_list["toggle_maint_access"]) if(construction_state) to_chat(occupants, "[icon2html(src, occupants)]Maintenance protocols in effect") return mecha_flags ^= ADDING_MAINT_ACCESS_POSSIBLE send_byjax(usr,"exosuit.browser","t_maint_access","[(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"Forbid":"Permit"] maintenance protocols") return //Toggles connection port. if (href_list["toggle_port_connection"]) if(internal_tank.connected_port) if(internal_tank.disconnect()) to_chat(occupants, "[icon2html(src, occupants)]Disconnected from the air system port.") log_message("Disconnected from gas port.", LOG_MECHA) else to_chat(occupants, "[icon2html(src, occupants)]Unable to disconnect from the air system port!") return else var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate() in loc if(internal_tank.connect(possible_port)) to_chat(occupants, "[icon2html(src, occupants)]Connected to the air system port.") log_message("Connected to gas port.", LOG_MECHA) else to_chat(occupants, "[icon2html(src, occupants)]Unable to connect with air system port!") return send_byjax(occupants,"exosuit.browser","t_port_connection","[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port") return //Turns on the DNA lock if(href_list["dna_lock"]) var/mob/living/carbon/user = usr if(!istype(user) || !user.dna) to_chat(user, "[icon2html(src, occupants)]You can't create a DNA lock with no DNA!.") return dna_lock = user.dna.unique_enzymes to_chat(user, "[icon2html(src, occupants)]You feel a prick as the needle takes your DNA sample.") return //Resets the DNA lock if(href_list["reset_dna"]) dna_lock = null return //Repairs internal damage if(href_list["repair_int_control_lost"]) to_chat(occupants, "[icon2html(src, occupants)]Recalibrating coordination system...") log_message("Recalibration of coordination system started.", LOG_MECHA) addtimer(CALLBACK(src, PROC_REF(stationary_repair), loc), 100, TIMER_UNIQUE) ///Repairs internal damage if the mech hasn't moved. /obj/vehicle/sealed/mecha/proc/stationary_repair(location) if(location == loc) clearInternalDamage(MECHA_INT_CONTROL_LOST) to_chat(occupants, "[icon2html(src, occupants)]Recalibration successful.") log_message("Recalibration of coordination system finished with 0 errors.", LOG_MECHA) else to_chat(occupants, "[icon2html(src, occupants)]Recalibration failed!") log_message("Recalibration of coordination system failed with 1 error.", LOG_MECHA, color="red")