mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-15 12:43:13 +00:00
#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:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>← From [AI]:</b></i><br>[t]<br>"//Oh ai, u so silly
|
P.tnote += "<i><b>← 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.
|
||||||
|
|
||||||
|
|||||||
@@ -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===================================
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
BIN
icons/obj/machines/field_generator.dmi
Normal file
BIN
icons/obj/machines/field_generator.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user