diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm index 50b8682a4f4..f2cbcaa8ecf 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm @@ -62,6 +62,33 @@ /datum/species/machine/shell/handle_death(var/mob/living/carbon/human/H) return + +/datum/species/machine/shell/rogue + name = "Rogue Shell" + short_name = "roguejak" + name_plural = "Rogue Shells" + + spawn_flags = IS_RESTRICTED + + breakcuffs = list(MALE, FEMALE) + + has_organ = list( + "brain" = /obj/item/organ/mmi_holder/posibrain, + "cell" = /obj/item/organ/cell, + "optics" = /obj/item/organ/eyes/optical_sensor, + "surge" = /obj/item/organ/surge/advanced + ) + + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/terminator, /datum/unarmed_attack/bite/strong) + + inherent_verbs = list( + /mob/living/carbon/human/proc/leap, + /mob/living/carbon/human/proc/self_diagnostics + ) + +/datum/species/machine/shell/rogue/check_tag(var/mob/living/carbon/human/new_machine, var/client/player) + return + /datum/species/machine/industrial name = "Hephaestus G1 Industrial Frame" short_name = "ind" @@ -181,7 +208,8 @@ "brain" = /obj/item/organ/mmi_holder/posibrain/terminator, "shielded cell" = /obj/item/organ/cell/terminator, "optics" = /obj/item/organ/eyes/optical_sensor/terminator, - "data core" = /obj/item/organ/data + "data core" = /obj/item/organ/data, + "surge" = /obj/item/organ/surge/advanced ) has_limbs = list( diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index 68765d67fb8..48a144c7575 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -100,6 +100,27 @@ robotize() . = ..() +/obj/item/organ/surge/advanced + name = "advanced surge preventor" + var/max_charges = 5 + var/stage_ticker = 0 + var/stage_interval = 250 + +/obj/item/organ/surge/advanced/process() + ..() + + if(!owner) + return + + if(surge_left >= max_charges) + return + + if(stage_ticker < stage_interval) + stage_ticker += 2 + + if(stage_ticker >= stage_interval) + surge_left += 1 + stage_interval += 250 /obj/item/organ/eyes/optical_sensor name = "optical sensor"