[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>
This commit is contained in:
SkyratBot
2022-12-08 07:52:21 -08:00
committed by GitHub
co-authored by TiviPlus TiviPlus
parent 850fb3c2f1
commit 7835d891e4
21 changed files with 104 additions and 88 deletions
+1 -1
View File
@@ -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" = (
-2
View File
@@ -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))
+1 -1
View File
@@ -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(
+3 -3
View File
@@ -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)
@@ -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
+1 -1
View File
@@ -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)
+3 -3
View File
@@ -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
@@ -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
+19 -16
View File
@@ -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
+8 -5
View File
@@ -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
+8 -5
View File
@@ -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
@@ -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,
+5 -2
View File
@@ -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)
@@ -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,
@@ -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")
@@ -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 ..()
@@ -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
@@ -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
@@ -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. (&copy; 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]
-1
View File
@@ -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"
@@ -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}