Skip to content

Commit

Permalink
Updated ninjas. They now have three basic abilities, teleporting quic…
Browse files Browse the repository at this point in the history
…kly (direction facing), precise teleporting (turf), and throwing smoke. No energy requirements or some other stuff at the moment.

Death Squads are now limited to Game Masters.
Ninjas can now be called by anyone above Trial Admin... or whatever it's going to be called.
The Mind Swap spell will not affect ninjas.
Corrected ninja names and titles.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1332 316c924e-a436-60f5-8080-3fe189b3f50e
  • Loading branch information
[email protected] committed Apr 1, 2011
1 parent 322c8cd commit 539982f
Show file tree
Hide file tree
Showing 6 changed files with 222 additions and 19 deletions.
2 changes: 1 addition & 1 deletion code/game/gamemodes/wizard/spells.dm
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,7 @@
return

if(M.client && M.mind)
if(M.mind.special_role != "Wizard" || "Fake Wizard" || "Changeling" || "Cultist")//Wizards, changelings, and cultists are protected.
if(M.mind.special_role != "Wizard" || "Fake Wizard" || "Changeling" || "Cultist" || "Space Ninja")//Wizards, changelings, ninjas, and cultists are protected.
if( (istype(M, /mob/living/carbon/human)) || (istype(M, /mob/living/carbon/monkey)) && M.stat != 2)
var/mob/living/carbon/human/H = M //so it does not freak out when looking at the variables.
var/mob/living/carbon/human/U = src
Expand Down
8 changes: 7 additions & 1 deletion code/modules/admin/admin_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,8 @@
src.verbs += /client/proc/cuban_pete // -- Urist
src.verbs += /client/proc/only_one // muskets
src.verbs += /client/proc/space_asshole // --Agouri :3
src.verbs += /client/proc/strike_team //N
//src.verbs += /client/proc/strike_team //N
src.verbs += /client/proc/space_ninja //N
src.verbs += /client/proc/spawn_xeno //N
src.verbs += /proc/possess
src.verbs += /proc/release
Expand Down Expand Up @@ -407,6 +408,7 @@
//src.verbs += /client/proc/cuban_pete // -- Urist
//src.verbs += /client/proc/space_asshole // --Agouri :3
//src.verbs += /client/proc/strike_team //N
src.verbs += /client/proc/space_ninja //N
src.verbs += /client/proc/spawn_xeno //N
src.verbs += /proc/possess
src.verbs += /proc/release
Expand Down Expand Up @@ -561,6 +563,7 @@
//src.verbs += /client/proc/cuban_pete // -- Urist
//src.verbs += /client/proc/space_asshole // --Agouri :3
//src.verbs += /client/proc/strike_team //N
//src.verbs += /client/proc/space_ninja //N
src.verbs += /client/proc/spawn_xeno //N
src.verbs += /proc/possess
src.verbs += /proc/release
Expand Down Expand Up @@ -705,6 +708,7 @@
//src.verbs += /client/proc/cuban_pete // -- Urist
//src.verbs += /client/proc/space_asshole // --Agouri :3
//src.verbs += /client/proc/strike_team //N
//src.verbs += /client/proc/space_ninja //N
//src.verbs += /client/proc/spawn_xeno //N
//src.verbs += /proc/possess
//src.verbs += /proc/release
Expand Down Expand Up @@ -844,6 +848,7 @@
//src.verbs += /client/proc/cuban_pete // -- Urist
//src.verbs += /client/proc/space_asshole // --Agouri :3
//src.verbs += /client/proc/strike_team //N
//src.verbs += /client/proc/space_ninja //N
//src.verbs += /client/proc/spawn_xeno //N
//src.verbs += /proc/possess
//src.verbs += /proc/release
Expand Down Expand Up @@ -967,6 +972,7 @@
//src.verbs += /client/proc/cuban_pete // -- Urist
//src.verbs += /client/proc/space_asshole // --Agouri :3
//src.verbs += /client/proc/strike_team //N
//src.verbs += /client/proc/space_ninja //N
//src.verbs += /client/proc/spawn_xeno //N
//src.verbs += /proc/possess
//src.verbs += /proc/release
Expand Down
191 changes: 188 additions & 3 deletions code/modules/admin/verbs/striketeam.dm
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ Useful for copy pasta since I'm lazy.*/
new_ninja.mind = new
new_ninja.mind.current = new_ninja
new_ninja.mind.assigned_role = "Space Ninja"
new_ninja.mind.special_role = "Space Ninja"
new_ninja.mind.store_memory("<B>Mission:</B> \red [input].")
new_ninja.resistances += "alien_embryo"

