diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 0ba0a831276..c504e7035ed 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -52,7 +52,7 @@ datum/controller/game_controller/New()
if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
if(!emergency_shuttle) emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle()
- if(!supply_shuttle) supply_shuttle = new /datum/controller/supply_shuttle()
+// if(!supply_shuttle) supply_shuttle = new /datum/controller/supply_shuttle()
datum/controller/game_controller/proc/setup()
world.tick_lag = config.Ticklag
diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index 374739f542d..9460ff35428 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -1,7 +1,7 @@
//TODO: rewrite and standardise all controller datums to the datum/controller type
//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done
-/client/proc/restart_controller(controller in list("Master","Failsafe","Lighting","Supply Shuttle"))
+/client/proc/restart_controller(controller in list("Master","Failsafe","Lighting","Supply"))
set category = "Debug"
set name = "Restart Controller"
set desc = "Restart one of the various periodic loop controllers for the game (be careful!)"
@@ -21,14 +21,14 @@
new /datum/controller/lighting()
lighting_controller.process()
feedback_add_details("admin_verb","RLighting")
- if("Supply Shuttle")
- supply_shuttle.process()
+ if("Supply")
+ supply_controller.process()
feedback_add_details("admin_verb","RSupply")
message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
return
-/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Crafting"))
+/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Crafting"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -62,8 +62,8 @@
if("Radio")
debug_variables(radio_controller)
feedback_add_details("admin_verb","DRadio")
- if("Supply Shuttle")
- debug_variables(supply_shuttle)
+ if("Supply")
+ debug_variables(supply_controller)
feedback_add_details("admin_verb","DSupply")
if("Emergency Shuttle")
debug_variables(emergency_shuttle)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index cb68423a579..f99b4cc795f 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -193,6 +193,8 @@ Implants;
return 1
return 0
+/datum/game_mode/proc/cleanup() //This is called when the round has ended but not the game, if any cleanup would be necessary in that case.
+ return
/datum/game_mode/proc/declare_completion()
var/clients = 0
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index a59a8c67215..f7490501f0b 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -12,6 +12,7 @@ var/global/datum/controller/gameticker/ticker
var/hide_mode = 0 // leave here at 0 ! setup() will take care of it when needed for Secret mode -walter0o
var/datum/game_mode/mode = null
+ var/post_game = 0
var/event_time = null
var/event = 0
@@ -133,7 +134,7 @@ var/global/datum/controller/gameticker/ticker
//here to initialize the random events nicely at round start
setup_economy()
-
+
setup_shuttle_docks()
spawn(0)//Forking here so we dont have to wait for this to finish
@@ -215,7 +216,7 @@ var/global/datum/controller/gameticker/ticker
if(admins_number == 0)
send2adminirc("Round has started with no admins online.")
- supply_shuttle.process() //Start the supply shuttle regenerating points -- TLE
+ supply_controller.process() //Start the supply shuttle regenerating points -- TLE
master_controller.process() //Start master_controller.process()
lighting_controller.process() //Start processing DynamicAreaLighting updates
@@ -375,8 +376,16 @@ var/global/datum/controller/gameticker/ticker
emergency_shuttle.process()
- var/mode_finished = mode.check_finished() || (emergency_shuttle.location == 2 && emergency_shuttle.alert == 1)
- if(!mode.explosion_in_progress && mode_finished)
+ var/game_finished = 0
+ var/mode_finished = 0
+ if (config.continous_rounds)
+ game_finished = (emergency_shuttle.location == 2 || mode.station_was_nuked)
+ mode_finished = (!post_game && mode.check_finished())
+ else
+ game_finished = (mode.check_finished() || (emergency_shuttle.location == 2 && emergency_shuttle.alert == 1))
+ mode_finished = game_finished
+
+ if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game))
current_state = GAME_STATE_FINISHED
spawn
@@ -407,6 +416,16 @@ var/global/datum/controller/gameticker/ticker
else
world << "\blue An admin has delayed the round end"
+ else if (mode_finished)
+ post_game = 1
+
+ mode.cleanup()
+
+ //call a transfer shuttle vote
+ spawn(50)
+ world << "\red The round has ended!"
+ vote.autotransfer()
+
return 1
proc/getfactionbyname(var/name)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 254c4e465d3..2a212b5ba1a 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -117,7 +117,7 @@
var/line1 = "SUPPLY"
var/line2 = ""
- var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle()
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle()
if (!shuttle)
line2 = "Error"
else if(shuttle.has_eta())
@@ -176,7 +176,7 @@
return ""
proc/get_supply_shuttle_timer()
- var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle()
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle()
if (!shuttle)
return "Error"
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index c23be68bbca..5b4e031aad7 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -412,14 +412,14 @@
if(mode==47)
var/supplyData[0]
- var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle()
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle()
if (shuttle)
supplyData["shuttle_moving"] = shuttle.has_eta()
supplyData["shuttle_eta"] = shuttle.eta_minutes()
supplyData["shuttle_loc"] = shuttle.at_station() ? "Station" : "Dock"
var/supplyOrderCount = 0
var/supplyOrderData[0]
- for(var/S in supply_shuttle.shoppinglist)
+ for(var/S in supply_controller.shoppinglist)
var/datum/supply_order/SO = S
supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment))
@@ -431,7 +431,7 @@
var/requestCount = 0
var/requestData[0]
- for(var/S in supply_shuttle.requestlist)
+ for(var/S in supply_controller.requestlist)
var/datum/supply_order/SO = S
requestCount++
requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment))
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index be919a87d9e..d0ae877e4db 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -4,8 +4,7 @@
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
-var/global/datum/controller/supply_shuttle/supply_shuttle
-//var/datum/controller/supply_shuttle/supply_shuttle = new()
+var/datum/controller/supply/supply_controller = new()
var/list/mechtoys = list(
/obj/item/toy/prize/ripley,
@@ -126,7 +125,7 @@ var/list/mechtoys = list(
var/orderedby = null
var/comment = null
-/datum/controller/supply_shuttle
+/datum/controller/supply
var/processing = 1
var/processing_interval = 300
var/iteration = 0
@@ -152,14 +151,14 @@ var/list/mechtoys = list(
proc/get_shuttle()
if (!shuttles || !(shuttle_tag in shuttles))
return null
-
+
var/datum/shuttle/ferry/supply/shuttle = shuttles[shuttle_tag]
-
+
if (!istype(shuttle))
return null
-
+
return shuttle
-
+
//Supply shuttle ticker - handles supply point regenertion and shuttle travelling between centcomm and the station
proc/process()
for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs))
@@ -172,7 +171,7 @@ var/list/mechtoys = list(
if(processing)
iteration++
points += points_per_process
-
+
var/datum/shuttle/ferry/supply/shuttle = get_shuttle()
if (shuttle)
shuttle.process_shuttle()
@@ -336,11 +335,11 @@ var/list/mechtoys = list(
if(temp)
dat = temp
else
- var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle()
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle()
if (shuttle)
dat += {"
Supply shuttle
Location: [shuttle.has_eta() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
-
Supply points: [supply_shuttle.points]
+
Supply points: [supply_controller.points]
\nRequest items
View approved orders
View requests
@@ -362,18 +361,18 @@ var/list/mechtoys = list(
//all_supply_groups
//Request what?
last_viewed_group = "categories"
- temp = "Supply points: [supply_shuttle.points]
"
+ temp = "Supply points: [supply_controller.points]
"
temp += "Main Menu
"
temp += "Select a category
"
for(var/supply_group_name in all_supply_groups )
temp += "[supply_group_name]
"
else
last_viewed_group = href_list["order"]
- temp = "Supply points: [supply_shuttle.points]
"
+ temp = "Supply points: [supply_controller.points]
"
temp += "Back to all categories
"
temp += "Request from: [last_viewed_group]
"
- for(var/supply_name in supply_shuttle.supply_packs )
- var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name]
+ for(var/supply_name in supply_controller.supply_packs )
+ var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage
@@ -384,7 +383,7 @@ var/list/mechtoys = list(
return
//Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_shuttle.supply_packs[href_list["doorder"]]
+ var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
if(!istype(P)) return
var/timeout = world.time + 600
@@ -401,11 +400,11 @@ var/list/mechtoys = list(
else if(issilicon(usr))
idname = usr.real_name
- supply_shuttle.ordernum++
+ supply_controller.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
reqform.name = "Requisition Form - [P.name]"
reqform.info += "[station_name] Supply Requisition Form
"
- reqform.info += "INDEX: #[supply_shuttle.ordernum]
"
+ reqform.info += "INDEX: #[supply_controller.ordernum]
"
reqform.info += "REQUESTED BY: [idname]
"
reqform.info += "RANK: [idrank]
"
reqform.info += "REASON: [reason]
"
@@ -421,24 +420,24 @@ var/list/mechtoys = list(
//make our supply_order datum
var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_shuttle.ordernum
+ O.ordernum = supply_controller.ordernum
O.object = P
O.orderedby = idname
- supply_shuttle.requestlist += O
+ supply_controller.requestlist += O
temp = "Thanks for your request. The cargo team will process it as soon as possible.
"
temp += "
Back Main Menu"
else if (href_list["vieworders"])
temp = "Current approved orders:
"
- for(var/S in supply_shuttle.shoppinglist)
+ for(var/S in supply_controller.shoppinglist)
var/datum/supply_order/SO = S
temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
"
temp += "
OK"
else if (href_list["viewrequests"])
temp = "Current requests:
"
- for(var/S in supply_shuttle.requestlist)
+ for(var/S in supply_controller.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
"
temp += "
OK"
@@ -463,7 +462,7 @@ var/list/mechtoys = list(
if (temp)
dat = temp
else
- var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle()
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle()
if (shuttle)
dat += "
Supply shuttle
"
dat += "\nLocation: "
@@ -479,7 +478,7 @@ var/list/mechtoys = list(
if ("undocking") dat += "Undocking from station [shuttle.can_force()? "OVERRIDE" : ""]
"
else
dat += "Station
"
-
+
if (shuttle.can_launch())
dat += "Send away"
else if (shuttle.can_cancel())
@@ -496,15 +495,15 @@ var/list/mechtoys = list(
else
dat += "*Shuttle is busy*"
dat += "
\n
"
-
-
- dat += {"
\nSupply points: [supply_shuttle.points]
\n
+
+
+ dat += {"
\nSupply points: [supply_controller.points]
\n
// [shuttle.at_station() ? "\n*Must be away to order items*
\n
":"\nOrder items
\n
"]
\nOrder items
\n
\nView requests
\n
\nView orders
\n
\nClose"}
-
+
user << browse(dat, "window=computer;size=575x450")
onclose(user, "computer")
@@ -520,10 +519,10 @@ var/list/mechtoys = list(
return
/obj/machinery/computer/supplycomp/Topic(href, href_list)
- if(!supply_shuttle)
- world.log << "## ERROR: Eek. The supply_shuttle controller datum is missing somehow."
+ if(!supply_controller)
+ world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow."
return
- var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle()
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle()
if (!shuttle)
world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow."
return
@@ -543,40 +542,40 @@ var/list/mechtoys = list(
temp = "Initiating launch sequence.
OK"
else
shuttle.launch(src)
- temp = "The supply shuttle has been called and will arrive in approximately [round(supply_shuttle.movetime/600,1)] minutes.
OK"
+ temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.
OK"
post_signal("supply")
-
+
if (href_list["force_send"])
shuttle.force_launch(src)
if (href_list["cancel_send"])
shuttle.cancel_launch(src)
-
+
else if (href_list["order"])
//if(!shuttle.idle()) return //this shouldn't be necessary it seems
if(href_list["order"] == "categories")
//all_supply_groups
//Request what?
last_viewed_group = "categories"
- temp = "Supply points: [supply_shuttle.points]
"
+ temp = "Supply points: [supply_controller.points]
"
temp += "Main Menu
"
temp += "Select a category
"
for(var/supply_group_name in all_supply_groups )
temp += "[supply_group_name]
"
else
last_viewed_group = href_list["order"]
- temp = "Supply points: [supply_shuttle.points]
"
+ temp = "Supply points: [supply_controller.points]
"
temp += "Back to all categories
"
temp += "Request from: [last_viewed_group]
"
- for(var/supply_name in supply_shuttle.supply_packs )
- var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name]
+ for(var/supply_name in supply_controller.supply_packs )
+ var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage
- /*temp = "Supply points: [supply_shuttle.points]
Request what?
"
+ /*temp = "Supply points: [supply_controller.points]
Request what?
"
- for(var/supply_name in supply_shuttle.supply_packs )
- var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name]
+ for(var/supply_name in supply_controller.supply_packs )
+ var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
if(N.hidden && !hacked) continue
if(N.contraband && !can_order_contraband) continue
temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage
@@ -589,7 +588,7 @@ var/list/mechtoys = list(
return
//Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_shuttle.supply_packs[href_list["doorder"]]
+ var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
if(!istype(P)) return
var/timeout = world.time + 600
@@ -606,11 +605,11 @@ var/list/mechtoys = list(
else if(issilicon(usr))
idname = usr.real_name
- supply_shuttle.ordernum++
+ supply_controller.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
reqform.name = "Requisition Form - [P.name]"
reqform.info += "[station_name] Supply Requisition Form
"
- reqform.info += "INDEX: #[supply_shuttle.ordernum]
"
+ reqform.info += "INDEX: #[supply_controller.ordernum]
"
reqform.info += "REQUESTED BY: [idname]
"
reqform.info += "RANK: [idrank]
"
reqform.info += "REASON: [reason]
"
@@ -626,10 +625,10 @@ var/list/mechtoys = list(
//make our supply_order datum
var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_shuttle.ordernum
+ O.ordernum = supply_controller.ordernum
O.object = P
O.orderedby = idname
- supply_shuttle.requestlist += O
+ supply_controller.requestlist += O
temp = "Order request placed.
"
temp += "
Back | Main Menu | Authorize Order"
@@ -640,15 +639,15 @@ var/list/mechtoys = list(
var/datum/supply_order/O
var/datum/supply_packs/P
temp = "Invalid Request"
- for(var/i=1, i<=supply_shuttle.requestlist.len, i++)
- var/datum/supply_order/SO = supply_shuttle.requestlist[i]
+ for(var/i=1, i<=supply_controller.requestlist.len, i++)
+ var/datum/supply_order/SO = supply_controller.requestlist[i]
if(SO.ordernum == ordernum)
O = SO
P = O.object
- if(supply_shuttle.points >= P.cost)
- supply_shuttle.requestlist.Cut(i,i+1)
- supply_shuttle.points -= P.cost
- supply_shuttle.shoppinglist += O
+ if(supply_controller.points >= P.cost)
+ supply_controller.requestlist.Cut(i,i+1)
+ supply_controller.points -= P.cost
+ supply_controller.shoppinglist += O
temp = "Thanks for your order.
"
temp += "
Back Main Menu"
else
@@ -658,7 +657,7 @@ var/list/mechtoys = list(
else if (href_list["vieworders"])
temp = "Current approved orders:
"
- for(var/S in supply_shuttle.shoppinglist)
+ for(var/S in supply_controller.shoppinglist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
"
temp += "
OK"
@@ -676,7 +675,7 @@ var/list/mechtoys = list(
*/
else if (href_list["viewrequests"])
temp = "Current requests:
"
- for(var/S in supply_shuttle.requestlist)
+ for(var/S in supply_controller.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] [shuttle.idle() ? "":shuttle.at_station() ? "":"Approve Remove"]
"
@@ -686,16 +685,16 @@ var/list/mechtoys = list(
else if (href_list["rreq"])
var/ordernum = text2num(href_list["rreq"])
temp = "Invalid Request.
"
- for(var/i=1, i<=supply_shuttle.requestlist.len, i++)
- var/datum/supply_order/SO = supply_shuttle.requestlist[i]
+ for(var/i=1, i<=supply_controller.requestlist.len, i++)
+ var/datum/supply_order/SO = supply_controller.requestlist[i]
if(SO.ordernum == ordernum)
- supply_shuttle.requestlist.Cut(i,i+1)
+ supply_controller.requestlist.Cut(i,i+1)
temp = "Request removed.
"
break
temp += "
Back Main Menu"
else if (href_list["clearreq"])
- supply_shuttle.requestlist.Cut()
+ supply_controller.requestlist.Cut()
temp = "List cleared.
"
temp += "
OK"
diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm
index 5f1ff015dbe..fedcc9efa77 100644
--- a/code/modules/shuttles/shuttle_supply.dm
+++ b/code/modules/shuttles/shuttle_supply.dm
@@ -20,7 +20,7 @@
origin = get_location_area(location)
if (!at_station()) //at centcom
- supply_shuttle.buy()
+ supply_controller.buy()
//it would be cool to play a sound here
moving_status = SHUTTLE_WARMUP
@@ -40,7 +40,7 @@
move(origin, away_area)
//wait ETA here.
- arrive_time = world.time + supply_shuttle.movetime
+ arrive_time = world.time + supply_controller.movetime
while (world.time <= arrive_time)
sleep(5)
@@ -50,14 +50,14 @@
moving_status = SHUTTLE_IDLE
if (!at_station()) //at centcom
- supply_shuttle.sell()
+ supply_controller.sell()
// returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms
/datum/shuttle/ferry/supply/proc/forbidden_atoms_check()
if (!at_station())
return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care
- return supply_shuttle.forbidden_atoms_check(get_location_area())
+ return supply_controller.forbidden_atoms_check(get_location_area())
/datum/shuttle/ferry/supply/proc/at_station()
return (!location)