diff --git a/code/modules/ninja/Ninja_Readme.dm b/code/modules/ninja/Ninja_Readme.dm deleted file mode 100644 index 70b786d12ed..00000000000 --- a/code/modules/ninja/Ninja_Readme.dm +++ /dev/null @@ -1 +0,0 @@ -// TODO diff --git a/code/modules/ninja/__ninjaDefines.dm b/code/modules/ninja/__ninjaDefines.dm deleted file mode 100644 index 4c3562273cc..00000000000 --- a/code/modules/ninja/__ninjaDefines.dm +++ /dev/null @@ -1,13 +0,0 @@ - -/* - -Contents: -- Definitions, because the original Ninja code has so much magic. - -*/ - - -//ninjacost() specificCheck defines -#define N_STEALTH_CANCEL 1 -#define N_SMOKE_BOMB 2 -#define N_ADRENALINE 3 diff --git a/code/modules/ninja/admin_ninja_verbs.dm b/code/modules/ninja/admin_ninja_verbs.dm deleted file mode 100644 index 70b786d12ed..00000000000 --- a/code/modules/ninja/admin_ninja_verbs.dm +++ /dev/null @@ -1 +0,0 @@ -// TODO diff --git a/code/modules/ninja/martial_art.dm b/code/modules/ninja/martial_art.dm deleted file mode 100644 index fdf20fd77c2..00000000000 --- a/code/modules/ninja/martial_art.dm +++ /dev/null @@ -1,182 +0,0 @@ -/* - *Contains: - * Creeping Widow martial art datum - * Creeping Widow MMB override datum - * Creeping Widow injector - */ - - -// Creeping Widow injector - Single use nanomachine thing that teaches people the creeping widow style. - - -/obj/item/creeping_widow_injector/ - name = "strange injector" - desc = "A strange autoinjector made of a black metal.
You can see a green liquid through the glass." - icon = 'icons/obj/ninjaobjects.dmi' - icon_state = "injector" - attack_verb = list("poked", "prodded") - var/used = FALSE - -/obj/item/creeping_widow_injector/attack_self(mob/living/carbon/human/user as mob) - if(!used) - user.visible_message("You stick [src]'s needle into your arm and press the button.", \ - "[user] sticks [src]'s needle [user.p_their()] arm and presses the button.") - to_chat(user, "The nanomachines in [src] flow through your bloodstream.") - - var/datum/martial_art/ninja_martial_art/N = new/datum/martial_art/ninja_martial_art(null) - N.teach(user) - - used = TRUE - icon_state = "injector-used" - desc = "A strange autoinjector made of a black metal.
It appears to be used up and empty." - return 0 - else - to_chat(user, "[src] has been used already!") - return 1 - -// Ninja martial art datum - -/datum/martial_art/ninja_martial_art - name = "Creeping Widow Style" - var/list/attack_names = list("dragon", "eagle", "mantis", "tiger", "spider", "monkey", "snake", "crane", "xeno") // Fluff attack texts, used later in attack message generation. - var/has_choke_hold = 0 // Are we current choking a bitch? - var/has_focus = 1 //Can we user our special moves? - -/datum/martial_art/ninja_martial_art/teach(mob/living/carbon/human/H, make_temporary=0) - ..() - H.middleClickOverride = new /datum/middleClickOverride/ninja_martial_art() - to_chat(H, "You have been taught the ways of the Creeping Widow.
\) - Your strikes on harm intent will deal more damage.
Using middle mouse button on a nearby person while on harm intent will send them flying backwards.
\ - Your grabs will instantly be aggressive while you are using this style.
Using middle mouse button while on harm intent and behind a person will put them in a silencing choke hold.
\ - Using middle mouse button on a nearby person while on disarm intent will wrench their wrist, causing them to drop what they are holding.
" - -/datum/martial_art/ninja_martial_art/proc/wrist_wrench(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.weakened) - if(has_focus) - has_focus = 0 - A.face_atom(D) - D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \ - "[A] grabs your wrist and violently wrenches it to the side!") - playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - D.emote("scream") - D.drop_item() - D.apply_damage(5, BRUTE, pick("l_arm", "r_arm")) - D.Stun(2 SECONDS) - spawn(50) - has_focus = 1 - return 1 - to_chat(A, "You are not focused enough to use that move yet!") - return 0 - return A.pointed(D) - -/datum/martial_art/ninja_martial_art/proc/choke_hold(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.weakened) - A.face_atom(D) - if(A.dir != D.dir) // If the user's direction is not the same as the target's after A.face_atom(D) you are not behind them, and cannot use this ability. - to_chat(A, "You cannot grab [D] from that angle!") - return 0 - - if(has_choke_hold) // Are we already choking someone? - to_chat(A, "You already have a target in your grip!") - return 0 - - has_choke_hold = 1 - - var/hold_name = "[pick(attack_names)] [pick("grip", "hold", "vise", "press")]" - - D.visible_message("[A] comes from behind and puts [D] in a [hold_name]!", \ - "[A]\ puts you in a [hold_name]! You are unable to speak!") - step_to(D,get_step(D,D.dir),1) - - var/obj/item/grab/G = D.grabbedby(A, 1) - if(G) - G.state = GRAB_NECK - - var/I = 0 - while(I < 20) // Loop to process the silence for the person being strangled so we don't have to add 20 silence all at once. - if(G == A.get_active_hand() && G.state >= GRAB_NECK) // Grab must be in the user's active hand for the duration of the strangle. - D.silent += 1 - D.adjustOxyLoss(1) - else - D.visible_message("[A] loses [A.p_their()] grip on [D]'s neck!", \ - "[A] loses [A.p_their()] grip on your neck!") - has_choke_hold = 0 - return 0 - I++ - sleep(5) - - to_chat(A, "You feel [D] go limp in your grip.") - to_chat(D, "You feel your consciousness slip away as [A] strangles you!") - D.AdjustParalysis(40 SECONDS) - - has_choke_hold = 0 - - return 1 - return A.pointed(D) - -/datum/martial_art/ninja_martial_art/proc/palm_strike(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!D.stat && !D.weakened) - if(has_focus) - has_focus = 0 - A.face_atom(D) - - var/strike_adjective = pick(attack_names) - D.visible_message("[A] sends [D] flying backwards with a [strike_adjective] palm strike!", \ - "[A] delivers a [strike_adjective] palm strike to you and sends you flying!") - - var/atom/throw_target = get_ranged_target_turf(D, get_dir(D, get_step_away(D, A)), 3) // Get a turf 3 tiles away from the target relative to our direction from him. - D.throw_at(throw_target, 200, 4) // Throw the poor bastard at the target we just gabbed. - - D.Weaken(4 SECONDS) - playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) - spawn(50) - has_focus = 1 - return 1 - to_chat(A, "You are not focused enough to use that move yet!") - return 0 - return A.pointed(D) - -/datum/martial_art/ninja_martial_art/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) //Instant aggressive grab - var/obj/item/grab/G = D.grabbedby(A) - if(G) - G.state = GRAB_AGGRESSIVE - - return 1 - -/datum/martial_art/ninja_martial_art/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) // 10 damage punches - var/strike_name = "[pick(attack_names)] [pick("punches", "kicks", "chops", "slams", "strikes")]" - D.visible_message("[A] [strike_name] on [D]!", \ - "[A] [strike_name] you!") - D.apply_damage(10, BRUTE) - playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) - return 1 - -// Ninja middle click override, required for the special moves to function and handled in grant_ninja_martial_art - -/datum/middleClickOverride/ninja_martial_art - -/datum/middleClickOverride/ninja_martial_art/onClick(atom/A, mob/living/carbon/human/user) - if(!istype(user.martial_art, /datum/martial_art/ninja_martial_art)) - user.pointed(A) // If they don't have the required martial art just point at the target. - - if(!ishuman(A)) // Special moves only work on humans. - user.pointed(A) - return 0 - if(user.a_intent == INTENT_HELP) // No special move for help intent. - user.pointed(A) - return 0 - if(!(A in range(1,user))) // Is the target within one tile of us? - user.pointed(A) - return 0 - - var/datum/martial_art/ninja_martial_art/user_martial_art = user.martial_art - var/mob/living/carbon/human/target = A - - switch(user.a_intent) - if(INTENT_DISARM) - user_martial_art.wrist_wrench(user, target) - if(INTENT_GRAB) - user_martial_art.choke_hold(user, target) - if(INTENT_HARM) - user_martial_art.palm_strike(user, target) - return 1 diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm deleted file mode 100644 index 70b786d12ed..00000000000 --- a/code/modules/ninja/ninja_event.dm +++ /dev/null @@ -1 +0,0 @@ -// TODO diff --git a/code/modules/ninja/suit/SpiderOS.dm b/code/modules/ninja/suit/SpiderOS.dm deleted file mode 100644 index d9827c5cf32..00000000000 --- a/code/modules/ninja/suit/SpiderOS.dm +++ /dev/null @@ -1,277 +0,0 @@ - -//HERE BE A VERY LARGE DRAGON - -/obj/item/clothing/suit/space/space_ninja/proc/spideros() - set name = "Display SpiderOS" - set desc = "Utilize built-in computer system." - set category = "Ninja Equip" - - if(!s_busy) - display_spideros() - else - to_chat(affecting, "The interface is locked!") - - -/obj/item/clothing/suit/space/space_ninja/proc/display_spideros() - if(!affecting) return//If no mob is wearing the suit. I almost forgot about this variable. - var/mob/living/carbon/human/U = affecting - var/display_to = U//Who do we want to display certain messages to? - - if(U.client) // Send the spider OS images to the client - var/datum/asset/simple/S = new/datum/asset/simple/spider_os() //no longer exists ;) - send_asset_list(U.client, S.assets) - - var/dat = "SpiderOS" - dat += " Refresh" - if(spideros) - dat += " | Return" - dat += " | Close" - dat += "
" - dat += "

