This commit is contained in:
ZomgPonies
2014-02-06 03:23:43 -05:00
8 changed files with 10096 additions and 10059 deletions
+36 -5
View File
@@ -275,6 +275,7 @@ client
if(isobj(D))
body += "<option value='?_src_=vars;delall=\ref[D]'>Delete all of type</option>"
if(isobj(D) || ismob(D) || isturf(D))
body += "<option value='?_src_=vars;addreagent=\ref[D]'>Add reagent</option>"
body += "<option value='?_src_=vars;explode=\ref[D]'>Trigger explosion</option>"
body += "<option value='?_src_=vars;emp=\ref[D]'>Trigger EM pulse</option>"
@@ -612,6 +613,36 @@ client
log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
message_admins("\blue [key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
else if(href_list["addreagent"]) /* Made on /TG/, credit to them. */
if(!check_rights(0)) return
var/atom/A = locate(href_list["addreagent"])
if(!A.reagents)
var/amount = input(usr, "Specify the reagent size of [A]", "Set Reagent Size", 50) as num
if(amount)
A.create_reagents(amount)
if(A.reagents)
var/list/reagent_options = list()
for(var/r_id in chemical_reagents_list)
var/datum/reagent/R = chemical_reagents_list[r_id]
reagent_options[R.name] = r_id
if(reagent_options.len)
reagent_options = sortAssoc(reagent_options)
reagent_options.Insert(1, "CANCEL")
var/chosen = input(usr, "Choose a reagent to add.", "Choose a reagent.") in reagent_options
var/chosen_id = reagent_options[chosen]
if(chosen_id)
var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", A.reagents.maximum_volume) as num
if(amount)
A.reagents.add_reagent(chosen_id, amount)
log_admin("[key_name(usr)] has added [amount] units of [chosen] to \the [A]")
message_admins("\blue [key_name(usr)] has added [amount] units of [chosen] to \the [A]")
else if(href_list["explode"])
if(!check_rights(R_DEBUG|R_FUN)) return
@@ -813,9 +844,9 @@ client
else if(href_list["addverb"])
if(!check_rights(R_DEBUG)) return
var/mob/living/H = locate(href_list["addverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living"
return
@@ -831,7 +862,7 @@ client
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
possibleverbs -= H.verbs
possibleverbs += "Cancel" // ...And one for the bottom
var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs
if(!H)
usr << "Mob doesn't exist anymore"
@@ -840,7 +871,7 @@ client
return
else
H.verbs += verb
else if(href_list["remverb"])
if(!check_rights(R_DEBUG)) return
@@ -858,7 +889,7 @@ client
else
H.verbs -= verb
else if(href_list["regenerateicons"])
if(!check_rights(0)) return
+28 -28
View File
@@ -238,38 +238,38 @@ Must right click on a mob to activate.*/
var/C = 2500
if(!ninjacost(C,1)&&iscarbon(M)) // Nets now cost 8,000
var/mob/living/carbon/human/U = affecting
//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.
//if(M)//DEBUG
if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net.
for(var/turf/T in getline(U.loc, M.loc))
if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy.
U << "You may not use an energy net through solid obstacles!"
return
spawn(0)
U.Beam(M,"n_beam",,15)
M.anchored = 1//Anchors them so they can't move.
var/obj/effect/stop/S
S = new /obj/effect/stop
S.victim = M
S.loc = M.loc
if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net.
for(var/turf/T in getline(U.loc, M.loc))
if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy.
U << "You may not use an energy net through solid obstacles!"
return
spawn(0)
U.Beam(M,"n_beam",,15)
M.anchored = 1//Anchors them so they can't move.
var/obj/effect/stop/S
S = new /obj/effect/stop
S.victim = M
S.loc = M.loc
var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc)
E.layer = M.layer+1//To have it appear one layer above the mob.
for(var/mob/O in viewers(U, 3))
O.show_message(text("\red [] caught [] with an energy net!", U, M), 1)
E.affecting = M
E.master = U
spawn(0)//Parallel processing.
E.process(M)
cell.charge-=(C)
var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc)
E.layer = M.layer+1//To have it appear one layer above the mob.
for(var/mob/O in viewers(U, 3))
O.show_message(text("\red [] caught [] with an energy net!", U, M), 1)
E.affecting = M
E.master = U
spawn(0)//Parallel processing.
E.process(M)
cell.charge-=(C)
else
U << "They are already trapped inside an energy net."
else
U << "They are already trapped inside an energy net."
//else
//U << "They will bring no honor to your Clan!"
U << "They will bring no honor to your Clan!"
return
//=======//ADRENALINE BOOST//=======//
/*Wakes the user so they are able to do their thing. Also injects a decent dose of radium.
/*Wakes the user so they are able to do their thing. Also injects a decent dose of uranium.
Movement impairing would indicate drugs and the like.*/
/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost()
set name = "Adrenaline Boost"
@@ -280,7 +280,7 @@ Movement impairing would indicate drugs and the like.*/
if(!ninjacost(,3))//Have to make sure stat is not counted for this ability.
var/mob/living/carbon/human/U = affecting
//Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly.
//For now, adrenaline boosters ARE the miracle injection. Well, radium, really.
//For now, adrenaline boosters ARE the miracle injection. Well, uranium, really.
U.SetParalysis(0)
U.SetStunned(0)
U.SetWeakened(0)
@@ -297,7 +297,7 @@ Movement impairing would indicate drugs and the like.*/
U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"))
spawn(70)
reagents.reaction(U, 2)
reagents.trans_id_to(U, "radium", a_transfer)
reagents.trans_id_to(U, "uranium", a_transfer)
U << "\red You are beginning to feel the after-effect of the injection."
a_boost--
s_coold = 3
@@ -32,11 +32,11 @@ ________________________________________________________________________________
stored_research += new T(src)
var/reagent_amount//reagent initialize
for(var/reagent_id in reagent_list)
reagent_amount += reagent_id == "radium" ? r_maxamount+(a_boost*a_transfer) : r_maxamount//AI can inject radium directly.
reagent_amount += reagent_id == "uranium" ? r_maxamount+(a_boost*a_transfer) : r_maxamount//AI can inject uranium directly.
reagents = new(reagent_amount)
reagents.my_atom = src
for(var/reagent_id in reagent_list)
reagent_id == "radium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account radium used for adrenaline boosting.
reagent_id == "uranium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account uranium used for adrenaline boosting.
cell = new/obj/item/weapon/cell/high//The suit should *always* have a battery because so many things rely on it.
cell.charge = 9000//Starting charge should not be higher than maximum charge. It leads to problems with recharging.
@@ -320,9 +320,9 @@ ________________________________________________________________________________
dat += "Warning: Virus Detected. Name: [D.name].Type: [D.spread]. Stage: [D.stage]/[D.max_stages]. Possible Cure: [D.cure].<br>"
dat += "<ul>"
for(var/datum/reagent/R in reagents.reagent_list)
if(R.id=="radium"&&s_control)//Can only directly inject radium when AI is in control.
if(R.id=="uranium"&&s_control)//Can only directly inject uranium when AI is in control.
continue
dat += "<li><a href='byond://?src=\ref[src];choice=Inject;name=[R.name];tag=[R.id]'><img src=sos_2.png> Inject [R.name]: [(reagents.get_reagent_amount(R.id)-(R.id=="radium"?(a_boost*a_transfer):0))/(R.id=="nutriment"?5:a_transfer)] left</a></li>"
dat += "<li><a href='byond://?src=\ref[src];choice=Inject;name=[R.name];tag=[R.id]'><img src=sos_2.png> Inject [R.name]: [(reagents.get_reagent_amount(R.id)-(R.id=="uranium"?(a_boost*a_transfer):0))/(R.id=="nutriment"?5:a_transfer)] left</a></li>"
dat += "</ul>"
if(1)
dat += "<h4><img src=sos_5.png> Atmospheric Scan:</h4>"//Headers don't need breaks. They are automatically placed.
@@ -414,7 +414,7 @@ ________________________________________________________________________________
<li>*<b>EM Pulse</b> (<i>1000E</i>) is a highly useful ability that will create an electromagnetic shockwave around the ninja, disabling technology whenever possible. If used properly it can render a security force effectively useless. Of course, getting beat up with a toolbox is not accounted for.</li>
<li>*<b>Energy Star</b> (<i>500E</i>) is a ninja star made of green energy AND coated in poison. It works by picking a random living target within range and can be spammed to great effect in incapacitating foes. Just remember that the poison used is also used by the Xeno Hivemind (and will have no effect on them).</li>
<li>*<b>Energy Net</b> (<i>2000E</i>) is a non-lethal solution to incapacitating humanoids. The net is made of non-harmful phase energy and will halt movement as long as it remains in effect--it can be destroyed. If the net is not destroyed, after a certain time it will teleport the target to a holding facility for the Spider Clan and then vanish. You will be notified if the net fails or succeeds in capturing a target in this manner. Combine with energy stars or stripping to ensure success. Abduction never looked this leet.</li>
<li>*<b>Adrenaline Boost</b> (<i>1 E. Boost/3</i>) recovers the user from stun, weakness, and paralysis. Also injects 20 units of radium into the bloodstream.</li>
<li>*<b>Adrenaline Boost</b> (<i>1 E. Boost/3</i>) recovers the user from stun, weakness, and paralysis. Also injects 20 units of uranium into the bloodstream.</li>
<li>*<b>Smoke Bomb</b> (<i>1 Sm.Bomb/10</i>) is a weak but potentially useful ability. It creates harmful smoke and can be used in tandem with other powers to confuse enemies.</li>
<li>*<b>???</b>: unleash the <b>True Ultimate Power!</b></li>
<h4>IMPORTANT:</h4>
@@ -573,7 +573,7 @@ ________________________________________________________________________________
L << "\icon[P] <b>Message from [!s_control?(A):"an unknown source"], </b>\"[t]\" (<i>Unable to Reply</i>)"
if("Inject")
if( (href_list["tag"]=="radium"? (reagents.get_reagent_amount("radium"))<=(a_boost*a_transfer) : !reagents.get_reagent_amount(href_list["tag"])) )//Special case for radium. If there are only a_boost*a_transfer radium units left.
if( (href_list["tag"]=="uranium"? (reagents.get_reagent_amount("uranium"))<=(a_boost*a_transfer) : !reagents.get_reagent_amount(href_list["tag"])) )//Special case for uranium. If there are only a_boost*a_transfer uranium units left.
display_to << "\red Error: the suit cannot perform this function. Out of [href_list["name"]]."
else
reagents.reaction(U, 2)
@@ -846,9 +846,9 @@ ________________________________________________________________________________
var/total_reagent_transfer//Keep track of this stuff.
for(var/reagent_id in reagent_list)
var/datum/reagent/R = I.reagents.has_reagent(reagent_id)//Mostly to pull up the name of the reagent after calculating. Also easier to use than writing long proc paths.
if(R&&reagents.get_reagent_amount(reagent_id)<r_maxamount+(reagent_id == "radium"?(a_boost*a_transfer):0)&&R.volume>=a_transfer)//Radium is always special.
if(R&&reagents.get_reagent_amount(reagent_id)<r_maxamount+(reagent_id == "uranium"?(a_boost*a_transfer):0)&&R.volume>=a_transfer)//Uranium is always special.
//Here we determine how much reagent will actually transfer if there is enough to transfer or there is a need of transfer. Minimum of max amount available (using a_transfer) or amount needed.
var/amount_to_transfer = min( (r_maxamount+(reagent_id == "radium"?(a_boost*a_transfer):0)-reagents.get_reagent_amount(reagent_id)) ,(round(R.volume/a_transfer))*a_transfer)//In the end here, we round the amount available, then multiply it again.
var/amount_to_transfer = min( (r_maxamount+(reagent_id == "uranium"?(a_boost*a_transfer):0)-reagents.get_reagent_amount(reagent_id)) ,(round(R.volume/a_transfer))*a_transfer)//In the end here, we round the amount available, then multiply it again.
R.volume -= amount_to_transfer//Remove from reagent volume. Don't want to delete the reagent now since we need to perserve the name.
reagents.add_reagent(reagent_id, amount_to_transfer)//Add to suit. Reactions are not important.
total_reagent_transfer += amount_to_transfer//Add to total reagent trans.
@@ -29,7 +29,8 @@ var/specops_shuttle_timeleft = 0
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN\""//Initial message shown.
if(announcer)
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
announcer.autosay(message, "A.L.I.C.E.", 144.3)
announcer.autosay(message, "A.L.I.C.E.", 144.1)
while(specops_shuttle_time - world.timeofday > 0)
var/ticksleft = specops_shuttle_time - world.timeofday
@@ -45,7 +46,7 @@ var/specops_shuttle_timeleft = 0
message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\""
if(rounded_time_left==0)
message = "\"ALERT: TAKEOFF\""
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
announcer.autosay(message, "A.L.I.C.E.", )
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
@@ -104,9 +105,10 @@ var/specops_shuttle_timeleft = 0
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH\""//Initial message shown.
if(announcer)
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
// message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
// announcer.autosay(message, "A.L.I.C.E.", "Response Team")
announcer.autosay(message, "A.L.I.C.E.", 144.3)
announcer.autosay(message, "A.L.I.C.E.", 144.1)
message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
announcer.autosay(message, "A.L.I.C.E.", 144.1)
while(specops_shuttle_time - world.timeofday > 0)
var/ticksleft = specops_shuttle_time - world.timeofday
@@ -122,7 +124,8 @@ var/specops_shuttle_timeleft = 0
message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\""
if(rounded_time_left==0)
message = "\"ALERT: TAKEOFF\""
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
announcer.autosay(message, "A.L.I.C.E.", 144.3)
announcer.autosay(message, "A.L.I.C.E.", 144.1)
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
@@ -160,11 +163,11 @@ var/specops_shuttle_timeleft = 0
var/spawn_marauder[] = new()
for(var/obj/effect/landmark/L in world)
if(L.name == "Marauder Entry")
spawn_marauder.Add(L)
spawn_marauder.Add(L.loc)
for(var/obj/effect/landmark/L in world)
if(L.name == "Marauder Exit")
var/obj/effect/portal/P = new(L.loc)
P.invisibility = 101//So it is not seen by anyone.
//P.invisibility = 101//So it is not seen by anyone.
P.failchance = 0//So it has no fail chance when teleporting.
P.target = pick(spawn_marauder)//Where the marauder will arrive.
spawn_marauder.Remove(P.target)
+2
View File
@@ -326,6 +326,8 @@ proc/trigger_armed_response_team(var/force = 0)
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += list(access_cent_general, access_cent_living, access_cent_storage)
if (leader_selected)
W.access += access_cent_teleporter
equip_to_slot_or_del(W, slot_wear_id)
return 1
+1 -1
View File
@@ -23,7 +23,7 @@
var/mob/living/carbon/affecting = null//The wearer.
var/obj/item/weapon/cell/cell//Starts out with a high-capacity cell using New().
var/datum/effect/effect/system/spark_spread/spark_system//To create sparks.
var/reagent_list[] = list("tricordrazine","dexalinp","spaceacillin","anti_toxin","nutriment","radium","hyronalin")//The reagents ids which are added to the suit at New().
var/reagent_list[] = list("tricordrazine","dexalinp","spaceacillin","anti_toxin","nutriment","uranium","hyronalin")//The reagents ids which are added to the suit at New().
var/stored_research[]//For stealing station research.
var/obj/item/weapon/disk/tech_disk/t_disk//To copy design onto disk.
+8 -3
View File
@@ -109,11 +109,16 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if(prob(15))
Paralyse(rand(1,3))
var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]"
src << "\red You feel very [word]"
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
oxyloss += 5
toxloss += 3
if(!pale)
pale = 1
update_body()
if(oxyloss > 20)
eye_blurry += 6
oxyloss += 12
if(prob(15))
Paralyse(rand(1,3))
var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]"
if(0 to BLOOD_VOLUME_SURVIVE)