diff --git a/code/datums/actions/ninja.dm b/code/datums/actions/ninja.dm
deleted file mode 100644
index c0314b9c48..0000000000
--- a/code/datums/actions/ninja.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/datum/action/item_action/initialize_ninja_suit
- name = "Toggle ninja suit"
-
-/datum/action/item_action/ninjasmoke
- name = "Smoke Bomb"
- desc = "Blind your enemies momentarily with a well-placed smoke bomb."
- button_icon_state = "smoke"
- icon_icon = 'icons/mob/actions/actions_spells.dmi'
-
-/datum/action/item_action/ninjaboost
- name = "Adrenaline Boost"
- desc = "Inject a secret chemical that will counteract all movement-impairing effect."
- button_icon_state = "repulse"
- icon_icon = 'icons/mob/actions/actions_spells.dmi'
- required_mobility_flags = NONE
-
-/datum/action/item_action/ninjapulse
- name = "EM Burst (25E)"
- desc = "Disable any nearby technology with an electro-magnetic pulse."
- button_icon_state = "emp"
- icon_icon = 'icons/mob/actions/actions_spells.dmi'
-
-/datum/action/item_action/ninjastar
- name = "Create Throwing Stars (1E)"
- desc = "Creates some throwing stars"
- button_icon_state = "throwingstar"
- icon_icon = 'icons/obj/items_and_weapons.dmi'
-
-/datum/action/item_action/ninjanet
- name = "Energy Net (20E)"
- desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds."
- button_icon_state = "energynet"
- icon_icon = 'icons/effects/effects.dmi'
-
-/datum/action/item_action/ninja_sword_recall
- name = "Recall Energy Katana (Variable Cost)"
- desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance."
- button_icon_state = "energy_katana"
- icon_icon = 'icons/obj/items_and_weapons.dmi'
-
-/datum/action/item_action/ninja_stealth
- name = "Toggle Stealth"
- desc = "Toggles stealth mode on and off."
- button_icon_state = "ninja_cloak"
- icon_icon = 'icons/mob/actions/actions_minor_antag.dmi'
-
-/datum/action/item_action/toggle_glove
- name = "Toggle interaction"
- desc = "Switch between normal interaction and drain mode."
- button_icon_state = "s-ninjan"
- icon_icon = 'icons/obj/clothing/gloves.dmi'
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 07900d6bbf..3c1c116de3 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -417,7 +417,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
desc = "A misnomer of sorts, this is effectively a blunt katana made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
icon_state = "bokken_steel"
item_state = "bokken_steel"
- force = 12
+ force = 12
stamina_damage_increment = 3
/obj/item/melee/bokken/waki
@@ -427,7 +427,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
item_state = "wakibokken"
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
- force = 6
+ force = 6
stamina_damage_increment = 4
block_parry_data = /datum/block_parry_data/bokken/waki
default_parry_data = /datum/block_parry_data/bokken/waki
@@ -442,7 +442,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
parry_time_perfect_leeway = 1
parry_imperfect_falloff_percent = 7.5
parry_efficiency_to_counterattack = 120
- parry_efficiency_considered_successful = 65
+ parry_efficiency_considered_successful = 65
parry_efficiency_perfect = 120
parry_efficiency_perfect_override = list(
TEXT_ATTACK_TYPE_PROJECTILE = 30,
@@ -455,10 +455,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/datum/block_parry_data/bokken/waki/quick_parry //For the parry spammer in you
parry_stamina_cost = 2 // Slam that parry button
parry_time_active = 2.5
- parry_time_perfect = 1
+ parry_time_perfect = 1
parry_time_perfect_leeway = 1
parry_failed_stagger_duration = 1 SECONDS
- parry_failed_clickcd_duration = 1 SECONDS
+ parry_failed_clickcd_duration = 1 SECONDS
/datum/block_parry_data/bokken/waki/quick_parry/proj
parry_efficiency_perfect_override = list()
@@ -468,7 +468,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
desc = "A misnomer of sorts, this is effectively a blunt wakizashi made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
icon_state = "wakibokken_steel"
item_state = "wakibokken_steel"
- force = 8
+ force = 8
stamina_damage_increment = 2
/obj/item/melee/bokken/debug
@@ -612,7 +612,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
name = "shock throwing star"
desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm."
throwforce = 5
- embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3)
+ embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 20, "jostle_pain_mult" = 3)
/obj/item/throwing_star/toy
name = "toy throwing star"
diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm
index e6fa612de9..4cc8d043c8 100644
--- a/code/modules/antagonists/space_ninja/space_ninja.dm
+++ b/code/modules/antagonists/space_ninja/space_ninja.dm
@@ -12,6 +12,9 @@
///Whether or not this ninja receives the standard equipment
var/give_equipment = TRUE
+/proc/is_ninja(mob/living/M)
+ return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja)
+
/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override)
var/mob/living/ninja = mob_override || owner.current
add_antag_hud(antag_hud_type, antag_hud_name, ninja)
@@ -82,7 +85,7 @@
var/datum/objective/plant_explosive/bombobjective = new /datum/objective/plant_explosive()
for(var/sanity in 1 to 100) // 100 checks at most.
var/area/selected_area = pick(GLOB.sortedAreas)
- if(!is_station_level(selected_area.z) || !(selected_area.area_flags & VALID_TERRITORY))
+ if(!is_station_level(selected_area.z) || !selected_area.valid_territory)
continue
bombobjective.detonation_location = selected_area
break
@@ -125,4 +128,4 @@
new_owner.special_role = ROLE_NINJA
new_owner.add_antag_datum(src)
message_admins("[key_name_admin(admin)] has ninja'ed [key_name_admin(new_owner)].")
- log_admin("[key_name(admin)] has ninja'ed [key_name(new_owner)].")
\ No newline at end of file
+ log_admin("[key_name(admin)] has ninja'ed [key_name(new_owner)].")
diff --git a/code/modules/events/space_ninja.dm b/code/modules/events/space_ninja.dm
index ca57326988..23326ca167 100644
--- a/code/modules/events/space_ninja.dm
+++ b/code/modules/events/space_ninja.dm
@@ -23,7 +23,7 @@
//selecting a candidate player
var/list/candidates = get_candidates(ROLE_NINJA, null, ROLE_NINJA)
- if(!candidates.len)
+ if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/selected_candidate = pick(candidates)
diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm
index e9ef4703a3..31f1ea9d71 100644
--- a/code/modules/ninja/energy_katana.dm
+++ b/code/modules/ninja/energy_katana.dm
@@ -119,5 +119,5 @@
/datum/action/innate/dash/ninja
current_charges = 3
max_charges = 3
- charge_rate = 200
+ charge_rate = 100
recharge_sound = null
diff --git a/code/modules/ninja/ninja_explosive.dm b/code/modules/ninja/ninja_explosive.dm
index 1590f35b18..604830d284 100644
--- a/code/modules/ninja/ninja_explosive.dm
+++ b/code/modules/ninja/ninja_explosive.dm
@@ -1,18 +1,20 @@
/**
- * # Spider Charge
- *
- * A unique version of c4 possessed only by the space ninja. Has a stronger blast radius.
- * Can only be detonated by space ninjas with the bombing objective. Can only be set up where the objective says it can.
- * When it primes, the space ninja responsible will have their objective set to complete.
- *
- */
-/obj/item/grenade/plastic/ninja
+ * # Spider Charge
+ *
+ * A unique version of c4 possessed only by the space ninja. Has a stronger blast radius.
+ * Can only be detonated by space ninjas with the bombing objective. Can only be set up where the objective says it can.
+ * When it primes, the space ninja responsible will have their objective set to complete.
+ *
+ */
+/obj/item/grenade/plastic/c4/ninja
name = "spider charge"
desc = "A modified C-4 charge supplied to you by the Spider Clan. Its explosive power has been juiced up, but only works in one specific area."
- boom_sizes = list(4, 8, 12)
+ icon_state = "plasticspider0"
+ item_state = "plasticspider"
+ boom_sizes = list(2, 4, 6)
var/mob/detonator = null
-/obj/item/grenade/c4/ninja/afterattack(atom/movable/AM, mob/user, flag)
+/obj/item/grenade/plastic/c4/ninja/afterattack(atom/movable/AM, mob/user, flag)
var/datum/antagonist/ninja/ninja_antag = user.mind.has_antag_datum(/datum/antagonist/ninja)
if(!ninja_antag)
to_chat(user, "While it appears normal, you can't seem to detonate the charge.")
@@ -27,7 +29,7 @@
detonator = user
return ..()
-/obj/item/grenade/c4/ninja/prime(mob/living/lanced_by)
+/obj/item/grenade/plastic/c4/ninja/prime(mob/living/lanced_by)
. = ..()
//Since we already did the checks in afterattack, the denonator must be a ninja with the bomb objective.
if(!detonator)
diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm
index 2c10a8c10f..21c2acf147 100644
--- a/code/modules/ninja/outfit.dm
+++ b/code/modules/ninja/outfit.dm
@@ -8,10 +8,9 @@
ears = /obj/item/radio/headset
shoes = /obj/item/clothing/shoes/space_ninja
gloves = /obj/item/clothing/gloves/space_ninja
- back = /obj/item/tank/jetpack/carbondioxide
- l_pocket = /obj/item/grenade/plastic/ninja
- r_pocket = /obj/item/tank/internals/emergency_oxygen
- internals_slot = SLOT_R_STORE
+ l_pocket = /obj/item/grenade/plastic/c4/ninja
+ suit_store = /obj/item/tank/internals/oxygen
+ internals_slot = ITEM_SLOT_SUITSTORE
belt = /obj/item/energy_katana
implants = list(/obj/item/implant/explosive)
diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm
index 17cc5fc391..77bf80216b 100644
--- a/code/modules/ninja/suit/gloves.dm
+++ b/code/modules/ninja/suit/gloves.dm
@@ -12,7 +12,7 @@
desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
name = "ninja gloves"
icon_state = "black"
- item_state = "s-ninjan"
+ item_state = "ninja_new"
siemens_coefficient = 0
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm
index 6f9bc7ef4c..55701a799d 100644
--- a/code/modules/ninja/suit/head.dm
+++ b/code/modules/ninja/suit/head.dm
@@ -9,8 +9,8 @@
/obj/item/clothing/head/helmet/space/space_ninja
desc = "What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear."
name = "ninja hood"
- icon_state = "s-ninja"
- item_state = "s-ninja_mask"
+ icon_state = "ninja_newcowl"
+ item_state = "ninja_newcowl"
armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 25, FIRE = 100, ACID = 100)
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
blockTracking = TRUE//Roughly the only unique thing about this helmet.
diff --git a/code/modules/ninja/suit/mask.dm b/code/modules/ninja/suit/mask.dm
index 111f76ae65..237b252030 100644
--- a/code/modules/ninja/suit/mask.dm
+++ b/code/modules/ninja/suit/mask.dm
@@ -9,8 +9,8 @@
/obj/item/clothing/mask/gas/space_ninja
name = "ninja mask"
desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
- icon_state = "s-ninja"
- item_state = "s-ninja_mask"
+ icon_state = "ninja_new"
+ item_state = "ninja_new"
strip_delay = 120
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
modifies_speech = TRUE
diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm
index 5a8cfccf9b..018f4e9fec 100644
--- a/code/modules/ninja/suit/ninjaDrainAct.dm
+++ b/code/modules/ninja/suit/ninjaDrainAct.dm
@@ -1,13 +1,13 @@
/**
- * Atom level proc for space ninja's glove interactions.
- *
- * Proc which only occurs when space ninja uses his gloves on an atom.
- * Does nothing by default, but effects will vary.
- * Arguments:
- * * ninja_suit - The offending space ninja's suit.
- * * ninja - The human mob wearing the suit.
- * * ninja_gloves - The offending space ninja's gloves.
- */
+ * Atom level proc for space ninja's glove interactions.
+ *
+ * Proc which only occurs when space ninja uses his gloves on an atom.
+ * Does nothing by default, but effects will vary.
+ * Arguments:
+ * * ninja_suit - The offending space ninja's suit.
+ * * ninja - The human mob wearing the suit.
+ * * ninja_gloves - The offending space ninja's gloves.
+ */
/atom/proc/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
return INVALID_DRAIN
@@ -20,7 +20,7 @@
var/drain = 0 //Drain amount from batteries
var/drain_total = 0
- if(cell?.charge)
+ if(cell && cell.charge)
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, loc)
@@ -36,16 +36,16 @@
if (do_after(ninja ,10, target = src))
spark_system.start()
- playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- cell.use(drain)
- ninja_suit.cell.give(drain)
+ playsound(loc, "sparks", 50, 1)
+ cell.charge -= drain
+ ninja_suit.cell.charge += drain
drain_total += drain
else
break
if(!(obj_flags & EMAGGED))
flick("apc-spark", ninja_gloves)
- playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(loc, "sparks", 50, 1)
obj_flags |= EMAGGED
locked = FALSE
update_icon()
@@ -57,8 +57,8 @@
if(!ninja_suit || !ninja || !ninja_gloves)
return INVALID_DRAIN
- var/maxcapacity = FALSE //Safety check for batteries
- var/drain = 0 //Drain amount from batteries
+ var/maxcapacity = 0 //Safety check for batteries
+ var/drain = FALSE //Drain amount from batteries
var/drain_total = 0
if(charge)
@@ -77,9 +77,9 @@
if (do_after(ninja,10, target = src))
spark_system.start()
- playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(loc, "sparks", 50, 1)
charge -= drain
- ninja_suit.cell.give(drain)
+ ninja_suit.cell.charge += drain
drain_total += drain
else
@@ -95,12 +95,12 @@
var/drain_total = 0
if(charge)
- if(ninja_gloves.candrain && do_after(ninja, 30, target = src))
+ if(ninja_gloves.candrain && do_after(ninja,30, target = src))
drain_total = charge
if(ninja_suit.cell.charge + charge > ninja_suit.cell.maxcharge)
ninja_suit.cell.charge = ninja_suit.cell.maxcharge
else
- ninja_suit.cell.give(charge)
+ ninja_suit.cell.charge += charge
charge = 0
corrupt()
update_icon()
@@ -120,11 +120,11 @@
if(stored_research)
to_chat(ninja, "Copying files...")
if(do_after(ninja, ninja_suit.s_delay, target = src) && ninja_gloves.candrain && src)
- stored_research.copy_research_to(ninja_suit.stored_research)
+ stored_research.copy_research_to( ninja_suit.stored_research)
to_chat(ninja, "Data analyzed. Process finished.")
//RD SERVER//
-/obj/machinery/rnd/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
+//obj/machinery/rnd/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
if(!ninja_suit || !ninja || !ninja_gloves)
return INVALID_DRAIN
@@ -143,6 +143,7 @@
/obj/machinery/computer/secure_data/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
if(!ninja_suit || !ninja || !ninja_gloves)
return INVALID_DRAIN
+ to_chat(ninja, "Hacking \the [src]...")
AI_notify_hack()
if(do_after(ninja, 200))
for(var/datum/data/record/rec in sortRecord(GLOB.data_core.general, sortBy, order))
@@ -154,6 +155,7 @@
var/datum/objective/security_scramble/objective = locate() in ninja_antag.objectives
if(objective)
objective.completed = TRUE
+ to_chat(ninja, "Security record corruption malware uploaded. Process finished; objective completed.")
//COMMUNICATIONS CONSOLE//
/obj/machinery/computer/communications/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
@@ -161,6 +163,7 @@
return INVALID_DRAIN
if(ninja_gloves.communication_console_hack_success)
return
+ to_chat(ninja, "Hacking \the [src]...")
AI_notify_hack()
if(do_after(ninja, 300))
var/announcement_pick = rand(0, 1)
@@ -180,6 +183,7 @@
var/datum/objective/terror_message/objective = locate() in ninja_antag.objectives
if(objective)
objective.completed = TRUE
+ to_chat(ninja, "Signal decryption malware uploaded. Process finished; objective completed.")
//AIRLOCK//
/obj/machinery/door/airlock/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
@@ -195,6 +199,7 @@
var/datum/objective/door_jack/objective = locate() in ninja_antag.objectives
if(objective && objective.doors_required <= ninja_gloves.door_hack_counter)
objective.completed = TRUE
+ to_chat(ninja, "Malware uploaded to airlock access subroutines. Forcing open.")
//WIRE//
/obj/structure/cable/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
@@ -210,7 +215,7 @@
while(ninja_gloves.candrain && !maxcapacity && src)
drain = (round((rand(ninja_gloves.mindrain, ninja_gloves.maxdrain))/2))
var/drained = 0
- if(wire_powernet && do_after(ninja ,10, target = src))
+ if(wire_powernet && do_after(ninja,10, target = src))
drained = min(drain, delayed_surplus())
add_delayedload(drained)
if(drained < drain)//if no power on net, drain apcs
@@ -223,9 +228,9 @@
else
break
- ninja_suit.cell.give(drain)
+ ninja_suit.cell.charge += drained
if(ninja_suit.cell.charge > ninja_suit.cell.maxcharge)
- drain_total += (drained-(ninja_suit.cell.charge - ninja_suit.cell.maxcharge))
+ . += (drained-(ninja_suit.cell.charge - ninja_suit.cell.maxcharge))
ninja_suit.cell.charge = ninja_suit.cell.maxcharge
maxcapacity = TRUE
else
@@ -235,7 +240,7 @@
return drain_total
//MECH//
-/obj/vehicle/sealed/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
+/obj/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
if(!ninja_suit || !ninja || !ninja_gloves)
return INVALID_DRAIN
@@ -243,7 +248,7 @@
var/drain = 0 //Drain amount
var/drain_total = 0
- to_chat(occupants, "[icon2html(src, occupants)]Warning: Unauthorized access through sub-route 4, block H, detected.")
+ occupant_message("Warning: Unauthorized access through sub-route 4, block H, detected.")
if(get_charge())
while(ninja_gloves.candrain && cell.charge > 0 && !maxcapacity)
drain = rand(ninja_gloves.mindrain, ninja_gloves.maxdrain)
@@ -254,7 +259,7 @@
maxcapacity = TRUE
if (do_after(ninja, 10, target = src))
spark_system.start()
- playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(loc, "sparks", 50, 1)
cell.use(drain)
ninja_suit.cell.give(drain)
drain_total += drain
@@ -272,13 +277,13 @@
if (do_after(ninja, 60, target = src))
spark_system.start()
playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- to_chat(src, "UPLOAD COMPLETE. NEW CYBORG MODEL DETECTED. INSTALLING...")
+ to_chat(src, "UPLOAD COMPLETE. NEW CYBORG MODULE DETECTED. INSTALLING...")
faction = list(ROLE_NINJA)
bubble_icon = "syndibot"
UnlinkSelf()
ionpulse = TRUE
laws = new /datum/ai_laws/ninja_override()
- model.transform_to(pick(/obj/item/robot_model/syndicate, /obj/item/robot_model/syndicate_medical, /obj/item/robot_model/saboteur))
+ module.transform_to(pick(/obj/item/robot_module/syndicate, /obj/item/robot_module/syndicate_medical, /obj/item/robot_module/saboteur))
var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja)
if(!ninja_antag)
@@ -286,3 +291,34 @@
var/datum/objective/cyborg_hijack/objective = locate() in ninja_antag.objectives
if(objective)
objective.completed = TRUE
+
+//CARBON MOBS//
+/mob/living/carbon/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
+ if(!ninja_suit || !ninja || !ninja_gloves)
+ return INVALID_DRAIN
+
+ . = DRAIN_MOB_SHOCK_FAILED
+
+ //Default cell = 10,000 charge, 10,000/1000 = 10 uses without charging/upgrading
+ if(ninja_suit.cell?.charge && ninja_suit.cell.use(1000))
+ . = DRAIN_MOB_SHOCK
+ //Got that electric touch
+ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
+ spark_system.set_up(5, 0, loc)
+ playsound(src, "sparks", 50, 1)
+ visible_message("[ninja] electrocutes [src] with [ninja.p_their()] touch!", "[ninja] electrocutes you with [ninja.p_their()] touch!")
+ electrocute_act(15, ninja, flags = SHOCK_NOSTUN)
+
+ DefaultCombatKnockdown(ninja_gloves.stunforce, override_hardstun = 0)
+ apply_effect(EFFECT_STUTTER, ninja_gloves.stunforce)
+ SEND_SIGNAL(src, COMSIG_LIVING_MINOR_SHOCK)
+
+ lastattacker = ninja.real_name
+ lastattackerckey = ninja.ckey
+ log_combat(ninja, src, "stunned")
+
+ playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
+
+ if(ishuman(src))
+ var/mob/living/carbon/human/Hsrc = src
+ Hsrc.forcesay(GLOB.hit_appends)
diff --git a/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm b/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm
index 3d4ce44350..bc0828242e 100644
--- a/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm
+++ b/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm
@@ -13,6 +13,7 @@
icon = 'icons/effects/effects.dmi'
icon_state = "energynet"
+
density = TRUE//Can't pass through.
opacity = FALSE //Can see through.
mouse_opacity = MOUSE_OPACITY_ICON//So you can hit it with stuff.
diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm
index d5d1a52678..fca5b4caff 100644
--- a/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm
+++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm
@@ -5,8 +5,8 @@
check_flags = NONE
name = "Adrenaline Boost"
desc = "Inject a secret chemical that will counteract all movement-impairing effect."
- button_icon_state = "repulse"
- icon_icon = 'icons/mob/actions/actions_spells.dmi'
+ button_icon_state = "adrenal"
+ icon_icon = 'icons/obj/implants.dmi'
/**
* Proc called to activate space ninja's adrenaline.
@@ -41,5 +41,5 @@
*/
/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost_after()
var/mob/living/carbon/human/ninja = affecting
- ninja.reagents.add_reagent(/datum/reagent/uranium/radium, a_transfer * 0.25)
+ ninja.reagents.add_reagent(/datum/reagent/radium, a_transfer * 0.25)
to_chat(ninja, "You are beginning to feel the after-effect of the injection.")
diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm
index ec5bf078a5..d78984fa37 100644
--- a/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm
+++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm
@@ -1,7 +1,7 @@
/datum/action/item_action/toggle_glove
name = "Toggle interaction"
desc = "Switch between normal interaction and drain mode."
- button_icon_state = "s-ninjan"
+ button_icon_state = "ninja_new"
icon_icon = 'icons/obj/clothing/gloves.dmi'
/**
diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm
index 7ab3bedaaf..0bedd31c72 100644
--- a/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm
+++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm
@@ -4,6 +4,7 @@
desc = "Gives a detailed readout about your current status."
button_icon_state = "health"
icon_icon = 'icons/obj/device.dmi'
+ var/action_background_icon_state = "bg_default_on"
/**
* Proc called to put a status readout to the ninja in chat.
@@ -17,7 +18,6 @@
var/mob/living/carbon/human/ninja = affecting
var/list/info_list = list()
info_list += "SpiderOS Status: [s_initialized ? "Initialized" : "Disabled"]\n"
- info_list += "Current Time: [station_time_timestamp()]\n"
//Ninja status
info_list += "Fingerprints: [md5(ninja.dna.uni_identity)]\n"
info_list += "Unique Identity: [ninja.dna.unique_enzymes]\n"
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index a504b6c322..259eb60446 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -11,8 +11,8 @@
/obj/item/clothing/suit/space/space_ninja
name = "ninja suit"
desc = "A unique, vacuum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
- icon_state = "s-ninja"
- item_state = "s-ninja_suit"
+ icon_state = "ninja_new"
+ item_state = "ninja_new"
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
@@ -81,11 +81,6 @@
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)
/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action)
if(IS_NINJA_SUIT_INITIALIZATION(action))
toggle_on_off()
@@ -93,7 +88,7 @@
if(!s_initialized)
to_chat(user, "ERROR: suit offline. Please activate suit.")
return FALSE
- if(s_coold != 0)
+ if(s_coold > 0)
to_chat(user, "ERROR: suit is on cooldown.")
return FALSE
if(IS_NINJA_SUIT_STATUS(action))
@@ -119,36 +114,12 @@
return TRUE
return FALSE
-/obj/item/clothing/suit/space/space_ninja/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+/obj/item/clothing/suit/space/space_ninja/run_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = ATTACK_TYPE_MELEE)
. = ..()
if(stealth)
cancel_stealth()
s_coold = 5
-/**
- * Proc for changing the suit's appearance upon locking.
- *
- * Proc for when space ninja's suit locks. If the user selects Original, gives it glowing lights, along with having an alternate sprite for female body types.
- * Yes, we do have nipLEDs, how could you tell?
- * If the user selects New Age, it applies new sprites to all the gear.
- * Arguments:
- * * ninja - The person wearing the suit.
- */
-/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/ninja)
- var/design_choice = alert(ninja, "Please choose your desired suit design.",,"Original","New Age")
- switch(design_choice)
- if("Original")
- icon_state = ninja.body_type == "female" ? "s-ninjanf" : "s-ninjan"
- ninja.gloves.icon_state = "s-ninjan"
- ninja.gloves.inhand_icon_state = "s-ninjan"
- if("New Age")
- icon_state ="ninja_new"
- n_hood.icon_state = "ninja_newcowl"
- n_gloves.icon_state = "ninja_new"
- if(n_mask)
- n_mask.icon_state = "ninja_new"
-
-
/**
* Proc called to lock the important gear pieces onto space ninja's body.
*
@@ -226,7 +197,7 @@
* Can be called to entire rid of the suit pieces and the suit itself.
*/
/obj/item/clothing/suit/space/space_ninja/proc/terminate()
- QDEL_NULL(n_hood)
- QDEL_NULL(n_gloves)
- QDEL_NULL(n_shoes)
- QDEL_NULL(src)
+ qdel(n_hood)
+ qdel(n_gloves)
+ qdel(n_shoes)
+ qdel(src)
diff --git a/code/modules/ninja/suit/suit_attackby.dm b/code/modules/ninja/suit/suit_attackby.dm
index 613d172182..75d438a35f 100644
--- a/code/modules/ninja/suit/suit_attackby.dm
+++ b/code/modules/ninja/suit/suit_attackby.dm
@@ -2,8 +2,8 @@
if(ninja!=affecting)//Safety, in case you try doing this without wearing the suit/being the person with the suit.
return ..()
- if(istype(I, /obj/item/reagent_containers/glass) && I.reagents.has_reagent(/datum/reagent/uranium/radium, a_transfer) && a_boost != TRUE)//If it's a glass beaker, and what we're transferring is radium.
- I.reagents.remove_reagent(/datum/reagent/uranium/radium, a_transfer)
+ if(istype(I, /obj/item/reagent_containers/glass) && I.reagents.has_reagent(/datum/reagent/radium, a_transfer) && a_boost != TRUE)//If it's a glass beaker, and what we're transferring is radium.
+ I.reagents.remove_reagent(/datum/reagent/radium, a_transfer)
a_boost = TRUE;
to_chat(ninja, "The suit's adrenaline boost is now reloaded.")
return
@@ -39,6 +39,6 @@
else
to_chat(ninja, "ERROR: Procedure interrupted. Process terminated.")
else
- to_chat(U, "No research information detected.")
+ to_chat(ninja, "No research information detected.")
return
return ..()
diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi
index 227ae83166..28c901ee7a 100644
Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ
diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi
index 406b0fe62a..82c3700349 100644
Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ
diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi
index 23b981031c..c1e29e2845 100644
Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ
diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi
index 7d9433525a..cee2c53e7c 100644
Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ
diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi
index ae7117d53b..16399357c9 100644
Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi
index e4f22de1cd..b32d47115f 100644
Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi
index e5c3c2f5c9..6e3dcda461 100644
Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index 629b989520..c5b43b3b3c 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 9fa3e527ca..fd1ed97582 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index acd64bb424..96bea9965e 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index ba9f94e67a..8039c3a78d 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi
index d6dd4c1b00..e2f06621e4 100644
Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index e832bf64d3..0edeb3dd9c 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 0c9ae166d6..32b2e9db3a 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -430,7 +430,6 @@
#include "code\datums\weakrefs.dm"
#include "code\datums\world_topic.dm"
#include "code\datums\actions\beam_rifle.dm"
-#include "code\datums\actions\ninja.dm"
#include "code\datums\brain_damage\brain_trauma.dm"
#include "code\datums\brain_damage\hypnosis.dm"
#include "code\datums\brain_damage\imaginary_friend.dm"