Removes Ninja EMP burst / Adds Ninja EMP shurikens (#92899)

## About The Pull Request

- Ninja no longer has access to an EMP burst shield, now replaced with a
normal EMP shield.

- Ninja throwing stars are now emergy throwing stars. 
- On impact, they will release a heavy emp on the target it hit. This
can be a mob, a door, a machine, etc.
- On embed, in addition to the initial heavy emp, the target will be hit
with a light emp every 6 seconds until removing it.
   - `DROPDEL`, meaning they're not reusable. 
- 75 armor penetration, up from 40. Making it more likely to embed into
armored personnel (security)
- 8 force, up from 2. Meaning they can work as a really bad emergency
weapon.
- 12 throwforce, up from 10. Mainly cause it's made of energy instead of
steel
   - Can't be caught
   - See: #91855 . 

- Shurikens no longer "thud" on impact, now they make a stabbing sound.

## Why It's Good For The Game

Ninja is a cool techno future ninja but they still generate infinite
steel shurikens out of thin air

Ninja is supposed to be a master of stealth but they have an ability
which makes everyone in a twelve block radius know there's a problem

So we can solve both of these at once, replacing their normal shurikens
with more thematically appropriate ones, and replacing their massive EMP
burst with a more directed, stealthy EMP (that also opens up some unique
gameplay like targeting an APC with a shuriken for sabotage)

## Changelog

🆑 Melbert, Toriate
del: Removed ninja's EMP burst
add: Replaced ninja's throwing stars with energy throwing stars, which
EMP on hit and embed, and can't be caught.
sound: Throwing stars now make stab sounds instead of thud sounds
/🆑
This commit is contained in:
MrMelbert
2025-09-15 16:28:53 -05:00
committed by GitHub
parent caf25c81f5
commit 2ac786671f
6 changed files with 50 additions and 19 deletions

View File

@@ -416,6 +416,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throw_speed = 4
embed_type = /datum/embedding/throwing_star
armour_penetration = 40
mob_throw_hit_sound = 'sound/items/weapons/pierce.ogg'
hitsound = 'sound/items/weapons/bladeslice.ogg'
w_class = WEIGHT_CLASS_SMALL
sharpness = SHARP_POINTY

View File

@@ -1,18 +1,48 @@
/**
* # Ninja Throwing Star
*
* a throwing star which specifically makes sure you know it came from a real ninja.
*
* The most important item in the entire codebase, as without it we would all cease to exist.
* Inherits everything that makes it interesting the stamina throwing star, but the most
* important change made is that its name specifically has the prefix, 'ninja' in it.
* This provides the detective role with information to play off of by ensuring that his
* assumption that a space ninja is aboard the ship to be true when he find 20 of these in
* the captain's back. Along with this, its throwforce is 10 instead of the 5 of the stamina
* throwing star, meaning it'll do a little more damage than the stamina throwing star does as well.
* Changes to this item need to be approved by all maintainers, so if you do change it, make sure
* you go through the proper channels, lest you get permabanned. Do I make myself clear?
*/
/obj/item/throwing_star/stamina/ninja
name = "ninja throwing star"
throwforce = 10
name = "energy throwing star"
desc = "An evolution of the traditional steel shuriken, commonly used by Spider Clan initiates. \
When thrown or embedded, its internal energy emitter releases an electromagnetic pulse."
icon_state = "eshuriken"
force = 8
throwforce = 12
armour_penetration = 75
item_flags = DROPDEL
embed_type = /datum/embedding/throwing_star/stamina/energy
custom_materials = null
resistance_flags = FIRE_PROOF | ACID_PROOF | UNACIDABLE
/obj/item/throwing_star/stamina/ninja/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_UNCATCHABLE, INNATE_TRAIT)
/obj/item/throwing_star/stamina/ninja/on_thrown(mob/living/carbon/user, atom/target)
item_flags &= ~DROPDEL // Throwing = dropping = dropdel, not ideal. Remove it before that happens
return ..()
/obj/item/throwing_star/stamina/ninja/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
item_flags |= DROPDEL // Just in case, re-apply drop del now
hit_atom.emp_act(EMP_HEAVY)
new /obj/effect/temp_visual/emp/pulse(get_turf(src))
new /obj/effect/temp_visual/emp(get_turf(hit_atom))
playsound(src, 'sound/effects/empulse.ogg', 60, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
visible_message("[src] emits an electromagnetic pulse upon impact!")
if(isturf(loc)) // if we didn't embed in anything, go away
qdel(src)
/datum/embedding/throwing_star/stamina/energy
COOLDOWN_DECLARE(emp_cd)
/datum/embedding/throwing_star/stamina/energy/on_successful_embed(mob/living/carbon/victim, obj/item/bodypart/target_limb)
COOLDOWN_START(src, emp_cd, 6 SECONDS)
parent.item_flags |= DROPDEL // Just in case again, re-apply drop del now
/datum/embedding/throwing_star/stamina/energy/process_effect(seconds_per_tick)
if(!COOLDOWN_FINISHED(src, emp_cd))
return
owner.emp_act(EMP_LIGHT)
COOLDOWN_START(src, emp_cd, 6 SECONDS)
playsound(owner, 'sound/effects/empulse.ogg', 30, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
owner.show_message("[parent] flares brightly, releasing an electromagnetic pulse!", MSG_VISUAL)
new /obj/effect/temp_visual/emp(get_turf(owner))

View File

@@ -409,13 +409,12 @@
/obj/item/mod/module/stealth/ninja,
/obj/item/mod/module/dispenser/ninja,
/obj/item/mod/module/dna_lock/reinforced,
/obj/item/mod/module/emp_shield/pulse,
/obj/item/mod/module/emp_shield,
/obj/item/mod/module/quick_cuff,
)
default_pins = list(
/obj/item/mod/module/stealth/ninja,
/obj/item/mod/module/dispenser/ninja,
/obj/item/mod/module/emp_shield/pulse,
/obj/item/mod/module/weapon_recall,
/obj/item/mod/module/adrenaline_boost,
/obj/item/mod/module/energy_net,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB