Mech Mini 'Revamp'. Will need playtesting. (#5480)

* Exosuits are now capable of holding more equipment, of specific types.

* Tweaks regarding feedback in staffside thread, other concerns.

* Tweak to be more consistent. Why did the Odysseus have two universals. Tweak to weapon restriction on Med - > Odyss

* Weapons only fit in universal combat slots.
This commit is contained in:
Mechoid
2018-08-21 13:08:58 -07:00
committed by Anewbe
parent 51ad266de7
commit 6f909ce590
18 changed files with 1613 additions and 1358 deletions

View File

@@ -10,6 +10,13 @@
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8) damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
var/am = "d3c2fbcadca903a41161ccc9df9cf948" var/am = "d3c2fbcadca903a41161ccc9df9cf948"
max_hull_equip = 2
max_weapon_equip = 2
max_utility_equip = 1
max_universal_equip = 1
max_special_equip = 1
cargo_capacity = 1
/* /*
/obj/mecha/combat/range_action(target as obj|mob|turf) /obj/mecha/combat/range_action(target as obj|mob|turf)
if(internal_damage&MECHA_INT_CONTROL_LOST) if(internal_damage&MECHA_INT_CONTROL_LOST)

View File

@@ -6,6 +6,7 @@
step_in = 4 step_in = 4
dir_in = 1 //Facing North. dir_in = 1 //Facing North.
health = 400 health = 400
maxhealth = 400
deflect_chance = 20 deflect_chance = 20
damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8) damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
max_temperature = 30000 max_temperature = 30000
@@ -15,6 +16,12 @@
var/defence_deflect = 35 var/defence_deflect = 35
wreckage = /obj/effect/decal/mecha_wreckage/durand wreckage = /obj/effect/decal/mecha_wreckage/durand
max_hull_equip = 2
max_weapon_equip = 1
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
/* /*
/obj/mecha/combat/durand/New() /obj/mecha/combat/durand/New()
..() ..()

View File

@@ -64,6 +64,7 @@
pixel_x = -16 pixel_x = -16
step_in = 10 step_in = 10
health = 5000 health = 5000
maxhealth = 5000
opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1. opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1.
deflect_chance = 50 deflect_chance = 50
damage_absorption = list("brute"=0.1,"fire"=0.8,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed. damage_absorption = list("brute"=0.1,"fire"=0.8,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed.
@@ -79,6 +80,12 @@
internal_damage_threshold = 25 internal_damage_threshold = 25
force = 60 force = 60
max_equip = 5 max_equip = 5
//This will (Should) never be in the hands of players. If it is, the one who inflicted this monster upon the server can edit these vars to not be insane.
max_hull_equip = 5
max_weapon_equip = 5
max_utility_equip = 5
max_universal_equip = 5
max_special_equip = 2
/obj/mecha/combat/gorilla/New() /obj/mecha/combat/gorilla/New()
..() ..()

View File

@@ -6,6 +6,7 @@
step_in = 3 step_in = 3
dir_in = 1 //Facing North. dir_in = 1 //Facing North.
health = 300 health = 300
maxhealth = 300
deflect_chance = 15 deflect_chance = 15
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
max_temperature = 25000 max_temperature = 25000
@@ -16,12 +17,19 @@
internal_damage_threshold = 35 internal_damage_threshold = 35
max_equip = 3 max_equip = 3
max_hull_equip = 1
max_weapon_equip = 2
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/combat/gygax/dark /obj/mecha/combat/gygax/dark
desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech." desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech."
name = "Dark Gygax" name = "Dark Gygax"
icon_state = "darkgygax" icon_state = "darkgygax"
initial_icon = "darkgygax" initial_icon = "darkgygax"
health = 400 health = 400
maxhealth = 400
deflect_chance = 25 deflect_chance = 25
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8) damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
max_temperature = 45000 max_temperature = 45000
@@ -30,6 +38,12 @@
max_equip = 4 max_equip = 4
step_energy_drain = 5 step_energy_drain = 5
max_hull_equip = 1
max_weapon_equip = 2
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 2
/obj/mecha/combat/gygax/dark/New() /obj/mecha/combat/gygax/dark/New()
..() ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot

View File

@@ -5,6 +5,7 @@
initial_icon = "marauder" initial_icon = "marauder"
step_in = 5 step_in = 5
health = 500 health = 500
maxhealth = 500
deflect_chance = 25 deflect_chance = 25
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7) damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
max_temperature = 60000 max_temperature = 60000
@@ -22,6 +23,12 @@
force = 45 force = 45
max_equip = 4 max_equip = 4
max_hull_equip = 3
max_weapon_equip = 3
max_utility_equip = 3
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/combat/marauder/seraph /obj/mecha/combat/marauder/seraph
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
name = "Seraph" name = "Seraph"
@@ -62,7 +69,7 @@
var/obj/item/mecha_parts/mecha_equipment/ME var/obj/item/mecha_parts/mecha_equipment/ME
if(equipment.len)//Now to remove it and equip anew. if(equipment.len)//Now to remove it and equip anew.
for(ME in equipment) for(ME in equipment)
equipment -= ME ME.detach()
qdel(ME) qdel(ME)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src)
ME.attach(src) ME.attach(src)

View File

@@ -7,6 +7,7 @@
dir_in = 1 //Facing North. dir_in = 1 //Facing North.
step_energy_drain = 3 step_energy_drain = 3
health = 200 health = 200
maxhealth = 200
deflect_chance = 30 deflect_chance = 30
damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7) damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
max_temperature = 25000 max_temperature = 25000
@@ -20,6 +21,11 @@
var/phasing_energy_drain = 200 var/phasing_energy_drain = 200
max_equip = 4 max_equip = 4
max_hull_equip = 3
max_weapon_equip = 3
max_utility_equip = 3
max_universal_equip = 3
max_special_equip = 4
/obj/mecha/combat/phazon/New() /obj/mecha/combat/phazon/New()
..() ..()

View File

@@ -1,5 +1,9 @@
//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! //DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
#define EQUIP_HULL 1
#define EQUIP_WEAPON 2
#define EQUIP_UTILITY 3
#define EQUIP_SPECIAL 4
/obj/item/mecha_parts/mecha_equipment /obj/item/mecha_parts/mecha_equipment
name = "mecha equipment" name = "mecha equipment"
@@ -14,7 +18,7 @@
var/range = MELEE //bitflags var/range = MELEE //bitflags
var/salvageable = 1 var/salvageable = 1
var/required_type = /obj/mecha //may be either a type or a list of allowed types var/required_type = /obj/mecha //may be either a type or a list of allowed types
var/equip_type = null //mechaequip2
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1) /obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1)
sleep(equip_cooldown) sleep(equip_cooldown)
@@ -43,6 +47,20 @@
/obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity? /obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity?
if(chassis) if(chassis)
if(equip_type)
if(equip_type == EQUIP_HULL)
chassis.hull_equipment -= src
listclearnulls(chassis.hull_equipment)
if(equip_type == EQUIP_WEAPON)
chassis.weapon_equipment -= src
listclearnulls(chassis.weapon_equipment)
if(equip_type == EQUIP_UTILITY)
chassis.utility_equipment -= src
listclearnulls(chassis.utility_equipment)
if(equip_type == EQUIP_SPECIAL)
chassis.special_equipment -= src
listclearnulls(chassis.special_equipment)
chassis.universal_equipment -= src
chassis.equipment -= src chassis.equipment -= src
listclearnulls(chassis.equipment) listclearnulls(chassis.equipment)
if(chassis.selected == src) if(chassis.selected == src)
@@ -89,19 +107,49 @@
return return
/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj) /obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj)
if(M.equipment.len >= M.max_equip) //if(M.equipment.len >= M.max_equip)
return 0 // return 0
for(var/obj/item/mecha_parts/mecha_equipment/ME in M.equipment) //Exact duplicate components aren't allowed.
if (ispath(required_type)) if(ME.type == src.type)
return 0
if(equip_type == EQUIP_HULL && M.hull_equipment.len < M.max_hull_equip)
return 1
if(equip_type == EQUIP_WEAPON && M.weapon_equipment.len < M.max_weapon_equip)
return 1
if(equip_type == EQUIP_UTILITY && M.utility_equipment.len < M.max_utility_equip)
return 1
if(equip_type == EQUIP_SPECIAL && M.special_equipment.len < M.max_special_equip)
return 1
if(equip_type != EQUIP_SPECIAL && M.universal_equipment.len < M.max_universal_equip) //The exosuit needs to be military grade to actually have a universal slot capable of accepting a true weapon.
if(equip_type == EQUIP_WEAPON && !istype(M, /obj/mecha/combat))
return 0
return 1
/*if (ispath(required_type))
return istype(M, required_type) return istype(M, required_type)
for (var/path in required_type) for (var/path in required_type)
if (istype(M, path)) if (istype(M, path))
return 1 return 1
*/
return 0 return 0
/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M as obj) /obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M as obj)
//M.equipment += src
var/has_equipped = 0
if(equip_type == EQUIP_HULL && M.hull_equipment.len < M.max_hull_equip && !has_equipped)
M.hull_equipment += src
has_equipped = 1
if(equip_type == EQUIP_WEAPON && M.weapon_equipment.len < M.max_weapon_equip && !has_equipped)
M.weapon_equipment += src
has_equipped = 1
if(equip_type == EQUIP_UTILITY && M.utility_equipment.len < M.max_utility_equip && !has_equipped)
M.utility_equipment += src
has_equipped = 1
if(equip_type == EQUIP_SPECIAL && M.special_equipment.len < M.max_special_equip && !has_equipped)
M.special_equipment += src
has_equipped = 1
if(equip_type != EQUIP_SPECIAL && M.universal_equipment.len < M.max_universal_equip && !has_equipped)
M.universal_equipment += src
M.equipment += src M.equipment += src
chassis = M chassis = M
src.loc = M src.loc = M
@@ -115,6 +163,17 @@
moveto = moveto || get_turf(chassis) moveto = moveto || get_turf(chassis)
if(src.Move(moveto)) if(src.Move(moveto))
chassis.equipment -= src chassis.equipment -= src
chassis.universal_equipment -= src
if(equip_type)
switch(equip_type)
if(EQUIP_HULL)
chassis.hull_equipment -= src
if(EQUIP_WEAPON)
chassis.weapon_equipment -= src
if(EQUIP_UTILITY)
chassis.utility_equipment -= src
if(EQUIP_SPECIAL)
chassis.special_equipment -= src
if(chassis.selected == src) if(chassis.selected == src)
chassis.selected = null chassis.selected = null
update_chassis_page() update_chassis_page()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,8 @@
var/auto_rearm = 0 //Does the weapon reload itself after each shot? var/auto_rearm = 0 //Does the weapon reload itself after each shot?
required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod) required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod)
equip_type = EQUIP_WEAPON
/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target) /obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target)
if(projectiles <= 0) if(projectiles <= 0)
return 0 return 0
@@ -68,12 +70,14 @@
equip_cooldown = 30 equip_cooldown = 30
name = "jury-rigged welder-laser" name = "jury-rigged welder-laser"
desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times." desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times."
icon_state = "mecha_laser" icon_state = "mecha_laser-rig"
energy_drain = 80 energy_drain = 80
projectile = /obj/item/projectile/beam projectile = /obj/item/projectile/beam
fire_sound = 'sound/weapons/Laser.ogg' fire_sound = 'sound/weapons/Laser.ogg'
required_type = list(/obj/mecha/combat, /obj/mecha/working) required_type = list(/obj/mecha/combat, /obj/mecha/working)
equip_type = EQUIP_UTILITY
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
equip_cooldown = 15 equip_cooldown = 15
name = "\improper CH-LC \"Solaris\" laser cannon" name = "\improper CH-LC \"Solaris\" laser cannon"
@@ -127,6 +131,8 @@
equip_cooldown = 150 equip_cooldown = 150
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 4, TECH_ILLEGAL = 1) origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 4, TECH_ILLEGAL = 1)
equip_type = EQUIP_SPECIAL
/obj/item/mecha_parts/mecha_equipment/honker/action(target) /obj/item/mecha_parts/mecha_equipment/honker/action(target)
if(!chassis) if(!chassis)
return 0 return 0
@@ -198,7 +204,7 @@
equip_cooldown = 10 equip_cooldown = 10
projectile = /obj/item/projectile/bullet/pistol/medium projectile = /obj/item/projectile/bullet/pistol/medium
fire_sound = 'sound/weapons/machinegun.ogg' fire_sound = 'sound/weapons/machinegun.ogg'
projectiles = 300 projectiles = 30 //10 bursts, matching the Scattershot's 10. Also, conveniently, doesn't eat your powercell when reloading like 300 bullets does.
projectiles_per_shot = 3 projectiles_per_shot = 3
deviation = 0.3 deviation = 0.3
projectile_energy_cost = 20 projectile_energy_cost = 20
@@ -224,6 +230,8 @@
missile_range = 15 missile_range = 15
required_type = /obj/mecha //Why restrict it to just mining or combat mechs? required_type = /obj/mecha //Why restrict it to just mining or combat mechs?
equip_type = EQUIP_UTILITY
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc)
var/obj/item/device/flashlight/flare/fired = AM var/obj/item/device/flashlight/flare/fired = AM
fired.ignite() fired.ignite()
@@ -249,13 +257,13 @@
var/primed = null var/primed = null
throwforce = 15 throwforce = 15
throw_impact(atom/hit_atom) /obj/item/missile/throw_impact(atom/hit_atom)
if(primed) if(primed)
explosion(hit_atom, 0, 1, 2, 4) explosion(hit_atom, 0, 1, 2, 4)
qdel(src) qdel(src)
else else
..() ..()
return return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
name = "\improper SGL-6 grenade launcher" name = "\improper SGL-6 grenade launcher"
@@ -320,6 +328,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged /obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
name = "\improper AA-CR-1 Mark 4" name = "\improper AA-CR-1 Mark 4"
description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged." description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged."
icon_state = "mecha_cremate-rig"
energy_drain = 50 energy_drain = 50
required_type = list(/obj/mecha/combat, /obj/mecha/working) required_type = list(/obj/mecha/combat, /obj/mecha/working)
@@ -328,6 +337,8 @@
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2) origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
equip_type = EQUIP_UTILITY
////////////// //////////////
//Defensive// //Defensive//
////////////// //////////////
@@ -343,6 +354,8 @@
var/shock_damage = 15 var/shock_damage = 15
var/active var/active
equip_type = EQUIP_HULL
/obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj) /obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj)
if(..()) if(..())
if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"]) if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"])

