diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 0652c554b8a..573e09f347d 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -173,6 +173,10 @@ var/overclock_temp = 0 ///Temperature threshold at which actuators may start causing internal damage var/overclock_temp_danger = 15 + ///Whether the mech has an option to enable safe overclocking + var/overclock_safety_available = FALSE + ///Whether the overclocking turns off automatically when overheated + var/overclock_safety = FALSE //Bool for zoom on/off var/zoom_mode = FALSE @@ -520,6 +524,9 @@ overclock_temp = min(overclock_temp + seconds_per_tick, overclock_temp_danger * 2) if(overclock_temp < overclock_temp_danger) return + if(overclock_temp >= overclock_temp_danger && overclock_safety) + toggle_overclock(FALSE) + return var/damage_chance = 100 * ((overclock_temp - overclock_temp_danger) / (overclock_temp_danger * 2)) if(SPT_PROB(damage_chance, seconds_per_tick)) do_sparks(5, TRUE, src) @@ -811,6 +818,15 @@ else overclock_mode = !overclock_mode log_message("Toggled overclocking.", LOG_MECHA) + + for(var/mob/occupant as anything in occupants) + var/datum/action/act = locate(/datum/action/vehicle/sealed/mecha/mech_overclock) in occupant.actions + if(!act) + continue + act.button_icon_state = "mech_overload_[overclock_mode ? "on" : "off"]" + balloon_alert(occupant, "overclock [overclock_mode ? "on":"off"]") + act.build_all_button_icons() + if(overclock_mode) movedelay = movedelay / overclock_coeff visible_message(span_notice("[src] starts heating up, making humming sounds.")) @@ -857,5 +873,5 @@ act.button_icon_state = "mech_lights_on" else act.button_icon_state = "mech_lights_off" - balloon_alert(occupant, "toggled lights [mecha_flags & LIGHTS_ON ? "on":"off"]") + balloon_alert(occupant, "lights [mecha_flags & LIGHTS_ON ? "on":"off"]") act.build_all_button_icons() diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index 204739cd7fc..223ab66ca31 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -22,6 +22,8 @@ ) step_energy_drain = 4 can_use_overclock = TRUE + overclock_safety_available = TRUE + overclock_safety = TRUE /datum/armor/mecha_gygax melee = 25 diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index f42e89aa1d5..43301c19605 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -152,6 +152,5 @@ if(!owner || !chassis || !(owner in chassis.occupants)) return chassis.toggle_overclock(forced_state) - chassis.balloon_alert(owner, chassis.overclock_mode ? "started overclocking" : "stopped overclocking") button_icon_state = "mech_overload_[chassis.overclock_mode ? "on" : "off"]" build_all_button_icons() diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm index 815770875ea..76d8b4613fa 100644 --- a/code/modules/vehicles/mecha/mecha_ui.dm +++ b/code/modules/vehicles/mecha/mecha_ui.dm @@ -82,6 +82,8 @@ data["internal_damage"] = internal_damage data["can_use_overclock"] = can_use_overclock + data["overclock_safety_available"] = overclock_safety_available + data["overclock_safety"] = overclock_safety data["overclock_mode"] = overclock_mode data["overclock_temp_percentage"] = overclock_temp / overclock_temp_danger @@ -210,9 +212,8 @@ toggle_lights(user = usr) if("toggle_overclock") toggle_overclock() - var/datum/action/act = locate(/datum/action/vehicle/sealed/mecha/mech_overclock) in usr.actions - act.button_icon_state = "mech_overload_[overclock_mode ? "on" : "off"]" - act.build_all_button_icons() + if("toggle_overclock_safety") + overclock_safety = !overclock_safety if("repair_int_damage") try_repair_int_damage(usr, params["flag"]) return FALSE diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index 9db12624125..d2b13d48d26 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -266,11 +266,11 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) var/turf/T = get_turf(loc) if(lavaland_equipment_pressure_check(T)) - movedelay = fast_pressure_step_in + movedelay = !overclock_mode ? fast_pressure_step_in : fast_pressure_step_in / overclock_coeff for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in flat_equipment) drill.equip_cooldown = initial(drill.equip_cooldown) * 0.5 else - movedelay = slow_pressure_step_in + movedelay = !overclock_mode ? slow_pressure_step_in : slow_pressure_step_in / overclock_coeff for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in flat_equipment) drill.equip_cooldown = initial(drill.equip_cooldown) diff --git a/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx b/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx index c29c60b8bc3..953e1a6b5f8 100644 --- a/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx @@ -27,6 +27,8 @@ export const AlertPane = (props, context) => { scanmod_rating, capacitor_rating, can_use_overclock, + overclock_safety_available, + overclock_safety, overclock_mode, overclock_temp_percentage, } = data; @@ -35,21 +37,41 @@ export const AlertPane = (props, context) => { title="Status" buttons={ (!!overclock_mode || !!can_use_overclock) && ( - + <> + + {!!overclock_safety_available && ( +