mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-06 15:02:29 +00:00
* Fixes energy net * Ninjaboost usable while unconscious, remove unused action * remove delay from adrenline message * remove redundant stun check * fixes ninja action icons * remove toggle special interaction verb * Remoeves slotting research disks into suit * non ninjas can now start the suit initilisation * remove unused code, capacity > charge * radium now restores adrealine boosts, other suit reagents removed * oops * adrenaline boost removes stuttering * ninjas no longer start with flashlights * ninja suit deinitializes properly * fix gib ninja suit gib message * energy nets use buckling instead of anchoring, buckle_lying = -1 is now handled properly * suit examine reports capcity properly * ninja code cleanup * undo buckle_lying changes
192 lines
6.8 KiB
Plaintext
192 lines
6.8 KiB
Plaintext
|
||
/*
|
||
|
||
Contents:
|
||
- The Ninja Space Suit
|
||
- Ninja Space Suit Procs
|
||
|
||
*/
|
||
|
||
|
||
// /obj/item/clothing/suit/space/space_ninja
|
||
|
||
|
||
/obj/item/clothing/suit/space/space_ninja
|
||
name = "ninja suit"
|
||
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
|
||
icon_state = "s-ninja"
|
||
item_state = "s-ninja_suit"
|
||
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell)
|
||
slowdown = 1
|
||
resistance_flags = LAVA_PROOF | ACID_PROOF
|
||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100)
|
||
strip_delay = 12
|
||
|
||
actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove)
|
||
|
||
//Important parts of the suit.
|
||
var/mob/living/carbon/human/affecting = null
|
||
var/obj/item/stock_parts/cell/cell
|
||
var/datum/effect_system/spark_spread/spark_system
|
||
var/list/stored_research = list()//For stealing station research.
|
||
var/obj/item/disk/tech_disk/t_disk//To copy design onto disk.
|
||
var/obj/item/dash/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability)
|
||
|
||
//Other articles of ninja gear worn together, used to easily reference them after initializing.
|
||
var/obj/item/clothing/head/helmet/space/space_ninja/n_hood
|
||
var/obj/item/clothing/shoes/space_ninja/n_shoes
|
||
var/obj/item/clothing/gloves/space_ninja/n_gloves
|
||
|
||
//Main function variables.
|
||
var/s_initialized = 0//Suit starts off.
|
||
var/s_coold = 0//If the suit is on cooldown. Can be used to attach different cooldowns to abilities. Ticks down every second based on suit ntick().
|
||
var/s_cost = 5//Base energy cost each ntick.
|
||
var/s_acost = 25//Additional cost for additional powers active.
|
||
var/s_delay = 40//How fast the suit does certain things, lower is faster. Can be overridden in specific procs. Also determines adverse probability.
|
||
var/a_transfer = 20//How much radium is used per adrenaline boost.
|
||
var/a_maxamount = 7//Maximum number of adrenaline boosts.
|
||
|
||
//Support function variables.
|
||
var/s_active = 0//Stealth off.
|
||
var/s_busy = FALSE//Is the suit busy with a process? Like AI hacking. Used for safety functions.
|
||
|
||
//Ability function variables.
|
||
var/s_bombs = 10//Number of starting ninja smoke bombs.
|
||
var/a_boost = 3//Number of adrenaline boosters.
|
||
|
||
|
||
/obj/item/clothing/suit/space/space_ninja/get_cell()
|
||
return cell
|
||
|
||
/obj/item/clothing/suit/space/space_ninja/New()
|
||
..()
|
||
|
||
//Spark Init
|
||
spark_system = new()
|
||
spark_system.set_up(5, 0, src)
|
||
spark_system.attach(src)
|
||
|
||
//Research Init
|
||
stored_research = new()
|
||
for(var/T in subtypesof(/datum/tech))//Store up on research.
|
||
stored_research += new T(src)
|
||
|
||
//Cell Init
|
||
cell = new/obj/item/stock_parts/cell/high
|
||
cell.charge = 9000
|
||
cell.name = "black power cell"
|
||
cell.icon_state = "bscell"
|
||
|
||
//Simply deletes all the attachments and self, killing all related procs.
|
||
/obj/item/clothing/suit/space/space_ninja/proc/terminate()
|
||
qdel(n_hood)
|
||
qdel(n_gloves)
|
||
qdel(n_shoes)
|
||
qdel(src)
|
||
|
||
|
||
//Randomizes suit parameters.
|
||
/obj/item/clothing/suit/space/space_ninja/proc/randomize_param()
|
||
s_cost = rand(1,20)
|
||
s_acost = rand(20,100)
|
||
s_delay = rand(10,100)
|
||
s_bombs = rand(5,20)
|
||
a_boost = rand(1,7)
|
||
|
||
|
||
//This proc prevents the suit from being taken off.
|
||
/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H)
|
||
if(!istype(H))
|
||
return 0
|
||
if(!is_ninja(H))
|
||
to_chat(H, "<span class='danger'><B>fÄTaL ÈÈRRoR</B>: 382200-*#00CÖDE <B>RED</B>\nUNAUHORIZED USÈ DETÈCeD\nCoMMÈNCING SUB-R0UIN3 13...\nTÈRMInATING U-U-USÈR...</span>")
|
||
H.gib()
|
||
return FALSE
|
||
if(!istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja))
|
||
to_chat(H, "<span class='userdanger'>ERROR</span>: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING...")
|
||
return FALSE
|
||
if(!istype(H.shoes, /obj/item/clothing/shoes/space_ninja))
|
||
to_chat(H, "<span class='userdanger'>ERROR</span>: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING...")
|
||
return FALSE
|
||
if(!istype(H.gloves, /obj/item/clothing/gloves/space_ninja))
|
||
to_chat(H, "<span class='userdanger'>ERROR</span>: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...")
|
||
return FALSE
|
||
affecting = H
|
||
flags_1 |= NODROP_1 //colons make me go all |=
|
||
slowdown = 0
|
||
n_hood = H.head
|
||
n_hood.flags_1 |= NODROP_1
|
||
n_shoes = H.shoes
|
||
n_shoes.flags_1 |= NODROP_1
|
||
n_shoes.slowdown--
|
||
n_gloves = H.gloves
|
||
n_gloves.flags_1 |= NODROP_1
|
||
return TRUE
|
||
|
||
/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H)
|
||
icon_state = H.gender==FEMALE ? "s-ninjanf" : "s-ninjan"
|
||
H.gloves.icon_state = "s-ninjan"
|
||
H.gloves.item_state = "s-ninjan"
|
||
|
||
|
||
//This proc allows the suit to be taken off.
|
||
/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit()
|
||
affecting = null
|
||
flags_1 &= ~NODROP_1
|
||
slowdown = 1
|
||
icon_state = "s-ninja"
|
||
if(n_hood)//Should be attached, might not be attached.
|
||
n_hood.flags_1 &= ~NODROP_1
|
||
if(n_shoes)
|
||
n_shoes.flags_1 &= ~NODROP_1
|
||
n_shoes.slowdown++
|
||
if(n_gloves)
|
||
n_gloves.icon_state = "s-ninja"
|
||
n_gloves.item_state = "s-ninja"
|
||
n_gloves.flags_1 &= ~NODROP_1
|
||
n_gloves.candrain=0
|
||
n_gloves.draining=0
|
||
|
||
|
||
/obj/item/clothing/suit/space/space_ninja/examine(mob/user)
|
||
..()
|
||
if(s_initialized)
|
||
if(user == affecting)
|
||
to_chat(user, "All systems operational. Current energy capacity: <B>[DisplayPower(cell.charge)]</B>.")
|
||
to_chat(user, "The CLOAK-tech device is <B>[s_active?"active":"inactive"]</B>.")
|
||
to_chat(user, "There are <B>[s_bombs]</B> smoke bomb\s remaining.")
|
||
to_chat(user, "There are <B>[a_boost]</B> adrenaline booster\s remaining.")
|
||
|
||
/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action)
|
||
if(istype(action, /datum/action/item_action/initialize_ninja_suit))
|
||
toggle_on_off()
|
||
return TRUE
|
||
if(!s_initialized)
|
||
to_chat(user, "<span class='warning'><b>ERROR</b>: suit offline. Please activate suit.</span>")
|
||
return FALSE
|
||
if(istype(action, /datum/action/item_action/ninjasmoke))
|
||
ninjasmoke()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/ninjaboost))
|
||
ninjaboost()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/ninjapulse))
|
||
ninjapulse()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/ninjastar))
|
||
ninjastar()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/ninjanet))
|
||
ninjanet()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/ninja_sword_recall))
|
||
ninja_sword_recall()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/ninja_stealth))
|
||
stealth()
|
||
return TRUE
|
||
if(istype(action, /datum/action/item_action/toggle_glove))
|
||
n_gloves.toggledrain()
|
||
return TRUE
|
||
return FALSE
|