mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 21:48:39 +01:00
[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:
co-authored by
TiviPlus
TiviPlus
parent
850fb3c2f1
commit
7835d891e4
@@ -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" = (
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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. (© 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]
|
||||
|
||||
@@ -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}
|
||||
Reference in New Issue
Block a user