diff --git a/code/game/gamemodes/wizard/spells.dm b/code/game/gamemodes/wizard/spells.dm index 0e6e3ad2d4d..a6e3375a0e4 100644 --- a/code/game/gamemodes/wizard/spells.dm +++ b/code/game/gamemodes/wizard/spells.dm @@ -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 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 63f86865ac8..3e1b0b80b20 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 704352a9218..b2dc2c4b699 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -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("Mission: \red [input].") new_ninja.resistances += "alien_embryo" @@ -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. @@ -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) @@ -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 SPACE NINJA!\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 [input]" + 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 \ No newline at end of file +//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. + +*/ + diff --git a/config/names/ninjaname.txt b/config/names/ninjaname.txt index b5578222e03..ef28873b263 100644 --- a/config/names/ninjaname.txt +++ b/config/names/ninjaname.txt @@ -1,6 +1,5 @@ Shadow Sarutobi -Crimson Smoke Rain Scorpion @@ -8,7 +7,6 @@ Zero Ermac Saibot Cyrax -Deep Raphael Michaelangelo Donatello @@ -25,6 +23,17 @@ Seven McNinja Hanzo Blood -Grappler -Ulimate -Remorseless \ No newline at end of file +Iga +Koga +Hero +Hiro +Phantom +Baki +Ogre +Daemon +Goemon +McAwesome +Throat +Death +Aria +Bro \ No newline at end of file diff --git a/config/names/ninjatitle.txt b/config/names/ninjatitle.txt index 62d77b3c268..f6b093eeed4 100644 --- a/config/names/ninjatitle.txt +++ b/config/names/ninjatitle.txt @@ -19,16 +19,19 @@ Shinobi Initiate Grandmaster Strider +Striker Slayer Awesome Ender Dr. -Baki -Ogre -Daemon -Goemon -McAwesome -Iga -Koga -Hero -Hiro \ No newline at end of file +Noob +Night +Crimson +Grappler +Ulimate +Remorseless +Deep +Dragon +Cruel +Nightshade +Black \ No newline at end of file diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index dc48bfb3c9e..11b5585cac4 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