#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

View File

@@ -276,6 +276,7 @@ datum/mind
var/datum/game_mode/current_mode = ticker.mode var/datum/game_mode/current_mode = ticker.mode
switch (href_list["traitorize"]) switch (href_list["traitorize"])
if ("headrev") if ("headrev")
current_mode.equip_traitor(current,1)
current_mode:equip_revolutionary(current) current_mode:equip_revolutionary(current)
//find first headrev //find first headrev
for(var/datum/mind/rev_mind in current_mode:head_revolutionaries) for(var/datum/mind/rev_mind in current_mode:head_revolutionaries)

View File

@@ -18,7 +18,6 @@
return 0 return 0
/proc/get_area_name(N) //get area by it's name /proc/get_area_name(N) //get area by it's name
for(var/area/A in world) for(var/area/A in world)
if(A.name == N) if(A.name == N)
return A return A

View File

@@ -381,6 +381,97 @@
return direction_f return direction_f
//Returns location. Returns null if no location was found.
/proc/get_teleport_loc(var/turf/location as turf,var/mob/target as mob,var/distance = 1, var/density = 0, var/errorx = 0, var/errory = 0, var/eoffsetx = 0, var/eoffsety = 0)
//Location where the teleport begins, target that will teleport, distance to go, density checking 0/1(yes/no).
//Random error in tile placement x, error in tile placement y, and block offset.
//Block offset tells the proc how to place the box. Behind teleport location, relative to starting location, forward, etc.
//Negative values for offset are accepted, think of it in relation to North, -x is west, -y is south. Error defaults to positive.
//Turf and target are seperate in case you want to teleport some distance from a turf the target is not standing on or something.
var/dirx = 0//Generic location finding variable.
var/diry = 0
var/xoffset = 0//Generic counter for offset location.
var/yoffset = 0
var/b1xerror = 0//Generic placing for point A in box. The lower left.
var/b1yerror = 0
var/b2xerror = 0//Generic placing for point B in box. The upper right.
var/b2yerror = 0
errorx = abs(errorx)//Error should never be negative.
errory = abs(errory)
//var/errorxy = round((errorx+errory)/2)//Used for diagonal boxes.
switch(target.dir)//This can be done through equations but switch is the simpler method. And works fast to boot.
//Directs on what values need modifying.
if(1)//North
diry+=distance
yoffset+=eoffsety
xoffset+=eoffsetx
b1xerror-=errorx
b1yerror-=errory
b2xerror+=errorx
b2yerror+=errory
if(2)//South
diry-=distance
yoffset-=eoffsety
xoffset+=eoffsetx
b1xerror-=errorx
b1yerror-=errory
b2xerror+=errorx
b2yerror+=errory
if(4)//East
dirx+=distance
yoffset+=eoffsetx//Flipped.
xoffset+=eoffsety
b1xerror-=errory//Flipped.
b1yerror-=errorx
b2xerror+=errory
b2yerror+=errorx
if(8)//West
dirx-=distance
yoffset-=eoffsetx//Flipped.
xoffset+=eoffsety
b1xerror-=errory//Flipped.
b1yerror-=errorx
b2xerror+=errory
b2yerror+=errorx
var/turf/destination=locate(location.x+dirx,location.y+diry,location.z)
if(destination)//If there is a destination.
if(errorx||errory)//If errorx or y were specified.
var/destination_list[] = list()//To add turfs to list.
//destination_list = new()
/*This will draw a block around the target turf, given what the error is.
Specifying the values above will basically draw a different sort of block.
If the values are the same, it will be a square. If they are different, it will be a rectengle.
In either case, it will center based on offset. Offset is position from center.
Offset always calculates in relation to direction faced. In other words, depending on the direction of the teleport,
the offset should remain positioned in relation to destination.*/
var/turf/center = locate((destination.x+xoffset),(destination.y+yoffset),location.z)//So now, find the new center.
//Now to find a box from center location and make that our destination.
for(var/turf/T in block(locate(center.x+b1xerror,center.y+b1yerror,location.z), locate(center.x+b2xerror,center.y+b2yerror,location.z) ))
if(density&&T.density) continue//If density was specified.
if(T.x>world.maxx || T.x<1) continue//Don't want them to teleport off the map.
if(T.y>world.maxy || T.y<1) continue
destination_list += T
if(destination_list.len)
destination = pick(destination_list)
else return
else//Same deal here.
if(density&&destination.density) return
if(destination.x>world.maxx || destination.x<1) return
if(destination.y>world.maxy || destination.y<1) return
else return
return destination
/proc/angle2text(var/degree) /proc/angle2text(var/degree)
return dir2text(angle2dir(degree)) return dir2text(angle2dir(degree))

View File

