* Serenity

* travis

* adminspawn

* I greatly appreciate all detailed and informative feedback provided. Per request, the Serenity is currently adminspawn-only; a new PR will be made in two weeks to add it to Robotics and resolve any issues encountered during the testing period.

* Comments out circuit for two-week testing period
This commit is contained in:
mistyLuminescence
2019-06-21 05:12:37 +01:00
committed by VirgoBot
parent ce6256b561
commit e50b9d0cc0
9 changed files with 406 additions and 4 deletions

View File

@@ -121,3 +121,52 @@
if (href_list["toggle_leg_overload"]) if (href_list["toggle_leg_overload"])
src.overload() src.overload()
return return
/obj/mecha/combat/gygax/serenity
desc = "A lightweight exosuit made from a modified Gygax chassis combined with proprietary VeyMed medical tech. It's faster and sturdier than most medical mechs, but much of the armor plating has been stripped out, leaving it more vulnerable than a regular Gygax."
name = "Serenity"
icon_state = "medgax"
initial_icon = "medgax"
health = 150
maxhealth = 150
deflect_chance = 20
step_in = 2
damage_absorption = list("brute"=0.9,"fire"=1,"bullet"=0.9,"laser"=0.8,"energy"=0.9,"bomb"=1)
max_temperature = 20000
overload_coeff = 1
wreckage = /obj/effect/decal/mecha_wreckage/gygax/serenity
max_equip = 3
step_energy_drain = 8
cargo_capacity = 2
max_hull_equip = 1
max_weapon_equip = 1
max_utility_equip = 2
max_universal_equip = 1
max_special_equip = 1
var/obj/item/clothing/glasses/hud/health/mech/hud
/obj/mecha/combat/gygax/serenity/New()
..()
hud = new /obj/item/clothing/glasses/hud/health/mech(src)
return
/obj/mecha/combat/gygax/serenity/moved_inside(var/mob/living/carbon/human/H as mob)
if(..())
if(H.glasses)
occupant_message("<font color='red'>[H.glasses] prevent you from using [src] [hud]</font>")
else
H.glasses = hud
H.recalculate_vis()
return 1
else
return 0
/obj/mecha/combat/gygax/serenity/go_out()
if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant
if(H.glasses == hud)
H.glasses = null
H.recalculate_vis()
..()
return

View File