Expand All @@ -215,19 +216,21 @@ Useful for copy pasta since I'm lazy.*/
new_ninja.equip_if_possible(new /obj/item/clothing/gloves/space_ninja(new_ninja), new_ninja.slot_gloves)
new_ninja.equip_if_possible(new /obj/item/clothing/head/helmet/space/space_ninja(new_ninja), new_ninja.slot_head)
new_ninja.equip_if_possible(new /obj/item/clothing/mask/gas/space_ninja(new_ninja), new_ninja.slot_wear_mask)
new_ninja.equip_if_possible(new /obj/item/clothing/glasses/thermal(new_ninja), new_ninja.slot_glasses)
// new_ninja.equip_if_possible(new /obj/item/clothing/glasses/thermal(new_ninja), new_ninja.slot_glasses) //These look ugly without the mask. And you will be able to take off the mask.
new_ninja.equip_if_possible(new /obj/item/device/flashlight(new_ninja), new_ninja.slot_belt)
new_ninja.equip_if_possible(new /obj/item/weapon/plastique(new_ninja), new_ninja.slot_r_store)
new_ninja.equip_if_possible(new /obj/item/weapon/plastique(new_ninja), new_ninja.slot_l_store)
var/obj/item/weapon/tank/emergency_oxygen/OXYTANK = new /obj/item/weapon/tank/emergency_oxygen(new_ninja)
new_ninja.equip_if_possible(OXYTANK, new_ninja.slot_s_store)

/* You know, I'm not really sure why space ninjas would need an ID card.
var/obj/item/weapon/card/id/W = new(new_ninja)
W.name = "[new_ninja.real_name]'s ID Card"
W.access = access_maint_tunnels
W.assignment = "Space Ninja"
W.registered = new_ninja.real_name
new_ninja.equip_if_possible(W, new_ninja.slot_wear_id)
*/

var/admin_name = src//In case admins want to spawn themselves as ninjas.

Expand All @@ -238,7 +241,7 @@ Useful for copy pasta since I'm lazy.*/
if(((G.client.inactivity/10)/60) <= 5)
candidates.Add(G)
if(candidates.len)
G = input("Pick character to spawn as the Space Ninja", "Active Players", G) in candidates
G = input("Pick character to spawn as the Space Ninja", "Active Players", G) in candidates//It will auto-pick a person when there is only one candidate.
new_ninja.mind.key = G.key
new_ninja.client = G.client
del(G)
Expand All @@ -252,7 +255,189 @@ Useful for copy pasta since I'm lazy.*/

new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan. The dreaded \red <B>SPACE NINJA</B>!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training! \nYour current mission is: \red <B>[input]</B>"

new_ninja.verbs += /mob/proc/phaseshift
new_ninja.verbs += /mob/proc/phasejaunt
new_ninja.verbs += /mob/proc/smokebomb
new_ninja.mind.special_verbs += /mob/proc/phaseshift
new_ninja.mind.special_verbs += /mob/proc/phasejaunt
new_ninja.mind.special_verbs += /mob/proc/smokebomb

message_admins("\blue [admin_name] has spawned [new_ninja.key] as a Space Ninja. Hide yo children!", 1)
log_admin("[admin_name] used Spawn Space Ninja.")

//SPACE NINJA ABILITIES
//SPACE NINJA ABILITIES

//Smoke
//Summons smoke in radius of user.
/mob/proc/smokebomb()
set name = "Smoke Bomb"
set desc = "Blind your enemies momentarily with a well-placed smoke bomb."
set category = "Ninja"

if(src.stat)
src << "\red You must be conscious to do this."
return
//add energy cost check
//add warning message for low energy

var/datum/effects/system/bad_smoke_spread/smoke = new /datum/effects/system/bad_smoke_spread()
smoke.set_up(10, 0, src.loc)
smoke.start()
//subtract cost


//9-10 Tile Teleport
//Click to to teleport 9-10 tiles in direction facing.
/mob/proc/phasejaunt()
set name = "Phase Jaunt"
set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing."
set category = "Ninja"

if(src.stat)
src << "\red You must be conscious to do this."
return
//add energy cost check
//add warning message for low energy

