Files
Paradise/code/modules/ninja/ninja_deployables.dm
PollardTheDragon 394c3b0108 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
2026-03-25 23:11:10 +00:00

182 lines
6.1 KiB
Plaintext

/obj/machinery/syndicatebomb/ninja
name = "spider clan bomb"
payload = /obj/item/bombcore/ninja
/obj/machinery/syndicatebomb/ninja/emp
name = "spider clan EMP bomb"
payload = /obj/item/bombcore/emp/ninja
/obj/machinery/syndicatebomb/ninja/spiders
name = "spider bomb"
payload = /obj/item/bombcore/badmin/summon/ninja_spiders
/obj/item/bombcore/ninja
desc = "A powerful secondary explosive of spider clan design and unknown composition, it should be stable under normal conditions..."
range_heavy = 3
range_medium = 8
range_light = 15
range_flame = 17
/obj/item/bombcore/emp/ninja
light_emp = 24
heavy_emp = 12
/obj/item/bombcore/badmin/summon/ninja_spiders
summon_path = /mob/living/basic/giant_spider
amt_summon = 12
/obj/item/wormhole_jaunter/ninja_bomb
name = "spider clan bomb deployment flare"
icon = 'icons/obj/lighting.dmi'
desc = "A single-use flare that will bring a high-yield payload to the location it was lit at."
icon_state = "flare-contractor"
inhand_icon_state = "flare"
/// What area should be blow up?
var/area/bomb_target
/// What kind of bomb is it
var/obj/machinery/syndicatebomb/bomb_type = /obj/machinery/syndicatebomb/ninja
/obj/item/wormhole_jaunter/ninja_bomb/Initialize(mapload)
. = ..()
var/list/possible_areas = list(
// Rooms
/area/station/hallway/primary/aft,
/area/station/engineering/atmos,
/area/station/public/arcade,
/area/station/maintenance/assembly_line,
/area/station/public/storage/tools/auxiliary,
/area/station/command/office/blueshield,
/area/station/supply/storage,
/area/station/service/chapel,
/area/station/service/chapel/office,
/area/station/service/clown,
/area/station/legal/courtroom,
/area/station/public/toilet,
/area/station/engineering/control,
/area/station/engineering/controlroom,
/area/station/hallway/secondary/exit,
/area/holodeck/alphadeck,
/area/station/service/hydroponics,
/area/station/service/library,
/area/station/service/mime,
/area/station/supply/miningdock,
/area/station/medical/morgue,
/area/station/public/storage/office,
/area/station/public/pet_store,
/area/station/public/storage/tools,
/area/station/public/mrchangs,
/area/station/science/research,
/area/station/security/checkpoint,
/area/station/engineering/tech_storage,
/area/station/command/teleporter,
/area/station/science/storage,
/area/station/science/misc_lab,
/area/station/science/xenobiology,
/area/station/turret_protected/aisat/interior,
/area/station/aisat/atmos,
/area/station/aisat/hall,
/area/station/aisat/service,
/area/station/service/bar,
/area/station/supply/office,
/area/station/medical/chemistry,
/area/station/command/office/ce,
/area/station/command/office/cmo,
/area/station/medical/cloning,
/area/station/medical/cryo,
/area/station/public/dorms,
/area/station/engineering/equipmentstorage,
/area/station/engineering/break_room,
/area/station/ai_monitored/storage/eva,
/area/station/supply/expedition,
/area/station/science/genetics,
/area/station/engineering/gravitygenerator,
/area/station/command/office/hop,
/area/station/command/meeting_room,
/area/station/service/kitchen,
/area/station/science/robotics/chargebay,
/area/station/medical/medbay,
/area/station/medical/medbay2,
/area/station/medical/medbay3,
/area/station/medical/reception,
/area/station/medical/storage,
/area/station/medical/sleeper,
/area/station/command/server,
/area/station/command/office/ntrep,
/area/station/medical/paramedic,
/area/station/hallway/primary/port,
/area/station/supply/qm,
/area/station/command/office/rd,
/area/station/science/rnd,
/area/station/science/robotics,
/area/station/medical/surgery/primary,
/area/station/medical/surgery/secondary,
/area/station/telecomms/chamber,
/area/station/engineering/secure_storage
)
while(!bomb_target)
var/area/selected_area = pick_n_take(possible_areas)
for(var/area/potential in SSmapping.existing_station_areas)
if(potential.type != selected_area)
continue
bomb_target = potential
break
/obj/item/wormhole_jaunter/ninja_bomb/examine(mob/user)
. = ..()
if(isAntag(user))
. += SPAN_WARNING("The target bomb location is: [bomb_target.name]")
/obj/item/wormhole_jaunter/ninja_bomb/activate(mob/user)
if(!turf_check(user))
return
var/obj/effect/temp_visual/ninja_bomb/F = new /obj/effect/temp_visual/ninja_bomb(get_turf(src))
user.drop_item()
forceMove(F)
log_and_message_admins("[user] activated a ninja bomb flare.")
addtimer(CALLBACK(src, PROC_REF(spawn_bomb), user), 5 SECONDS)
/obj/item/wormhole_jaunter/ninja_bomb/proc/spawn_bomb(mob/user)
new /obj/effect/decal/cleanable/ash(get_turf(src))
var/obj/machinery/syndicatebomb/new_bomb = new bomb_type(get_turf(src))
new_bomb.anchored = TRUE
new_bomb.activate()
var/objectives = user.mind.get_all_objectives()
for(var/datum/objective/ninja/bomb_department/bomb_dep in objectives)
if(!bomb_dep.completed)
to_chat(user, SPAN_NOTICE("Contract complete. Good work - your cut of the pay has been forwarded to your uplink."))
bomb_dep.complete_objective()
qdel(src)
/obj/item/wormhole_jaunter/ninja_bomb/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf)
to_chat(user, "<span class='notice'>You're having difficulties getting the [name] to work.</span>")
return FALSE
var/area/our_area = get_area(device_turf)
if(!istype(our_area, bomb_target))
to_chat(user, "<span class='notice'>You're having difficulties getting the [name] to work.</span>")
return FALSE
return TRUE
/obj/item/wormhole_jaunter/ninja_bomb/emp
bomb_type = /obj/machinery/syndicatebomb/ninja/emp
/obj/item/wormhole_jaunter/ninja_bomb/spiders
bomb_type = /obj/machinery/syndicatebomb/ninja/spiders
/obj/effect/temp_visual/ninja_bomb
name = "spider clan bomb deployment flare"
layer = BELOW_MOB_LAYER
icon = 'icons/obj/lighting.dmi'
icon_state = "flare-contractor-on"
duration = 5.1 SECONDS
/// Sound that plays when activated
var/activation_sound = 'sound/goonstation/misc/matchstick_light.ogg'
/// Light emitted when activated
var/emitted_color = "#1faf2b"
/obj/effect/temp_visual/ninja_bomb/Initialize(mapload)
. = ..()
playsound(loc, activation_sound, 50, TRUE)
set_light(8, l_color = emitted_color)