Ninja changes (#3851)

This changes the ninja suit to start off with only essential modules. The Ninja now gets telecrystals and access to a restricted uplink category filled with hardsuit modules. Also adds the EMAG hand module, EMP dissipation module, and emergency power generation module. Other changes include a buff across the board for ninja including an increase in their armor values, a buff towards their ninja modules (which they now have to buy), and changing their suit to say "stealth" instead of ominous. This should make the Ninja have a better chance against security while also ensuring it maintains its stealth antag title.

 👍 5
This commit is contained in:
Ron
2017-12-17 11:36:18 +02:00
committed by Erki
parent 57e898d8e8
commit 81e8d371de
9 changed files with 248 additions and 44 deletions
+1
View File
@@ -299,6 +299,7 @@
#include "code\datums\uplink\highly visible and dangerous weapons.dm"
#include "code\datums\uplink\implants.dm"
#include "code\datums\uplink\medical.dm"
#include "code\datums\uplink\ninja_modules.dm"
#include "code\datums\uplink\specialty.dm"
#include "code\datums\uplink\stealth and camouflage items.dm"
#include "code\datums\uplink\stealthy and inconspicuous weapons.dm"
+71
View File
@@ -0,0 +1,71 @@
/***************
* Special Ninja Modules *
***************/
/datum/uplink_item/item/ninja_modules
category = /datum/uplink_category/ninja_modules
/datum/uplink_item/item/ninja_modules/energency_generator
name = "Emergency Power Generator"
desc = "An emergency use power generator that gives 1000 power to the suits battery. Has a long cooldown."
item_cost = 4
path = /obj/item/rig_module/emergency_powergenerator
/datum/uplink_item/item/ninja_modules/energy_net
name = "Energy Net"
desc = "An unlimited use net, if the user has enough power, that can be thrown at others causing them to be trapped. The net can be broken with brute force.."
item_cost = 4
path = /obj/item/rig_module/fabricator/energy_net
/datum/uplink_item/item/ninja_modules/stealth_field
name = "Stealth Field"
desc = "A module that allows the user to go invisible. Consumes power when active."
item_cost = 6
path = /obj/item/rig_module/stealth_field
/datum/uplink_item/item/ninja_modules/normal_grenade_lancher
name = "Standard Grenade Launcher"
desc = "A shoulder mounted grenade launcher with 3 EMP, Smoke, and flashbang grenades.It can be refilled with more grenades."
item_cost = 6
path = /obj/item/rig_module/grenade_launcher
/datum/uplink_item/item/ninja_modules/enery_blade
name = "Energy Blade and dart launcher."
desc = "A module that can produce a powerful energy blade in the users hand. It can also shoot stun-darts."
item_cost = 8
path = /obj/item/rig_module/mounted/energy_blade
/datum/uplink_item/item/ninja_modules/matter_fab
name = "Matter Fabricator"
desc = "A hardsuit matter fabricator that can produce sharp ninja stars used for throwing."
item_cost = 5
path = /obj/item/rig_module/fabricator
/datum/uplink_item/item/ninja_modules/sink
name = "Power Sink"
desc = "A module that sucks power out of powered items and into the users suit."
item_cost = 4
path = /obj/item/rig_module/power_sink
/datum/uplink_item/item/ninja_modules/emag_hand
name = "EMAG Hand Module"
desc = "A module that allows the user to apply an EMAG effect to the targeted item."
item_cost = 5
path = /obj/item/rig_module/emag_hand
/datum/uplink_item/item/ninja_modules/chem_injector
name = "Chemical Injector"
desc = "A chemical injector that allows the user to inject themsleves with medical chemicals."
item_cost = 3
path = /obj/item/rig_module/chem_dispenser
/datum/uplink_item/item/ninja_modules/EMP_Shield
name = "Active EMP Shielding"
desc = "A very complicated module for a hardsuit that protects it to some degree from EMPs."
item_cost = 4
path = /obj/item/rig_module/emp_shielding
/datum/uplink_item/item/ninja_modules/combat_injector
name = "Combat Injector"
desc = "A chemical injector that allows the user to inject themsleves with combat chemicals."
item_cost = 4
path = /obj/item/rig_module/chem_dispenser/combat
+13
View File
@@ -1,15 +1,25 @@
/datum/uplink_category
var/name = ""
var/list/datum/uplink_item/items
var/list/datum/antagonist/antag_roles
/datum/uplink_category/New()
..()
items = list()
/datum/uplink_category/proc/can_view(obj/item/device/uplink/U)
for(var/antag_role in antag_roles)
var/datum/antagonist/antag = all_antag_types[antag_role]
if(antag.is_antagonist(U.uplink_owner))
return 1
for(var/datum/uplink_item/item in items)
if(item.can_view(U))
return 1
if(!antag_roles.len)
return 1
return 0
/datum/uplink_category/ammunition
@@ -51,4 +61,7 @@
/datum/uplink_category/specialty //snowflake antag items - a brave new frontier!
name = "Specialised Items"
/datum/uplink_category/ninja_modules
name = "Infiltration Items"
antag_roles = list(MODE_NINJA)
+2 -2
View File
@@ -6,7 +6,7 @@ var/datum/antagonist/ninja/ninjas
role_text_plural = "Ninja"
bantype = "ninja"
landmark_id = "ninjastart"
welcome_text = "<span class='info'>You are an elite mercenary assassin of the Spider Clan. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor.</span>"
welcome_text = "<span class='info'>You are an elite stealth agent. You can equip your suit with the latest technology using your uplink.</span>"
restricted_species = list("Diona")
flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE
antaghud_indicator = "hudninja"
@@ -107,7 +107,7 @@ var/datum/antagonist/ninja/ninjas
player.equip_to_slot_or_del(R, slot_l_ear)
player.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(player), slot_w_uniform)
player.equip_to_slot_or_del(new /obj/item/device/flashlight(player), slot_belt)
player.equip_to_slot_or_del(new /obj/item/device/contract_uplink(player), slot_l_store)
player.equip_to_slot_or_del(new /obj/item/device/ninja_uplink(player, player.mind), slot_l_store)
create_id("Infiltrator", player)
var/obj/item/weapon/rig/light/ninja/ninjasuit = new(get_turf(player))
+21 -2
View File
@@ -384,5 +384,24 @@ A list of items and costs is stored under the datum of every game mode, alongsid
if(!message)
return
command_announcement.Announce("[message]", title, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1, do_newscast=1, do_print=1);
qdel(src)
command_announcement.Announce("[message]", title, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
qdel(src)
//ninja
/obj/item/device/ninja_uplink
name = "infiltrator uplink"
desc = "A small device used for access to a restricted cache of specialized items."
icon = 'icons/obj/radio.dmi'
icon_state = "radio"
flags = CONDUCT
w_class = 2
/obj/item/device/ninja_uplink/New()
..()
hidden_uplink = new(src)
hidden_uplink.uses = DEFAULT_TELECRYSTAL_AMOUNT
hidden_uplink.nanoui_menu = 1
/obj/item/device/ninja_uplink/attack_self(mob/user as mob)
if (hidden_uplink)
hidden_uplink.trigger(user)
@@ -18,7 +18,13 @@
..()
if(material.radioactivity>0 && istype(hit_atom,/mob/living))
var/mob/living/M = hit_atom
M.adjustToxLoss(rand(20,40))
M.adjustToxLoss(rand(25,50))
/obj/item/weapon/material/star/ninja
default_material = "uranium"
default_material = "uranium"
/obj/item/weapon/material/star/ninja/throw_impact(atom/hit_atom)
..()
if(prob(30) && istype(hit_atom,/mob/living))
var/mob/living/M = hit_atom
M.Weaken(7)
@@ -481,31 +481,3 @@
drain_loc = null
interfaced_with = null
total_power_drained = 0
/*
//Maybe make this use power when active or something
/obj/item/rig_module/emp_shielding
name = "\improper EMP dissipation module"
desc = "A bewilderingly complex bundle of fiber optics and chips."
toggleable = 1
usable = 0
activate_string = "Enable active EMP shielding"
deactivate_string = "Disable active EMP shielding"
interface_name = "active EMP shielding system"
interface_desc = "A highly experimental system that augments the hardsuit's existing EM shielding."
var/protection_amount = 20
/obj/item/rig_module/emp_shielding/activate()
if(!..())
return
holder.emp_protection += protection_amount
/obj/item/rig_module/emp_shielding/deactivate()
if(!..())
return
holder.emp_protection = max(0,(holder.emp_protection - protection_amount))
*/
@@ -4,6 +4,9 @@
* /obj/item/rig_module/teleporter
* /obj/item/rig_module/fabricator/energy_net
* /obj/item/rig_module/self_destruct
* /obj/item/rig_module/emp_shielding
* /obj/item/rig_module/emergency_powergenerator
* /obj/item/rig_module/emag_hand
*/
/obj/item/rig_module/stealth_field
@@ -152,7 +155,7 @@
engage_string = "Fabricate Net"
fabrication_type = /obj/item/weapon/energy_net
use_power_cost = 70
use_power_cost = 60
/obj/item/rig_module/fabricator/energy_net/engage(atom/target)
@@ -175,10 +178,10 @@
interface_name = "dead man's switch"
interface_desc = "An integrated self-destruct module. When the wearer dies, so does the surrounding area. Do not press this button."
var/list/explosion_values = list(1,2,4,5)
var/list/explosion_values = list(3,4,5,6)
/obj/item/rig_module/self_destruct/small
explosion_values = list(0,0,3,4)
explosion_values = list(1,2,3,4)
/obj/item/rig_module/self_destruct/activate()
return
@@ -205,3 +208,111 @@
holder.wearer.drop_from_inventory(src)
qdel(holder)
qdel(src)
/obj/item/rig_module/emp_shielding
name = "EMP dissipation module"
desc = "A bewilderingly complex bundle of fiber optics and chips. Seems like it uses a good deal of power."
active_power_cost = 10
toggleable = 1
usable = 0
use_power_cost = 70
module_cooldown = 30
activate_string = "Enable Active EMP Shielding"
deactivate_string = "Disable Active EMP Shielding"
interface_name = "active EMP shielding system"
interface_desc = "A highly experimental system that augments the hardsuit's existing EM shielding."
var/protection_amount = 30
/obj/item/rig_module/emp_shielding/activate()
if(!..())
return
holder.emp_protection += protection_amount
/obj/item/rig_module/emp_shielding/deactivate()
if(!..())
return
holder.emp_protection = max(0,(holder.emp_protection - protection_amount))
/obj/item/rig_module/emergency_powergenerator
name = "emergency power generator"
desc = "A high yield power generating device that takes a long time to recharge."
active_power_cost = 0
toggleable = 0
usable = 1
confined_use = 1
var/cooldown = 0
engage_string = "Use Emergency Power"
interface_name = "emergency power generator"
interface_desc = "A high yield power generating device that takes a long time to recharge."
var/generation_ammount = 1500
/obj/item/rig_module/emergency_powergenerator/engage()
if(!..())
return
var/mob/living/carbon/human/H = holder.wearer
if(cooldown)
H << "<span class='danger'>There isn't enough power stored up yet!</span>"
return 0
else
H << "<span class='danger'>Your suit emits a loud sound as power is rapidly injected into your suits battery!</span>"
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
holder.cell.give(generation_ammount)
cooldown = 1
addtimer(CALLBACK(src, /obj/item/rig_module/emergency_powergenerator/proc/reset_cooldown), 240)
/obj/item/rig_module/emergency_powergenerator/proc/reset_cooldown()
cooldown = 0
/obj/item/rig_module/emag_hand
name = "EMAG integrated hand"
desc = "A complex uprade that allows the user to touch things with their hand and apply an EMAG effect. High power cost."
use_power_cost = 100
usable = 0
toggleable = 1
activates_on_touch = 1
disruptive = 0
activate_string = "Enable EMAG"
deactivate_string = "Disable EMAG"
interface_name = "enable EMAG"
interface_desc = "A complex uprade that allows the user to touch things with their hand and apply an EMAG effect. High power cost."
var/atom/interfaced_with
module_cooldown = 4800
/obj/item/rig_module/emag_hand/activate()
if(!..())
return
/obj/item/rig_module/emag_hand/deactivate()
if(!..())
return
/obj/item/rig_module/emag_hand/engage(atom/target)
if(!..())
return 0
if(interfaced_with)
return 0
if(!target)
return 1
if(!target.Adjacent(holder.wearer))
return 0
holder.wearer << "<span class = 'danger'>You stick your hand on [target] shorting out some of its circuits!</span>"
interfaced_with = target
target.emag_act(user, src)
addtimer(CALLBACK(src, /obj/item/rig_module/emag_hand/proc/reset_interface, 2))
return 1
/obj/item/rig_module/emag_hand/proc/reset_interface()
interfaced_with = null
@@ -72,20 +72,30 @@
siemens_coefficient = 0
/obj/item/weapon/rig/light/ninja
name = "ominous suit control module"
suit_type = "ominous"
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
name = "stealth suit control module"
suit_type = "stealth suit"
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for stealth operations."
icon_state = "ninja_rig"
armor = list(melee = 50, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 30)
emp_protection = 40 //change this to 30 if too high.
armor = list(melee = 50, bullet = 35, laser = 35, energy = 30, bomb = 25, bio = 100, rad = 30)
emp_protection = 40
slowdown = 0
chest_type = /obj/item/clothing/suit/space/rig/light/ninja
glove_type = /obj/item/clothing/gloves/rig/light/ninja
helm_type = /obj/item/clothing/head/helmet/space/rig/light/ninja
boot_type = /obj/item/clothing/shoes/rig/light/ninja
req_access = list(access_syndicate)
initial_modules = list(
/obj/item/rig_module/teleporter,
/obj/item/rig_module/vision,
/obj/item/rig_module/voice,
/obj/item/rig_module/ai_container,
/obj/item/rig_module/datajack,
/obj/item/rig_module/self_destruct
)
/obj/item/weapon/rig/light/ninja/equipped
initial_modules = list(
/obj/item/rig_module/teleporter,
/obj/item/rig_module/stealth_field,
@@ -102,12 +112,13 @@
/obj/item/rig_module/actuators/combat
)
..()
/obj/item/clothing/gloves/rig/light/ninja
name = "insulated gloves"
siemens_coefficient = 0
/obj/item/clothing/shoes/rig/light/ninja
silent = 1
/obj/item/clothing/suit/space/rig/light/ninja
species_restricted = list("exclude","Diona","Xenomorph", "Golem")
breach_threshold = 38 //comparable to regular hardsuits