#Reverted default religion to Space Christianity. SS13 is not 40k and the Imperium is not mentioned anywhere in the [tgstation] backstory as far as I know. It's fine if that's what you want to worship but it does not make a lot of sense for it to be the default option.

#A few specific religions will now spawn unique books (they all use the Bible sprite). Feel free to expand on this.
#AIs and cyborgs will now get the code phrases if they are a traitor. Rev heads will no-longer get them. Finally, rev heads will properly equip their items if admin-made.
#Added field generator code improvements by Aygar.
#Added a general turf proc to kill mobs/creatures in a tile, kill_creatures(). Might be useful in the future if more creatures are added.
#Added a general teleport proc, get_teleport_loc(). Supports only 4 directions of movement.
#More code improvements to ninjas. Admins will now only spawn player ghosts as ninjas. No more admin ninjas.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1577 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
noisomehollow@lycos.com
2011-05-13 08:30:05 +00:00
parent b11b745a52
commit e7d8a28fd4
16 changed files with 423 additions and 308 deletions
+23 -126
View File
@@ -66,60 +66,20 @@ In the case that they are not, I imagine the game will run-time error like crazy
var/C = 100
if(!ninjacost(C,1))
var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit
var/list/turfs = new/list()
var/turf/picked
var/turf/mobloc = get_turf(loc)
var/safety = 0
var/locx
var/locy
switch(dir)//Gets rectengular range for target.
if(NORTH)
locx = mobloc.x
locy = (mobloc.y+9)
for(var/turf/T in block(locate(locx-3,locy-1,loc.z), locate(locx+3,locy+1,loc.z) ))
if(T.density) continue
if(T.x>world.maxx || T.x<1) continue
if(T.y>world.maxy || T.y<1) continue
turfs += T
if(SOUTH)
locx = mobloc.x
locy = (mobloc.y-9)
for(var/turf/T in block(locate(locx-3,locy-1,loc.z), locate(locx+3,locy+1,loc.z) ))
if(T.density) continue
if(T.x>world.maxx || T.x<1) continue
if(T.y>world.maxy || T.y<1) continue
turfs += T
if(EAST)
locy = mobloc.y
locx = (mobloc.x+9)
for(var/turf/T in block(locate(locx-1,locy-3,loc.z), locate(locx+1,locy+3,loc.z) ))
if(T.density) continue
if(T.x>world.maxx || T.x<1) continue
if(T.y>world.maxy || T.y<1) continue
turfs += T
if(WEST)
locy = mobloc.y
locx = (mobloc.x-9)
for(var/turf/T in block(locate(locx-1,locy-3,loc.z), locate(locx+1,locy+3,loc.z) ))
if(T.density) continue
if(T.x>world.maxx || T.x<1) continue
if(T.y>world.maxy || T.y<1) continue
turfs += T
else safety = 1
if(turfs.len&&!safety)//Cancels the teleportation if no valid turf is found. Usually when teleporting near map edge.
picked = pick(turfs)
var/turf/destination = get_teleport_loc(loc,src,9,1,3,1,0,1)
var/turf/mobloc = get_turf(loc)//To make sure that certain things work properly below.
if(destination&&istype(mobloc, /turf))
spawn(0)
playsound(loc, "sparks", 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout")
if(istype(get_active_hand(),/obj/item/weapon/grab))//Handles grabbed persons.
var/obj/item/weapon/grab/G = get_active_hand()
G.affecting.loc = locate(picked.x+rand(-1,1),picked.y+rand(-1,1),picked.z)//variation of position.
G.affecting.loc = locate(destination.x+rand(-1,1),destination.y+rand(-1,1),destination.z)//variation of position.
if(istype(get_inactive_hand(),/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = get_inactive_hand()
G.affecting.loc = locate(picked.x+rand(-1,1),picked.y+rand(-1,1),picked.z)//variation of position.
loc = picked
G.affecting.loc = locate(destination.x+rand(-1,1),destination.y+rand(-1,1),destination.z)//variation of position.
loc = destination
spawn(0)
S.spark_system.start()
@@ -127,20 +87,8 @@ In the case that they are not, I imagine the game will run-time error like crazy
playsound(loc, "sparks", 50, 1)
anim(loc,src,'mob.dmi',,"phasein")
spawn(0)//Any living mobs in teleport area are gibbed. Added some more types.
for(var/mob/living/M in picked)
if(M==src) continue
spawn(0)
M.gib()
for(var/obj/mecha/M in picked)
spawn(0)
M.take_damage(100, "brute")
for(var/obj/alien/facehugger/M in picked)//These really need to be mobs.
spawn(0)
M.death()
for(var/obj/livestock/M in picked)
spawn(0)
M.gib()
spawn(0)
destination.kill_creatures(src)//Any living mobs in teleport area are gibbed. Check turf procs for how it does it.
S.coold = 1
S.cell.charge-=(C*10)
else
@@ -157,8 +105,8 @@ In the case that they are not, I imagine the game will run-time error like crazy
var/C = 200
if(!ninjacost(C,1))
var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit
if(!T.density)
var/turf/mobloc = get_turf(loc)
var/turf/mobloc = get_turf(loc)//To make sure that certain things work properly below.
if(!T.density&&istype(mobloc, /turf))
spawn(0)
playsound(loc, 'sparks4.ogg', 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout")
@@ -178,23 +126,11 @@ In the case that they are not, I imagine the game will run-time error like crazy
anim(loc,src,'mob.dmi',,"phasein")
spawn(0)//Any living mobs in teleport area are gibbed.
for(var/mob/living/M in T)
if(M==src) continue
spawn(0)
M.gib()
for(var/obj/mecha/M in T)
spawn(0)
M.take_damage(100, "brute")
for(var/obj/alien/facehugger/M in T)//These really need to be mobs.
spawn(0)
M.death()
for(var/obj/livestock/M in T)
spawn(0)
M.gib()
T.kill_creatures(src)
S.coold = 1
S.cell.charge-=(C*10)
else
src << "\red You cannot teleport into solid walls."
src << "\red You cannot teleport into solid walls or from solid matter"
return
//EMP Pulse
@@ -289,7 +225,7 @@ In the case that they are not, I imagine the game will run-time error like crazy
var/C = 200
if(!ninjacost(C))
if(!locate(/obj/effects/energy_net) in M.loc.contents)//Check if they are already being affected by an energy net.
if(!locate(/obj/effects/energy_net) in M.loc)//Check if they are already being affected by an energy net.
if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame.
for(var/turf/T in getline(loc, M.loc))
if(T==loc||T==M.loc) continue
@@ -347,7 +283,7 @@ In the case that they are not, I imagine the game will run-time error like crazy
set desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off."
set category = "Ninja Ability"
if(!usr.incorporeal_move)
if(!incorporeal_move)
incorporeal_move = 2
density = 0
src << "\blue You will now phase through solid matter."
@@ -366,61 +302,23 @@ Allows to gib up to five squares in a straight line. Seriously.*/
if(!ninjacost())
var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit
var/locx
var/locy
var/turf/mobloc = get_turf(loc)
var/safety = 0
switch(dir)
if(NORTH)
locx = mobloc.x
locy = (mobloc.y+5)
if(locy>world.maxy)
safety = 1
if(SOUTH)
locx = mobloc.x
locy = (mobloc.y-5)
if(locy<1)
safety = 1
if(EAST)
locy = mobloc.y
locx = (mobloc.x+5)
if(locx>world.maxx)
safety = 1
if(WEST)
locy = mobloc.y
locx = (mobloc.x-5)
if(locx<1)
safety = 1
else safety = 1
if(!safety)//Cancels the teleportation if no valid turf is found. Usually when teleporting near map edge.
var/turf/destination = get_teleport_loc(loc,src,5)
var/turf/mobloc = get_turf(loc)//To make sure that certain things work properly below.
if(destination&&istype(mobloc, /turf))
say("Ai Satsugai!")
var/turf/picked = locate(locx,locy,mobloc.z)
spawn(0)
playsound(loc, "sparks", 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout")
spawn(0)
for(var/turf/T in getline(mobloc, picked))
for(var/turf/T in getline(mobloc, destination))
spawn(0)
for(var/mob/living/M in T)
if(M==src) continue
spawn(0)
M.gib()
for(var/obj/mecha/M in T)
spawn(0)
M.take_damage(100, "brute")
for(var/obj/alien/facehugger/M in T)//These really need to be mobs.
spawn(0)
M.death()
for(var/obj/livestock/M in T)
spawn(0)
M.gib()
if(T==mobloc||T==picked) continue
T.kill_creatures(src)
if(T==mobloc||T==destination) continue
spawn(0)
anim(T,src,'mob.dmi',,"phasein")
loc = picked
loc = destination
spawn(0)
S.spark_system.start()
@@ -474,8 +372,7 @@ Allows to gib up to five squares in a straight line. Seriously.*/
if(locx>world.maxx)
safety = 1
else safety=1
if(!safety)
if(!safety&&istype(mobloc, /turf))
say("Kumo no Shinkiro!")
var/turf/picked = locate(locx,locy,mobloc.z)
spawn(0)
@@ -504,4 +401,4 @@ Allows to gib up to five squares in a straight line. Seriously.*/
src << "\red The VOID-shift device is malfunctioning, <B>teleportation failed</B>."
else
src << "\red There are no targets in view."
return
return
+82 -121
View File
@@ -35,6 +35,7 @@ ________________________________________________________________________________
/obj/item/clothing/suit/space/space_ninja/proc/killai(var/mob/living/silicon/ai/A as mob)
A << "\red Self-destruct protocol dete-- *bzzzzz*"
A << browse(null, "window=hack spideros")
AI = null
A.death()//Kill
A.ghostize()//Turn into ghost
del(AI)
@@ -73,7 +74,7 @@ ________________________________________________________________________________
U.bruteloss += 1
A = 200
cell.charge-=A
if(U.stat)//If the ninja falls down, they can still try and jaunt away or shift kill their opponent.
if(U.stat)//If the ninja gets paralyzed, they can still try and jaunt away (since they can adrenaline boost and then jaunt).
active=0
if(cell.charge<0)
if(kamikaze)
@@ -91,7 +92,7 @@ ________________________________________________________________________________
set desc = "Initializes the suit for field operation."
set category = "Ninja Equip"
var/mob/living/carbon/human/U = usr
var/mob/living/carbon/human/U = loc
if(U.mind&&U.mind.special_role=="Space Ninja"&&U:wear_suit==src&&!initialize)
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init
U << "\blue Now initializing..."
@@ -110,18 +111,18 @@ ________________________________________________________________________________
U << "\red <B>ERROR</B>: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING..."
return
U << "\blue Securing external locking mechanism...\nNeural-net established."
U.head:canremove=0
U.shoes:canremove=0
U.gloves:canremove=0
U.head.canremove=0
U.shoes.canremove=0
U.gloves.canremove=0
canremove=0
sleep(40)
U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..."
sleep(40)
if(U.stat==2||U.health<=0)
U << "\red <B>FATAL ERROR</B>: 344--93#&&21 BRAIN WAV3 PATT$RN <B>RED</B>\nA-A-AB0RTING..."
U.head:canremove=1
U.shoes:canremove=1
U.gloves:canremove=1
U.head.canremove=1
U.shoes.canremove=1
U.gloves.canremove=1
canremove=1
verbs += /obj/item/clothing/suit/space/space_ninja/proc/init
return
@@ -136,22 +137,7 @@ ________________________________________________________________________________
U << "\blue Primary system status: <B>ONLINE</B>.\nBackup system status: <B>ONLINE</B>.\nCurrent energy capacity: <B>[cell.charge]</B>."
sleep(40)
U << "\blue All systems operational. Welcome to <B>SpiderOS</B>, [U.real_name]."
U.verbs += /mob/proc/ninjashift
U.verbs += /mob/proc/ninjajaunt
U.verbs += /mob/proc/ninjasmoke
U.verbs += /mob/proc/ninjaboost
U.verbs += /mob/proc/ninjapulse
U.verbs += /mob/proc/ninjablade
U.verbs += /mob/proc/ninjastar
U.verbs += /mob/proc/ninjanet
U.mind.special_verbs += /mob/proc/ninjashift
U.mind.special_verbs += /mob/proc/ninjajaunt
U.mind.special_verbs += /mob/proc/ninjasmoke
U.mind.special_verbs += /mob/proc/ninjaboost
U.mind.special_verbs += /mob/proc/ninjapulse
U.mind.special_verbs += /mob/proc/ninjablade
U.mind.special_verbs += /mob/proc/ninjastar
U.mind.special_verbs += /mob/proc/ninjanet
U.grant_ninja_verbs()
verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit
verbs += /obj/item/clothing/suit/space/space_ninja/proc/spideros
U.gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/drain_wire
@@ -162,14 +148,14 @@ ________________________________________________________________________________
U.shoes:slowdown--
ntick(U)
else
if(usr.mind&&usr.mind.special_role=="Space Ninja")
usr << "\red You do not understand how this suit functions."
else if(usr:wear_suit!=src)
usr << "\red You must be wearing the suit to use this function."
if(U.mind&&U.mind.special_role!="Space Ninja")
U << "\red You do not understand how this suit functions."
else if(U.wear_suit!=src)
U << "\red You must be wearing the suit to use this function."
else if(initialize)
usr << "\red The suit is already functioning."
U << "\red The suit is already functioning."
else
usr << "\red You cannot use this function at this time."
U << "\red You cannot use this function at this time."
return
/obj/item/clothing/suit/space/space_ninja/proc/deinit()
@@ -177,45 +163,27 @@ ________________________________________________________________________________
set desc = "Begins procedure to remove the suit."
set category = "Ninja Equip"
if(affecting!=loc)
return
var/mob/living/carbon/human/U = affecting
if(!initialize)
usr << "\red The suit is not initialized."
U << "\red The suit is not initialized."
return
if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No")
return
var/mob/living/carbon/human/U = affecting
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit
U << "\blue Now de-initializing..."
if(kamikaze)
U << "\blue Disengaging mode...\n\black<b>CODE NAME</b>: \red <b>KAMIKAZE</b>"
U.verbs -= /mob/proc/ninjaslayer
U.verbs -= /mob/proc/ninjawalk
U.verbs -= /mob/proc/ninjamirage
U.mind.special_verbs -= /mob/proc/ninjaslayer
U.mind.special_verbs -= /mob/proc/ninjawalk
U.mind.special_verbs -= /mob/proc/ninjamirage
U.remove_kamikaze_verbs()
kamikaze = 0
unlock = 0
U.incorporeal_move = 0
U.density = 1
spideros = 0
sleep(40)
U.verbs -= /mob/proc/ninjashift
U.verbs -= /mob/proc/ninjajaunt
U.verbs -= /mob/proc/ninjasmoke
U.verbs -= /mob/proc/ninjaboost
U.verbs -= /mob/proc/ninjapulse
U.verbs -= /mob/proc/ninjablade
U.verbs -= /mob/proc/ninjastar
U.verbs -= /mob/proc/ninjanet
U.mind.special_verbs -= /mob/proc/ninjashift
U.mind.special_verbs -= /mob/proc/ninjajaunt
U.mind.special_verbs -= /mob/proc/ninjasmoke
U.mind.special_verbs -= /mob/proc/ninjaboost
U.mind.special_verbs -= /mob/proc/ninjapulse
U.mind.special_verbs -= /mob/proc/ninjablade
U.mind.special_verbs -= /mob/proc/ninjastar
U.mind.special_verbs -= /mob/proc/ninjanet
U.remove_ninja_verbs()
U << "\blue Logging off, [U:real_name]. Shutting down <B>SpiderOS</B>."
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/spideros
sleep(40)
@@ -233,8 +201,6 @@ ________________________________________________________________________________
U << "\red #2#"
spawn(30)
U << "\red #1#: <B>G00DBYE</B>"
if(AI)
killai(AI)
U.gib()
return
U << "\blue Disconnecting neural-net interface...\green<B>Success</B>\blue."
@@ -244,7 +210,7 @@ ________________________________________________________________________________
if(istype(U.head, /obj/item/clothing/head/helmet/space/space_ninja))
U.head.canremove=1
if(istype(U.shoes, /obj/item/clothing/shoes/space_ninja))
U.shoes:canremove=1
U.shoes.canremove=1
U.shoes:slowdown++
if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja))
U.gloves.icon_state = "s-ninja"
@@ -419,7 +385,7 @@ ________________________________________________________________________________
var/laws
dat += "<h4><img src=sos_13.png> AI Control:</h4>"
var/mob/living/silicon/ai/A = AI
if(AI)//If an AI exists, in case it gets purged.
if(AI)//If an AI exists, in case it gets purged while on this screen.
dat += "Stored AI: <b>[A.name]</b><br>"
dat += "System integrity: [(A.health+100)/2]%<br>"
@@ -591,22 +557,7 @@ ________________________________________________________________________________
U.gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/drain_wire
U.gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled
U.update_clothing()
U.verbs -= /mob/proc/ninjashift
U.verbs -= /mob/proc/ninjajaunt
U.verbs -= /mob/proc/ninjapulse
U.verbs -= /mob/proc/ninjastar
U.verbs -= /mob/proc/ninjanet
U.mind.special_verbs -= /mob/proc/ninjashift
U.mind.special_verbs -= /mob/proc/ninjajaunt
U.mind.special_verbs -= /mob/proc/ninjapulse
U.mind.special_verbs -= /mob/proc/ninjastar
U.mind.special_verbs -= /mob/proc/ninjanet
U.verbs += /mob/proc/ninjaslayer
U.verbs += /mob/proc/ninjawalk
U.verbs += /mob/proc/ninjamirage
U.mind.special_verbs += /mob/proc/ninjaslayer
U.mind.special_verbs += /mob/proc/ninjawalk
U.mind.special_verbs += /mob/proc/ninjamirage
U.grant_kamikaze_verbs()
U.ninjablade()
message_admins("\blue [U.key] used KAMIKAZE mode.", 1)
else
@@ -728,17 +679,17 @@ ________________________________________________________________________________
spideros()//Refreshes the screen by calling it again (which replaces current screen with new screen).
else//If they are not in control.
var/mob/living/silicon/ai/AI = usr
var/mob/living/silicon/ai/A = AI
//While AI has control, the person can't take off the suit so checking here would be moot.
if(isnull(src))//If they AI dies/suit destroyed.
AI << browse(null, "window=hack spideros")
A << browse(null, "window=hack spideros")
return
var/obj/proc_holder/ai_hack_ninja/ninja_spideros = locate() in AI//What is the object granting access to proc? Find it.
var/obj/proc_holder/ai_hack_ninja/ninja_spideros = locate() in A//What is the object granting access to proc? Find it.
switch(href_list["choice"])
if("Close")
AI << browse(null, "window=hack spideros")
A << browse(null, "window=hack spideros")
return
if("Refresh")//Refresh, goes to the end of the proc.
if("Return")//Return
@@ -753,7 +704,7 @@ ________________________________________________________________________________
U.electrocute_act(damage, src,0.1,1)//The last argument is a safety for the human proc that checks for gloves.
cell.charge -= damage
else
AI << "\red <b>ERROR</b>: \black Not enough energy remaining."
A << "\red <b>ERROR</b>: \black Not enough energy remaining."
if("0")//Menus are numbers, see note above. 0 is the hub.
spideros=0
if("1")//Begin normal menus 1-9.
@@ -769,13 +720,13 @@ ________________________________________________________________________________
var/t = input(U, "Please enter untraceable message.") as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if(!t||affecting!=U||!initialize)//Wow, another one of these. Man...
AI << browse(null, "window=hack spideros")
A << browse(null, "window=hack spideros")
return
if(isnull(P)||P.toff)//So it doesn't freak out if the object no-longer exists.
AI << "\red Error: unable to deliver message."
A << "\red Error: unable to deliver message."
ninja_spideros.Click()
return
P.tnote += "<i><b>&larr; From [AI]:</b></i><br>[t]<br>"//Oh ai, u so silly
P.tnote += "<i><b>&larr; From [A]:</b></i><br>[t]<br>"//Oh ai, u so silly
if (!P.silent)
playsound(P.loc, 'twobeep.ogg', 50, 1)
for (var/mob/O in hearers(3, P.loc))
@@ -783,54 +734,54 @@ ________________________________________________________________________________
P.overlays = null
P.overlays += image('pda.dmi', "pda-r")
if("Unlock Kamikaze")
AI << "\red <b>ERROR</b>: \black TARANTULA.v.4.77.12 encryption algorithm detected. Unable to decrypt archive. \n Aborting..."
A << "\red <b>ERROR</b>: \black TARANTULA.v.4.77.12 encryption algorithm detected. Unable to decrypt archive. \n Aborting..."
if("Dylovene")
if(!reagents.get_reagent_amount("anti_toxin"))
AI << "\red Error: the suit cannot perform this function. Out of dylovene."
A << "\red Error: the suit cannot perform this function. Out of dylovene."
else
reagents.reaction(U, 2)
reagents.trans_id_to(U, "anti_toxin", transfera)
AI << "Injecting..."
A << "Injecting..."
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Dexalin Plus")
if(!reagents.get_reagent_amount("dexalinp"))
AI << "\red Error: the suit cannot perform this function. Out of dexalinp."
A << "\red Error: the suit cannot perform this function. Out of dexalinp."
else
reagents.reaction(U, 2)
reagents.trans_id_to(U, "dexalinp", transfera)
AI << "Injecting..."
A << "Injecting..."
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Tricordazine")
if(!reagents.get_reagent_amount("tricordrazine"))
AI << "\red Error: the suit cannot perform this function. Out of tricordrazine."
A << "\red Error: the suit cannot perform this function. Out of tricordrazine."
else
reagents.reaction(U, 2)
reagents.trans_id_to(U, "tricordrazine", transfera)
AI << "Injecting..."
A << "Injecting..."
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Spacelin")
if(!reagents.get_reagent_amount("spaceacillin"))
AI << "\red Error: the suit cannot perform this function. Out of spaceacillin."
A << "\red Error: the suit cannot perform this function. Out of spaceacillin."
else
reagents.reaction(U, 2)
reagents.trans_id_to(U, "spaceacillin", transfera)
AI << "Injecting..."
A << "Injecting..."
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Radium")
if((reagents.get_reagent_amount("radium"))<=60)//Special case. If there are only 60 radium units left.
AI << "\red Error: the suit cannot perform this function. Out of radium."
A << "\red Error: the suit cannot perform this function. Out of radium."
else
reagents.reaction(U, 2)
reagents.trans_id_to(U, "radium", transfera)
AI << "Injecting..."
A << "Injecting..."
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Nutriment")
if(!reagents.get_reagent_amount("nutriment"))
AI << "\red Error: the suit cannot perform this function. Out of nutriment."
A << "\red Error: the suit cannot perform this function. Out of nutriment."
else
reagents.reaction(U, 2)
reagents.trans_id_to(U, "nutriment", 5)
AI << "Injecting..."
A << "Injecting..."
U << "You feel a tiny prick and a sudden rush of substance in to your veins."
ninja_spideros.Click()//Calls spideros for AI.
return
@@ -839,19 +790,20 @@ ________________________________________________________________________________
set src in view()
..()
if(initialize)
var/mob/living/carbon/human/U = affecting
if(control)
usr << "All systems operational. Current energy capacity: <B>[cell.charge]</B>."
U << "All systems operational. Current energy capacity: <B>[cell.charge]</B>."
if(!kamikaze)
if(active)
usr << "The CLOAK-tech device is <B>active</B>."
U << "The CLOAK-tech device is <B>active</B>."
else
usr << "The CLOAK-tech device is <B>inactive</B>."
U << "The CLOAK-tech device is <B>inactive</B>."
else
usr << "\red KAMIKAZE MODE ENGAGED!"
usr << "There are <B>[sbombs]</B> smoke bombs remaining."
usr << "There are <B>[aboost]</B> adrenaline boosters remaining."
U << "\red KAMIKAZE MODE ENGAGED!"
U << "There are <B>[sbombs]</B> smoke bombs remaining."
U << "There are <B>[aboost]</B> adrenaline boosters remaining."
else
usr << "ERR0R DATAA NoT FOUND 3RROR"
U << "ERR0R DATAA NoT FOUND 3RROR"
//GLOVES===================================
@@ -859,12 +811,14 @@ ________________________________________________________________________________
set name = "Toggle Interaction"
set desc = "Toggles special interaction on or off."
set category = "Ninja Equip"
var/mob/living/carbon/human/U = loc
if(!candrain)
candrain=1
usr << "You enable special interaction."
U << "You enable special interaction."
else
candrain=0
usr << "You disable special interaction."
U << "You disable special interaction."
//DRAINING PROCS START===================================
@@ -874,7 +828,7 @@ ________________________________________________________________________________
set category = "Ninja Equip"
var/obj/cable/attached
var/mob/living/carbon/human/U = usr
var/mob/living/carbon/human/U = loc
if(candrain&&!draining)
var/turf/T = U.loc
if(isturf(T) && T.is_plating())
@@ -891,7 +845,7 @@ ________________________________________________________________________________
/obj/item/clothing/gloves/space_ninja/proc/drain(var/target_type as text, var/target, var/obj/suit, var/obj/gloves)
//Var Initialize
var/mob/living/carbon/human/U = usr
var/mob/living/carbon/human/U = loc
var/obj/item/clothing/suit/space/space_ninja/S = suit
var/obj/item/clothing/gloves/space_ninja/G = gloves
@@ -1114,10 +1068,11 @@ ________________________________________________________________________________
set src in view()
..()
if(!canremove)
var/mob/living/carbon/human/U = loc
if(candrain)
usr << "The energy drain mechanism is: <B>active</B>."
U << "The energy drain mechanism is: <B>active</B>."
else
usr << "The energy drain mechanism is: <B>inactive</B>."
U << "The energy drain mechanism is: <B>inactive</B>."
//MASK===================================
@@ -1129,6 +1084,8 @@ ________________________________________________________________________________
set name = "Toggle Voice"
set desc = "Toggles the voice synthesizer on or off."
set category = "Ninja Equip"
var/mob/U = loc//Can't toggle voice when you're not wearing the mask.
var/vchange = (alert("Would you like to synthesize a new name or turn off the voice synthesizer?",,"New Name","Turn Off"))
if(vchange=="New Name")
var/chance = rand(1,100)
@@ -1152,20 +1109,20 @@ ________________________________________________________________________________
if(91 to 100)//Small chance of an existing crew name.
var/list/names = new()
for(var/mob/living/carbon/human/M in world)
if(M==usr||!M.client||!M.real_name) continue
if(M==U||!M.client||!M.real_name) continue
names.Add(M)
if(!names.len)
voice = "Cuban Pete"//Smallest chance to be the man.
else
var/mob/picked = pick(names)
voice = picked.real_name
usr << "You are now mimicking <B>[voice]</B>."
U << "You are now mimicking <B>[voice]</B>."
else
if(voice!="Unknown")
usr << "You deactivate the voice synthesizer."
U << "You deactivate the voice synthesizer."
voice = "Unknown"
else
usr << "The voice synthesizer is already deactivated."
U << "The voice synthesizer is already deactivated."
return
/obj/item/clothing/mask/gas/voice/space_ninja/proc/switchm()
@@ -1173,24 +1130,27 @@ ________________________________________________________________________________
set desc = "Switches between Night Vision, Meson, or Thermal vision modes."
set category = "Ninja Equip"
//Have to reset these manually since life.dm is retarded like that. Go figure.
//This will only work for humans since only they have the appropriate code for the mask.
var/mob/U = loc
switch(mode)
if(1)
mode=2
usr.see_in_dark = 2
usr << "Switching mode to <B>Thermal Scanner</B>."
U.see_in_dark = 2
U << "Switching mode to <B>Thermal Scanner</B>."
if(2)
mode=3
usr.see_invisible = 0
usr.sight &= ~SEE_MOBS
usr << "Switching mode to <B>Meson Scanner</B>."
U.see_invisible = 0
U.sight &= ~SEE_MOBS
U << "Switching mode to <B>Meson Scanner</B>."
if(3)
mode=1
usr.sight &= ~SEE_TURFS
usr << "Switching mode to <B>Night Vision</B>."
U.sight &= ~SEE_TURFS
U << "Switching mode to <B>Night Vision</B>."
/obj/item/clothing/mask/gas/voice/space_ninja/examine()
set src in view()
..()
var/mode = "Night Vision"
var/voice = "inactive"
switch(mode)
@@ -1204,7 +1164,7 @@ ________________________________________________________________________________
voice = "inactive"
else
voice = "active"
usr << "<B>[mode]</B> is active."
usr << "<B>[mode]</B> is active."//Leaving usr here since it may be on the floor or on a person.
usr << "Voice mimicking algorithm is set to <B>[voice]</B>."
//ENERGY NET===================================
@@ -1229,7 +1189,7 @@ The sprite for the net is kind of ugly but I couldn't come up with a better one.
anchored = 1//Can't drag/grab.
var/health = 25//How much health it has.
var/mob/living/affecting = null//Who it is currently affecting, if anyone.
var/mob/living/master = null//Who shot the net. Will let this person know if net was successful or failed.
var/mob/living/master = null//Who shot web. Will let this person know if the net was successful or failed.
/obj/effects/energy_net/proc/healthcheck()
if(health <=0)
@@ -1351,6 +1311,7 @@ The sprite for the net is kind of ugly but I couldn't come up with a better one.
anim(M.loc,M,'mob.dmi',,"phaseout")
M.loc = pick(prisonwarp)//Throw mob in prison.
density = 0//Make the net pass-through.
invisibility = 101//Make the net invisible so all the animations can play out.
health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running.
+86 -7
View File
@@ -9,18 +9,18 @@ ________________________________________________________________________________
/client/proc/space_ninja()
set category = "Fun"
set name = "Spawn Space Ninja"
set desc = "Spawns a space ninja for when you need a teenager with attitude."
if(!src.authenticated || !src.holder)
set desc = "Spawns a space ninja for when you need a teenager with an attitude."
if(!authenticated || !holder)
src << "Only administrators may use this command."
return
if(!ticker.mode)//Apparently, this doesn't actually prevent anything. Huh
if(!ticker.mode)
alert("The game hasn't started yet!")
return
if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No")
return
TRYAGAIN
var/input = input(usr, "Please specify which mission the space ninja shall undertake.", "Specify Mission", "")
var/input = input(src, "Please specify which mission the space ninja shall undertake.", "Specify Mission", "")
if(!input)
goto TRYAGAIN
@@ -38,12 +38,12 @@ ________________________________________________________________________________
new_ninja.create_ninja()
var/admin_name = src//In case admins want to spawn themselves as ninjas. Badmins
var/admin_name = src
var/mob/dead/observer/G
var/list/candidates = list()
for(G in world)
if(G.client)
if(G.client&&!G.client.holder)
if(((G.client.inactivity/10)/60) <= 5)
candidates.Add(G)
if(candidates.len)
@@ -65,7 +65,7 @@ ________________________________________________________________________________
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.")
mob/proc/create_ninja()
/mob/proc/create_ninja()
var/mob/living/carbon/human/new_ninja = src
var/ninja_title = pick(ninja_titles)
var/ninja_name = pick(ninja_names)
@@ -93,6 +93,82 @@ mob/proc/create_ninja()
new_ninja.equip_if_possible(new /obj/item/weapon/plastique(new_ninja), new_ninja.slot_l_store)
new_ninja.equip_if_possible(new /obj/item/weapon/tank/emergency_oxygen(new_ninja), new_ninja.slot_s_store)
/mob/proc/grant_ninja_verbs()
verbs += /mob/proc/ninjashift
verbs += /mob/proc/ninjajaunt
verbs += /mob/proc/ninjasmoke
verbs += /mob/proc/ninjaboost
verbs += /mob/proc/ninjapulse
verbs += /mob/proc/ninjablade
verbs += /mob/proc/ninjastar
verbs += /mob/proc/ninjanet
mind.special_verbs += /mob/proc/ninjashift
mind.special_verbs += /mob/proc/ninjajaunt
mind.special_verbs += /mob/proc/ninjasmoke
mind.special_verbs += /mob/proc/ninjaboost
mind.special_verbs += /mob/proc/ninjapulse
mind.special_verbs += /mob/proc/ninjablade
mind.special_verbs += /mob/proc/ninjastar
mind.special_verbs += /mob/proc/ninjanet
return
/mob/proc/remove_ninja_verbs()
verbs -= /mob/proc/ninjashift
verbs -= /mob/proc/ninjajaunt
verbs -= /mob/proc/ninjasmoke
verbs -= /mob/proc/ninjaboost
verbs -= /mob/proc/ninjapulse
verbs -= /mob/proc/ninjablade
verbs -= /mob/proc/ninjastar
verbs -= /mob/proc/ninjanet
mind.special_verbs -= /mob/proc/ninjashift
mind.special_verbs -= /mob/proc/ninjajaunt
mind.special_verbs -= /mob/proc/ninjasmoke
mind.special_verbs -= /mob/proc/ninjaboost
mind.special_verbs -= /mob/proc/ninjapulse
mind.special_verbs -= /mob/proc/ninjablade
mind.special_verbs -= /mob/proc/ninjastar
mind.special_verbs -= /mob/proc/ninjanet
return
/mob/proc/grant_kamikaze_verbs()
verbs -= /mob/proc/ninjashift
verbs -= /mob/proc/ninjajaunt
verbs -= /mob/proc/ninjapulse
verbs -= /mob/proc/ninjastar
verbs -= /mob/proc/ninjanet
mind.special_verbs -= /mob/proc/ninjashift
mind.special_verbs -= /mob/proc/ninjajaunt
mind.special_verbs -= /mob/proc/ninjapulse
mind.special_verbs -= /mob/proc/ninjastar
mind.special_verbs -= /mob/proc/ninjanet
verbs += /mob/proc/ninjaslayer
verbs += /mob/proc/ninjawalk
verbs += /mob/proc/ninjamirage
mind.special_verbs += /mob/proc/ninjaslayer
mind.special_verbs += /mob/proc/ninjawalk
mind.special_verbs += /mob/proc/ninjamirage
return
/mob/proc/remove_kamikaze_verbs()
verbs += /mob/proc/ninjashift
verbs += /mob/proc/ninjajaunt
verbs += /mob/proc/ninjapulse
verbs += /mob/proc/ninjastar
verbs += /mob/proc/ninjanet
mind.special_verbs += /mob/proc/ninjashift
mind.special_verbs += /mob/proc/ninjajaunt
mind.special_verbs += /mob/proc/ninjapulse
mind.special_verbs += /mob/proc/ninjastar
mind.special_verbs += /mob/proc/ninjanet
verbs -= /mob/proc/ninjaslayer
verbs -= /mob/proc/ninjawalk
verbs -= /mob/proc/ninjamirage
mind.special_verbs -= /mob/proc/ninjaslayer
mind.special_verbs -= /mob/proc/ninjawalk
mind.special_verbs -= /mob/proc/ninjamirage
return
//AI COUNTER HACKING===================================
//I've tried a lot of stuff but adding verbs to the AI while inside an object, inside another object, did not want to work properly.
@@ -236,6 +312,9 @@ mob/proc/create_ninja()
A << browse(dat,"window=hack spideros;size=400x444;border=1;can_resize=0;can_close=0;can_minimize=0")
//DEBUG===================================
/*
+16 -13
View File
@@ -56,7 +56,9 @@
/datum/game_mode/proc/send_intercept()
/datum/game_mode/proc/equip_traitor(mob/living/carbon/human/traitor_mob)
/*Added a safety check for traitor keywords.
Rev-heads won't get them. Can be expanded otherwise.*/
/datum/game_mode/proc/equip_traitor(mob/living/carbon/human/traitor_mob, var/safety = 0)
if (!istype(traitor_mob))
return
if (traitor_mob.mind)
@@ -132,16 +134,17 @@
traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features."
traitor_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [loc]).")
//Begin code phrase.
traitor_mob << "The Syndicate provided you with the following information on how to identify other agents:"
if(prob(80))
traitor_mob << "\red Code Phrase: \black [syndicate_code_phrase]"
traitor_mob.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
else
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code phrase."
if(prob(80))
traitor_mob << "\red Code Response: \black [syndicate_code_response]"
traitor_mob.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
else
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code response."
traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
if(!safety)//If they are not a rev. Can be added on to.
traitor_mob << "The Syndicate provided you with the following information on how to identify other agents:"
if(prob(80))
traitor_mob << "\red Code Phrase: \black [syndicate_code_phrase]"
traitor_mob.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
else
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code phrase."
if(prob(80))
traitor_mob << "\red Code Response: \black [syndicate_code_response]"
traitor_mob.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
else
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code response."
traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
//End code phrase.
+1 -1
View File
@@ -58,7 +58,7 @@
rev_obj.find_target_by_role(head_mind.assigned_role)
rev_mind.objectives += rev_obj
equip_traitor(rev_mind.current) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO
equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO
equip_revolutionary(rev_mind.current)
update_rev_icons_added(rev_mind)
+15
View File
@@ -190,6 +190,21 @@
killer:set_zeroth_law(law)
killer << "New law: 0. [law]"
//Begin code phrase.
killer << "The Syndicate provided you with the following information on how to identify their agents:"
if(prob(80))
killer << "\red Code Phrase: \black [syndicate_code_phrase]"
killer.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
else
killer << "Unfortunetly, the Syndicate did not provide you with a code phrase."
if(prob(80))
killer << "\red Code Response: \black [syndicate_code_response]"
killer.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
else
killer << "Unfortunetly, the Syndicate did not provide you with a code response."
killer << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
//End code phrase.
/datum/game_mode/traitor/proc/get_mob_list()
var/list/mobs = list()
for(var/mob/living/player in world)