var/list/turfs = new/list()
var/turf/picked
var/turf/mobloc = get_turf(src.loc)
switch(src.dir)
if(NORTH)
//highest Y
//X the same
for(var/turf/T in orange(10))
if(T.density) continue
if(T.x>world.maxx-4 || T.x<4) continue
if(T.y>world.maxy-4 || T.y<4) continue
if((T.y-mobloc.y)<9 || ((T.x+mobloc.x+1)-(mobloc.x*2))>2) continue
turfs += T
if(SOUTH)
//lowest Y
//X the same
for(var/turf/T in orange(10))
if(T.density) continue
if(T.x>world.maxx-4 || T.x<4) continue
if(T.y>world.maxy-4 || T.y<4) continue
if((mobloc.y-T.y)<9 || ((T.x+mobloc.x+1)-(mobloc.x*2))>2) continue
turfs += T
if(EAST)
//highest X
//Y the same
for(var/turf/T in orange(10))
if(T.density) continue
if(T.x>world.maxx-4 || T.x<4) continue
if(T.y>world.maxy-4 || T.y<4) continue
if((T.x-mobloc.x)<9 || ((T.y+mobloc.y+1)-(mobloc.y*2))>2) continue
turfs += T
if(WEST)
//lowest X
//Y the same
for(var/turf/T in orange(10))
if(T.density) continue
if(T.x>world.maxx-4 || T.x<4) continue
if(T.y>world.maxy-4 || T.y<4) continue
if((mobloc.x-T.x)<9 || ((T.y+mobloc.y+1)-(mobloc.y*2))>2) continue
turfs += T
else
return
if(!turfs.len) turfs += pick(/turf in orange(10))//Teleports randomly if there is no proper turf in a line.
picked = pick(turfs)

spawn(0)
var/atom/movable/overlay/animation = new(mobloc)
animation.icon = 'mob.dmi'
animation.icon_state = "blank"
animation.layer = src.layer + 1
animation.master = mobloc
flick("phaseout", animation)
sleep(15)
del(animation)

src.loc = picked

spawn(0)
var/atom/movable/overlay/animation = new(src.loc)
animation.icon = 'mob.dmi'
animation.icon_state = "blank"
animation.layer = src.layer + 1
animation.master = src
flick("phasein", animation)
sleep(15)
del(animation)
//subtract cost

//Right Click Teleport
//Right click to teleport somewhere, almost exactly like admin jump to turf.
/mob/proc/phaseshift(var/turf/T in oview())
set name = "Phase Shift"
set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view."
set category = "Ninja"

if(src.stat)
src << "\red You must be conscious to do this."
return
//add energy cost check
//add warning message for low energy
if(T.density)
src << "\red You cannot teleport into solid walls."
return

var/turf/mobloc = get_turf(src.loc)

spawn(0)
var/atom/movable/overlay/animation = new(mobloc)
animation.icon = 'mob.dmi'
animation.icon_state = "blank"
animation.layer = src.layer + 1
animation.master = mobloc
flick("phaseout", animation)
sleep(15)
del(animation)

src.loc = T

spawn(0)
var/atom/movable/overlay/animation = new(src.loc)
animation.icon = 'mob.dmi'
animation.icon_state = "blank"
animation.layer = src.layer + 1
animation.master = src
flick("phasein", animation)
sleep(15)
del(animation)
//subtract cost

/*
//EMP Pulse
//Disables nearby tech equipment.
name = ""
tab = "ninja"
desc = ""
cost = 0
//Summon Energy Blade
//Summons a blade of energy in active hand.
name = ""
tab = "ninja"
desc = ""
cost = 0
//Toggle vision
//Toggles between heat, meson, and night vision. Will be a function of the mask.
switch()
if(1)
src.sight |= SEE_TURFS
src.blahblah.mode=2
if(2)
src.see_in_dark = 5
src.blahblah.mode=3
if(3)
src.sight |= SEE_MOBS
src.blahblah.mode=1
//Toggle Stealth
Will be a function of the suit, much like a regular cloak.
*/

19 changes: 14 additions & 5 deletions config/names/ninjaname.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
Shadow
Sarutobi
Crimson
Smoke
Rain
Scorpion
Zero
Ermac
Saibot
Cyrax
Deep
Raphael
Michaelangelo
Donatello
Expand All @@ -25,6 +23,17 @@ Seven
McNinja
Hanzo
Blood
Grappler
Ulimate
Remorseless
Iga
Koga
Hero
Hiro
Phantom
Baki
Ogre
Daemon
Goemon
McAwesome
Throat
Death
Aria
Bro
21 changes: 12 additions & 9 deletions config/names/ninjatitle.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,19 @@ Shinobi
Initiate
Grandmaster
Strider
Striker
Slayer
Awesome
Ender
Dr.
Baki
Ogre
Daemon
Goemon
McAwesome
Iga
Koga
Hero
Hiro
Noob
Night
Crimson
Grappler
Ulimate
Remorseless
Deep
Dragon
Cruel
Nightshade
Black
Binary file modified icons/mob/mob.dmi
Binary file not shown.

0 comments on commit 539982f

Please sign in to comment.