SpiderOS v.1.337

" - dat += "Welcome, [U.real_name].
" - dat += "
" - dat += " Current Time: [station_time_timestamp()]
" - dat += " Battery Life: [round(cell.charge/100)]%
" - dat += " Smoke Bombs: \Roman [s_bombs]
" - dat += "

" - - switch(spideros) - if(0) - dat += "

Available Functions:

" - dat += "" - if(3) - dat += "

Medical Report:

" - if(U.dna) - dat += "Fingerprints: [md5(U.dna.uni_identity)]
" - dat += "Unique identity: [U.dna.unique_enzymes]
" - dat += "

Overall Status: [U.stat > 1 ? "dead" : "[U.health]% healthy"]

" - dat += "

Nutrition Status: [U.nutrition]

" - dat += "Oxygen loss: [U.getOxyLoss()]" - dat += " | Toxin levels: [U.getToxLoss()]
" - dat += "Burn severity: [U.getFireLoss()]" - dat += " | Brute trauma: [U.getBruteLoss()]
" - dat += "Radiation Level: [U.radiation] rad
" - dat += "Body Temperature: [U.bodytemperature-T0C]°C ([U.bodytemperature*1.8-459.67]°F)
" - - for(var/datum/disease/D in U.viruses) - dat += "Warning: Virus Detected. Name: [D.name].Type: [D.spread_text]. Stage: [D.stage]/[D.max_stages]. Possible Cure: [D.cure_text].
" - dat += "" - if(1) - dat += "

