Files
necromanceranneandRoxy dad7ca7553 Completely strips silicon control options out of open cage mechs (except mech domination). Adds flags to handle granular control restrictions and beacon limitations. (#91118)
## About The Pull Request

Open cabin mechs cannot be piloted by silicon pilots. MMI's, uploaded
AI's, positronics or AI control beacons. The mechs can still be tracker
beaconed. It can also be dominated via the malfunctioning AI power.

Adds some flags to help flag which mechs can or cannot be beaconed, or
which are silicon compatible.

## Why It's Good For The Game

I'm not going to lie. I do feel a bit pressured on this change in
particular. This is somewhat meant to be an intended feature.

But I think the cats out of the bag on open cabin mechs and the ways to
circumvent their downsides. And the more I think about it, the more I
come to realize that I frankly haven't had many, if any, good
interactions with a posibrain/MMI mech army. So making that more
efficient is...a problem.

Using a silicon-based pilot can help you evade the potential
consequences of being a flesh and bone pilot inside of a steel mesh
cabin and being shot repeatedly. So you may as well, in those instances,
treat it as a sealed cabin mech. And these mechs are surprisingly pretty
strong statistically. Especially the Paddy with its ability to equip
actual lethal weaponry.

They're cheap, can be mass produced, come out early, and durable. The
only limitation is pilots, and if you're printing positronics and get
ghosts for those positronics, you can usually just keep producing more.

From a purely objective standpoint, there isn't much reason to not push
out posi-paddys over any other mech. Rather than settle for a perfect
answer, let's at least require some human pilots in these mechs so that
their supposed downside is more of an Achilles heel.

## Changelog
🆑
balance: Caged mechs cannot accept silicon pilots. AI uploaded pilots,
AI control beacons, MMIs or positronics. Malfunctioning AIs can still
dominate these mechs.
code: Allows for a higher degree of granularity for what mechs can and
cannot accept by including additoinal mecha flags to block beacon type
installations, pilot uploads and so on.
/🆑
2025-06-05 19:53:08 -04:00

91 lines
2.8 KiB
Plaintext

/obj/vehicle/sealed/mecha/honker
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!"
name = "\improper H.O.N.K"
ui_theme = "neutral"
icon_state = "honker"
base_icon_state = "honker"
movedelay = 3
max_integrity = 140
force = 30
armor_type = /datum/armor/mecha_honker
max_temperature = 25000
destruction_sleep_duration = 40
exit_delay = 40
accesses = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE)
wreckage = /obj/structure/mecha_wreckage/honker
mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE | BEACON_TRACKABLE | AI_COMPATIBLE | BEACON_CONTROLLABLE
mech_type = EXOSUIT_MODULE_HONK
max_equip_by_category = list(
MECHA_L_ARM = 1,
MECHA_R_ARM = 1,
MECHA_UTILITY = 4,
MECHA_POWER = 1,
MECHA_ARMOR = 0,
)
var/squeak = TRUE
/datum/armor/mecha_honker
melee = -20
fire = 100
acid = 100
/obj/vehicle/sealed/mecha/honker/Initialize(mapload, built_manually)
. = ..()
AddElementTrait(TRAIT_WADDLING, REF(src), /datum/element/waddling)
/obj/vehicle/sealed/mecha/honker/play_stepsound()
if(squeak)
playsound(src, SFX_CLOWN_STEP, 70, 1)
squeak = !squeak
//DARK H.O.N.K.
/obj/vehicle/sealed/mecha/honker/dark
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. This one has been painted black for maximum fun. HONK!"
name = "\improper Dark H.O.N.K"
ui_theme = "syndicate"
icon_state = "darkhonker"
max_integrity = 300
armor_type = /datum/armor/honker_dark
max_temperature = 35000
accesses = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/honker/dark
mecha_flags = ID_LOCK_ON | CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE | AI_COMPATIBLE
max_equip_by_category = list(
MECHA_L_ARM = 1,
MECHA_R_ARM = 1,
MECHA_UTILITY = 3,
MECHA_POWER = 1,
MECHA_ARMOR = 2,
)
/obj/vehicle/sealed/mecha/honker/dark/loaded
equip_by_category = list(
MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/honker,
MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana,
MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion),
MECHA_POWER = list(),
MECHA_ARMOR = list(),
)
/datum/armor/honker_dark
melee = 40
bullet = 40
laser = 50
energy = 35
bomb = 20
fire = 100
acid = 100
/obj/vehicle/sealed/mecha/honker/dark/loaded/populate_parts()
cell = new /obj/item/stock_parts/power_store/cell/hyper(src)
scanmod = new /obj/item/stock_parts/scanning_module/phasic(src)
capacitor = new /obj/item/stock_parts/capacitor/super(src)
servo = new /obj/item/stock_parts/servo/pico(src)
update_part_values()
/obj/structure/mecha_wreckage/honker/dark
name = "\improper Dark H.O.N.K wreckage"
icon_state = "darkhonker-broken"