Merge branch 'Aurorastation/development' into Map-Development

This commit is contained in:
LordFowl
2017-01-29 15:38:37 -05:00
218 changed files with 5025 additions and 5528 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ var/datum/controller/process/alarm/alarm_manager
for(last_object in all_handlers)
var/datum/alarm_handler/AH = last_object
AH.process()
SCHECK
F_SCHECK
/datum/controller/process/alarm/proc/active_alarms()
var/list/all_alarms = new
+1 -1
View File
@@ -22,7 +22,7 @@ var/datum/controller/process/chemistry/chemistryProcess
var/datum/reagents/holder = last_object
if(!holder.process_reactions())
active_holders -= holder
SCHECK
F_SCHECK
/datum/controller/process/chemistry/proc/mark_for_update(var/datum/reagents/holder)
if(holder in active_holders)
+1 -1
View File
@@ -9,7 +9,7 @@
for(last_object in active_diseases)
var/datum/disease/D = last_object
D.process()
SCHECK
F_SCHECK
/datum/controller/process/disease/statProcess()
..()
+2 -2
View File
@@ -6,10 +6,10 @@
for(last_object in event_manager.active_events)
var/datum/event/E = last_object
E.process()
SCHECK
F_SCHECK
for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR)
last_object = event_manager.event_containers[i]
var/list/datum/event_container/EC = last_object
EC.process()
SCHECK
F_SCHECK
+7 -7
View File
@@ -46,7 +46,7 @@ var/datum/controller/process/explosives/bomb_processor
else
explosion(data)
SCHECK
F_SCHECK
work_queue -= data
lighting_process.enable()
@@ -110,7 +110,7 @@ var/datum/controller/process/explosives/bomb_processor
if (vibration)
for(var/mob/M in player_list)
SCHECK
F_SCHECK
// Double check for client
var/reception = 2//Whether the person can be shaken or hear sound
//2 = BOTH
@@ -176,12 +176,12 @@ var/datum/controller/process/explosives/bomb_processor
else continue
T.ex_act(dist)
SCHECK
F_SCHECK
if(T)
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
var/atom/movable/AM = atom_movable
if(AM && AM.simulated) AM.ex_act(dist)
SCHECK
F_SCHECK
var/took = (world.timeofday-start)/10
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
@@ -214,7 +214,7 @@ var/datum/controller/process/explosives/bomb_processor
for(var/direction in cardinal)
var/turf/T = get_step(epicenter, direction)
explosion_spread(T, power - epicenter.explosion_resistance, direction)
SCHECK
F_SCHECK
//This step applies the ex_act effects for the explosion, as planned in the previous step.
for(var/turf/T in explosion_turfs)
@@ -233,13 +233,13 @@ var/datum/controller/process/explosives/bomb_processor
T = locate(x,y,z)
for(var/atom/A in T)
A.ex_act(severity)
SCHECK
F_SCHECK
explosion_in_progress = 0
// A proc used by recursive explosions. (The actually recursive bit.)
/datum/controller/process/explosives/proc/explosion_spread(turf/s, power, direction)
SCHECK
F_SCHECK
if (istype(s, /turf/unsimulated))
return
if(power <= 0)
+4 -4
View File
@@ -80,7 +80,7 @@ world/loop_checks = 0
tick_dels++
total_dels++
destroyed.Cut(1, 2)
SCHECK
F_SCHECK
#undef GC_FORCE_DEL_PER_TICK
#undef GC_COLLECTION_TIMEOUT
@@ -151,13 +151,13 @@ world/loop_checks = 0
/datum/proc/finalize_qdel()
if(IsPooled(src))
PlaceInPool(src)
returnToPool(src)
else
del(src)
/atom/finalize_qdel()
if(IsPooled(src))
PlaceInPool(src)
if (IsPooled(src))
returnToPool(src)
else
if(garbage_collector)
garbage_collector.AddTrash(src)
+1 -1
View File
@@ -11,4 +11,4 @@
log_access("AFK: [key_name(C)]")
C << "<SPAN CLASS='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</SPAN>"
del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients.
SCHECK
F_SCHECK
+3 -1
View File
@@ -7,6 +7,8 @@
var/list/med_severity = list()
var/list/high_severity = list()
disabled = 1
/datum/controller/process/law/New()
corp_regs = src
@@ -25,4 +27,4 @@
for( var/L in subtypesof( /datum/law/high_severity ))
high_severity += new L
laws = low_severity + med_severity + high_severity
laws = low_severity + med_severity + high_severity
+97
View File
@@ -0,0 +1,97 @@
#define STAGE_NONE 0
#define STAGE_SOURCE 1
#define STAGE_CORNER 2
#define STAGE_OVERLAY 3
/var/list/lighting_update_lights = list() // List of lighting sources queued for update.
/var/list/lighting_update_corners = list() // List of lighting corners queued for update.
/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update.
// Probably slow.
/var/lighting_profiling = FALSE
/var/datum/controller/process/lighting/lighting_process
/datum/controller/process/lighting
schedule_interval = LIGHTING_INTERVAL
var/list/curr_lights = list()
var/list/curr_corners = list()
var/list/curr_overlays = list()
var/list/resume_pos = 0
/datum/controller/process/lighting/setup()
name = "lighting"
lighting_process = src
/datum/controller/process/lighting/statProcess()
..()
stat(null, "[all_lighting_overlays.len] overlays ([all_lighting_corners.len] corners)")
stat(null, "Lights: [lighting_update_lights.len] queued, [curr_lights.len] processing")
stat(null, "Corners: [lighting_update_corners.len] queued, [curr_corners.len] processing")
stat(null, "Overlays: [lighting_update_overlays.len] queued, [curr_overlays.len] processing")
/datum/controller/process/lighting/doWork()
// -- SOURCES --
if (resume_pos == STAGE_NONE)
curr_lights = lighting_update_lights
lighting_update_lights = list()
resume_pos = STAGE_SOURCE
while (curr_lights.len)
var/datum/light_source/L = curr_lights[curr_lights.len]
curr_lights.len--
if(L.check() || L.destroyed || L.force_update)
L.remove_lum()
if(!L.destroyed)
L.apply_lum()
else if(L.vis_update) //We smartly update only tiles that became (in) visible to use.
L.smart_vis_update()
L.vis_update = FALSE
L.force_update = FALSE
L.needs_update = FALSE
F_SCHECK
// -- CORNERS --
if (resume_pos == STAGE_SOURCE)
curr_corners = lighting_update_corners
lighting_update_corners = list()
resume_pos = STAGE_CORNER
while (curr_corners.len)
var/datum/lighting_corner/C = curr_corners[curr_corners.len]
curr_corners.len--
C.update_overlays()
C.needs_update = FALSE
F_SCHECK
if (resume_pos == STAGE_CORNER)
curr_overlays = lighting_update_overlays
lighting_update_overlays = list()
resume_pos = STAGE_OVERLAY
while (curr_overlays.len)
var/atom/movable/lighting_overlay/O = curr_overlays[curr_overlays.len]
curr_overlays.len--
O.update_overlay()
O.needs_update = FALSE
F_SCHECK
resume_pos = 0
#undef STAGE_NONE
#undef STAGE_SOURCE
#undef STAGE_CORNER
#undef STAGE_OVERLAY
+90 -52
View File
@@ -1,67 +1,105 @@
/var/global/machinery_sort_required = 0
#define STAGE_NONE 0
#define STAGE_MACHINERY 1
#define STAGE_POWERNET 2
#define STAGE_POWERSINK 3
#define STAGE_PIPENET 4
/datum/controller/process/machinery
var/tmp/list/processing_machinery = list()
var/tmp/list/processing_powernets = list()
var/tmp/list/processing_powersinks = list()
var/tmp/list/processing_pipenets = list()
var/stage = STAGE_NONE
/datum/controller/process/machinery/setup()
name = "machinery"
schedule_interval = 20 // every 2 seconds
schedule_interval = 2 SECONDS
start_delay = 12
/datum/controller/process/machinery/doWork()
internal_sort()
internal_process_pipenets()
internal_process_machinery()
internal_process_power()
internal_process_power_drain()
// If we're starting a new tick, setup.
if (stage == STAGE_NONE)
processing_machinery = machines.Copy()
stage = STAGE_MACHINERY
// Process machinery.
while (processing_machinery.len)
var/obj/machinery/M = processing_machinery[processing_machinery.len]
processing_machinery.len--
if (!M || M.gcDestroyed)
machines -= M
continue
if (M.process() == PROCESS_KILL)
machines -= M
continue
if (M.use_power)
M.auto_use_power()
F_SCHECK
if (stage == STAGE_MACHINERY)
processing_powernets = powernets.Copy()
stage = STAGE_POWERNET
while (processing_powernets.len)
var/datum/powernet/PN = processing_powernets[processing_powernets.len]
processing_powernets.len--
if (!PN || PN.gcDestroyed)
powernets -= PN
continue
PN.reset()
F_SCHECK
if (stage == STAGE_POWERNET)
processing_powersinks = processing_power_items.Copy()
stage = STAGE_POWERSINK
while (processing_powersinks.len)
var/obj/item/I = processing_powersinks[processing_powersinks.len]
processing_powersinks.len--
if (!I || !I.pwr_drain())
processing_power_items -= I
F_SCHECK
if (stage == STAGE_POWERSINK)
processing_pipenets = pipe_networks.Copy()
stage = STAGE_PIPENET
while (processing_pipenets.len)
var/datum/pipe_network/PN = processing_pipenets[processing_pipenets.len]
processing_pipenets.len--
if (!PN || PN.gcDestroyed)
continue
PN.process()
F_SCHECK
stage = STAGE_NONE
/datum/controller/process/machinery/proc/internal_sort()
if(machinery_sort_required)
machinery_sort_required = 0
machines = dd_sortedObjectList(machines)
/datum/controller/process/machinery/proc/internal_process_machinery()
for(last_object in machines)
var/obj/machinery/M = last_object
if(M && !M.gcDestroyed)
if(M.process() == PROCESS_KILL)
//M.inMachineList = 0 We don't use this debugging function
machines.Remove(M)
continue
if(M && M.use_power)
M.auto_use_power()
SCHECK
/datum/controller/process/machinery/proc/internal_process_power()
for(last_object in powernets)
var/datum/powernet/powerNetwork = last_object
if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed))
powerNetwork.reset()
SCHECK
continue
powernets.Remove(powerNetwork)
/datum/controller/process/machinery/proc/internal_process_power_drain()
// Currently only used by powersinks. These items get priority processed before machinery
for(last_object in processing_power_items)
var/obj/item/I = last_object
if(!I.pwr_drain()) // 0 = Process Kill, remove from processing list.
processing_power_items.Remove(I)
SCHECK
/datum/controller/process/machinery/proc/internal_process_pipenets()
for(last_object in pipe_networks)
var/datum/pipe_network/pipeNetwork = last_object
if(istype(pipeNetwork) && isnull(pipeNetwork.gcDestroyed))
pipeNetwork.process()
SCHECK
continue
pipe_networks.Remove(pipeNetwork)
/datum/controller/process/machinery/statProcess()
..()
stat(null, "[machines.len] machines")
stat(null, "[powernets.len] powernets")
stat(null, "[pipe_networks.len] pipenets")
stat(null, "[processing_power_items.len] power item\s")
stat(null, "[machines.len] machines, [processing_machinery.len] queued")
stat(null, "[powernets.len] powernets, [processing_powernets.len] queued")
stat(null, "[processing_power_items.len] power items, [processing_powersinks.len] queued")
stat(null, "[pipe_networks.len] pipenets, [processing_pipenets.len] queued")
#undef STAGE_NONE
#undef STAGE_MACHINERY
#undef STAGE_POWERNET
#undef STAGE_POWERSINK
#undef STAGE_PIPENET
+20 -12
View File
@@ -1,9 +1,11 @@
/datum/controller/process/mob
var/tmp/datum/updateQueue/updateQueueInstance
var/tmp/list/queue = list()
var/normal_exit = TRUE
/datum/controller/process/mob/setup()
name = "mob"
schedule_interval = 20 // every 2 seconds
schedule_interval = 2 SECONDS // every 2 seconds
start_delay = 16
/datum/controller/process/mob/started()
@@ -12,18 +14,24 @@
mob_list = list()
/datum/controller/process/mob/doWork()
for(last_object in mob_list)
var/mob/M = last_object
if(M && isnull(M.gcDestroyed))
try
M.Life()
catch(var/exception/e)
catchException(e, M)
SCHECK
else
catchBadType(M)
if (normal_exit)
queue = mob_list.Copy()
normal_exit = FALSE
while (queue.len)
var/mob/M = queue[queue.len]
queue.len--
if (!M || M.gcDestroyed)
mob_list -= M
continue
M.Life()
F_SCHECK
normal_exit = TRUE
/datum/controller/process/mob/statProcess()
..()
stat(null, "[mob_list.len] mobs")
stat(null, "[mob_list.len] mobs, [queue.len] queued")
+26 -2
View File
@@ -1,12 +1,35 @@
/datum/controller/process/nanoui
var/is_idle = TRUE
var/list/queued_uis = list()
/datum/controller/process/nanoui/setup()
name = "nanoui"
schedule_interval = 20 // every 2 seconds
schedule_interval = 2 SECONDS
/datum/controller/process/nanoui/statProcess()
..()
stat(null, "[nanomanager.processing_uis.len] UIs")
stat(null, "[nanomanager.processing_uis.len] UIs, [queued_uis.len] processing")
/datum/controller/process/nanoui/doWork()
if (is_idle)
queued_uis = nanomanager.processing_uis.Copy()
is_idle = FALSE
while (queued_uis.len)
var/datum/nanoui/UI = queued_uis[queued_uis.len]
queued_uis.len--
if (!UI || UI.gcDestroyed)
catchBadType(UI)
nanomanager.processing_uis -= UI
continue
UI.process()
F_SCHECK
is_idle = TRUE
/*datum/controller/process/nanoui/doWork()
for(last_object in nanomanager.processing_uis)
var/datum/nanoui/NUI = last_object
if(istype(NUI) && isnull(NUI.gcDestroyed))
@@ -17,3 +40,4 @@
else
catchBadType(NUI)
nanomanager.processing_uis -= NUI
*/
+3 -3
View File
@@ -54,14 +54,14 @@ var/datum/controller/process/night_lighting/nl_ctrl
for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
APC.toggle_nightlight("on")
SCHECK
F_SCHECK
/datum/controller/process/night_lighting/proc/deactivate(var/whitelisted_only = 1)
isactive = 0
for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
APC.toggle_nightlight("off")
SCHECK
F_SCHECK
/datum/controller/process/night_lighting/proc/get_apc_list(var/whitelisted_only = 1)
var/list/obj/machinery/power/apc/lighting_apcs = list()
@@ -73,6 +73,6 @@ var/datum/controller/process/night_lighting/nl_ctrl
if (B.apc && !B.apc.aidisabled)
lighting_apcs += B.apc
SCHECK
F_SCHECK
return lighting_apcs
+21 -12
View File
@@ -1,6 +1,10 @@
/datum/controller/process/obj
var/normal_exit = TRUE
var/list/queue = list()
/datum/controller/process/obj/setup()
name = "obj"
schedule_interval = 20 // every 2 seconds
schedule_interval = 2 SECONDS
start_delay = 8
/datum/controller/process/obj/started()
@@ -9,18 +13,23 @@
processing_objects = list()
/datum/controller/process/obj/doWork()
for(last_object in processing_objects)
var/datum/O = last_object
if(isnull(O.gcDestroyed))
try
O:process()
catch(var/exception/e)
catchException(e, O)
SCHECK
else
catchBadType(O)
if (normal_exit)
queue = processing_objects.Copy()
normal_exit = FALSE
while (queue.len)
var/datum/O = queue[queue.len]
queue.len--
if (!O || O.gcDestroyed)
processing_objects -= O
continue
O:process()
F_SCHECK
normal_exit = TRUE
/datum/controller/process/obj/statProcess()
..()
stat(null, "[processing_objects.len] objects")
stat(null, "[processing_objects.len] objects, [queue.len] queued")
+22 -12
View File
@@ -5,6 +5,8 @@
************/
/datum/controller/process/scheduler
var/list/scheduled_tasks
var/tick_completed = TRUE
var/list/queued_tasks
/datum/controller/process/scheduler/setup()
name = "scheduler"
@@ -13,21 +15,29 @@
scheduler = src
/datum/controller/process/scheduler/doWork()
for(last_object in scheduled_tasks)
var/datum/scheduled_task/scheduled_task = last_object
try
if(world.time > scheduled_task.trigger_time)
unschedule(scheduled_task)
scheduled_task.pre_process()
scheduled_task.process()
scheduled_task.post_process()
catch(var/exception/e)
catchException(e, last_object)
SCHECK
if (tick_completed)
queued_tasks = scheduled_tasks.Copy()
tick_completed = FALSE
while (queued_tasks.len)
var/datum/scheduled_task/task = queued_tasks[queued_tasks.len]
queued_tasks.len--
if (world.time > task.trigger_time)
unschedule(task)
// why are these separated.
task.pre_process()
F_SCHECK // fuck it, it's a cheap call.
task.process()
F_SCHECK
task.post_process()
F_SCHECK
tick_completed = TRUE
/datum/controller/process/scheduler/statProcess()
..()
stat(null, "[scheduled_tasks.len] task\s")
stat(null, "[scheduled_tasks.len] tasks, [queued_tasks.len] queued")
/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st)
scheduled_tasks += st
+1 -1
View File
@@ -9,7 +9,7 @@ var/global/list/turf/processing_turfs = list()
var/turf/T = last_object
if(T.process() == PROCESS_KILL)
processing_turfs.Remove(T)
SCHECK
F_SCHECK
/datum/controller/process/turf/statProcess()
..()
+1 -1
View File
@@ -69,4 +69,4 @@ var/datum/controller/process/wireless/wirelessProcess
process_conections -= C
if(!target_found)
unsuccesful_connections += C
SCHECK
F_SCHECK
+8
View File
@@ -76,6 +76,14 @@ datum/controller/game_controller/proc/setup_objects()
T.broadcast_status()
admin_notice(span("danger", "Caching space parallax."))
create_global_parallax_icons()
admin_notice(span("danger", "Done."))
admin_notice(span("danger", "Setting up lighting."))
initialize_lighting()
admin_notice(span("danger", "Lighting Setup Completed."))
//Spawn the contents of the cargo warehouse
sleep(-1)
spawn_cargo_stock()
-94
View File
@@ -1,94 +0,0 @@
var/global/datum/news_controller/news_controller
/datum/news_controller
var/count = 0 //Count of articles pulled and published
var/publish_time //Ingame time for when the stored article is to be published
var/article_id //Stored article's primary-key
var/running = 1 //Boolean value, self-explanitory
var/fails = 0 //Counter for failed queries
var/max_fails = 5 //Maximum amount of failures before the controller is killed
/datum/news_controller/proc/process()
if(!running) //Not running, return.
return
if(fails >= max_fails) //Too many failures, killing.
kill()
return
if(!article_id && !publish_time) //No entry stored. Update and get one.
update()
return
if(publish_time < world.time) //Time to publish the article.
publish()
if(fails)
fails = 0
//Stores a new article for publishing.
/datum/news_controller/proc/update()
establish_db_connection(dbcon)
if(!dbcon.IsConnected())
error("SQL database connection failed. News_controller failed to retreive information.")
fails++
return
var/DBQuery/update_query = dbcon.NewQuery("SELECT id, publishtime FROM ss13_news WHERE status = 2 ORDER BY publishtime ASC LIMIT :count, 1")
update_query.Execute(list(":count" = count))
if(update_query.ErrorMsg())
fails++
return
if(!update_query.RowCount())
kill()
return
while(update_query.NextRow())
article_id = text2num(update_query.item[1])
publish_time = text2num(update_query.item[2]) * 600
count++
//Publish the stored article.
/datum/news_controller/proc/publish()
establish_db_connection(dbcon)
if(!dbcon.IsConnected())
error("SQL database connection failed. News_controller failed to retreive information.")
fails++
return
var/DBQuery/publish_query = dbcon.NewQuery("SELECT channel, author, body FROM ss13_news WHERE id = :article_id")
publish_query.Execute(list(":article_id" = article_id))
if(publish_query.ErrorMsg())
fails++
return
var/article_channel
var/article_author
var/article_content
while(publish_query.NextRow())
article_channel = publish_query.item[1]
article_author = publish_query.item[2]
article_content = publish_query.item[3]
var/channel_found
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == article_channel)
channel_found = 1
break
if(!channel_found)
news_network.CreateFeedChannel(article_channel, article_author, 0)
news_network.SubmitArticle(article_content, article_author, article_channel)
article_id = null
publish_time = null
update()
//Kills the controller.
/datum/news_controller/proc/kill()
running = 0
return
+7 -1
View File
@@ -25,7 +25,7 @@
usr.client.debug_variables(antag)
message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.")
/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Wireless","Observation"))
/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Wireless","Observation","Lighting","Explosives"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -98,5 +98,11 @@
if("Observation")
debug_variables(all_observable_events)
feedback_add_details("admin_verb", "DObservation")
if("Lighting")
debug_variables(lighting_process)
feedback_add_details("admin_verb", "DLightingP")
if("Explosives")
debug_variables(bomb_processor)
feedback_add_details("admin_verb", "DExplosives")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
return