@@ -29,6 +29,7 @@ var/syndicate_name = null
return name return name
//This is referenced in equip_traitor() so it's fairly easy to remove if needed. //This is referenced in equip_traitor() so it's fairly easy to remove if needed.
//Added this to traitor AIs.
var/syndicate_code_phrase//Code phrase for traitors. var/syndicate_code_phrase//Code phrase for traitors.
var/syndicate_code_response//Code response for traitors. var/syndicate_code_response//Code response for traitors.

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 var/C = 100
if(!ninjacost(C,1)) if(!ninjacost(C,1))
var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit
var/list/turfs = new/list() var/turf/destination = get_teleport_loc(loc,src,9,1,3,1,0,1)
var/turf/picked var/turf/mobloc = get_turf(loc)//To make sure that certain things work properly below.
var/turf/mobloc = get_turf(loc) if(destination&&istype(mobloc, /turf))
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)
spawn(0) spawn(0)
playsound(loc, "sparks", 50, 1) playsound(loc, "sparks", 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout") anim(mobloc,src,'mob.dmi',,"phaseout")
if(istype(get_active_hand(),/obj/item/weapon/grab))//Handles grabbed persons. if(istype(get_active_hand(),/obj/item/weapon/grab))//Handles grabbed persons.
var/obj/item/weapon/grab/G = get_active_hand() 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)) if(istype(get_inactive_hand(),/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = get_inactive_hand() 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. G.affecting.loc = locate(destination.x+rand(-1,1),destination.y+rand(-1,1),destination.z)//variation of position.
loc = picked loc = destination
spawn(0) spawn(0)
S.spark_system.start() 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) playsound(loc, "sparks", 50, 1)
anim(loc,src,'mob.dmi',,"phasein") anim(loc,src,'mob.dmi',,"phasein")
spawn(0)//Any living mobs in teleport area are gibbed. Added some more types. spawn(0)
for(var/mob/living/M in picked) destination.kill_creatures(src)//Any living mobs in teleport area are gibbed. Check turf procs for how it does it.
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()
S.coold = 1 S.coold = 1
S.cell.charge-=(C*10) S.cell.charge-=(C*10)
else 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 var/C = 200
if(!ninjacost(C,1)) if(!ninjacost(C,1))
var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit
if(!T.density) var/turf/mobloc = get_turf(loc)//To make sure that certain things work properly below.
var/turf/mobloc = get_turf(loc) if(!T.density&&istype(mobloc, /turf))
spawn(0) spawn(0)
playsound(loc, 'sparks4.ogg', 50, 1) playsound(loc, 'sparks4.ogg', 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout") 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") anim(loc,src,'mob.dmi',,"phasein")
spawn(0)//Any living mobs in teleport area are gibbed. spawn(0)//Any living mobs in teleport area are gibbed.
for(var/mob/living/M in T) T.kill_creatures(src)
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()
S.coold = 1 S.coold = 1
S.cell.charge-=(C*10) S.cell.charge-=(C*10)
else else
src << "\red You cannot teleport into solid walls." src << "\red You cannot teleport into solid walls or from solid matter"
return return
//EMP Pulse //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 var/C = 200
if(!ninjacost(C)) 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. 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)) for(var/turf/T in getline(loc, M.loc))
if(T==loc||T==M.loc) continue 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 desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off."
set category = "Ninja Ability" set category = "Ninja Ability"
if(!usr.incorporeal_move) if(!incorporeal_move)
incorporeal_move = 2 incorporeal_move = 2
density = 0 density = 0
src << "\blue You will now phase through solid matter." 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()) if(!ninjacost())
var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit var/obj/item/clothing/suit/space/space_ninja/S = src:wear_suit
var/locx var/turf/destination = get_teleport_loc(loc,src,5)
var/locy var/turf/mobloc = get_turf(loc)//To make sure that certain things work properly below.
var/turf/mobloc = get_turf(loc) if(destination&&istype(mobloc, /turf))
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.
say("Ai Satsugai!") say("Ai Satsugai!")
var/turf/picked = locate(locx,locy,mobloc.z)
spawn(0) spawn(0)
playsound(loc, "sparks", 50, 1) playsound(loc, "sparks", 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout") anim(mobloc,src,'mob.dmi',,"phaseout")
spawn(0) spawn(0)
for(var/turf/T in getline(mobloc, picked)) for(var/turf/T in getline(mobloc, destination))
spawn(0) spawn(0)
for(var/mob/living/M in T) T.kill_creatures(src)
if(M==src) continue if(T==mobloc||T==destination) 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
spawn(0) spawn(0)
anim(T,src,'mob.dmi',,"phasein") anim(T,src,'mob.dmi',,"phasein")
loc = picked loc = destination
spawn(0) spawn(0)
S.spark_system.start() S.spark_system.start()
@@ -474,8 +372,7 @@ Allows to gib up to five squares in a straight line. Seriously.*/
if(locx>world.maxx) if(locx>world.maxx)
safety = 1 safety = 1
else safety=1 else safety=1
if(!safety&&istype(mobloc, /turf))
if(!safety)
say("Kumo no Shinkiro!") say("Kumo no Shinkiro!")
var/turf/picked = locate(locx,locy,mobloc.z) var/turf/picked = locate(locx,locy,mobloc.z)
spawn(0) 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>." src << "\red The VOID-shift device is malfunctioning, <B>teleportation failed</B>."
else else
src << "\red There are no targets in view." src << "\red There are no targets in view."
return return

View File

@@ -35,6 +35,7 @@ ________________________________________________________________________________
/obj/item/clothing/suit/space/space_ninja/proc/killai(var/mob/living/silicon/ai/A as mob) /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 << "\red Self-destruct protocol dete-- *bzzzzz*"
A << browse(null, "window=hack spideros") A << browse(null, "window=hack spideros")
AI = null
A.death()//Kill A.death()//Kill
A.ghostize()//Turn into ghost A.ghostize()//Turn into ghost
del(AI) del(AI)
@@ -73,7 +74,7 @@ ________________________________________________________________________________
U.bruteloss += 1 U.bruteloss += 1
A = 200 A = 200
cell.charge-=A 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 active=0
if(cell.charge<0) if(cell.charge<0)
if(kamikaze) if(kamikaze)
@@ -91,7 +92,7 @@ ________________________________________________________________________________
set desc = "Initializes the suit for field operation." set desc = "Initializes the suit for field operation."
set category = "Ninja Equip" 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) if(U.mind&&U.mind.special_role=="Space Ninja"&&U:wear_suit==src&&!initialize)
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init
U << "\blue Now initializing..." U << "\blue Now initializing..."
@@ -110,18 +111,18 @@ ________________________________________________________________________________
U << "\red <B>ERROR</B>: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING..." U << "\red <B>ERROR</B>: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING..."
return return
U << "\blue Securing external locking mechanism...\nNeural-net established." U << "\blue Securing external locking mechanism...\nNeural-net established."
U.head:canremove=0 U.head.canremove=0
U.shoes:canremove=0 U.shoes.canremove=0
U.gloves:canremove=0 U.gloves.canremove=0
canremove=0 canremove=0
sleep(40) sleep(40)
U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..." U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..."
sleep(40) sleep(40)
if(U.stat==2||U.health<=0) 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 << "\red <B>FATAL ERROR</B>: 344--93#&&21 BRAIN WAV3 PATT$RN <B>RED</B>\nA-A-AB0RTING..."
U.head:canremove=1 U.head.canremove=1
U.shoes:canremove=1 U.shoes.canremove=1
U.gloves:canremove=1 U.gloves.canremove=1
canremove=1 canremove=1
verbs += /obj/item/clothing/suit/space/space_ninja/proc/init verbs += /obj/item/clothing/suit/space/space_ninja/proc/init
return 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>." U << "\blue Primary system status: <B>ONLINE</B>.\nBackup system status: <B>ONLINE</B>.\nCurrent energy capacity: <B>[cell.charge]</B>."
sleep(40) sleep(40)
U << "\blue All systems operational. Welcome to <B>SpiderOS</B>, [U.real_name]." U << "\blue All systems operational. Welcome to <B>SpiderOS</B>, [U.real_name]."
U.verbs += /mob/proc/ninjashift U.grant_ninja_verbs()
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
verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit
verbs += /obj/item/clothing/suit/space/space_ninja/proc/spideros verbs += /obj/item/clothing/suit/space/space_ninja/proc/spideros
U.gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/drain_wire U.gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/drain_wire
@@ -162,14 +148,14 @@ ________________________________________________________________________________
U.shoes:slowdown-- U.shoes:slowdown--
ntick(U) ntick(U)
else else
if(usr.mind&&usr.mind.special_role=="Space Ninja") if(U.mind&&U.mind.special_role!="Space Ninja")
usr << "\red You do not understand how this suit functions." U << "\red You do not understand how this suit functions."
else if(usr:wear_suit!=src) else if(U.wear_suit!=src)
usr << "\red You must be wearing the suit to use this function." U << "\red You must be wearing the suit to use this function."
else if(initialize) else if(initialize)
usr << "\red The suit is already functioning." U << "\red The suit is already functioning."
else else
usr << "\red You cannot use this function at this time." U << "\red You cannot use this function at this time."
return return
/obj/item/clothing/suit/space/space_ninja/proc/deinit() /obj/item/clothing/suit/space/space_ninja/proc/deinit()
@@ -177,45 +163,27 @@ ________________________________________________________________________________
set desc = "Begins procedure to remove the suit." set desc = "Begins procedure to remove the suit."
set category = "Ninja Equip" set category = "Ninja Equip"
if(affecting!=loc)
return
var/mob/living/carbon/human/U = affecting
if(!initialize) if(!initialize)
usr << "\red The suit is not initialized." U << "\red The suit is not initialized."
return return
if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No")
return return
var/mob/living/carbon/human/U = affecting
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit
U << "\blue Now de-initializing..." U << "\blue Now de-initializing..."
if(kamikaze) if(kamikaze)
U << "\blue Disengaging mode...\n\black<b>CODE NAME</b>: \red <b>KAMIKAZE</b>" U << "\blue Disengaging mode...\n\black<b>CODE NAME</b>: \red <b>KAMIKAZE</b>"
U.verbs -= /mob/proc/ninjaslayer U.remove_kamikaze_verbs()
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
kamikaze = 0 kamikaze = 0
unlock = 0 unlock = 0
U.incorporeal_move = 0 U.incorporeal_move = 0
U.density = 1 U.density = 1
spideros = 0 spideros = 0
sleep(40) sleep(40)
U.verbs -= /mob/proc/ninjashift U.remove_ninja_verbs()
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 << "\blue Logging off, [U:real_name]. Shutting down <B>SpiderOS</B>." U << "\blue Logging off, [U:real_name]. Shutting down <B>SpiderOS</B>."
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/spideros verbs -= /obj/item/clothing/suit/space/space_ninja/proc/spideros
sleep(40) sleep(40)
@@ -233,8 +201,6 @@ ________________________________________________________________________________
U << "\red #2#" U << "\red #2#"
spawn(30) spawn(30)
U << "\red #1#: <B>G00DBYE</B>" U << "\red #1#: <B>G00DBYE</B>"
if(AI)
killai(AI)
U.gib() U.gib()
return return
U << "\blue Disconnecting neural-net interface...\green<B>Success</B>\blue." 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)) if(istype(U.head, /obj/item/clothing/head/helmet/space/space_ninja))
U.head.canremove=1 U.head.canremove=1
if(istype(U.shoes, /obj/item/clothing/shoes/space_ninja)) if(istype(U.shoes, /obj/item/clothing/shoes/space_ninja))
U.shoes:canremove=1 U.shoes.canremove=1
U.shoes:slowdown++ U.shoes:slowdown++
if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)) if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja))
U.gloves.icon_state = "s-ninja" U.gloves.icon_state = "s-ninja"
@@ -419,7 +385,7 @@ ________________________________________________________________________________
var/laws var/laws
dat += "<h4><img src=sos_13.png> AI Control:</h4>" dat += "<h4><img src=sos_13.png> AI Control:</h4>"
var/mob/living/silicon/ai/A = AI 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 += "Stored AI: <b>[A.name]</b><br>"
dat += "System integrity: [(A.health+100)/2]%<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/drain_wire
U.gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled U.gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled
U.update_clothing() U.update_clothing()
U.verbs -= /mob/proc/ninjashift U.grant_kamikaze_verbs()
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.ninjablade() U.ninjablade()
message_admins("\blue [U.key] used KAMIKAZE mode.", 1) message_admins("\blue [U.key] used KAMIKAZE mode.", 1)
else else
@@ -728,17 +679,17 @@ ________________________________________________________________________________
spideros()//Refreshes the screen by calling it again (which replaces current screen with new screen). spideros()//Refreshes the screen by calling it again (which replaces current screen with new screen).
else//If they are not in control. 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. //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. if(isnull(src))//If they AI dies/suit destroyed.
AI << browse(null, "window=hack spideros") A << browse(null, "window=hack spideros")
return 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"]) switch(href_list["choice"])
if("Close") if("Close")
AI << browse(null, "window=hack spideros") A << browse(null, "window=hack spideros")
return return
if("Refresh")//Refresh, goes to the end of the proc. if("Refresh")//Refresh, goes to the end of the proc.
if("Return")//Return 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. 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 cell.charge -= damage
else 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. if("0")//Menus are numbers, see note above. 0 is the hub.
spideros=0 spideros=0
if("1")//Begin normal menus 1-9. if("1")//Begin normal menus 1-9.
@@ -769,13 +720,13 @@ ________________________________________________________________________________
var/t = input(U, "Please enter untraceable message.") as text var/t = input(U, "Please enter untraceable message.") as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if(!t||affecting!=U||!initialize)//Wow, another one of these. Man... if(!t||affecting!=U||!initialize)//Wow, another one of these. Man...
AI << browse(null, "window=hack spideros") A << browse(null, "window=hack spideros")
return return
if(isnull(P)||P.toff)//So it doesn't freak out if the object no-longer exists. 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() ninja_spideros.Click()
return 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) if (!P.silent)
playsound(P.loc, 'twobeep.ogg', 50, 1) playsound(P.loc, 'twobeep.ogg', 50, 1)
for (var/mob/O in hearers(3, P.loc)) for (var/mob/O in hearers(3, P.loc))
@@ -783,54 +734,54 @@ ________________________________________________________________________________
P.overlays = null P.overlays = null
P.overlays += image('pda.dmi', "pda-r") P.overlays += image('pda.dmi', "pda-r")
if("Unlock Kamikaze") 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("Dylovene")
if(!reagents.get_reagent_amount("anti_toxin")) 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 else
reagents.reaction(U, 2) reagents.reaction(U, 2)
reagents.trans_id_to(U, "anti_toxin", transfera) 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." U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Dexalin Plus") if("Dexalin Plus")
if(!reagents.get_reagent_amount("dexalinp")) 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 else
reagents.reaction(U, 2) reagents.reaction(U, 2)
reagents.trans_id_to(U, "dexalinp", transfera) 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." U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Tricordazine") if("Tricordazine")
if(!reagents.get_reagent_amount("tricordrazine")) 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 else
reagents.reaction(U, 2) reagents.reaction(U, 2)
reagents.trans_id_to(U, "tricordrazine", transfera) 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." U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Spacelin") if("Spacelin")
if(!reagents.get_reagent_amount("spaceacillin")) 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 else
reagents.reaction(U, 2) reagents.reaction(U, 2)
reagents.trans_id_to(U, "spaceacillin", transfera) 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." U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Radium") if("Radium")
if((reagents.get_reagent_amount("radium"))<=60)//Special case. If there are only 60 radium units left. 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 else
reagents.reaction(U, 2) reagents.reaction(U, 2)
reagents.trans_id_to(U, "radium", transfera) 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." U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
if("Nutriment") if("Nutriment")
if(!reagents.get_reagent_amount("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 else
reagents.reaction(U, 2) reagents.reaction(U, 2)
reagents.trans_id_to(U, "nutriment", 5) 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." U << "You feel a tiny prick and a sudden rush of substance in to your veins."
ninja_spideros.Click()//Calls spideros for AI. ninja_spideros.Click()//Calls spideros for AI.
return return
@@ -839,19 +790,20 @@ ________________________________________________________________________________
set src in view() set src in view()
..() ..()
if(initialize) if(initialize)
var/mob/living/carbon/human/U = affecting
if(control) 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(!kamikaze)
if(active) if(active)
usr << "The CLOAK-tech device is <B>active</B>." U << "The CLOAK-tech device is <B>active</B>."
else else
usr << "The CLOAK-tech device is <B>inactive</B>." U << "The CLOAK-tech device is <B>inactive</B>."
else else
usr << "\red KAMIKAZE MODE ENGAGED!" U << "\red KAMIKAZE MODE ENGAGED!"
usr << "There are <B>[sbombs]</B> smoke bombs remaining." U << "There are <B>[sbombs]</B> smoke bombs remaining."
usr << "There are <B>[aboost]</B> adrenaline boosters remaining." U << "There are <B>[aboost]</B> adrenaline boosters remaining."
else else
usr << "ERR0R DATAA NoT FOUND 3RROR" U << "ERR0R DATAA NoT FOUND 3RROR"
//GLOVES=================================== //GLOVES===================================
@@ -859,12 +811,14 @@ ________________________________________________________________________________
set name = "Toggle Interaction" set name = "Toggle Interaction"
set desc = "Toggles special interaction on or off." set desc = "Toggles special interaction on or off."
set category = "Ninja Equip" set category = "Ninja Equip"
var/mob/living/carbon/human/U = loc
if(!candrain) if(!candrain)
candrain=1 candrain=1
usr << "You enable special interaction." U << "You enable special interaction."
else else
candrain=0 candrain=0
usr << "You disable special interaction." U << "You disable special interaction."
//DRAINING PROCS START=================================== //DRAINING PROCS START===================================
@@ -874,7 +828,7 @@ ________________________________________________________________________________
set category = "Ninja Equip" set category = "Ninja Equip"
var/obj/cable/attached var/obj/cable/attached
var/mob/living/carbon/human/U = usr var/mob/living/carbon/human/U = loc
if(candrain&&!draining) if(candrain&&!draining)
var/turf/T = U.loc var/turf/T = U.loc
if(isturf(T) && T.is_plating()) 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) /obj/item/clothing/gloves/space_ninja/proc/drain(var/target_type as text, var/target, var/obj/suit, var/obj/gloves)
//Var Initialize //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/suit/space/space_ninja/S = suit
var/obj/item/clothing/gloves/space_ninja/G = gloves var/obj/item/clothing/gloves/space_ninja/G = gloves
@@ -1114,10 +1068,11 @@ ________________________________________________________________________________
set src in view() set src in view()
..() ..()
if(!canremove) if(!canremove)
var/mob/living/carbon/human/U = loc
if(candrain) if(candrain)
usr << "The energy drain mechanism is: <B>active</B>." U << "The energy drain mechanism is: <B>active</B>."
else else
usr << "The energy drain mechanism is: <B>inactive</B>." U << "The energy drain mechanism is: <B>inactive</B>."
//MASK=================================== //MASK===================================
@@ -1129,6 +1084,8 @@ ________________________________________________________________________________
set name = "Toggle Voice" set name = "Toggle Voice"
set desc = "Toggles the voice synthesizer on or off." set desc = "Toggles the voice synthesizer on or off."
set category = "Ninja Equip" 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")) 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") if(vchange=="New Name")
var/chance = rand(1,100) var/chance = rand(1,100)
@@ -1152,20 +1109,20 @@ ________________________________________________________________________________
if(91 to 100)//Small chance of an existing crew name. if(91 to 100)//Small chance of an existing crew name.
var/list/names = new() var/list/names = new()
for(var/mob/living/carbon/human/M in world) 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) names.Add(M)
if(!names.len) if(!names.len)
voice = "Cuban Pete"//Smallest chance to be the man. voice = "Cuban Pete"//Smallest chance to be the man.
else else
var/mob/picked = pick(names) var/mob/picked = pick(names)
voice = picked.real_name voice = picked.real_name
usr << "You are now mimicking <B>[voice]</B>." U << "You are now mimicking <B>[voice]</B>."
else else
if(voice!="Unknown") if(voice!="Unknown")
usr << "You deactivate the voice synthesizer." U << "You deactivate the voice synthesizer."
voice = "Unknown" voice = "Unknown"
else else
usr << "The voice synthesizer is already deactivated." U << "The voice synthesizer is already deactivated."
return return
/obj/item/clothing/mask/gas/voice/space_ninja/proc/switchm() /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 desc = "Switches between Night Vision, Meson, or Thermal vision modes."
set category = "Ninja Equip" set category = "Ninja Equip"
//Have to reset these manually since life.dm is retarded like that. Go figure. //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) switch(mode)
if(1) if(1)
mode=2 mode=2
usr.see_in_dark = 2 U.see_in_dark = 2
usr << "Switching mode to <B>Thermal Scanner</B>." U << "Switching mode to <B>Thermal Scanner</B>."
if(2) if(2)
mode=3 mode=3
usr.see_invisible = 0 U.see_invisible = 0
usr.sight &= ~SEE_MOBS U.sight &= ~SEE_MOBS
usr << "Switching mode to <B>Meson Scanner</B>." U << "Switching mode to <B>Meson Scanner</B>."
if(3) if(3)
mode=1 mode=1
usr.sight &= ~SEE_TURFS U.sight &= ~SEE_TURFS
usr << "Switching mode to <B>Night Vision</B>." U << "Switching mode to <B>Night Vision</B>."
/obj/item/clothing/mask/gas/voice/space_ninja/examine() /obj/item/clothing/mask/gas/voice/space_ninja/examine()
set src in view() set src in view()
..() ..()
var/mode = "Night Vision" var/mode = "Night Vision"
var/voice = "inactive" var/voice = "inactive"
switch(mode) switch(mode)
@@ -1204,7 +1164,7 @@ ________________________________________________________________________________
voice = "inactive" voice = "inactive"
else else
voice = "active" 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>." usr << "Voice mimicking algorithm is set to <B>[voice]</B>."
//ENERGY NET=================================== //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. anchored = 1//Can't drag/grab.
var/health = 25//How much health it has. var/health = 25//How much health it has.
var/mob/living/affecting = null//Who it is currently affecting, if anyone. 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() /obj/effects/energy_net/proc/healthcheck()
if(health <=0) 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") anim(M.loc,M,'mob.dmi',,"phaseout")
M.loc = pick(prisonwarp)//Throw mob in prison. 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. 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. health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running.

