mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
Serenity (#6208)
* 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:
committed by
VirgoBot
parent
ce6256b561
commit
e50b9d0cc0
@@ -120,4 +120,53 @@
|
||||
..()
|
||||
if (href_list["toggle_leg_overload"])
|
||||
src.overload()
|
||||
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
|
||||
@@ -560,8 +560,294 @@
|
||||
feedback_inc("mecha_gygax_created",1)
|
||||
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
|
||||
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/////////////////////////
|
||||
/////////////////////////
|
||||
////// Mecha Parts //////
|
||||
/////////////////////////
|
||||
|
||||
@@ -112,6 +112,14 @@
|
||||
icon_state = "gygax_armour"
|
||||
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
|
||||
|
||||
|
||||
@@ -107,6 +107,10 @@
|
||||
name = "Medgax wreckage"
|
||||
icon_state = "medgax-broken"
|
||||
|
||||
/obj/effect/decal/mecha_wreckage/gygax/serenity
|
||||
name = "Serenity wreckage"
|
||||
icon_state = "medgax-broken"
|
||||
|
||||
/obj/effect/decal/mecha_wreckage/marauder
|
||||
name = "Marauder wreckage"
|
||||
icon_state = "marauder-broken"
|
||||
|
||||
@@ -32,6 +32,11 @@
|
||||
icon_state = "mcontroller"
|
||||
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
|
||||
name = T_BOARD_MECHA("Gygax central control")
|
||||
icon_state = "mainboard"
|
||||
|
||||
@@ -467,7 +467,14 @@ CIRCUITS BELOW
|
||||
req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
|
||||
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
|
||||
name = "'Durand' central control"
|
||||
id = "durand_main"
|
||||
|
||||
@@ -107,7 +107,13 @@
|
||||
|
||||
/datum/design/item/mechfab/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
|
||||
name = "Gygax Chassis"
|
||||
id = "gygax_chassis"
|
||||
|
||||
37
html/changelogs/mistyLuminescence - Serenity.yml
Normal file
37
html/changelogs/mistyLuminescence - Serenity.yml
Normal 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 |
Reference in New Issue
Block a user