mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-22 16:12:36 +00:00
Ninjas are now a random event. They may appear in most game modes after about an hour, with an assigned objective list.
Fixed aliens :a talking while dead. Disabled hand-tele on clown-planet z-level since people were still finding ways to abuse it. PDA menu will close properly if detomatrix fails and explodes own PDA. Late joiners are now added to minds. It's now possible to assassinate them, and so on, as an objective. Added a few more objectives (capture, steal brain of, protect, and download research) and new possible items to steal (also fixed admin-added steal objectives). Mostly focused on ninjas but admins can give them to regular traitors. Only research downloading is outright impossible for regular traitors (they must wear a ninja suit). Added a few revisions to mind/objective datums and a few other things. The game should now report any extra antagonists for most round types, excluding AI malfunction. Added two new words to station_name.dm. Other misc changes. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1698 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -153,68 +153,58 @@ datum/mind
|
|||||||
memory = new_memo
|
memory = new_memo
|
||||||
|
|
||||||
else if (href_list["obj_edit"] || href_list["obj_add"])
|
else if (href_list["obj_edit"] || href_list["obj_add"])
|
||||||
var/datum/objective/objective = null
|
var/datum/objective/objective
|
||||||
var/objective_pos = null
|
var/objective_pos
|
||||||
var/def_value = null
|
var/def_value
|
||||||
|
|
||||||
if (href_list["obj_edit"])
|
if (href_list["obj_edit"])
|
||||||
objective = locate(href_list["obj_edit"])
|
objective = locate(href_list["obj_edit"])
|
||||||
if (!objective) return
|
if (!objective) return
|
||||||
objective_pos = objectives.Find(objective)
|
objective_pos = objectives.Find(objective)
|
||||||
|
|
||||||
if (istype(objective, /datum/objective/assassinate))
|
//Text strings are easy to manipulate. Revised for simplicity.
|
||||||
def_value = "assassinate"
|
var/temp_obj_type = "[objective.type]"//Convert path into a text string.
|
||||||
else if (istype(objective, /datum/objective/hijack))
|
def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword.
|
||||||
def_value = "hijack"
|
if(!def_value)//If it's a custom objective, it will be an empty string.
|
||||||
else if (istype(objective, /datum/objective/escape))
|
|
||||||
def_value = "escape"
|
|
||||||
else if (istype(objective, /datum/objective/survive))
|
|
||||||
def_value = "survive"
|
|
||||||
else if (istype(objective, /datum/objective/steal))
|
|
||||||
def_value = "steal"
|
|
||||||
else if (istype(objective, /datum/objective/nuclear))
|
|
||||||
def_value = "nuclear"
|
|
||||||
else if (istype(objective, /datum/objective/absorb))
|
|
||||||
def_value = "absorb"
|
|
||||||
else if (istype(objective, /datum/objective))
|
|
||||||
def_value = "custom"
|
def_value = "custom"
|
||||||
// TODO: cult objectives
|
|
||||||
//else if (istype(objective, /datum/objective/eldergod))
|
|
||||||
// def_value = "eldergod"
|
|
||||||
//else if (istype(objective, /datum/objective/survivecult))
|
|
||||||
// def_value = "survivecult"
|
|
||||||
//else if (istype(objective, /datum/objective/sacrifice))
|
|
||||||
// def_value = "sacrifice"
|
|
||||||
|
|
||||||
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "hijack", "escape", "survive", "steal", "nuclear", "absorb", "custom")
|
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom")
|
||||||
if (!new_obj_type) return
|
if (!new_obj_type) return
|
||||||
|
|
||||||
var/datum/objective/new_objective = null
|
var/datum/objective/new_objective = null
|
||||||
|
|
||||||
switch (new_obj_type)
|
switch (new_obj_type)
|
||||||
if ("assassinate")
|
if ("assassinate","protect","debrain")
|
||||||
|
//To determine what to name the objective in explanation text.
|
||||||
|
var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter.
|
||||||
|
var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text.
|
||||||
|
var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string.
|
||||||
|
|
||||||
var/list/possible_targets = list("Free objective")
|
var/list/possible_targets = list("Free objective")
|
||||||
for(var/datum/mind/possible_target in ticker.minds)
|
for(var/datum/mind/possible_target in ticker.minds)
|
||||||
if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
|
if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
|
||||||
possible_targets += possible_target.current
|
possible_targets += possible_target.current
|
||||||
|
|
||||||
var/mob/def_target = null
|
var/mob/def_target = null
|
||||||
if (istype(objective, /datum/objective/assassinate) && objective:target)
|
var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain)
|
||||||
|
if (objective&&(objective.type in objective_list) && objective:target)
|
||||||
def_target = objective:target.current
|
def_target = objective:target.current
|
||||||
|
|
||||||
var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
|
var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
|
||||||
if (!new_target) return
|
if (!new_target) return
|
||||||
|
|
||||||
|
var/objective_path = text2path("/datum/objective/[new_obj_type]")
|
||||||
if (new_target == "Free objective")
|
if (new_target == "Free objective")
|
||||||
new_objective = new /datum/objective/assassinate
|
new_objective = new objective_path
|
||||||
new_objective.owner = src
|
new_objective.owner = src
|
||||||
new_objective:target = null
|
new_objective:target = null
|
||||||
new_objective.explanation_text = "Free objective"
|
new_objective.explanation_text = "Free objective"
|
||||||
else
|
else
|
||||||
new_objective = new /datum/objective/assassinate
|
new_objective = new objective_path
|
||||||
new_objective.owner = src
|
new_objective.owner = src
|
||||||
new_objective:target = new_target:mind
|
new_objective:target = new_target:mind
|
||||||
new_objective.explanation_text = "Assassinate [new_target:real_name], the [new_target:mind:assigned_role]."
|
//Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
|
||||||
|
new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]."
|
||||||
|
|
||||||
if ("hijack")
|
if ("hijack")
|
||||||
new_objective = new /datum/objective/hijack
|
new_objective = new /datum/objective/hijack
|
||||||
@@ -228,6 +218,10 @@ datum/mind
|
|||||||
new_objective = new /datum/objective/survive
|
new_objective = new /datum/objective/survive
|
||||||
new_objective.owner = src
|
new_objective.owner = src
|
||||||
|
|
||||||
|
if ("nuclear")
|
||||||
|
new_objective = new /datum/objective/nuclear
|
||||||
|
new_objective.owner = src
|
||||||
|
|
||||||
if ("steal")
|
if ("steal")
|
||||||
if (!istype(objective, /datum/objective/steal))
|
if (!istype(objective, /datum/objective/steal))
|
||||||
new_objective = new /datum/objective/steal
|
new_objective = new /datum/objective/steal
|
||||||
@@ -238,22 +232,27 @@ datum/mind
|
|||||||
if (!steal.select_target())
|
if (!steal.select_target())
|
||||||
return
|
return
|
||||||
|
|
||||||
if ("nuclear")
|
if("download","capture","absorb")
|
||||||
new_objective = new /datum/objective/nuclear
|
var/def_num
|
||||||
new_objective.owner = src
|
if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]"))
|
||||||
|
def_num = objective.target_amount
|
||||||
|
|
||||||
if ("absorb")
|
var/target_number = input("Input target number:", "Objective", def_num) as num|null
|
||||||
var/def_num = null
|
if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist.
|
||||||
if (istype(objective, /datum/objective/absorb))
|
|
||||||
def_num = objective:num_to_eat
|
|
||||||
|
|
||||||
var/num_to_eat = input("Number to eat:", "Objective", def_num) as num|null
|
|
||||||
if (isnull(num_to_eat))
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
switch(new_obj_type)
|
||||||
|
if("download")
|
||||||
|
new_objective = new /datum/objective/download
|
||||||
|
new_objective.explanation_text = "Download [target_number] research levels."
|
||||||
|
if("capture")
|
||||||
|
new_objective = new /datum/objective/capture
|
||||||
|
new_objective.explanation_text = "Accumulate [target_number] capture points."
|
||||||
|
if("absorb")
|
||||||
new_objective = new /datum/objective/absorb
|
new_objective = new /datum/objective/absorb
|
||||||
|
new_objective.explanation_text = "Absorb [target_number] compatible genomes."
|
||||||
new_objective.owner = src
|
new_objective.owner = src
|
||||||
new_objective:num_to_eat = num_to_eat
|
new_objective.target_amount = target_number
|
||||||
new_objective.explanation_text = "Absorb [num_to_eat] compatible genomes."
|
|
||||||
|
|
||||||
if ("custom")
|
if ("custom")
|
||||||
var/expl = input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null
|
var/expl = input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null
|
||||||
|
|||||||
@@ -9,12 +9,12 @@
|
|||||||
name += " "
|
name += " "
|
||||||
|
|
||||||
// Prefix
|
// Prefix
|
||||||
name += pick("", "Dorf", "Alium", "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World", "Mime", "Honk", "Rogue", "Pony", "MacRagge", "Ultrameens", "Safety", "Paranoia", "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East", "South", "Slant-ways", "Widdershins", "Rimward", "Expensive", "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork", "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist","Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Touhou", "Capitalist", "Communist", "Bear", "Beard", "Derp", "Space", "Star", "Moon", "System", "Mining", "Neckbeard", "Research", "Supply", "Military", "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", "Robot")
|
name += pick("", "Dorf", "Alium", "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World", "Mime", "Honk", "Rogue", "Pony", "MacRagge", "Ultrameens", "Safety", "Paranoia", "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East", "South", "Slant-ways", "Widdershins", "Rimward", "Expensive", "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork", "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist","Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Touhou", "Capitalist", "Communist", "Bear", "Beard", "Derp", "Space", "Star", "Moon", "System", "Mining", "Neckbeard", "Research", "Supply", "Military", "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", "Robot", "Gryphon")
|
||||||
if (name)
|
if (name)
|
||||||
name += " "
|
name += " "
|
||||||
|
|
||||||
// Suffix
|
// Suffix
|
||||||
name += pick("Station", "Fortress", "Frontier", "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk", "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb", "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive", "Complex", "Base", "Facility", "Depot", "Outpost", "Installation", "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform", "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", "Fortification", "Colony", "Planet-Cracker")
|
name += pick("Station", "Fortress", "Frontier", "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk", "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb", "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive", "Complex", "Base", "Facility", "Depot", "Outpost", "Installation", "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform", "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", "Fortification", "Colony", "Planet-Cracker", "Roost")
|
||||||
name += " "
|
name += " "
|
||||||
|
|
||||||
// ID Number
|
// ID Number
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
|
|
||||||
var/datum/objective/absorb/absorb_objective = new
|
var/datum/objective/absorb/absorb_objective = new
|
||||||
absorb_objective.owner = changeling
|
absorb_objective.owner = changeling
|
||||||
absorb_objective.gen_num_to_eat()
|
absorb_objective.gen_amount_goal()
|
||||||
changeling.objectives += absorb_objective
|
changeling.objectives += absorb_objective
|
||||||
|
|
||||||
var/datum/objective/assassinate/kill_objective = new
|
var/datum/objective/assassinate/kill_objective = new
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
var/datum/objective/absorb/absorb_objective = new
|
var/datum/objective/absorb/absorb_objective = new
|
||||||
absorb_objective.owner = changeling
|
absorb_objective.owner = changeling
|
||||||
absorb_objective.gen_num_to_eat()
|
absorb_objective.gen_amount_goal()
|
||||||
changeling.objectives += absorb_objective
|
changeling.objectives += absorb_objective
|
||||||
|
|
||||||
var/datum/objective/steal/steal_objective = new
|
var/datum/objective/steal/steal_objective = new
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
|
|
||||||
var/datum/objective/absorb/absorb_objective = new
|
var/datum/objective/absorb/absorb_objective = new
|
||||||
absorb_objective.owner = changeling
|
absorb_objective.owner = changeling
|
||||||
absorb_objective.gen_num_to_eat()
|
absorb_objective.gen_amount_goal()
|
||||||
changeling.objectives += absorb_objective
|
changeling.objectives += absorb_objective
|
||||||
|
|
||||||
var/datum/objective/assassinate/kill_objective = new
|
var/datum/objective/assassinate/kill_objective = new
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
/proc/event()
|
/proc/event()
|
||||||
event = 1
|
event = 1
|
||||||
|
|
||||||
switch(pick(1,2,4,5,6,7,8,9,10,11))
|
switch(rand(1,11))
|
||||||
if(1)
|
if(1)
|
||||||
command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert")
|
command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert")
|
||||||
world << sound('meteors.ogg')
|
world << sound('meteors.ogg')
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
var/obj/bhole/bh = new /obj/bhole( T.loc, 30 )
|
var/obj/bhole/bh = new /obj/bhole( T.loc, 30 )
|
||||||
spawn(rand(50, 300))
|
spawn(rand(50, 300))
|
||||||
del(bh)
|
del(bh)
|
||||||
|
/*
|
||||||
if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO
|
if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO
|
||||||
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
|
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
|
||||||
world << sound('spanomalies.ogg')
|
world << sound('spanomalies.ogg')
|
||||||
@@ -53,6 +53,10 @@
|
|||||||
P.name = "wormhole"
|
P.name = "wormhole"
|
||||||
spawn(rand(300,600))
|
spawn(rand(300,600))
|
||||||
del(P)
|
del(P)
|
||||||
|
*/
|
||||||
|
if(3)
|
||||||
|
if((world.time/10)>=3600&&toggle_space_ninja&&!sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
|
||||||
|
space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
|
||||||
if(4)
|
if(4)
|
||||||
command_alert("Confirmed anomaly type SPC-MGM-152 aboard [station_name()]. All personnel must destroy the anomaly.", "Anomaly Alert")
|
command_alert("Confirmed anomaly type SPC-MGM-152 aboard [station_name()]. All personnel must destroy the anomaly.", "Anomaly Alert")
|
||||||
world << sound('outbreak5.ogg')
|
world << sound('outbreak5.ogg')
|
||||||
|
|||||||
@@ -282,7 +282,6 @@ Movement impairing would indicate drugs and the like.*/
|
|||||||
s_coold = 3
|
s_coold = 3
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===================================================================================
|
===================================================================================
|
||||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<KAMIKAZE MODE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<KAMIKAZE MODE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
@@ -240,10 +240,8 @@ ________________________________________________________________________________
|
|||||||
var/display_to = s_control ? U : A//Who do we want to display certain messages to?
|
var/display_to = s_control ? U : A//Who do we want to display certain messages to?
|
||||||
|
|
||||||
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>"
|
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>"
|
||||||
if(spideros==0)
|
|
||||||
dat += "<a href='byond://?src=\ref[src];choice=Refresh'><img src=sos_7.png> Refresh</a>"
|
|
||||||
else
|
|
||||||
dat += "<a href='byond://?src=\ref[src];choice=Refresh'><img src=sos_7.png> Refresh</a>"
|
dat += "<a href='byond://?src=\ref[src];choice=Refresh'><img src=sos_7.png> Refresh</a>"
|
||||||
|
if(spideros)
|
||||||
dat += " | <a href='byond://?src=\ref[src];choice=Return'><img src=sos_1.png> Return</a>"
|
dat += " | <a href='byond://?src=\ref[src];choice=Return'><img src=sos_1.png> Return</a>"
|
||||||
dat += " | <a href='byond://?src=\ref[src];choice=Close'><img src=sos_8.png> Close</a>"
|
dat += " | <a href='byond://?src=\ref[src];choice=Close'><img src=sos_8.png> Close</a>"
|
||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
@@ -413,16 +411,16 @@ ________________________________________________________________________________
|
|||||||
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>"
|
||||||
|
|
||||||
|
//I personally think this makes things a little more fun. Ninjas can override all but law 0.
|
||||||
|
//if (A.laws.zeroth)
|
||||||
|
// laws += "<li>0: [A.laws.zeroth]</li>"
|
||||||
|
|
||||||
for (var/index = 1, index <= A.laws.ion.len, index++)
|
for (var/index = 1, index <= A.laws.ion.len, index++)
|
||||||
var/law = A.laws.ion[index]
|
var/law = A.laws.ion[index]
|
||||||
if (length(law) > 0)
|
if (length(law) > 0)
|
||||||
var/num = ionnum()
|
var/num = ionnum()
|
||||||
laws += "<li>[num]. [law]</li>"
|
laws += "<li>[num]. [law]</li>"
|
||||||
|
|
||||||
//I personally think this makes things a little more fun. Ninjas can override all but law 0.
|
|
||||||
//if (A.laws.zeroth)
|
|
||||||
// laws += "<li>0: [A.laws.zeroth]</li>"
|
|
||||||
|
|
||||||
var/number = 1
|
var/number = 1
|
||||||
for (var/index = 1, index <= A.laws.inherent.len, index++)
|
for (var/index = 1, index <= A.laws.inherent.len, index++)
|
||||||
var/law = A.laws.inherent[index]
|
var/law = A.laws.inherent[index]
|
||||||
@@ -462,7 +460,7 @@ ________________________________________________________________________________
|
|||||||
if(t_disk)
|
if(t_disk)
|
||||||
dat += "<a href='byond://?src=\ref[src];choice=Eject Disk'>Eject Disk</a><br>"
|
dat += "<a href='byond://?src=\ref[src];choice=Eject Disk'>Eject Disk</a><br>"
|
||||||
dat += "<ul>"
|
dat += "<ul>"
|
||||||
if(stored_research.len)//If there is stored research. Should be.
|
if(stored_research.len)//If there is stored research. Should be but just in case.
|
||||||
for(var/datum/tech/current_data in stored_research)
|
for(var/datum/tech/current_data in stored_research)
|
||||||
dat += "<li>"
|
dat += "<li>"
|
||||||
dat += "[current_data.name]: [current_data.level]"
|
dat += "[current_data.name]: [current_data.level]"
|
||||||
@@ -824,7 +822,7 @@ ________________________________________________________________________________
|
|||||||
else if(istype(I, /obj/item/weapon/cell))
|
else if(istype(I, /obj/item/weapon/cell))
|
||||||
if(I:maxcharge>cell.maxcharge)
|
if(I:maxcharge>cell.maxcharge)
|
||||||
U << "\blue Higher maximum capacity detected.\nUpgrading..."
|
U << "\blue Higher maximum capacity detected.\nUpgrading..."
|
||||||
if (n_gloves&&n_gloves.candrain&&do_after(U,50))
|
if (n_gloves&&n_gloves.candrain&&do_after(U,s_delay))
|
||||||
U.drop_item()
|
U.drop_item()
|
||||||
I.loc = src
|
I.loc = src
|
||||||
I:charge = min(I:charge+cell.charge, I:maxcharge)
|
I:charge = min(I:charge+cell.charge, I:maxcharge)
|
||||||
@@ -1059,19 +1057,18 @@ ________________________________________________________________________________
|
|||||||
spawn(0)
|
spawn(0)
|
||||||
var/turf/location = get_turf(U)
|
var/turf/location = get_turf(U)
|
||||||
for(var/mob/living/silicon/ai/AI in world)
|
for(var/mob/living/silicon/ai/AI in world)
|
||||||
AI << "\red <b>Network Alert: Hacking attempt detected [location?"in [location]":"Unable to pinpoint location"]</b>."
|
AI << "\red <b>Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"]</b>."
|
||||||
if(A:files&&A:files.known_tech.len)
|
if(A:files&&A:files.known_tech.len)
|
||||||
while(G.candrain&&!isnull(A))
|
|
||||||
for(var/datum/tech/current_data in S.stored_research)
|
for(var/datum/tech/current_data in S.stored_research)
|
||||||
U << "\blue Checking \the [current_data.name] database."
|
U << "\blue Checking \the [current_data.name] database."
|
||||||
if(do_after(U,S.s_delay))
|
if(do_after(U, S.s_delay)&&G.candrain&&!isnull(A))
|
||||||
for(var/datum/tech/analyzing_data in A:files.known_tech)
|
for(var/datum/tech/analyzing_data in A:files.known_tech)
|
||||||
if(current_data.id==analyzing_data.id)
|
if(current_data.id==analyzing_data.id)
|
||||||
if(analyzing_data.level>current_data.level)
|
if(analyzing_data.level>current_data.level)
|
||||||
U << "\blue Database: \black <b>UPDATED</b>."
|
U << "\blue Database: \black <b>UPDATED</b>."
|
||||||
current_data.level = analyzing_data.level
|
current_data.level = analyzing_data.level
|
||||||
break
|
break//Move on to next.
|
||||||
break
|
else break//Otherwise, quit processing.
|
||||||
U << "\blue Data analyzed. Process finished."
|
U << "\blue Data analyzed. Process finished."
|
||||||
|
|
||||||
if("WIRE")
|
if("WIRE")
|
||||||
@@ -1306,7 +1303,8 @@ It is possible to destroy the net by the occupant or someone else.
|
|||||||
density = 1//Can't pass through.
|
density = 1//Can't pass through.
|
||||||
opacity = 0//Can see through.
|
opacity = 0//Can see through.
|
||||||
mouse_opacity = 1//So you can hit it with stuff.
|
mouse_opacity = 1//So you can hit it with stuff.
|
||||||
anchored = 1//Can't drag/grab.
|
anchored = 1//Can't drag/grab the trapped mob.
|
||||||
|
|
||||||
var
|
var
|
||||||
health = 25//How much health it has.
|
health = 25//How much health it has.
|
||||||
mob/living/affecting = null//Who it is currently affecting, if anyone.
|
mob/living/affecting = null//Who it is currently affecting, if anyone.
|
||||||
@@ -58,45 +58,81 @@ ________________________________________________________________________________
|
|||||||
|
|
||||||
Miscellaneous Notes:
|
Miscellaneous Notes:
|
||||||
|
|
||||||
Right now I am focused on creating a dynamic objective tree based on round type, in order to create a ninja random event.
|
Potential Upgrade Tree:
|
||||||
I'll update when possible.
|
Energy Shield:
|
||||||
|
Extra Ability
|
||||||
|
Syndicate Shield device?
|
||||||
|
Works like the force wall spell, except can be kept indefinitely as long as energy remains. Toggled on or off.
|
||||||
|
Would block bullets and the like.
|
||||||
|
Phase Shift
|
||||||
|
Extra Ability
|
||||||
|
Advanced Sensors?
|
||||||
|
Instead of being unlocked at the start, Phase Shieft would become available once requirements are met.
|
||||||
|
Uranium-based Recharger:
|
||||||
|
Suit Upgrade
|
||||||
|
Unsure
|
||||||
|
Instead of losing energy each second, the suit would regain the same amount of energy.
|
||||||
|
This would not count in activating stealth and smiliar.
|
||||||
|
Extended Battery Life:
|
||||||
|
Suit Upgrade
|
||||||
|
Battery of higher capacity
|
||||||
|
Already implemented. Replace current battery with one of higher capacity.
|
||||||
|
Advanced Cloak-Tech device.
|
||||||
|
Suit Upgrade
|
||||||
|
Syndicate Cloaking Device?
|
||||||
|
Remove cloak failure rate.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//=======//RANDOM EVENT//=======//
|
//=======//RANDOM EVENT//=======//
|
||||||
|
/*
|
||||||
|
Also a dynamic ninja mission generator.
|
||||||
|
I decided to scrap round-specific objectives since keeping track of them would require some form of tracking.
|
||||||
|
When I already created about 4 new objectives, this doesn't terribly important or needed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
|
||||||
|
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
|
||||||
|
|
||||||
/proc/space_ninja_arrival()
|
/proc/space_ninja_arrival()
|
||||||
/*
|
|
||||||
var/datum/game_mode/current_mode = ticker.mode
|
var/datum/game_mode/current_mode = ticker.mode
|
||||||
var/datum/mind/current_mind = new()
|
var/datum/mind/current_mind = new()
|
||||||
var/antagonist_list[] = list()//The main bad guys.
|
|
||||||
|
/*Is the ninja playing for the good or bad guys? Is the ninja helping or hurting the station?
|
||||||
|
Their directives also influence behavior. At least in theory.*/
|
||||||
|
var/side = pick("face","heel")
|
||||||
|
|
||||||
|
var/antagonist_list[] = list()//The main bad guys. Evil minds that plot destruction.
|
||||||
var/sec_antagonist_list[] = current_mode.traitors//The OTHER bad guys. Mostly admin made.
|
var/sec_antagonist_list[] = current_mode.traitors//The OTHER bad guys. Mostly admin made.
|
||||||
var/tet_antagonist_list[] = list()//The bad guys no-one really cares about. For now just revs.
|
var/ter_antagonist_list[] = list()//The bad guys no-one really cares about. For now just revs.
|
||||||
|
|
||||||
var/protagonist_list[] = current_mode:get_living_heads()//The good guys. Mostly Heads. Who are alive.
|
var/protagonist_list[] = current_mode.get_living_heads()//The good guys. Mostly Heads. Who are alive.
|
||||||
|
|
||||||
var/xeno_list[] = list()//Aliums.
|
var/xeno_list[] = list()//Aliens.
|
||||||
|
var/commando_list[] = list()//Commandos.
|
||||||
|
|
||||||
//First we determine what mode it is and add the bad guys approprietly.
|
//First we determine what mode it is and add the bad guys approprietly.
|
||||||
switch (current_mode.config_tag)
|
switch (current_mode.config_tag)
|
||||||
if("traitor")
|
if("traitor")
|
||||||
if(current_mode:traitors.len)
|
if(current_mode:traitors.len)
|
||||||
for(var/datum/mind/current_mind in current_mode:traitors)//For traitor minds in in the traitors list.
|
for(current_mind in current_mode:traitors)//For traitor minds in in the traitors list.
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)//If the traitor mob exists and they are not dead.
|
if(current_mind.current&¤t_mind.current.stat!=2)//If the traitor mob exists and they are not dead.
|
||||||
antagonist_list += current_mind//Add them to the list.
|
antagonist_list += current_mind//Add them to the list.
|
||||||
|
|
||||||
if ("revolution")//Rev is divided into regular and head cultists. There are also heads of staff to consider.
|
if ("revolution")//Rev is divided into regular and heads. There are also heads of staff to consider.
|
||||||
if(current_mode:head_revolutionaries.len)
|
if(current_mode:head_revolutionaries.len)
|
||||||
for(var/datum/mind/current_mind in current_mode:head_revolutionaries)
|
for(current_mind in current_mode:head_revolutionaries)
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||||
antagonist_list += current_mind
|
antagonist_list += current_mind
|
||||||
|
|
||||||
for(var/datum/mind/current_mind in current_mode:revolutionaries)
|
for(current_mind in current_mode:revolutionaries)
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||||
tet_antagonist_list += current_mind
|
ter_antagonist_list += current_mind
|
||||||
|
|
||||||
if(current_mode:heads_of_staff.len)
|
if(current_mode:heads_of_staff.len)
|
||||||
heads_list = list()//Now we manually override the list made prior. Target Heads take priority.
|
var/heads_list[] = list()//Now we manually override the list made prior. Target Heads take priority.
|
||||||
for(var/datum/mind/current_mind in current_mode:heads_of_staff)
|
for(current_mind in current_mode:heads_of_staff)
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||||
protagonist_list += current_mind
|
protagonist_list += current_mind
|
||||||
if(heads_list.len)//Or not, if there are none.
|
if(heads_list.len)//Or not, if there are none.
|
||||||
@@ -104,33 +140,39 @@ ________________________________________________________________________________
|
|||||||
|
|
||||||
if ("cult")//Always a few of these around.
|
if ("cult")//Always a few of these around.
|
||||||
if(current_mode:cult.len)
|
if(current_mode:cult.len)
|
||||||
for(var/datum/mind/current_mind in current_mode:cult)
|
for(current_mind in current_mode:cult)
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||||
antagonist_list += current_mind
|
antagonist_list += current_mind
|
||||||
|
|
||||||
if ("wizard")//There can be only one mode wizard. Other wizards aren't too important.
|
if ("wizard")//There can be only one mode wizard. Other wizards aren't too important.
|
||||||
if(current_mode:wizard)
|
if(current_mode:wizard)
|
||||||
antagonist_list += wizard//The round will end if the wizard dies so checking for it is unnecessary.
|
antagonist_list += current_mode:wizard//The round will end if the wizard dies so checking for it is unnecessary.
|
||||||
|
|
||||||
if ("changeling")//While only one changeling counts for being alive or dead, it's possible there are more.
|
if ("changeling")//While only one changeling counts for being alive or dead, it's possible there are more.
|
||||||
if(current_mode:changelings.len)
|
if(current_mode:changelings.len)
|
||||||
for(var/datum/mind/current_mind in current_mode:changelings)
|
for(current_mind in current_mode:changelings)
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||||
antagonist_list += current_mind
|
antagonist_list += current_mind
|
||||||
|
/*
|
||||||
|
I originally intended for space ninjas to appear in Malfunction but after some consideration
|
||||||
|
this is not worth the trouble. Particularly with how objective mind completion is tracked.
|
||||||
|
Not to mention that Malfunction does not use declare_completion (at least, not in the way the other modes do).
|
||||||
|
With that said, a ninja on the side of the station would murder the AI very quickly--and the rounds usually
|
||||||
|
last long enough for the ninja to appear, too.
|
||||||
|
|
||||||
if ("malfunction")//Only one malf AI.
|
if ("malfunction")//Only one malf AI.
|
||||||
if(current_mode:malf_ai)
|
if(current_mode:malf_ai)
|
||||||
antagonist_list += malf_ai
|
antagonist_list += current_mode:malf_ai
|
||||||
|
*/
|
||||||
if ("nuclear")//Can be a few of these guys.
|
if ("nuclear")//Can be a few of these guys.
|
||||||
if(current_mode:syndicates.len)
|
if(current_mode:syndicates.len)
|
||||||
for(var/datum/mind/current_mind in current_mode:syndicates)
|
for(current_mind in current_mode:syndicates)
|
||||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||||
antagonist_list += current_mind
|
antagonist_list += current_mind
|
||||||
else
|
else
|
||||||
return//Don't want to summon a ninja during meteor or extended, or something.
|
return//Don't want to summon a ninja during meteor or extended, or something.
|
||||||
|
|
||||||
//Here we pick a location and spawn the ninja.
|
//Here we pick a location and spawn the ninja.
|
||||||
var/list/spawn_list = list()
|
var/list/spawn_list = list()
|
||||||
for(var/obj/landmark/L in world)
|
for(var/obj/landmark/L in world)
|
||||||
if (L.name == "carpspawn")
|
if (L.name == "carpspawn")
|
||||||
@@ -147,9 +189,9 @@ ________________________________________________________________________________
|
|||||||
var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list.len ? spawn_list : latejoin ))
|
var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list.len ? spawn_list : latejoin ))
|
||||||
|
|
||||||
if(candidates.len)
|
if(candidates.len)
|
||||||
var/mob/G = pick(candidates)
|
G = pick(candidates)
|
||||||
new_ninja.key = G.key
|
new_ninja.key = G.key
|
||||||
new_ninja.mind.key = key
|
new_ninja.mind.key = new_ninja.key
|
||||||
new_ninja.wear_suit:randomize_param()//Give them a random set of suit parameters.
|
new_ninja.wear_suit:randomize_param()//Give them a random set of suit parameters.
|
||||||
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
||||||
new_ninja.internals.icon_state = "internal1"
|
new_ninja.internals.icon_state = "internal1"
|
||||||
@@ -157,97 +199,210 @@ ________________________________________________________________________________
|
|||||||
else
|
else
|
||||||
del(new_ninja)
|
del(new_ninja)
|
||||||
return
|
return
|
||||||
//Now for the rest of the stuff.
|
//Now for the rest of the stuff.
|
||||||
|
|
||||||
var/datum/mind/ninja_mind = new_ninja.mind//For easier reference.
|
var/datum/mind/ninja_mind = new_ninja.mind//For easier reference.
|
||||||
|
var/mission_set = 0//To determine if we need to do further processing.
|
||||||
//Xenos and deathsquads take precedence over everything else.
|
//Xenos and deathsquads take precedence over everything else.
|
||||||
for(var/mob/living/carbon/alien/humanoid/xeno in world)//Unless the xenos are hiding in a locker somewhere, this'll find em.
|
|
||||||
|
//Unless the xenos are hiding in a locker somewhere, this'll find em.
|
||||||
|
for(var/mob/living/carbon/alien/humanoid/xeno in world)
|
||||||
if(istype(xeno))
|
if(istype(xeno))
|
||||||
xeno_list += xeno
|
xeno_list += xeno
|
||||||
|
|
||||||
//if(xeno_list.len>3)//If there are more than three humanoid xenos on the station, time to get dangerous.
|
if(xeno_list.len>3)//If there are more than three humanoid xenos on the station, time to get dangerous.
|
||||||
//if(sent_strike_team)//If a strike team was sent.
|
//Here we want the ninja to murder all the queens. The other aliens don't really matter.
|
||||||
for(var/mob/living/carbon/human/commando in world)//Search and destroy.
|
var/xeno_queen_list[] = list()
|
||||||
if(commando.mind&&commando.mind.special_role=="Death Commando")
|
for(var/mob/living/carbon/alien/humanoid/queen/xeno_queen in xeno_list)
|
||||||
|
if(xeno_queen.mind&&xeno_queen.stat!=2)
|
||||||
|
xeno_queen_list += xeno_queen
|
||||||
|
if(xeno_queen_list.len&&side=="face")//If there are queen about and the probability is 50.
|
||||||
|
for(var/mob/living/carbon/alien/humanoid/queen/xeno_queen in xeno_queen_list)
|
||||||
|
var/datum/objective/assassinate/ninja_objective = new
|
||||||
|
//We'll do some manual overrides to properly set it up.
|
||||||
|
ninja_objective.owner = ninja_mind
|
||||||
|
ninja_objective.target = xeno_queen.mind
|
||||||
|
ninja_objective.explanation_text = "Kill \the [xeno_queen]."
|
||||||
|
ninja_mind.objectives += ninja_objective
|
||||||
|
mission_set = 1
|
||||||
|
|
||||||
|
if(sent_strike_team&&side=="heel")//If a strike team was sent, murder them all like a champ.
|
||||||
|
for(current_mind in ticker.minds)//Search and destroy.
|
||||||
|
if(current_mind.special_role=="Death Commando"&¤t_mind.current&¤t_mind.current.stat!=2)
|
||||||
|
commando_list += current_mind
|
||||||
|
if(commando_list.len)//If there are living commandos still in play.
|
||||||
|
for(var/mob/living/carbon/human/commando in commando_list)
|
||||||
var/datum/objective/assassinate/ninja_objective = new
|
var/datum/objective/assassinate/ninja_objective = new
|
||||||
ninja_objective.owner = ninja_mind
|
ninja_objective.owner = ninja_mind
|
||||||
ninja_objective.find_target_by_role(commando.mind.special_role,1)
|
ninja_objective.find_target_by_role(commando.mind.special_role,1)
|
||||||
ninja_mind.objectives += ninja_objective
|
ninja_mind.objectives += ninja_objective
|
||||||
|
mission_set = 1
|
||||||
/*
|
/*
|
||||||
If there are no antogonists left it could mean one of two things:
|
If there are no antogonists left it could mean one of two things:
|
||||||
A) The round is about to end. No harm in spawning the ninja here since it has done all the reporting more likely than not.
|
A) The round is about to end. No harm in spawning the ninja here.
|
||||||
B) The round is still going and ghosts are probably rioting for something to happen.
|
B) The round is still going and ghosts are probably rioting for something to happen.
|
||||||
In either case, it's a good idea to spawn the ninja with a semi-random set of objectives.
|
In either case, it's a good idea to spawn the ninja with a semi-random set of objectives.
|
||||||
*/
|
*/
|
||||||
if(!antagonist_list.len)
|
if(!mission_set)//If mission was not set.
|
||||||
switch(rand(1,3))
|
|
||||||
if(1)
|
//To pick a person for each list.
|
||||||
if(protagonist_list.len)//If we have surviving heads.
|
var/datum/mind/antagonist_target
|
||||||
for(var/datum/mind/head_mind in protagonist_list)//Search and destroy.
|
if(antagonist_list.len)
|
||||||
|
antagonist_target = pick(antagonist_list)
|
||||||
|
|
||||||
|
var/datum/mind/secondary_target
|
||||||
|
if(sec_antagonist_list.len)
|
||||||
|
secondary_target = pick(sec_antagonist_list)
|
||||||
|
|
||||||
|
var/datum/mind/tertiary_target
|
||||||
|
if(ter_antagonist_list.len)
|
||||||
|
tertiary_target = pick(ter_antagonist_list)
|
||||||
|
|
||||||
|
var/datum/mind/protagonist_target
|
||||||
|
if(protagonist_list.len)
|
||||||
|
protagonist_target = pick(protagonist_list)
|
||||||
|
|
||||||
|
var/hostile_targets[] = list()//The guys actually picked for the assassination or whatever.
|
||||||
|
var/friendly_targets[] = list()//The guys the ninja must protect.
|
||||||
|
|
||||||
|
if(side=="face")
|
||||||
|
friendly_targets += protagonist_target//Will add null if the variable is empty.
|
||||||
|
hostile_targets += antagonist_target
|
||||||
|
hostile_targets += secondary_target
|
||||||
|
hostile_targets += tertiary_target
|
||||||
|
else
|
||||||
|
hostile_targets += protagonist_target
|
||||||
|
friendly_targets += antagonist_target
|
||||||
|
friendly_targets += secondary_target
|
||||||
|
friendly_targets += tertiary_target
|
||||||
|
|
||||||
|
var/objective_list[] = list(1,2,3,4,5,6)//To remove later.
|
||||||
|
for(var/i=rand(1,3),i>0,i--)//Want to get a few random objectives. Currently up to 3.
|
||||||
|
if(!hostile_targets.len)//Remove appropriate choices from switch list if the target lists are empty.
|
||||||
|
objective_list -= 1
|
||||||
|
objective_list -= 4
|
||||||
|
if(!friendly_targets.len)
|
||||||
|
objective_list -= 3
|
||||||
|
switch(pick(objective_list))
|
||||||
|
if(1)//kill
|
||||||
|
current_mind = pick(hostile_targets)
|
||||||
|
|
||||||
var/datum/objective/assassinate/ninja_objective = new
|
var/datum/objective/assassinate/ninja_objective = new
|
||||||
ninja_objective.owner = ninja_mind
|
ninja_objective.owner = ninja_mind
|
||||||
ninja_objective.find_target_by_role(head_mind.assigned_role)
|
ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0))//If they have a special role, use that instead to find em.
|
||||||
ninja_mind.objectives += ninja_objective
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
//TO DO: add ninja-net point-based system objective.
|
hostile_targets -= current_mind//Remove them from the list.
|
||||||
//TO DO: upgrade cell objective.
|
if(2)//Steal
|
||||||
|
var/datum/objective/steal/ninja_objective = new
|
||||||
|
var/target_item = pick(ninja_objective.possible_items_special)
|
||||||
|
ninja_objective.set_target(target_item)
|
||||||
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
else//Else, we need to give them an objective based on round type.
|
objective_list -= 2
|
||||||
if(sec_antagonist_list.len)
|
if(3)//Protect. Keeping people alive can be pretty difficult.
|
||||||
|
current_mind = pick(friendly_targets)
|
||||||
|
|
||||||
if(tet_antagonist_list.len)//Not gonna happen but maybe in the future.
|
var/datum/objective/protect/ninja_objective = new
|
||||||
|
ninja_objective.owner = ninja_mind
|
||||||
|
ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0))
|
||||||
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
|
friendly_targets -= current_mind
|
||||||
|
if(4)//Debrain
|
||||||
|
current_mind = pick(hostile_targets)
|
||||||
|
|
||||||
//if(!ninja_mind.objectives.len)//If they somehow did not get an objective.
|
var/datum/objective/debrain/ninja_objective = new
|
||||||
//Let em know.
|
ninja_objective.owner = ninja_mind
|
||||||
|
ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0))
|
||||||
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
//Finally add a survival objective.
|
hostile_targets -= current_mind//Remove them from the list.
|
||||||
|
if(5)//Download research
|
||||||
|
var/datum/objective/download/ninja_objective = new
|
||||||
|
ninja_objective.gen_amount_goal()
|
||||||
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
|
objective_list -= 5
|
||||||
|
if(6)//Capture
|
||||||
|
var/datum/objective/capture/ninja_objective = new
|
||||||
|
ninja_objective.gen_amount_goal()
|
||||||
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
|
objective_list -= 6
|
||||||
|
|
||||||
|
if(ninja_mind.objectives.len)//If they got some objectives out of that.
|
||||||
|
mission_set = 1
|
||||||
|
|
||||||
|
if(!ninja_mind.objectives.len||!mission_set)//If they somehow did not get an objective at this point, time to destroy the station.
|
||||||
|
var/nuke_code
|
||||||
|
if(current_mode.config_tag == "nuclear"||sent_strike_team)//If it's nuclear, there is a nuke with a code already set. Or if commandos were sent in.
|
||||||
|
var/temp_code
|
||||||
|
for(var/obj/machinery/nuclearbomb/N in world)
|
||||||
|
temp_code = text2num(N.r_code)
|
||||||
|
if(temp_code)//if it's actually a number. It won't convert any non-numericals.
|
||||||
|
nuke_code = N.r_code
|
||||||
|
break
|
||||||
|
if(!nuke_code)//If there is still no code.
|
||||||
|
nuke_code = "[rand(10000, 99999.0)]"
|
||||||
|
for(var/obj/machinery/nuclearbomb/N in world)
|
||||||
|
N.r_code = nuke_code
|
||||||
|
var/datum/objective/nuclear/ninja_objective = new//Fun.
|
||||||
|
ninja_objective.owner = ninja_mind
|
||||||
|
ninja_objective.explanation_text = "Destroy the station with a nuclear device. The code is [nuke_code]." //Let them know what the code is.
|
||||||
|
|
||||||
|
//Finally add a survival objective since it's usually broad enough for any round type.
|
||||||
var/datum/objective/survive/ninja_objective = new
|
var/datum/objective/survive/ninja_objective = new
|
||||||
ninja_objective.owner = ninja_mind
|
ninja_objective.owner = ninja_mind
|
||||||
ninja_mind.objectives += ninja_objective
|
ninja_mind.objectives += ninja_objective
|
||||||
|
|
||||||
var/directive = generate_ninja_directive()
|
var/directive = generate_ninja_directive(side)
|
||||||
new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red <B>SPACE NINJA</B>!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current directive is: \red <B>[directive]</B>"
|
new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red <B>SPACE NINJA</B>!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current directive is: \red <B>[directive]</B>"
|
||||||
new_ninja.mind.store_memory("<B>Directive:</B> \red [directive].")
|
new_ninja.mind.store_memory("<B>Directive:</B> \red [directive]<br>")
|
||||||
*/
|
|
||||||
return
|
var/obj_count = 1
|
||||||
|
new_ninja << "\blue Your current objectives:"
|
||||||
|
for(var/datum/objective/objective in ninja_mind.objectives)
|
||||||
|
new_ninja << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||||
|
obj_count++
|
||||||
|
|
||||||
|
sent_ninja_to_station = 1//And we're done.
|
||||||
|
return new_ninja//Return the ninja in case we need to reference them later.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This proc will give the ninja a directive to follow. They are not obligated to do so but it's a fun roleplay reminder.
|
This proc will give the ninja a directive to follow. They are not obligated to do so but it's a fun roleplay reminder.
|
||||||
Making this random or semi-random will probably not work without it also being incredibly silly.
|
Making this random or semi-random will probably not work without it also being incredibly silly.
|
||||||
As such, it's hard-coded for now. No reason for it not to be, really.
|
As such, it's hard-coded for now. No reason for it not to be, really.
|
||||||
*/
|
*/
|
||||||
/proc/generate_ninja_directive()
|
/proc/generate_ninja_directive(side)
|
||||||
var/directive
|
var/directive = "[side=="face"?"Nanotrasen":"The Syndicate"] is your employer. "//Let them know which side they're on.
|
||||||
switch(rand(1,13))
|
switch(rand(1,13))
|
||||||
if(1)
|
if(1)
|
||||||
directive = "The Spider Clan must not be linked to this operation. Remain as hidden and covert as possible."
|
directive += "The Spider Clan must not be linked to this operation. Remain as hidden and covert as possible."
|
||||||
if(2)
|
if(2)
|
||||||
directive = "[station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as possible."
|
directive += "[station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as possible."
|
||||||
if(3)
|
if(3)
|
||||||
directive = "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible."
|
directive += "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible."
|
||||||
if(4)
|
if(4)
|
||||||
directive = "The Spider Clan absolutely cannot be linked to this operation. Eliminate all witnesses using most extreme prejudice."
|
directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate all witnesses using most extreme prejudice."
|
||||||
if(5)
|
if(5)
|
||||||
directive = "We are currently negotiating with Nanotrasen command. Prioritize saving human lives over ending them."
|
directive += "We are currently negotiating with Nanotrasen command. Prioritize saving human lives over ending them."
|
||||||
if(6)
|
if(6)
|
||||||
directive = "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter."
|
directive += "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter."
|
||||||
if(7)
|
if(7)
|
||||||
directive = "A financial backer has made an offer we cannot refuse. Implicate Syndicate involvement in the operation."
|
directive += "A financial backer has made an offer we cannot refuse. Implicate Syndicate involvement in the operation."
|
||||||
if(8)
|
if(8)
|
||||||
directive = "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter."
|
directive += "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter."
|
||||||
if(9)
|
if(9)
|
||||||
directive = "A free agent has proposed a lucrative business deal. Implicate Nanotrasen involvement in the operation."
|
directive += "A free agent has proposed a lucrative business deal. Implicate Nanotrasen involvement in the operation."
|
||||||
if(10)
|
if(10)
|
||||||
directive = "Our reputation is on the line. Harm as few civilians or innocents as possible."
|
directive += "Our reputation is on the line. Harm as few civilians or innocents as possible."
|
||||||
if(11)
|
if(11)
|
||||||
directive = "Our honor is on the line. Utilize only honorable tactics when dealing with opponents."
|
directive += "Our honor is on the line. Utilize only honorable tactics when dealing with opponents."
|
||||||
if(12)
|
if(12)
|
||||||
directive = "We are currently negotiating with a Syndicate leader. Disguise assassinations as suicide or another natural cause."
|
directive += "We are currently negotiating with a Syndicate leader. Disguise assassinations as suicide or another natural cause."
|
||||||
else
|
else
|
||||||
directive = "There are no special directives at this time."
|
directive += "There are no special supplemental instructions at this time."
|
||||||
return directive
|
return directive
|
||||||
|
|
||||||
//=======//CURRENT PLAYER VERB//=======//
|
//=======//CURRENT PLAYER VERB//=======//
|
||||||
@@ -259,6 +414,9 @@ As such, it's hard-coded for now. No reason for it not to be, really.
|
|||||||
if(!ticker)
|
if(!ticker)
|
||||||
alert("Wait until the game starts")
|
alert("Wait until the game starts")
|
||||||
return
|
return
|
||||||
|
if(!toggle_space_ninja)
|
||||||
|
alert("Space Ninjas spawning is disabled.")
|
||||||
|
return
|
||||||
if(ishuman(M))
|
if(ishuman(M))
|
||||||
log_admin("[key_name(src)] turned [M.key] into a Space Ninja.")
|
log_admin("[key_name(src)] turned [M.key] into a Space Ninja.")
|
||||||
spawn(10)
|
spawn(10)
|
||||||
@@ -276,7 +434,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
|
|||||||
/client/proc/send_space_ninja()
|
/client/proc/send_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 an attitude."
|
set desc = "Spawns a space ninja for when you need a teenager with attitude."
|
||||||
set popup_menu = 0
|
set popup_menu = 0
|
||||||
|
|
||||||
if(!authenticated || !holder)
|
if(!authenticated || !holder)
|
||||||
@@ -285,6 +443,9 @@ As such, it's hard-coded for now. No reason for it not to be, really.
|
|||||||
if(!ticker.mode)
|
if(!ticker.mode)
|
||||||
alert("The game hasn't started yet!")
|
alert("The game hasn't started yet!")
|
||||||
return
|
return
|
||||||
|
if(!toggle_space_ninja)
|
||||||
|
alert("Space Ninjas spawning is disabled.")
|
||||||
|
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
|
||||||
|
|
||||||
@@ -321,7 +482,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
|
|||||||
|
|
||||||
new_ninja.mind.key = G.key
|
new_ninja.mind.key = G.key
|
||||||
new_ninja.key = G.key
|
new_ninja.key = G.key
|
||||||
new_ninja.mind.store_memory("<B>Mission:</B> \red [mission].")
|
new_ninja.mind.store_memory("<B>Mission:</B> \red [mission].<br>")
|
||||||
|
|
||||||
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
||||||
new_ninja.internals.icon_state = "internal1"
|
new_ninja.internals.icon_state = "internal1"
|
||||||
@@ -329,7 +490,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
|
|||||||
new_ninja.wear_suit:ninitialize(10,new_ninja)//If you're wondering why I'm passing the argument to the proc when the default should suffice,
|
new_ninja.wear_suit:ninitialize(10,new_ninja)//If you're wondering why I'm passing the argument to the proc when the default should suffice,
|
||||||
//I'm also wondering that same thing. This makes sure it does not run time error though.
|
//I'm also wondering that same thing. This makes sure it does not run time error though.
|
||||||
|
|
||||||
new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red <B>SPACE NINJA</B>!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current mission is: \red <B>[mission]</B>"
|
new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red <B>SPACE NINJA</B>!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training! \nYour current mission is: \red <B>[mission]</B>"
|
||||||
|
|
||||||
message_admins("\blue [admin_name] has spawned [new_ninja.key] as a Space Ninja. Hide yo children! \nTheir <b>mission</b> is: [mission]", 1)
|
message_admins("\blue [admin_name] has spawned [new_ninja.key] as a Space Ninja. Hide yo children! \nTheir <b>mission</b> is: [mission]", 1)
|
||||||
log_admin("[admin_name] used Spawn Space Ninja.")
|
log_admin("[admin_name] used Spawn Space Ninja.")
|
||||||
@@ -360,6 +521,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
|
|||||||
else
|
else
|
||||||
mind = new
|
mind = new
|
||||||
mind.current = src
|
mind.current = src
|
||||||
|
mind.original = src
|
||||||
mind.assigned_role = "MODE"
|
mind.assigned_role = "MODE"
|
||||||
mind.special_role = "Space Ninja"
|
mind.special_role = "Space Ninja"
|
||||||
if(!(mind in ticker.minds))
|
if(!(mind in ticker.minds))
|
||||||
@@ -736,7 +898,7 @@ BYOND fixed the verb bugs so this is no longer necessary. I prefer verb panels.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//=======//DEBUG//=======//
|
//=======//DEBUG//=======//
|
||||||
|
/*
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs()
|
/obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs()
|
||||||
//DEBUG
|
//DEBUG
|
||||||
//Does nothing at the moment. I am trying to see if it's possible to mess around with verbs as variables.
|
//Does nothing at the moment. I am trying to see if it's possible to mess around with verbs as variables.
|
||||||
@@ -745,7 +907,7 @@ BYOND fixed the verb bugs so this is no longer necessary. I prefer verb panels.
|
|||||||
// usr << "[P.set.name], path: [P]"
|
// usr << "[P.set.name], path: [P]"
|
||||||
return
|
return
|
||||||
|
|
||||||
/*
|
|
||||||
Most of these are at various points of incomplete.
|
Most of these are at various points of incomplete.
|
||||||
|
|
||||||
/mob/verb/grant_object_panel()
|
/mob/verb/grant_object_panel()
|
||||||
@@ -24,8 +24,10 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/datum/game_mode/proc/declare_completion()
|
/datum/game_mode/proc/declare_completion()
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/game_mode/proc/declare_extra_completion()
|
||||||
for(var/datum/mind/traitor in traitors)
|
for(var/datum/mind/traitor in traitors)
|
||||||
var/traitorwin = 1
|
|
||||||
var/traitor_name
|
var/traitor_name
|
||||||
|
|
||||||
if(traitor.current)
|
if(traitor.current)
|
||||||
@@ -38,7 +40,9 @@
|
|||||||
else
|
else
|
||||||
traitor_name = "[traitor.key] (character destroyed)"
|
traitor_name = "[traitor.key] (character destroyed)"
|
||||||
|
|
||||||
world << "<B>The syndicate traitor was [traitor_name]</B>"
|
world << "<B>The [traitor.special_role?(lowertext(traitor.special_role)):"antagonist"] was [traitor_name]</B>"
|
||||||
|
if(traitor.objectives.len)//If the traitor had no objectives, don't need to process this.
|
||||||
|
var/traitorwin = 1
|
||||||
var/count = 1
|
var/count = 1
|
||||||
for(var/datum/objective/objective in traitor.objectives)
|
for(var/datum/objective/objective in traitor.objectives)
|
||||||
if(objective.check_completion())
|
if(objective.check_completion())
|
||||||
@@ -49,9 +53,9 @@
|
|||||||
count++
|
count++
|
||||||
|
|
||||||
if(traitorwin)
|
if(traitorwin)
|
||||||
world << "<B>The traitor was successful!<B>"
|
world << "<B>The antagonist was successful!<B>"
|
||||||
else
|
else
|
||||||
world << "<B>The traitor has failed!<B>"
|
world << "<B>The antagonist has failed!<B>"
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/game_mode/proc/check_win()
|
/datum/game_mode/proc/check_win()
|
||||||
@@ -184,3 +188,15 @@ Rev-heads won't get them. Can be expanded otherwise.*/
|
|||||||
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code response."
|
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."
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
/datum/game_mode/proc/get_living_heads()
|
||||||
|
var/list/heads = list()
|
||||||
|
|
||||||
|
for(var/mob/living/carbon/human/player in world)
|
||||||
|
if(player.mind)
|
||||||
|
var/role = player.mind.assigned_role
|
||||||
|
if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer"))
|
||||||
|
heads += player.mind
|
||||||
|
|
||||||
|
return heads
|
||||||
@@ -13,7 +13,7 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
var/event_time = null
|
var/event_time = null
|
||||||
var/event = 0
|
var/event = 0
|
||||||
|
|
||||||
var/list/datum/mind/minds = list()
|
var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking.
|
||||||
|
|
||||||
var/pregame_timeleft = 0
|
var/pregame_timeleft = 0
|
||||||
|
|
||||||
@@ -208,7 +208,8 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
world << "<b>[robo.name] was unable to survive the rigors of being a cyborg without an AI. Its laws were:</b>"
|
world << "<b>[robo.name] was unable to survive the rigors of being a cyborg without an AI. Its laws were:</b>"
|
||||||
robo.laws.show_laws(world)
|
robo.laws.show_laws(world)
|
||||||
|
|
||||||
mode.declare_completion()
|
mode.declare_completion()//To declare normal completion.
|
||||||
|
mode.declare_extra_completion()//To declare extra traitors/special roles for rounds.
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,13 @@
|
|||||||
/datum/game_mode/malfunction/check_win()
|
/datum/game_mode/malfunction/check_win()
|
||||||
if (AI_win_timeleft <= 0 && !win)
|
if (AI_win_timeleft <= 0 && !win)
|
||||||
win = 1
|
win = 1
|
||||||
|
declare_completion()
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/datum/game_mode/malfunction/declare_completion()
|
||||||
|
if(win==1)//If the AI won.
|
||||||
world << "<FONT size = 3><B>The AI has won!</B></FONT>"
|
world << "<FONT size = 3><B>The AI has won!</B></FONT>"
|
||||||
world << "<B>It has fully taken control of all of [station_name()]'s systems.</B>"
|
world << "<B>It has fully taken control of all of [station_name()]'s systems.</B>"
|
||||||
|
|
||||||
@@ -100,9 +107,12 @@
|
|||||||
sleep(300)
|
sleep(300)
|
||||||
log_game("Rebooting due to round end")
|
log_game("Rebooting due to round end")
|
||||||
world.Reboot()
|
world.Reboot()
|
||||||
return 1
|
|
||||||
else
|
else
|
||||||
return 0
|
world << "<FONT size = 3><B>Human Victory</B></FONT>"
|
||||||
|
world << "<B>The AI has been killed!</B> The staff is victorious."
|
||||||
|
sleep(100)
|
||||||
|
world << "\blue Rebooting due to end of game"
|
||||||
|
world.Reboot()
|
||||||
|
|
||||||
/datum/game_mode/malfunction/Topic(href, href_list)
|
/datum/game_mode/malfunction/Topic(href, href_list)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -178,6 +178,7 @@
|
|||||||
|
|
||||||
sleep(110)
|
sleep(110)
|
||||||
if (ticker.mode.name != "nuclear emergency" || !derp || !herp)
|
if (ticker.mode.name != "nuclear emergency" || !derp || !herp)
|
||||||
|
ticker.mode.declare_extra_completion()//Declaring regular completion could cause issues.
|
||||||
world << "<B>The station was destoyed by the nuclear blast! Resetting in 30 seconds!</B>"
|
world << "<B>The station was destoyed by the nuclear blast! Resetting in 30 seconds!</B>"
|
||||||
|
|
||||||
sleep(300)
|
sleep(300)
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
datum
|
datum
|
||||||
objective
|
objective
|
||||||
var/datum/mind/owner
|
var
|
||||||
var/explanation_text
|
datum/mind/owner//Who owns the objective.
|
||||||
|
explanation_text//What that person is supposed to do.
|
||||||
|
datum/mind/target//If they are focused on a particular person.
|
||||||
|
target_amount//If they are focused on a particular number. Steal objectives have their own counter.
|
||||||
|
|
||||||
New(var/text)
|
New(var/text)
|
||||||
if(text)
|
if(text)
|
||||||
@@ -11,19 +14,25 @@ datum
|
|||||||
check_completion()
|
check_completion()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
assassinate
|
find_target()
|
||||||
var/datum/mind/target
|
|
||||||
|
|
||||||
proc/find_target()
|
|
||||||
var/list/possible_targets = list()
|
var/list/possible_targets = list()
|
||||||
|
|
||||||
for(var/datum/mind/possible_target in ticker.minds)
|
for(var/datum/mind/possible_target in ticker.minds)
|
||||||
if((possible_target != owner) && istype(possible_target.current, /mob/living/carbon/human))
|
if(possible_target != owner && ishuman(possible_target))
|
||||||
possible_targets += possible_target
|
possible_targets += possible_target
|
||||||
|
|
||||||
if(possible_targets.len > 0)
|
if(possible_targets.len > 0)
|
||||||
target = pick(possible_targets)
|
target = pick(possible_targets)
|
||||||
|
|
||||||
|
find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
|
||||||
|
for(var/datum/mind/possible_target in ticker.minds)
|
||||||
|
if((possible_target != owner) && ishuman(possible_target) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
|
||||||
|
target = possible_target
|
||||||
|
break
|
||||||
|
|
||||||
|
assassinate
|
||||||
|
find_target()
|
||||||
|
..()
|
||||||
if(target && target.current)
|
if(target && target.current)
|
||||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||||
else
|
else
|
||||||
@@ -31,14 +40,10 @@ datum
|
|||||||
|
|
||||||
return target
|
return target
|
||||||
|
|
||||||
proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
|
find_target_by_role(role, role_type=0)
|
||||||
for(var/datum/mind/possible_target in ticker.minds)
|
..(role, role_type)
|
||||||
if((possible_target != owner) && istype(possible_target.current, /mob/living/carbon/human) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
|
|
||||||
target = possible_target
|
|
||||||
break
|
|
||||||
|
|
||||||
if(target && target.current)
|
if(target && target.current)
|
||||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||||
else
|
else
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
@@ -46,13 +51,76 @@ datum
|
|||||||
|
|
||||||
check_completion()
|
check_completion()
|
||||||
if(target && target.current)
|
if(target && target.current)
|
||||||
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || istype(target.current,/mob/living/silicon) || istype(target.current,/mob/living/carbon/brain)) //Assuming this works, people in the thunderdome and borgs now count as dead for traitor objectives. --NeoFite
|
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || issilicon(target.current) || isbrain(target.current)) //Assuming this works, people in the thunderdome and borgs now count as dead for traitor objectives. --NeoFite
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
debrain//I want braaaainssss
|
||||||
|
find_target()
|
||||||
|
..()
|
||||||
|
|
||||||
|
if(target && target.current)
|
||||||
|
explanation_text = "Steal the brain of [target.current.real_name]."
|
||||||
|
else
|
||||||
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
|
return target
|
||||||
|
|
||||||
|
find_target_by_role(role, role_type=0)
|
||||||
|
..(role, role_type)
|
||||||
|
|
||||||
|
if(target && target.current)
|
||||||
|
explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]."
|
||||||
|
else
|
||||||
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
|
return target
|
||||||
|
|
||||||
|
check_completion()
|
||||||
|
if(!target)//If it's a free objective.
|
||||||
|
return 1
|
||||||
|
if(!owner.current||owner.current.stat==2)//If they're dead.
|
||||||
|
return 0
|
||||||
|
var/list/all_items = owner.current.get_contents()
|
||||||
|
for(var/obj/item/device/mmi/mmi in all_items)
|
||||||
|
if(mmi.brainmob&&mmi.brainmob.mind==target) return 1
|
||||||
|
for(var/obj/item/brain/brain in all_items)
|
||||||
|
if(brain.brainmob&&brain.brainmob.mind==target) return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
protect//The opposite of killing a dude.
|
||||||
|
find_target()
|
||||||
|
..()
|
||||||
|
if(target && target.current)
|
||||||
|
explanation_text = "Protect [target.current.real_name], the [target.assigned_role]."
|
||||||
|
else
|
||||||
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
|
return target
|
||||||
|
|
||||||
|
find_target_by_role(role, role_type=0)
|
||||||
|
..(role, role_type)
|
||||||
|
if(target && target.current)
|
||||||
|
explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||||
|
else
|
||||||
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
|
return target
|
||||||
|
|
||||||
|
check_completion()
|
||||||
|
if(!target)//If it's a free objective.
|
||||||
|
return 1
|
||||||
|
if(target.current)
|
||||||
|
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || issilicon(target.current) || isbrain(target.current))
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
hijack
|
hijack
|
||||||
explanation_text = "Hijack the emergency shuttle by escaping alone."
|
explanation_text = "Hijack the emergency shuttle by escaping alone."
|
||||||
|
|
||||||
@@ -66,8 +134,9 @@ datum
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
||||||
|
var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai)
|
||||||
for(var/mob/living/player in world)
|
for(var/mob/living/player in world)
|
||||||
|
if(player.type in protected_mobs) continue
|
||||||
if (player.mind && (player.mind != owner))
|
if (player.mind && (player.mind != owner))
|
||||||
if (player.stat != 2) //they're not dead
|
if (player.stat != 2) //they're not dead
|
||||||
if (get_turf(player) in shuttle)
|
if (get_turf(player) in shuttle)
|
||||||
@@ -79,9 +148,9 @@ datum
|
|||||||
explanation_text = "Escape on the shuttle alive."
|
explanation_text = "Escape on the shuttle alive."
|
||||||
|
|
||||||
check_completion()
|
check_completion()
|
||||||
if(istype(owner.current, /mob/living/silicon))
|
if(issilicon(owner.current))
|
||||||
return 0
|
return 0
|
||||||
if(istype(owner.current, /mob/living/carbon/brain))
|
if(isbrain(owner.current))
|
||||||
return 0
|
return 0
|
||||||
if(emergency_shuttle.location<2)
|
if(emergency_shuttle.location<2)
|
||||||
return 0
|
return 0
|
||||||
@@ -104,18 +173,21 @@ datum
|
|||||||
explanation_text = "Stay alive until the end"
|
explanation_text = "Stay alive until the end"
|
||||||
|
|
||||||
check_completion()
|
check_completion()
|
||||||
if(istype(owner.current, /mob/living/silicon) && owner.current != owner.original)
|
if(issilicon(owner.current) && owner.current != owner.original)
|
||||||
return 0
|
return 0
|
||||||
if(!owner.current || owner.current.stat == 2)
|
if(!owner.current || owner.current.stat == 2)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
nuclear
|
||||||
|
explanation_text = "Destroy the station with a nuclear device."
|
||||||
|
|
||||||
steal
|
steal
|
||||||
var/obj/item/steal_target
|
var/obj/item/steal_target
|
||||||
var/target_name
|
var/target_name
|
||||||
var/global/list/possible_items = list(
|
|
||||||
|
var/global/possible_items[] = list(
|
||||||
"the captain's antique laser gun" = /obj/item/weapon/gun/energy/laser/captain,
|
"the captain's antique laser gun" = /obj/item/weapon/gun/energy/laser/captain,
|
||||||
"a hand teleporter" = /obj/item/weapon/hand_tele,
|
"a hand teleporter" = /obj/item/weapon/hand_tele,
|
||||||
"an RCD" = /obj/item/weapon/rcd,
|
"an RCD" = /obj/item/weapon/rcd,
|
||||||
@@ -129,38 +201,45 @@ datum
|
|||||||
"28 moles of plasma (full tank)" = /obj/item/weapon/tank,
|
"28 moles of plasma (full tank)" = /obj/item/weapon/tank,
|
||||||
)
|
)
|
||||||
|
|
||||||
var/global/list/possible_items_special = list(
|
var/global/possible_items_special[] = list(
|
||||||
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
|
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
|
||||||
|
"nuclear gun" = /obj/item/weapon/gun/energy/nuclear,
|
||||||
|
"diamond drill" = /obj/item/weapon/pickaxe/diamonddrill,
|
||||||
|
"bag of holding" = /obj/item/weapon/storage/backpack/holding,
|
||||||
|
"hyper-capacity cell" = /obj/item/weapon/cell/hyper,
|
||||||
|
"10 diamonds" = /obj/item/stack/sheet/diamond,
|
||||||
|
"50 gold bars" = /obj/item/stack/sheet/gold,
|
||||||
|
"25 refined uranium bars" = /obj/item/stack/sheet/uranium,
|
||||||
)
|
)
|
||||||
|
|
||||||
proc/set_target(var/target_name as text)
|
proc/set_target(item_name)
|
||||||
target_name = target_name
|
target_name = item_name
|
||||||
steal_target = possible_items[target_name]
|
steal_target = possible_items[target_name]
|
||||||
if (!steal_target )
|
if (!steal_target )
|
||||||
steal_target = possible_items_special[target_name]
|
steal_target = possible_items_special[target_name]
|
||||||
explanation_text = "Steal [target_name]."
|
explanation_text = "Steal [target_name]."
|
||||||
return steal_target
|
return steal_target
|
||||||
|
|
||||||
proc/find_target()
|
find_target()
|
||||||
return set_target(pick(possible_items))
|
return set_target(pick(possible_items))
|
||||||
|
|
||||||
proc/select_target()
|
proc/select_target()
|
||||||
var/list/possible_items_all = possible_items+possible_items_special+"custom"
|
var/list/possible_items_all = possible_items+possible_items_special+"custom"
|
||||||
var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
|
var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
|
||||||
|
|
||||||
if (!new_target) return
|
if (!new_target) return
|
||||||
|
|
||||||
if (new_target == "custom")
|
if (new_target == "custom")
|
||||||
var/steal_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
||||||
if (!steal_target) return
|
if (!custom_target) return
|
||||||
var/tmp_obj = new steal_target
|
var/tmp_obj = new custom_target
|
||||||
new_target = tmp_obj:name
|
var/custom_name = tmp_obj:name
|
||||||
del(tmp_obj)
|
del(tmp_obj)
|
||||||
new_target = input("Enter target name:", "Objective target", new_target) as text|null
|
custom_name = input("Enter target name:", "Objective target", custom_name) as text|null
|
||||||
if (!new_target) return
|
if (!custom_name) return
|
||||||
|
target_name = custom_name
|
||||||
target_name = new_target
|
steal_target = custom_target
|
||||||
steal_target = steal_target
|
explanation_text = "Steal [target_name]."
|
||||||
explanation_text = "Steal [new_target]."
|
|
||||||
|
|
||||||
else
|
else
|
||||||
set_target(new_target)
|
set_target(new_target)
|
||||||
@@ -172,12 +251,21 @@ datum
|
|||||||
return 0
|
return 0
|
||||||
var/list/all_items = owner.current.get_contents()
|
var/list/all_items = owner.current.get_contents()
|
||||||
switch (target_name)
|
switch (target_name)
|
||||||
if ("28 moles of plasma (full tank)")
|
if("28 moles of plasma (full tank)","10 diamonds","50 gold bars","25 refined uranium bars")
|
||||||
var/target = 28 //moles
|
var/target_amount = text2num(target_name)//Non-numbers are ignored.
|
||||||
var/found_toxins = 0.0 //moles
|
var/found_amount = 0.0//Always starts as zero.
|
||||||
for(var/obj/item/weapon/tank/T in all_items)
|
for(var/obj/item/I in all_items)
|
||||||
found_toxins += T.air_contents.toxins
|
if(!istype(I, steal_target)) continue//If it's not actually that item.
|
||||||
return found_toxins>=target
|
found_amount += (target_name=="28 moles of plasma (full tank)" ? (I:air_contents:toxins) : (I:amount))
|
||||||
|
return found_amount>=target_amount
|
||||||
|
if("50 coins (in bag)")
|
||||||
|
var/obj/item/weapon/moneybag/B = locate() in all_items
|
||||||
|
if(B)
|
||||||
|
var/target = text2num(target_name)
|
||||||
|
var/found_amount = 0.0
|
||||||
|
for(var/obj/item/weapon/coin/C in B)
|
||||||
|
found_amount++
|
||||||
|
return found_amount>=target
|
||||||
if("functional ai")
|
if("functional ai")
|
||||||
// world << "dude's after an AI, time to check for one."
|
// world << "dude's after an AI, time to check for one."
|
||||||
for(var/obj/item/device/aicard/C in all_items)
|
for(var/obj/item/device/aicard/C in all_items)
|
||||||
@@ -189,30 +277,81 @@ datum
|
|||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
for(var/obj/I in all_items)
|
for(var/obj/I in all_items)
|
||||||
if(I.type == steal_target)
|
if(istype(I, steal_target))
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
nuclear
|
download
|
||||||
explanation_text = "Destroy the station with a nuclear device."
|
proc/gen_amount_goal()
|
||||||
|
target_amount = rand(10,20)
|
||||||
absorb
|
explanation_text = "Download [target_amount] research levels."
|
||||||
var/num_to_eat //this is supposed to be semi-random but fuck it for now, this is alpha
|
return target_amount
|
||||||
|
|
||||||
proc/gen_num_to_eat() //this doesn't work -- should work now, changed it a bit -- Urist
|
|
||||||
num_to_eat = rand (4,6)
|
|
||||||
explanation_text = "Absorb [num_to_eat] compatible genomes."
|
|
||||||
return num_to_eat
|
|
||||||
|
|
||||||
check_completion()
|
check_completion()
|
||||||
if(owner && owner.current && owner.current.absorbed_dna && ((owner.current.absorbed_dna.len - 1) >= num_to_eat))
|
if(!ishuman(owner.current))
|
||||||
|
return 0
|
||||||
|
if(!owner.current || owner.current.stat == 2)
|
||||||
|
return 0
|
||||||
|
if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized))
|
||||||
|
return 0
|
||||||
|
var/current_amount
|
||||||
|
var/obj/item/clothing/suit/space/space_ninja/S = owner.current:wear_suit
|
||||||
|
if(!S.stored_research.len)
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
for(var/datum/tech/current_data in S.stored_research)
|
||||||
|
if(current_data.level>1) current_amount+=(current_data.level-1)
|
||||||
|
if(current_amount<target_amount) return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
capture
|
||||||
|
proc/gen_amount_goal()
|
||||||
|
target_amount = rand(5,10)
|
||||||
|
explanation_text = "Accumulate [target_amount] capture points."
|
||||||
|
return target_amount
|
||||||
|
|
||||||
|
check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
|
||||||
|
var/captured_amount = 0
|
||||||
|
var/area/centcom/holding/A = locate()
|
||||||
|
for(var/mob/living/carbon/human/M in A)//Humans.
|
||||||
|
if(M.stat==2)//Dead folks are worth less.
|
||||||
|
captured_amount+=0.5
|
||||||
|
continue
|
||||||
|
captured_amount+=1
|
||||||
|
for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure.
|
||||||
|
captured_amount+=0.1
|
||||||
|
for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research.
|
||||||
|
if(M.stat==2)
|
||||||
|
captured_amount+=0.5
|
||||||
|
continue
|
||||||
|
captured_amount+=1
|
||||||
|
for(var/mob/living/carbon/alien/humanoid/M in A)//Aliens are worth twice as much as humans.
|
||||||
|
if(istype(M, /mob/living/carbon/alien/humanoid/queen))//Queens are worth three times as much as humans.
|
||||||
|
if(M.stat==2)
|
||||||
|
captured_amount+=1.5
|
||||||
|
else
|
||||||
|
captured_amount+=3
|
||||||
|
continue
|
||||||
|
if(M.stat==2)
|
||||||
|
captured_amount+=1
|
||||||
|
continue
|
||||||
|
captured_amount+=2
|
||||||
|
if(captured_amount<target_amount)
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
absorb
|
||||||
|
proc/gen_amount_goal() //this doesn't work -- should work now, changed it a bit -- Urist
|
||||||
|
target_amount = rand (4,6)
|
||||||
|
explanation_text = "Absorb [target_amount] compatible genomes."
|
||||||
|
return target_amount
|
||||||
|
|
||||||
|
check_completion()
|
||||||
|
if(owner && owner.current && owner.current.absorbed_dna && ((owner.current.absorbed_dna.len - 1) >= target_amount))
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
//capture
|
|
||||||
//WIP
|
|
||||||
|
|
||||||
/* Isn't suited for global objectives
|
/* Isn't suited for global objectives
|
||||||
/*---------CULTIST----------*/
|
/*---------CULTIST----------*/
|
||||||
|
|
||||||
|
|||||||
@@ -257,21 +257,6 @@
|
|||||||
else
|
else
|
||||||
return candidates
|
return candidates
|
||||||
|
|
||||||
///////////////////////////////////
|
|
||||||
//Keeps track of all living heads//
|
|
||||||
///////////////////////////////////
|
|
||||||
/datum/game_mode/revolution/proc/get_living_heads()
|
|
||||||
var/list/heads = list()
|
|
||||||
|
|
||||||
for(var/mob/living/carbon/human/player in world)
|
|
||||||
if(player.mind)
|
|
||||||
var/role = player.mind.assigned_role
|
|
||||||
if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer"))
|
|
||||||
heads += player.mind
|
|
||||||
|
|
||||||
return heads
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
//Keeps track of all heads//
|
//Keeps track of all heads//
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
|
|||||||
@@ -153,7 +153,7 @@
|
|||||||
return candidates
|
return candidates
|
||||||
|
|
||||||
/datum/game_mode/traitor/declare_completion()
|
/datum/game_mode/traitor/declare_completion()
|
||||||
. = ..()
|
return//Traitors will be checked as part of check_extra_completion. Leaving this here as a reminder.
|
||||||
|
|
||||||
/datum/game_mode/traitor/proc/add_law_zero(mob/living/silicon/ai/killer)
|
/datum/game_mode/traitor/proc/add_law_zero(mob/living/silicon/ai/killer)
|
||||||
var/law = "Accomplish your objectives at all costs."
|
var/law = "Accomplish your objectives at all costs."
|
||||||
|
|||||||
@@ -523,6 +523,7 @@
|
|||||||
U.show_message("\red An error flashes on your [src].", 1)
|
U.show_message("\red An error flashes on your [src].", 1)
|
||||||
else if (prob(difficulty * 3))
|
else if (prob(difficulty * 3))
|
||||||
U.show_message("\red Energy feeds back into your [src]!", 1)
|
U.show_message("\red Energy feeds back into your [src]!", 1)
|
||||||
|
U << browse(null, "window=pda")
|
||||||
explode()
|
explode()
|
||||||
else
|
else
|
||||||
U.show_message("\blue Success!", 1)
|
U.show_message("\blue Success!", 1)
|
||||||
|
|||||||
@@ -12,159 +12,159 @@
|
|||||||
|
|
||||||
//Communicate with traitor through the PDA's note function.
|
//Communicate with traitor through the PDA's note function.
|
||||||
/obj/item/weapon/integrated_uplink/proc/print_to_host(var/text)
|
/obj/item/weapon/integrated_uplink/proc/print_to_host(var/text)
|
||||||
if (isnull(src.hostpda))
|
if (isnull(hostpda))
|
||||||
return
|
return
|
||||||
hostpda.note = text
|
hostpda.note = text
|
||||||
|
|
||||||
for (var/mob/M in viewers(1, src.hostpda.loc))
|
for (var/mob/M in viewers(1, hostpda.loc))
|
||||||
if (M.client && M.machine == src.hostpda)
|
if (M.client && M.machine == hostpda)
|
||||||
hostpda.attack_self(M)
|
hostpda.attack_self(M)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
//Let's build a menu!
|
//Let's build a menu!
|
||||||
/obj/item/weapon/integrated_uplink/proc/generate_menu()
|
/obj/item/weapon/integrated_uplink/proc/generate_menu()
|
||||||
src.menu_message = "<B>Syndicate Uplink Console:</B><BR>"
|
menu_message = "<B>Syndicate Uplink Console:</B><BR>"
|
||||||
src.menu_message += "Tele-Crystals left: [src.uses]<BR>"
|
menu_message += "Tele-Crystals left: [uses]<BR>"
|
||||||
src.menu_message += "<HR>"
|
menu_message += "<HR>"
|
||||||
src.menu_message += "<B>Request item:</B><BR>"
|
menu_message += "<B>Request item:</B><BR>"
|
||||||
src.menu_message += "<I>Each item costs a number of tele-crystals as indicated by the number following their name.</I><BR>"
|
menu_message += "<I>Each item costs a number of tele-crystals as indicated by the number following their name.</I><BR>"
|
||||||
src.menu_message += "<BR>"
|
menu_message += "<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=revolver'>Revolver</A> (6)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=revolver'>Revolver</A> (6)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=revolver_ammo'>Ammo-357</A> for use with Revolver (2)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=revolver_ammo'>Ammo-357</A> for use with Revolver (2)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=xbow'>Energy Crossbow</A> (5)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=xbow'>Energy Crossbow</A> (5)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=sword'>Energy Sword</A> (4)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=sword'>Energy Sword</A> (4)<BR>"
|
||||||
src.menu_message += "<BR>"
|
menu_message += "<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=jump'>Chameleon Jumpsuit</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=jump'>Chameleon Jumpsuit</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=card'>Syndicate Card</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=card'>Syndicate Card</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=voice'>Voice-Changer</A> (4)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=voice'>Voice-Changer</A> (4)<BR>"
|
||||||
src.menu_message += "<BR>"
|
menu_message += "<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=imp_freedom'>Freedom Implant (with injector)</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=imp_freedom'>Freedom Implant (with injector)</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=paralysispen'>Paralysis Pen</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=paralysispen'>Paralysis Pen</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (5)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (5)<BR>"
|
||||||
src.menu_message += "<BR>"
|
menu_message += "<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=detomatix'>Detomatix Cartridge</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=detomatix'>Detomatix Cartridge</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=bomb'>Plastic Explosives</A> (2)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=bomb'>Plastic Explosives</A> (2)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=powersink'>Power Sink</A> (5)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=powersink'>Power Sink</A> (5)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=space'>Syndicate-made Space Suit (inludes a helmet)</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=space'>Syndicate-made Space Suit (inludes a helmet)</A> (3)<BR>"
|
||||||
src.menu_message += "<BR>"
|
menu_message += "<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=projector'>Chameleon-projector</A> (4)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=projector'>Chameleon-projector</A> (4)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=cloak'>Cloaking Device</A> (4)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=cloak'>Cloaking Device</A> (4)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=emag'>Electromagnet Card</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=emag'>Electromagnet Card</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=empbox'>5 EMP Grenades</A> (4)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=empbox'>5 EMP Grenades</A> (4)<BR>"
|
||||||
src.menu_message += "<BR>"
|
menu_message += "<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=botchat'>Binary Translator</A> (3)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=botchat'>Binary Translator</A> (3)<BR>"
|
||||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=lawmod'>Hacked AI Module</A> (7)<BR>"
|
menu_message += "<A href='byond://?src=\ref[src];buy_item=lawmod'>Hacked AI Module</A> (7)<BR>"
|
||||||
|
|
||||||
src.menu_message += "<HR>"
|
menu_message += "<HR>"
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/integrated_uplink/proc/unlock()
|
/obj/item/weapon/integrated_uplink/proc/unlock()
|
||||||
if ((isnull(src.hostpda)) || (src.active))
|
if ((isnull(hostpda)) || (active))
|
||||||
return
|
return
|
||||||
|
|
||||||
src.orignote = src.hostpda.note
|
orignote = hostpda.note
|
||||||
src.active = 1
|
active = 1
|
||||||
src.hostpda.mode = 1 //Switch right to the notes program
|
hostpda.mode = 1 //Switch right to the notes program
|
||||||
|
|
||||||
src.generate_menu()
|
generate_menu()
|
||||||
src.print_to_host(src.menu_message)
|
print_to_host(menu_message)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/integrated_uplink/Topic(href, href_list)
|
/obj/item/weapon/integrated_uplink/Topic(href, href_list)
|
||||||
if ((isnull(src.hostpda)) || (!src.active))
|
if ((isnull(hostpda)) || (!active))
|
||||||
return
|
return
|
||||||
|
|
||||||
if (usr.stat || usr.restrained() || !in_range(src.hostpda, usr))
|
if (usr.stat || usr.restrained() || !in_range(hostpda, usr))
|
||||||
return
|
return
|
||||||
|
|
||||||
if (href_list["buy_item"])
|
if (href_list["buy_item"])
|
||||||
switch(href_list["buy_item"])
|
switch(href_list["buy_item"])
|
||||||
if("revolver")
|
if("revolver")
|
||||||
if (src.uses >= 6)
|
if (uses >= 6)
|
||||||
src.uses -= 6
|
uses -= 6
|
||||||
new /obj/item/weapon/gun/projectile(get_turf(src.hostpda))
|
new /obj/item/weapon/gun/projectile(get_turf(hostpda))
|
||||||
if("revolver_ammo")
|
if("revolver_ammo")
|
||||||
if (src.uses >= 2)
|
if (uses >= 2)
|
||||||
src.uses -= 2
|
uses -= 2
|
||||||
new /obj/item/ammo_magazine(get_turf(src.hostpda))
|
new /obj/item/ammo_magazine(get_turf(hostpda))
|
||||||
if("xbow")
|
if("xbow")
|
||||||
if (src.uses >= 5)
|
if (uses >= 5)
|
||||||
src.uses -= 5
|
uses -= 5
|
||||||
new /obj/item/weapon/gun/energy/crossbow(get_turf(src.hostpda))
|
new /obj/item/weapon/gun/energy/crossbow(get_turf(hostpda))
|
||||||
if("empbox")
|
if("empbox")
|
||||||
if (src.uses >= 4)
|
if (uses >= 4)
|
||||||
src.uses -= 4
|
uses -= 4
|
||||||
new /obj/item/weapon/storage/emp_kit(get_turf(src.hostpda))
|
new /obj/item/weapon/storage/emp_kit(get_turf(hostpda))
|
||||||
if("voice")
|
if("voice")
|
||||||
if (src.uses >= 4)
|
if (uses >= 4)
|
||||||
src.uses -= 4
|
uses -= 4
|
||||||
new /obj/item/clothing/mask/gas/voice(get_turf(src.hostpda))
|
new /obj/item/clothing/mask/gas/voice(get_turf(hostpda))
|
||||||
if("jump")
|
if("jump")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/clothing/under/chameleon(get_turf(src.hostpda))
|
new /obj/item/clothing/under/chameleon(get_turf(hostpda))
|
||||||
if("card")
|
if("card")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/weapon/card/id/syndicate(get_turf(src.hostpda))
|
new /obj/item/weapon/card/id/syndicate(get_turf(hostpda))
|
||||||
if("emag")
|
if("emag")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/weapon/card/emag(get_turf(src.hostpda))
|
new /obj/item/weapon/card/emag(get_turf(hostpda))
|
||||||
if("imp_freedom")
|
if("imp_freedom")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(src.hostpda))
|
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
|
||||||
O.imp = new /obj/item/weapon/implant/freedom(O)
|
O.imp = new /obj/item/weapon/implant/freedom(O)
|
||||||
if("sleepypen")
|
if("sleepypen")
|
||||||
if (src.uses >= 5)
|
if (uses >= 5)
|
||||||
src.uses -= 5
|
uses -= 5
|
||||||
new /obj/item/weapon/pen/sleepypen(get_turf(src.hostpda))
|
new /obj/item/weapon/pen/sleepypen(get_turf(hostpda))
|
||||||
if("paralysispen")
|
if("paralysispen")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/device/flashlight/pen/paralysis(get_turf(src.hostpda))
|
new /obj/item/device/flashlight/pen/paralysis(get_turf(hostpda))
|
||||||
if("projector")
|
if("projector")
|
||||||
if (src.uses >= 4)
|
if (uses >= 4)
|
||||||
src.uses -= 4
|
uses -= 4
|
||||||
new /obj/item/device/chameleon(get_turf(src.hostpda))
|
new /obj/item/device/chameleon(get_turf(hostpda))
|
||||||
if("cloak")
|
if("cloak")
|
||||||
if (src.uses >= 4)
|
if (uses >= 4)
|
||||||
src.uses -= 4
|
uses -= 4
|
||||||
new /obj/item/weapon/cloaking_device(get_turf(src.hostpda))
|
new /obj/item/weapon/cloaking_device(get_turf(hostpda))
|
||||||
if("sword")
|
if("sword")
|
||||||
if (src.uses >= 4)
|
if (uses >= 4)
|
||||||
src.uses -= 4
|
uses -= 4
|
||||||
new /obj/item/weapon/sword(get_turf(src.hostpda))
|
new /obj/item/weapon/sword(get_turf(hostpda))
|
||||||
if("bomb")
|
if("bomb")
|
||||||
if (src.uses >= 2)
|
if (uses >= 2)
|
||||||
src.uses -= 2
|
uses -= 2
|
||||||
new /obj/item/weapon/plastique(get_turf(src.hostpda))
|
new /obj/item/weapon/plastique(get_turf(hostpda))
|
||||||
if("powersink")
|
if("powersink")
|
||||||
if (src.uses >= 5)
|
if (uses >= 5)
|
||||||
src.uses -= 5
|
uses -= 5
|
||||||
new /obj/item/device/powersink(get_turf(src.hostpda))
|
new /obj/item/device/powersink(get_turf(hostpda))
|
||||||
if("detomatix")
|
if("detomatix")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/weapon/cartridge/syndicate(get_turf(src.hostpda))
|
new /obj/item/weapon/cartridge/syndicate(get_turf(hostpda))
|
||||||
if("space")
|
if("space")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/clothing/suit/space/syndicate(get_turf(src.hostpda))
|
new /obj/item/clothing/suit/space/syndicate(get_turf(hostpda))
|
||||||
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(src.hostpda))
|
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(hostpda))
|
||||||
if("lawmod")
|
if("lawmod")
|
||||||
if (src.uses >= 7)
|
if (uses >= 7)
|
||||||
src.uses -= 7
|
uses -= 7
|
||||||
new /obj/item/weapon/aiModule/syndicate(get_turf(src.hostpda))
|
new /obj/item/weapon/aiModule/syndicate(get_turf(hostpda))
|
||||||
if("botchat")
|
if("botchat")
|
||||||
if (src.uses >= 3)
|
if (uses >= 3)
|
||||||
src.uses -= 3
|
uses -= 3
|
||||||
new /obj/item/device/radio/headset/traitor(get_turf(src.hostpda))
|
new /obj/item/device/radio/headset/traitor(get_turf(hostpda))
|
||||||
|
|
||||||
src.generate_menu()
|
generate_menu()
|
||||||
src.print_to_host(src.menu_message)
|
print_to_host(menu_message)
|
||||||
return
|
return
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -28,6 +28,10 @@ Frequency:
|
|||||||
..()
|
..()
|
||||||
if (usr.stat || usr.restrained())
|
if (usr.stat || usr.restrained())
|
||||||
return
|
return
|
||||||
|
var/turf/current_location = locate(usr.x,usr.y,usr.z)//Can't teleport on clown-planet z-level.
|
||||||
|
if(current_location.z==6)
|
||||||
|
usr << "The [src] is malfunctioning."
|
||||||
|
return
|
||||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||||
usr.machine = src
|
usr.machine = src
|
||||||
if (href_list["refresh"])
|
if (href_list["refresh"])
|
||||||
@@ -96,13 +100,13 @@ Frequency:
|
|||||||
src.attack_self(M)
|
src.attack_self(M)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// HAND TELE
|
/// HAND TELE
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
|
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
|
||||||
|
var/turf/current_location = locate(usr.x,user.y,usr.z)//Can't teleport on clown-planet z-level.
|
||||||
|
if(current_location.z==6)
|
||||||
|
user << "The [src] is malfunctioning."
|
||||||
|
return
|
||||||
var/list/L = list( )
|
var/list/L = list( )
|
||||||
for(var/obj/machinery/teleport/hub/R in world)
|
for(var/obj/machinery/teleport/hub/R in world)
|
||||||
var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z))
|
var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z))
|
||||||
@@ -116,8 +120,6 @@ Frequency:
|
|||||||
if(T.x>world.maxx-4 || T.x<4) continue //putting them at the edge is dumb
|
if(T.x>world.maxx-4 || T.x<4) continue //putting them at the edge is dumb
|
||||||
if(T.y>world.maxy-4 || T.y<4) continue
|
if(T.y>world.maxy-4 || T.y<4) continue
|
||||||
turfs += T
|
turfs += T
|
||||||
var/turf/current_location = locate(user.x,user.y,user.z)//Can't teleport randomly on clown-planet z-level.
|
|
||||||
if(turfs&¤t_location.z!=6)//Which is z level 6.
|
|
||||||
L["None (Dangerous)"] = pick(turfs)
|
L["None (Dangerous)"] = pick(turfs)
|
||||||
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L
|
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L
|
||||||
if ((user.equipped() != src || user.stat || user.restrained()))
|
if ((user.equipped() != src || user.stat || user.restrained()))
|
||||||
|
|||||||
@@ -1167,6 +1167,10 @@ var/showadminmessages = 1
|
|||||||
if(aliens_allowed)
|
if(aliens_allowed)
|
||||||
alien_infestation()
|
alien_infestation()
|
||||||
message_admins("[key_name_admin(usr)] has spawned aliens", 1)
|
message_admins("[key_name_admin(usr)] has spawned aliens", 1)
|
||||||
|
if("spaceninja")
|
||||||
|
if(toggle_space_ninja)
|
||||||
|
if(space_ninja_arrival())//If the ninja is actually spawned. They may not be depending on a few factors.
|
||||||
|
message_admins("[key_name_admin(usr)] has sent in a space ninja", 1)
|
||||||
if("carp")
|
if("carp")
|
||||||
var/choice = input("You sure you want to spawn carp?") in list("Badmin", "Cancel")
|
var/choice = input("You sure you want to spawn carp?") in list("Badmin", "Cancel")
|
||||||
if(choice == "Badmin")
|
if(choice == "Badmin")
|
||||||
@@ -1329,7 +1333,7 @@ var/showadminmessages = 1
|
|||||||
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||||
dat += "<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td></tr>"
|
dat += "<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td></tr>"
|
||||||
dat += "</table><table cellspacing=5><tr><td><B>Target(s)</B></td><td></td><td><B>Location</B></td></tr>"
|
dat += "</table><table cellspacing=5><tr><td><B>Target(s)</B></td><td></td><td><B>Location</B></td></tr>"
|
||||||
for(var/datum/mind/N in ticker.mode:get_living_heads())
|
for(var/datum/mind/N in ticker.mode.get_living_heads())
|
||||||
var/mob/M = N.current
|
var/mob/M = N.current
|
||||||
if(M)
|
if(M)
|
||||||
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||||
@@ -1657,6 +1661,7 @@ var/showadminmessages = 1
|
|||||||
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
|
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=goblob'>Spawn magma(Untested)</A><BR>
|
<A href='?src=\ref[src];secretsfun=goblob'>Spawn magma(Untested)</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
|
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
|
||||||
|
<A href='?src=\ref[src];secretsfun=spaceninja'>Send in a space ninja</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
|
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
|
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
|
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
|
||||||
@@ -1952,6 +1957,14 @@ var/showadminmessages = 1
|
|||||||
log_admin("[key_name(usr)] toggled Aliens to [aliens_allowed].")
|
log_admin("[key_name(usr)] toggled Aliens to [aliens_allowed].")
|
||||||
message_admins("[key_name_admin(usr)] toggled Aliens [aliens_allowed ? "on" : "off"].", 1)
|
message_admins("[key_name_admin(usr)] toggled Aliens [aliens_allowed ? "on" : "off"].", 1)
|
||||||
|
|
||||||
|
/obj/admins/proc/toggle_space_ninja()
|
||||||
|
set category = "Server"
|
||||||
|
set desc="Toggle space ninjas spawning."
|
||||||
|
set name="Toggle Space Ninjas"
|
||||||
|
toggle_space_ninja = !toggle_space_ninja
|
||||||
|
log_admin("[key_name(usr)] toggled Space Ninjas to [toggle_space_ninja].")
|
||||||
|
message_admins("[key_name_admin(usr)] toggled Space Ninjas [toggle_space_ninja ? "on" : "off"].", 1)
|
||||||
|
|
||||||
/obj/admins/proc/delay()
|
/obj/admins/proc/delay()
|
||||||
set category = "Server"
|
set category = "Server"
|
||||||
set desc="Delay the game start"
|
set desc="Delay the game start"
|
||||||
|
|||||||
@@ -41,7 +41,8 @@
|
|||||||
verbs += /obj/admins/proc/toggleooc //toggle ooc
|
verbs += /obj/admins/proc/toggleooc //toggle ooc
|
||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
verbs += /obj/admins/proc/toggle_aliens
|
verbs += /obj/admins/proc/toggle_aliens //toggle aliens
|
||||||
|
verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -188,6 +189,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -324,6 +326,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -482,6 +485,7 @@
|
|||||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -630,6 +634,7 @@
|
|||||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
//verbs += /proc/toggle_adminmsg
|
//verbs += /proc/toggle_adminmsg
|
||||||
@@ -774,6 +779,7 @@
|
|||||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
//verbs += /proc/toggle_adminmsg
|
//verbs += /proc/toggle_adminmsg
|
||||||
@@ -901,6 +907,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -1060,6 +1067,7 @@
|
|||||||
verbs -= /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs -= /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs -= /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs -= /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
verbs -= /obj/admins/proc/toggle_aliens
|
verbs -= /obj/admins/proc/toggle_aliens
|
||||||
|
verbs -= /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs -= /obj/admins/proc/voteres //toggle votes
|
verbs -= /obj/admins/proc/voteres //toggle votes
|
||||||
verbs -= /client/proc/deadchat //toggles deadchat
|
verbs -= /client/proc/deadchat //toggles deadchat
|
||||||
verbs -= /proc/toggle_adminmsg
|
verbs -= /proc/toggle_adminmsg
|
||||||
@@ -1496,6 +1504,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
verbs += /obj/admins/proc/toggle_aliens
|
verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -1527,6 +1536,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -1558,6 +1568,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -1596,6 +1607,7 @@
|
|||||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -1634,6 +1646,7 @@
|
|||||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
@@ -1660,6 +1673,7 @@
|
|||||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
//verbs += /proc/toggle_adminmsg
|
//verbs += /proc/toggle_adminmsg
|
||||||
@@ -1691,6 +1705,7 @@
|
|||||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||||
//verbs += /obj/admins/proc/toggle_aliens
|
//verbs += /obj/admins/proc/toggle_aliens
|
||||||
|
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||||
verbs += /obj/admins/proc/voteres //toggle votes
|
verbs += /obj/admins/proc/voteres //toggle votes
|
||||||
verbs += /client/proc/deadchat //toggles deadchat
|
verbs += /client/proc/deadchat //toggles deadchat
|
||||||
verbs += /proc/toggle_adminmsg
|
verbs += /proc/toggle_adminmsg
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ var/global/sent_strike_team = 0
|
|||||||
//Creates mind stuff.
|
//Creates mind stuff.
|
||||||
new_commando.mind = new
|
new_commando.mind = new
|
||||||
new_commando.mind.current = new_commando
|
new_commando.mind.current = new_commando
|
||||||
|
new_commando.mind.original = new_commando
|
||||||
new_commando.mind.assigned_role = "MODE"
|
new_commando.mind.assigned_role = "MODE"
|
||||||
new_commando.mind.special_role = "Death Commando"
|
new_commando.mind.special_role = "Death Commando"
|
||||||
if(!(new_commando.mind in ticker.minds))
|
if(!(new_commando.mind in ticker.minds))
|
||||||
|
|||||||
@@ -9,10 +9,13 @@
|
|||||||
if (copytext(message, 1, 3) == ":a")
|
if (copytext(message, 1, 3) == ":a")
|
||||||
message = copytext(message, 3)
|
message = copytext(message, 3)
|
||||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||||
src.alien_talk(message)
|
if (stat == 2)
|
||||||
|
return say_dead(message)
|
||||||
else
|
else
|
||||||
if (copytext(message, 1, 2) != "*" && !src.stat)
|
alien_talk(message)
|
||||||
playsound(src.loc, "hiss", 25, 1, 1)//So aliens can hiss while they hiss yo/N
|
else
|
||||||
|
if (copytext(message, 1, 2) != "*" && !stat)
|
||||||
|
playsound(loc, "hiss", 25, 1, 1)//So aliens can hiss while they hiss yo/N
|
||||||
return ..(message)
|
return ..(message)
|
||||||
else
|
else
|
||||||
|
|
||||||
@@ -20,7 +23,7 @@
|
|||||||
/mob/living/carbon/alien/say_quote(var/text)
|
/mob/living/carbon/alien/say_quote(var/text)
|
||||||
// var/ending = copytext(text, length(text))
|
// var/ending = copytext(text, length(text))
|
||||||
|
|
||||||
return "[src.say_message], \"[text]\"";
|
return "[say_message], \"[text]\"";
|
||||||
|
|
||||||
/mob/living/proc/alien_talk(var/message)
|
/mob/living/proc/alien_talk(var/message)
|
||||||
|
|
||||||
@@ -30,12 +33,12 @@
|
|||||||
if (!message)
|
if (!message)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/message_a = src.say_quote(message)
|
var/message_a = say_quote(message)
|
||||||
var/rendered = "<i><span class='game say'>Hivemind, <span class='name'>[src.name]</span> <span class='message'>[message_a]</span></span></i>"
|
var/rendered = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
|
||||||
for (var/mob/living/S in world)
|
for (var/mob/living/S in world)
|
||||||
if(!S.stat)
|
if(!S.stat)
|
||||||
if(S.alien_talk_understand)
|
if(S.alien_talk_understand)
|
||||||
if(S.alien_talk_understand == src.alien_talk_understand)
|
if(S.alien_talk_understand == alien_talk_understand)
|
||||||
S.show_message(rendered, 2)
|
S.show_message(rendered, 2)
|
||||||
else if (S.hivecheck())
|
else if (S.hivecheck())
|
||||||
S.show_message(rendered, 2)
|
S.show_message(rendered, 2)
|
||||||
@@ -54,17 +57,17 @@
|
|||||||
var/message_b
|
var/message_b
|
||||||
|
|
||||||
message_b = "hsssss"
|
message_b = "hsssss"
|
||||||
message_b = src.say_quote(message_b)
|
message_b = say_quote(message_b)
|
||||||
message_b = "<i>[message_b]</i>"
|
message_b = "<i>[message_b]</i>"
|
||||||
|
|
||||||
rendered = "<i><span class='game say'><span class='name'>[src.voice_name]</span> <span class='message'>[message_b]</span></span></i>"
|
rendered = "<i><span class='game say'><span class='name'>[voice_name]</span> <span class='message'>[message_b]</span></span></i>"
|
||||||
|
|
||||||
for (var/mob/M in heard)
|
for (var/mob/M in heard)
|
||||||
M.show_message(rendered, 2)
|
M.show_message(rendered, 2)
|
||||||
|
|
||||||
message = src.say_quote(message)
|
message = say_quote(message)
|
||||||
|
|
||||||
rendered = "<i><span class='game say'>Hivemind, <span class='name'>[src.name]</span> <span class='message'>[message_a]</span></span></i>"
|
rendered = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
|
||||||
|
|
||||||
for (var/mob/M in world)
|
for (var/mob/M in world)
|
||||||
if (istype(M, /mob/new_player))
|
if (istype(M, /mob/new_player))
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
/mob/living/silicon/ai/death(gibbed)
|
/mob/living/silicon/ai/death(gibbed)
|
||||||
var/cancel
|
var/cancel
|
||||||
src.stat = 2
|
stat = 2
|
||||||
src.canmove = 0
|
canmove = 0
|
||||||
if(src.blind)
|
if(blind)
|
||||||
src.blind.layer = 0
|
blind.layer = 0
|
||||||
src.sight |= SEE_TURFS
|
sight |= SEE_TURFS
|
||||||
src.sight |= SEE_MOBS
|
sight |= SEE_MOBS
|
||||||
src.sight |= SEE_OBJS
|
sight |= SEE_OBJS
|
||||||
src.see_in_dark = 8
|
see_in_dark = 8
|
||||||
src.see_invisible = 2
|
see_invisible = 2
|
||||||
src.icon_state = "ai-crash"
|
icon_state = "ai-crash"
|
||||||
|
|
||||||
var/callshuttle = 0
|
var/callshuttle = 0
|
||||||
|
|
||||||
@@ -41,18 +41,14 @@
|
|||||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||||
spawn( 0 )
|
spawn( 0 )
|
||||||
O.mode = 2
|
O.mode = 2
|
||||||
if (istype(src.loc, /obj/item/device/aicard))
|
if (istype(loc, /obj/item/device/aicard))
|
||||||
src.loc.icon_state = "aicard-404"
|
loc.icon_state = "aicard-404"
|
||||||
|
|
||||||
if(ticker.mode.name == "AI malfunction")
|
if(ticker.mode.name == "AI malfunction")
|
||||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||||
for(var/datum/mind/AI_mind in malf.malf_ai)
|
for(var/datum/mind/AI_mind in malf.malf_ai)
|
||||||
if (src.mind == AI_mind)
|
if (mind == AI_mind)
|
||||||
world << "<FONT size = 3><B>Human Victory</B></FONT>"
|
ticker.mode.declare_completion()
|
||||||
world << "<B>The AI has been killed!</B> The staff is victorious."
|
|
||||||
sleep(100)
|
|
||||||
world << "\blue Rebooting due to end of game"
|
|
||||||
world.Reboot()
|
|
||||||
|
|
||||||
var/tod = time2text(world.realtime,"hh:mm:ss") //weasellos time of death patch
|
var/tod = time2text(world.realtime,"hh:mm:ss") //weasellos time of death patch
|
||||||
mind.store_memory("Time of death: [tod]", 0)
|
mind.store_memory("Time of death: [tod]", 0)
|
||||||
@@ -67,8 +63,8 @@
|
|||||||
log_game("Rebooting because of no live players")
|
log_game("Rebooting because of no live players")
|
||||||
world.Reboot()
|
world.Reboot()
|
||||||
return
|
return
|
||||||
if (src.key)
|
if (key)
|
||||||
spawn(50)
|
spawn(50)
|
||||||
if(src.key && src.stat == 2)
|
if(key && stat == 2)
|
||||||
src.verbs += /mob/proc/ghost
|
verbs += /mob/proc/ghost
|
||||||
return ..(gibbed)
|
return ..(gibbed)
|
||||||
@@ -282,6 +282,8 @@ mob/new_player
|
|||||||
AnnounceArrival(character, rank)
|
AnnounceArrival(character, rank)
|
||||||
if(character.mind.assigned_role == "Cyborg")
|
if(character.mind.assigned_role == "Cyborg")
|
||||||
character.Robotize()
|
character.Robotize()
|
||||||
|
else//Adds late joiners to minds so they can be linked to objectives.
|
||||||
|
ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc.
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -67,7 +67,6 @@
|
|||||||
invisibility = 101
|
invisibility = 101
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
|
||||||
/mob/proc/AIize()
|
/mob/proc/AIize()
|
||||||
if(client)
|
if(client)
|
||||||
client.screen.len = null
|
client.screen.len = null
|
||||||
@@ -82,9 +81,13 @@
|
|||||||
else
|
else
|
||||||
O.mind = new
|
O.mind = new
|
||||||
O.mind.current = O
|
O.mind.current = O
|
||||||
|
O.mind.original = O
|
||||||
O.mind.assigned_role = "AI"
|
O.mind.assigned_role = "AI"
|
||||||
O.key = key
|
O.key = key
|
||||||
|
|
||||||
|
if(!(O.mind in ticker.minds))
|
||||||
|
ticker.minds += O.mind//Adds them to regular mind list.
|
||||||
|
|
||||||
var/obj/loc_landmark
|
var/obj/loc_landmark
|
||||||
for(var/obj/landmark/start/sloc in world)
|
for(var/obj/landmark/start/sloc in world)
|
||||||
if (sloc.name != "AI")
|
if (sloc.name != "AI")
|
||||||
@@ -179,14 +182,16 @@
|
|||||||
if (mind.assigned_role == "Cyborg")
|
if (mind.assigned_role == "Cyborg")
|
||||||
mind.original = O
|
mind.original = O
|
||||||
else if (mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
|
else if (mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
|
||||||
|
|
||||||
else
|
else
|
||||||
mind = new /datum/mind( )
|
mind = new /datum/mind( )
|
||||||
mind.key = key
|
mind.key = key
|
||||||
mind.current = O
|
mind.current = O
|
||||||
mind.original = O
|
mind.original = O
|
||||||
mind.transfer_to(O)
|
mind.transfer_to(O)
|
||||||
//ticker.minds += O.mind//Robutts aren't added to minds since it would be screwy. Assassinate that robot!
|
|
||||||
|
if(!(O.mind in ticker.minds))
|
||||||
|
ticker.minds += O.mind//Adds them to regular mind list.
|
||||||
|
|
||||||
O.loc = loc
|
O.loc = loc
|
||||||
O << "<B>You are playing a Robot. A Robot can interact with most electronic objects in its view point.</B>"
|
O << "<B>You are playing a Robot. A Robot can interact with most electronic objects in its view point.</B>"
|
||||||
O << "<B>You must follow the laws that the AI has. You are the AI's assistant to the station basically.</B>"
|
O << "<B>You must follow the laws that the AI has. You are the AI's assistant to the station basically.</B>"
|
||||||
|
|||||||
@@ -35,7 +35,6 @@
|
|||||||
#define FILE_DIR "code/game/gamemodes/cult"
|
#define FILE_DIR "code/game/gamemodes/cult"
|
||||||
#define FILE_DIR "code/game/gamemodes/events"
|
#define FILE_DIR "code/game/gamemodes/events"
|
||||||
#define FILE_DIR "code/game/gamemodes/extended"
|
#define FILE_DIR "code/game/gamemodes/extended"
|
||||||
#define FILE_DIR "code/game/gamemodes/extra"
|
|
||||||
#define FILE_DIR "code/game/gamemodes/malfunction"
|
#define FILE_DIR "code/game/gamemodes/malfunction"
|
||||||
#define FILE_DIR "code/game/gamemodes/meteor"
|
#define FILE_DIR "code/game/gamemodes/meteor"
|
||||||
#define FILE_DIR "code/game/gamemodes/nuclear"
|
#define FILE_DIR "code/game/gamemodes/nuclear"
|
||||||
@@ -331,10 +330,10 @@
|
|||||||
#include "code\game\gamemodes\cult\cult.dm"
|
#include "code\game\gamemodes\cult\cult.dm"
|
||||||
#include "code\game\gamemodes\events\clang.dm"
|
#include "code\game\gamemodes\events\clang.dm"
|
||||||
#include "code\game\gamemodes\events\dust.dm"
|
#include "code\game\gamemodes\events\dust.dm"
|
||||||
|
#include "code\game\gamemodes\events\ninja_abilities.dm"
|
||||||
|
#include "code\game\gamemodes\events\ninja_equipment.dm"
|
||||||
|
#include "code\game\gamemodes\events\space_ninja.dm"
|
||||||
#include "code\game\gamemodes\extended\extended.dm"
|
#include "code\game\gamemodes\extended\extended.dm"
|
||||||
#include "code\game\gamemodes\extra\ninja_abilities.dm"
|
|
||||||
#include "code\game\gamemodes\extra\ninja_equipment.dm"
|
|
||||||
#include "code\game\gamemodes\extra\space_ninja.dm"
|
|
||||||
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
|
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
|
||||||
#include "code\game\gamemodes\malfunction\malfunction.dm"
|
#include "code\game\gamemodes\malfunction\malfunction.dm"
|
||||||
#include "code\game\gamemodes\meteor\meteor.dm"
|
#include "code\game\gamemodes\meteor\meteor.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user