@@ -560,8 +560,294 @@
feedback_inc("mecha_gygax_created",1) feedback_inc("mecha_gygax_created",1)
return return
//////////////////////
// Serenity
//////////////////////
/datum/construction/mecha/serenity_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1
list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2
list("key"=/obj/item/mecha_parts/part/gygax_right_arm),//3
list("key"=/obj/item/mecha_parts/part/gygax_left_leg),//4
list("key"=/obj/item/mecha_parts/part/gygax_right_leg),//5
list("key"=/obj/item/mecha_parts/part/gygax_head)
)
/datum/construction/mecha/serenity_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
holder.overlays += I.icon_state+"+o"
qdel(I)
return 1
/datum/construction/mecha/serenity_chassis/action(obj/item/I,mob/user as mob)
return check_all_steps(I,user)
/datum/construction/mecha/serenity_chassis/spawn_result()
var/obj/item/mecha_parts/chassis/const_holder = holder
const_holder.construct = new /datum/construction/reversible/mecha/serenity(const_holder)
const_holder.icon = 'icons/mecha/mech_construction.dmi'
const_holder.icon_state = "gygax0"
const_holder.density = 1
spawn()
qdel(src)
return
/datum/construction/reversible/mecha/serenity
result = "/obj/mecha/combat/gygax/serenity"
steps = list(
//1
list("key"=/obj/item/weapon/weldingtool,
"backkey"=IS_WRENCH,
"desc"="External armor is wrenched."),
//2
list("key"=IS_WRENCH,
"backkey"=IS_CROWBAR,
"desc"="External armor is installed."),
//3
list("key"=/obj/item/stack/material/plasteel,
"backkey"=/obj/item/weapon/weldingtool,
"desc"="Internal armor is welded."),
//4
list("key"=/obj/item/weapon/weldingtool,
"backkey"=IS_WRENCH,
"desc"="Internal armor is wrenched"),
//5
list("key"=IS_WRENCH,
"backkey"=IS_CROWBAR,
"desc"="Internal armor is installed"),
//6
list("key"=/obj/item/stack/material/steel,
"backkey"=IS_SCREWDRIVER,
"desc"="Advanced capacitor is secured"),
//7
list("key"=IS_SCREWDRIVER,
"backkey"=IS_CROWBAR,
"desc"="Advanced capacitor is installed"),
//8
list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
"backkey"=IS_SCREWDRIVER,
"desc"="Advanced scanner module is secured"),
//9
list("key"=IS_SCREWDRIVER,
"backkey"=IS_CROWBAR,
"desc"="Advanced scanner module is installed"),
//10
list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
"backkey"=IS_SCREWDRIVER,
"desc"="Medical module is secured"),
//11
list("key"=IS_SCREWDRIVER,
"backkey"=IS_CROWBAR,
"desc"="Medical module is installed"),
//12
list("key"=/obj/item/weapon/circuitboard/mecha/gygax/medical,
"backkey"=IS_SCREWDRIVER,
"desc"="Peripherals control module is secured"),
//13
list("key"=IS_SCREWDRIVER,
"backkey"=IS_CROWBAR,
"desc"="Peripherals control module is installed"),
//14
list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals,
"backkey"=IS_SCREWDRIVER,
"desc"="Central control module is secured"),
//15
list("key"=IS_SCREWDRIVER,
"backkey"=IS_CROWBAR,
"desc"="Central control module is installed"),
//16
list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main,
"backkey"=IS_SCREWDRIVER,
"desc"="The wiring is adjusted"),
//17
list("key"=/obj/item/weapon/tool/wirecutters,
"backkey"=IS_SCREWDRIVER,
"desc"="The wiring is added"),
//18
list("key"=/obj/item/stack/cable_coil,
"backkey"=IS_SCREWDRIVER,
"desc"="The hydraulic systems are active."),
//19
list("key"=IS_SCREWDRIVER,
"backkey"=IS_WRENCH,
"desc"="The hydraulic systems are connected."),
//20
list("key"=IS_WRENCH,
"desc"="The hydraulic systems are disconnected.")
)
/datum/construction/reversible/mecha/serenity/action(obj/item/I,mob/user as mob)
return check_step(I,user)
/datum/construction/reversible/mecha/serenity/custom_action(index, diff, obj/item/I, mob/user)
if(!..())
return 0
//TODO: better messages.
switch(index)
if(20)
user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
holder.icon_state = "gygax1"
if(19)
if(diff==FORWARD)
user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
holder.icon_state = "gygax2"
else
user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
holder.icon_state = "gygax0"
if(18)
if(diff==FORWARD)
user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
holder.icon_state = "gygax3"
else
user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
holder.icon_state = "gygax1"
if(17)
if(diff==FORWARD)
user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
holder.icon_state = "gygax4"
else
user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
coil.amount = 4
holder.icon_state = "gygax2"
if(16)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
qdel(I)
holder.icon_state = "gygax5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
holder.icon_state = "gygax3"
if(15)
if(diff==FORWARD)
user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
holder.icon_state = "gygax6"
else
user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder))
holder.icon_state = "gygax4"
if(14)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
qdel(I)
holder.icon_state = "gygax7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
holder.icon_state = "gygax5"
if(13)
if(diff==FORWARD)
user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
holder.icon_state = "gygax8"
else
user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder))
holder.icon_state = "gygax6"
if(12)
if(diff==FORWARD)
user.visible_message("[user] installs the medical control module into [holder].", "You install the medical control module into [holder].")
qdel(I)
holder.icon_state = "gygax9"
else
user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
holder.icon_state = "gygax7"
if(11)
if(diff==FORWARD)
user.visible_message("[user] secures the medical control module.", "You secure the medical control module.")
holder.icon_state = "gygax10"
else
user.visible_message("[user] removes the medical control module from [holder].", "You remove the medical control module from [holder].")
new /obj/item/weapon/circuitboard/mecha/gygax/medical(get_turf(holder))
holder.icon_state = "gygax8"
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
qdel(I)
holder.icon_state = "gygax11"
else
user.visible_message("[user] unfastens the medical control module.", "You unfasten the medical control module.")
holder.icon_state = "gygax9"
if(9)
if(diff==FORWARD)
user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
holder.icon_state = "gygax12"
else
user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
holder.icon_state = "gygax10"
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
qdel(I)
holder.icon_state = "gygax13"
else
user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
holder.icon_state = "gygax11"
if(7)
if(diff==FORWARD)
user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
holder.icon_state = "gygax14"
else
user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
holder.icon_state = "gygax12"
if(6)
if(diff==FORWARD)
user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
holder.icon_state = "gygax15"
else
user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
holder.icon_state = "gygax13"
if(5)
if(diff==FORWARD)
user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
holder.icon_state = "gygax16"
else
user.visible_message("[user] pries internal armor layer from [holder].", "You pry the internal armor layer from [holder].")
var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
MS.amount = 5
holder.icon_state = "gygax14"
if(4)
if(diff==FORWARD)
user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
holder.icon_state = "gygax17"
else
user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
holder.icon_state = "gygax15"
if(3)
if(diff==FORWARD)
user.visible_message("[user] installs the external armor layer to [holder].", "You install the external armor layer to [holder].")
qdel(I)
holder.icon_state = "gygax18"
else
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
holder.icon_state = "gygax16"
if(2)
if(diff==FORWARD)
user.visible_message("[user] secures the external armor layer.", "You secure the external armor layer.")
holder.icon_state = "gygax19-s"
else
user.visible_message("[user] pries the external armor layer from [holder].", "You pry the external armor layer from [holder].")
new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder))
holder.icon_state = "gygax17"
if(1)
if(diff==FORWARD)
user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].")
else
user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
holder.icon_state = "gygax18"
return 1
/datum/construction/reversible/mecha/serenity/spawn_result()
..()
feedback_inc("mecha_serenity_created",1)
return
//////////////////////// ////////////////////////
// Firfighter // Firefighter
//////////////////////// ////////////////////////
/datum/construction/mecha/firefighter_chassis /datum/construction/mecha/firefighter_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1

