From 7835d891e480d64a2452cfda5b716168df05de0e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 8 Dec 2022 16:52:21 +0100 Subject: [PATCH] [MIRROR] Flatten mech/combat and mech/medical [MDB IGNORE] (#17946) * Flatten mech/combat and mech/medical (#71494) ## About The Pull Request The only thing mech combat has is the reload helper that should be on mech proper anyway and the medical subtype isnt even defined outside of ody code Co-authored-by: TiviPlus <572233640+TiviPlus@ users.noreply.com> * Flatten mech/combat and mech/medical Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com> Co-authored-by: TiviPlus <572233640+TiviPlus@ users.noreply.com> --- _maps/templates/battlecruiser_starfury.dmm | 2 +- code/__DEFINES/is_helpers.dm | 2 -- code/_globalvars/phobias.dm | 2 +- code/modules/cargo/bounties/mech.dm | 6 ++-- .../simple_animal/hostile/mecha_pilot.dm | 12 +++---- code/modules/unit_tests/mecha_damage.dm | 2 +- code/modules/uplink/uplink_items/nukeops.dm | 6 ++-- code/modules/vehicles/mecha/combat/combat.dm | 16 --------- code/modules/vehicles/mecha/combat/durand.dm | 35 ++++++++++--------- code/modules/vehicles/mecha/combat/gygax.dm | 13 ++++--- code/modules/vehicles/mecha/combat/honker.dm | 13 ++++--- .../modules/vehicles/mecha/combat/marauder.dm | 16 +++++---- code/modules/vehicles/mecha/combat/phazon.dm | 7 ++-- .../vehicles/mecha/combat/reticence.dm | 7 ++-- .../vehicles/mecha/combat/savannah_ivanov.dm | 15 ++++---- .../mecha/equipment/tools/other_tools.dm | 2 +- .../mecha/mecha_construction_paths.dm | 12 +++---- code/modules/vehicles/mecha/mecha_helpers.dm | 11 ++++++ .../vehicles/mecha/medical/odysseus.dm | 8 ++--- tgstation.dme | 1 - .../Scripts/71494_mech_med_combat_remove.txt | 4 +++ 21 files changed, 104 insertions(+), 88 deletions(-) delete mode 100644 code/modules/vehicles/mecha/combat/combat.dm create mode 100644 tools/UpdatePaths/Scripts/71494_mech_med_combat_remove.txt diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 46cf3b62bde..e3d596cbc33 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -1867,7 +1867,7 @@ "gF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded, +/obj/vehicle/sealed/mecha/marauder/mauler/loaded, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) "gH" = ( diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 81cf2a50678..bdf5bc585ee 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -207,8 +207,6 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define ismecha(A) (istype(A, /obj/vehicle/sealed/mecha)) -#define ismedicalmecha(A) (istype(A, /obj/vehicle/sealed/mecha/medical)) - #define ismopable(A) (A && (A.layer <= FLOOR_CLEAN_LAYER)) //If something can be cleaned by floor-cleaning devices such as mops or clean bots #define isorgan(A) (istype(A, /obj/item/organ)) diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index f4de4d862fd..205e193c56e 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -157,7 +157,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/structure/mecha_wreckage/honker, /obj/structure/statue/bananium, /obj/vehicle/sealed/car/clowncar, - /obj/vehicle/sealed/mecha/combat/honker, + /obj/vehicle/sealed/mecha/honker, )), "greytide" = (typecacheof(list( diff --git a/code/modules/cargo/bounties/mech.dm b/code/modules/cargo/bounties/mech.dm index c55daae7b51..4dc9a65b508 100644 --- a/code/modules/cargo/bounties/mech.dm +++ b/code/modules/cargo/bounties/mech.dm @@ -23,14 +23,14 @@ /datum/bounty/item/mech/odysseus name = "Odysseus" reward = CARGO_CRATE_VALUE * 22 - wanted_types = list(/obj/vehicle/sealed/mecha/medical/odysseus = TRUE) + wanted_types = list(/obj/vehicle/sealed/mecha/odysseus = TRUE) /datum/bounty/item/mech/gygax name = "Gygax" reward = CARGO_CRATE_VALUE * 56 - wanted_types = list(/obj/vehicle/sealed/mecha/combat/gygax = TRUE) + wanted_types = list(/obj/vehicle/sealed/mecha/gygax = TRUE) /datum/bounty/item/mech/durand name = "Durand" reward = CARGO_CRATE_VALUE * 40 - wanted_types = list(/obj/vehicle/sealed/mecha/combat/durand = TRUE) + wanted_types = list(/obj/vehicle/sealed/mecha/durand = TRUE) diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index 5800796f2a0..0ed06f8dfad 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -23,7 +23,7 @@ search_objects = 0 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - var/spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded + var/spawn_mecha_type = /obj/vehicle/sealed/mecha/marauder/mauler/loaded var/obj/vehicle/sealed/mecha/mecha //Ref to pilot's mecha instance var/required_mecha_charge = 7500 //If the pilot doesn't have a mecha, what charge does a potential Grand Theft Mecha need? (Defaults to half a battery) var/mecha_charge_evacuate = 50 //Amount of charge at which the pilot tries to abandon the mecha @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize(mapload) . = ..() - wanted_objects = typecacheof(/obj/vehicle/sealed/mecha/combat, TRUE) + wanted_objects = typecacheof(/obj/vehicle/sealed/mecha, TRUE) /mob/living/simple_animal/hostile/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path. name = "\improper Nanotrasen Mecha Pilot" @@ -48,7 +48,7 @@ icon_living = "nanotrasen" icon_state = "nanotrasen" faction = list("nanotrasen") - spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/marauder/loaded + spawn_mecha_type = /obj/vehicle/sealed/mecha/marauder/loaded /mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/nanotrasen name = "\improper Nanotrasen Mecha Pilot" @@ -100,9 +100,9 @@ targets_from = null //Find a new mecha - wanted_objects = typecacheof(/obj/vehicle/sealed/mecha/combat, TRUE) + wanted_objects = typecacheof(/obj/vehicle/sealed/mecha, TRUE) var/search_aggressiveness = 2 - for(var/obj/vehicle/sealed/mecha/combat/C in range(vision_range,src)) + for(var/obj/vehicle/sealed/mecha/C in range(vision_range,src)) if(is_valid_mecha(C)) GiveTarget(C) search_aggressiveness = 3 //We can see a mech? RUN FOR IT, IGNORE MOBS! @@ -199,7 +199,7 @@ if(!.) return if(!mecha) - for(var/obj/vehicle/sealed/mecha/combat/mecha_in_range in range(src,vision_range)) + for(var/obj/vehicle/sealed/mecha/mecha_in_range in range(src,vision_range)) if(is_valid_mecha(mecha_in_range)) GiveTarget(mecha_in_range) //Let's nab it! minimum_distance = 1 diff --git a/code/modules/unit_tests/mecha_damage.dm b/code/modules/unit_tests/mecha_damage.dm index 8c6f63c1051..6543f7073a6 100644 --- a/code/modules/unit_tests/mecha_damage.dm +++ b/code/modules/unit_tests/mecha_damage.dm @@ -7,7 +7,7 @@ /datum/unit_test/mecha_damage/Run() // "Loaded Mauler" was chosen deliberately here. // We need a mech that starts with arm equipment and has fair enough armor. - var/obj/vehicle/sealed/mecha/demo_mech = allocate(/obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded) + var/obj/vehicle/sealed/mecha/demo_mech = allocate(/obj/vehicle/sealed/mecha/marauder/mauler/loaded) // We need to face our guy explicitly, because mechs have directional armor demo_mech.setDir(EAST) diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 8b9fcff8806..a19ce707208 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -558,13 +558,13 @@ name = "Dark Gygax Exosuit" desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ for hit-and-run style attacks. Features a scattershot shotgun, armor boosters against melee and ranged attacks, ion thrusters and a Tesla energy array." - item = /obj/vehicle/sealed/mecha/combat/gygax/dark/loaded + item = /obj/vehicle/sealed/mecha/gygax/dark/loaded cost = 80 /datum/uplink_item/support/honker name = "Dark H.O.N.K." desc = "A clown combat mech equipped with bombanana peel and tearstache grenade launchers, as well as the ubiquitous HoNkER BlAsT 5000." - item = /obj/vehicle/sealed/mecha/combat/honker/dark/loaded + item = /obj/vehicle/sealed/mecha/honker/dark/loaded cost = 80 purchasable_from = UPLINK_CLOWN_OPS @@ -572,7 +572,7 @@ name = "Mauler Exosuit" desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." - item = /obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded + item = /obj/vehicle/sealed/mecha/marauder/mauler/loaded cost = 140 /datum/uplink_item/support/turretbox diff --git a/code/modules/vehicles/mecha/combat/combat.dm b/code/modules/vehicles/mecha/combat/combat.dm deleted file mode 100644 index 80b0f25c461..00000000000 --- a/code/modules/vehicles/mecha/combat/combat.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/vehicle/sealed/mecha/combat - force = 30 - internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) - armor = list(MELEE = 30, BULLET = 30, LASER = 15, ENERGY = 20, BOMB = 20, BIO = 0, FIRE = 100, ACID = 100) - destruction_sleep_duration = 40 - exit_delay = 40 - -/obj/vehicle/sealed/mecha/combat/restore_equipment() - mouse_pointer = 'icons/effects/mouse_pointers/mecha_mouse.dmi' - return ..() - -/obj/vehicle/sealed/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this - for(var/obj/item/I as anything in flat_equipment) - if(istype(I, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic)) - var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun = I - gun.projectiles_cache = gun.projectiles_cache_max diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index 267f40e5355..db0068c5b33 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -1,13 +1,16 @@ -/obj/vehicle/sealed/mecha/combat/durand +/obj/vehicle/sealed/mecha/durand desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." name = "\improper Durand" icon_state = "durand" base_icon_state = "durand" movedelay = 4 max_integrity = 400 + internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) armor = list(MELEE = 40, BULLET = 35, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 30000 force = 40 + destruction_sleep_duration = 40 + exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/durand mech_type = EXOSUIT_MODULE_DURAND max_equip_by_category = list( @@ -18,24 +21,24 @@ var/obj/durand_shield/shield -/obj/vehicle/sealed/mecha/combat/durand/Initialize(mapload) +/obj/vehicle/sealed/mecha/durand/Initialize(mapload) . = ..() shield = new /obj/durand_shield(loc, src, plane, layer, dir) RegisterSignal(src, COMSIG_MECHA_ACTION_TRIGGER, PROC_REF(relay)) RegisterSignal(src, COMSIG_PROJECTILE_PREHIT, PROC_REF(prehit)) -/obj/vehicle/sealed/mecha/combat/durand/Destroy() +/obj/vehicle/sealed/mecha/durand/Destroy() if(shield) QDEL_NULL(shield) return ..() -/obj/vehicle/sealed/mecha/combat/durand/generate_actions() +/obj/vehicle/sealed/mecha/durand/generate_actions() . = ..() initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_defense_mode) -/obj/vehicle/sealed/mecha/combat/durand/process() +/obj/vehicle/sealed/mecha/durand/process() . = ..() if(defense_mode && !use_power(100)) //Defence mode can only be on with a occupant so we check if one of them can toggle it and toggle for(var/O in occupants) @@ -45,17 +48,17 @@ action.Trigger() break -/obj/vehicle/sealed/mecha/combat/durand/Move(direction) +/obj/vehicle/sealed/mecha/durand/Move(direction) . = ..() if(shield) shield.forceMove(loc) shield.setDir(dir) -/obj/vehicle/sealed/mecha/combat/durand/forceMove(turf/T) +/obj/vehicle/sealed/mecha/durand/forceMove(turf/T) . = ..() shield.forceMove(T) -/obj/vehicle/sealed/mecha/combat/durand/mob_exit(mob/M, silent = FALSE, randomstep = FALSE, forced = FALSE) +/obj/vehicle/sealed/mecha/durand/mob_exit(mob/M, silent = FALSE, randomstep = FALSE, forced = FALSE) if(defense_mode) var/datum/action/action = LAZYACCESSASSOC(occupant_actions, M, /datum/action/vehicle/sealed/mecha/mech_defense_mode) if(action) @@ -63,7 +66,7 @@ return ..() ///Relays the signal from the action button to the shield, and creates a new shield if the old one is MIA. -/obj/vehicle/sealed/mecha/combat/durand/proc/relay(datum/source, mob/owner, list/signal_args) +/obj/vehicle/sealed/mecha/durand/proc/relay(datum/source, mob/owner, list/signal_args) SIGNAL_HANDLER if(!shield) //if the shield somehow got deleted stack_trace("Durand triggered relay without a shield") @@ -72,14 +75,14 @@ SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_TRIGGER, owner, signal_args) //Redirects projectiles to the shield if defense_check decides they should be blocked and returns true. -/obj/vehicle/sealed/mecha/combat/durand/proc/prehit(obj/projectile/source, list/signal_args) +/obj/vehicle/sealed/mecha/durand/proc/prehit(obj/projectile/source, list/signal_args) SIGNAL_HANDLER if(defense_check(source.loc) && shield) signal_args[2] = shield /**Checks if defense mode is enabled, and if the attacker is standing in an area covered by the shield. Expects a turf. Returns true if the attack should be blocked, false if not.*/ -/obj/vehicle/sealed/mecha/combat/durand/proc/defense_check(turf/aloc) +/obj/vehicle/sealed/mecha/durand/proc/defense_check(turf/aloc) if (!defense_mode || !shield || shield.switching) return FALSE . = FALSE @@ -98,14 +101,14 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ . = TRUE return -/obj/vehicle/sealed/mecha/combat/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) +/obj/vehicle/sealed/mecha/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) if(defense_check(user.loc)) log_message("Attack absorbed by defense field. Attacker - [user].", LOG_MECHA, color="orange") shield.attack_generic(user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) else . = ..() -/obj/vehicle/sealed/mecha/combat/durand/blob_act(obj/structure/blob/B) +/obj/vehicle/sealed/mecha/durand/blob_act(obj/structure/blob/B) if(defense_check(B.loc)) log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") log_message("Attack absorbed by defense field.", LOG_MECHA, color="orange") @@ -113,14 +116,14 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ else . = ..() -/obj/vehicle/sealed/mecha/combat/durand/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, params) if(defense_check(user.loc)) log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange") shield.attackby(W, user, params) else . = ..() -/obj/vehicle/sealed/mecha/combat/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) +/obj/vehicle/sealed/mecha/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(defense_check(AM.loc)) log_message("Impact with [AM] absorbed by defense field.", LOG_MECHA, color="orange") shield.hitby(AM, skipcatch, hitpush, blocked, throwingdatum) @@ -159,7 +162,7 @@ own integrity back to max. Shield is automatically dropped if we run out of powe light_on = FALSE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF //The shield should not take damage from fire, lava, or acid; that's the mech's job. ///Our link back to the durand - var/obj/vehicle/sealed/mecha/combat/durand/chassis + var/obj/vehicle/sealed/mecha/durand/chassis ///To keep track of things during the animation var/switching = FALSE diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index cc8cc517ab9..f4084cb1538 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -1,4 +1,4 @@ -/obj/vehicle/sealed/mecha/combat/gygax +/obj/vehicle/sealed/mecha/gygax desc = "A lightweight, security exosuit. Popular among private and corporate security." name = "\improper Gygax" icon_state = "gygax" @@ -6,10 +6,13 @@ allow_diagonal_movement = TRUE movedelay = 3 max_integrity = 250 + internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 25000 leg_overload_coeff = 80 force = 25 + destruction_sleep_duration = 40 + exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/gygax mech_type = EXOSUIT_MODULE_GYGAX max_equip_by_category = list( @@ -19,7 +22,7 @@ ) step_energy_drain = 3 -/obj/vehicle/sealed/mecha/combat/gygax/generate_actions() +/obj/vehicle/sealed/mecha/gygax/generate_actions() . = ..() initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_overload_mode) @@ -47,7 +50,7 @@ chassis.balloon_alert(owner, "you disable the overload") UpdateButtons() -/obj/vehicle/sealed/mecha/combat/gygax/dark +/obj/vehicle/sealed/mecha/gygax/dark desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." name = "\improper Dark Gygax" icon_state = "darkgygax" @@ -74,11 +77,11 @@ ) destruction_sleep_duration = 20 -/obj/vehicle/sealed/mecha/combat/gygax/dark/loaded/Initialize(mapload) +/obj/vehicle/sealed/mecha/gygax/dark/loaded/Initialize(mapload) . = ..() max_ammo() -/obj/vehicle/sealed/mecha/combat/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null) +/obj/vehicle/sealed/mecha/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null) if(C) C.forceMove(src) cell = C diff --git a/code/modules/vehicles/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm index b5f45609014..4d26987a6e1 100644 --- a/code/modules/vehicles/mecha/combat/honker.dm +++ b/code/modules/vehicles/mecha/combat/honker.dm @@ -1,12 +1,15 @@ -/obj/vehicle/sealed/mecha/combat/honker +/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" icon_state = "honker" base_icon_state = "honker" movedelay = 3 max_integrity = 140 + force = 30 armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 25000 + destruction_sleep_duration = 40 + exit_delay = 40 operation_req_access = list(ACCESS_THEATRE) internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) wreckage = /obj/structure/mecha_wreckage/honker @@ -19,7 +22,7 @@ ) var/squeak = TRUE -/obj/vehicle/sealed/mecha/combat/honker/play_stepsound() +/obj/vehicle/sealed/mecha/honker/play_stepsound() if(squeak) playsound(src, SFX_CLOWN_STEP, 70, 1) squeak = !squeak @@ -27,7 +30,7 @@ //DARK H.O.N.K. -/obj/vehicle/sealed/mecha/combat/honker/dark +/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" icon_state = "darkhonker" @@ -43,7 +46,7 @@ MECHA_ARMOR = 3, ) -/obj/vehicle/sealed/mecha/combat/honker/dark/loaded +/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, @@ -52,7 +55,7 @@ MECHA_ARMOR = list(), ) -/obj/vehicle/sealed/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C) +/obj/vehicle/sealed/mecha/honker/dark/add_cell(obj/item/stock_parts/cell/C) if(C) C.forceMove(src) cell = C diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm index 3870aebe9ff..d932be80e95 100644 --- a/code/modules/vehicles/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -1,4 +1,4 @@ -/obj/vehicle/sealed/mecha/combat/marauder +/obj/vehicle/sealed/mecha/marauder desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." name = "\improper Marauder" icon_state = "marauder" @@ -7,6 +7,8 @@ max_integrity = 500 armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 60000 + destruction_sleep_duration = 40 + exit_delay = 40 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF operation_req_access = list(ACCESS_CENT_SPECOPS) internals_req_access = list(ACCESS_CENT_SPECOPS) @@ -21,12 +23,12 @@ ) bumpsmash = TRUE -/obj/vehicle/sealed/mecha/combat/marauder/generate_actions() +/obj/vehicle/sealed/mecha/marauder/generate_actions() . = ..() initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_smoke) initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_zoom) -/obj/vehicle/sealed/mecha/combat/marauder/loaded +/obj/vehicle/sealed/mecha/marauder/loaded equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack, @@ -35,7 +37,7 @@ MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), ) -/obj/vehicle/sealed/mecha/combat/marauder/add_cell(obj/item/stock_parts/cell/C=null) +/obj/vehicle/sealed/mecha/marauder/add_cell(obj/item/stock_parts/cell/C=null) if(C) C.forceMove(src) cell = C @@ -72,7 +74,7 @@ owner.client.view_size.resetToDefault() UpdateButtons() -/obj/vehicle/sealed/mecha/combat/marauder/seraph +/obj/vehicle/sealed/mecha/marauder/seraph desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." name = "\improper Seraph" icon_state = "seraph" @@ -96,7 +98,7 @@ MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), ) -/obj/vehicle/sealed/mecha/combat/marauder/mauler +/obj/vehicle/sealed/mecha/marauder/mauler desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." name = "\improper Mauler" icon_state = "mauler" @@ -118,7 +120,7 @@ ) destruction_sleep_duration = 20 -/obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded +/obj/vehicle/sealed/mecha/marauder/mauler/loaded equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack, diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index 804142bfd3a..543d839377f 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -1,4 +1,4 @@ -/obj/vehicle/sealed/mecha/combat/phazon +/obj/vehicle/sealed/mecha/phazon desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." name = "\improper Phazon" icon_state = "phazon" @@ -8,6 +8,9 @@ max_integrity = 200 armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 25000 + internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) + destruction_sleep_duration = 40 + exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/phazon mech_type = EXOSUIT_MODULE_PHAZON force = 15 @@ -18,7 +21,7 @@ ) phase_state = "phazon-phase" -/obj/vehicle/sealed/mecha/combat/phazon/generate_actions() +/obj/vehicle/sealed/mecha/phazon/generate_actions() . = ..() initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_phasing) initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_switch_damtype) diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm index d09570a6379..43acf5fd1b0 100644 --- a/code/modules/vehicles/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -1,4 +1,4 @@ -/obj/vehicle/sealed/mecha/combat/reticence +/obj/vehicle/sealed/mecha/reticence desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins." name = "\improper reticence" icon_state = "reticence" @@ -7,6 +7,9 @@ max_integrity = 100 armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 15000 + force = 30 + destruction_sleep_duration = 40 + exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_THEATRE) internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) @@ -20,7 +23,7 @@ step_energy_drain = 3 color = "#87878715" -/obj/vehicle/sealed/mecha/combat/reticence/loaded +/obj/vehicle/sealed/mecha/reticence/loaded equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/rcd, diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index 0a81b429e12..c8fd5d78970 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -12,7 +12,7 @@ * A two person mecha that delegates moving to the driver and shooting to the pilot. * ...Hilarious, right? */ -/obj/vehicle/sealed/mecha/combat/savannah_ivanov +/obj/vehicle/sealed/mecha/savannah_ivanov name = "\improper Savannah-Ivanov" desc = "An insanely overbulked mecha that handily crushes single-pilot opponents. The price is that you need two pilots to use it." icon = 'icons/mecha/coop_mech.dmi' @@ -25,6 +25,9 @@ max_integrity = 450 //really tanky, like damn armor = list(MELEE = 45, BULLET = 40, LASER = 30, ENERGY = 30, BOMB = 40, BIO = 0, FIRE = 100, ACID = 100) max_temperature = 30000 + force = 30 + destruction_sleep_duration = 40 + exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/savannah_ivanov max_occupants = 2 max_equip_by_category = list( @@ -35,7 +38,7 @@ //no tax on flying, since the power cost is in the leap itself. phasing_energy_drain = 0 -/obj/vehicle/sealed/mecha/combat/savannah_ivanov/get_mecha_occupancy_state() +/obj/vehicle/sealed/mecha/savannah_ivanov/get_mecha_occupancy_state() var/driver_present = driver_amount() != 0 var/gunner_present = return_amount_of_controllers_with_flag(VEHICLE_CONTROL_EQUIPMENT) > 0 var/list/mob/drivers = return_drivers() @@ -45,13 +48,13 @@ leap_state = action.skyfall_charge_level > 2 ? "leap_" : "" return "[base_icon_state]_[leap_state][gunner_present]_[driver_present]" -/obj/vehicle/sealed/mecha/combat/savannah_ivanov/auto_assign_occupant_flags(mob/new_occupant) +/obj/vehicle/sealed/mecha/savannah_ivanov/auto_assign_occupant_flags(mob/new_occupant) if(driver_amount() < max_drivers) //movement add_control_flags(new_occupant, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) else //weapons add_control_flags(new_occupant, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) -/obj/vehicle/sealed/mecha/combat/savannah_ivanov/generate_actions() +/obj/vehicle/sealed/mecha/savannah_ivanov/generate_actions() initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/swap_seat) . = ..() initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/skyfall, VEHICLE_CONTROL_DRIVE) @@ -340,9 +343,9 @@ pixel_y = -32 alpha = 0 ///reference to mecha following - var/obj/vehicle/sealed/mecha/combat/mecha + var/obj/vehicle/sealed/mecha/mecha -/obj/effect/skyfall_landingzone/Initialize(mapload, obj/vehicle/sealed/mecha/combat/mecha) +/obj/effect/skyfall_landingzone/Initialize(mapload, obj/vehicle/sealed/mecha/mecha) . = ..() if(!mecha) stack_trace("Skyfall landing zone created without mecha") diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm index 2b80ca48ea0..cb86c393e2c 100644 --- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -477,7 +477,7 @@ icon_state = "mecha_weapon_bay" /obj/item/mecha_parts/mecha_equipment/concealed_weapon_bay/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) - if(istype(M, /obj/vehicle/sealed/mecha/combat)) + if(M.mech_type & EXOSUIT_MODULE_COMBAT) to_chat(user, span_warning("[M] does not have the correct bolt configuration!")) return return ..() diff --git a/code/modules/vehicles/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm index 7e4469fb84b..d3d8702f601 100644 --- a/code/modules/vehicles/mecha/mecha_construction_paths.dm +++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm @@ -370,7 +370,7 @@ ) /datum/component/construction/mecha/gygax - result = /obj/vehicle/sealed/mecha/combat/gygax + result = /obj/vehicle/sealed/mecha/gygax base_icon = "gygax" circuit_control = /obj/item/circuitboard/mecha/gygax/main @@ -461,7 +461,7 @@ ) /datum/component/construction/mecha/honker - result = /obj/vehicle/sealed/mecha/combat/honker + result = /obj/vehicle/sealed/mecha/honker steps = list( list( "key" = /obj/item/bikehorn, @@ -582,7 +582,7 @@ ) /datum/component/construction/mecha/durand - result = /obj/vehicle/sealed/mecha/combat/durand + result = /obj/vehicle/sealed/mecha/durand base_icon = "durand" circuit_control = /obj/item/circuitboard/mecha/durand/main @@ -608,7 +608,7 @@ ) /datum/component/construction/mecha/phazon - result = /obj/vehicle/sealed/mecha/combat/phazon + result = /obj/vehicle/sealed/mecha/phazon base_icon = "phazon" circuit_control = /obj/item/circuitboard/mecha/phazon/main @@ -744,7 +744,7 @@ ) /datum/component/construction/mecha/savannah_ivanov - result = /obj/vehicle/sealed/mecha/combat/savannah_ivanov + result = /obj/vehicle/sealed/mecha/savannah_ivanov base_icon = "savannah_ivanov" circuit_control = /obj/item/circuitboard/mecha/savannah_ivanov/main @@ -770,7 +770,7 @@ ) /datum/component/construction/mecha/odysseus - result = /obj/vehicle/sealed/mecha/medical/odysseus + result = /obj/vehicle/sealed/mecha/odysseus base_icon = "odysseus" circuit_control = /obj/item/circuitboard/mecha/odysseus/main diff --git a/code/modules/vehicles/mecha/mecha_helpers.dm b/code/modules/vehicles/mecha/mecha_helpers.dm index a43ee765d79..56527ea30b7 100644 --- a/code/modules/vehicles/mecha/mecha_helpers.dm +++ b/code/modules/vehicles/mecha/mecha_helpers.dm @@ -42,3 +42,14 @@ cell.give(amount) return TRUE return FALSE + +////////////////////// +///// Ammo stuff ///// +////////////////////// + +///Max the ammo stored in all ballistic weapons for this mech +/obj/vehicle/sealed/mecha/proc/max_ammo() + for(var/obj/item/I as anything in flat_equipment) + if(istype(I, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic)) + var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun = I + gun.projectiles_cache = gun.projectiles_cache_max diff --git a/code/modules/vehicles/mecha/medical/odysseus.dm b/code/modules/vehicles/mecha/medical/odysseus.dm index 59e170eaee2..87df9e66e52 100644 --- a/code/modules/vehicles/mecha/medical/odysseus.dm +++ b/code/modules/vehicles/mecha/medical/odysseus.dm @@ -1,4 +1,4 @@ -/obj/vehicle/sealed/mecha/medical/odysseus +/obj/vehicle/sealed/mecha/odysseus desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)." name = "\improper Odysseus" icon_state = "odysseus" @@ -12,21 +12,21 @@ step_energy_drain = 6 internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_MEDICAL) -/obj/vehicle/sealed/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) +/obj/vehicle/sealed/mecha/odysseus/moved_inside(mob/living/carbon/human/H) . = ..() if(. && !HAS_TRAIT(H, TRAIT_MEDICAL_HUD)) var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] hud.show_to(H) ADD_TRAIT(H, TRAIT_MEDICAL_HUD, VEHICLE_TRAIT) -/obj/vehicle/sealed/mecha/medical/odysseus/remove_occupant(mob/living/carbon/human/H) +/obj/vehicle/sealed/mecha/odysseus/remove_occupant(mob/living/carbon/human/H) if(isliving(H) && HAS_TRAIT_FROM(H, TRAIT_MEDICAL_HUD, VEHICLE_TRAIT)) var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] med_hud.hide_from(H) REMOVE_TRAIT(H, TRAIT_MEDICAL_HUD, VEHICLE_TRAIT) return ..() -/obj/vehicle/sealed/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/M, mob/user) +/obj/vehicle/sealed/mecha/odysseus/mmi_moved_inside(obj/item/mmi/M, mob/user) . = ..() if(. && !HAS_TRAIT(M, TRAIT_MEDICAL_HUD)) var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] diff --git a/tgstation.dme b/tgstation.dme index 421fd630d52..1a6c659c212 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4770,7 +4770,6 @@ #include "code\modules\vehicles\mecha\mecha_parts.dm" #include "code\modules\vehicles\mecha\mecha_ui.dm" #include "code\modules\vehicles\mecha\mecha_wreckage.dm" -#include "code\modules\vehicles\mecha\combat\combat.dm" #include "code\modules\vehicles\mecha\combat\durand.dm" #include "code\modules\vehicles\mecha\combat\gygax.dm" #include "code\modules\vehicles\mecha\combat\honker.dm" diff --git a/tools/UpdatePaths/Scripts/71494_mech_med_combat_remove.txt b/tools/UpdatePaths/Scripts/71494_mech_med_combat_remove.txt new file mode 100644 index 00000000000..31f0e352d4b --- /dev/null +++ b/tools/UpdatePaths/Scripts/71494_mech_med_combat_remove.txt @@ -0,0 +1,4 @@ +# removes the medical and combat subtypes + +/obj/vehicle/sealed/mecha/@SUBTYPES : /obj/vehicle/sealed/mecha/combat/@SUBTYPES{@OLD} +/obj/vehicle/sealed/mecha/@SUBTYPES : /obj/vehicle/sealed/mecha/medical/@SUBTYPES{@OLD}