mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 12:05:59 +01:00
MODsuits (#59109)
This commit is contained in:
@@ -125,31 +125,6 @@ GLOBAL_VAR_INIT(fscpassword, generate_password())
|
||||
ambientsounds = list('sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg')
|
||||
area_flags = NOTELEPORT | UNIQUE_AREA
|
||||
|
||||
//Cybersun hardsuit
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/cybersun
|
||||
name = "Cybersun hardsuit helmet"
|
||||
desc = "Prototype hardsuit helmet with experimental armor plates, protecting from laser-based weapons very well, while giving limited protection against anything else."
|
||||
icon_state = "cybersun"
|
||||
inhand_icon_state = "cybersun"
|
||||
hardsuit_type = "cybersun"
|
||||
armor = list(MELEE = 30, BULLET = 40, LASER = 55, ENERGY = 55, BOMB = 30, BIO = 100, FIRE = 60, ACID = 60)
|
||||
strip_delay = 600
|
||||
actions_types = list()
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/cybersun
|
||||
icon_state = "cybersun"
|
||||
inhand_icon_state = "cybersun"
|
||||
hardsuit_type = "cybersun"
|
||||
name = "Cybersun hardsuit"
|
||||
desc = "Prototype hardsuit with experimental armor plates, protecting from laser-based weapons very well, while giving limited protection against anything else."
|
||||
armor = list(MELEE = 30, BULLET = 40, LASER = 55, ENERGY = 55, BOMB = 30, BIO = 100, FIRE = 60, ACID = 60)
|
||||
slowdown = 0
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cybersun
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet, /datum/action/item_action/toggle_spacesuit)
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
|
||||
//Special NT NPCs
|
||||
|
||||
/mob/living/simple_animal/hostile/nanotrasen/ranged/assault
|
||||
|
||||
@@ -9,11 +9,15 @@
|
||||
info = "<b>*Damage Report*</b><br><br><b>Alpha Station</b> - Destroyed<br><br><b>Beta Station</b> - Catastrophic Damage. Medical, destroyed. Atmospherics, partially destroyed. Engine Core, destroyed.<br><br><b>Charlie Station</b> - Multiple asteroid impacts, no loss in air pressure.<br><br><b>Delta Station</b> - Intact. <b>WARNING</b>: Unknown force occupying Delta Station. Intent unknown. Species unknown. Numbers unknown.<br><br>Recommendation - Reestablish station powernet via solar array. Reestablish station atmospherics system to restore air."
|
||||
|
||||
/obj/item/paper/fluff/ruins/oldstation/protosuit
|
||||
name = "B01-RIG Hardsuit Report"
|
||||
info = "<b>*Prototype Hardsuit*</b><br><br>The B01-RIG Hardsuit is a prototype powered exoskeleton. Based off a recovered pre-void war era united Earth government powered military \
|
||||
exosuit, the RIG Hardsuit is a breakthrough in Hardsuit technology, and is the first post-void war era Hardsuit that can be safely used by an operator.<br><br>The B01 however suffers \
|
||||
a myriad of constraints. It is slow and bulky to move around, it lacks any significant armor plating against direct attacks and its internal heads up display is unfinished, \
|
||||
resulting in the user being unable to see long distances.<br><br>The B01 is unlikely to see any form of mass production, but will serve as a base for future Hardsuit developments."
|
||||
name = "B01-MOD modular suit Report"
|
||||
info = "<b>*Prototype MODsuit*</b><br><br>This is a prototype powered exoskeleton, a design not seen in hundreds of years, \
|
||||
the first post-void war era modular suit to ever be safely utilized by an operator. \
|
||||
This ancient clunker is still functional, though it's missing several modern-day luxuries from \
|
||||
updated Nakamura Engineering designs. Primarily, the suit's myoelectric suit layer is entirely non-existant, \
|
||||
and the servos do very little to help distribute the weight evenly across the wearer's body, \
|
||||
making it slow and bulky to move in. Additionally, the armor plating never finished production aside from the shoulders, \
|
||||
forearms, and helmet; making it useless against direct attacks. The internal heads-up display is rendered entirely in \
|
||||
monochromatic cyan, leaving the user unable to see long distances. However, the way the helmet retracts is pretty cool."
|
||||
|
||||
/obj/item/paper/fluff/ruins/oldstation/protohealth
|
||||
name = "Health Analyser Report"
|
||||
@@ -41,7 +45,7 @@
|
||||
|
||||
/obj/item/paper/fluff/ruins/oldstation/protoinv
|
||||
name = "Laboratory Inventory"
|
||||
info = "<b>*Inventory*</b><br><br>(1) Prototype Hardsuit<br><br>(1)Health Analyser<br><br>(1)Prototype Energy Gun<br><br>(1)Singularity Generation Disk<br><br><b>DO NOT REMOVE WITHOUT \
|
||||
info = "<b>*Inventory*</b><br><br>(1) Prototype MODsuit<br><br>(1)Health Analyser<br><br>(1)Prototype Energy Gun<br><br>(1)Singularity Generation Disk<br><br><b>DO NOT REMOVE WITHOUT \
|
||||
THE CAPTAIN AND RESEARCH DIRECTOR'S AUTHORISATION</b>"
|
||||
|
||||
/obj/item/paper/fluff/ruins/oldstation/report
|
||||
@@ -66,3 +70,116 @@
|
||||
I have no fucking idea what they are, all I know is that they don't like me. On occasion I hear them hissing and clawing on the airlock... good idea I barricaded the way in. Bad news: the transit tube is still broken, the damn engineers never fixed it. \
|
||||
So basically, I'm stuck here until someone comes to rescue us. And I have no food or water. <br>If you're reading this, I'm probably dead. These things have taken over part of Delta station, and I think they somehow came from the AI core... \
|
||||
Whatever you do, DON'T OPEN THE FIRELOCKS unless you have something to kill them. Look in security, maybe there might be some gear left in there. <br><br>So hungry... I don't want to go out like this..."
|
||||
|
||||
/obj/machinery/mod_installer
|
||||
name = "modular outerwear device installator"
|
||||
desc = "An ancient machine that mounts a MOD unit onto the occupant."
|
||||
icon = 'icons/obj/machines/mod_installer.dmi'
|
||||
icon_state = "mod_installer"
|
||||
base_icon_state = "mod_installer"
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
use_power = IDLE_POWER_USE
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
obj_flags = NO_BUILD // Becomes undense when the door is open
|
||||
idle_power_usage = 50
|
||||
active_power_usage = 300
|
||||
|
||||
var/busy = FALSE
|
||||
var/busy_icon_state
|
||||
|
||||
var/obj/item/mod/control/mod_unit = /obj/item/mod/control/pre_equipped/prototype
|
||||
|
||||
COOLDOWN_DECLARE(message_cooldown)
|
||||
|
||||
/obj/machinery/mod_installer/Initialize(mapload)
|
||||
. = ..()
|
||||
occupant_typecache = typecacheof(/mob/living/carbon/human)
|
||||
if(ispath(mod_unit))
|
||||
mod_unit = new mod_unit()
|
||||
|
||||
/obj/machinery/mod_installer/Destroy()
|
||||
QDEL_NULL(mod_unit)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mod_installer/proc/set_busy(status, working_icon)
|
||||
busy = status
|
||||
busy_icon_state = working_icon
|
||||
update_appearance()
|
||||
|
||||
/obj/machinery/mod_installer/proc/play_install_sound()
|
||||
playsound(src, 'sound/items/rped.ogg', 30, FALSE)
|
||||
|
||||
/obj/machinery/mod_installer/update_icon_state()
|
||||
icon_state = busy ? busy_icon_state : "[base_icon_state][state_open ? "_open" : null]"
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mod_installer/update_overlays()
|
||||
var/list/overlays = ..()
|
||||
if(machine_stat & (NOPOWER|BROKEN))
|
||||
return overlays
|
||||
overlays += busy ? "red" : "green"
|
||||
return overlays
|
||||
|
||||
/obj/machinery/mod_installer/proc/start_process()
|
||||
if(machine_stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(!occupant || !mod_unit || busy)
|
||||
return
|
||||
set_busy(TRUE, "[initial(icon_state)]_raising")
|
||||
addtimer(CALLBACK(src, .proc/set_busy, TRUE, "[initial(icon_state)]_active"), 2.5 SECONDS)
|
||||
addtimer(CALLBACK(src, .proc/play_install_sound), 2.5 SECONDS)
|
||||
addtimer(CALLBACK(src, .proc/set_busy, TRUE, "[initial(icon_state)]_falling"), 5 SECONDS)
|
||||
addtimer(CALLBACK(src, .proc/complete_process), 7.5 SECONDS)
|
||||
|
||||
/obj/machinery/mod_installer/proc/complete_process()
|
||||
set_busy(FALSE)
|
||||
var/mob/living/carbon/human/human_occupant = occupant
|
||||
if(!istype(human_occupant))
|
||||
return
|
||||
if(!human_occupant.dropItemToGround(human_occupant.back))
|
||||
return
|
||||
if(!human_occupant.equip_to_slot_if_possible(mod_unit, mod_unit.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE))
|
||||
return
|
||||
human_occupant.update_action_buttons(TRUE)
|
||||
playsound(src, 'sound/machines/ping.ogg', 30, FALSE)
|
||||
if(!human_occupant.dropItemToGround(human_occupant.wear_suit) || !human_occupant.dropItemToGround(human_occupant.head))
|
||||
open_machine()
|
||||
return
|
||||
mod_unit.quick_activation()
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/mod_installer/open_machine()
|
||||
if(state_open)
|
||||
return FALSE
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/mod_installer/close_machine(mob/living/carbon/user)
|
||||
if(!state_open)
|
||||
return FALSE
|
||||
..()
|
||||
addtimer(CALLBACK(src, .proc/start_process), 1 SECONDS)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/mod_installer/relaymove(mob/living/user, direction)
|
||||
var/message
|
||||
if(busy)
|
||||
message = "it won't budge!"
|
||||
else if(user.stat != CONSCIOUS)
|
||||
message = "you don't have the energy!"
|
||||
if(!isnull(message))
|
||||
if (COOLDOWN_FINISHED(src, message_cooldown))
|
||||
COOLDOWN_START(src, message_cooldown, 5 SECONDS)
|
||||
balloon_alert(user, message)
|
||||
return
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/mod_installer/interact(mob/user)
|
||||
if(state_open)
|
||||
close_machine(null, user)
|
||||
return
|
||||
else if(busy)
|
||||
balloon_alert(user, "it's locked!")
|
||||
return
|
||||
open_machine()
|
||||
|
||||
Reference in New Issue
Block a user