Wizard will now report if they mind swapped with a person after round completion. Or in other words, if they're in a different body than round start.

Changing changelings during the round should probably work proper now.
AI will now report that people woken up from cryo sleep, when they join. The arrival shuttle changed to accomodate this.
Added poff to pAIs until TLE revises that whole process. You should be able to message them back now. 
Slighly revised the entry shuttle.
Added a holding facility to CentCom.
Made the DJ station fully unsimulated. Removed unsimulated floor from derelict. Hopefully I got all the tiles. NOTE: When simulated floor meets unsimulated floor, Atmos goes berserk. Don't do this. Also, you can't deconstruct unsimulated stuff.
A few other misc adjustment to the map.
Added a variable to Rev that tracks what heads are supposed to be assassinated. Not sure why it didn't exist before.
Added some ticker mind checking to a few procs I forgot about. Yup.
Added an option to check assassinate objectives by special role.
Some foundation for future ninja stuff. Ninjas now swap battery by clicking on their suit with the battery in hand.
Some misc icon changes for areas.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1668 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
noisomehollow@lycos.com
2011-06-07 03:01:43 +00:00
parent 501c855aac
commit 3ddae57d63
18 changed files with 8142 additions and 7982 deletions
+5 -11
View File
@@ -543,51 +543,45 @@ proc/move_mining_shuttle()
/**********************Mine areas**************************/
/area/mine
icon_state = "mining"
/area/mine/explored
name = "Mine"
icon_state = "janitor"
icon_state = "explored"
music = null
/area/mine/unexplored
name = "Mine"
icon_state = "captain"
icon_state = "unexplored"
music = null
/area/mine/lobby
name = "Mining station"
icon_state = "mine"
/area/mine/storage
name = "Mining station Storage"
icon_state = "green"
/area/mine/production
name = "Mining station Production Area"
icon_state = "janitor"
/area/mine/living_quarters
name = "Abandoned Mining Station"
icon_state = "yellow"
/area/mine/eva
name = "Mining station EVA"
icon_state = "eva"
/area/mine/maintenance
name = "Mining station Maintenance"
icon_state = "maintcentral"
/area/mine/cafeteria
name = "Mining station Cafeteria"
icon_state = "cafeteria"
/area/mine/hydroponics
name = "Mining station Hydroponics"
icon_state = "hydro"
/area/mine/sleeper
name = "Mining station Emergency Sleeper"
icon_state = "medbay"
/**********************Mineral deposits**************************/
+4 -17
View File
@@ -233,43 +233,30 @@ proc/process_ghost_teleport_locs()
/area/centcom/evac
name = "Centcom Emergency Shuttle"
icon_state = "purple"
requires_power = 0
/area/centcom/suppy
name = "Centcom Supply Shuttle"
icon_state = "purple"
requires_power = 0
/area/centcom/ferry
name = "Centcom Transport Shuttle"
icon_state = "purple"
requires_power = 0
/area/centcom/shuttle
name = "Centcom Administration Shuttle"
icon_state = "purple"
requires_power = 0
/area/centcom/test
name = "Centcom Testing Facility"
icon_state = "purple"
requires_power = 0
/area/centcom/living
name = "Centcom Living Quarters"
icon_state = "purple"
requires_power = 0
/area/centcom/specops
name = "Centcom Special Ops"
icon_state = "purple"
requires_power = 0
/area/centcom/creed
name = "Creed's Office"
icon_state = "purple"
requires_power = 0
/area/centcom/holding
name = "Holding Facility"
//EXTRA
@@ -820,7 +807,7 @@ proc/process_ghost_teleport_locs()
/area/quartermaster/miningdock
name = "Mining Dock"
icon_state = "yellow"
icon_state = "mining"
/area/quartermaster/miningstorage
name = "Mining Storage"
+1
View File
@@ -128,6 +128,7 @@ var
list/newplayer_start = list()
list/latejoin = list()
list/prisonwarp = list() //prisoners go to these
list/holdingfacility = list() //captured people go here
list/mazewarp = list()
list/tdome1 = list()
list/tdome2 = list()
+1
View File
@@ -37,6 +37,7 @@
var/subscreen // Which specific function of the main screen is being displayed
var/tnote // Message history var used for PDA Messaging functions
var/poff = 0 // For PDA messanging.
var/secHUD = 0 // Toggles whether the Security HUD is active or not
var/medHUD = 0 // Toggles whether the Medical HUD is active or not
+32 -31
View File
@@ -781,6 +781,24 @@ ________________________________________________________________________________
U << "Replenished a total of [total_reagent_transfer ? total_reagent_transfer : "zero"] chemical units."//Let the player know how much total volume was added.
return
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))
U.drop_item()
I.loc = src
I:charge = min(I:charge+cell.charge, I:maxcharge)
var/obj/item/weapon/cell/old_cell = cell
old_cell.charge = 0
U.put_in_hand(old_cell)
old_cell.add_fingerprint(U)
old_cell.corrupt()
old_cell.updateicon()
cell = I
U << "\blue Upgrade complete. Maximum capacity: <b>[round(cell.maxcharge/100)]</b>%"
else
U << "\red Procedure interrupted. Protocol terminated."
return
..()
/obj/item/clothing/suit/space/space_ninja/proc/toggle_stealth()
@@ -921,38 +939,21 @@ ________________________________________________________________________________
if("CELL")
var/obj/item/weapon/cell/A = target
if(A.maxcharge>S.cell.maxcharge)
U << "\blue Higher maximum capacity detected.\nUpgrading..."
if (G.candrain&&do_after(U,50))
U.drop_item()
A.loc = S
A.charge = min(A.charge+S.cell.charge, A.maxcharge)
var/obj/item/weapon/cell/old_cell = S.cell
old_cell.charge = 0
U.put_in_hand(old_cell)
old_cell.add_fingerprint(U)
old_cell.corrupt()
old_cell.updateicon()
S.cell = A
U << "\blue Upgrade complete. Maximum capacity: <b>[round(S.cell.charge/100)]</b>%"
if(A.charge)
if (G.candrain&&do_after(U,30))
U << "\blue Gained <B>[A.charge]</B> energy from the cell."
if(S.cell.charge+A.charge>S.cell.maxcharge)
S.cell.charge=S.cell.maxcharge
else
S.cell.charge+=A.charge
A.charge = 0
G.draining = 0
A.corrupt()
A.updateicon()
else
U << "\red Procedure interrupted. Protocol terminated."
else
if(A.charge)
if (G.candrain&&do_after(U,30))
U << "\blue Gained <B>[A.charge]</B> energy from the cell."
if(S.cell.charge+A.charge>S.cell.maxcharge)
S.cell.charge=S.cell.maxcharge
else
S.cell.charge+=A.charge
A.charge = 0
G.draining = 0
A.corrupt()
A.updateicon()
else
U << "\red Procedure interrupted. Protocol terminated."
else
U << "\red This cell is empty and of no use."
U << "\red This cell is empty and of no use."
if("MACHINERY")//Can be applied to generically to all powered machinery. I'm leaving this alone for now.
var/obj/machinery/A = target
@@ -1211,7 +1212,7 @@ ________________________________________________________________________________
*/
/*
It will teleport people to the prison after 30 seconds. (Check the process() proc to change where teleport goes)
It will teleport people to a holding facility after 30 seconds. (Check the process() proc to change where teleport goes)
It is possible to destroy the net by the occupant or someone else.
*/
@@ -1267,7 +1268,7 @@ It is possible to destroy the net by the occupant or someone else.
density = 0//Make the net pass-through.
invisibility = 101//Make the net invisible so all the animations can play out.
health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running.
M.loc = pick(prisonwarp)//Throw mob in prison.
M.loc = pick(holdingfacility)//Throw mob in to the holding facility.
spawn(0)
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
+122 -21
View File
@@ -43,8 +43,8 @@ ________________________________________________________________________________
Admin Notes:
Ninjas are meant for players to respawn as, not admins. They are another way to participate in the game post-death, like pais,
xenos, death squads, and cyborgs. Ninjas are not admin PCs--please do not use them for that purpose.
Ninjas are not admin PCs--please do not use them for that purpose. They are another way to participate in the game post-death,
like pais, xenos, death squads, and cyborgs.
I'm currently looking for feedback from regular players since beta testing is largely done. I would appreciate if
you spawned regular players as ninjas when rounds are boring. Or exciting, it's all good as long as there is feedback.
You can also spawn ninja gear manually if you want to.
@@ -67,28 +67,132 @@ ________________________________________________________________________________
/proc/space_ninja_arrival()
/*
var/datum/game_mode/current_mode = ticker.mode
var/datum/mind/current_mind = new()
var/antagonist_list[] = list()//The bad guys.
var/protagonist_list[] = current_mode:get_living_heads()//The good guys. Mostly Heads. Who are alive.
var/xeno_list[] = list()//Aliums.
//First we determine what mode it is and add the bad guys approprietly.
switch (current_mode.config_tag)
if ("revolution")
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.
if(current_mind.current&&current_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(current_mode:head_revolutionaries.len)
for(var/datum/mind/current_mind in current_mode:head_revolutionaries)
if(current_mind.current&&current_mind.current.stat!=2)
antagonist_list += current_mind
if ("cult")
if (src in current_mode:cult)
//if(current_mode:revolutionaries.len)//We don't need to worry about regular revs as they are of no particular importance.
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)
if(current_mind.current&&current_mind.current.stat!=2)
protagonist_list += current_mind
if(heads_list.len)//Or not, if there are none.
protagonist_list = heads_list
if ("wizard")
if (current_mode:wizard && src == current_mode:wizard)
if ("cult")//Always a few of these around.
if(current_mode:cult.len)
for(var/datum/mind/current_mind in current_mode:cult)
if(current_mind.current&&current_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.
if ("changeling")
if (src in current_mode:changelings)
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)
if(current_mind.current&&current_mind.current.stat!=2)
antagonist_list += current_mind
if ("malfunction")//Only one malf AI.
if(current_mode:malf_ai)
antagonist_list += malf_ai
if ("malfunction")
if (src in 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)
if(current_mind.current&&current_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.
var/list/spawn_list = list()
for(var/obj/landmark/L in world)
if (L.name == "carpspawn")
spawn_list.Add(L)
if ("nuclear")
if(src in current_mode:syndicates)
var/mob/dead/observer/G
var/list/candidates = list()
for(G in world)
if(G.client)//Now everyone can ninja!
if(((G.client.inactivity/10)/60) <= 5)
candidates.Add(G)
//The ninja will be created on the right spawn point or at late join.
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)
new_ninja.key = G.key
new_ninja.mind.key = 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"
del(G)
else
del(new_ninja)
return
//Now for the rest of the stuff.
var/datum/mind/ninja_mind = new_ninja.mind//For easier reference.
//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.
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")
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
if(!antagonist_list.len)//If all of em' are dead/destroyed, we want to give the ninja a random objective.
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.
var/datum/objective/assassinate/ninja_objective = new
ninja_objective.owner = ninja_mind
ninja_objective.find_target_by_role(head_mind.assigned_role)
ninja_mind.objectives += ninja_objective
//TO DO: add ninja-net point-based system objective.
//TO DO: upgrade cell objective.
else//Else, we need to give them an objective based on round type.
//if(!ninja_mind.objectives.len)//If they somehow did not get an objective.
//Let em know.
//Finally add a survival objective.
var/datum/objective/survive/ninja_objective = new
ninja_objective.owner = ninja_mind
ninja_mind.objectives += ninja_objective
//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>[input]</B>"
*/
return
@@ -115,15 +219,12 @@ ________________________________________________________________________________
return
var/list/spawn_list = list()
for(var/obj/landmark/X in world)
if (X.name == "carpspawn")
spawn_list.Add(X)
if(!spawn_list.len)
alert("No spawn location could be found. Aborting.")
return
for(var/obj/landmark/L in world)
if (L.name == "carpspawn")
spawn_list.Add(L)
var/admin_name = src
var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list))
var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list.len ? spawn_list : latejoin ))
var/mob/dead/observer/G
var/list/candidates = list()
@@ -156,7 +257,7 @@ ________________________________________________________________________________
//=======//NINJA CREATION PROCS//=======//
client/proc/create_space_ninja(obj/spawn_point)
/proc/create_space_ninja(obj/spawn_point)
var/mob/living/carbon/human/new_ninja = new(spawn_point.loc)
var/ninja_title = pick(ninja_titles)
var/ninja_name = pick(ninja_names)
+16 -13
View File
@@ -5,7 +5,7 @@ datum
New(var/text)
if(text)
src.explanation_text = text
explanation_text = text
proc
check_completion()
@@ -31,9 +31,9 @@ datum
return target
proc/find_target_by_role(var/role)
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) && (possible_target.assigned_role == role))
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
@@ -134,12 +134,12 @@ datum
)
proc/set_target(var/target_name as text)
src.target_name = target_name
src.steal_target = possible_items[target_name]
if (!src.steal_target )
src.steal_target = possible_items_special[target_name]
src.explanation_text = "Steal [target_name]."
return src.steal_target
target_name = target_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()
return set_target(pick(possible_items))
@@ -158,14 +158,14 @@ datum
new_target = input("Enter target name:", "Objective target", new_target) as text|null
if (!new_target) return
src.target_name = new_target
src.steal_target = steal_target
src.explanation_text = "Steal [new_target]."
target_name = new_target
steal_target = steal_target
explanation_text = "Steal [new_target]."
else
set_target(new_target)
return src.steal_target
return steal_target
check_completion()
if(!steal_target || !owner.current)
@@ -210,6 +210,9 @@ datum
else
return 0
//capture
//WIP
/* Isn't suited for global objectives
/*---------CULTIST----------*/
@@ -13,6 +13,7 @@
var/list/datum/mind/head_revolutionaries = list()
var/list/datum/mind/revolutionaries = list()
var/list/datum/mind/heads_of_staff = list()//This was annoying to check manually. Now I won't have to.
var/finished = 0
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
@@ -57,6 +58,7 @@
rev_obj.owner = rev_mind
rev_obj.find_target_by_role(head_mind.assigned_role)
rev_mind.objectives += rev_obj
heads_of_staff += head_mind
equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO
equip_revolutionary(rev_mind.current)
+7 -1
View File
@@ -65,6 +65,7 @@
if(istype(wizard))
wizard.assigned_role = "MODE" //So they aren't chosen for other jobs.
wizard.special_role = "Wizard"
wizard.original = wizard.current
if(wizardstart.len == 0)
wizard.current << "<B>\red A starting location for you could not be found, please report this bug!</B>"
@@ -208,7 +209,12 @@
var/wizard_name
if(wizard.current)
wizard_name = "[wizard.current.real_name] (played by [wizard.key])"
if(wizard.current == wizard.original)
wizard_name = "[wizard.current.real_name] (played by [wizard.key])"
else if (wizard.original)
wizard_name = "[wizard.current.real_name] (originally [wizard.original.real_name]) (played by [wizard.key])"
else
wizard_name = "[wizard.current.real_name] (original character destroyed) (played by [wizard.key])"
else
wizard_name = "[wizard.key] (character destroyed)"
world << "<B>The wizard was [wizard_name]</B>"
+22 -20
View File
@@ -1,65 +1,67 @@
/obj/landmark/New()
..()
src.tag = text("landmark*[]", src.name)
src.invisibility = 101
tag = text("landmark*[]", name)
invisibility = 101
if (name == "shuttle")
shuttle_z = src.z
shuttle_z = z
del(src)
if (name == "airtunnel_stop")
airtunnel_stop = src.x
airtunnel_stop = x
if (name == "airtunnel_start")
airtunnel_start = src.x
airtunnel_start = x
if (name == "airtunnel_bottom")
airtunnel_bottom = src.y
airtunnel_bottom = y
if (name == "monkey")
monkeystart += src.loc
monkeystart += loc
del(src)
if (name == "start")
newplayer_start += src.loc
newplayer_start += loc
del(src)
if (name == "wizard")
wizardstart += src.loc
wizardstart += loc
del(src)
if (name == "JoinLate")
latejoin += src.loc
latejoin += loc
del(src)
//prisoners
if (name == "prisonwarp")
prisonwarp += src.loc
prisonwarp += loc
del(src)
if (name == "mazewarp")
mazewarp += src.loc
mazewarp += loc
if (name == "Holding Facility")
holdingfacility += loc
if (name == "tdome1")
tdome1 += src.loc
tdome1 += loc
if (name == "tdome2")
tdome2 += src.loc
tdome2 += loc
if (name == "tdomeadmin")
tdomeadmin += src.loc
tdomeadmin += loc
if (name == "tdomeobserve")
tdomeobserve += src.loc
tdomeobserve += loc
//not prisoners
if (name == "prisonsecuritywarp")
prisonsecuritywarp += src.loc
prisonsecuritywarp += loc
del(src)
if (name == "blobstart")
blobstart += src.loc
blobstart += loc
del(src)
return 1
/obj/landmark/start/New()
..()
src.tag = "start*[src.name]"
src.invisibility = 101
tag = "start*[name]"
invisibility = 101
return 1
+18
View File
@@ -113,6 +113,9 @@
var/mob/occupant = null
anchored = 1
/obj/machinery/sleeper/dummy//For effects only.
icon_state = "sleeper_1"
/obj/machinery/sleeper/allow_drop()
return 0
@@ -173,6 +176,9 @@
return
return
/obj/machinery/sleeper/dummy/attackby()
return
/obj/machinery/sleeper/ex_act(severity)
switch(severity)
if(1.0)
@@ -289,6 +295,12 @@
occupied = 0
return
/obj/machinery/sleeper/dummy/eject()
set category = null
set hidden = 1
return
/obj/machinery/sleeper/verb/move_inside()
set name = "Enter Sleeper"
set category = "Object"
@@ -319,4 +331,10 @@
return
else
occupied = 0
return
/obj/machinery/sleeper/dummy/move_inside()
set category = null
set hidden = 1
return
+1
View File
@@ -368,6 +368,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
new_character.mind.special_verbs = list()//New list because they will receive them again.
else
new_character.mind = new()
ticker.minds += new_character.mind//And we'll add it to the minds database.
if(!record_found)//We have to pick their role if they have no record.
if(G_found.mind&&G_found.mind.assigned_role)//But they may have an assigned role already.
new_character.mind.assigned_role = G_found.mind.assigned_role//Also makes sure our MODE people are equipped right later on.
+1
View File
@@ -124,6 +124,7 @@ var/global/sent_strike_team = 0
new_commando.mind.current = new_commando
new_commando.mind.assigned_role = "MODE"
new_commando.mind.special_role = "Death Commando"
ticker.minds += new_commando.mind
new_commando.equip_death_commando(leader_selected)
del(spawn_location)
return new_commando
+1 -1
View File
@@ -296,7 +296,7 @@ mob/new_player
if (ailist.len)
var/mob/living/silicon/ai/announcer = pick(ailist)
if(character.mind.assigned_role != "Cyborg"&&character.mind.special_role != "MODE")
announcer.say("[character.real_name] has signed up as [rank].")
announcer.say("[character.real_name], the [rank], has awoken from cryo sleep.")
proc/ManifestLateSpawn(var/mob/living/carbon/human/H) // Attempted fix to add late joiners to various databases -- TLE
// This is basically ripped wholesale from the normal code for adding people to the databases during a fresh round
+2 -2
View File
@@ -181,13 +181,13 @@
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 //welp
else
mind = new /datum/mind( )
mind.key = key
mind.current = O
mind.original = O
mind.transfer_to(O)
ticker.minds += O.mind
//ticker.minds += O.mind//Robutts aren't added to minds since it would be screwy. Assassinate that robot!
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>"