#Added mechs as chargables for ninjas.
#Private lockers can now be sliced open with the ninja sword. #Added a SpiderOS verb to the ninja suit when initialized. It acts as a lite PDA with some unique features. If I had more time, I would revise the existing PDA system to follow the format of SpiderOS which would make the former run a lot faster. #Added an adrenaline boost ability for the ninja suit. It will near instantly remove paralysis/stun/etc but has only three uses. #Added ninja stars ability. Ranged projectiles, the user randomly picks a target from nearby living enemies. Projectile itself is wip. #Maximum charge for the suit is 30000, or 300%. #More names for ninja name gen. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1451 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -364,9 +364,16 @@
|
|||||||
radiation_protection = 0.75
|
radiation_protection = 0.75
|
||||||
var/affecting = null
|
var/affecting = null
|
||||||
var/active = 0
|
var/active = 0
|
||||||
var/charge = 10000.0//The ninja suit does not have a top capacity. It's like a portable power sink.
|
var/charge = 9000.0//Starts at 90% of normal capacity.
|
||||||
|
var/maxcharge = 30000.0//I want the suit upgradable if the ninja is able to find the parts but for now this'll do.
|
||||||
var/initialize = 0
|
var/initialize = 0
|
||||||
var/sbombs = 10.0
|
var/spideros = 1//Mode of SpiderOS. 1=main menu||2=medical screen||3=atmos check||4=notes/misc
|
||||||
|
var/sbombs = 10.0//Number of starting ninja smoke bombs.
|
||||||
|
var/aboost = 3.0//Number of adrenaline boosts.
|
||||||
|
var/chem1 = 3.0//Dylovene/Anti Tox
|
||||||
|
var/chem2 = 3.0//Dexalin Plus
|
||||||
|
var/chem3 = 3.0//Tricordazine
|
||||||
|
var/chem4 = 3.0//Spacelin
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/pirate
|
/obj/item/clothing/suit/space/pirate
|
||||||
name = "pirate coat"
|
name = "pirate coat"
|
||||||
|
|||||||
@@ -299,7 +299,7 @@
|
|||||||
|
|
||||||
/obj/mecha/attack_hand(mob/user as mob)
|
/obj/mecha/attack_hand(mob/user as mob)
|
||||||
src.log_message("Attack by hand/paw. Attacker - [user].",1)
|
src.log_message("Attack by hand/paw. Attacker - [user].",1)
|
||||||
/* if(ishuman(user))
|
if(ishuman(user))
|
||||||
var/mob/living/carbon/human/U = user
|
var/mob/living/carbon/human/U = user
|
||||||
if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining)
|
if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining)
|
||||||
var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit
|
var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit
|
||||||
@@ -309,13 +309,16 @@
|
|||||||
G.draining = 1
|
G.draining = 1
|
||||||
if(get_charge())
|
if(get_charge())
|
||||||
var/drain = 0
|
var/drain = 0
|
||||||
|
var/maxcapacity = 0
|
||||||
var/totaldrain = 0
|
var/totaldrain = 0
|
||||||
while(cell.charge>0)
|
while(cell.charge>0&&!maxcapacity)
|
||||||
drain = rand(100,300)
|
drain = rand(100,300)
|
||||||
if(cell.charge<drain)
|
if(cell.charge<drain)
|
||||||
drain = cell.charge
|
drain = cell.charge
|
||||||
if (do_after(U,10)) <--- gotta figure out why this isn't being called properly.
|
if(S.charge+drain>S.maxcharge)
|
||||||
world << "PING"
|
drain = S.maxcharge-S.charge
|
||||||
|
maxcapacity = 1
|
||||||
|
if (call(/proc/do_after)(U,10))//The mecha do_after proc was being called here instead of the mob one.
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
playsound(src.loc, "sparks", 50, 1)
|
playsound(src.loc, "sparks", 50, 1)
|
||||||
cell.charge-=drain
|
cell.charge-=drain
|
||||||
@@ -327,7 +330,7 @@
|
|||||||
return
|
return
|
||||||
else
|
else
|
||||||
U << "\red The exosuit's battery has run dry of power. You must find another source."
|
U << "\red The exosuit's battery has run dry of power. You must find another source."
|
||||||
return*/
|
return
|
||||||
if (user.mutations & 8 && !prob(src.deflect_chance))
|
if (user.mutations & 8 && !prob(src.deflect_chance))
|
||||||
src.take_damage(15)
|
src.take_damage(15)
|
||||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||||
|
|||||||
@@ -39,15 +39,22 @@
|
|||||||
src.desc = "Owned by [I.registered]."
|
src.desc = "Owned by [I.registered]."
|
||||||
else
|
else
|
||||||
user << "\red Access Denied"
|
user << "\red Access Denied"
|
||||||
else if(istype(W, /obj/item/weapon/card/emag) && !src.broken)
|
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/blade)) && !src.broken)
|
||||||
src.broken = 1
|
broken = 1
|
||||||
src.locked = 0
|
locked = 0
|
||||||
src.desc = "It appears to be broken."
|
desc = "It appears to be broken."
|
||||||
src.icon = 'closet.dmi'
|
icon_state = src.icon_broken
|
||||||
src.icon_state = "securebroken"
|
if(istype(W, /obj/item/weapon/blade))
|
||||||
for(var/mob/O in viewers(user, 3))
|
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
||||||
if ((O.client && !( O.blinded )))
|
spark_system.set_up(5, 0, src.loc)
|
||||||
O << text("\blue The locker has been broken by [user] with an electromagnetic card!")
|
spark_system.start()
|
||||||
|
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||||
|
playsound(src.loc, "sparks", 50, 1)
|
||||||
|
for(var/mob/O in viewers(user, 3))
|
||||||
|
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||||
|
else
|
||||||
|
for(var/mob/O in viewers(user, 3))
|
||||||
|
O.show_message(text("\blue The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
|
||||||
else
|
else
|
||||||
user << "\red Access Denied"
|
user << "\red Access Denied"
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -371,16 +371,20 @@ NINJA MASK
|
|||||||
U.verbs += /mob/proc/ninjashift
|
U.verbs += /mob/proc/ninjashift
|
||||||
U.verbs += /mob/proc/ninjajaunt
|
U.verbs += /mob/proc/ninjajaunt
|
||||||
U.verbs += /mob/proc/ninjasmoke
|
U.verbs += /mob/proc/ninjasmoke
|
||||||
|
U.verbs += /mob/proc/ninjaboost
|
||||||
U.verbs += /mob/proc/ninjapulse
|
U.verbs += /mob/proc/ninjapulse
|
||||||
U.verbs += /mob/proc/ninjablade
|
U.verbs += /mob/proc/ninjablade
|
||||||
|
U.verbs += /mob/proc/ninjastar
|
||||||
U.mind.special_verbs += /mob/proc/ninjashift
|
U.mind.special_verbs += /mob/proc/ninjashift
|
||||||
U.mind.special_verbs += /mob/proc/ninjajaunt
|
U.mind.special_verbs += /mob/proc/ninjajaunt
|
||||||
U.mind.special_verbs += /mob/proc/ninjasmoke
|
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/ninjapulse
|
||||||
U.mind.special_verbs += /mob/proc/ninjablade
|
U.mind.special_verbs += /mob/proc/ninjablade
|
||||||
|
U.mind.special_verbs += /mob/proc/ninjastar
|
||||||
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init
|
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init
|
||||||
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/toggle
|
verbs += /obj/item/clothing/suit/space/space_ninja/proc/spideros
|
||||||
U.gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/toggled
|
U.gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/toggled
|
||||||
initialize=1
|
initialize=1
|
||||||
affecting=U
|
affecting=U
|
||||||
@@ -416,21 +420,25 @@ NINJA MASK
|
|||||||
U.verbs -= /mob/proc/ninjashift
|
U.verbs -= /mob/proc/ninjashift
|
||||||
U.verbs -= /mob/proc/ninjajaunt
|
U.verbs -= /mob/proc/ninjajaunt
|
||||||
U.verbs -= /mob/proc/ninjasmoke
|
U.verbs -= /mob/proc/ninjasmoke
|
||||||
|
U.verbs -= /mob/proc/ninjaboost
|
||||||
U.verbs -= /mob/proc/ninjapulse
|
U.verbs -= /mob/proc/ninjapulse
|
||||||
U.verbs -= /mob/proc/ninjablade
|
U.verbs -= /mob/proc/ninjablade
|
||||||
|
U.verbs -= /mob/proc/ninjastar
|
||||||
U.mind.special_verbs -= /mob/proc/ninjashift
|
U.mind.special_verbs -= /mob/proc/ninjashift
|
||||||
U.mind.special_verbs -= /mob/proc/ninjajaunt
|
U.mind.special_verbs -= /mob/proc/ninjajaunt
|
||||||
U.mind.special_verbs -= /mob/proc/ninjasmoke
|
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/ninjapulse
|
||||||
U.mind.special_verbs -= /mob/proc/ninjablade
|
U.mind.special_verbs -= /mob/proc/ninjablade
|
||||||
|
U.mind.special_verbs -= /mob/proc/ninjastar
|
||||||
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
|
||||||
sleep(40)
|
sleep(40)
|
||||||
U << "\blue Primary system status: <B>OFFLINE</B>.\nBackup system status: <B>OFFLINE</B>."
|
U << "\blue Primary system status: <B>OFFLINE</B>.\nBackup system status: <B>OFFLINE</B>."
|
||||||
sleep(40)
|
sleep(40)
|
||||||
U << "\blue VOID-shift device status: <B>OFFLINE</B>.\nCLOAK-tech device status: <B>OFFLINE</B>."
|
U << "\blue VOID-shift device status: <B>OFFLINE</B>.\nCLOAK-tech device status: <B>OFFLINE</B>."
|
||||||
if(active)//Shutdowns stealth.
|
if(active)//Shutdowns stealth.
|
||||||
active=0
|
active=0
|
||||||
verbs -= /obj/item/clothing/suit/space/space_ninja/proc/toggle
|
|
||||||
sleep(40)
|
sleep(40)
|
||||||
if(U.stat||U.health<=0)
|
if(U.stat||U.health<=0)
|
||||||
U << "\red <B>FATAL ERROR</B>: 412--GG##&77 BRAIN WAV3 PATT$RN <B>RED</B>\nI-I-INITIATING S-SELf DeStrCuCCCT%$#@@!!$^#!..."
|
U << "\red <B>FATAL ERROR</B>: 412--GG##&77 BRAIN WAV3 PATT$RN <B>RED</B>\nI-I-INITIATING S-SELf DeStrCuCCCT%$#@@!!$^#!..."
|
||||||
@@ -464,29 +472,193 @@ NINJA MASK
|
|||||||
slowdown=1
|
slowdown=1
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/toggle()
|
/obj/item/clothing/suit/space/space_ninja/proc/spideros()
|
||||||
set name = "Toggle Stealth"
|
set name = "Display SpiderOS"
|
||||||
set desc = "Toggles the internal CLOAK-tech on or off."
|
set desc = "Utilize built-in computer system."
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
|
|
||||||
if(usr:wear_suit!=src||!src.initialize)
|
var/mob/living/carbon/human/U = usr
|
||||||
usr << "\red Your suit must be worn and active to use this function."
|
var/dat = "<html><head><title>SpiderOS</title></head><body bgcolor=\"#3D5B43\" text=\"#DB2929\"><style>a, a:link, a:visited, a:active, a:hover { color: #DB2929; }img {border-style:none;}</style>"
|
||||||
return
|
if(spideros==1)
|
||||||
if(active)
|
dat += "<a href='byond://?src=\ref[src];choice=1'><img src=sos_7.png> Refresh</a>"
|
||||||
spawn(0)
|
dat += " | <a href='byond://?src=\ref[src];choice=0'><img src=sos_8.png> Close</a>"
|
||||||
anim(usr.loc,'mob.dmi',usr,"uncloak")
|
|
||||||
active=0
|
|
||||||
usr << "\blue You are now visible."
|
|
||||||
for(var/mob/O in oviewers(usr, null))
|
|
||||||
O << "[usr.name] appears from thin air!"
|
|
||||||
|
|
||||||
else
|
else
|
||||||
spawn(0)
|
dat += "<a href='byond://?src=\ref[src];choice=1'><img src=sos_7.png> Refresh</a>"
|
||||||
anim(usr.loc,'mob.dmi',usr,"cloak")
|
dat += " | <a href='byond://?src=\ref[src];choice=2'><img src=sos_1.png> Main Menu</a>"
|
||||||
active=1
|
dat += " | <a href='byond://?src=\ref[src];choice=0'><img src=sos_8.png> Close</a>"
|
||||||
usr << "\blue You are now invisible to normal detection."
|
dat += "<br>"
|
||||||
for(var/mob/O in oviewers(usr, null))
|
dat += "<h2 ALIGN=CENTER>SpiderOS v.1.34</h2>"
|
||||||
O << "[usr.name] vanishes into thin air!"
|
dat += "Welcome, <b>[U.real_name]</b>.<br>"
|
||||||
|
dat += "<br>"
|
||||||
|
dat += "<img src=sos_10.png> Current Time: [round(world.time / 36000)+12]:[(world.time / 600 % 60) < 10 ? add_zero(world.time / 600 % 60, 1) : world.time / 600 % 60]<br>"
|
||||||
|
dat += "<img src=sos_9.png> Battery Life: [round(charge/100)]%<br>"
|
||||||
|
dat += "<img src=sos_11.png> Smoke Bombs: [sbombs]<br>"
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
switch(spideros)//Should be easy to add new functions or windows.
|
||||||
|
if(1)
|
||||||
|
dat += "<h4><img src=sos_1.png> Available Functions:</h4>"
|
||||||
|
dat += "<ul>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=3'><img src=sos_4.png> Toggle Stealth: [active == 1 ? "Disable" : "Enable"]</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=4'><img src=sos_3.png> Medical Screen</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=5'><img src=sos_5.png> Atmos Scan</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=6'><img src=sos_12.png> Messenger</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=7'><img src=sos_6.png> Other</a></li>"
|
||||||
|
dat += "</ul>"
|
||||||
|
if(2)
|
||||||
|
dat += "<h4><img src=sos_3.png> Medical Report:</h4>"
|
||||||
|
if(U.dna)
|
||||||
|
dat += "<b>Fingerprints</b>: <i>[md5(U.dna.uni_identity)]</i><br>"
|
||||||
|
dat += "<b>Unique identity</b>: <i>[U.dna.unique_enzymes]</i><br>"
|
||||||
|
dat += "<h4>Overall Status: [U.stat > 1 ? "dead" : "[U.health]% healthy"]</h4>"
|
||||||
|
dat += "Oxygen loss: [U.oxyloss]"
|
||||||
|
dat += " | Toxin levels: [U.toxloss]<br>"
|
||||||
|
dat += "Burn severity: [U.fireloss]"
|
||||||
|
dat += " | Brute trauma: [U.bruteloss]<br>"
|
||||||
|
dat += "Body Temperature: [U.bodytemperature-T0C]°C ([U.bodytemperature*1.8-459.67]°F)<br>"
|
||||||
|
if(U.virus)
|
||||||
|
dat += "Warning Virus Detected. Name: [U.virus.name].Type: [U.virus.spread]. Stage: [U.virus.stage]/[U.virus.max_stages]. Possible Cure: [U.virus.cure].<br>"
|
||||||
|
dat += "<ul>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=Dylovene'><img src=sos_2.png> Inject Dylovene: [chem1] left</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=Dexalin Plus'><img src=sos_2.png> Inject Dexalin Plus: [chem2] left</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=Tricordazine'><img src=sos_2.png> Inject Tricordazine: [chem3] left</a></li>"
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=Spacelin'><img src=sos_2.png> Inject Spacelin: [chem4] left</a></li>"
|
||||||
|
dat += "</ul>"
|
||||||
|
if(3)
|
||||||
|
dat += "<h4><img src=sos_5.png>Atmospheric Scan:</h4>"
|
||||||
|
var/turf/T = get_turf_or_move(U.loc)
|
||||||
|
if (isnull(T))
|
||||||
|
dat += "Unable to obtain a reading.<br>"
|
||||||
|
else
|
||||||
|
var/datum/gas_mixture/environment = T.return_air()
|
||||||
|
|
||||||
|
var/pressure = environment.return_pressure()
|
||||||
|
var/total_moles = environment.total_moles()
|
||||||
|
|
||||||
|
dat += "Air Pressure: [round(pressure,0.1)] kPa"
|
||||||
|
|
||||||
|
if (total_moles)
|
||||||
|
var/o2_level = environment.oxygen/total_moles
|
||||||
|
var/n2_level = environment.nitrogen/total_moles
|
||||||
|
var/co2_level = environment.carbon_dioxide/total_moles
|
||||||
|
var/plasma_level = environment.toxins/total_moles
|
||||||
|
var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level)
|
||||||
|
dat += "<ul>"
|
||||||
|
dat += "<li>Nitrogen: [round(n2_level*100)]%</li>"
|
||||||
|
dat += "<li>Oxygen: [round(o2_level*100)]%</li>"
|
||||||
|
dat += "<li>Carbon Dioxide: [round(co2_level*100)]%</li>"
|
||||||
|
dat += "<li>Plasma: [round(plasma_level*100)]%</li>"
|
||||||
|
dat += "</ul>"
|
||||||
|
if(unknown_level > 0.01)
|
||||||
|
dat += "OTHER: [round(unknown_level)]%<br>"
|
||||||
|
|
||||||
|
dat += "Temperature: [round(environment.temperature-T0C)]°C"
|
||||||
|
if(4)
|
||||||
|
dat += "<h4><img src=sos_12.png> Anonymous Messenger:</h4>"//Anonymous because the receiver will not know the sender's identity.
|
||||||
|
dat += "<h4><img src=sos_6.png> Detected PDAs:</h4>"
|
||||||
|
dat += "<ul>"
|
||||||
|
var/count = 0
|
||||||
|
for (var/obj/item/device/pda/P in world)
|
||||||
|
if (!P.owner||P.toff)
|
||||||
|
continue
|
||||||
|
dat += "<li><a href='byond://?src=\ref[src];choice=\ref[P]'>[P]</a>"
|
||||||
|
dat += "</li>"
|
||||||
|
count++
|
||||||
|
dat += "</ul>"
|
||||||
|
if (count == 0)
|
||||||
|
dat += "None detected.<br>"
|
||||||
|
if(5)
|
||||||
|
dat += "<h4><img src=sos_6.png> Other Functions:</h4>"
|
||||||
|
|
||||||
|
dat += "</body></html>"
|
||||||
|
|
||||||
|
U << browse(dat,"window=spideros;size=400x444;border=1;can_resize=0;can_close=0;can_minimize=0")
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/space_ninja/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
var/mob/living/carbon/human/U = usr
|
||||||
|
if(U.stat||U.wear_suit!=src||!initialize)//Check to make sure the guy is wearing the suit after clicking and it's on.
|
||||||
|
U << "\red Your suit must be worn and active to use this function."
|
||||||
|
U << browse(null, "window=spideros")//Closes the window.
|
||||||
|
return
|
||||||
|
|
||||||
|
switch(href_list["choice"])
|
||||||
|
if("0")
|
||||||
|
U << browse(null, "window=spideros")
|
||||||
|
return
|
||||||
|
if("1")//Refresh, goes to the end of the proc.
|
||||||
|
if("2")//Back to main menu
|
||||||
|
spideros=1
|
||||||
|
if("3")
|
||||||
|
if(active)
|
||||||
|
spawn(0)
|
||||||
|
anim(usr.loc,'mob.dmi',usr,"uncloak")
|
||||||
|
active=0
|
||||||
|
U << "\blue You are now visible."
|
||||||
|
for(var/mob/O in oviewers(usr, null))
|
||||||
|
O << "[usr.name] appears from thin air!"
|
||||||
|
else
|
||||||
|
spawn(0)
|
||||||
|
anim(usr.loc,'mob.dmi',usr,"cloak")
|
||||||
|
active=1
|
||||||
|
U << "\blue You are now invisible to normal detection."
|
||||||
|
for(var/mob/O in oviewers(usr, null))
|
||||||
|
O << "[usr.name] vanishes into thin air!"
|
||||||
|
if("4")
|
||||||
|
spideros=2
|
||||||
|
if("5")
|
||||||
|
spideros=3
|
||||||
|
if("6")
|
||||||
|
spideros=4
|
||||||
|
if("7")
|
||||||
|
spideros=5
|
||||||
|
if("Dylovene")//These names really don't matter for specific functions but it's easier to use descriptive names.
|
||||||
|
if(chem1<=0)
|
||||||
|
U << "\red Error: the suit cannot perform this function."
|
||||||
|
else
|
||||||
|
U.reagents.add_reagent("anti_toxin", 15)
|
||||||
|
chem1--
|
||||||
|
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
|
||||||
|
if("Dexalin Plus")
|
||||||
|
if(chem2<=0)
|
||||||
|
U << "\red Error: the suit cannot perform this function."
|
||||||
|
else
|
||||||
|
U.reagents.add_reagent("dexalinp", 15)
|
||||||
|
chem2--
|
||||||
|
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
|
||||||
|
if("Tricordazine")
|
||||||
|
if(chem3<=0)
|
||||||
|
U << "\red Error: the suit cannot perform this function."
|
||||||
|
else
|
||||||
|
U.reagents.add_reagent("tricordrazine", 15)
|
||||||
|
chem3--
|
||||||
|
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
|
||||||
|
if("Spacelin")
|
||||||
|
if(chem4<=0)
|
||||||
|
U << "\red Error: the suit cannot perform this function."
|
||||||
|
else
|
||||||
|
U.reagents.add_reagent("spaceacillin", 15)
|
||||||
|
chem4--
|
||||||
|
U << "You feel a tiny prick and a sudden rush of liquid in to your veins."
|
||||||
|
else//Leaving this for the messenger because it's an awesome solution.
|
||||||
|
var/obj/item/device/pda/P = locate(href_list["choice"])
|
||||||
|
var/t = input(U, "Please enter untraceable message.") as text
|
||||||
|
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||||
|
if(!t||U.stat||U.wear_suit!=src||!initialize)//Wow, another one of these. Man...
|
||||||
|
return
|
||||||
|
if(isnull(P)||P.toff)//So it doesn't freak out if the object no-longer exists.
|
||||||
|
U << "\red Error: unable to deliver message."
|
||||||
|
spideros()
|
||||||
|
return
|
||||||
|
P.tnote += "<i><b>← From unknown source:</b></i><br>[t]<br>"
|
||||||
|
if (!P.silent)
|
||||||
|
playsound(P.loc, 'twobeep.ogg', 50, 1)
|
||||||
|
for (var/mob/O in hearers(3, P.loc))
|
||||||
|
O.show_message(text("\icon[P] *[P.ttone]*"))
|
||||||
|
P.overlays = null
|
||||||
|
P.overlays += image('pda.dmi', "pda-r")
|
||||||
|
spideros()//Refreshes the screen.
|
||||||
|
return
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/examine()
|
/obj/item/clothing/suit/space/space_ninja/examine()
|
||||||
set src in view()
|
set src in view()
|
||||||
@@ -498,6 +670,7 @@ NINJA MASK
|
|||||||
else
|
else
|
||||||
usr << "The CLOAK-tech device is <B>inactive</B>."
|
usr << "The CLOAK-tech device is <B>inactive</B>."
|
||||||
usr << "There are <B>[src.sbombs]</B> smoke bombs remaining."
|
usr << "There are <B>[src.sbombs]</B> smoke bombs remaining."
|
||||||
|
usr << "There are <B>[src.aboost]</B> adrenaline injectors remaining."
|
||||||
|
|
||||||
/obj/item/clothing/gloves/space_ninja/proc/toggled()
|
/obj/item/clothing/gloves/space_ninja/proc/toggled()
|
||||||
set name = "Toggle Drain"
|
set name = "Toggle Drain"
|
||||||
|
|||||||
@@ -168,9 +168,10 @@
|
|||||||
user << "\red It appears to be broken."
|
user << "\red It appears to be broken."
|
||||||
return
|
return
|
||||||
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/blade)) && !src.broken)
|
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/blade)) && !src.broken)
|
||||||
src.broken = 1
|
broken = 1
|
||||||
src.locked = 0
|
locked = 0
|
||||||
src.icon_state = src.icon_broken
|
desc = "It appears to be broken."
|
||||||
|
icon_state = src.icon_broken
|
||||||
if(istype(W, /obj/item/weapon/blade))
|
if(istype(W, /obj/item/weapon/blade))
|
||||||
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
||||||
spark_system.set_up(5, 0, src.loc)
|
spark_system.set_up(5, 0, src.loc)
|
||||||
|
|||||||
@@ -183,6 +183,8 @@ Useful for copy pasta since I'm lazy.*/
|
|||||||
if(!ticker.mode)//Apparently, this doesn't actually prevent anything. Huh
|
if(!ticker.mode)//Apparently, this doesn't actually prevent anything. Huh
|
||||||
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")
|
||||||
|
return
|
||||||
|
|
||||||
TRYAGAIN
|
TRYAGAIN
|
||||||
var/input = input(usr, "Please specify which mission the space ninja shall undertake.", "Specify Mission", "")
|
var/input = input(usr, "Please specify which mission the space ninja shall undertake.", "Specify Mission", "")
|
||||||
@@ -431,7 +433,7 @@ Useful for copy pasta since I'm lazy.*/
|
|||||||
set desc = "Create a focused beam of energy in your active hand."
|
set desc = "Create a focused beam of energy in your active hand."
|
||||||
set category = "Ninja"
|
set category = "Ninja"
|
||||||
|
|
||||||
var/C = 10
|
var/C = 50
|
||||||
if(!ninjacost(C))
|
if(!ninjacost(C))
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -442,6 +444,65 @@ Useful for copy pasta since I'm lazy.*/
|
|||||||
src.put_in_hand(W)
|
src.put_in_hand(W)
|
||||||
|
|
||||||
src:wear_suit:charge-=(C*10)
|
src:wear_suit:charge-=(C*10)
|
||||||
/*
|
|
||||||
/mob/proc/ninjastar(var/mob/living/M in oview())
|
//Shoot Ninja Stars
|
||||||
*/
|
//Shoots ninja stars at random people.
|
||||||
|
//This could be a lot better but I'm too tired atm.
|
||||||
|
/mob/proc/ninjastar()
|
||||||
|
set name = "Energy Star"
|
||||||
|
set desc = "Launches an energy star at a random living target."
|
||||||
|
set category = "Ninja"
|
||||||
|
|
||||||
|
var/C = 30
|
||||||
|
if(!ninjacost(C))
|
||||||
|
return
|
||||||
|
|
||||||
|
var/mob/living/target//The point here is to pick a random, living mob in oview to shoot stuff at.
|
||||||
|
var/targets[]//So yo can shoot while yo throw dawg
|
||||||
|
targets = new()
|
||||||
|
for(var/mob/living/M in oview(7))
|
||||||
|
if(M.stat==2) continue//Doesn't target corpses.
|
||||||
|
targets.Add(M)
|
||||||
|
if(targets.len)
|
||||||
|
target=pick(targets)
|
||||||
|
else
|
||||||
|
return
|
||||||
|
var/turf/curloc = src.loc
|
||||||
|
var/atom/targloc = get_turf(target)
|
||||||
|
if (!targloc || !istype(targloc, /turf) || !curloc)
|
||||||
|
return
|
||||||
|
if (targloc == curloc)
|
||||||
|
return
|
||||||
|
var/obj/bullet/neurodart/A = new /obj/bullet/neurodart(usr.loc)
|
||||||
|
A.current = curloc
|
||||||
|
A.yo = targloc.y - curloc.y
|
||||||
|
A.xo = targloc.x - curloc.x
|
||||||
|
src:wear_suit:charge-=(C*10)
|
||||||
|
A.process()
|
||||||
|
return
|
||||||
|
|
||||||
|
//Adrenaline Boost
|
||||||
|
//Wakes the user so they are able to do their thing. Also injects a decent dose of radium.
|
||||||
|
//Movement impairing would indicate drugs and the like
|
||||||
|
/mob/proc/ninjaboost()
|
||||||
|
set name = "Adrenaline Boost"
|
||||||
|
set desc = "Inject a secret chemical that will counteract all movement-impairing effects."
|
||||||
|
set category = "Ninja"
|
||||||
|
|
||||||
|
if(src.stat==2)
|
||||||
|
src << "\red You must be <b>alive</b> to do this."
|
||||||
|
return
|
||||||
|
if(src:wear_suit:aboost<=0)
|
||||||
|
src << "\red You do not have any more adrenaline boosters."
|
||||||
|
return
|
||||||
|
|
||||||
|
src.paralysis = 0
|
||||||
|
src.stunned = 0
|
||||||
|
src.weakened = 0
|
||||||
|
spawn(10)
|
||||||
|
src.say("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!")
|
||||||
|
spawn(70)
|
||||||
|
src.reagents.add_reagent("radium", 15)
|
||||||
|
src << "red You are beginning to feal the after-effects of the injection."
|
||||||
|
|
||||||
|
src:wear_suit:aboost--
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
if (src.mind.special_role == "Changeling")
|
if (src.mind.special_role == "Changeling")
|
||||||
stat("Chemical Storage", src.chem_charges)
|
stat("Chemical Storage", src.chem_charges)
|
||||||
if (istype(src.wear_suit, /obj/item/clothing/suit/space/space_ninja)&&src.wear_suit:initialize)
|
if (istype(src.wear_suit, /obj/item/clothing/suit/space/space_ninja)&&src.wear_suit:initialize)
|
||||||
stat("Energy Charge", abs(src.wear_suit:charge/100))
|
stat("Energy Charge", round(src.wear_suit:charge/100))
|
||||||
|
|
||||||
/mob/living/carbon/human/bullet_act(flag, A as obj, var/datum/organ/external/def_zone)
|
/mob/living/carbon/human/bullet_act(flag, A as obj, var/datum/organ/external/def_zone)
|
||||||
var/shielded = 0
|
var/shielded = 0
|
||||||
|
|||||||
@@ -603,11 +603,15 @@
|
|||||||
G.draining = 1
|
G.draining = 1
|
||||||
if(cell&&cell.charge)
|
if(cell&&cell.charge)
|
||||||
var/drain = 0
|
var/drain = 0
|
||||||
|
var/maxcapacity = 0
|
||||||
var/totaldrain = 0
|
var/totaldrain = 0
|
||||||
while(cell.charge>0)
|
while(cell.charge>0&&!maxcapacity)
|
||||||
drain = rand(100,300)
|
drain = rand(100,300)
|
||||||
if(cell.charge<drain)
|
if(cell.charge<drain)
|
||||||
drain = cell.charge
|
drain = cell.charge
|
||||||
|
if(S.charge+drain>S.maxcharge)
|
||||||
|
drain = S.maxcharge-S.charge
|
||||||
|
maxcapacity = 1
|
||||||
if (do_after(U,10))
|
if (do_after(U,10))
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
playsound(src.loc, "sparks", 50, 1)
|
playsound(src.loc, "sparks", 50, 1)
|
||||||
|
|||||||
@@ -73,6 +73,19 @@ mob/new_player
|
|||||||
src << browse_rsc('pda_scanner.png')
|
src << browse_rsc('pda_scanner.png')
|
||||||
src << browse_rsc('pda_signaler.png')
|
src << browse_rsc('pda_signaler.png')
|
||||||
src << browse_rsc('pda_status.png')
|
src << browse_rsc('pda_status.png')
|
||||||
|
//Loads icons for SpiderOS into client
|
||||||
|
src << browse_rsc('sos_1.png')
|
||||||
|
src << browse_rsc('sos_2.png')
|
||||||
|
src << browse_rsc('sos_3.png')
|
||||||
|
src << browse_rsc('sos_4.png')
|
||||||
|
src << browse_rsc('sos_5.png')
|
||||||
|
src << browse_rsc('sos_6.png')
|
||||||
|
src << browse_rsc('sos_7.png')
|
||||||
|
src << browse_rsc('sos_8.png')
|
||||||
|
src << browse_rsc('sos_9.png')
|
||||||
|
src << browse_rsc('sos_10.png')
|
||||||
|
src << browse_rsc('sos_11.png')
|
||||||
|
src << browse_rsc('sos_12.png')
|
||||||
|
|
||||||
//End PDA Resource Initialisation =====================================================>
|
//End PDA Resource Initialisation =====================================================>
|
||||||
|
|
||||||
|
|||||||
@@ -459,14 +459,18 @@
|
|||||||
user << "\blue Now charging battery..."
|
user << "\blue Now charging battery..."
|
||||||
G.draining = 1
|
G.draining = 1
|
||||||
if(cell&&cell.charge)
|
if(cell&&cell.charge)
|
||||||
var/drain = 0
|
var/drain = 0//To drain from battery.
|
||||||
var/totaldrain = 0
|
var/maxcapacity = 0//Safety check for full battery.
|
||||||
|
var/totaldrain = 0//Total energy drained.
|
||||||
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
||||||
spark_system.set_up(5, 0, src.loc)
|
spark_system.set_up(5, 0, src.loc)
|
||||||
while(cell.charge>0)
|
while(cell.charge>0&&!maxcapacity)
|
||||||
drain = rand(100,300)
|
drain = rand(100,300)
|
||||||
if(cell.charge<drain)
|
if(cell.charge<drain)
|
||||||
drain = cell.charge
|
drain = cell.charge
|
||||||
|
if(S.charge+drain>S.maxcharge)
|
||||||
|
drain = S.maxcharge-S.charge
|
||||||
|
maxcapacity = 1//Reached maximum battery capacity.
|
||||||
if (do_after(U,10))
|
if (do_after(U,10))
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
playsound(src.loc, "sparks", 50, 1)
|
playsound(src.loc, "sparks", 50, 1)
|
||||||
|
|||||||
@@ -72,10 +72,13 @@
|
|||||||
if(charge)
|
if(charge)
|
||||||
user << "\blue Now charging battery..."
|
user << "\blue Now charging battery..."
|
||||||
G.draining = 1
|
G.draining = 1
|
||||||
if (do_after(user,50))
|
if (do_after(user,30))
|
||||||
U << "\blue Gained <B>[charge]</B> energy from the cell."
|
U << "\blue Gained <B>[charge]</B> energy from the cell."
|
||||||
|
if(S.charge+charge>S.maxcharge)
|
||||||
|
S.charge=S.maxcharge
|
||||||
|
else
|
||||||
|
S.charge+=charge
|
||||||
charge = 0
|
charge = 0
|
||||||
S.charge+=charge
|
|
||||||
G.draining = 0
|
G.draining = 0
|
||||||
corrupt()
|
corrupt()
|
||||||
updateicon()
|
updateicon()
|
||||||
|
|||||||
@@ -192,13 +192,17 @@
|
|||||||
G.draining = 1
|
G.draining = 1
|
||||||
if(charge)
|
if(charge)
|
||||||
var/drain = 0
|
var/drain = 0
|
||||||
|
var/maxcapacity = 0
|
||||||
var/totaldrain = 0
|
var/totaldrain = 0
|
||||||
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
|
||||||
spark_system.set_up(5, 0, src.loc)
|
spark_system.set_up(5, 0, src.loc)
|
||||||
while(charge>0)
|
while(charge>0&&!maxcapacity)
|
||||||
drain = rand(100,300)
|
drain = rand(100,300)
|
||||||
if(charge<drain)
|
if(charge<drain)
|
||||||
drain = charge
|
drain = charge
|
||||||
|
if(S.charge+drain>S.maxcharge)
|
||||||
|
drain = S.maxcharge-S.charge
|
||||||
|
maxcapacity = 1
|
||||||
if (do_after(U,10))
|
if (do_after(U,10))
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
playsound(src.loc, "sparks", 50, 1)
|
playsound(src.loc, "sparks", 50, 1)
|
||||||
|
|||||||
@@ -40,3 +40,4 @@ Bro
|
|||||||
Fox
|
Fox
|
||||||
Null
|
Null
|
||||||
Raiden
|
Raiden
|
||||||
|
Samurai
|
||||||
@@ -39,3 +39,7 @@ Gray
|
|||||||
Solid
|
Solid
|
||||||
Liquid
|
Liquid
|
||||||
Solidus
|
Solidus
|
||||||
|
Steel
|
||||||
|
Nickel
|
||||||
|
Silver
|
||||||
|
Singing
|
||||||
BIN
icons/spideros_icons/sos_1.png
Normal file
|
After Width: | Height: | Size: 271 B |
BIN
icons/spideros_icons/sos_10.png
Normal file
|
After Width: | Height: | Size: 243 B |
BIN
icons/spideros_icons/sos_11.png
Normal file
|
After Width: | Height: | Size: 226 B |
BIN
icons/spideros_icons/sos_12.png
Normal file
|
After Width: | Height: | Size: 234 B |
BIN
icons/spideros_icons/sos_2.png
Normal file
|
After Width: | Height: | Size: 249 B |
BIN
icons/spideros_icons/sos_3.png
Normal file
|
After Width: | Height: | Size: 226 B |
BIN
icons/spideros_icons/sos_4.png
Normal file
|
After Width: | Height: | Size: 260 B |
BIN
icons/spideros_icons/sos_5.png
Normal file
|
After Width: | Height: | Size: 246 B |
BIN
icons/spideros_icons/sos_6.png
Normal file
|
After Width: | Height: | Size: 241 B |
BIN
icons/spideros_icons/sos_7.png
Normal file
|
After Width: | Height: | Size: 242 B |
BIN
icons/spideros_icons/sos_8.png
Normal file
|
After Width: | Height: | Size: 242 B |
BIN
icons/spideros_icons/sos_9.png
Normal file
|
After Width: | Height: | Size: 247 B |
@@ -121,6 +121,7 @@
|
|||||||
#define FILE_DIR "icons/obj/machines"
|
#define FILE_DIR "icons/obj/machines"
|
||||||
#define FILE_DIR "icons/obj/pipes"
|
#define FILE_DIR "icons/obj/pipes"
|
||||||
#define FILE_DIR "icons/pda_icons"
|
#define FILE_DIR "icons/pda_icons"
|
||||||
|
#define FILE_DIR "icons/spideros_icons"
|
||||||
#define FILE_DIR "icons/Testing"
|
#define FILE_DIR "icons/Testing"
|
||||||
#define FILE_DIR "icons/turf"
|
#define FILE_DIR "icons/turf"
|
||||||
#define FILE_DIR "interface"
|
#define FILE_DIR "interface"
|
||||||
@@ -635,8 +636,8 @@
|
|||||||
#include "code\modules\mob\dead\observer\login.dm"
|
#include "code\modules\mob\dead\observer\login.dm"
|
||||||
#include "code\modules\mob\dead\observer\observer.dm"
|
#include "code\modules\mob\dead\observer\observer.dm"
|
||||||
#include "code\modules\mob\dead\observer\say.dm"
|
#include "code\modules\mob\dead\observer\say.dm"
|
||||||
#include "code\modules\mob\living\say.dm"
|
|
||||||
#include "code\modules\mob\living\living.dm"
|
#include "code\modules\mob\living\living.dm"
|
||||||
|
#include "code\modules\mob\living\say.dm"
|
||||||
#include "code\modules\mob\living\carbon\carbon.dm"
|
#include "code\modules\mob\living\carbon\carbon.dm"
|
||||||
#include "code\modules\mob\living\carbon\alien\say.dm"
|
#include "code\modules\mob\living\carbon\alien\say.dm"
|
||||||
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
|
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
|
||||||
|
|||||||