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}