From 867810ab8c59607730b6305ec41030b188866739 Mon Sep 17 00:00:00 2001
From: Michiyamenotehifunana
<31995558+Michiyamenotehifunana@users.noreply.github.com>
Date: Sat, 2 Dec 2017 00:06:42 +0800
Subject: [PATCH] massive overhaul of RGB stuff and massive additions
halp
---
code/citadel/cit_weapons.dm | 77 +++--
modular_citadel/citadel_ghostrole_spawners.dm | 43 +++
modular_citadel/cydonian_armor.dm | 160 ++++++++++
modular_citadel/hypereutactic_blade.dm | 278 ++++++++++++++++++
.../hypereutactic/item/hypereutactic.dmi | Bin 0 -> 1334 bytes
.../hypereutactic/mob/hypereutactic_left.dmi | Bin 0 -> 2428 bytes
.../hypereutactic/mob/hypereutactic_right.dmi | Bin 0 -> 3281 bytes
.../icons/lavaknight/item/head.dmi | Bin 0 -> 377 bytes
.../icons/lavaknight/item/suit.dmi | Bin 0 -> 1445 bytes
modular_citadel/icons/lavaknight/mob/head.dmi | Bin 0 -> 568 bytes
modular_citadel/icons/lavaknight/mob/suit.dmi | Bin 0 -> 3764 bytes
tgstation.dme | 3 +
12 files changed, 533 insertions(+), 28 deletions(-)
create mode 100644 modular_citadel/citadel_ghostrole_spawners.dm
create mode 100644 modular_citadel/cydonian_armor.dm
create mode 100644 modular_citadel/hypereutactic_blade.dm
create mode 100644 modular_citadel/icons/hypereutactic/item/hypereutactic.dmi
create mode 100644 modular_citadel/icons/hypereutactic/mob/hypereutactic_left.dmi
create mode 100644 modular_citadel/icons/hypereutactic/mob/hypereutactic_right.dmi
create mode 100644 modular_citadel/icons/lavaknight/item/head.dmi
create mode 100644 modular_citadel/icons/lavaknight/item/suit.dmi
create mode 100644 modular_citadel/icons/lavaknight/mob/head.dmi
create mode 100644 modular_citadel/icons/lavaknight/mob/suit.dmi
diff --git a/code/citadel/cit_weapons.dm b/code/citadel/cit_weapons.dm
index c709fe90e9..b661294ae7 100644
--- a/code/citadel/cit_weapons.dm
+++ b/code/citadel/cit_weapons.dm
@@ -11,7 +11,7 @@
attack_verb = list("poked", "jabbed", "hit")
light_color = "#37FFF7"
var/light_brightness = 3
- actions_types = list(/datum/action/item_action/pick_color)
+ actions_types = list()
/obj/item/toy/sword/cx/attack_self(mob/user)
active = !( active )
@@ -57,18 +57,21 @@
var/mob/M = loc
M.update_inv_hands()
-/obj/item/toy/sword/cx/ui_action_click(mob/user, var/datum/action/A)
- if(istype(A, /datum/action/item_action/pick_color))
- if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
- var/energy_color_input = input(usr,"Choose Energy Color") as color|null
- if(energy_color_input)
- light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
- update_icon()
- update_light()
- A.UpdateButtonIcon()
+/obj/item/toy/sword/cx/AltClick(mob/living/user)
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user))
+ return
+ if(user.incapacitated() || !istype(user) || !in_range(src, user))
+ return
- else
- ..()
+ if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/energy_color_input = input(usr,"Choose Energy Color") as color|null
+ if(energy_color_input)
+ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ update_light()
/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
@@ -79,7 +82,21 @@
. += blade_inhand
/obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params)
- return //NO MORE MAKING DUAL ESWORDS
+ if(istype(W, /obj/item/toy/sword/cx))
+ if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1))
+ to_chat(user, "\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!")
+ return
+ else
+ to_chat(user, "You combine the two plastic swords, making a single supermassive toy! You're fake-cool.")
+ new /obj/item/twohanded/hypereutactic/toy(user.loc)
+ qdel(W)
+ qdel(src)
+ else
+ return ..()
+
+/obj/item/toy/sword/cx/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to recolor it.")
/*///autolathe memes/// I really need to stop doing this and find a proper way of adding in my toys
@@ -124,7 +141,7 @@
origin_tech = "combat=3;magnets=4"
block_chance = 60
light_color = "#37FFF7"
- actions_types = list(/datum/action/item_action/pick_color)
+ actions_types = list()
/obj/item/melee/transforming/energy/sword/cx/transform_weapon(mob/living/user, supress_message_text)
active = !active //I'd use a ..() here but it'd inherit from the regular esword's proc instead, so SPAGHETTI CODE
@@ -152,9 +169,6 @@
update_icon()
transform_messages(user, supress_message_text)
add_fingerprint(user)
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
return TRUE
/obj/item/melee/transforming/energy/sword/cx/transform_messages(mob/living/user, supress_message_text)
@@ -181,18 +195,25 @@
var/mob/M = loc
M.update_inv_hands()
-/obj/item/melee/transforming/energy/sword/cx/ui_action_click(mob/user, var/datum/action/A)
- if(istype(A, /datum/action/item_action/pick_color))
- if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
- var/energy_color_input = input(usr,"Choose Energy Color") as color|null
- if(energy_color_input)
- light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
- update_icon()
- update_light()
- A.UpdateButtonIcon()
+/obj/item/melee/transforming/energy/sword/cx/AltClick(mob/living/user)
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user))
+ return
+ if(user.incapacitated() || !istype(user) || !in_range(src, user))
+ return
- else
- ..()
+ if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/energy_color_input = input(usr,"Choose Energy Color") as color|null
+ if(energy_color_input)
+ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ update_light()
+
+/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to recolor it.")
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
diff --git a/modular_citadel/citadel_ghostrole_spawners.dm b/modular_citadel/citadel_ghostrole_spawners.dm
new file mode 100644
index 0000000000..0b3797b88b
--- /dev/null
+++ b/modular_citadel/citadel_ghostrole_spawners.dm
@@ -0,0 +1,43 @@
+/obj/effect/mob_spawn/human/lavaknight
+ name = "odd cryogenics pod"
+ desc = "A humming cryo pod. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
+ mob_name = "a displaced knight from another dimension"
+ icon = 'icons/obj/cryogenic2.dmi'
+ icon_state = "sleeper"
+ roundstart = FALSE
+ death = FALSE
+ random = TRUE
+ outfit = /datum/outfit/lavaknight
+ mob_species = /datum/species/human
+ flavour_text = "You are a knight who conveniently has some form of retrograde amnesia. \
+ You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
+ Remember: hostile creatures and such are fair game for attacking, but under no circumstances are you to attack anything capable of thought and/or speech unless it has made it its life's calling to chase you to the ends of the earth."
+ assignedrole = "Cydonian Knight"
+
+/obj/effect/mob_spawn/human/lavaknight/special(mob/living/new_spawn)
+ if(ishuman(new_spawn))
+ var/mob/living/carbon/human/H = new_spawn
+ H.dna.features["ears"] = "Cat" //cat people
+ H.update_body()
+
+/obj/effect/mob_spawn/human/lavaknight/Destroy()
+ new/obj/structure/showcase/machinery/oldpod/used(drop_location())
+ return ..()
+
+/datum/outfit/lavaknight
+ name = "Cydonian Knight"
+ uniform = /obj/item/clothing/under/assistantformal
+ mask = /obj/item/clothing/mask/breath
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ r_pocket = /obj/item/melee/transforming/energy/sword/cx
+ suit = /obj/item/clothing/suit/space/hardsuit/lavaknight
+ suit_store = /obj/item/tank/internals/oxygen
+
+/obj/effect/mob_spawn/human/lavaknight/captain
+ name = "odd gilded cryogenics pod"
+ desc = "A humming cryo pod that appears to be gilded. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
+ flavour_text = "You are a knight who conveniently has some form of retrograde amnesia. \
+ You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
+ Remember: hostile creatures and such are fair game for attacking, but under no circumstances are you to attack anything capable of thought and/or speech unless it has made it its life's calling to chase you to the ends of the earth. \
+ You feel a natural instict to lead, and as such, you should strive to lead your comrades to safety, and hopefully home. You also feel a burning determination to uphold your vow, as well as your fellow comrade's."
+ l_pocket = /obj/item/twohanded/hypereutactic
\ No newline at end of file
diff --git a/modular_citadel/cydonian_armor.dm b/modular_citadel/cydonian_armor.dm
new file mode 100644
index 0000000000..0189358d36
--- /dev/null
+++ b/modular_citadel/cydonian_armor.dm
@@ -0,0 +1,160 @@
+/*
+ CYDONIAN ARMOR THAT IS RGB AND STUFF WOOOOOOOOOO
+*/
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight
+ name = "cydonian helmet"
+ desc = "A helmet designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
+ icon = 'modular_citadel/icons/lavaknight/item/head.dmi'
+ icon_state = "knight_cydonia"
+ item_state = "knight_yellow"
+ item_color = null
+ alternate_worn_icon = 'modular_citadel/icons/lavaknight/mob/head.dmi'
+ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ heat_protection = HEAD
+ armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
+ brightness_on = 7
+ allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
+ var/energy_color = "#35FFF0"
+ var/obj/item/clothing/suit/space/hardsuit/lavaknight/linkedsuit = null
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/New()
+ ..()
+ if(istype(loc, /obj/item/clothing/suit/space/hardsuit/lavaknight))
+ linkedsuit = loc
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/attack_self(mob/user)
+ on = !on
+
+ if(on)
+ set_light(brightness_on)
+ else
+ set_light(0)
+ for(var/X in actions)
+ var/datum/action/A = X
+ A.UpdateButtonIcon()
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/update_icon()
+ var/mutable_appearance/helm_overlay = mutable_appearance('modular_citadel/icons/lavaknight/item/head.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
+
+ if(energy_color)
+ helm_overlay.color = energy_color
+
+ helm_overlay.plane = LIGHTING_PLANE + 1 //Magic number is used here because we have no ABOVE_LIGHTING_PLANE plane defined. Lighting plane is 15, HUD is 18
+
+ cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
+
+ add_overlay(helm_overlay)
+
+ emissivelights()
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/equipped(mob/user, slot)
+ ..()
+ if(slot == slot_head)
+ emissivelights()
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/dropped(mob/user)
+ ..()
+ emissivelightsoff()
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/proc/emissivelights(mob/user = usr)
+ var/mutable_appearance/energy_overlay = mutable_appearance('modular_citadel/icons/lavaknight/mob/head.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
+ energy_overlay.color = energy_color
+ energy_overlay.plane = LIGHTING_PLANE + 1
+ user.cut_overlay(energy_overlay) //honk
+ user.add_overlay(energy_overlay) //honk
+
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/proc/emissivelightsoff(mob/user = usr)
+ user.cut_overlay()
+ linkedsuit.emissivelights() //HONK HONK HONK MAXIMUM SPAGHETTI
+ user.regenerate_icons() //honk
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight
+ icon = 'modular_citadel/icons/lavaknight/item/suit.dmi'
+ icon_state = "knight_cydonia"
+ name = "cydonian armor"
+ desc = "A suit designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
+ item_state = "swat_suit"
+ alternate_worn_icon = 'modular_citadel/icons/lavaknight/mob/suit.dmi'
+ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
+ allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/lavaknight
+ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ actions_types = list(/datum/action/item_action/toggle_helmet)
+ var/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/linkedhelm
+
+ var/energy_color = "#35FFF0"
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/New()
+ ..()
+ if(helmet)
+ linkedhelm = helmet
+ light_color = energy_color
+ set_light(1)
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize()
+ ..()
+ update_icon()
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
+ var/mutable_appearance/suit_overlay = mutable_appearance('modular_citadel/icons/lavaknight/item/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
+
+ if(energy_color)
+ suit_overlay.color = energy_color
+
+ suit_overlay.plane = LIGHTING_PLANE + 1 //Magic number is used here because we have no ABOVE_LIGHTING_PLANE plane defined. Lighting plane is 15.
+
+ cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
+
+ add_overlay(suit_overlay)
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/equipped(mob/user, slot)
+ ..()
+ if(slot == slot_wear_suit)
+ emissivelights()
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/dropped(mob/user)
+ ..()
+ emissivelightsoff()
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/proc/emissivelights(mob/user = usr)
+ var/mutable_appearance/energy_overlay = mutable_appearance('modular_citadel/icons/lavaknight/mob/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
+ energy_overlay.color = energy_color
+ energy_overlay.plane = LIGHTING_PLANE + 1
+ user.cut_overlay(energy_overlay) //honk
+ user.add_overlay(energy_overlay) //honk
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/proc/emissivelightsoff(mob/user = usr)
+ user.cut_overlays()
+ user.regenerate_icons() //honk
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/AltClick(mob/living/user)
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user))
+ return
+ if(user.incapacitated() || !istype(user) || !in_range(src, user))
+ return
+
+ if(alert("Are you sure you want to recolor your armor stripes?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/energy_color_input = input(usr,"Choose Energy Color") as color|null
+ if(energy_color_input)
+ energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ user.update_inv_wear_suit()
+ if(linkedhelm)
+ linkedhelm.energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ user.update_inv_head()
+ linkedhelm.update_icon()
+ update_icon()
+ user.update_inv_wear_suit()
+ light_color = energy_color
+ emissivelights()
+ update_light()
+
+/obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to recolor it.")
\ No newline at end of file
diff --git a/modular_citadel/hypereutactic_blade.dm b/modular_citadel/hypereutactic_blade.dm
new file mode 100644
index 0000000000..e96789c43f
--- /dev/null
+++ b/modular_citadel/hypereutactic_blade.dm
@@ -0,0 +1,278 @@
+/* fuckhuge esword thingy */
+
+/obj/item/twohanded/hypereutactic
+ icon = 'modular_citadel/icons/hypereutactic/item/hypereutactic.dmi'
+ icon_state = "hypereutactic"
+ lefthand_file = 'modular_citadel/icons/hypereutactic/mob/hypereutactic_left.dmi'
+ righthand_file = 'modular_citadel/icons/hypereutactic/mob/hypereutactic_right.dmi'
+ item_state = "hypereutactic"
+ inhand_x_dimension = 64
+ inhand_y_dimension = 64
+ name = "hypereutactic blade"
+ desc = "A supermassive weapon envisioned to cleave the very fabric of space and time itself in twain, the hypereutactic blade dynamically flash-forges a hypereutactic crystaline nanostructure capable of passing through most known forms of matter like a hot knife through butter."
+ force = 3
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 5
+ w_class = WEIGHT_CLASS_SMALL
+ var/w_class_on = WEIGHT_CLASS_BULKY
+ force_unwielded = 3
+ force_wielded = 40
+ wieldsound = 'sound/weapons/nebon.ogg'
+ unwieldsound = 'sound/weapons/neboff.ogg'
+ hitsound = "swing_hit"
+ armour_penetration = 40
+ origin_tech = "magnets=6;syndicate=1"
+ light_color = "#37FFF7"
+ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "destroyed", "ripped", "devastated", "shredded")
+ block_chance = 75
+ max_integrity = 200
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70)
+ resistance_flags = FIRE_PROOF
+ var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD
+ flags_2 = SLOWS_WHILE_IN_HAND_2
+
+/obj/item/twohanded/hypereutactic/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds.
+ if(M.has_dna())
+ if(M.dna.check_mutation(HULK))
+ to_chat(M, "You lack the grace to wield this!")
+ return
+ ..()
+ if(wielded)
+ sharpness = IS_SHARP
+ w_class = w_class_on
+ hitsound = 'sound/weapons/nebhit.ogg'
+ START_PROCESSING(SSobj, src)
+ set_light(brightness_on)
+ slowdown = 1
+
+/obj/item/twohanded/hypereutactic/unwield() //Specific unwield () to switch hitsounds.
+ sharpness = initial(sharpness)
+ w_class = initial(w_class)
+ ..()
+ hitsound = "swing_hit"
+ STOP_PROCESSING(SSobj, src)
+ set_light(0)
+ slowdown = initial(slowdown)
+
+/obj/item/twohanded/hypereutactic/update_icon()
+ var/mutable_appearance/blade_overlay = mutable_appearance('modular_citadel/icons/hypereutactic/item/hypereutactic.dmi', "hypereutactic_blade")
+ var/mutable_appearance/gem_overlay = mutable_appearance('modular_citadel/icons/hypereutactic/item/hypereutactic.dmi', "hypereutactic_gem")
+
+ if(light_color)
+ blade_overlay.color = light_color
+ gem_overlay.color = light_color
+
+ cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
+
+ add_overlay(gem_overlay)
+
+ if(wielded)
+ add_overlay(blade_overlay)
+
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_hands()
+
+ clean_blood()//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is)
+
+/obj/item/twohanded/hypereutactic/AltClick(mob/living/user)
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user))
+ return
+ if(user.incapacitated() || !istype(user) || !in_range(src, user))
+ return
+
+ if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/energy_color_input = input(usr,"Choose Energy Color") as color|null
+ if(energy_color_input)
+ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ update_light()
+
+/obj/item/twohanded/hypereutactic/worn_overlays(isinhands, icon_file)
+ . = ..()
+ if(isinhands)
+ var/mutable_appearance/gem_inhand = mutable_appearance(icon_file, "hypereutactic_gem")
+ gem_inhand.color = light_color
+ . += gem_inhand
+ if(wielded)
+ var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "hypereutactic_blade")
+ blade_inhand.color = light_color
+ . += blade_inhand
+
+/obj/item/twohanded/hypereutactic/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to recolor it.")
+
+
+
+////////// stuff beneath this is all taken from the desword ////////////
+
+
+
+/obj/item/twohanded/hypereutactic/attack(mob/target, mob/living/carbon/human/user)
+ if(user.has_dna())
+ if(user.dna.check_mutation(HULK))
+ to_chat(user, "You grip the blade too hard and accidentally close it!")
+ unwield()
+ return
+ ..()
+ if(user.disabilities & CLUMSY && (wielded) && prob(40))
+ impale(user)
+ return
+
+/obj/item/twohanded/hypereutactic/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ . = ..()
+
+/obj/item/twohanded/hypereutactic/proc/impale(mob/living/user)
+ to_chat(user, "You spin around a bit before losing your balance and impaling yourself on [src].")
+ if (force_wielded)
+ user.take_bodypart_damage(20,25)
+ else
+ user.adjustStaminaLoss(25)
+
+/obj/item/twohanded/hypereutactic/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+ if(wielded)
+ return ..()
+ return 0
+
+/obj/item/twohanded/hypereutactic/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
+ if(wielded)
+ to_chat(user, "You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!")
+ return 1
+
+/obj/item/twohanded/hypereutactic/process()
+ if(wielded)
+ open_flame()
+ else
+ STOP_PROCESSING(SSobj, src)
+
+/obj/item/twohanded/hypereutactic/IsReflect()
+ if(wielded)
+ return 1
+
+/obj/item/twohanded/hypereutactic/ignition_effect(atom/A, mob/user)
+ // same as /obj/item/melee/transforming/energy, mostly
+ if(!wielded)
+ return ""
+ var/in_mouth = ""
+ if(iscarbon(user))
+ var/mob/living/carbon/C = user
+ if(C.wear_mask == src)
+ in_mouth = ", barely missing their nose"
+ . = "[user] swings [user.p_their()] [src][in_mouth]. [user.p_they()] light[user.p_s()] [A] in the process."
+ playsound(loc, hitsound, get_clamped_volume(), 1, -1)
+ add_fingerprint(user)
+
+
+////////////////// TOY VERSION /////////////////////////////
+
+/obj/item/twohanded/hypereutactic/toy
+ name = "\improper DX Hyper-Euplastic LightSword"
+ desc = "A supermassive toy envisioned to cleave the very fabric of space and time itself in twain. Realistic visuals and sounds! Ages 8 and up."
+ force = 0
+ throwforce = 0
+ throw_speed = 3
+ throw_range = 5
+ force_unwielded = 0
+ force_wielded = 0
+ origin_tech = null
+ attack_verb = list("attacked", "struck", "hit")
+
+/obj/item/twohanded/hypereutactic/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+ return 0
+
+/obj/item/twohanded/hypereutactic/toy/IsReflect()//Stops it from reflecting energy projectiles
+ return 0
+
+/* old code that don't work no more
+/obj/item/toy/sword/cx/hyper
+ name = "\improper DX Hyper-Euplastic LightSword"
+ desc = "A supermassive toy envisioned to cleave the very fabric of space and time itself in twain. Realistic visuals and sounds! Ages 8 and up."
+ icon = 'modular_citadel/icons/hypereutactic/item/hypereutactic.dmi'
+ icon_state = "hypereutactic"
+ lefthand_file = 'modular_citadel/icons/hypereutactic/mob/hypereutactic_left.dmi'
+ righthand_file = 'modular_citadel/icons/hypereutactic/mob/hypereutactic_right.dmi'
+ item_state = "hypereutactic"
+ inhand_x_dimension = 64
+ inhand_y_dimension = 64
+ active = FALSE
+ w_class = WEIGHT_CLASS_SMALL
+ attack_verb = list("poked", "devastated", "jabbed")
+ light_color = "#37FFF7"
+ light_brightness = 3
+ actions_types = list()
+
+/obj/item/toy/sword/cx/hyper/attack_self(mob/user)
+ active = !( active )
+
+ if (active)
+ to_chat(user, "You activate the holographic blade with a press of a button.")
+ playsound(user, 'sound/weapons/nebon.ogg', 50, 1)
+ w_class = WEIGHT_CLASS_BULKY
+ attack_verb = list("slashed", "stabbed", "ravaged")
+ set_light(light_brightness)
+ update_icon()
+
+ else
+ to_chat(user, "You deactivate the holographic blade with a press of a button.")
+ playsound(user, 'sound/weapons/neboff.ogg', 50, 1)
+ w_class = WEIGHT_CLASS_SMALL
+ attack_verb = list("poked", "jabbed", "hit")
+ set_light(0)
+ update_icon()
+
+ add_fingerprint(user)
+
+/obj/item/toy/sword/cx/hyper/update_icon()
+ var/mutable_appearance/blade_overlay = mutable_appearance('modular_citadel/icons/hypereutactic/item/hypereutactic.dmi', "hypereutactic_blade")
+ var/mutable_appearance/gem_overlay = mutable_appearance('modular_citadel/icons/hypereutactic/item/hypereutactic.dmi', "hypereutactic_gem")
+
+ if(light_color)
+ blade_overlay.color = light_color
+ gem_overlay.color = light_color
+
+ cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
+
+ add_overlay(gem_overlay)
+
+ if(active)
+ add_overlay(blade_overlay)
+
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_hands()
+
+/obj/item/toy/sword/cx/hyper/AltClick(mob/living/user)
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user))
+ return
+ if(user.incapacitated() || !istype(user) || !in_range(src, user))
+ return
+
+ if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/energy_color_input = input(usr,"Choose Energy Color") as color|null
+ if(energy_color_input)
+ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ update_light()
+
+/obj/item/toy/sword/cx/hyper/worn_overlays(isinhands, icon_file)
+ if(isinhands)
+ var/mutable_appearance/gem_inhand = mutable_appearance(icon_file, "hypereutactic_gem")
+ gem_inhand.color = light_color
+ . += gem_inhand
+ if(active)
+ var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "hypereutactic_blade")
+ blade_inhand.color = light_color
+ . += blade_inhand
+
+/obj/item/toy/sword/cx/hyper/attackby(obj/item/W, mob/living/user, params)
+ return
+*/
\ No newline at end of file
diff --git a/modular_citadel/icons/hypereutactic/item/hypereutactic.dmi b/modular_citadel/icons/hypereutactic/item/hypereutactic.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..90a665f676dc5d34bad5f1cd2ab595134628b02b
GIT binary patch
literal 1334
zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!3HFEH|A#nsmWC#5hX6E#mPmP1tppJc?=8{
zbEcl&%hzNe()MuYbFF;`^8P61#rkx9po@#bsbM|fJ759Xu|H_J<
zaqLoeaNlX3-mLBFTix^-rIstNJW$BP)LZNtImf`H>t5=+PrFp&CwwwY&5-f9J8AZh
z+xAlT`2GHfn0v@O@3P4{qHyL|EbKs
z-(zYs(LLa<&BUJQ-VVlwy-lA!RMgphIOmbYu`6-u$BpbKj>#!xn<|xkb}^D$y0c0{
zfT8?xy?^q%?W;3pzb;PFQ?GoZ=l=~7JMVj%
z=_JE8#%(MNw;7_D8gd(S84s8pn8uJGo#4%|fp>!{LrHkacb57zgOJ?4^Cfv^UQxcn
zW?(aK{`T+yz58yfDjEJ>y_PNKQ2)~`XjzZoDMd8hH`s0nG2}4kaKbIw$FO7f5ns)i
zFW1bM7F=Ai&Okv@fq|uA{?ydA6Ko;LH)L~coBlFv_`~To=j&cB6PzTiNAhr&*=M?q6${D}Nkbey#DxHoGq~O7u6pJkL1oTuSEDf7T2NwXE+;
z%4~j!urnTrJJ_#boS3MR`FhRuBE9^VYnGP^?I{jQ7xpMT!UvgEz>)8_KV
z?DT)vDjhOsu2d^uy!Ye!yXC9q-PwBWi2jakKjnGeu5Pd{Q2jC2n;~uPFYD?;dzl-I0vW{8+yW0n5@{g*m4!vs=v;VU8Lp%TbkJ*`qZ}Kuesxlvvn!p2r
zH?~L?SWe#Pb$@?iW})D8r>ibu{UBCZT9pj(F$gS*YU3)juZiDy>
zs}=Xd`<()h@|W^S)X1d0{?MgVx57C=S>sD+!%FGB?vEQj|6^i!>OMJmU;DitS&>px
zyVZ7vq0hYCm_C@)`PDKx8t^qN|7aN=%Ezc6!LE=c$$H@P+x5Roqo)2m#k82=iWAo4
z1xp~3%m*$DuleeQ0j3y{no!LApzJ@r
z;_h$mkeOxS5(YdDx?mkfTn%RgRyOv`(^$DB{x9#BnoWk1ANpSwzCAF@{m0`~XReo6
zCNosLW2|cU`d&XE)pkN+VXdTLbj;FEd<+#PmZqzBo@Lzn<8l2=0jUGM_ZDw63j6M!
zwkTl5YKQml#CCuBQwOA~KfP`$6kuZ3c&h$prVCSi)NLJx4DH&D-bWYRon@0I!lHbR
saqE?3`?)ya`2fY`kj%FACF38)Wzv^?7G_NL0~Uk~p00i_>zopr0AMUvRsaA1
literal 0
HcmV?d00001
diff --git a/modular_citadel/icons/hypereutactic/mob/hypereutactic_left.dmi b/modular_citadel/icons/hypereutactic/mob/hypereutactic_left.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..ca940551133301c04b9ced008ba10281021fc456
GIT binary patch
literal 2428
zcmd5;`#0428-EYBG)awG2}Ap(Z55MCxnxX97#x>M4IyI5wJCC$Ff(l|j_4aPgBU
z?F_5(<*gjGkW`MBQu__EuVD@*WcSH|3p+@{kB6q5doAkQ8I5_c2>kB`M#-IUyD0Ol
zRRxNbTItXCDTXUj4Ly#&-yUMT<9*zV0ObJdH_3S|!PxOfKDxKg2>XXP;YHHeqk0Ex
z$6NYyD)^yh#$7eBUJo@c)-g+t*jZSY7}HB-04SC?oVIq4EBu3Fgm=fOrz|X^P!A0X
zU#Y9}5&8F&XjqHXTrBpScQVRZWgBj7n`$+6|A+k@D*%BrR+&X+gbi*#!-F&aWee9Y
z-T$s4Nr9m^oX&ndjFF64%vf#A3@N}lonn@lUDQn*9xYY_&ZP8202X$ElWH)Kg!tdV
zfqmo!zMaXX@nC&v4kRPur}^xsanZB4mf{}?+DbAYe6x1$tie8IlAal!UaRM~%woj!TTZFM3-3fbK=RH|hj>j?Q;C
zzU@5|9^v{>Cdx(^v4SzOFU7K%5l%B#_DV3ReI1qK642D}woW)x;bR&fb!@!$iJ&z*
z<5f4?rbqZ1GLQMZ+7aCBn`H*`!d3X{PYkyYRz8qPZ&RIGmpIvG8Mc1
zk?Eb5kU3oeShArup7w_3m2=X;z7yd`y}$ivZWN=-hzC@q!2s=&-9xB?arF+&H)mA?
z?6Vr>Koz>n2L?Q}RVPm3uYh$MYeb!RIk#fe!+
z`|_i>L8n5#ift=8{&9@}RF79HT4hk>F
z!gz%FA8D1Is(6OfW!zz4FY`*!g4FWEWFr1OtwvFtLrSdTEoS>Ybqe_^Nk2@MSUWv`
zBHkX#TO;jqu;!cW%;9IgWXNGB<+Zi5+U!rAyT8b`dEB7WwY8cr28XM6_CH?8u=IUSB7PZ=2^-gsx7R-#`COwjvc)f9sux!~5-#rNx*jX5
zB_cn04GJPhAtLnW5=;vs2BRaOJ`FeBzK&^|?5ER>O*op|mjOX6Cu*&2587SXGV450
zrZ9Yx==5+yH3d>7oj#Gs%#T>#SZma{_8*Sqn!#rFUN+YxCXSY%rL*hHZIhz8-~2>Z
zTcUkp6MrlmAOvY0Dn&9x9TaLOrtMT+r9!$#(v?1KVJ4<=r67O&flKLy+{ezP=S*t7
z9`#*amk3s-#$AZp6g;QdHc%#>-mrvVgz9D1;$|`;q+k2n&zodKEaN~Y6aME-rgq<|
zW4|hEXigT~dze~K0Xa-TUPqF%QLw(Xk0;{Svfd{qN2!Rd
zHXNGfQ@cUCheD-%uk9Px_1sS6^}S$T%3lyc%;g|(8}R-K&kTlQr%a=YV%c0wgIH7?
zvpMVAF>Ps?t7TUNw&wHayVzWabJ?Guz=rQl%Zp0x-pmc$C$kQx)Y0iZE2MNu4NcFH
zz$-b+MVR4XnX4`Kf~}RZ6^jJjqqcg`(BxZYNu66xY%DL6N)xuljX6`f8*6jS*PT&%
zOZh2|1pBOJxlQ8wlirK#lyO8nsWdfFs}c=8R48O>MZVB%7J9aUU@R0lm+#q9aQpog
ztwSBi>$?F+r%1g382|2{FyH>}AzMY07p?mJI=gJ=EQl&h9*XMZK}B9=o)NG58SsS<
z!a=c%@6oT@s`_r^_m}#RoHwJ^C5yu!zOsK{Ha!^e!;2ROtBI1dP0h_s1MSn_9R*0&
o<51t{2sTUicSrqSduDArD>rT}@YqHu^qm3@wl1eDPWk=x7lAm{z5oCK
literal 0
HcmV?d00001
diff --git a/modular_citadel/icons/hypereutactic/mob/hypereutactic_right.dmi b/modular_citadel/icons/hypereutactic/mob/hypereutactic_right.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..a9b90da74065d41cb76d85a78d23b23969c66fe9
GIT binary patch
literal 3281
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
literal 0
HcmV?d00001
diff --git a/modular_citadel/icons/lavaknight/item/head.dmi b/modular_citadel/icons/lavaknight/item/head.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..950d4894e98b9b614842e4c73e0722877167ee90
GIT binary patch
literal 377
zcmV-<0fzpGP)}V(A>l00001bW%=J06^y0W&i*H
zdwNt@bVOxyV{&P5bZKvH004NLQ&wiC?XUap~Du7F2D;i~1U78W20Y)wer
zfUKa%NL|SYSwR38At?|R5*9*Mz>4Ndc10sY6i2e5`?E+0#Q+Qw7}(3p@%UjBPy+w}
X)xiV=-0C=2ri?IrWFcd}SysxIpuiMVH7X4&kMoT*|8!w8t(`=>H!=z{uKla_D!@6_D!_4+801_vJ5WHtQdN+0KkoJ2Bdm^
zb7OG>K<@N1^yPSzUjw@^{U~VjK=*0q05|4?@P6II2
z{{p>OU~*vIm>Y{5lLPaHUMw)x{{n!>>@-gjkI{<-b4oOW%3MBKc{UEH0Y>HdWTSp{
z378v;8*--?fQ7sFIMdxtWOkZc%jfvvMiGzf-uHcL`5ckiY0h+avvBtwuvZ1mkRZzW
z^J~{O0W?h`pU;;Y1vA(;(U#BW%bKPEQ0Z?w6>1V7f)56I07zxBCJ6wa#m)lo)wjRx
zvqkW!OcsD(py$9OScAVhG6I02DDCNV8dX)xc70VY@kc7Gw5DfH?
z%4Cr{z2tK_Qkg70!HcHIZRy*ry*|&DzKsycp5R4NnJoES4!P4yDw8!yJSc*J0MAQL
zC4g8my5sVdB<}^+K250(%6q{jxqKx_sQ>fQQz;k-*uJNx2u=>n*UXqlb|Wg|%H>OD
z`?J+GQkg7zvA~wTUGqhe`1L~z;$YuIo2F@Hm#-vMf-eK@v1D{-_hpBnC`!ANrO%3*
z70~7PqdmCKurdVf1#U$uljYg!n)wkWFChGfl_9hT_v!Nc9S=x|Utwd{*nQbyJ9Wfd
zuZP{29Y$ee*RT`Ay363=%!-lE<>>PJ$>(xryGM4{%yM^48vcHx)Lcr$1H=7w3l|8_ws;bDcjLTP&V6UuWM5Vh63+=*J
zRDsn;*LA|-Fu0RQ(#yb;-R+4urkDz%a?ezx@OuBwMBq^{>`E?XvurQ
z1(Xnhi6E;p?(&r+@w>}clDs|_v1GL2du+GDb7OI1OW%G&2b|g-*=>7xa*Ej0kH+Aw
zk0pThrB}wqPd|9$KdtRn|3+v?KqwRM=0oHRt
zczo2H_X0u>)Z2FeS{}R==Q}fFXTG1}(XXcwA}M!z->{D}4o$!>f1Wna4C1ap
zERU_cAbneKEP}OA@7|ymT5%unHgG5c{tNgU%>l=I+XKfS00000NkvXXu0mjfIA*{V
literal 0
HcmV?d00001
diff --git a/modular_citadel/icons/lavaknight/mob/head.dmi b/modular_citadel/icons/lavaknight/mob/head.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..5084c9c66f43c940f3e11d3eebcc2c482daaf77f
GIT binary patch
literal 568
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeE3?v1%WpM*3tpJ}8*LnNflGC$x?ATFRQ|IjA
zt!HSwr%(6Z9=QxBMhO{tNh#_7|NpnNw5X`5%L*Ry2I^ug3GxeOaCmkj4ajM%3W+Fj
zNi9w;$}A|!%+F(BsF)KRR!~&>{Y!Ac$FEPcymhtCojD)8A=Kca@qABxE;mZ^T5oVrV*#Zq#=4k=u*9BDUvXAsgF03&1
z(2Z4XT9c^8{5+&aDq^l{OYFp-!V(f6vJyB<40#T$W;o0h7&z&Qu|dnEw1XNFtcw#w
z1eki5e*ApV;OZgh%DQ;MBIYipJQH5WW5={k)Tk#Xhl;TJWJocwww~n@i20V{?D!`&
zH9MsvfvM@V+6yaFruA(zgMGp+6?W*XZn8~RIxT-|!%K#)w$
z=HLVEo;3$QaLwA%#I%cTTK5U56xj<)%yS&BA9&CmqP$^Iv;mhJ$U!CSFP_?eHBFeZ
zwS?i;i8;P585Rv^9x6I9cdZxcxX>V!H)HEzsJq!2w6|(7x!q&m2Mjv~Pgg&ebxsLQ
E0HIdfLI3~&
literal 0
HcmV?d00001
diff --git a/modular_citadel/icons/lavaknight/mob/suit.dmi b/modular_citadel/icons/lavaknight/mob/suit.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..ed51ceaaa450220930220076a6989eba6cb360ed
GIT binary patch
literal 3764
zcmY*ccOYEd62GfQm!~Fr5G)~l@ogkwgXj{yw@8#A$y$W4)>=vQzFPF?JuFe8MoELct+@9c(!Cs=I-JYb|!Gq4yv>_IRZm
zch=CW@(%eQJKXnQiMi~nLdHu&c_j;*zdkK25xOV=4IP+DSZmraXzi+o%0ol%)NM;E
zr|Tx{7a}Rb{89%U&n6$$=4t3u2^9ChWahxr}cGId~hoccUY!bPfcEY7vT
zv`1vJK#)u-Ve;kNX7I~Z38J!_bmuX3eZ&g&Ae_wFVy_lA6fZE_vK8pj>D76f%oTy2
z*(8s1T66A8bN~H7@d#})^F6~?_t6QWWQOOsFxwd;^S^D`yY3#skOdL+{M5fWKTMXC
zdgCd^Y(7*%cnLr@ONhO%8DGvO{L+RBPrGZNTX#kMX|?$G
zb8S^P0+w3SC>pw6i{PF6dSnj`XGR3AbcMJ9Ed#qW_f7Ji=kwdj!?LT~Xvx6YihL8h
zwuM;~OQZ@t=QUnE93RLHeztcm@AT)!9DNm61QyMgFt~^N)OW(cCXpYR(92cVj^luk{8|{Mm{FiQ=iiHY_-0b`VG9kMQe{jMx
z7rN^+L8tNpWkdai6?MiT?g1uIs5eyx)jDkQ(Ba^-&9x!I;&K~3h1}HPR<7F9)4{nhT76tRhyr?ssFu<3a!o%C1uOT%!)H$3?Yf)3Li7VW
z8%rSia7CQ(PXGKsSr8f(9tUwKr0mp4qE5&L7?5h;0DKeMTMz-Qg@Ctjqc~K+ewXM&
zkxzCBls9div?qqF`c38W{SMZuD|}bT)k9!&7kNxl&FZD^^zZY7y!3PR0f{!j-lUW!
zZ1KD{C})Bzv7()fC$cVcN?wS|)7kwgR-A@RxS_YNPW68^N>=x^fGWi$em>jwZD}~H
z%#NV}J*GMHq4V#Mig%$XiuCtdvq2o@mifPPuTS?AasVQ{=d7c2OIQdQMY1)APae>8
zTr=7(p{Pr`c*5;X2)fJddpp10f2)Ig?(`|+c?OJ?BbS5iHJ}Lrvm9z`c;~v&%XIX7
zfyB(~?s9JqmEnx&7h)e96?jthh722D@n@jkNQ!by
zD6Gf(3(;2a$%@ZWo=@oAfhYfe!!XhZXMcgXjW~E(w5VJ&mtaH-4EUm3=!d#dlIMT!
z`Fp$0hkl_@mc=lN3}E9%iz6N2e*9F*S>aCX;Yu}));n^T@ydu-&MB`F@sf12vX}>K
zLvD*GRYtU!1LeIbGwsLW&@*l5mm6A?%33VNgzMmi+v7=KhP;2iSv=Ae(6E<+nb{es?sZ1)4uy!=8Zz=f?iq^8^we_ymPnrYvR99Bdk4Q1O%g&D-nek1N)N%R}xCP
zic<~sRzB~^K)S6M`-CH2X5%Kgie8n67`9TtI5`|336F
zpHN2O1dDEMh;@Wo@lzr=HFH?Q~o7Ajin6@;TDJ_8$)N_pc6&&xqoOvFTzJ&)=lP
zR}N{;P`5zf$o+Sg!+U$t;VWxbCYjD#6KyAet&obyWi8L8t|yQXAKQb9VCsBF?1UZ-Xgnn{$%dA!ZQBS?KHQdkO6NG!~II?(FTn
znr~uwKH;57+}N>rMS*mCad&!EnoMiP4uoCM7}j)kzRq3E4ANW05)<e)2J
z8I2N16H1uEz&^&{`}e8UOhR)}+jz5NijUKS=a2R&u90MlWvB}Bg)QpUOb$;Gr
zjT_HfSzB}Pm~HrBzwF9RE(G=13E>XwkUpq5iQqS&%7o93j8vVUow)aqxn@Z#g_g2%
znGNfH+%q?6H%5<_S&_>a=7tk)|HE^LN$;_yoAnhW7t=2>LRJPmkJcvJ=w9Ea{Rl}*
zOPe;%OFDsz-LyEs*^M{`8WS-vaeQGRFDongr$MKo4UYs#D(3E(w`RilOq~;C!*LV?
zrKB2O%<*na5R+yHAzWMXDay
z#>&+3N@{M0#-`kSPGt5hd`MkMXXZcjfIPj?e3^J68ChgWsodUyLGhk2VWV#
gW0D53@B9ntcckfb`lWva{)Pe?j~=U(DcNHG3)~b-g#Z8m
literal 0
HcmV?d00001
diff --git a/tgstation.dme b/tgstation.dme
index 34227a9a18..9a78dbcbca 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2409,5 +2409,8 @@
#include "interface\skin.dmf"
#include "modular_citadel\cit_medkits.dm"
#include "modular_citadel\cit_screenshake.dm"
+#include "modular_citadel\citadel_ghostrole_spawners.dm"
+#include "modular_citadel\cydonian_armor.dm"
+#include "modular_citadel\hypereutactic_blade.dm"
#include "modular_citadel\polychromic_clothes.dm"
// END_INCLUDE