View File

@@ -9,18 +9,18 @@ ________________________________________________________________________________
/client/proc/space_ninja() /client/proc/space_ninja()
set category = "Fun" set category = "Fun"
set name = "Spawn Space Ninja" set name = "Spawn Space Ninja"
set desc = "Spawns a space ninja for when you need a teenager with attitude." set desc = "Spawns a space ninja for when you need a teenager with an attitude."
if(!src.authenticated || !src.holder) if(!authenticated || !holder)
src << "Only administrators may use this command." src << "Only administrators may use this command."
return return
if(!ticker.mode)//Apparently, this doesn't actually prevent anything. Huh if(!ticker.mode)
alert("The game hasn't started yet!") alert("The game hasn't started yet!")
return return
if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No") if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No")
return return
TRYAGAIN 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) if(!input)
goto TRYAGAIN goto TRYAGAIN
@@ -38,12 +38,12 @@ ________________________________________________________________________________
new_ninja.create_ninja() 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/mob/dead/observer/G
var/list/candidates = list() var/list/candidates = list()
for(G in world) for(G in world)
if(G.client) if(G.client&&!G.client.holder)
if(((G.client.inactivity/10)/60) <= 5) if(((G.client.inactivity/10)/60) <= 5)
candidates.Add(G) candidates.Add(G)
if(candidates.len) 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) 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.") 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/mob/living/carbon/human/new_ninja = src
var/ninja_title = pick(ninja_titles) var/ninja_title = pick(ninja_titles)
var/ninja_name = pick(ninja_names) 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/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) 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=================================== //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. //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") A << browse(dat,"window=hack spideros;size=400x444;border=1;can_resize=0;can_close=0;can_minimize=0")
//DEBUG=================================== //DEBUG===================================
/* /*

View File

@@ -56,7 +56,9 @@
/datum/game_mode/proc/send_intercept() /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)) if (!istype(traitor_mob))
return return
if (traitor_mob.mind) 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 << "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]).") traitor_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [loc]).")
//Begin code phrase. //Begin code phrase.
traitor_mob << "The Syndicate provided you with the following information on how to identify other agents:" if(!safety)//If they are not a rev. Can be added on to.
if(prob(80)) traitor_mob << "The Syndicate provided you with the following information on how to identify other agents:"
traitor_mob << "\red Code Phrase: \black [syndicate_code_phrase]" if(prob(80))
traitor_mob.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]") traitor_mob << "\red Code Phrase: \black [syndicate_code_phrase]"
else traitor_mob.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code phrase." else
if(prob(80)) traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code phrase."
traitor_mob << "\red Code Response: \black [syndicate_code_response]" if(prob(80))
traitor_mob.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]") traitor_mob << "\red Code Response: \black [syndicate_code_response]"
else traitor_mob.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code response." else
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." 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. //End code phrase.

View File

@@ -58,7 +58,7 @@
rev_obj.find_target_by_role(head_mind.assigned_role) rev_obj.find_target_by_role(head_mind.assigned_role)
rev_mind.objectives += rev_obj 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) equip_revolutionary(rev_mind.current)
update_rev_icons_added(rev_mind) update_rev_icons_added(rev_mind)

View File

@@ -190,6 +190,21 @@
killer:set_zeroth_law(law) killer:set_zeroth_law(law)
killer << "New law: 0. [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() /datum/game_mode/traitor/proc/get_mob_list()
var/list/mobs = list() var/list/mobs = list()
for(var/mob/living/player in world) for(var/mob/living/player in world)

View File

@@ -281,26 +281,37 @@
// src.see_invisible = 15 -- Doesn't work as see_invisible is reset every world cycle. -- Skie // src.see_invisible = 15 -- Doesn't work as see_invisible is reset every world cycle. -- Skie
//The two procs below allow the Chaplain to choose their religion. All it really does is change their bible. //The two procs below allow the Chaplain to choose their religion. All it really does is change their bible.
spawn(0) spawn(0)
var/religion_name = "Imperium" var/religion_name = "Christianity"
var/new_religion = input(src, "You are the Chaplain. Would you like to change your religion? Default is the Imperial Cult.", "Name change", religion_name) var/new_religion = input(src, "You are the Chaplain. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name)
if ((length(new_religion) == 0) || (new_religion == "Imperium")) if ((length(new_religion) == 0) || (new_religion == "Christianity"))
new_religion = religion_name new_religion = religion_name
if (new_religion) if (new_religion)
if (length(new_religion) >= 26) if (length(new_religion) >= 26)
new_religion = copytext(new_religion, 1, 26) new_religion = copytext(new_religion, 1, 26)
new_religion = dd_replacetext(new_religion, ">", "'") new_religion = dd_replacetext(new_religion, ">", "'")
if(new_religion == "Imperium") switch(new_religion)
B.name = "Uplifting Primer" if("Christianity")
else B.name = pick("The Holy Bible","The Dead Sea Scrolls")
B.name = "The Holy Book of [new_religion]" if("Satanism")
B.name = pick("The Unholy Bible","The Necronomicon")
if("Islam")
B.name = "Quaran"
if("Scientology")
B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
if("Chaos")
B.name = "Space Station 13: The Musical"
if("Imperium")
B.name = "Uplifting Primer"
else
B.name = "The Holy Book of [new_religion]"
spawn(1) spawn(1)
var/deity_name = "Emperor" var/deity_name = "Space Jesus"
var/new_deity = input(src, "Would you like to change your deity? Default is the God Emperor of Mankind.", "Name change", deity_name) var/new_deity = input(src, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name)
if ( (length(new_deity) == 0) || (new_deity == "God Emperor of Mankind") ) if ( (length(new_deity) == 0) || (new_deity == "Space Jesus") )
new_deity = deity_name new_deity = deity_name
if(new_deity) if(new_deity)

View File

@@ -1204,4 +1204,20 @@ turf/simulated/floor/proc/update_icon()
else else
new /turf/simulated/floor/vault(locate(i,j,z),type) new /turf/simulated/floor/vault(locate(i,j,z),type)
del(src) del(src)
/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N
//Useful to batch-add creatures to the list.
for(var/mob/living/M in src)
if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone.
spawn(0)
M.gib()
for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged.
spawn(0)
M.take_damage(100, "brute")
for(var/obj/alien/facehugger/M in src)//These really need to be mobs.
spawn(0)
M.death()
for(var/obj/livestock/M in src)
spawn(0)
M.gib()

View File

@@ -2095,6 +2095,22 @@ var/showadminmessages = 1
M:set_zeroth_law(law) M:set_zeroth_law(law)
for(var/mob/living/silicon/O in world) for(var/mob/living/silicon/O in world)
O << "New law: 0. [law]" O << "New law: 0. [law]"
//Begin code phrase.
M << "The Syndicate provided you with the following information on how to identify their agents:"
if(prob(80))
M << "\red Code Phrase: \black [syndicate_code_phrase]"
M.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
else
M << "Unfortunetly, the Syndicate did not provide you with a code phrase."
if(prob(80))
M << "\red Code Response: \black [syndicate_code_response]"
M.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
else
M << "Unfortunetly, the Syndicate did not provide you with a code response."
M << "Use the code words in the order provided, during regular conversation, to identify their agents. Proceed with caution, however, as everyone is a potential foe."
//End code phrase.
if(mode) if(mode)
log_admin("[key_name(usr)] has made [key_name(M)] a traitor.") log_admin("[key_name(usr)] has made [key_name(M)] a traitor.")
message_admins("\blue [key_name_admin(usr)] has made [key_name_admin(M)] a traitor. Objective is: [objective]", 1) message_admins("\blue [key_name_admin(usr)] has made [key_name_admin(M)] a traitor. Objective is: [objective]", 1)

View File

@@ -1,22 +1,34 @@
/*
field_generator power level display
The icon used for the field_generator need to have 'num_power_levels' number of icon states
named 'Field_Gen +p[num]' where 'num' ranges from 1 to 'num_power_levels'
The power level is displayed using overlays. The current displayed power level is stored in 'powerlevel'.
The overlay in use and the powerlevel variable must be kept in sync. A powerlevel equal to 0 means that
no power level overlay is currently in the overlays list.
-Aygar
*/
#define field_generator_max_power 250 #define field_generator_max_power 250
/obj/machinery/field_generator /obj/machinery/field_generator
name = "Field Generator" name = "Field Generator"
desc = "A large thermal battery that projects a high amount of energy when powered." desc = "A large thermal battery that projects a high amount of energy when powered."
icon = 'singularity.dmi' icon = 'field_generator.dmi'
icon_state = "Field_Gen" icon_state = "Field_Gen"
anchored = 0 anchored = 0
density = 1 density = 1
req_access = list(access_engine) req_access = list(access_engine)
use_power = 0 use_power = 0
var var
const/num_power_levels = 15 // Total number of power level icon has
Varedit_start = 0 Varedit_start = 0
Varpower = 0 Varpower = 0
active = 0 active = 0
power = 20 power = 20 // Current amount of power
state = 0 state = 0
warming_up = 0 warming_up = 0
powerlevel = 0 powerlevel = 0 // Current Power level in overlays list
list/obj/machinery/containment_field/fields list/obj/machinery/containment_field/fields
list/obj/machinery/field_generator/connected_gens list/obj/machinery/field_generator/connected_gens
clean_up = 0 clean_up = 0
@@ -24,20 +36,33 @@
update_icon() update_icon()
if (!active) if (!active)
icon_state = "Field_Gen" //Set icon_state has not been set, set to "Field_Gen"
return if (icon_state != "Field_Gen")
var/level = 3 icon_state = "Field_Gen"
switch (power) warming_up = 0
if(0 to 60) else
level = 1 //If necessary update icon_state to correct value
if(61 to 220) if (warming_up && icon_state != "Field_Gen +a[warming_up]")
level = 2 icon_state = "Field_Gen +a[warming_up]"
if(221 to INFINITY)
level = 3 // Power level indicator
level = min(level,warming_up) // Scale % power to % num_power_levels and truncate value
var/level = round(num_power_levels * power / field_generator_max_power)
// Clamp between 0 and num_power_levels for out of range power values
level = between(0, level, num_power_levels)
// Do nothing unless new level is diffrent the powerlevel
if (powerlevel!=level) if (powerlevel!=level)
// If old power overlay exists remove it
if (powerlevel)
// Remove old powerlevel overlay from overlays
overlays -= "Field_Gen +p[powerlevel]"
powerlevel = level powerlevel = level
icon_state = "Field_Gen +a[powerlevel]"
// If new power level exists add it to overlays
if (powerlevel)
overlays += "Field_Gen +p[powerlevel]"
New() New()
@@ -48,17 +73,19 @@
process() process()
if(src.Varedit_start == 1) if(Varedit_start == 1)
if(src.active == 0) if(active == 0)
src.active = 1 active = 1
src.state = 2 state = 2
src.power = field_generator_max_power power = field_generator_max_power
src.anchored = 1 anchored = 1
src.warming_up = 3 warming_up = 3
turn_on() turn_on()
Varedit_start = 0 Varedit_start = 0
if(src.active == 2) if(src.active == 2)
calc_power() calc_power()
else
update_icon()
return return
@@ -170,16 +197,15 @@
proc proc
turn_off() turn_off()
src.active = 0 active = 0
spawn(1) spawn(1)
src.cleanup() src.cleanup()
update_icon() update_icon()
turn_on() turn_on()
src.active = 1 active = 1
warming_up = 1 warming_up = 1
powerlevel = 0
spawn(1) spawn(1)
while (warming_up<3 && active) while (warming_up<3 && active)
sleep(50) sleep(50)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -448,7 +448,6 @@
#include "code\game\mecha\combat\gygax.dm" #include "code\game\mecha\combat\gygax.dm"
#include "code\game\mecha\combat\honker.dm" #include "code\game\mecha\combat\honker.dm"
#include "code\game\mecha\combat\marauder.dm" #include "code\game\mecha\combat\marauder.dm"
#include "code\game\mecha\combat\phazon.dm"
#include "code\game\mecha\equipment\mecha_equipment.dm" #include "code\game\mecha\equipment\mecha_equipment.dm"
#include "code\game\mecha\equipment\tools\tools.dm" #include "code\game\mecha\equipment\tools\tools.dm"
#include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\equipment\weapons\weapons.dm"