Atmospheric Scan:

"//Headers don't need breaks. They are automatically placed. - var/turf/T = get_turf(U.loc) - if(isnull(T)) - dat += "Unable to obtain a reading." - else - var/datum/gas_mixture/environment = T.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - dat += "Air Pressure: [round(pressure,0.1)] kPa" - - if(total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" - - dat += "Temperature: [round(environment.temperature-T0C)]°C" - if(2) - dat += "

Anonymous Messenger:

"//Anonymous because the receiver will not know the sender's identity. - dat += "

Detected PDAs:

" - dat += "" - if(count == 0) - dat += "None detected.
" - if(4) - dat += {" -

Ninja Manual:

-
Who they are:
- Space ninjas are a special type of ninja, specifically one of the space-faring type. The vast majority of space ninjas belong to the Spider Clan, a cult-like sect, which has existed for several hundred years. The Spider Clan practice a sort of augmentation of human flesh in order to achieve a more perfect state of being and follow Postmodern Space Bushido. They also kill people for money. Their leaders are chosen from the oldest of the grand-masters, people that have lived a lot longer than any mortal man should.
Being a sect of technology-loving fanatics, the Spider Clan have the very best to choose from in terms of hardware--cybernetic implants, exoskeleton rigs, hyper-capacity batteries, and you get the idea. Some believe that much of the Spider Clan equipment is based on reverse-engineered alien technology while others doubt such claims.
Whatever the case, their technology is absolutely superb. -
How they relate to other SS13 organizations:
- -
The reason they (you) are here:
- Space ninjas are renowned throughout the known controlled space as fearless spies, infiltrators, and assassins. They are sent on missions of varying nature by Nanotrasen, the Syndicate, and other shady organizations and people. To hire a space ninja means serious business. -
Their playstyle:
- A mix of traitor, changeling, and wizard. Ninjas rely on energy, or electricity to be precise, to keep their suits running (when out of energy, a suit hibernates). Suits gain energy from objects or creatures that contain electrical charge. APCs, cell batteries, rechargers, SMES batteries, cyborgs, mechs, and exposed wires are currently supported. Through energy ninjas gain access to special powers--while all powers are tied to the ninja suit, the most useful of them are verb activated--to help them in their mission.
It is a constant struggle for a ninja to remain hidden long enough to recharge the suit and accomplish their objective; despite their arsenal of abilities, ninjas can die like any other. Unlike wizards, ninjas do not possess good crowd control and are typically forced to play more subdued in order to achieve their goals. Some of their abilities are specifically designed to confuse and disorient others.
With that said, it should be perfectly possible to completely flip the fuck out and rampage as a ninja. -
Their powers:
- There are two primary types: Equipment and Abilties. Passive effect are always on. Active effect must be turned on and remain active only when there is energy to do so. Ability costs are listed next to them. - Equipment: cannot be tracked by AI (passive), faster speed (passive), stealth (active), vision switch(passive if toggled), voice masking (passive), SpiderOS (passive if toggled), energy drain (passive if toggled). - - Abilities: -