mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-22 08:01:16 +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
|
||||
|
||||
else if (href_list["obj_edit"] || href_list["obj_add"])
|
||||
var/datum/objective/objective = null
|
||||
var/objective_pos = null
|
||||
var/def_value = null
|
||||
var/datum/objective/objective
|
||||
var/objective_pos
|
||||
var/def_value
|
||||
|
||||
if (href_list["obj_edit"])
|
||||
objective = locate(href_list["obj_edit"])
|
||||
if (!objective) return
|
||||
objective_pos = objectives.Find(objective)
|
||||
|
||||
if (istype(objective, /datum/objective/assassinate))
|
||||
def_value = "assassinate"
|
||||
else if (istype(objective, /datum/objective/hijack))
|
||||
def_value = "hijack"
|
||||
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))
|
||||
//Text strings are easy to manipulate. Revised for simplicity.
|
||||
var/temp_obj_type = "[objective.type]"//Convert path into a text string.
|
||||
def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword.
|
||||
if(!def_value)//If it's a custom objective, it will be an empty string.
|
||||
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
|
||||
|
||||
var/datum/objective/new_objective = null
|
||||
|
||||
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")
|
||||
for(var/datum/mind/possible_target in ticker.minds)
|
||||
if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
|
||||
possible_targets += possible_target.current
|
||||
|
||||
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
|
||||
|
||||
var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
|
||||
if (!new_target) return
|
||||
|
||||
var/objective_path = text2path("/datum/objective/[new_obj_type]")
|
||||
if (new_target == "Free objective")
|
||||
new_objective = new /datum/objective/assassinate
|
||||
new_objective = new objective_path
|
||||
new_objective.owner = src
|
||||
new_objective:target = null
|
||||
new_objective.explanation_text = "Free objective"
|
||||
else
|
||||
new_objective = new /datum/objective/assassinate
|
||||
new_objective = new objective_path
|
||||
new_objective.owner = src
|
||||
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")
|
||||
new_objective = new /datum/objective/hijack
|
||||
@@ -228,6 +218,10 @@ datum/mind
|
||||
new_objective = new /datum/objective/survive
|
||||
new_objective.owner = src
|
||||
|
||||
if ("nuclear")
|
||||
new_objective = new /datum/objective/nuclear
|
||||
new_objective.owner = src
|
||||
|
||||
if ("steal")
|
||||
if (!istype(objective, /datum/objective/steal))
|
||||
new_objective = new /datum/objective/steal
|
||||
@@ -238,22 +232,27 @@ datum/mind
|
||||
if (!steal.select_target())
|
||||
return
|
||||
|
||||
if ("nuclear")
|
||||
new_objective = new /datum/objective/nuclear
|
||||
new_objective.owner = src
|
||||
if("download","capture","absorb")
|
||||
var/def_num
|
||||
if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]"))
|
||||
def_num = objective.target_amount
|
||||
|
||||
if ("absorb")
|
||||
var/def_num = null
|
||||
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))
|
||||
var/target_number = input("Input target number:", "Objective", def_num) as num|null
|
||||
if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist.
|
||||
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.explanation_text = "Absorb [target_number] compatible genomes."
|
||||
new_objective.owner = src
|
||||
new_objective:num_to_eat = num_to_eat
|
||||
new_objective.explanation_text = "Absorb [num_to_eat] compatible genomes."
|
||||
new_objective.target_amount = target_number
|
||||
|
||||
if ("custom")
|
||||
var/expl = input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
name += " "
|
||||
|
||||
// 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)
|
||||
name += " "
|
||||
|
||||
// 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 += " "
|
||||
|
||||
// ID Number
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
var/datum/objective/absorb/absorb_objective = new
|
||||
absorb_objective.owner = changeling
|
||||
absorb_objective.gen_num_to_eat()
|
||||
absorb_objective.gen_amount_goal()
|
||||
changeling.objectives += absorb_objective
|
||||
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
var/datum/objective/absorb/absorb_objective = new
|
||||
absorb_objective.owner = changeling
|
||||
absorb_objective.gen_num_to_eat()
|
||||
absorb_objective.gen_amount_goal()
|
||||
changeling.objectives += absorb_objective
|
||||
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
var/datum/objective/absorb/absorb_objective = new
|
||||
absorb_objective.owner = changeling
|
||||
absorb_objective.gen_num_to_eat()
|
||||
absorb_objective.gen_amount_goal()
|
||||
changeling.objectives += absorb_objective
|
||||
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/proc/event()
|
||||
event = 1
|
||||
|
||||
switch(pick(1,2,4,5,6,7,8,9,10,11))
|
||||
switch(rand(1,11))
|
||||
if(1)
|
||||
command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert")
|
||||
world << sound('meteors.ogg')
|
||||
@@ -31,7 +31,7 @@
|
||||
var/obj/bhole/bh = new /obj/bhole( T.loc, 30 )
|
||||
spawn(rand(50, 300))
|
||||
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
|
||||
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
|
||||
world << sound('spanomalies.ogg')
|
||||
@@ -53,6 +53,10 @@
|
||||
P.name = "wormhole"
|
||||
spawn(rand(300,600))
|
||||
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)
|
||||
command_alert("Confirmed anomaly type SPC-MGM-152 aboard [station_name()]. All personnel must destroy the anomaly.", "Anomaly Alert")
|
||||
world << sound('outbreak5.ogg')
|
||||
|
||||
@@ -282,7 +282,6 @@ Movement impairing would indicate drugs and the like.*/
|
||||
s_coold = 3
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
===================================================================================
|
||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<KAMIKAZE MODE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
@@ -240,10 +240,8 @@ ________________________________________________________________________________
|
||||
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>"
|
||||
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>"
|
||||
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=Close'><img src=sos_8.png> Close</a>"
|
||||
dat += "<br>"
|
||||
@@ -413,16 +411,16 @@ ________________________________________________________________________________
|
||||
dat += "Stored AI: <b>[A.name]</b><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++)
|
||||
var/law = A.laws.ion[index]
|
||||
if (length(law) > 0)
|
||||
var/num = ionnum()
|
||||
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
|
||||
for (var/index = 1, index <= A.laws.inherent.len, index++)
|
||||
var/law = A.laws.inherent[index]
|
||||
@@ -462,7 +460,7 @@ ________________________________________________________________________________
|
||||
if(t_disk)
|
||||
dat += "<a href='byond://?src=\ref[src];choice=Eject Disk'>Eject Disk</a><br>"
|
||||
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)
|
||||
dat += "<li>"
|
||||
dat += "[current_data.name]: [current_data.level]"
|
||||
@@ -824,7 +822,7 @@ ________________________________________________________________________________
|
||||
else if(istype(I, /obj/item/weapon/cell))
|
||||
if(I:maxcharge>cell.maxcharge)
|
||||
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()
|
||||
I.loc = src
|
||||
I:charge = min(I:charge+cell.charge, I:maxcharge)
|
||||
@@ -1059,19 +1057,18 @@ ________________________________________________________________________________
|
||||
spawn(0)
|
||||
var/turf/location = get_turf(U)
|
||||
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)
|
||||
while(G.candrain&&!isnull(A))
|
||||
for(var/datum/tech/current_data in S.stored_research)
|
||||
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)
|
||||
if(current_data.id==analyzing_data.id)
|
||||
if(analyzing_data.level>current_data.level)
|
||||
U << "\blue Database: \black <b>UPDATED</b>."
|
||||
current_data.level = analyzing_data.level
|
||||
break
|
||||
break
|
||||
break//Move on to next.
|
||||
else break//Otherwise, quit processing.
|
||||
U << "\blue Data analyzed. Process finished."
|
||||
|
||||
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.
|
||||
opacity = 0//Can see through.
|
||||
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
|
||||
health = 25//How much health it has.
|
||||
mob/living/affecting = null//Who it is currently affecting, if anyone.
|
||||
@@ -58,45 +58,81 @@ ________________________________________________________________________________
|
||||
|
||||
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.
|
||||
I'll update when possible.
|
||||
Potential Upgrade Tree:
|
||||
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//=======//
|
||||
/*
|
||||
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()
|
||||
/*
|
||||
|
||||
var/datum/game_mode/current_mode = ticker.mode
|
||||
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/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.
|
||||
switch (current_mode.config_tag)
|
||||
if("traitor")
|
||||
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.
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
tet_antagonist_list += current_mind
|
||||
ter_antagonist_list += current_mind
|
||||
|
||||
if(current_mode:heads_of_staff.len)
|
||||
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)
|
||||
var/heads_list[] = list()//Now we manually override the list made prior. Target Heads take priority.
|
||||
for(current_mind in current_mode:heads_of_staff)
|
||||
if(current_mind.current&¤t_mind.current.stat!=2)
|
||||
protagonist_list += current_mind
|
||||
if(heads_list.len)//Or not, if there are none.
|
||||
@@ -104,33 +140,39 @@ ________________________________________________________________________________
|
||||
|
||||
if ("cult")//Always a few of these around.
|
||||
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)
|
||||
antagonist_list += current_mind
|
||||
|
||||
if ("wizard")//There can be only one mode wizard. Other wizards aren't too important.
|
||||
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(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)
|
||||
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(current_mode:malf_ai)
|
||||
antagonist_list += malf_ai
|
||||
|
||||
antagonist_list += current_mode:malf_ai
|
||||
*/
|
||||
if ("nuclear")//Can be a few of these guys.
|
||||
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)
|
||||
antagonist_list += current_mind
|
||||
else
|
||||
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()
|
||||
for(var/obj/landmark/L in world)
|
||||
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 ))
|
||||
|
||||
if(candidates.len)
|
||||
var/mob/G = pick(candidates)
|
||||
G = pick(candidates)
|
||||
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.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
||||
new_ninja.internals.icon_state = "internal1"
|
||||
@@ -157,97 +199,210 @@ ________________________________________________________________________________
|
||||
else
|
||||
del(new_ninja)
|
||||
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/mission_set = 0//To determine if we need to do further processing.
|
||||
//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))
|
||||
xeno_list += xeno
|
||||
|
||||
//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.
|
||||
for(var/mob/living/carbon/human/commando in world)//Search and destroy.
|
||||
if(commando.mind&&commando.mind.special_role=="Death Commando")
|
||||
if(xeno_list.len>3)//If there are more than three humanoid xenos on the station, time to get dangerous.
|
||||
//Here we want the ninja to murder all the queens. The other aliens don't really matter.
|
||||
var/xeno_queen_list[] = list()
|
||||
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
|
||||
ninja_objective.owner = ninja_mind
|
||||
ninja_objective.find_target_by_role(commando.mind.special_role,1)
|
||||
ninja_mind.objectives += ninja_objective
|
||||
|
||||
mission_set = 1
|
||||
/*
|
||||
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.
|
||||
In either case, it's a good idea to spawn the ninja with a semi-random set of objectives.
|
||||
*/
|
||||
if(!antagonist_list.len)
|
||||
switch(rand(1,3))
|
||||
if(1)
|
||||
if(protagonist_list.len)//If we have surviving heads.
|
||||
for(var/datum/mind/head_mind in protagonist_list)//Search and destroy.
|
||||
if(!mission_set)//If mission was not set.
|
||||
|
||||
//To pick a person for each list.
|
||||
var/datum/mind/antagonist_target
|
||||
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
|
||||
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
|
||||
|
||||
//TO DO: add ninja-net point-based system objective.
|
||||
//TO DO: upgrade cell objective.
|
||||
hostile_targets -= current_mind//Remove them from the list.
|
||||
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.
|
||||
if(sec_antagonist_list.len)
|
||||
objective_list -= 2
|
||||
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.
|
||||
//Let em know.
|
||||
var/datum/objective/debrain/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
|
||||
|
||||
//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
|
||||
ninja_objective.owner = ninja_mind
|
||||
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.mind.store_memory("<B>Directive:</B> \red [directive].")
|
||||
*/
|
||||
return
|
||||
new_ninja.mind.store_memory("<B>Directive:</B> \red [directive]<br>")
|
||||
|
||||
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.
|
||||
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.
|
||||
*/
|
||||
/proc/generate_ninja_directive()
|
||||
var/directive
|
||||
/proc/generate_ninja_directive(side)
|
||||
var/directive = "[side=="face"?"Nanotrasen":"The Syndicate"] is your employer. "//Let them know which side they're on.
|
||||
switch(rand(1,13))
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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
|
||||
directive = "There are no special directives at this time."
|
||||
directive += "There are no special supplemental instructions at this time."
|
||||
return directive
|
||||
|
||||
//=======//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)
|
||||
alert("Wait until the game starts")
|
||||
return
|
||||
if(!toggle_space_ninja)
|
||||
alert("Space Ninjas spawning is disabled.")
|
||||
return
|
||||
if(ishuman(M))
|
||||
log_admin("[key_name(src)] turned [M.key] into a Space Ninja.")
|
||||
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()
|
||||
set category = "Fun"
|
||||
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
|
||||
|
||||
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)
|
||||
alert("The game hasn't started yet!")
|
||||
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")
|
||||
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.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.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,
|
||||
//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)
|
||||
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
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.original = src
|
||||
mind.assigned_role = "MODE"
|
||||
mind.special_role = "Space Ninja"
|
||||
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//=======//
|
||||
|
||||
/*
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs()
|
||||
//DEBUG
|
||||
//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]"
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
Most of these are at various points of incomplete.
|
||||
|
||||
/mob/verb/grant_object_panel()
|
||||
@@ -24,8 +24,10 @@
|
||||
return 0
|
||||
|
||||
/datum/game_mode/proc/declare_completion()
|
||||
return
|
||||
|
||||
/datum/game_mode/proc/declare_extra_completion()
|
||||
for(var/datum/mind/traitor in traitors)
|
||||
var/traitorwin = 1
|
||||
var/traitor_name
|
||||
|
||||
if(traitor.current)
|
||||
@@ -38,7 +40,9 @@
|
||||
else
|
||||
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
|
||||
for(var/datum/objective/objective in traitor.objectives)
|
||||
if(objective.check_completion())
|
||||
@@ -49,9 +53,9 @@
|
||||
count++
|
||||
|
||||
if(traitorwin)
|
||||
world << "<B>The traitor was successful!<B>"
|
||||
world << "<B>The antagonist was successful!<B>"
|
||||
else
|
||||
world << "<B>The traitor has failed!<B>"
|
||||
world << "<B>The antagonist has failed!<B>"
|
||||
return 1
|
||||
|
||||
/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 << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
|
||||
//End code phrase.
|
||||
|
||||
|
||||
/datum/game_mode/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 = 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
|
||||
|
||||
@@ -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>"
|
||||
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
|
||||
|
||||
|
||||
@@ -84,6 +84,13 @@
|
||||
/datum/game_mode/malfunction/check_win()
|
||||
if (AI_win_timeleft <= 0 && !win)
|
||||
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 << "<B>It has fully taken control of all of [station_name()]'s systems.</B>"
|
||||
|
||||
@@ -100,9 +107,12 @@
|
||||
sleep(300)
|
||||
log_game("Rebooting due to round end")
|
||||
world.Reboot()
|
||||
return 1
|
||||
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)
|
||||
..()
|
||||
|
||||
@@ -178,6 +178,7 @@
|
||||
|
||||
sleep(110)
|
||||
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>"
|
||||
|
||||
sleep(300)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
datum
|
||||
objective
|
||||
var/datum/mind/owner
|
||||
var/explanation_text
|
||||
var
|
||||
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)
|
||||
if(text)
|
||||
@@ -11,19 +14,25 @@ datum
|
||||
check_completion()
|
||||
return 1
|
||||
|
||||
assassinate
|
||||
var/datum/mind/target
|
||||
|
||||
proc/find_target()
|
||||
find_target()
|
||||
var/list/possible_targets = list()
|
||||
|
||||
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
|
||||
|
||||
if(possible_targets.len > 0)
|
||||
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)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||
else
|
||||
@@ -31,14 +40,10 @@ datum
|
||||
|
||||
return target
|
||||
|
||||
proc/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) && istype(possible_target.current, /mob/living/carbon/human) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
|
||||
target = possible_target
|
||||
break
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
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
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
@@ -46,13 +51,76 @@ datum
|
||||
|
||||
check_completion()
|
||||
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
|
||||
else
|
||||
return 0
|
||||
else
|
||||
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
|
||||
explanation_text = "Hijack the emergency shuttle by escaping alone."
|
||||
|
||||
@@ -66,8 +134,9 @@ datum
|
||||
return 0
|
||||
|
||||
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)
|
||||
if(player.type in protected_mobs) continue
|
||||
if (player.mind && (player.mind != owner))
|
||||
if (player.stat != 2) //they're not dead
|
||||
if (get_turf(player) in shuttle)
|
||||
@@ -79,9 +148,9 @@ datum
|
||||
explanation_text = "Escape on the shuttle alive."
|
||||
|
||||
check_completion()
|
||||
if(istype(owner.current, /mob/living/silicon))
|
||||
if(issilicon(owner.current))
|
||||
return 0
|
||||
if(istype(owner.current, /mob/living/carbon/brain))
|
||||
if(isbrain(owner.current))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
@@ -104,18 +173,21 @@ datum
|
||||
explanation_text = "Stay alive until the end"
|
||||
|
||||
check_completion()
|
||||
if(istype(owner.current, /mob/living/silicon) && owner.current != owner.original)
|
||||
if(issilicon(owner.current) && owner.current != owner.original)
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == 2)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
nuclear
|
||||
explanation_text = "Destroy the station with a nuclear device."
|
||||
|
||||
steal
|
||||
var/obj/item/steal_target
|
||||
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,
|
||||
"a hand teleporter" = /obj/item/weapon/hand_tele,
|
||||
"an RCD" = /obj/item/weapon/rcd,
|
||||
@@ -129,38 +201,45 @@ datum
|
||||
"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 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)
|
||||
target_name = target_name
|
||||
proc/set_target(item_name)
|
||||
target_name = item_name
|
||||
steal_target = possible_items[target_name]
|
||||
if (!steal_target )
|
||||
steal_target = possible_items_special[target_name]
|
||||
explanation_text = "Steal [target_name]."
|
||||
return steal_target
|
||||
|
||||
proc/find_target()
|
||||
find_target()
|
||||
return set_target(pick(possible_items))
|
||||
|
||||
proc/select_target()
|
||||
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
|
||||
|
||||
if (!new_target) return
|
||||
|
||||
if (new_target == "custom")
|
||||
var/steal_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
||||
if (!steal_target) return
|
||||
var/tmp_obj = new steal_target
|
||||
new_target = tmp_obj:name
|
||||
var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
||||
if (!custom_target) return
|
||||
var/tmp_obj = new custom_target
|
||||
var/custom_name = tmp_obj:name
|
||||
del(tmp_obj)
|
||||
new_target = input("Enter target name:", "Objective target", new_target) as text|null
|
||||
if (!new_target) return
|
||||
|
||||
target_name = new_target
|
||||
steal_target = steal_target
|
||||
explanation_text = "Steal [new_target]."
|
||||
custom_name = input("Enter target name:", "Objective target", custom_name) as text|null
|
||||
if (!custom_name) return
|
||||
target_name = custom_name
|
||||
steal_target = custom_target
|
||||
explanation_text = "Steal [target_name]."
|
||||
|
||||
else
|
||||
set_target(new_target)
|
||||
@@ -172,12 +251,21 @@ datum
|
||||
return 0
|
||||
var/list/all_items = owner.current.get_contents()
|
||||
switch (target_name)
|
||||
if ("28 moles of plasma (full tank)")
|
||||
var/target = 28 //moles
|
||||
var/found_toxins = 0.0 //moles
|
||||
for(var/obj/item/weapon/tank/T in all_items)
|
||||
found_toxins += T.air_contents.toxins
|
||||
return found_toxins>=target
|
||||
if("28 moles of plasma (full tank)","10 diamonds","50 gold bars","25 refined uranium bars")
|
||||
var/target_amount = text2num(target_name)//Non-numbers are ignored.
|
||||
var/found_amount = 0.0//Always starts as zero.
|
||||
for(var/obj/item/I in all_items)
|
||||
if(!istype(I, steal_target)) continue//If it's not actually that item.
|
||||
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")
|
||||
// world << "dude's after an AI, time to check for one."
|
||||
for(var/obj/item/device/aicard/C in all_items)
|
||||
@@ -189,30 +277,81 @@ datum
|
||||
return 1
|
||||
else
|
||||
for(var/obj/I in all_items)
|
||||
if(I.type == steal_target)
|
||||
if(istype(I, steal_target))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
nuclear
|
||||
explanation_text = "Destroy the station with a nuclear device."
|
||||
|
||||
absorb
|
||||
var/num_to_eat //this is supposed to be semi-random but fuck it for now, this is alpha
|
||||
|
||||
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
|
||||
download
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(10,20)
|
||||
explanation_text = "Download [target_amount] research levels."
|
||||
return target_amount
|
||||
|
||||
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
|
||||
else
|
||||
return 0
|
||||
|
||||
//capture
|
||||
//WIP
|
||||
|
||||
/* Isn't suited for global objectives
|
||||
/*---------CULTIST----------*/
|
||||
|
||||
|
||||
@@ -257,21 +257,6 @@
|
||||
else
|
||||
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//
|
||||
////////////////////////////
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
return candidates
|
||||
|
||||
/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)
|
||||
var/law = "Accomplish your objectives at all costs."
|
||||
|
||||
@@ -523,6 +523,7 @@
|
||||
U.show_message("\red An error flashes on your [src].", 1)
|
||||
else if (prob(difficulty * 3))
|
||||
U.show_message("\red Energy feeds back into your [src]!", 1)
|
||||
U << browse(null, "window=pda")
|
||||
explode()
|
||||
else
|
||||
U.show_message("\blue Success!", 1)
|
||||
|
||||
@@ -12,159 +12,159 @@
|
||||
|
||||
//Communicate with traitor through the PDA's note function.
|
||||
/obj/item/weapon/integrated_uplink/proc/print_to_host(var/text)
|
||||
if (isnull(src.hostpda))
|
||||
if (isnull(hostpda))
|
||||
return
|
||||
hostpda.note = text
|
||||
|
||||
for (var/mob/M in viewers(1, src.hostpda.loc))
|
||||
if (M.client && M.machine == src.hostpda)
|
||||
for (var/mob/M in viewers(1, hostpda.loc))
|
||||
if (M.client && M.machine == hostpda)
|
||||
hostpda.attack_self(M)
|
||||
|
||||
return
|
||||
|
||||
//Let's build a menu!
|
||||
/obj/item/weapon/integrated_uplink/proc/generate_menu()
|
||||
src.menu_message = "<B>Syndicate Uplink Console:</B><BR>"
|
||||
src.menu_message += "Tele-Crystals left: [src.uses]<BR>"
|
||||
src.menu_message += "<HR>"
|
||||
src.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>"
|
||||
src.menu_message += "<BR>"
|
||||
src.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>"
|
||||
src.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>"
|
||||
src.menu_message += "<BR>"
|
||||
src.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>"
|
||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=voice'>Voice-Changer</A> (4)<BR>"
|
||||
src.menu_message += "<BR>"
|
||||
src.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>"
|
||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (5)<BR>"
|
||||
src.menu_message += "<BR>"
|
||||
src.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>"
|
||||
src.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>"
|
||||
src.menu_message += "<BR>"
|
||||
src.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>"
|
||||
src.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>"
|
||||
src.menu_message += "<BR>"
|
||||
src.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 = "<B>Syndicate Uplink Console:</B><BR>"
|
||||
menu_message += "Tele-Crystals left: [uses]<BR>"
|
||||
menu_message += "<HR>"
|
||||
menu_message += "<B>Request item:</B><BR>"
|
||||
menu_message += "<I>Each item costs a number of tele-crystals as indicated by the number following their name.</I><BR>"
|
||||
menu_message += "<BR>"
|
||||
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_ammo'>Ammo-357</A> for use with Revolver (2)<BR>"
|
||||
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=sword'>Energy Sword</A> (4)<BR>"
|
||||
menu_message += "<BR>"
|
||||
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=card'>Syndicate Card</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=voice'>Voice-Changer</A> (4)<BR>"
|
||||
menu_message += "<BR>"
|
||||
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=paralysispen'>Paralysis Pen</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (5)<BR>"
|
||||
menu_message += "<BR>"
|
||||
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=bomb'>Plastic Explosives</A> (2)<BR>"
|
||||
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=space'>Syndicate-made Space Suit (inludes a helmet)</A> (3)<BR>"
|
||||
menu_message += "<BR>"
|
||||
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=cloak'>Cloaking Device</A> (4)<BR>"
|
||||
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=empbox'>5 EMP Grenades</A> (4)<BR>"
|
||||
menu_message += "<BR>"
|
||||
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=lawmod'>Hacked AI Module</A> (7)<BR>"
|
||||
|
||||
src.menu_message += "<HR>"
|
||||
menu_message += "<HR>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/integrated_uplink/proc/unlock()
|
||||
if ((isnull(src.hostpda)) || (src.active))
|
||||
if ((isnull(hostpda)) || (active))
|
||||
return
|
||||
|
||||
src.orignote = src.hostpda.note
|
||||
src.active = 1
|
||||
src.hostpda.mode = 1 //Switch right to the notes program
|
||||
orignote = hostpda.note
|
||||
active = 1
|
||||
hostpda.mode = 1 //Switch right to the notes program
|
||||
|
||||
src.generate_menu()
|
||||
src.print_to_host(src.menu_message)
|
||||
generate_menu()
|
||||
print_to_host(menu_message)
|
||||
return
|
||||
|
||||
/obj/item/weapon/integrated_uplink/Topic(href, href_list)
|
||||
if ((isnull(src.hostpda)) || (!src.active))
|
||||
if ((isnull(hostpda)) || (!active))
|
||||
return
|
||||
|
||||
if (usr.stat || usr.restrained() || !in_range(src.hostpda, usr))
|
||||
if (usr.stat || usr.restrained() || !in_range(hostpda, usr))
|
||||
return
|
||||
|
||||
if (href_list["buy_item"])
|
||||
switch(href_list["buy_item"])
|
||||
if("revolver")
|
||||
if (src.uses >= 6)
|
||||
src.uses -= 6
|
||||
new /obj/item/weapon/gun/projectile(get_turf(src.hostpda))
|
||||
if (uses >= 6)
|
||||
uses -= 6
|
||||
new /obj/item/weapon/gun/projectile(get_turf(hostpda))
|
||||
if("revolver_ammo")
|
||||
if (src.uses >= 2)
|
||||
src.uses -= 2
|
||||
new /obj/item/ammo_magazine(get_turf(src.hostpda))
|
||||
if (uses >= 2)
|
||||
uses -= 2
|
||||
new /obj/item/ammo_magazine(get_turf(hostpda))
|
||||
if("xbow")
|
||||
if (src.uses >= 5)
|
||||
src.uses -= 5
|
||||
new /obj/item/weapon/gun/energy/crossbow(get_turf(src.hostpda))
|
||||
if (uses >= 5)
|
||||
uses -= 5
|
||||
new /obj/item/weapon/gun/energy/crossbow(get_turf(hostpda))
|
||||
if("empbox")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/storage/emp_kit(get_turf(src.hostpda))
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/storage/emp_kit(get_turf(hostpda))
|
||||
if("voice")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/clothing/mask/gas/voice(get_turf(src.hostpda))
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/clothing/mask/gas/voice(get_turf(hostpda))
|
||||
if("jump")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/clothing/under/chameleon(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/clothing/under/chameleon(get_turf(hostpda))
|
||||
if("card")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/card/id/syndicate(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/card/id/syndicate(get_turf(hostpda))
|
||||
if("emag")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/card/emag(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/card/emag(get_turf(hostpda))
|
||||
if("imp_freedom")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
|
||||
O.imp = new /obj/item/weapon/implant/freedom(O)
|
||||
if("sleepypen")
|
||||
if (src.uses >= 5)
|
||||
src.uses -= 5
|
||||
new /obj/item/weapon/pen/sleepypen(get_turf(src.hostpda))
|
||||
if (uses >= 5)
|
||||
uses -= 5
|
||||
new /obj/item/weapon/pen/sleepypen(get_turf(hostpda))
|
||||
if("paralysispen")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/device/flashlight/pen/paralysis(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/device/flashlight/pen/paralysis(get_turf(hostpda))
|
||||
if("projector")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/device/chameleon(get_turf(src.hostpda))
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/device/chameleon(get_turf(hostpda))
|
||||
if("cloak")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/cloaking_device(get_turf(src.hostpda))
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/cloaking_device(get_turf(hostpda))
|
||||
if("sword")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/sword(get_turf(src.hostpda))
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/sword(get_turf(hostpda))
|
||||
if("bomb")
|
||||
if (src.uses >= 2)
|
||||
src.uses -= 2
|
||||
new /obj/item/weapon/plastique(get_turf(src.hostpda))
|
||||
if (uses >= 2)
|
||||
uses -= 2
|
||||
new /obj/item/weapon/plastique(get_turf(hostpda))
|
||||
if("powersink")
|
||||
if (src.uses >= 5)
|
||||
src.uses -= 5
|
||||
new /obj/item/device/powersink(get_turf(src.hostpda))
|
||||
if (uses >= 5)
|
||||
uses -= 5
|
||||
new /obj/item/device/powersink(get_turf(hostpda))
|
||||
if("detomatix")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/cartridge/syndicate(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/cartridge/syndicate(get_turf(hostpda))
|
||||
if("space")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/clothing/suit/space/syndicate(get_turf(src.hostpda))
|
||||
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/clothing/suit/space/syndicate(get_turf(hostpda))
|
||||
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(hostpda))
|
||||
if("lawmod")
|
||||
if (src.uses >= 7)
|
||||
src.uses -= 7
|
||||
new /obj/item/weapon/aiModule/syndicate(get_turf(src.hostpda))
|
||||
if (uses >= 7)
|
||||
uses -= 7
|
||||
new /obj/item/weapon/aiModule/syndicate(get_turf(hostpda))
|
||||
if("botchat")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/device/radio/headset/traitor(get_turf(src.hostpda))
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/device/radio/headset/traitor(get_turf(hostpda))
|
||||
|
||||
src.generate_menu()
|
||||
src.print_to_host(src.menu_message)
|
||||
generate_menu()
|
||||
print_to_host(menu_message)
|
||||
return
|
||||
|
||||
return
|
||||
@@ -28,6 +28,10 @@ Frequency:
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
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))))
|
||||
usr.machine = src
|
||||
if (href_list["refresh"])
|
||||
@@ -96,13 +100,13 @@ Frequency:
|
||||
src.attack_self(M)
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
/// HAND TELE
|
||||
|
||||
|
||||
/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( )
|
||||
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))
|
||||
@@ -116,8 +120,6 @@ Frequency:
|
||||
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
|
||||
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)
|
||||
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L
|
||||
if ((user.equipped() != src || user.stat || user.restrained()))
|
||||
|
||||
@@ -1167,6 +1167,10 @@ var/showadminmessages = 1
|
||||
if(aliens_allowed)
|
||||
alien_infestation()
|
||||
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")
|
||||
var/choice = input("You sure you want to spawn carp?") in list("Badmin", "Cancel")
|
||||
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 += "<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>"
|
||||
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
|
||||
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>"
|
||||
@@ -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=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=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=radiation'>Irradiate the station</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].")
|
||||
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()
|
||||
set category = "Server"
|
||||
set desc="Delay the game start"
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
verbs += /obj/admins/proc/toggleooc //toggle ooc
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
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 += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -188,6 +189,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -324,6 +326,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -482,6 +485,7 @@
|
||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -630,6 +634,7 @@
|
||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
//verbs += /proc/toggle_adminmsg
|
||||
@@ -774,6 +779,7 @@
|
||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
//verbs += /proc/toggle_adminmsg
|
||||
@@ -901,6 +907,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -1060,6 +1067,7 @@
|
||||
verbs -= /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs -= /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
verbs -= /obj/admins/proc/toggle_aliens
|
||||
verbs -= /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs -= /obj/admins/proc/voteres //toggle votes
|
||||
verbs -= /client/proc/deadchat //toggles deadchat
|
||||
verbs -= /proc/toggle_adminmsg
|
||||
@@ -1496,6 +1504,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
verbs += /obj/admins/proc/toggle_aliens
|
||||
verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -1527,6 +1536,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -1558,6 +1568,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -1596,6 +1607,7 @@
|
||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -1634,6 +1646,7 @@
|
||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
@@ -1660,6 +1673,7 @@
|
||||
//verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
//verbs += /proc/toggle_adminmsg
|
||||
@@ -1691,6 +1705,7 @@
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
//verbs += /obj/admins/proc/toggletraitorscaling //toggle traitor scaling
|
||||
//verbs += /obj/admins/proc/toggle_aliens
|
||||
//verbs += /obj/admins/proc/toggle_space_ninja //toggle ninjas
|
||||
verbs += /obj/admins/proc/voteres //toggle votes
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
verbs += /proc/toggle_adminmsg
|
||||
|
||||
@@ -123,6 +123,7 @@ var/global/sent_strike_team = 0
|
||||
//Creates mind stuff.
|
||||
new_commando.mind = new
|
||||
new_commando.mind.current = new_commando
|
||||
new_commando.mind.original = new_commando
|
||||
new_commando.mind.assigned_role = "MODE"
|
||||
new_commando.mind.special_role = "Death Commando"
|
||||
if(!(new_commando.mind in ticker.minds))
|
||||
|
||||
@@ -9,10 +9,13 @@
|
||||
if (copytext(message, 1, 3) == ":a")
|
||||
message = copytext(message, 3)
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
src.alien_talk(message)
|
||||
if (stat == 2)
|
||||
return say_dead(message)
|
||||
else
|
||||
if (copytext(message, 1, 2) != "*" && !src.stat)
|
||||
playsound(src.loc, "hiss", 25, 1, 1)//So aliens can hiss while they hiss yo/N
|
||||
alien_talk(message)
|
||||
else
|
||||
if (copytext(message, 1, 2) != "*" && !stat)
|
||||
playsound(loc, "hiss", 25, 1, 1)//So aliens can hiss while they hiss yo/N
|
||||
return ..(message)
|
||||
else
|
||||
|
||||
@@ -20,7 +23,7 @@
|
||||
/mob/living/carbon/alien/say_quote(var/text)
|
||||
// var/ending = copytext(text, length(text))
|
||||
|
||||
return "[src.say_message], \"[text]\"";
|
||||
return "[say_message], \"[text]\"";
|
||||
|
||||
/mob/living/proc/alien_talk(var/message)
|
||||
|
||||
@@ -30,12 +33,12 @@
|
||||
if (!message)
|
||||
return
|
||||
|
||||
var/message_a = src.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/message_a = say_quote(message)
|
||||
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)
|
||||
if(!S.stat)
|
||||
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)
|
||||
else if (S.hivecheck())
|
||||
S.show_message(rendered, 2)
|
||||
@@ -54,17 +57,17 @@
|
||||
var/message_b
|
||||
|
||||
message_b = "hsssss"
|
||||
message_b = src.say_quote(message_b)
|
||||
message_b = say_quote(message_b)
|
||||
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)
|
||||
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)
|
||||
if (istype(M, /mob/new_player))
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
/mob/living/silicon/ai/death(gibbed)
|
||||
var/cancel
|
||||
src.stat = 2
|
||||
src.canmove = 0
|
||||
if(src.blind)
|
||||
src.blind.layer = 0
|
||||
src.sight |= SEE_TURFS
|
||||
src.sight |= SEE_MOBS
|
||||
src.sight |= SEE_OBJS
|
||||
src.see_in_dark = 8
|
||||
src.see_invisible = 2
|
||||
src.icon_state = "ai-crash"
|
||||
stat = 2
|
||||
canmove = 0
|
||||
if(blind)
|
||||
blind.layer = 0
|
||||
sight |= SEE_TURFS
|
||||
sight |= SEE_MOBS
|
||||
sight |= SEE_OBJS
|
||||
see_in_dark = 8
|
||||
see_invisible = 2
|
||||
icon_state = "ai-crash"
|
||||
|
||||
var/callshuttle = 0
|
||||
|
||||
@@ -41,18 +41,14 @@
|
||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||
spawn( 0 )
|
||||
O.mode = 2
|
||||
if (istype(src.loc, /obj/item/device/aicard))
|
||||
src.loc.icon_state = "aicard-404"
|
||||
if (istype(loc, /obj/item/device/aicard))
|
||||
loc.icon_state = "aicard-404"
|
||||
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for(var/datum/mind/AI_mind in malf.malf_ai)
|
||||
if (src.mind == AI_mind)
|
||||
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()
|
||||
if (mind == AI_mind)
|
||||
ticker.mode.declare_completion()
|
||||
|
||||
var/tod = time2text(world.realtime,"hh:mm:ss") //weasellos time of death patch
|
||||
mind.store_memory("Time of death: [tod]", 0)
|
||||
@@ -67,8 +63,8 @@
|
||||
log_game("Rebooting because of no live players")
|
||||
world.Reboot()
|
||||
return
|
||||
if (src.key)
|
||||
if (key)
|
||||
spawn(50)
|
||||
if(src.key && src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
if(key && stat == 2)
|
||||
verbs += /mob/proc/ghost
|
||||
return ..(gibbed)
|
||||
@@ -282,6 +282,8 @@ mob/new_player
|
||||
AnnounceArrival(character, rank)
|
||||
if(character.mind.assigned_role == "Cyborg")
|
||||
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)
|
||||
|
||||
else
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
invisibility = 101
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/proc/AIize()
|
||||
if(client)
|
||||
client.screen.len = null
|
||||
@@ -82,9 +81,13 @@
|
||||
else
|
||||
O.mind = new
|
||||
O.mind.current = O
|
||||
O.mind.original = O
|
||||
O.mind.assigned_role = "AI"
|
||||
O.key = key
|
||||
|
||||
if(!(O.mind in ticker.minds))
|
||||
ticker.minds += O.mind//Adds them to regular mind list.
|
||||
|
||||
var/obj/loc_landmark
|
||||
for(var/obj/landmark/start/sloc in world)
|
||||
if (sloc.name != "AI")
|
||||
@@ -179,14 +182,16 @@
|
||||
if (mind.assigned_role == "Cyborg")
|
||||
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
|
||||
mind = new /datum/mind( )
|
||||
mind.key = key
|
||||
mind.current = O
|
||||
mind.original = 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 << "<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>"
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#define FILE_DIR "code/game/gamemodes/cult"
|
||||
#define FILE_DIR "code/game/gamemodes/events"
|
||||
#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/meteor"
|
||||
#define FILE_DIR "code/game/gamemodes/nuclear"
|
||||
@@ -331,10 +330,10 @@
|
||||
#include "code\game\gamemodes\cult\cult.dm"
|
||||
#include "code\game\gamemodes\events\clang.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\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\malfunction.dm"
|
||||
#include "code\game\gamemodes\meteor\meteor.dm"
|
||||
|
||||
Reference in New Issue
Block a user