View File

@@ -24,6 +24,7 @@
var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
var/step_energy_drain = 10 var/step_energy_drain = 10
var/health = 300 //health is health var/health = 300 //health is health
var/maxhealth = 300 //maxhealth is maxhealth.
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
//the values in this list show how much damage will pass through, not how much will be absorbed. //the values in this list show how much damage will pass through, not how much will be absorbed.
var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1) var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
@@ -66,8 +67,23 @@
var/list/equipment = new var/list/equipment = new
var/obj/item/mecha_parts/mecha_equipment/selected var/obj/item/mecha_parts/mecha_equipment/selected
var/max_equip = 3 var/max_equip = 2
var/datum/events/events var/datum/events/events
//mechaequipt2 stuffs
var/list/hull_equipment = new
var/list/weapon_equipment = new
var/list/utility_equipment = new
var/list/universal_equipment = new
var/list/special_equipment = new
var/max_hull_equip = 2
var/max_weapon_equip = 2
var/max_utility_equip = 2
var/max_universal_equip = 2
var/max_special_equip = 1
//Working exosuit vars
var/list/cargo = list()
var/cargo_capacity = 3
/obj/mecha/drain_power(var/drain_check) /obj/mecha/drain_power(var/drain_check)
@@ -99,10 +115,24 @@
mechas_list += src //global mech list mechas_list += src //global mech list
return return
/obj/mecha/Exit(atom/movable/O)
if(O in cargo)
return 0
return ..()
/obj/mecha/Destroy() /obj/mecha/Destroy()
src.go_out() src.go_out()
for(var/mob/M in src) //Let's just be ultra sure for(var/mob/M in src) //Be Extra Sure
M.Move(loc) M.forceMove(get_turf(src))
M.loc.Entered(M)
if(M != src.occupant)
step_rand(M)
for(var/atom/movable/A in src.cargo)
A.forceMove(get_turf(src))
var/turf/T = get_turf(A)
if(T)
T.Entered(A)
step_rand(A)
if(loc) if(loc)
loc.Exited(src) loc.Exited(src)
@@ -112,6 +142,11 @@
if(wreckage) if(wreckage)
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc) var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc)
hull_equipment.Cut()
weapon_equipment.Cut()
utility_equipment.Cut()
universal_equipment.Cut()
special_equipment.Cut()
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
if(E.salvageable && prob(30)) if(E.salvageable && prob(30))
WR.crowbar_salvage += E WR.crowbar_salvage += E
@@ -1348,6 +1383,14 @@
<b>Lights: </b>[lights?"on":"off"]<br> <b>Lights: </b>[lights?"on":"off"]<br>
[src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null] [src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null]
"} "}
//Cargo components.
output += "<b>Cargo Compartment Contents:</b><div style=\"margin-left: 15px;\">"
if(src.cargo.len)
for(var/obj/O in src.cargo)
output += "<a href='?src=\ref[src];drop_from_cargo=\ref[O]'>Unload</a> : [O]<br>"
else
output += "Nothing"
output += "</div>"
return output return output
/obj/mecha/proc/get_commands() /obj/mecha/proc/get_commands()
@@ -1396,10 +1439,23 @@
output += {"<div class='wr'> output += {"<div class='wr'>
<div class='header'>Equipment</div> <div class='header'>Equipment</div>
<div class='links'>"} <div class='links'>"}
for(var/obj/item/mecha_parts/mecha_equipment/W in equipment) for(var/obj/item/mecha_parts/mecha_equipment/W in hull_equipment)
output += "[W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>" output += "Hull Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
output += "<b>Available equipment slots:</b> [max_equip-equipment.len]" for(var/obj/item/mecha_parts/mecha_equipment/W in weapon_equipment)
output += "</div></div>" output += "Weapon Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
for(var/obj/item/mecha_parts/mecha_equipment/W in utility_equipment)
output += "Utility Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
for(var/obj/item/mecha_parts/mecha_equipment/W in universal_equipment)
output += "Universal Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
for(var/obj/item/mecha_parts/mecha_equipment/W in special_equipment)
output += "Special Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
output += {"<b>Available hull slots:</b> [max_hull_equip-hull_equipment.len]<br>
<b>Available weapon slots:</b> [max_weapon_equip-weapon_equipment.len]<br>
<b>Available utility slots:</b> [max_utility_equip-utility_equipment.len]<br>
<b>Available universal slots:</b> [max_universal_equip-universal_equipment.len]<br>
<b>Available special slots:</b> [max_special_equip-special_equipment.len]<br>
</div></div>
"}
return output return output
/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html /obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html
@@ -1673,6 +1729,17 @@
else else
src.occupant_message("<font color='red'>Recalibration failed.</font>") src.occupant_message("<font color='red'>Recalibration failed.</font>")
src.log_message("Recalibration of coordination system failed with 1 error.",1) src.log_message("Recalibration of coordination system failed with 1 error.",1)
if(href_list["drop_from_cargo"])
var/obj/O = locate(href_list["drop_from_cargo"])
if(O && O in src.cargo)
src.occupant_message("<span class='notice'>You unload [O].</span>")
O.forceMove(get_turf(src))
src.cargo -= O
var/turf/T = get_turf(O)
if(T)
T.Entered(O)
src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
return
//debug //debug
/* /*

View File

@@ -1,3 +1,12 @@
/obj/mecha/medical
max_hull_equip = 1
max_weapon_equip = 0
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
cargo_capacity = 1
/obj/mecha/medical/initialize() /obj/mecha/medical/initialize()
. = ..() . = ..()
var/turf/T = get_turf(src) var/turf/T = get_turf(src)

View File

@@ -1,4 +1,4 @@
/obj/mecha/medical/odysseus /obj/mecha/medical/odysseus/
desc = "These exosuits are developed and produced by Vey-Med. (&copy; All rights reserved)." desc = "These exosuits are developed and produced by Vey-Med. (&copy; All rights reserved)."
name = "Odysseus" name = "Odysseus"
icon_state = "odysseus" icon_state = "odysseus"
@@ -6,36 +6,37 @@
step_in = 2 step_in = 2
max_temperature = 15000 max_temperature = 15000
health = 120 health = 120
maxhealth = 120
wreckage = /obj/effect/decal/mecha_wreckage/odysseus wreckage = /obj/effect/decal/mecha_wreckage/odysseus
internal_damage_threshold = 35 internal_damage_threshold = 35
deflect_chance = 15 deflect_chance = 15
step_energy_drain = 6 step_energy_drain = 6
var/obj/item/clothing/glasses/hud/health/mech/hud var/obj/item/clothing/glasses/hud/health/mech/hud
New() /obj/mecha/medical/odysseus/New()
..() ..()
hud = new /obj/item/clothing/glasses/hud/health/mech(src) hud = new /obj/item/clothing/glasses/hud/health/mech(src)
return return
moved_inside(var/mob/living/carbon/human/H as mob) /obj/mecha/medical/odysseus/moved_inside(var/mob/living/carbon/human/H as mob)
if(..()) if(..())
if(H.glasses) if(H.glasses)
occupant_message("<font color='red'>[H.glasses] prevent you from using [src] [hud]</font>") occupant_message("<font color='red'>[H.glasses] prevent you from using [src] [hud]</font>")
else
H.glasses = hud
H.recalculate_vis()
return 1
else else
return 0 H.glasses = hud
H.recalculate_vis()
return 1
else
return 0
go_out() /obj/mecha/medical/odysseus/go_out()
if(ishuman(occupant)) if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant var/mob/living/carbon/human/H = occupant
if(H.glasses == hud) if(H.glasses == hud)
H.glasses = null H.glasses = null
H.recalculate_vis() H.recalculate_vis()
..() ..()
return return
/* /*
verb/set_perspective() verb/set_perspective()
set name = "Set client perspective." set name = "Set client perspective."

View File

@@ -8,6 +8,7 @@
step_energy_drain = 10 step_energy_drain = 10
max_temperature = 20000 max_temperature = 20000
health = 150 health = 150
maxhealth = 150
infra_luminosity = 6 infra_luminosity = 6
wreckage = /obj/effect/decal/mecha_wreckage/hoverpod wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
cargo_capacity = 5 cargo_capacity = 5
@@ -15,6 +16,12 @@
var/datum/effect/effect/system/ion_trail_follow/ion_trail var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/stabilization_enabled = 1 var/stabilization_enabled = 1
max_hull_equip = 2
max_weapon_equip = 0
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/working/hoverpod/New() /obj/mecha/working/hoverpod/New()
..() ..()
ion_trail = new /datum/effect/effect/system/ion_trail_follow() ion_trail = new /datum/effect/effect/system/ion_trail_follow()
@@ -79,9 +86,15 @@
desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon. desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon.
name = "Combat Hoverpod" name = "Combat Hoverpod"
health = 200 health = 200
maxhealth = 200
internal_damage_threshold = 35 internal_damage_threshold = 35
cargo_capacity = 2 cargo_capacity = 2
max_equip = 2 max_equip = 2
max_hull_equip = 2
max_weapon_equip = 2
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/working/hoverpod/combatpod/New() /obj/mecha/working/hoverpod/combatpod/New()
..() ..()

View File

@@ -6,6 +6,7 @@
step_in = 6 step_in = 6
max_temperature = 20000 max_temperature = 20000
health = 200 health = 200
maxhealth = 200
wreckage = /obj/effect/decal/mecha_wreckage/ripley wreckage = /obj/effect/decal/mecha_wreckage/ripley
cargo_capacity = 10 cargo_capacity = 10
@@ -20,7 +21,7 @@
..() ..()
/obj/mecha/working/ripley/firefighter /obj/mecha/working/ripley/firefighter
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern." desc = "Standard APLU chassis was refitted with additional thermal protection and cistern."
name = "APLU \"Firefighter\"" name = "APLU \"Firefighter\""
icon_state = "firefighter" icon_state = "firefighter"
initial_icon = "firefighter" initial_icon = "firefighter"
@@ -29,6 +30,11 @@
lights_power = 8 lights_power = 8
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5) damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
max_hull_equip = 2
max_weapon_equip = 0
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/working/ripley/deathripley /obj/mecha/working/ripley/deathripley
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
@@ -40,6 +46,11 @@
lights_power = 60 lights_power = 60
wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley
step_energy_drain = 0 step_energy_drain = 0
max_hull_equip = 1
max_weapon_equip = 1
max_utility_equip = 3
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/working/ripley/deathripley/New() /obj/mecha/working/ripley/deathripley/New()
..() ..()

View File

@@ -1,7 +1,10 @@
/obj/mecha/working /obj/mecha/working
internal_damage_threshold = 60 internal_damage_threshold = 60
var/list/cargo = new max_hull_equip = 1
var/cargo_capacity = 5 max_weapon_equip = 0
max_utility_equip = 3
max_universal_equip = 1
max_special_equip = 1
/obj/mecha/working/initialize() /obj/mecha/working/initialize()
. = ..() . = ..()
@@ -9,6 +12,7 @@
if(isPlayerLevel(T.z)) if(isPlayerLevel(T.z))
new /obj/item/mecha_parts/mecha_tracking(src) new /obj/item/mecha_parts/mecha_tracking(src)
/* This stuff has been generalized!
/obj/mecha/working/Destroy() /obj/mecha/working/Destroy()
for(var/mob/M in src) for(var/mob/M in src)
if(M==src.occupant) if(M==src.occupant)
@@ -54,6 +58,6 @@
output += "Nothing" output += "Nothing"
output += "</div>" output += "</div>"
return output return output
*/
/obj/mecha/working/range_action(atom/target as obj|mob|turf) /obj/mecha/working/range_action(atom/target as obj|mob|turf)
return return

View File

@@ -0,0 +1,7 @@
author: Mechoid
delete-after: True
changes:
- rscadd: "Mechs now have multiple equipment slot types, and more slots in total for greater customization."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB