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"