View File

@@ -1,4 +1,4 @@
///////////////////////// /////////////////////////
////// Mecha Parts ////// ////// Mecha Parts //////
///////////////////////// /////////////////////////
@@ -112,6 +112,14 @@
icon_state = "gygax_armour" icon_state = "gygax_armour"
origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5) origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
////////// Serenity
/obj/item/mecha_parts/chassis/serenity
name = "Serenity Chassis"
New()
..()
construct = new /datum/construction/mecha/serenity_chassis(src)
//////////// Durand //////////// Durand

View File

@@ -107,6 +107,10 @@
name = "Medgax wreckage" name = "Medgax wreckage"
icon_state = "medgax-broken" icon_state = "medgax-broken"
/obj/effect/decal/mecha_wreckage/gygax/serenity
name = "Serenity wreckage"
icon_state = "medgax-broken"
/obj/effect/decal/mecha_wreckage/marauder /obj/effect/decal/mecha_wreckage/marauder
name = "Marauder wreckage" name = "Marauder wreckage"
icon_state = "marauder-broken" icon_state = "marauder-broken"

View File

@@ -32,6 +32,11 @@
icon_state = "mcontroller" icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4) origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
/obj/item/weapon/circuitboard/mecha/gygax/medical
name = T_BOARD_MECHA("Serenity medical control")
icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 4, TECH_BIO = 4)
/obj/item/weapon/circuitboard/mecha/gygax/main /obj/item/weapon/circuitboard/mecha/gygax/main
name = T_BOARD_MECHA("Gygax central control") name = T_BOARD_MECHA("Gygax central control")
icon_state = "mainboard" icon_state = "mainboard"

View File

@@ -467,7 +467,14 @@ CIRCUITS BELOW
req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2) req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
sort_string = "NAACC" sort_string = "NAACC"
/* //Uncomment me to allow Serenity construction
/datum/design/circuit/mecha/gygax_medical
name = "'Serenity' medical control"
id = "gygax_medical"
req_tech = list(TECH_DATA = 4, TECH_BIO = 2)
build_path = /obj/item/weapon/circuitboard/mecha/gygax/medical
sort_string = "NAACD"
*/
/datum/design/circuit/mecha/durand_main /datum/design/circuit/mecha/durand_main
name = "'Durand' central control" name = "'Durand' central control"
id = "durand_main" id = "durand_main"

View File

@@ -107,7 +107,13 @@
/datum/design/item/mechfab/gygax /datum/design/item/mechfab/gygax
category = "Gygax" category = "Gygax"
/* //uncomment me to make the Serenity produceable in Robotics
/datum/design/item/mechfab/gygax/chassis/serenity
name = "Serenity Chassis"
id = "serenity_chassis"
build_path = /obj/item/mecha_parts/chassis/serenity
materials = list(DEFAULT_WALL_MATERIAL = 18750, "phoron" = 4000)
*/
/datum/design/item/mechfab/gygax/chassis /datum/design/item/mechfab/gygax/chassis
name = "Gygax Chassis" name = "Gygax Chassis"
id = "gygax_chassis" id = "gygax_chassis"

View File

@@ -0,0 +1,37 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: mistyLuminescence
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: The Serenity medical mech is now available as an adminspawn-only mech (for now!). A lightly-armored variation of the Gygax, the Serenity is swift, effective, and a little too fragile to be practical. A PR adding the Serenity to Robotics will open in two weeks.
- rscadd: The Serenity, like the Firefighter, requires its own chassis, but uses the parts of its parent mech (the Gygax). Instead of armor plating, use plasteel, and instead of a targeting board, use the new Serenity medical control board.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB