Merge pull request #49563 from Fikou/clarke

[READY] Adds Clarke, your new mech buddy!
This commit is contained in:
Rohesie
2020-03-19 18:29:49 -03:00
committed by GitHub
26 changed files with 378 additions and 183 deletions
@@ -89,7 +89,7 @@
/turf/open/floor/mineral/titanium/yellow/airless,
/area/ruin/space/has_grav/powered/mechtransport)
"x" = (
/obj/structure/mecha_wreckage/ripley/firefighter,
/obj/structure/mecha_wreckage/clarke,
/turf/open/floor/mineral/titanium/yellow/airless,
/area/ruin/space/has_grav/powered/mechtransport)
"y" = (
+1 -1
View File
@@ -819,7 +819,7 @@
/turf/open/floor/plating,
/area/awaymission/spacebattle/cruiser)
"dL" = (
/obj/mecha/working/ripley/firefighter{
/obj/mecha/working/clarke{
ruin_mecha = 1
},
/turf/open/floor/plating,
+1
View File
@@ -21,6 +21,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
/obj/item/toy/prize/odysseus = 1,
/obj/item/toy/prize/phazon = 1,
/obj/item/toy/prize/reticence = 1,
/obj/item/toy/prize/clarke = 1,
/obj/item/toy/cards/deck = 2,
/obj/item/toy/nuke = 2,
/obj/item/toy/minimeteor = 2,
+1 -1
View File
@@ -24,8 +24,8 @@
var/list/part_sets = list(
"Cyborg",
"Ripley",
"Firefighter",
"Odysseus",
"Clarke",
"Gygax",
"Durand",
"H.O.N.K",
+9 -4
View File
@@ -3,7 +3,7 @@
desc = "Exosuit"
icon = 'icons/mecha/mecha.dmi'
density = TRUE //Dense. To raise the heat.
opacity = 1 ///opaque. Menacing.
opacity = TRUE //opaque. Menacing.
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_EXTREMELY_STRONG
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -25,9 +25,12 @@
armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5)
var/equipment_disabled = 0 //disabled due to EMP
var/obj/item/stock_parts/cell/cell ///Keeps track of the mech's cell
var/obj/item/stock_parts/scanning_module/scanmod ///Keeps track of the mech's scanning module
var/obj/item/stock_parts/capacitor/capacitor ///Keeps track of the mech's capacitor
/// Keeps track of the mech's cell
var/obj/item/stock_parts/cell/cell
/// Keeps track of the mech's scanning module
var/obj/item/stock_parts/scanning_module/scanmod
/// Keeps track of the mech's capacitor
var/obj/item/stock_parts/capacitor/capacitor
var/construction_state = MECHA_LOCKED
var/last_message = 0
var/add_req_access = 1
@@ -108,6 +111,8 @@
var/phasing_energy_drain = 200
var/phase_state = "" //icon_state when phasing
var/strafe = FALSE //If we are strafing
var/canstrafe = TRUE //if we can turn on strafing
var/haslights = TRUE //if we can turn on lights
var/nextsmash = 0
var/smashcooldown = 3 //deciseconds
+8 -4
View File
@@ -6,9 +6,11 @@
if(enclosed)
internals_action.Grant(user, src)
cycle_action.Grant(user, src)
lights_action.Grant(user, src)
if(haslights)
lights_action.Grant(user, src)
stats_action.Grant(user, src)
strafing_action.Grant(user, src)
if(canstrafe)
strafing_action.Grant(user, src)
/obj/mecha/proc/RemoveActions(mob/living/user, human_occupant = 0)
@@ -16,9 +18,11 @@
eject_action.Remove(user)
internals_action.Remove(user)
cycle_action.Remove(user)
lights_action.Remove(user)
if(haslights)
lights_action.Remove(user)
stats_action.Remove(user)
strafing_action.Remove(user)
if(canstrafe)
strafing_action.Remove(user)
/datum/action/innate/mecha
+62 -53
View File
@@ -537,156 +537,164 @@
user.visible_message("<span class='notice'>[user] unfastens Gygax Armor Plates.</span>", "<span class='notice'>You unfasten Gygax Armor Plates.</span>")
return TRUE
/datum/component/construction/unordered/mecha_chassis/firefighter
result = /datum/component/construction/mecha/firefighter
/datum/component/construction/unordered/mecha_chassis/clarke
result = /datum/component/construction/mecha/clarke
steps = list(
/obj/item/mecha_parts/part/ripley_torso,
/obj/item/mecha_parts/part/ripley_left_arm,
/obj/item/mecha_parts/part/ripley_right_arm,
/obj/item/mecha_parts/part/ripley_left_leg,
/obj/item/mecha_parts/part/ripley_right_leg,
/obj/item/clothing/suit/fire
/obj/item/mecha_parts/part/clarke_torso,
/obj/item/mecha_parts/part/clarke_left_arm,
/obj/item/mecha_parts/part/clarke_right_arm,
/obj/item/mecha_parts/part/clarke_head
)
/datum/component/construction/mecha/firefighter
result = /obj/mecha/working/ripley/firefighter
base_icon = "fireripley"
/datum/component/construction/mecha/clarke
result = /obj/mecha/working/clarke
base_icon = "clarke"
circuit_control = /obj/item/circuitboard/mecha/ripley/main
circuit_periph = /obj/item/circuitboard/mecha/ripley/peripherals
circuit_control = /obj/item/circuitboard/mecha/clarke/main
circuit_periph = /obj/item/circuitboard/mecha/clarke/peripherals
inner_plating = /obj/item/stack/sheet/plasteel
inner_plating_amount = 5
/datum/component/construction/mecha/firefighter/get_outer_plating_steps()
outer_plating = /obj/item/stack/sheet/mineral/gold
outer_plating_amount = 5
/datum/component/construction/mecha/clarke/get_frame_steps()
return list(
list(
"key" = /obj/item/stack/sheet/plasteel,
"amount" = 5,
"back_key" = TOOL_WELDER,
"desc" = "Internal armor is welded."
),
list(
"key" = /obj/item/stack/sheet/plasteel,
"amount" = 5,
"back_key" = TOOL_CROWBAR,
"desc" = "External armor is being installed."
"key" = /obj/item/stack/conveyor,
"amount" = 4,
"desc" = "The treads are added."
),
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
"desc" = "External armor is installed."
"desc" = "The hydraulic systems are disconnected."
),
list(
"key" = TOOL_WELDER,
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_WRENCH,
"desc" = "External armor is wrenched."
"desc" = "The hydraulic systems are connected."
),
list(
"key" = /obj/item/stack/cable_coil,
"amount" = 5,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "The hydraulic systems are active."
),
list(
"key" = TOOL_WIRECUTTER,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "The wiring is added."
)
)
/datum/component/construction/mecha/firefighter/custom_action(obj/item/I, mob/living/user, diff)
/datum/component/construction/mecha/clarke/custom_action(obj/item/I, mob/living/user, diff)
if(!..())
return FALSE
//TODO: better messages.
switch(index)
if(1)
user.visible_message("<span class='notice'>[user] connects [parent] hydraulic systems.</span>", "<span class='notice'>You connect [parent] hydraulic systems.</span>")
user.visible_message("<span class='notice'>[user] adds the tread systems.</span>", "<span class='notice'>You add the tread systems.</span>")
if(2)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] connects [parent] hydraulic systems.</span>", "<span class='notice'>You connect [parent] hydraulic systems.</span>")
else
user.visible_message("<span class='notice'>[user] removes the tread systems.</span>", "<span class='notice'>You remove the tread systems.</span>")
if(3)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] activates [parent] hydraulic systems.</span>", "<span class='notice'>You activate [parent] hydraulic systems.</span>")
else
user.visible_message("<span class='notice'>[user] disconnects [parent] hydraulic systems.</span>", "<span class='notice'>You disconnect [parent] hydraulic systems.</span>")
if(3)
if(4)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] adds the wiring to [parent].</span>", "<span class='notice'>You add the wiring to [parent].</span>")
else
user.visible_message("<span class='notice'>[user] deactivates [parent] hydraulic systems.</span>", "<span class='notice'>You deactivate [parent] hydraulic systems.</span>")
if(4)
if(5)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] adjusts the wiring of [parent].</span>", "<span class='notice'>You adjust the wiring of [parent].</span>")
else
user.visible_message("<span class='notice'>[user] removes the wiring from [parent].</span>", "<span class='notice'>You remove the wiring from [parent].</span>")
if(5)
if(6)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs [I] into [parent].</span>", "<span class='notice'>You install [I] into [parent].</span>")
else
user.visible_message("<span class='notice'>[user] disconnects the wiring of [parent].</span>", "<span class='notice'>You disconnect the wiring of [parent].</span>")
if(6)
if(7)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the mainboard.</span>", "<span class='notice'>You secure the mainboard.</span>")
else
user.visible_message("<span class='notice'>[user] removes the central control module from [parent].</span>", "<span class='notice'>You remove the central computer mainboard from [parent].</span>")
if(7)
if(8)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs [I]into [parent].</span>", "<span class='notice'>You install [I]into [parent].</span>")
user.visible_message("<span class='notice'>[user] installs [I] into [parent].</span>", "<span class='notice'>You install [I] into [parent].</span>")
else
user.visible_message("<span class='notice'>[user] unfastens the mainboard.</span>", "<span class='notice'>You unfasten the mainboard.</span>")
if(8)
if(9)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the peripherals control module.</span>", "<span class='notice'>You secure the peripherals control module.</span>")
else
user.visible_message("<span class='notice'>[user] removes the peripherals control module from [parent].</span>", "<span class='notice'>You remove the peripherals control module from [parent].</span>")
if(9)
if(10)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs [I] into [parent].</span>", "<span class='notice'>You install [I] into [parent].</span>")
else
user.visible_message("<span class='notice'>[user] unfastens the peripherals control module.</span>", "<span class='notice'>You unfasten the peripherals control module.</span>")
if(10)
if(11)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the scanner module.</span>", "<span class='notice'>You secure the scanner module.</span>")
else
user.visible_message("<span class='notice'>[user] removes the scanner module from [parent].</span>", "<span class='notice'>You remove the scanner module from [parent].</span>")
if(11)
if(12)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs [I] to [parent].</span>", "<span class='notice'>You install [I] to [parent].</span>")
else
user.visible_message("<span class='notice'>[user] unfastens the scanner module.</span>", "<span class='notice'>You unfasten the scanner module.</span>")
if(12)
if(13)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the capacitor.</span>", "<span class='notice'>You secure the capacitor.</span>")
else
user.visible_message("<span class='notice'>[user] removes the capacitor from [parent].</span>", "<span class='notice'>You remove the capacitor from [parent].</span>")
if(13)
if(14)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs [I] into [parent].</span>", "<span class='notice'>You install [I] into [parent].</span>")
else
user.visible_message("<span class='notice'>[user] unfastens the capacitor.</span>", "<span class='notice'>You unfasten the capacitor.</span>")
if(14)
if(15)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the power cell.</span>", "<span class='notice'>You secure the power cell.</span>")
else
user.visible_message("<span class='notice'>[user] pries the power cell from [parent].</span>", "<span class='notice'>You pry the power cell from [parent].</span>")
if(15)
if(16)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs the internal armor layer to [parent].</span>", "<span class='notice'>You install the internal armor layer to [parent].</span>")
else
user.visible_message("<span class='notice'>[user] unfastens the power cell.</span>", "<span class='notice'>You unfasten the power cell.</span>")
if(16)
if(17)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the internal armor layer.</span>", "<span class='notice'>You secure the internal armor layer.</span>")
else
user.visible_message("<span class='notice'>[user] pries internal armor layer from [parent].</span>", "<span class='notice'>You pry internal armor layer from [parent].</span>")
if(17)
if(18)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] welds the internal armor layer to [parent].</span>", "<span class='notice'>You weld the internal armor layer to [parent].</span>")
else
user.visible_message("<span class='notice'>[user] unfastens the internal armor layer.</span>", "<span class='notice'>You unfasten the internal armor layer.</span>")
if(18)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] starts to install the external armor layer to [parent].</span>", "<span class='notice'>You install the external armor layer to [parent].</span>")
else
user.visible_message("<span class='notice'>[user] cuts the internal armor layer from [parent].</span>", "<span class='notice'>You cut the internal armor layer from [parent].</span>")
if(19)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] installs the external reinforced armor layer to [parent].</span>", "<span class='notice'>You install the external reinforced armor layer to [parent].</span>")
user.visible_message("<span class='notice'>[user] installs the external armor layer to [parent].</span>", "<span class='notice'>You install the external reinforced armor layer to [parent].</span>")
else
user.visible_message("<span class='notice'>[user] removes the external armor from [parent].</span>", "<span class='notice'>You remove the external armor from [parent].</span>")
user.visible_message("<span class='notice'>[user] cuts the internal armor layer from [parent].</span>", "<span class='notice'>You cut the internal armor layer from [parent].</span>")
if(20)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] secures the external armor layer.</span>", "<span class='notice'>You secure the external reinforced armor layer.</span>")
else
user.visible_message("<span class='notice'>[user] pries external armor layer from [parent].</span>", "<span class='notice'>You pry external armor layer from [parent].</span>")
user.visible_message("<span class='notice'>[user] pries the external armor layer from [parent].</span>", "<span class='notice'>You pry the external armor layer from [parent].</span>")
if(21)
if(diff==FORWARD)
user.visible_message("<span class='notice'>[user] welds the external armor layer to [parent].</span>", "<span class='notice'>You weld the external armor layer to [parent].</span>")
@@ -694,6 +702,7 @@
user.visible_message("<span class='notice'>[user] unfastens the external armor layer.</span>", "<span class='notice'>You unfasten the external armor layer.</span>")
return TRUE
/datum/component/construction/unordered/mecha_chassis/honker
result = /datum/component/construction/mecha/honker
steps = list(
+31 -4
View File
@@ -182,12 +182,31 @@
desc = "A set of armor plates for the Durand. Built heavy to resist an incredible amount of brute force."
icon_state = "durand_armor"
////////// Firefighter
////////// Clarke
/obj/item/mecha_parts/chassis/firefighter
name = "\improper Firefighter chassis"
construct_type = /datum/component/construction/unordered/mecha_chassis/firefighter
/obj/item/mecha_parts/chassis/clarke
name = "\improper Clarke chassis"
construct_type = /datum/component/construction/unordered/mecha_chassis/clarke
/obj/item/mecha_parts/part/clarke_torso
name = "\improper Clarke torso"
desc = "A torso part of Clarke. Contains power unit, processing core and life support systems."
icon_state = "clarke_harness"
/obj/item/mecha_parts/part/clarke_head
name = "\improper Clarke head"
desc = "A Clarke head. Contains an integrated diagnostic HUD scanner."
icon_state = "clarke_head"
/obj/item/mecha_parts/part/clarke_left_arm
name = "\improper Clarke left arm"
desc = "A Clarke left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "clarke_l_arm"
/obj/item/mecha_parts/part/clarke_right_arm
name = "\improper Clarke right arm"
desc = "A Clarke right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "clarke_r_arm"
////////// HONK
@@ -352,3 +371,11 @@
/obj/item/circuitboard/mecha/phazon/main
name = "Phazon Central Control module (Exosuit Board)"
/obj/item/circuitboard/mecha/clarke/peripherals
name = "Clarke Peripherals Control module (Exosuit Board)"
icon_state = "mcontroller"
/obj/item/circuitboard/mecha/clarke/main
name = "Clarke Central Control module (Exosuit Board)"
icon_state = "mainboard"
+19 -11
View File
@@ -147,7 +147,8 @@
/obj/structure/mecha_wreckage/ripley
name = "\improper Ripley wreckage"
icon_state = "ripley-broken"
parts = list(/obj/item/mecha_parts/part/ripley_torso,
parts = list(
/obj/item/mecha_parts/part/ripley_torso,
/obj/item/mecha_parts/part/ripley_left_arm,
/obj/item/mecha_parts/part/ripley_right_arm,
/obj/item/mecha_parts/part/ripley_left_leg,
@@ -157,15 +158,15 @@
name = "\improper Ripley MK-II wreckage"
icon_state = "ripleymkii-broken"
/obj/structure/mecha_wreckage/ripley/firefighter
name = "\improper Firefighter wreckage"
icon_state = "firefighter-broken"
parts = list(/obj/item/mecha_parts/part/ripley_torso,
/obj/item/mecha_parts/part/ripley_left_arm,
/obj/item/mecha_parts/part/ripley_right_arm,
/obj/item/mecha_parts/part/ripley_left_leg,
/obj/item/mecha_parts/part/ripley_right_leg,
/obj/item/clothing/suit/fire)
/obj/structure/mecha_wreckage/clarke
name = "\improper Clarke wreckage"
icon_state = "clarke-broken"
parts = list(
/obj/item/mecha_parts/part/clarke_torso,
/obj/item/mecha_parts/part/clarke_head,
/obj/item/mecha_parts/part/clarke_left_arm,
/obj/item/mecha_parts/part/clarke_right_arm,
/obj/item/stack/conveyor)
/obj/structure/mecha_wreckage/ripley/deathripley
name = "\improper Death-Ripley wreckage"
@@ -177,7 +178,6 @@
icon_state = "honker-broken"
desc = "All is right in the universe."
parts = list(
/obj/item/mecha_parts/chassis/honker,
/obj/item/mecha_parts/part/honker_torso,
/obj/item/mecha_parts/part/honker_head,
/obj/item/mecha_parts/part/honker_left_arm,
@@ -199,6 +199,14 @@
/obj/structure/mecha_wreckage/phazon
name = "\improper Phazon wreckage"
icon_state = "phazon-broken"
parts = list(
/obj/item/mecha_parts/part/phazon_torso,
/obj/item/mecha_parts/part/phazon_head,
/obj/item/mecha_parts/part/phazon_left_arm,
/obj/item/mecha_parts/part/phazon_right_arm,
/obj/item/mecha_parts/part/phazon_left_leg,
/obj/item/mecha_parts/part/phazon_right_leg)
/obj/structure/mecha_wreckage/odysseus
+80
View File
@@ -0,0 +1,80 @@
///Lavaproof, fireproof, fast mech with low armor and higher energy consumption, cannot strafe and has an internal ore box.
/obj/mecha/working/clarke
desc = "Combining man and machine for a better, stronger engineer. Can even resist lava!"
name = "\improper Clarke"
icon_state = "clarke"
max_temperature = 65000
max_integrity = 200
step_in = 1.25
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
lights_power = 7
deflect_chance = 10
step_energy_drain = 15 //slightly higher energy drain since you movin those wheels FAST
armor = list("melee" = 20, "bullet" = 10, "laser" = 20, "energy" = 10, "bomb" = 60, "bio" = 0, "rad" = 70, "fire" = 100, "acid" = 100) //low armor to compensate for fire protection and speed
max_equip = 7
wreckage = /obj/structure/mecha_wreckage/clarke
enter_delay = 40
canstrafe = FALSE
/// Handles an internal ore box for Clarke
var/obj/structure/ore_box/box
/obj/mecha/working/clarke/Initialize()
. = ..()
box = new /obj/structure/ore_box(src)
var/obj/item/mecha_parts/mecha_equipment/orebox_manager/ME = new(src)
ME.attach(src)
/obj/mecha/working/clarke/Destroy()
box.dump_box_contents()
return ..()
/obj/mecha/working/clarke/moved_inside(mob/living/carbon/human/H)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED]
hud.add_hud_to(H)
/obj/mecha/working/clarke/go_out()
if(isliving(occupant))
var/mob/living/L = occupant
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED]
hud.remove_hud_from(L)
return ..()
/obj/mecha/working/clarke/mmi_moved_inside(obj/item/mmi/M, mob/user)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED]
var/mob/living/brain/B = M.brainmob
hud.add_hud_to(B)
//Ore Box Controls
///Special equipment for the Clarke mech, handles moving ore without giving the mech a hydraulic clamp and cargo compartment.
/obj/item/mecha_parts/mecha_equipment/orebox_manager
name = "ore storage module"
desc = "An automated ore box management device."
icon_state = "mecha_clamp" //None of this should matter, this shouldn't ever exist outside a mech anyway.
selectable = FALSE
detachable = FALSE
salvageable = FALSE
/// Var to avoid istype checking every time the topic button is pressed. This will only work inside Clarke mechs.
var/obj/mecha/working/clarke/hostmech
/obj/item/mecha_parts/mecha_equipment/orebox_manager/attach(obj/mecha/M)
. = ..()
if(istype(M, /obj/mecha/working/clarke))
hostmech = M
/obj/item/mecha_parts/mecha_equipment/orebox_manager/detach()
hostmech = null //just in case
return ..()
/obj/item/mecha_parts/mecha_equipment/orebox_manager/Topic(href,href_list)
. = ..()
if(!hostmech || !hostmech.box)
return
hostmech.box.dump_box_contents()
/obj/item/mecha_parts/mecha_equipment/orebox_manager/get_equip_info()
return "[..()] [hostmech?.box ? "<a href='?src=[REF(src)];mode=0'>Unload Cargo</a>" : "Error"]"
+37 -55
View File
@@ -4,8 +4,10 @@
icon_state = "ripley"
silicon_icon_state = "ripley-empty"
step_in = 1.5 //Move speed, lower is faster.
var/fast_pressure_step_in = 1.5 //step_in while in low pressure conditions
var/slow_pressure_step_in = 2.0 //step_in while in normal pressure conditions
/// How fast the mech is in low pressure
var/fast_pressure_step_in = 1.5
/// How fast the mech is in normal pressure
var/slow_pressure_step_in = 2
max_temperature = 20000
max_integrity = 200
lights_power = 7
@@ -14,35 +16,21 @@
max_equip = 6
wreckage = /obj/structure/mecha_wreckage/ripley
internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_MINING)
var/list/cargo = new
var/cargo_capacity = 15
var/hides = 0
enclosed = FALSE //Normal ripley has an open cockpit design
enter_delay = 10 //can enter in a quarter of the time of other mechs
exit_delay = 10
opacity = FALSE //Ripley has a window
/// Amount of Goliath hides attached to the mech
var/hides = 0
/// List of all things in Ripley's Cargo Compartment
var/list/cargo = new
/// How much things Ripley can carry in their Cargo Compartment
var/cargo_capacity = 15
/obj/mecha/working/ripley/Move()
. = ..()
if(.)
collect_ore()
update_pressure()
/obj/mecha/working/ripley/proc/collect_ore()
if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo
if(ore_box)
for(var/obj/item/stack/ore/ore in range(1, src))
if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it!
ore.forceMove(ore_box)
/obj/mecha/working/ripley/Destroy()
for(var/atom/movable/A in cargo)
A.forceMove(drop_location())
step_rand(A)
cargo.Cut()
return ..()
/obj/mecha/working/ripley/go_out()
..()
update_icon()
@@ -56,40 +44,29 @@
possible_int_damage -= (MECHA_INT_TEMP_CONTROL + MECHA_INT_TANK_BREACH) //if we don't even have an air tank, these two doesn't make a ton of sense.
. = ..()
/obj/mecha/working/ripley/Initialize()
. = ..()
AddComponent(/datum/component/armor_plate,3,/obj/item/stack/sheet/animalhide/goliath_hide,list("melee" = 10, "bullet" = 5, "laser" = 5))
/obj/mecha/working/ripley/Destroy()
for(var/atom/movable/A in cargo)
A.forceMove(drop_location())
step_rand(A)
cargo.Cut()
return ..()
/obj/mecha/working/ripley/mkii
desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection"
desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection and armor."
name = "\improper APLU MK-II \"Ripley\""
icon_state = "ripleymkii"
fast_pressure_step_in = 2 //step_in while in low pressure conditions
slow_pressure_step_in = 4 //step_in while in normal pressure conditions
step_in = 4
armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
wreckage = /obj/structure/mecha_wreckage/ripley/mkii
enclosed = TRUE
enter_delay = 40
silicon_icon_state = null
opacity = TRUE
/obj/mecha/working/ripley/firefighter
desc = "Autonomous Power Loader Unit MK-III. This model is refitted with a pressurized cabin and additional thermal protection."
name = "\improper APLU MK-III \"Firefighter\""
icon_state = "firefighter"
max_temperature = 65000
max_temperature = 30000
max_integrity = 250
fast_pressure_step_in = 2 //step_in while in low pressure conditions
slow_pressure_step_in = 4 //step_in while in normal pressure conditions
step_in = 4
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
lights_power = 7
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 70, "fire" = 100, "acid" = 100)
max_equip = 5 // More armor, less tools
wreckage = /obj/structure/mecha_wreckage/ripley/firefighter
wreckage = /obj/structure/mecha_wreckage/ripley/mkii
enclosed = TRUE
enter_delay = 40
silicon_icon_state = null
@@ -197,18 +174,6 @@
output += "</div>"
return output
/obj/mecha/working/ripley/proc/update_pressure()
var/turf/T = get_turf(loc)
if(lavaland_equipment_pressure_check(T))
step_in = fast_pressure_step_in
for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
drill.equip_cooldown = initial(drill.equip_cooldown)/2
else
step_in = slow_pressure_step_in
for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
drill.equip_cooldown = initial(drill.equip_cooldown)
/obj/mecha/working/ripley/relay_container_resist(mob/living/user, obj/O)
to_chat(user, "<span class='notice'>You lean on the back of [O] and start pushing so it falls out of [src].</span>")
if(do_after(user, 300, target = O))
@@ -220,3 +185,20 @@
else
if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
to_chat(user, "<span class='warning'>You fail to push [O] out of [src]!</span>")
/**
* Makes the mecha go faster and halves the mecha drill cooldown if in Lavaland pressure.
*
* Checks for Lavaland pressure, if that works out the mech's speed is equal to fast_pressure_step_in and the cooldown for the mecha drill is halved. If not it uses slow_pressure_step_in and drill cooldown is normal.
*/
/obj/mecha/working/ripley/proc/update_pressure()
var/turf/T = get_turf(loc)
if(lavaland_equipment_pressure_check(T))
step_in = fast_pressure_step_in
for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
drill.equip_cooldown = initial(drill.equip_cooldown) * 0.5
else
step_in = slow_pressure_step_in
for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
drill.equip_cooldown = initial(drill.equip_cooldown)
+18
View File
@@ -1,2 +1,20 @@
/obj/mecha/working
internal_damage_threshold = 60
/obj/mecha/working/Move()
. = ..()
if(.)
collect_ore()
/**
* Handles collecting ore.
*
* Checks for a hydraulic clamp or ore box manager and if it finds an ore box inside them puts ore in the ore box.
*/
/obj/mecha/working/proc/collect_ore()
if((locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment) || (locate(/obj/item/mecha_parts/mecha_equipment/orebox_manager) in equipment))
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in contents
if(ore_box)
for(var/obj/item/stack/ore/ore in range(1, src))
if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it!
ore.forceMove(ore_box)
-8
View File
@@ -101,14 +101,6 @@
<li>Install the external reinforced armor plating (Not included due to Nanotrasen regulations. Can be made using 5 reinforced metal sheets.)</li>
<li>Secure the external reinforced armor plating with a wrench</li>
<li>Weld the external reinforced armor plating to the chassis</li>
<li></li>
<li>Additional Information:</li>
<li>The firefighting variation is made in a similar fashion.</li>
<li>A firesuit must be connected to the Firefighter chassis for heat shielding.</li>
<li>Internal armor is plasteel for additional strength.</li>
<li>External armor must be installed in 2 parts, totaling 10 sheets.</li>
<li>Completed mech is more resiliant against fire, and is a bit more durable overall</li>
<li>Nanotrasen is determined to the safety of its <s>investments</s> employees.</li>
</ol>
</body>
</html>
+24 -20
View File
@@ -503,64 +503,68 @@
/obj/item/toy/prize/ripley
name = "toy Ripley"
desc = "Mini-Mecha action figure! Collect them all! 1/12."
desc = "Mini-Mecha action figure! Collect them all! 1/13."
/obj/item/toy/prize/fireripley
name = "toy firefighting Ripley"
desc = "Mini-Mecha action figure! Collect them all! 2/12."
desc = "Mini-Mecha action figure! Collect them all! 2/13."
icon_state = "fireripleytoy"
/obj/item/toy/prize/deathripley
name = "toy deathsquad Ripley"
desc = "Mini-Mecha action figure! Collect them all! 3/12."
desc = "Mini-Mecha action figure! Collect them all! 3/13."
icon_state = "deathripleytoy"
/obj/item/toy/prize/gygax
name = "toy Gygax"
desc = "Mini-Mecha action figure! Collect them all! 4/12."
desc = "Mini-Mecha action figure! Collect them all! 4/13."
icon_state = "gygaxtoy"
/obj/item/toy/prize/durand
name = "toy Durand"
desc = "Mini-Mecha action figure! Collect them all! 5/12."
icon_state = "durandprize"
desc = "Mini-Mecha action figure! Collect them all! 5/13."
icon_state = "durandtoy"
/obj/item/toy/prize/honk
name = "toy H.O.N.K."
desc = "Mini-Mecha action figure! Collect them all! 6/12."
icon_state = "honkprize"
desc = "Mini-Mecha action figure! Collect them all! 6/13."
icon_state = "honktoy"
/obj/item/toy/prize/marauder
name = "toy Marauder"
desc = "Mini-Mecha action figure! Collect them all! 7/12."
icon_state = "marauderprize"
desc = "Mini-Mecha action figure! Collect them all! 7/13."
icon_state = "maraudertoy"
/obj/item/toy/prize/seraph
name = "toy Seraph"
desc = "Mini-Mecha action figure! Collect them all! 8/12."
icon_state = "seraphprize"
desc = "Mini-Mecha action figure! Collect them all! 8/13."
icon_state = "seraphtoy"
/obj/item/toy/prize/mauler
name = "toy Mauler"
desc = "Mini-Mecha action figure! Collect them all! 9/12."
icon_state = "maulerprize"
desc = "Mini-Mecha action figure! Collect them all! 9/13."
icon_state = "maulertoy"
/obj/item/toy/prize/odysseus
name = "toy Odysseus"
desc = "Mini-Mecha action figure! Collect them all! 10/12."
icon_state = "odysseusprize"
desc = "Mini-Mecha action figure! Collect them all! 10/13."
icon_state = "odysseustoy"
/obj/item/toy/prize/phazon
name = "toy Phazon"
desc = "Mini-Mecha action figure! Collect them all! 11/12."
icon_state = "phazonprize"
desc = "Mini-Mecha action figure! Collect them all! 11/13."
icon_state = "phazontoy"
/obj/item/toy/prize/reticence
name = "toy Reticence"
desc = "Mini-Mecha action figure! Collect them all! 12/12."
icon_state = "reticenceprize"
desc = "Mini-Mecha action figure! Collect them all! 12/13."
icon_state = "reticencetoy"
quiet = 1
/obj/item/toy/prize/clarke
name = "toy Clarke"
desc = "Mini-Mecha action figure! Collect them all! 13/13."
icon_state = "clarketoy"
/obj/item/toy/talking
name = "talking action figure"
+4 -4
View File
@@ -18,10 +18,10 @@
reward = 13000
wanted_types = list(/obj/mecha/working/ripley/mkii)
/datum/bounty/item/mech/firefighter
name = "APLU \"Firefighter\""
reward = 18000
wanted_types = list(/obj/mecha/working/ripley/firefighter)
/datum/bounty/item/mech/clarke
name = "Clarke"
reward = 16000
wanted_types = list(/obj/mecha/working/clarke)
/datum/bounty/item/mech/odysseus
name = "Odysseus"
+1
View File
@@ -148,6 +148,7 @@
/obj/item/toy/prize/phazon,
/obj/item/toy/prize/reticence,
/obj/item/toy/prize/honk,
/obj/item/toy/prize/clarke,
/obj/item/toy/plush/carpplushie,
/obj/item/toy/redbutton,
/obj/item/toy/windupToolbox,
@@ -917,19 +917,21 @@
/datum/design/conveyor_belt
name = "Conveyor Belt"
id = "conveyor_belt"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(/datum/material/iron = 3000)
build_path = /obj/item/stack/conveyor
category = list("initial", "Construction")
category = list("initial", "Construction", "Electronics")
maxstack = 30
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/conveyor_switch
name = "Conveyor Belt Switch"
id = "conveyor_switch"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(/datum/material/iron = 450, /datum/material/glass = 190)
build_path = /obj/item/conveyor_switch_construct
category = list("initial", "Construction")
category = list("initial", "Construction", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/laptop
name = "Laptop Frame"
@@ -133,6 +133,22 @@
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/clarke_main
name = "\"Clarke\" Central Control module"
desc = "Allows for the construction of a \"Clarke\" Central Control module."
id = "clarke_main"
build_path = /obj/item/circuitboard/mecha/clarke/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/clarke_peri
name = "\"Clarke\" Peripherals Control module"
desc = "Allows for the construction of a \"Clarke\" Peripheral Control module."
id = "clarke_peri"
build_path = /obj/item/circuitboard/mecha/clarke/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
////////////////////////////////////////
/////////// Mecha Equpment /////////////
////////////////////////////////////////
@@ -72,16 +72,6 @@
construction_time = 100
category = list("Ripley")
//firefighter subtype
/datum/design/firefighter_chassis
name = "Exosuit Chassis (APLU \"Firefighter\")"
id = "firefighter_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/firefighter
materials = list(/datum/material/iron=20000)
construction_time = 100
category = list("Firefighter")
/datum/design/ripley_torso
name = "Exosuit Torso (APLU \"Ripley\")"
id = "ripley_torso"
@@ -475,6 +465,52 @@
construction_time = 300
category = list("Phazon")
//Clarke
/datum/design/clarke_chassis
name = "Exosuit Chassis (\"Clarke\")"
id = "clarke_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/clarke
materials = list(/datum/material/iron=20000)
construction_time = 100
category = list("Clarke")
/datum/design/clarke_torso
name = "Exosuit Torso (\"Clarke\")"
id = "clarke_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/clarke_torso
materials = list(/datum/material/iron=20000,/datum/material/glass = 7500)
construction_time = 200
category = list("Clarke")
/datum/design/clarke_head
name = "Exosuit Head (\"Clarke\")"
id = "clarke_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/clarke_head
materials = list(/datum/material/iron=6000,/datum/material/glass = 10000)
construction_time = 100
category = list("Clarke")
/datum/design/clarke_left_arm
name = "Exosuit Left Arm (\"Clarke\")"
id = "clarke_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/clarke_left_arm
materials = list(/datum/material/iron=15000)
construction_time = 150
category = list("Clarke")
/datum/design/clarke_right_arm
name = "Exosuit Right Arm (\"Clarke\")"
id = "clarke_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/clarke_right_arm
materials = list(/datum/material/iron=15000)
construction_time = 150
category = list("Clarke")
//Exosuit Equipment
/datum/design/ripleyupgrade
name = "Ripley MK-1 to MK-II conversion kit"
+11 -2
View File
@@ -11,7 +11,7 @@
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "c-reader", "desttagger", "salestagger", "handlabel", "packagewrap",
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "bepis", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab",
"paystand", "space_heater", "bucket", "sec_rshot", "sec_beanbag_slug", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "rglass", "plasteel",
"plastitanium", "plasmaglass", "plasmareinforcedglass", "titaniumglass", "plastitaniumglass", "plastic_knife", "plastic_fork", "plastic_spoon")
"plastitanium", "plasmaglass", "plasmareinforcedglass", "titaniumglass", "plastitaniumglass", "plastic_knife", "plastic_fork", "plastic_spoon", "conveyor_belt", "conveyor_switch")
/datum/techweb_node/mmi
id = "mmi"
@@ -33,7 +33,7 @@
starting_node = TRUE
display_name = "Mechanical Exosuits"
description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human."
design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "firefighter_chassis", "ripley_torso", "ripley_left_arm",
design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "ripley_torso", "ripley_left_arm",
"ripley_right_arm", "ripley_left_leg", "ripley_right_leg", "ripley_main", "ripley_peri", "ripleyupgrade", "mech_hydraulic_clamp")
/datum/techweb_node/mech_tools
@@ -733,6 +733,15 @@
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
/datum/techweb_node/clarke
id = "mecha_clarke"
display_name = "EXOSUIT: Clarke"
description = "Clarke exosuit designs"
prereq_ids = list("engineering")
design_ids = list("clarke_chassis", "clarke_torso", "clarke_head", "clarke_left_arm", "clarke_right_arm", "clarke_main", "clarke_peri")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
/datum/techweb_node/gygax
id = "mech_gygax"
display_name = "EXOSUIT: Gygax"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 162 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 34 KiB

+1 -1
View File
@@ -74,7 +74,7 @@ As a Scientist, getting drunk just enough will speed up research. Skol!
As a Roboticist, keep an ear out for anomaly announcements. If you get your hands on an anomaly core, you can build a Phazon mech!
As a Roboticist, you can repair your cyborgs with a welding tool. If they have taken burn damage, you can remove their battery, expose the wiring with a screwdriver and replace their wires with a cable coil.
As a Roboticist, you can reset a cyborg's module by cutting and mending the reset wire with a wire cutter.
As a Roboticist, you can greatly help out Shaft Miners by building a Firefighter APLU equipped with a hydraulic clamp and plasma cutter. The mech is ash storm proof and can even walk across lava!
As a Roboticist, you can greatly help out Shaft Miners by building a Clarke equipped with a hydraulic clamp and plasma cutter. The mech is ash storm proof and can even walk across lava!
As a Roboticist, you can augment people with cyborg limbs. Augmented limbs can easily be repaired with cables and welders.
As the AI, you can click on people's names to look at them. This only works if there are cameras that can see them, they aren't wearing agent IDs and aren't using digital camouflage as changelings.
As the AI, you can quickly open and close doors by holding shift while clicking them, bolt them when holding ctrl, and even shock them while holding alt.
+1
View File
@@ -844,6 +844,7 @@
#include "code\game\mecha\equipment\weapons\weapons.dm"
#include "code\game\mecha\medical\medical.dm"
#include "code\game\mecha\medical\odysseus.dm"
#include "code\game\mecha\working\clarke.dm"
#include "code\game\mecha\working\ripley.dm"
#include "code\game\mecha\working\working.dm"
#include "code\game\objects\buckling.dm"