Stealth and Steel: The Space Ninja (#31497)

* Space Ninja Antag Datum

* Small fixes

* Ninja outfit, ekatana, actions

* Ninja scanner and spans

* Ninja uplink implant

* Ninja bombs

* Ninja bomb flare grants

* Ninja modsuit, objective payouts

* Fixes objectives

* Ninja stealth fix, modsuit sprites and final implementations

* Lints

* Ninja scanner sprites

* Ninja Suit and Energy Shuriken Sprites

* Fixes config, Adjusts stim ability, adds shuriken printer and e-shurikens, uplink stuff

* Fixes a duplicate icon

* Attack chain

* Energy katana item sprite

* Ninja net gun

* Brazil

* Spawning ninjas, ninja on traitor panel, ninja spawn sound

* Linter

* Objective stuff

* Fixes n grey suits

* Objectives

* Trim intro sound

* Event, spawn point

* Ninja Outfits, Vox Check, Bug Fixes, Mirror at ninja spawn

* Address code review

* Oops

* Uncomments an important thingy

* Update: Gave space ninjas access to maints and an agent ID card. Updated net description.

* Update scanner examine

* Removes excess file

* Makes ninja scanner fit in belts and ninja suits. Gives them NV goggles

* Fixes modsuit sprite issue

* Energy shuriken fixes

* Scanner fix

* Printer fix

* Fixes some runtimes

* Fixes capture teleport

* Clothes rename

* Buffs energy katana, adds soft no-drop to ekatana, buffs ninja modsuit, fixes equip bug

* Adds research levels to ninja gear

* Fixes ninja capture issue

* Remaps ninja dojo

* Better cuff removal

* Forgor

* Fixes action availability

* Updates walls at dojo

* Improves ninja modsuit

* Windoors can now be opened with the katana

* Adds advanced pinpointer to ninja uplink

* Fixed energy nets sticking

* Fixes slime people ninjas

* Adds reroll to ninja capture if target is DNR. Prevents off Z-level targets

* Oop

* Adds reactor sabotage objective.

* Fixes ninja cuffs

* Removes Carp scroll from uplink. Adds Krav Implant to uplink
This commit is contained in:
PollardTheDragon
2026-03-25 19:11:10 -04:00
committed by GitHub
parent 3e8f140498
commit 394c3b0108
120 changed files with 2616 additions and 1184 deletions
+20 -2
View File
@@ -11,6 +11,11 @@
permeability_coefficient = 0.01
sprite_sheets = list(
"Grey" = 'icons/mob/clothing/modsuit/species/grey_helmets.dmi',
"Skrell" = 'icons/mob/clothing/modsuit/species/skrell_modsuits.dmi',
"Nian" = 'icons/mob/clothing/modsuit/species/nian_modsuits.dmi',
"Diona" = 'icons/mob/clothing/modsuit/species/diona_modsuits.dmi',
"Kidan" = 'icons/mob/clothing/modsuit/species/kidan_modsuits.dmi',
"Drask" = 'icons/mob/clothing/modsuit/species/drask_modsuits.dmi',
"Vulpkanin" = 'icons/mob/clothing/modsuit/species/vulp_modsuits.dmi',
"Tajaran" = 'icons/mob/clothing/modsuit/species/taj_modsuits.dmi',
"Unathi" = 'icons/mob/clothing/modsuit/species/unathi_modsuits.dmi',
@@ -37,13 +42,17 @@
insert_max = 0
hide_tail_by_species = list("modsuit")
sprite_sheets = list(
"Skrell" = 'icons/mob/clothing/modsuit/species/skrell_modsuits.dmi',
"Nian" = 'icons/mob/clothing/modsuit/species/nian_modsuits.dmi',
"Diona" = 'icons/mob/clothing/modsuit/species/diona_modsuits.dmi',
"Kidan" = 'icons/mob/clothing/modsuit/species/kidan_modsuits.dmi',
"Drask" = 'icons/mob/clothing/modsuit/species/drask_modsuits.dmi',
"Vulpkanin" = 'icons/mob/clothing/modsuit/species/vulp_modsuits.dmi',
"Tajaran" = 'icons/mob/clothing/modsuit/species/taj_modsuits.dmi',
"Unathi" = 'icons/mob/clothing/modsuit/species/unathi_modsuits.dmi',
"Vox" = 'icons/mob/clothing/modsuit/species/vox_modsuits.dmi'
)
/obj/item/clothing/gloves/mod
name = "MOD gauntlets"
desc = "A pair of gauntlets for a MODsuit."
@@ -56,13 +65,17 @@
cold_protection = HANDS|ARMS
permeability_coefficient = 0.01
sprite_sheets = list(
"Skrell" = 'icons/mob/clothing/modsuit/species/skrell_modsuits.dmi',
"Nian" = 'icons/mob/clothing/modsuit/species/nian_modsuits.dmi',
"Diona" = 'icons/mob/clothing/modsuit/species/diona_modsuits.dmi',
"Kidan" = 'icons/mob/clothing/modsuit/species/kidan_modsuits.dmi',
"Drask" = 'icons/mob/clothing/modsuit/species/drask_modsuits.dmi',
"Vulpkanin" = 'icons/mob/clothing/modsuit/species/vulp_modsuits.dmi',
"Tajaran" = 'icons/mob/clothing/modsuit/species/taj_modsuits.dmi',
"Unathi" = 'icons/mob/clothing/modsuit/species/unathi_modsuits.dmi',
"Vox" = 'icons/mob/clothing/modsuit/species/vox_modsuits.dmi'
)
/obj/item/clothing/shoes/mod
name = "MOD boots"
desc = "A pair of boots for a MODsuit."
@@ -75,6 +88,11 @@
cold_protection = FEET|LEGS
permeability_coefficient = 0.01
sprite_sheets = list(
"Skrell" = 'icons/mob/clothing/modsuit/species/skrell_modsuits.dmi',
"Nian" = 'icons/mob/clothing/modsuit/species/nian_modsuits.dmi',
"Diona" = 'icons/mob/clothing/modsuit/species/diona_modsuits.dmi',
"Kidan" = 'icons/mob/clothing/modsuit/species/kidan_modsuits.dmi',
"Drask" = 'icons/mob/clothing/modsuit/species/drask_modsuits.dmi',
"Vulpkanin" = 'icons/mob/clothing/modsuit/species/vulp_modsuits.dmi',
"Tajaran" = 'icons/mob/clothing/modsuit/species/taj_modsuits.dmi',
"Unathi" = 'icons/mob/clothing/modsuit/species/unathi_modsuits.dmi',
+55
View File
@@ -1384,3 +1384,58 @@
/// considering this should not be used, it's getting just DS armor, not infinity in everything.
/obj/item/mod/armor/mod_theme_administrative
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
/datum/mod_theme/ninja
name = "'Shinobi' stealthsuit"
desc = "A specialized modsuit worn by the spider clan's elite ninja operatives."
default_skin = "ninja"
armor_type_1 = /obj/item/mod/armor/mod_theme_ninja
resistance_flags = FIRE_PROOF | ACID_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 1
slowdown_active = 0.3
ui_theme = "syndicate"
allowed_suit_storage = list(
/obj/item/katana/energy,
/obj/item/wormhole_jaunter/ninja_bomb,
/obj/item/throwing_star,
/obj/item/restraints/legcuffs/bola,
/obj/item/gun,
/obj/item/ninja_scanner,
)
skins = list(
"ninja" = list(
HELMET_FLAGS = list(
UNSEALED_LAYER = null,
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE | BLOCKHAIR,
UNSEALED_INVISIBILITY = HIDEFACE,
SEALED_INVISIBILITY = HIDEMASK | HIDEEYES | HIDEEARS | HIDEFACE,
UNSEALED_COVER = HEADCOVERSMOUTH,
SEALED_COVER = HEADCOVERSEYES,
CAN_OVERSLOT = TRUE,
),
CHESTPLATE_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT | HIDETAIL,
CAN_OVERSLOT = TRUE,
),
GAUNTLETS_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
CAN_OVERSLOT = TRUE,
),
BOOTS_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
CAN_OVERSLOT = TRUE,
),
),
)
/obj/item/mod/armor/mod_theme_ninja
armor = list(MELEE = 50, BULLET = 35, LASER = 35, ENERGY = 30, BOMB = 25, RAD = 200, FIRE = INFINITY, ACID = INFINITY)
+19
View File
@@ -569,6 +569,25 @@
/obj/item/mod/module/jetpack/advanced,
)
/obj/item/mod/control/pre_equipped/ninja
icon_state = "ninja-control"
theme = /datum/mod_theme/ninja
starting_frequency = MODLINK_FREQ_SYNDICATE
applied_cell = /obj/item/stock_parts/cell/bluespace
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
/obj/item/mod/module/jetpack/advanced,
/obj/item/mod/module/dispenser/smoke,
/obj/item/mod/module/shinobi_stealth,
/obj/item/mod/module/shinobi_freedom,
/obj/item/mod/module/shinobi_stims,
/obj/item/mod/module/noslip,
)
default_pins = list(
/obj/item/mod/module/jetpack/advanced,
/obj/item/mod/module/dispenser/smoke,
)
//these exist for the prefs menu
/obj/item/mod/control/pre_equipped/empty
starting_frequency = null
+74
View File
@@ -641,3 +641,77 @@
/obj/item/mod/module/anomaly_locked/teslawall/prebuilt
prebuilt = TRUE
removable = FALSE // No switching it into another suit / no free anomaly core
/obj/item/mod/module/shinobi_stealth
name = "MOD shinobi stealth module"
desc = "An advanced module, designed by the Spider Clan, that replicates the advanced stealth technology in the classic ninja scarf."
icon_state = "armor_booster"
origin_tech = "combat=5;bluespace=6;syndicate=4"
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.2
removable = FALSE
/// Linked sneaking action
var/datum/action/cooldown/ninja/ninja_cloak/cloak_action
/obj/item/mod/module/shinobi_stealth/Initialize(mapload)
. = ..()
cloak_action = new(src)
/obj/item/mod/module/shinobi_stealth/on_suit_activation()
. = ..()
cloak_action.Grant(mod.wearer)
/obj/item/mod/module/shinobi_stealth/on_suit_deactivation(deleting = FALSE)
if(deleting)
return
cloak_action.stop_sneaking()
cloak_action.Remove(mod.wearer)
/obj/item/mod/module/shinobi_freedom
name = "MOD shinobi escape module"
desc = "An advanced module, designed by the Spider Clan, that replicates the advanced escaping technology in the classic ninja boots."
icon_state = "armor_booster"
origin_tech = "combat=5;bluespace=6;syndicate=4"
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.2
removable = FALSE
/// Linked freedom action
var/datum/action/cooldown/ninja/freedom_shoes/freedoms_action
/obj/item/mod/module/shinobi_freedom/Initialize(mapload)
. = ..()
freedoms_action = new(src)
/obj/item/mod/module/shinobi_freedom/on_suit_activation()
. = ..()
ADD_TRAIT(mod.wearer, TRAIT_GOTTAGONOTSOFAST, src)
freedoms_action.Grant(mod.wearer)
/obj/item/mod/module/shinobi_freedom/on_suit_deactivation(deleting = FALSE)
if(deleting)
return
REMOVE_TRAIT(mod.wearer, TRAIT_GOTTAGONOTSOFAST, src)
freedoms_action.Remove(mod.wearer)
/obj/item/mod/module/shinobi_stims
name = "MOD shinobi stimulant module"
desc = "An advanced module, designed by the Spider Clan, that replicates the advanced stimulants technology in the classic ninja kabuto."
icon_state = "armor_booster"
origin_tech = "combat=5;bluespace=6;syndicate=4"
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.2
removable = FALSE
/// Linked stims action
var/datum/action/cooldown/ninja/stim_suit/antistun_action
/obj/item/mod/module/shinobi_stims/Initialize(mapload)
. = ..()
antistun_action = new(src)
/obj/item/mod/module/shinobi_stims/on_suit_activation()
. = ..()
ADD_TRAIT(mod.wearer, TRAIT_GOTTAGONOTSOFAST, src)
antistun_action.Grant(mod.wearer)
/obj/item/mod/module/shinobi_stims/on_suit_deactivation(deleting = FALSE)
if(deleting)
return
REMOVE_TRAIT(mod.wearer, TRAIT_GOTTAGONOTSOFAST, src)
antistun_action.Remove(mod.wearer)