diff --git a/code/__DEFINES/game.dm b/code/__DEFINES/game.dm
index 68518e80d6c..5c262724a14 100644
--- a/code/__DEFINES/game.dm
+++ b/code/__DEFINES/game.dm
@@ -1,3 +1,4 @@
+#define GAME_STATE_STARTUP 0
#define GAME_STATE_PREGAME 1
#define GAME_STATE_SETTING_UP 2
#define GAME_STATE_PLAYING 3
diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm
index a1e469e3c94..a3efbab50d9 100644
--- a/code/__DEFINES/gamemode.dm
+++ b/code/__DEFINES/gamemode.dm
@@ -8,12 +8,12 @@
#define TARGET_INVALID_EVENT 7
//gamemode istype helpers
-#define GAMEMODE_IS_BLOB (ticker && istype(ticker.mode, /datum/game_mode/blob))
-#define GAMEMODE_IS_CULT (ticker && istype(ticker.mode, /datum/game_mode/cult))
-#define GAMEMODE_IS_HEIST (ticker && istype(ticker.mode, /datum/game_mode/heist))
-#define GAMEMODE_IS_NUCLEAR (ticker && istype(ticker.mode, /datum/game_mode/nuclear))
-#define GAMEMODE_IS_REVOLUTION (ticker && istype(ticker.mode, /datum/game_mode/revolution))
-#define GAMEMODE_IS_WIZARD (ticker && istype(ticker.mode, /datum/game_mode/wizard))
+#define GAMEMODE_IS_BLOB (SSticker && istype(SSticker.mode, /datum/game_mode/blob))
+#define GAMEMODE_IS_CULT (SSticker && istype(SSticker.mode, /datum/game_mode/cult))
+#define GAMEMODE_IS_HEIST (SSticker && istype(SSticker.mode, /datum/game_mode/heist))
+#define GAMEMODE_IS_NUCLEAR (SSticker && istype(SSticker.mode, /datum/game_mode/nuclear))
+#define GAMEMODE_IS_REVOLUTION (SSticker && istype(SSticker.mode, /datum/game_mode/revolution))
+#define GAMEMODE_IS_WIZARD (SSticker && istype(SSticker.mode, /datum/game_mode/wizard))
//special roles
// Distinct from the ROLE_X defines because some antags have multiple special roles but only one ban type
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index 9d540c93bbc..a8f1ff2c6cb 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -86,23 +86,29 @@
#define ABOVE_LIGHTING_PLANE 16
#define ABOVE_LIGHTING_LAYER 16
-#define BYOND_LIGHTING_PLANE 17
-#define BYOND_LIGHTING_LAYER 17
+#define FLOOR_OPENSPACE_PLANE 17
+#define OPENSPACE_LAYER 17
+
+#define BYOND_LIGHTING_PLANE 18
+#define BYOND_LIGHTING_LAYER 18
+
+#define CAMERA_STATIC_PLANE 19
+#define CAMERA_STATIC_LAYER 19
//HUD layer defines
-#define FULLSCREEN_PLANE 18
-#define FLASH_LAYER 18
-#define FULLSCREEN_LAYER 18.1
-#define UI_DAMAGE_LAYER 18.2
-#define BLIND_LAYER 18.3
-#define CRIT_LAYER 18.4
-#define CURSE_LAYER 18.5
+#define FULLSCREEN_PLANE 20
+#define FLASH_LAYER 20
+#define FULLSCREEN_LAYER 20.1
+#define UI_DAMAGE_LAYER 20.2
+#define BLIND_LAYER 20.3
+#define CRIT_LAYER 20.4
+#define CURSE_LAYER 20.5
-#define HUD_PLANE 19
-#define HUD_LAYER 19
-#define ABOVE_HUD_PLANE 20
-#define ABOVE_HUD_LAYER 20
+#define HUD_PLANE 21
+#define HUD_LAYER 21
+#define ABOVE_HUD_PLANE 22
+#define ABOVE_HUD_LAYER 22
-#define SPLASHSCREEN_LAYER 21
-#define SPLASHSCREEN_PLANE 21
\ No newline at end of file
+#define SPLASHSCREEN_LAYER 23
+#define SPLASHSCREEN_PLANE 23
\ No newline at end of file
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 74b138497ee..76110bcbe98 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -277,7 +277,7 @@
#define TRIGGER_GUARD_NORMAL 1
// Macro to get the current elapsed round time, rather than total world runtime
-#define ROUND_TIME (round_start_time ? (world.time - round_start_time) : 0)
+#define ROUND_TIME (SSticker.round_start_time ? (world.time - SSticker.round_start_time) : 0)
// Macro that returns true if it's too early in a round to freely ghost out
#define TOO_EARLY_TO_GHOST (config && (ROUND_TIME < (config.round_abandon_penalty_period)))
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index e7f5262db1f..65fc87c3b34 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -150,7 +150,7 @@
// A logging proc that only outputs after setup is done, to
// help devs test initialization stuff that happens a lot
/proc/log_after_setup(var/message)
- if(ticker && ticker.current_state > GAME_STATE_SETTING_UP)
+ if(SSticker && SSticker.current_state > GAME_STATE_SETTING_UP)
to_chat(world, "[message]")
log_world(message)
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index dad2ecd7630..ed4f3242c4d 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -634,170 +634,214 @@ The _flatIcons list is a cache for generated icon files.
*/
// Creates a single icon from a given /atom or /image. Only the first argument is required.
-/proc/getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT)
- // We start with a blank canvas, otherwise some icon procs crash silently
- var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon
- if(!A)
- return flat
- if(A.alpha <= 0)
- return flat
+/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE)
+ //Define... defines.
+ var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing")
+
+ #define BLANK icon(flat_template)
+ #define SET_SELF(SETVAR) do { \
+ var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \
+ if(A.alpha<255) { \
+ SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\
+ } \
+ if(A.color) { \
+ if(islist(A.color)){ \
+ SELF_ICON.MapColors(arglist(A.color))} \
+ else{ \
+ SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \
+ } \
+ ##SETVAR=SELF_ICON;\
+ } while (0)
+ #define INDEX_X_LOW 1
+ #define INDEX_X_HIGH 2
+ #define INDEX_Y_LOW 3
+ #define INDEX_Y_HIGH 4
+
+ #define flatX1 flat_size[INDEX_X_LOW]
+ #define flatX2 flat_size[INDEX_X_HIGH]
+ #define flatY1 flat_size[INDEX_Y_LOW]
+ #define flatY2 flat_size[INDEX_Y_HIGH]
+ #define addX1 add_size[INDEX_X_LOW]
+ #define addX2 add_size[INDEX_X_HIGH]
+ #define addY1 add_size[INDEX_Y_LOW]
+ #define addY2 add_size[INDEX_Y_HIGH]
+
+ if(!A || A.alpha <= 0)
+ return BLANK
+
var/noIcon = FALSE
+ if(start)
+ if(!defdir)
+ defdir = A.dir
+ if(!deficon)
+ deficon = A.icon
+ if(!defstate)
+ defstate = A.icon_state
+ if(!defblend)
+ defblend = A.blend_mode
- var/curicon
- if(A.icon)
- curicon = A.icon
- else
- curicon = deficon
+ var/curicon = A.icon || deficon
+ var/curstate = A.icon_state || defstate
- if(!curicon)
- noIcon = TRUE // Do not render this object.
-
- var/curstate
- if(A.icon_state)
- curstate = A.icon_state
- else
- curstate = defstate
-
- if(!noIcon && !(curstate in icon_states(curicon)))
- if("" in icon_states(curicon))
- curstate = ""
- else
- noIcon = TRUE // Do not render this object.
+ if(!((noIcon = (!curicon))))
+ var/curstates = icon_states(curicon)
+ if(!(curstate in curstates))
+ if("" in curstates)
+ curstate = ""
+ else
+ noIcon = TRUE // Do not render this object.
var/curdir
- if(A.dir != 2)
- curdir = A.dir
- else
+ var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have
+
+ //These should use the parent's direction (most likely)
+ if(!A.dir || A.dir == SOUTH)
curdir = defdir
-
- var/curblend
- if(A.blend_mode == BLEND_DEFAULT)
- curblend = defblend
else
- curblend = A.blend_mode
+ curdir = A.dir
- // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
- var/list/layers = list()
- var/image/copy
- // Add the atom's icon itself, without pixel_x/y offsets.
- if(!noIcon)
- copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir)
- copy.color = A.color
- copy.alpha = A.alpha
- copy.blend_mode = curblend
- layers[copy] = A.layer
-
- // Loop through the underlays, then overlays, sorting them into the layers list
- var/list/process = A.underlays // Current list being processed
- var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays
- var/curIndex=1 // index of 'current' in list being processed
- var/current // Current overlay being sorted
- var/currentLayer // Calculated layer that overlay appears on (special case for FLOAT_LAYER)
- var/compare // The overlay 'add' is being compared against
- var/cmpIndex // The index in the layers list of 'compare'
- while(TRUE)
- if(curIndex<=process.len)
- current = process[curIndex]
- if(!current)
- curIndex++ //Skip this bad layer item
- continue
- currentLayer = current:layer
- if(currentLayer<0) // Special case for FLY_LAYER
- if(currentLayer <= -1000) return flat
- if(pSet == 0) // Underlay
- currentLayer = A.layer+currentLayer/1000
- else // Overlay
- currentLayer = A.layer+(1000+currentLayer)/1000
-
- // Sort add into layers list
- for(cmpIndex=1,cmpIndex<=layers.len,cmpIndex++)
- compare = layers[cmpIndex]
- if(currentLayer < layers[compare]) // Associated value is the calculated layer
- layers.Insert(cmpIndex,current)
- layers[current] = currentLayer
- break
- if(cmpIndex>layers.len) // Reached end of list without inserting
- layers[current]=currentLayer // Place at end
-
- curIndex++
-
- if(curIndex>process.len)
- if(pSet == 0) // Switch to overlays
- curIndex = 1
- pSet = 1
- process = A.overlays
- else // All done
+ //Try to remove/optimize this section ASAP, CPU hog.
+ //Determines if there's directionals.
+ if(!noIcon && curdir != SOUTH)
+ var/exist = FALSE
+ var/static/list/checkdirs = list(NORTH, EAST, WEST)
+ for(var/i in checkdirs) //Not using GLOB for a reason.
+ if(length(icon_states(icon(curicon, curstate, i))))
+ exist = TRUE
break
+ if(!exist)
+ base_icon_dir = SOUTH
+ //
- var/icon/add // Icon of overlay being added
+ if(!base_icon_dir)
+ base_icon_dir = curdir
- // Current dimensions of flattened icon
- var/flatX1 = 1
- var/flatX2 = flat.Width()
- var/flatY1 = 1
- var/flatY2 = flat.Height()
- // Dimensions of overlay being added
- var/addX1
- var/addX2
- var/addY1
- var/addY2
+ ASSERT(!BLEND_DEFAULT) //I might just be stupid but lets make sure this define is 0.
- for(var/I in layers)
+ var/curblend = A.blend_mode || defblend
- if(I:alpha == 0)
- continue
+ if(A.overlays.len || A.underlays.len)
+ var/icon/flat = BLANK
+ // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
+ var/list/layers = list()
+ var/image/copy
+ // Add the atom's icon itself, without pixel_x/y offsets.
+ if(!noIcon)
+ copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir)
+ copy.color = A.color
+ copy.alpha = A.alpha
+ copy.blend_mode = curblend
+ layers[copy] = A.layer
- if(I == copy) // 'I' is an /image based on the object being flattened.
- curblend = BLEND_OVERLAY
- add = icon(I:icon, I:icon_state, I:dir)
- // This checks for a silent failure mode of the icon routine. If the requested dir
- // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha.
- if(I:dir != SOUTH && add.Width() == 32 && add.Height() == 32)
- // Check every pixel for blank (computationally expensive, but the process is limited
- // by the amount of film on the station, only happens when we hit something that's
- // turned, and bails at the very first pixel it sees.
- var/blankpixel;
- for(var/y;y<=32;y++)
- for(var/x;x<32;x++)
- blankpixel = isnull(add.GetPixel(x,y))
- if(!blankpixel)
- break
- if(!blankpixel)
+ // Loop through the underlays, then overlays, sorting them into the layers list
+ for(var/process_set in 0 to 1)
+ var/list/process = process_set? A.overlays : A.underlays
+ for(var/i in 1 to process.len)
+ var/image/current = process[i]
+ if(!current)
+ continue
+ if(current.plane != FLOAT_PLANE && current.plane != A.plane)
+ continue
+ var/current_layer = current.layer
+ if(current_layer < 0)
+ if(current_layer <= -1000)
+ return flat
+ current_layer = process_set + A.layer + current_layer / 1000
+
+ for(var/p in 1 to layers.len)
+ var/image/cmp = layers[p]
+ if(current_layer < layers[cmp])
+ layers.Insert(p, current)
break
- // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0)
- if(blankpixel)
- // Pull the default direction.
- add = icon(I:icon, I:icon_state)
- else // 'I' is an appearance object.
- add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend)
+ layers[current] = current_layer
- // Find the new dimensions of the flat icon to fit the added overlay
- addX1 = min(flatX1, I:pixel_x+1)
- addX2 = max(flatX2, I:pixel_x+add.Width())
- addY1 = min(flatY1, I:pixel_y+1)
- addY2 = max(flatY2, I:pixel_y+add.Height())
+ //sortTim(layers, /proc/cmp_image_layer_asc)
- if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2)
- // Resize the flattened icon so the new icon fits
- flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1)
- flatX1=addX1;flatX2=addX2
- flatY1=addY1;flatY2=addY2
+ var/icon/add // Icon of overlay being added
- // Blend the overlay into the flattened icon
- flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1)
+ // Current dimensions of flattened icon
+ var/list/flat_size = list(1, flat.Width(), 1, flat.Height())
+ // Dimensions of overlay being added
+ var/list/add_size[4]
- if(A.color)
- flat.Blend(A.color, ICON_MULTIPLY)
- if(A.alpha < 255)
- flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
+ for(var/V in layers)
+ var/image/I = V
+ if(I.alpha == 0)
+ continue
- return icon(flat, "", SOUTH)
+ if(I == copy) // 'I' is an /image based on the object being flattened.
+ curblend = BLEND_OVERLAY
+ add = icon(I.icon, I.icon_state, base_icon_dir)
+ else // 'I' is an appearance object.
+ add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim)
+ if(!add)
+ continue
+ // Find the new dimensions of the flat icon to fit the added overlay
+ add_size = list(
+ min(flatX1, I.pixel_x+1),
+ max(flatX2, I.pixel_x+add.Width()),
+ min(flatY1, I.pixel_y+1),
+ max(flatY2, I.pixel_y+add.Height())
+ )
+
+ if(flat_size ~! add_size)
+ // Resize the flattened icon so the new icon fits
+ flat.Crop(
+ addX1 - flatX1 + 1,
+ addY1 - flatY1 + 1,
+ addX2 - flatX1 + 1,
+ addY2 - flatY1 + 1
+ )
+ flat_size = add_size.Copy()
+
+ // Blend the overlay into the flattened icon
+ flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1)
+
+ if(A.color)
+ if(islist(A.color))
+ flat.MapColors(arglist(A.color))
+ else
+ flat.Blend(A.color, ICON_MULTIPLY)
+
+ if(A.alpha < 255)
+ flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
+
+ if(no_anim)
+ //Clean up repeated frames
+ var/icon/cleaned = new /icon()
+ cleaned.Insert(flat, "", SOUTH, 1, 0)
+ . = cleaned
+ else
+ . = icon(flat, "", SOUTH)
+ else //There's no overlays.
+ if(!noIcon)
+ SET_SELF(.)
+
+ //Clear defines
+ #undef flatX1
+ #undef flatX2
+ #undef flatY1
+ #undef flatY2
+ #undef addX1
+ #undef addX2
+ #undef addY1
+ #undef addY2
+
+ #undef INDEX_X_LOW
+ #undef INDEX_X_HIGH
+ #undef INDEX_Y_LOW
+ #undef INDEX_Y_HIGH
+
+ #undef BLANK
+ #undef SET_SELF
/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N
var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A.
- for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it.
- if(I:layer>A.layer) continue//If layer is greater than what we need, skip it.
- var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects.
+ for(var/V in A.overlays)//For every image in overlays. var/image/I will not work, don't try it.
+ var/image/I = V
+ if(I.layer>A.layer)
+ continue//If layer is greater than what we need, skip it.
+ var/icon/image_overlay = new(I.icon,I.icon_state)//Blend only works with icon objects.
//Also, icons cannot directly set icon_state. Slower than changing variables but whatever.
alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay.
return alpha_mask//And now return the mask.
diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm
index 5b90cda376e..246377eba32 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -112,8 +112,8 @@ var/syndicate_name = null
//Traitors and traitor silicons will get these. Revs will not.
-var/syndicate_code_phrase//Code phrase for traitors.
-var/syndicate_code_response//Code response for traitors.
+GLOBAL_VAR(syndicate_code_phrase) //Code phrase for traitors.
+GLOBAL_VAR(syndicate_code_response) //Code response for traitors.
/*
Should be expanded.
diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm
index 54fd47a220d..d13bf08c58b 100644
--- a/code/__HELPERS/time.dm
+++ b/code/__HELPERS/time.dm
@@ -35,7 +35,7 @@
* If you want to display the canonical station "time" (aka the in-character time of the station) use station_time_timestamp
*/
/proc/classic_worldtime2text(time = world.time)
- time = (round_start_time ? (time - round_start_time) : (time - world.time))
+ time = (SSticker.round_start_time ? (time - SSticker.round_start_time) : (time - world.time))
return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]"
//Returns the world time in english
@@ -59,7 +59,7 @@
- You can use this, for example, to do "This will expire at [station_time_at(world.time + 500)]" to display a "station time" expiration date
which is much more useful for a player)*/
/proc/station_time(time=world.time, display_only=FALSE)
- return ((((time - round_start_time)) + GLOB.gametime_offset) % 864000) - (display_only ? GLOB.timezoneOffset : 0)
+ return ((((time - SSticker.round_start_time)) + GLOB.gametime_offset) % 864000) - (display_only ? GLOB.timezoneOffset : 0)
/proc/station_time_timestamp(format = "hh:mm:ss", time=world.time)
return time2text(station_time(time, TRUE), format)
diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index 77443fb4ab2..e5674a9b47b 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -83,4 +83,7 @@ GLOBAL_VAR_INIT(gametime_offset, 432000) // 12:00 in seconds
//printers shutdown if too much shit printed
var/copier_items_printed = 0
var/copier_max_items = 300
-var/copier_items_printed_logged = FALSE
\ No newline at end of file
+var/copier_items_printed_logged = FALSE
+
+
+GLOBAL_VAR(map_name) // Self explanatory
\ No newline at end of file
diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm
index e997a672e1f..ba8b70991c2 100644
--- a/code/_globalvars/station.dm
+++ b/code/_globalvars/station.dm
@@ -1,3 +1,2 @@
-var/global/datum/datacore/data_core = null
-
-var/map_name = "Unknown" //The name of the map that is loaded. Assigned in world/New()
\ No newline at end of file
+// TODO: Move this to be not in its own fucking file all alone on its own
+var/global/datum/datacore/data_core = null
\ No newline at end of file
diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm
index feb57d83c05..6fe3a781642 100644
--- a/code/_onclick/hud/blob_overmind.dm
+++ b/code/_onclick/hud/blob_overmind.dm
@@ -141,6 +141,9 @@
blobpwrdisplay.name = "blob power"
blobpwrdisplay.icon_state = "block"
blobpwrdisplay.screen_loc = ui_health
+ blobpwrdisplay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ blobpwrdisplay.layer = ABOVE_HUD_LAYER
+ blobpwrdisplay.plane = ABOVE_HUD_PLANE
static_inventory += blobpwrdisplay
blobhealthdisplay = new /obj/screen()
diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm
index bbac6e36df3..e011aea037c 100644
--- a/code/_onclick/hud/picture_in_picture.dm
+++ b/code/_onclick/hud/picture_in_picture.dm
@@ -1,7 +1,7 @@
/obj/screen/movable/pic_in_pic
name = "Picture-in-picture"
screen_loc = "CENTER"
- plane = GAME_PLANE
+ plane = FLOOR_PLANE
var/atom/center
var/width = 0
var/height = 0
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index aeda1e5baa6..c583617ac23 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -9,9 +9,10 @@
/obj/screen
name = ""
icon = 'icons/mob/screen_gen.dmi'
- layer = HUD_LAYER_SCREEN
- plane = ABOVE_HUD_PLANE
- unacidable = 1
+ layer = HUD_LAYER
+ plane = HUD_PLANE
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
+ unacidable = TRUE
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
var/datum/hud/hud = null
appearance_flags = NO_CLIENT_COLOR
@@ -36,6 +37,8 @@
/obj/screen/close
name = "close"
+ layer = ABOVE_HUD_LAYER
+ plane = ABOVE_HUD_PLANE
/obj/screen/close/Click()
if(master)
@@ -47,8 +50,6 @@
/obj/screen/drop
name = "drop"
icon_state = "act_drop"
- layer = HUD_LAYER
- plane = HUD_PLANE
/obj/screen/drop/Click()
usr.drop_item_v()
@@ -144,9 +145,7 @@
name = "resist"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_resist"
- layer = HUD_LAYER
- plane = HUD_PLANE
-
+
/obj/screen/resist/Click()
if(isliving(usr))
var/mob/living/L = usr
@@ -329,8 +328,6 @@
/obj/screen/inventory
var/slot_id //The indentifier for the slot. It has nothing to do with ID cards.
var/list/object_overlays = list()
- layer = HUD_LAYER
- plane = HUD_PLANE
/obj/screen/inventory/MouseEntered()
..()
@@ -420,8 +417,6 @@
return 1
/obj/screen/swap_hand
- layer = HUD_LAYER
- plane = HUD_PLANE
name = "swap hand"
/obj/screen/swap_hand/Click()
diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm
deleted file mode 100644
index 578c2725710..00000000000
--- a/code/controllers/Processes/ticker.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-var/global/datum/controller/process/ticker/tickerProcess
-
-/datum/controller/process/ticker
- var/lastTickerTimeDuration
- var/lastTickerTime
-
-/datum/controller/process/ticker/setup()
- name = "ticker"
- schedule_interval = 20 // every 2 seconds
-
- lastTickerTime = world.timeofday
- log_startup_progress("Time ticker starting up.")
-
- if(!ticker)
- ticker = new
-
- spawn(0)
- if(ticker)
- ticker.pregame()
-
-DECLARE_GLOBAL_CONTROLLER(ticker, tickerProcess)
-
-/datum/controller/process/ticker/doWork()
- var/currentTime = world.timeofday
-
- if(currentTime < lastTickerTime) // check for midnight rollover
- lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND
- else
- lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND
-
- lastTickerTime = currentTime
-
- ticker.process_decrepit()
-
-/datum/controller/process/ticker/proc/getLastTickerTimeDuration()
- return lastTickerTimeDuration
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index cf29e78c1ba..13d3fb2a4bb 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -793,7 +793,7 @@
config.sql_enabled = 0
log_config("WARNING: DB_CONFIG DEFINITION MISMATCH!")
spawn(60)
- if(ticker.current_state == GAME_STATE_PREGAME)
+ if(SSticker.current_state == GAME_STATE_PREGAME)
going = 0
spawn(600)
to_chat(world, "DB_CONFIG MISMATCH, ROUND START DELAYED.
Please check database version for recent upstream changes!")
diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm
index aa38a133cae..59510162e1c 100644
--- a/code/controllers/hooks-defs.dm
+++ b/code/controllers/hooks-defs.dm
@@ -9,17 +9,3 @@
* Called in gameticker.dm when a round starts.
*/
/hook/roundstart
-
-/**
- * Mob login hook.
- * Called in login.dm when a player logs in to a mob.
- * Parameters: var/client/client, var/mob/mob
- */
-/hook/mob_login
-
- /**
- * Mob logout hook.
- * Called in logout.dm when a player logs out of a mob.
- * Parameters: var/client/client, var/mob/mob
- */
-/hook/mob_logout
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index a9c7e0dbb7b..fa2465854f3 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -194,8 +194,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
to_chat(world, "[msg]")
log_world(msg)
- if(config.developer_express_start & ticker.current_state == GAME_STATE_PREGAME)
- ticker.current_state = GAME_STATE_SETTING_UP
+ if(config.developer_express_start & SSticker.current_state == GAME_STATE_PREGAME)
+ SSticker.current_state = GAME_STATE_SETTING_UP
if(!current_runlevel)
SetRunLevel(1)
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index f7021c88b5c..6a603bd7235 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -277,9 +277,9 @@ SUBSYSTEM_DEF(jobs)
SetupOccupations()
//Holder for Triumvirate is stored in the ticker, this just processes it
- if(ticker)
+ if(SSticker)
for(var/datum/job/ai/A in occupations)
- if(ticker.triai)
+ if(SSticker.triai)
A.spawn_positions = 3
//Get the players who are ready
diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm
index 358076c5652..4ebe1dceb0e 100644
--- a/code/controllers/subsystem/nightshift.dm
+++ b/code/controllers/subsystem/nightshift.dm
@@ -20,7 +20,7 @@ SUBSYSTEM_DEF(nightshift)
return ..()
/datum/controller/subsystem/nightshift/fire(resumed = FALSE)
- if(world.time - round_start_time < nightshift_first_check)
+ if(world.time - SSticker.round_start_time < nightshift_first_check)
return
check_nightshift()
diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm
index 30021df4fb1..a1ca9b5fdad 100644
--- a/code/controllers/subsystem/shuttles.dm
+++ b/code/controllers/subsystem/shuttles.dm
@@ -106,8 +106,8 @@ SUBSYSTEM_DEF(shuttle)
return
emergency = backup_shuttle
- if(world.time - round_start_time < config.shuttle_refuel_delay)
- to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.")
+ if(world.time - SSticker.round_start_time < config.shuttle_refuel_delay)
+ to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - SSticker.round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.")
return
switch(emergency.mode)
@@ -169,7 +169,7 @@ SUBSYSTEM_DEF(shuttle)
return
if(!emergency.canRecall)
return
- if(ticker.mode.name == "meteor")
+ if(SSticker.mode.name == "meteor")
return
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
diff --git a/code/game/gamemodes/gameticker.dm b/code/controllers/subsystem/ticker.dm
similarity index 79%
rename from code/game/gamemodes/gameticker.dm
rename to code/controllers/subsystem/ticker.dm
index 4f539409185..668dfe5a3d6 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -1,73 +1,118 @@
-var/global/datum/controller/gameticker/ticker
-var/round_start_time = 0
+SUBSYSTEM_DEF(ticker)
+ name = "Ticker"
+ init_order = INIT_ORDER_TICKER
-/datum/controller/gameticker
+ priority = FIRE_PRIORITY_TICKER
+ flags = SS_KEEP_TIMING
+ runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME
+
+ var/round_start_time = 0
var/const/restart_timeout = 600
- var/current_state = GAME_STATE_PREGAME
+ var/current_state = GAME_STATE_STARTUP
+ var/force_start = 0 // Do we want to force-start as soon as we can
var/force_ending = 0
-
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/event_time = null
var/event = 0
-
var/login_music // music played in pregame lobby
-
var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking.
-
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
var/Bible_item_state // item_state the chaplain has chosen for his bible
var/Bible_name // name of the bible
var/Bible_deity_name
-
var/datum/cult_info/cultdat = null //here instead of cult for adminbus purposes
-
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
-
var/list/syndicate_coalition = list() // list of traitor-compatible factions
var/list/factions = list() // list of all factions
var/list/availablefactions = list() // list of factions with openings
-
var/tipped = FALSE //Did we broadcast the tip of the day yet?
var/selected_tip // What will be the tip of the day?
-
- var/pregame_timeleft = 0
+ var/pregame_timeleft // This is used for calculations
var/delay_end = 0 //if set to nonzero, the round will not restart on it's own
-
var/triai = 0//Global holder for Triumvirate
var/initialtpass = 0 //holder for inital autotransfer vote timer
-
var/obj/screen/cinematic = null //used for station explosion cinematic
-
var/round_end_announced = 0 // Spam Prevention. Announce round end only once.\
-
-/datum/controller/gameticker/proc/pregame()
+/datum/controller/subsystem/ticker/Initialize()
login_music = pick(\
'sound/music/thunderdome.ogg',\
'sound/music/space.ogg',\
'sound/music/title1.ogg',\
'sound/music/title2.ogg',\
'sound/music/title3.ogg',)
- do
- pregame_timeleft = config.pregame_timestart
- to_chat(world, "Welcome to the pre-game lobby!")
- to_chat(world, "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds")
- while(current_state == GAME_STATE_PREGAME)
- sleep(10)
- if(going)
- pregame_timeleft--
+ // Setup codephrase
+ if(!GLOB.syndicate_code_phrase)
+ GLOB.syndicate_code_phrase = generate_code_phrase()
+ if(!GLOB.syndicate_code_response)
+ GLOB.syndicate_code_response = generate_code_phrase()
- if(pregame_timeleft <= 60 && !tipped)
+ // Map name
+ if(using_map && using_map.name)
+ GLOB.map_name = "[using_map.name]"
+ else
+ GLOB.map_name = "Unknown"
+
+ // World name
+ if(config && config.server_name)
+ world.name = "[config.server_name]: [station_name()]"
+ else
+ world.name = station_name()
+
+ return ..()
+
+
+/datum/controller/subsystem/ticker/fire()
+ switch(current_state)
+ if(GAME_STATE_STARTUP)
+ // This is ran as soon as the MC starts firing, and should only run ONCE, unless startup fails
+ round_start_time = world.time + (config.pregame_timestart * 10)
+ to_chat(world, "Welcome to the pre-game lobby!")
+ to_chat(world, "Please, setup your character and select ready. Game will start in [config.pregame_timestart] seconds")
+ current_state = GAME_STATE_PREGAME
+ fire() // TG says this is a good idea
+ if(GAME_STATE_PREGAME)
+ // This is so we dont have sleeps in controllers, because that is a bad, bad thing
+ pregame_timeleft = max(0,round_start_time - world.time)
+
+ if(pregame_timeleft <= 600 && !tipped) // 60 seconds
send_tip_of_the_round()
tipped = TRUE
-
- if(pregame_timeleft <= 0)
+
+ if(pregame_timeleft <= 0 || force_start)
current_state = GAME_STATE_SETTING_UP
Master.SetRunLevel(RUNLEVEL_SETUP)
- while(!setup())
+ if(GAME_STATE_SETTING_UP)
+ if(!setup()) // Setup failed
+ current_state = GAME_STATE_STARTUP
+ Master.SetRunLevel(RUNLEVEL_LOBBY)
+ if(GAME_STATE_PLAYING)
+ mode.process()
+ mode.process_job_tasks()
+ var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked
+ if(config.continuous_rounds)
+ mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result
+ else
+ game_finished |= mode.check_finished()
+ if(game_finished)
+ current_state = GAME_STATE_FINISHED
+ if(GAME_STATE_FINISHED)
+ current_state = GAME_STATE_FINISHED
+ Master.SetRunLevel(RUNLEVEL_POSTGAME) // This shouldnt process more than once, but you never know
+ auto_toggle_ooc(1) // Turn it on
-/datum/controller/gameticker/proc/votetimer()
+ spawn(0)
+ declare_completion()
+
+ spawn(50)
+ if(mode.station_was_nuked)
+ world.Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke")
+ else
+ world.Reboot("Round ended.", "end_proper", "proper completion")
+
+
+/datum/controller/subsystem/ticker/proc/votetimer()
var/timerbuffer = 0
if(initialtpass == 0)
timerbuffer = config.vote_autotransfer_initial
@@ -78,7 +123,8 @@ var/round_start_time = 0
initialtpass = 1
votetimer()
-/datum/controller/gameticker/proc/setup()
+
+/datum/controller/subsystem/ticker/proc/setup()
cultdat = setupcult()
//Create and announce mode
if(master_mode=="secret")
@@ -252,9 +298,7 @@ var/round_start_time = 0
return 1
- //Plus it provides an easy way to make cinematics for other events. Just use this as a template :)
-//Plus it provides an easy way to make cinematics for other events. Just use this as a template
-/datum/controller/gameticker/proc/station_explosion_cinematic(station_missed = 0, override = null)
+/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null)
if(cinematic)
return //already a cinematic in progress!
@@ -350,7 +394,7 @@ var/round_start_time = 0
-/datum/controller/gameticker/proc/create_characters()
+/datum/controller/subsystem/ticker/proc/create_characters()
for(var/mob/new_player/player in GLOB.player_list)
if(player.ready && player.mind)
if(player.mind.assigned_role == "AI")
@@ -364,13 +408,13 @@ var/round_start_time = 0
qdel(player)
-/datum/controller/gameticker/proc/collect_minds()
+/datum/controller/subsystem/ticker/proc/collect_minds()
for(var/mob/living/player in GLOB.player_list)
if(player.mind)
- ticker.minds += player.mind
+ SSticker.minds += player.mind
-/datum/controller/gameticker/proc/equip_characters()
+/datum/controller/subsystem/ticker/proc/equip_characters()
var/captainless=1
for(var/mob/living/carbon/human/player in GLOB.player_list)
if(player && player.mind && player.mind.assigned_role)
@@ -385,7 +429,7 @@ var/round_start_time = 0
if(!istype(M,/mob/new_player))
to_chat(M, "Captainship not forced on anyone.")
-/datum/controller/gameticker/proc/send_tip_of_the_round()
+/datum/controller/subsystem/ticker/proc/send_tip_of_the_round()
var/m
if(selected_tip)
m = selected_tip
@@ -400,44 +444,13 @@ var/round_start_time = 0
if(m)
to_chat(world, "Tip of the round: [html_encode(m)]")
-/datum/controller/gameticker/proc/process_decrepit()
- if(current_state != GAME_STATE_PLAYING)
- return 0
-
- mode.process()
- mode.process_job_tasks()
-
- //emergency_shuttle.process() DONE THROUGH PROCESS SCHEDULER
-
- var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked
- if(config.continuous_rounds)
- mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result
- else
- game_finished |= mode.check_finished()
-
- if((!mode.explosion_in_progress && game_finished) || force_ending)
- current_state = GAME_STATE_FINISHED
- Master.SetRunLevel(RUNLEVEL_POSTGAME)
- auto_toggle_ooc(1) // Turn it on
- spawn
- declare_completion()
-
- spawn(50)
-
- if(mode.station_was_nuked)
- world.Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke")
- else
- world.Reboot("Round ended.", "end_proper", "proper completion")
-
- return 1
-
-/datum/controller/gameticker/proc/getfactionbyname(var/name)
+/datum/controller/subsystem/ticker/proc/getfactionbyname(var/name)
for(var/datum/faction/F in factions)
if(F.name == name)
return F
-/datum/controller/gameticker/proc/declare_completion()
+/datum/controller/subsystem/ticker/proc/declare_completion()
nologevent = 1 //end of round murder and shenanigans are legal; there's no need to jam up attack logs past this point.
//Round statistics report
var/datum/station_state/end_state = new /datum/station_state()
@@ -482,9 +495,9 @@ var/round_start_time = 0
if(dronecount)
to_chat(world, "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] this round.")
- if(ticker.mode.eventmiscs.len)
+ if(mode.eventmiscs.len)
var/emobtext = ""
- for(var/datum/mind/eventmind in ticker.mode.eventmiscs)
+ for(var/datum/mind/eventmind in mode.eventmiscs)
emobtext += printeventplayer(eventmind)
emobtext += "
"
emobtext += printobjectives(eventmind)
@@ -515,5 +528,6 @@ var/round_start_time = 0
return 1
-/datum/controller/gameticker/proc/HasRoundStarted()
+/datum/controller/subsystem/ticker/proc/HasRoundStarted()
return current_state >= GAME_STATE_PLAYING
+
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index 4b267fe757f..27d499254a1 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -19,7 +19,7 @@ SUBSYSTEM_DEF(vote)
/datum/controller/subsystem/vote/fire()
if(mode)
// No more change mode votes after the game has started.
- if(mode == "gamemode" && ticker.current_state >= GAME_STATE_SETTING_UP)
+ if(mode == "gamemode" && SSticker.current_state >= GAME_STATE_SETTING_UP)
to_chat(world, "Voting aborted due to game start.")
reset()
return
@@ -125,7 +125,7 @@ SUBSYSTEM_DEF(vote)
var/text
if(winners.len > 0)
if(winners.len > 1)
- if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
+ if(mode != "gamemode" || SSticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
text = "Vote Tied Between:\n"
for(var/option in winners)
text += "\t[option]\n"
@@ -134,7 +134,7 @@ SUBSYSTEM_DEF(vote)
for(var/key in current_votes)
if(choices[current_votes[key]] == .)
round_voters += key // Keep track of who voted for the winning round.
- if(mode == "gamemode" && (. == "extended" || ticker.hide_mode == 0)) // Announce Extended gamemode, but not other gamemodes
+ if(mode == "gamemode" && (. == "extended" || SSticker.hide_mode == 0)) // Announce Extended gamemode, but not other gamemodes
text += "Vote Result: [.] ([choices[.]] vote\s)"
else
if(mode == "custom")
@@ -166,7 +166,7 @@ SUBSYSTEM_DEF(vote)
if("gamemode")
if(master_mode != .)
world.save_mode(.)
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
restart = 1
else
master_mode = .
@@ -208,17 +208,17 @@ SUBSYSTEM_DEF(vote)
if("restart")
choices.Add("Restart Round","Continue Playing")
if("gamemode")
- if(ticker.current_state >= 2)
+ if(SSticker.current_state >= 2)
return 0
choices.Add(config.votable_modes)
if("crew_transfer")
if(check_rights(R_ADMIN|R_MOD))
- if(ticker.current_state <= 2)
+ if(SSticker.current_state <= 2)
return 0
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
else
- if(ticker.current_state <= 2)
+ if(SSticker.current_state <= 2)
return 0
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index b23c9fe030a..55d68d9ea1a 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -36,7 +36,7 @@
debug_variables(Master)
feedback_add_details("admin_verb","Dsmc")
if("Ticker")
- debug_variables(ticker)
+ debug_variables(SSticker)
feedback_add_details("admin_verb","DTicker")
if("Air")
debug_variables(SSair)
diff --git a/code/datums/cache/air_alarm.dm b/code/datums/cache/air_alarm.dm
index a4b3ee21c56..a4d012df464 100644
--- a/code/datums/cache/air_alarm.dm
+++ b/code/datums/cache/air_alarm.dm
@@ -11,7 +11,7 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new()
if(!refresh)
return cache_entry.data
- if(ticker && ticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time
+ if(SSticker && SSticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time
alarms = cache_entry.data // Don't deleate the list
if(is_station_contact(passed_alarm.z)) // Still need sanity checks
alarms[++alarms.len] = passed_alarm.get_nano_data_console()
diff --git a/code/datums/cache/cache.dm b/code/datums/cache/cache.dm
index 2502bb871b2..f401e54517a 100644
--- a/code/datums/cache/cache.dm
+++ b/code/datums/cache/cache.dm
@@ -1,6 +1,6 @@
/datum/cache_entry
var/timestamp
- var/data
-
+ var/list/data = list()
+
/datum/repository
var/cache_data
\ No newline at end of file
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index 3fe88f7d0e9..e5b948f4f26 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -1,5 +1,3 @@
-// Squeak component ported over from tg
-
/datum/component/squeak
var/static/list/default_squeak_sounds = list('sound/items/toysqueak1.ogg'=1, 'sound/items/toysqueak2.ogg'=1, 'sound/items/toysqueak3.ogg'=1)
var/list/override_squeak_sounds
@@ -49,21 +47,12 @@
else
playsound(parent, pickweight(override_squeak_sounds), volume, 1, -1)
-/datum/component/squeak/proc/step_squeak(datum/source, mob/living/carbon/human/H)
- if(H.m_intent == MOVE_INTENT_RUN)
- if(steps > step_delay)
- play_squeak()
- steps = 0
- else
- steps++
- else
+/datum/component/squeak/proc/step_squeak()
+ if(steps > step_delay)
play_squeak()
-
-/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
- RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE)
-
-/datum/component/squeak/proc/on_drop(datum/source, mob/user)
- UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
+ steps = 0
+ else
+ steps++
/datum/component/squeak/proc/play_squeak_crossed(atom/movable/AM)
if(isitem(AM))
@@ -83,6 +72,13 @@
last_use = world.time
play_squeak()
+/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
+ RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE)
+
+/datum/component/squeak/proc/on_drop(datum/source, mob/user)
+ UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
+
+// Disposal pipes related shit
/datum/component/squeak/proc/disposing_react(datum/source, obj/structure/disposalholder/holder, obj/machinery/disposal/source)
//We don't need to worry about unregistering this signal as it will happen for us automaticaly when the holder is qdeleted
RegisterSignal(holder, COMSIG_ATOM_DIR_CHANGE, .proc/holder_dir_change)
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 6fdb8a359c2..13c3fb64f33 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -1242,13 +1242,28 @@
return
switch(Text)
- if("brute") L.adjustBruteLoss(amount, robotic=1)
- if("fire") L.adjustFireLoss(amount, robotic=1)
- if("toxin") L.adjustToxLoss(amount)
- if("oxygen")L.adjustOxyLoss(amount)
- if("brain") L.adjustBrainLoss(amount)
- if("clone") L.adjustCloneLoss(amount)
- if("stamina") L.adjustStaminaLoss(amount)
+ if("brute")
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.adjustBruteLoss(amount, robotic = TRUE)
+ else
+ L.adjustBruteLoss(amount)
+ if("fire")
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.adjustFireLoss(amount, robotic = TRUE)
+ else
+ L.adjustFireLoss(amount)
+ if("toxin")
+ L.adjustToxLoss(amount)
+ if("oxygen")
+ L.adjustOxyLoss(amount)
+ if("brain")
+ L.adjustBrainLoss(amount)
+ if("clone")
+ L.adjustCloneLoss(amount)
+ if("stamina")
+ L.adjustStaminaLoss(amount)
else
to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]")
return
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 2dd2d72a816..e5948a47e30 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -93,8 +93,8 @@ var/datum/atom_hud/huds = list( \
// gang_huds += G.ganghud
var/serv_huds = list()//mindslaves and/or vampire thralls
- if(ticker.mode)
- for(var/datum/mindslaves/serv in (ticker.mode.vampires | ticker.mode.traitors))
+ if(SSticker.mode)
+ for(var/datum/mindslaves/serv in (SSticker.mode.vampires | SSticker.mode.traitors))
serv_huds += serv.thrallhud
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 65b3940cde2..c20ded784a1 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -84,7 +84,7 @@
soulOwner = src
/datum/mind/Destroy()
- ticker.minds -= src
+ SSticker.minds -= src
if(islist(antag_datums))
for(var/i in antag_datums)
var/datum/antagonist/antag_datum = i
@@ -163,7 +163,7 @@
/datum/mind/proc/_memory_edit_header(gamemode, list/alt)
. = gamemode
- if(ticker.mode.config_tag == gamemode || (LAZYLEN(alt) && (ticker.mode.config_tag in alt)))
+ if(SSticker.mode.config_tag == gamemode || (LAZYLEN(alt) && (SSticker.mode.config_tag in alt)))
. = uppertext(.)
. = "[.]: "
@@ -183,7 +183,7 @@
. = _memory_edit_header("revolution")
if(ismindshielded(H))
. += "NO|headrev|rev"
- else if(src in ticker.mode.head_revolutionaries)
+ else if(src in SSticker.mode.head_revolutionaries)
. += "no|HEADREV|rev"
. += "
Flash: give"
@@ -200,7 +200,7 @@
. += " Reequip (gives traitor uplink)."
if(objectives.len==0)
. += "
Objectives are empty! Set to kill all heads."
- else if(src in ticker.mode.revolutionaries)
+ else if(src in SSticker.mode.revolutionaries)
. += "no|headrev|REV"
else
. += "NO|headrev|rev"
@@ -211,7 +211,7 @@
. = _memory_edit_header("cult")
if(ismindshielded(H))
. += "NO|cultist"
- else if(src in ticker.mode.cult)
+ else if(src in SSticker.mode.cult)
. += "no|CULTIST"
. += "
Give tome|equip."
else
@@ -221,7 +221,7 @@
/datum/mind/proc/memory_edit_wizard(mob/living/carbon/human/H)
. = _memory_edit_header("wizard")
- if(src in ticker.mode.wizards)
+ if(src in SSticker.mode.wizards)
. += "WIZARD|no"
. += "
To lair, undress, dress up, let choose name."
if(objectives.len==0)
@@ -233,7 +233,7 @@
/datum/mind/proc/memory_edit_changeling(mob/living/carbon/human/H)
. = _memory_edit_header("changeling", list("traitorchan"))
- if(src in ticker.mode.changelings)
+ if(src in SSticker.mode.changelings)
. += "CHANGELING|no"
if(objectives.len==0)
. += "
Objectives are empty! Randomize!"
@@ -246,7 +246,7 @@
/datum/mind/proc/memory_edit_vampire(mob/living/carbon/human/H)
. = _memory_edit_header("vampire", list("traitorvamp"))
- if(src in ticker.mode.vampires)
+ if(src in SSticker.mode.vampires)
. += "VAMPIRE|no"
if(objectives.len==0)
. += "
Objectives are empty! Randomize!"
@@ -256,14 +256,14 @@
. += _memory_edit_role_enabled(ROLE_VAMPIRE)
/** Enthralled ***/
. += "
enthralled: "
- if(src in ticker.mode.vampire_enthralled)
+ if(src in SSticker.mode.vampire_enthralled)
. += "THRALL|no"
else
. += "thrall|NO"
/datum/mind/proc/memory_edit_nuclear(mob/living/carbon/human/H)
. = _memory_edit_header("nuclear")
- if(src in ticker.mode.syndicates)
+ if(src in SSticker.mode.syndicates)
. += "OPERATIVE|no"
. += "
To shuttle, undress, dress up."
var/code
@@ -280,9 +280,9 @@
/datum/mind/proc/memory_edit_shadowling(mob/living/carbon/human/H)
. = _memory_edit_header("shadowling")
- if(src in ticker.mode.shadows)
+ if(src in SSticker.mode.shadows)
. += "SHADOWLING|thrall|no"
- else if(src in ticker.mode.shadowling_thralls)
+ else if(src in SSticker.mode.shadowling_thralls)
. += "Shadowling|THRALL|no"
else
. += "shadowling|thrall|NO"
@@ -291,7 +291,7 @@
/datum/mind/proc/memory_edit_abductor(mob/living/carbon/human/H)
. = _memory_edit_header("abductor")
- if(src in ticker.mode.abductors)
+ if(src in SSticker.mode.abductors)
. += "ABDUCTOR|no"
. += "|undress|equip"
else
@@ -301,14 +301,14 @@
/datum/mind/proc/memory_edit_devil(mob/living/H)
. = _memory_edit_header("devil", list("devilagents"))
- if(src in ticker.mode.devils)
+ if(src in SSticker.mode.devils)
if(!devilinfo)
. += "No devilinfo found! Yell at a coder!"
else if(!devilinfo.ascendable)
. += "DEVIL|Ascendable Devil|sintouched|no"
else
. += "DEVIL|ASCENDABLE DEVIL|sintouched|no"
- else if(src in ticker.mode.sintouched)
+ else if(src in SSticker.mode.sintouched)
. += "devil|Ascendable Devil|SINTOUCHED|no"
else
. += "devil|Ascendable Devil|sintouched|NO"
@@ -317,14 +317,14 @@
/datum/mind/proc/memory_edit_eventmisc(mob/living/H)
. = _memory_edit_header("event", list())
- if(src in ticker.mode.eventmiscs)
+ if(src in SSticker.mode.eventmiscs)
. += "YES|no"
else
. += "Event Role|NO"
/datum/mind/proc/memory_edit_traitor()
. = _memory_edit_header("traitor", list("traitorchan", "traitorvamp"))
- if(src in ticker.mode.traitors)
+ if(src in SSticker.mode.traitors)
. += "TRAITOR|no"
if(objectives.len==0)
. += "
Objectives are empty! Randomize!"
@@ -348,9 +348,9 @@
/datum/mind/proc/memory_edit_uplink()
. = ""
- if(ishuman(current) && ((src in ticker.mode.head_revolutionaries) || \
- (src in ticker.mode.traitors) || \
- (src in ticker.mode.syndicates)))
+ if(ishuman(current) && ((src in SSticker.mode.head_revolutionaries) || \
+ (src in SSticker.mode.traitors) || \
+ (src in SSticker.mode.syndicates)))
. = "Uplink: give"
var/obj/item/uplink/hidden/suplink = find_syndicate_uplink()
var/crystals
@@ -366,7 +366,7 @@
// ^ whoever left this comment is literally a grammar nazi. stalin better. in russia grammar correct you.
/datum/mind/proc/edit_memory()
- if(!ticker || !ticker.mode)
+ if(!SSticker || !SSticker.mode)
alert("Not before round-start!", "Alert")
return
@@ -419,7 +419,7 @@
This prioritizes antags relevant to the current round to make them appear at the top of the panel.
Traitorchan and traitorvamp are snowflaked in because they have multiple sections.
*/
- if(ticker.mode.config_tag == "traitorchan")
+ if(SSticker.mode.config_tag == "traitorchan")
if(sections["traitor"])
out += sections["traitor"] + "
"
if(sections["changeling"])
@@ -427,7 +427,7 @@
sections -= "traitor"
sections -= "changeling"
// Elif technically unnecessary but it makes the following else look better
- else if(ticker.mode.config_tag == "traitorvamp")
+ else if(SSticker.mode.config_tag == "traitorvamp")
if(sections["traitor"])
out += sections["traitor"] + "
"
if(sections["vampire"])
@@ -435,9 +435,9 @@
sections -= "traitor"
sections -= "vampire"
else
- if(sections[ticker.mode.config_tag])
- out += sections[ticker.mode.config_tag] + "
"
- sections -= ticker.mode.config_tag
+ if(sections[SSticker.mode.config_tag])
+ out += sections[SSticker.mode.config_tag] + "
"
+ sections -= SSticker.mode.config_tag
for(var/i in sections)
if(sections[i])
@@ -512,7 +512,7 @@
var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string.
var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
possible_targets += possible_target.current
@@ -612,7 +612,7 @@
if("identity theft")
var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if((possible_target != src) && ishuman(possible_target.current))
possible_targets += possible_target
possible_targets = sortAtom(possible_targets)
@@ -687,19 +687,19 @@
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a mindshield implant")
to_chat(H, "You somehow have become the recepient of a mindshield transplant, and it just activated!")
- if(src in ticker.mode.revolutionaries)
+ if(src in SSticker.mode.revolutionaries)
special_role = null
- ticker.mode.revolutionaries -= src
+ SSticker.mode.revolutionaries -= src
to_chat(src, "The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!")
- if(src in ticker.mode.head_revolutionaries)
+ if(src in SSticker.mode.head_revolutionaries)
special_role = null
- ticker.mode.head_revolutionaries -=src
+ SSticker.mode.head_revolutionaries -=src
to_chat(src, "The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!")
- if(src in ticker.mode.cult)
- ticker.mode.cult -= src
- ticker.mode.update_cult_icons_removed(src)
+ if(src in SSticker.mode.cult)
+ SSticker.mode.cult -= src
+ SSticker.mode.update_cult_icons_removed(src)
special_role = null
- var/datum/game_mode/cult/cult = ticker.mode
+ var/datum/game_mode/cult/cult = SSticker.mode
if(istype(cult))
cult.memorize_cult_objectives(src)
to_chat(current, "The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!")
@@ -709,46 +709,46 @@
switch(href_list["revolution"])
if("clear")
- if(src in ticker.mode.revolutionaries)
- ticker.mode.revolutionaries -= src
+ if(src in SSticker.mode.revolutionaries)
+ SSticker.mode.revolutionaries -= src
to_chat(current, "You have been brainwashed! You are no longer a revolutionary!")
- ticker.mode.update_rev_icons_removed(src)
+ SSticker.mode.update_rev_icons_removed(src)
special_role = null
- if(src in ticker.mode.head_revolutionaries)
- ticker.mode.head_revolutionaries -= src
+ if(src in SSticker.mode.head_revolutionaries)
+ SSticker.mode.head_revolutionaries -= src
to_chat(current, "You have been brainwashed! You are no longer a head revolutionary!")
- ticker.mode.update_rev_icons_removed(src)
+ SSticker.mode.update_rev_icons_removed(src)
special_role = null
log_admin("[key_name(usr)] has de-rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-rev'd [key_name_admin(current)]")
if("rev")
- if(src in ticker.mode.head_revolutionaries)
- ticker.mode.head_revolutionaries -= src
- ticker.mode.update_rev_icons_removed(src)
+ if(src in SSticker.mode.head_revolutionaries)
+ SSticker.mode.head_revolutionaries -= src
+ SSticker.mode.update_rev_icons_removed(src)
to_chat(current, "Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!")
- else if(!(src in ticker.mode.revolutionaries))
+ else if(!(src in SSticker.mode.revolutionaries))
to_chat(current, " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!")
else
return
- ticker.mode.revolutionaries += src
- ticker.mode.update_rev_icons_added(src)
+ SSticker.mode.revolutionaries += src
+ SSticker.mode.update_rev_icons_added(src)
special_role = SPECIAL_ROLE_REV
log_admin("[key_name(usr)] has rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has rev'd [key_name_admin(current)]")
if("headrev")
- if(src in ticker.mode.revolutionaries)
- ticker.mode.revolutionaries -= src
- ticker.mode.update_rev_icons_removed(src)
+ if(src in SSticker.mode.revolutionaries)
+ SSticker.mode.revolutionaries -= src
+ SSticker.mode.update_rev_icons_removed(src)
to_chat(current, "You have proven your devotion to revolution! You are a head revolutionary now!")
- else if(!(src in ticker.mode.head_revolutionaries))
+ else if(!(src in SSticker.mode.head_revolutionaries))
to_chat(current, "You are a member of the revolutionaries' leadership now!")
else
return
- if(ticker.mode.head_revolutionaries.len>0)
+ if(SSticker.mode.head_revolutionaries.len>0)
// copy targets
- var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
+ var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries
if(valid_head)
for(var/datum/objective/mutiny/O in valid_head.objectives)
var/datum/objective/mutiny/rev_obj = new
@@ -756,21 +756,21 @@
rev_obj.target = O.target
rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]."
objectives += rev_obj
- ticker.mode.greet_revolutionary(src,0)
- ticker.mode.head_revolutionaries += src
- ticker.mode.update_rev_icons_added(src)
+ SSticker.mode.greet_revolutionary(src,0)
+ SSticker.mode.head_revolutionaries += src
+ SSticker.mode.update_rev_icons_added(src)
special_role = SPECIAL_ROLE_HEAD_REV
log_admin("[key_name(usr)] has head-rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has head-rev'd [key_name_admin(current)]")
if("autoobjectives")
- ticker.mode.forge_revolutionary_objectives(src)
- ticker.mode.greet_revolutionary(src,0)
+ SSticker.mode.forge_revolutionary_objectives(src)
+ SSticker.mode.greet_revolutionary(src,0)
log_admin("[key_name(usr)] has automatically forged revolutionary objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged revolutionary objectives for [key_name_admin(current)]")
if("flash")
- if(!ticker.mode.equip_revolutionary(current))
+ if(!SSticker.mode.equip_revolutionary(current))
to_chat(usr, "Spawning flash failed!")
log_admin("[key_name(usr)] has given [key_name(current)] a flash")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a flash")
@@ -800,8 +800,8 @@
qdel(flash)
take_uplink()
var/fail = 0
- fail |= !ticker.mode.equip_traitor(current, 1)
- fail |= !ticker.mode.equip_revolutionary(current)
+ fail |= !SSticker.mode.equip_traitor(current, 1)
+ fail |= !SSticker.mode.equip_revolutionary(current)
if(fail)
to_chat(usr, "Reequipping revolutionary goes wrong!")
return
@@ -811,17 +811,17 @@
else if(href_list["cult"])
switch(href_list["cult"])
if("clear")
- if(src in ticker.mode.cult)
- ticker.mode.remove_cultist(src)
+ if(src in SSticker.mode.cult)
+ SSticker.mode.remove_cultist(src)
special_role = null
log_admin("[key_name(usr)] has de-culted [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-culted [key_name_admin(current)]")
if("cultist")
- if(!(src in ticker.mode.cult))
- ticker.mode.add_cultist(src)
+ if(!(src in SSticker.mode.cult))
+ SSticker.mode.add_cultist(src)
special_role = SPECIAL_ROLE_CULTIST
- to_chat(current, "You catch a glimpse of the Realm of [ticker.cultdat.entity_name], [ticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.cultdat.entity_name].")
- to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [ticker.cultdat.entity_title2] above all else. Bring It back.")
+ to_chat(current, "You catch a glimpse of the Realm of [SSticker.cultdat.entity_name], [SSticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [SSticker.cultdat.entity_name].")
+ to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [SSticker.cultdat.entity_title2] above all else. Bring It back.")
log_admin("[key_name(usr)] has culted [key_name(current)]")
message_admins("[key_name_admin(usr)] has culted [key_name_admin(current)]")
if("tome")
@@ -846,7 +846,7 @@
message_admins("[key_name_admin(usr)] has spawned a tome for [key_name_admin(current)]")
if("equip")
- if(!ticker.mode.equip_cultist(current))
+ if(!SSticker.mode.equip_cultist(current))
to_chat(usr, "Spawning equipment failed!")
log_admin("[key_name(usr)] has equipped [key_name(current)] as a cultist")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist")
@@ -855,21 +855,21 @@
switch(href_list["wizard"])
if("clear")
- if(src in ticker.mode.wizards)
- ticker.mode.wizards -= src
+ if(src in SSticker.mode.wizards)
+ SSticker.mode.wizards -= src
special_role = null
current.spellremove(current)
current.faction = list("Station")
- ticker.mode.update_wiz_icons_removed(src)
+ SSticker.mode.update_wiz_icons_removed(src)
to_chat(current, "You have been brainwashed! You are no longer a wizard!")
log_admin("[key_name(usr)] has de-wizarded [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-wizarded [key_name_admin(current)]")
if("wizard")
- if(!(src in ticker.mode.wizards))
- ticker.mode.wizards += src
+ if(!(src in SSticker.mode.wizards))
+ SSticker.mode.wizards += src
special_role = SPECIAL_ROLE_WIZARD
//ticker.mode.learn_basic_spells(current)
- ticker.mode.update_wiz_icons_added(src)
+ SSticker.mode.update_wiz_icons_added(src)
SEND_SOUND(current, 'sound/ambience/antag/ragesmages.ogg')
to_chat(current, "You are a Space Wizard!")
current.faction = list("wizard")
@@ -880,15 +880,15 @@
log_admin("[key_name(usr)] has moved [key_name(current)] to the wizard's lair")
message_admins("[key_name_admin(usr)] has moved [key_name_admin(current)] to the wizard's lair")
if("dressup")
- ticker.mode.equip_wizard(current)
+ SSticker.mode.equip_wizard(current)
log_admin("[key_name(usr)] has equipped [key_name(current)] as a wizard")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a wizard")
if("name")
- ticker.mode.name_wizard(current)
+ SSticker.mode.name_wizard(current)
log_admin("[key_name(usr)] has allowed wizard [key_name(current)] to name themselves")
message_admins("[key_name_admin(usr)] has allowed wizard [key_name_admin(current)] to name themselves")
if("autoobjectives")
- ticker.mode.forge_wizard_objectives(src)
+ SSticker.mode.forge_wizard_objectives(src)
to_chat(usr, "The objectives for wizard [key] have been generated. You can edit them and announce manually.")
log_admin("[key_name(usr)] has automatically forged wizard objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged wizard objectives for [key_name_admin(current)]")
@@ -897,20 +897,20 @@
else if(href_list["changeling"])
switch(href_list["changeling"])
if("clear")
- if(src in ticker.mode.changelings)
- ticker.mode.changelings -= src
+ if(src in SSticker.mode.changelings)
+ SSticker.mode.changelings -= src
special_role = null
current.remove_changeling_powers()
- ticker.mode.update_change_icons_removed(src)
+ SSticker.mode.update_change_icons_removed(src)
if(changeling) qdel(changeling)
to_chat(current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!")
log_admin("[key_name(usr)] has de-changelinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-changelinged [key_name_admin(current)]")
if("changeling")
- if(!(src in ticker.mode.changelings))
- ticker.mode.changelings += src
- ticker.mode.grant_changeling_powers(current)
- ticker.mode.update_change_icons_added(src)
+ if(!(src in SSticker.mode.changelings))
+ SSticker.mode.changelings += src
+ SSticker.mode.grant_changeling_powers(current)
+ SSticker.mode.update_change_icons_added(src)
special_role = SPECIAL_ROLE_CHANGELING
SEND_SOUND(current, 'sound/ambience/antag/ling_aler.ogg')
to_chat(current, "Your powers have awoken. A flash of memory returns to us... we are a changeling!")
@@ -918,7 +918,7 @@
message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]")
if("autoobjectives")
- ticker.mode.forge_changeling_objectives(src)
+ SSticker.mode.forge_changeling_objectives(src)
to_chat(usr, "The objectives for changeling [key] have been generated. You can edit them and announce manually.")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -937,22 +937,22 @@
else if(href_list["vampire"])
switch(href_list["vampire"])
if("clear")
- if(src in ticker.mode.vampires)
- ticker.mode.vampires -= src
+ if(src in SSticker.mode.vampires)
+ SSticker.mode.vampires -= src
special_role = null
if(vampire)
vampire.remove_vampire_powers()
qdel(vampire)
vampire = null
- ticker.mode.update_vampire_icons_removed(src)
+ SSticker.mode.update_vampire_icons_removed(src)
to_chat(current, "You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!")
log_admin("[key_name(usr)] has de-vampired [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-vampired [key_name_admin(current)]")
if("vampire")
- if(!(src in ticker.mode.vampires))
- ticker.mode.vampires += src
- ticker.mode.grant_vampire_powers(current)
- ticker.mode.update_vampire_icons_added(src)
+ if(!(src in SSticker.mode.vampires))
+ SSticker.mode.vampires += src
+ SSticker.mode.grant_vampire_powers(current)
+ SSticker.mode.update_vampire_icons_added(src)
var/datum/mindslaves/slaved = new()
slaved.masters += src
som = slaved //we MIGT want to mindslave someone
@@ -963,7 +963,7 @@
message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]")
if("autoobjectives")
- ticker.mode.forge_vampire_objectives(src)
+ SSticker.mode.forge_vampire_objectives(src)
to_chat(usr, "The objectives for vampire [key] have been generated. You can edit them and announce manually.")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -971,8 +971,8 @@
else if(href_list["vampthrall"])
switch(href_list["vampthrall"])
if("clear")
- if(src in ticker.mode.vampire_enthralled)
- ticker.mode.remove_vampire_mind(src)
+ if(src in SSticker.mode.vampire_enthralled)
+ SSticker.mode.remove_vampire_mind(src)
log_admin("[key_name(usr)] has de-vampthralled [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-vampthralled [key_name_admin(current)]")
@@ -981,9 +981,9 @@
switch(href_list["nuclear"])
if("clear")
- if(src in ticker.mode.syndicates)
- ticker.mode.syndicates -= src
- ticker.mode.update_synd_icons_removed(src)
+ if(src in SSticker.mode.syndicates)
+ SSticker.mode.syndicates -= src
+ SSticker.mode.update_synd_icons_removed(src)
special_role = null
for(var/datum/objective/nuclear/O in objectives)
objectives-=O
@@ -992,17 +992,17 @@
log_admin("[key_name(usr)] has de-nuke op'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-nuke op'd [key_name_admin(current)]")
if("nuclear")
- if(!(src in ticker.mode.syndicates))
- ticker.mode.syndicates += src
- ticker.mode.update_synd_icons_added(src)
- if(ticker.mode.syndicates.len==1)
- ticker.mode.prepare_syndicate_leader(src)
+ if(!(src in SSticker.mode.syndicates))
+ SSticker.mode.syndicates += src
+ SSticker.mode.update_synd_icons_added(src)
+ if(SSticker.mode.syndicates.len==1)
+ SSticker.mode.prepare_syndicate_leader(src)
else
- current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
+ current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
special_role = SPECIAL_ROLE_NUKEOPS
to_chat(current, "You are a [syndicate_name()] agent!")
- ticker.mode.forge_syndicate_objectives(src)
- ticker.mode.greet_syndicate(src)
+ SSticker.mode.forge_syndicate_objectives(src)
+ SSticker.mode.greet_syndicate(src)
log_admin("[key_name(usr)] has nuke op'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has nuke op'd [key_name_admin(current)]")
if("lair")
@@ -1022,10 +1022,10 @@
qdel(H.wear_suit)
qdel(H.w_uniform)
- if(!ticker.mode.equip_syndicate(current))
+ if(!SSticker.mode.equip_syndicate(current))
to_chat(usr, "Equipping a syndicate failed!")
return
- ticker.mode.update_syndicate_id(current.mind, ticker.mode.syndicates.len == 1)
+ SSticker.mode.update_syndicate_id(current.mind, SSticker.mode.syndicates.len == 1)
log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative")
@@ -1046,27 +1046,27 @@
else if(href_list["eventmisc"])
switch(href_list["eventmisc"])
if("clear")
- if(src in ticker.mode.eventmiscs)
- ticker.mode.eventmiscs -= src
- ticker.mode.update_eventmisc_icons_removed(src)
+ if(src in SSticker.mode.eventmiscs)
+ SSticker.mode.eventmiscs -= src
+ SSticker.mode.update_eventmisc_icons_removed(src)
special_role = null
message_admins("[key_name_admin(usr)] has de-eventantag'ed [current].")
log_admin("[key_name(usr)] has de-eventantag'ed [current].")
if("eventmisc")
- ticker.mode.eventmiscs += src
+ SSticker.mode.eventmiscs += src
special_role = SPECIAL_ROLE_EVENTMISC
- ticker.mode.update_eventmisc_icons_added(src)
+ SSticker.mode.update_eventmisc_icons_added(src)
message_admins("[key_name_admin(usr)] has eventantag'ed [current].")
log_admin("[key_name(usr)] has eventantag'ed [current].")
else if(href_list["devil"])
switch(href_list["devil"])
if("clear")
- if(src in ticker.mode.devils)
+ if(src in SSticker.mode.devils)
if(istype(current,/mob/living/carbon/true_devil/))
to_chat(usr,"This cannot be used on true or arch-devils.")
else
- ticker.mode.devils -= src
- ticker.mode.update_devil_icons_removed(src)
+ SSticker.mode.devils -= src
+ SSticker.mode.update_devil_icons_removed(src)
special_role = null
to_chat(current,"Your infernal link has been severed! You are no longer a devil!")
RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt)
@@ -1085,8 +1085,8 @@
S.laws.clear_sixsixsix_laws()
devilinfo = null
log_admin("[key_name(usr)] has de-devil'ed [current].")
- else if(src in ticker.mode.sintouched)
- ticker.mode.sintouched -= src
+ else if(src in SSticker.mode.sintouched)
+ SSticker.mode.sintouched -= src
message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].")
log_admin("[key_name(usr)] has de-sintouch'ed [current].")
if("devil")
@@ -1098,12 +1098,12 @@
if(!ishuman(current) && !isrobot(current))
to_chat(usr, "This only works on humans and cyborgs!")
return
- ticker.mode.devils += src
+ SSticker.mode.devils += src
special_role = "devil"
- ticker.mode.update_devil_icons_added(src)
- ticker.mode.finalize_devil(src, FALSE)
- ticker.mode.forge_devil_objectives(src, 2)
- ticker.mode.greet_devil(src)
+ SSticker.mode.update_devil_icons_added(src)
+ SSticker.mode.finalize_devil(src, FALSE)
+ SSticker.mode.forge_devil_objectives(src, 2)
+ SSticker.mode.greet_devil(src)
message_admins("[key_name_admin(usr)] has devil'ed [current].")
log_admin("[key_name(usr)] has devil'ed [current].")
if("ascendable_devil")
@@ -1115,12 +1115,12 @@
if(!ishuman(current) && !isrobot(current))
to_chat(usr, "This only works on humans and cyborgs!")
return
- ticker.mode.devils += src
+ SSticker.mode.devils += src
special_role = "devil"
- ticker.mode.update_devil_icons_added(src)
- ticker.mode.finalize_devil(src, TRUE)
- ticker.mode.forge_devil_objectives(src, 2)
- ticker.mode.greet_devil(src)
+ SSticker.mode.update_devil_icons_added(src)
+ SSticker.mode.finalize_devil(src, TRUE)
+ SSticker.mode.forge_devil_objectives(src, 2)
+ SSticker.mode.greet_devil(src)
message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.")
log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.")
if("sintouched")
@@ -1132,8 +1132,8 @@
else if(href_list["traitor"])
switch(href_list["traitor"])
if("clear")
- if(src in ticker.mode.traitors)
- ticker.mode.traitors -= src
+ if(src in SSticker.mode.traitors)
+ SSticker.mode.traitors -= src
special_role = null
to_chat(current, "You have been brainwashed! You are no longer a traitor!")
log_admin("[key_name(usr)] has de-traitored [key_name(current)]")
@@ -1145,12 +1145,12 @@
A.verbs -= /mob/living/silicon/ai/proc/choose_modules
A.malf_picker.remove_verbs(A)
qdel(A.malf_picker)
- ticker.mode.update_traitor_icons_removed(src)
+ SSticker.mode.update_traitor_icons_removed(src)
if("traitor")
- if(!(src in ticker.mode.traitors))
- ticker.mode.traitors += src
+ if(!(src in SSticker.mode.traitors))
+ SSticker.mode.traitors += src
var/datum/mindslaves/slaved = new()
slaved.masters += src
som = slaved //we MIGT want to mindslave someone
@@ -1160,14 +1160,14 @@
message_admins("[key_name_admin(usr)] has traitored [key_name_admin(current)]")
if(isAI(current))
var/mob/living/silicon/ai/A = current
- ticker.mode.add_law_zero(A)
+ SSticker.mode.add_law_zero(A)
SEND_SOUND(current, 'sound/ambience/antag/malf.ogg')
else
SEND_SOUND(current, 'sound/ambience/antag/tatoralert.ogg')
- ticker.mode.update_traitor_icons_added(src)
+ SSticker.mode.update_traitor_icons_added(src)
if("autoobjectives")
- ticker.mode.forge_traitor_objectives(src)
+ SSticker.mode.forge_traitor_objectives(src)
to_chat(usr, "The objectives for traitor [key] have been generated. You can edit them and announce manually.")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -1175,17 +1175,17 @@
else if(href_list["shadowling"])
switch(href_list["shadowling"])
if("clear")
- ticker.mode.update_shadow_icons_removed(src)
- if(src in ticker.mode.shadows)
- ticker.mode.shadows -= src
+ SSticker.mode.update_shadow_icons_removed(src)
+ if(src in SSticker.mode.shadows)
+ SSticker.mode.shadows -= src
special_role = null
to_chat(current, "Your powers have been quenched! You are no longer a shadowling!")
message_admins("[key_name_admin(usr)] has de-shadowlinged [current].")
log_admin("[key_name(usr)] has de-shadowlinged [current].")
current.spellremove(current)
current.remove_language("Shadowling Hivemind")
- else if(src in ticker.mode.shadowling_thralls)
- ticker.mode.remove_thrall(src,0)
+ else if(src in SSticker.mode.shadowling_thralls)
+ SSticker.mode.remove_thrall(src,0)
message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
log_admin("[key_name(usr)] has de-thralled [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-thralled [key_name_admin(current)]")
@@ -1193,20 +1193,20 @@
if(!ishuman(current))
to_chat(usr, "This only works on humans!")
return
- ticker.mode.shadows += src
+ SSticker.mode.shadows += src
special_role = SPECIAL_ROLE_SHADOWLING
to_chat(current, "Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
")
- ticker.mode.finalize_shadowling(src)
- ticker.mode.update_shadow_icons_added(src)
+ SSticker.mode.finalize_shadowling(src)
+ SSticker.mode.update_shadow_icons_added(src)
log_admin("[key_name(usr)] has shadowlinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has shadowlinged [key_name_admin(current)]")
if("thrall")
if(!ishuman(current))
to_chat(usr, "This only works on humans!")
return
- ticker.mode.add_thrall(src)
+ SSticker.mode.add_thrall(src)
message_admins("[key_name_admin(usr)] has thralled [current].")
log_admin("[key_name(usr)] has thralled [current].")
@@ -1221,7 +1221,7 @@
return
make_Abductor()
log_admin("[key_name(usr)] turned [current] into abductor.")
- ticker.mode.update_abductor_icons_added(src)
+ SSticker.mode.update_abductor_icons_added(src)
if("equip")
if(!ishuman(current))
to_chat(usr, "This only works on humans!")
@@ -1306,7 +1306,7 @@
log_admin("[key_name(usr)] has set [key_name(current)]'s telecrystals to [crystals]")
message_admins("[key_name_admin(usr)] has set [key_name_admin(current)]'s telecrystals to [crystals]")
if("uplink")
- if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
+ if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors)))
to_chat(usr, "Equipping a syndicate failed!")
return
log_admin("[key_name(usr)] has given [key_name(current)] an uplink")
@@ -1392,27 +1392,27 @@
qdel(H)
/datum/mind/proc/make_Traitor()
- if(!(src in ticker.mode.traitors))
- ticker.mode.traitors += src
+ if(!(src in SSticker.mode.traitors))
+ SSticker.mode.traitors += src
special_role = SPECIAL_ROLE_TRAITOR
- ticker.mode.forge_traitor_objectives(src)
- ticker.mode.finalize_traitor(src)
- ticker.mode.greet_traitor(src)
- ticker.mode.update_traitor_icons_added(src)
+ SSticker.mode.forge_traitor_objectives(src)
+ SSticker.mode.finalize_traitor(src)
+ SSticker.mode.greet_traitor(src)
+ SSticker.mode.update_traitor_icons_added(src)
/datum/mind/proc/make_Nuke()
- if(!(src in ticker.mode.syndicates))
- ticker.mode.syndicates += src
- ticker.mode.update_synd_icons_added(src)
- if(ticker.mode.syndicates.len==1)
- ticker.mode.prepare_syndicate_leader(src)
+ if(!(src in SSticker.mode.syndicates))
+ SSticker.mode.syndicates += src
+ SSticker.mode.update_synd_icons_added(src)
+ if(SSticker.mode.syndicates.len==1)
+ SSticker.mode.prepare_syndicate_leader(src)
else
- current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
+ current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
special_role = SPECIAL_ROLE_NUKEOPS
assigned_role = SPECIAL_ROLE_NUKEOPS
to_chat(current, "You are a [syndicate_name()] agent!")
- ticker.mode.forge_syndicate_objectives(src)
- ticker.mode.greet_syndicate(src)
+ SSticker.mode.forge_syndicate_objectives(src)
+ SSticker.mode.greet_syndicate(src)
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
@@ -1429,34 +1429,34 @@
qdel(H.wear_suit)
qdel(H.w_uniform)
- ticker.mode.equip_syndicate(current)
+ SSticker.mode.equip_syndicate(current)
/datum/mind/proc/make_Vampire()
- if(!(src in ticker.mode.vampires))
- ticker.mode.vampires += src
- ticker.mode.grant_vampire_powers(current)
+ if(!(src in SSticker.mode.vampires))
+ SSticker.mode.vampires += src
+ SSticker.mode.grant_vampire_powers(current)
special_role = SPECIAL_ROLE_VAMPIRE
- ticker.mode.forge_vampire_objectives(src)
- ticker.mode.greet_vampire(src)
- ticker.mode.update_vampire_icons_added(src)
+ SSticker.mode.forge_vampire_objectives(src)
+ SSticker.mode.greet_vampire(src)
+ SSticker.mode.update_vampire_icons_added(src)
/datum/mind/proc/make_Changeling()
- if(!(src in ticker.mode.changelings))
- ticker.mode.changelings += src
- ticker.mode.grant_changeling_powers(current)
+ if(!(src in SSticker.mode.changelings))
+ SSticker.mode.changelings += src
+ SSticker.mode.grant_changeling_powers(current)
special_role = SPECIAL_ROLE_CHANGELING
- ticker.mode.forge_changeling_objectives(src)
- ticker.mode.greet_changeling(src)
- ticker.mode.update_change_icons_added(src)
+ SSticker.mode.forge_changeling_objectives(src)
+ SSticker.mode.greet_changeling(src)
+ SSticker.mode.update_change_icons_added(src)
/datum/mind/proc/make_Overmind()
- if(!(src in ticker.mode.blob_overminds))
- ticker.mode.blob_overminds += src
+ if(!(src in SSticker.mode.blob_overminds))
+ SSticker.mode.blob_overminds += src
special_role = SPECIAL_ROLE_BLOB_OVERMIND
/datum/mind/proc/make_Wizard()
- if(!(src in ticker.mode.wizards))
- ticker.mode.wizards += src
+ if(!(src in SSticker.mode.wizards))
+ SSticker.mode.wizards += src
special_role = SPECIAL_ROLE_WIZARD
assigned_role = SPECIAL_ROLE_WIZARD
//ticker.mode.learn_basic_spells(current)
@@ -1466,18 +1466,18 @@
else
current.loc = pick(wizardstart)
- ticker.mode.equip_wizard(current)
+ SSticker.mode.equip_wizard(current)
for(var/obj/item/spellbook/S in current.contents)
S.op = 0
- ticker.mode.name_wizard(current)
- ticker.mode.forge_wizard_objectives(src)
- ticker.mode.greet_wizard(src)
- ticker.mode.update_wiz_icons_added(src)
+ SSticker.mode.name_wizard(current)
+ SSticker.mode.forge_wizard_objectives(src)
+ SSticker.mode.greet_wizard(src)
+ SSticker.mode.update_wiz_icons_added(src)
/datum/mind/proc/make_Rev()
- if(ticker.mode.head_revolutionaries.len>0)
+ if(SSticker.mode.head_revolutionaries.len>0)
// copy targets
- var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
+ var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries
if(valid_head)
for(var/datum/objective/mutiny/O in valid_head.objectives)
var/datum/objective/mutiny/rev_obj = new
@@ -1485,13 +1485,13 @@
rev_obj.target = O.target
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
objectives += rev_obj
- ticker.mode.greet_revolutionary(src,0)
- ticker.mode.head_revolutionaries += src
- ticker.mode.update_rev_icons_added(src)
+ SSticker.mode.greet_revolutionary(src,0)
+ SSticker.mode.head_revolutionaries += src
+ SSticker.mode.update_rev_icons_added(src)
special_role = SPECIAL_ROLE_HEAD_REV
- ticker.mode.forge_revolutionary_objectives(src)
- ticker.mode.greet_revolutionary(src,0)
+ SSticker.mode.forge_revolutionary_objectives(src)
+ SSticker.mode.greet_revolutionary(src,0)
var/list/L = current.get_contents()
var/obj/item/flash/flash = locate() in L
@@ -1499,7 +1499,7 @@
take_uplink()
var/fail = 0
// fail |= !ticker.mode.equip_traitor(current, 1)
- fail |= !ticker.mode.equip_revolutionary(current)
+ fail |= !SSticker.mode.equip_revolutionary(current)
/datum/mind/proc/make_Abductor()
var/role = alert("Abductor Role ?","Role","Agent","Scientist")
@@ -1512,7 +1512,7 @@
if(!ishuman(current))
return
- ticker.mode.abductors |= src
+ SSticker.mode.abductors |= src
var/datum/objective/experiment/O = new
O.owner = src
@@ -1621,15 +1621,15 @@
var/list/implanters
var/ref = "\ref[missionary.mind]"
- if(!(missionary.mind in ticker.mode.implanter))
- ticker.mode.implanter[ref] = list()
- implanters = ticker.mode.implanter[ref]
+ if(!(missionary.mind in SSticker.mode.implanter))
+ SSticker.mode.implanter[ref] = list()
+ implanters = SSticker.mode.implanter[ref]
implanters.Add(src)
- ticker.mode.implanted.Add(src)
- ticker.mode.implanted[src] = missionary.mind
+ SSticker.mode.implanted.Add(src)
+ SSticker.mode.implanted[src] = missionary.mind
//ticker.mode.implanter[missionary.mind] += src
- ticker.mode.implanter[ref] = implanters
- ticker.mode.traitors += src
+ SSticker.mode.implanter[ref] = implanters
+ SSticker.mode.traitors += src
special_role = "traitor"
to_chat(current, "You're now a loyal zealot of [missionary.name]! You now must lay down your life to protect [missionary.p_them()] and assist in [missionary.p_their()] goals at any cost.")
var/datum/objective/protect/mindslave/MS = new
@@ -1640,8 +1640,8 @@
for(var/datum/objective/objective in objectives)
to_chat(current, "Objective #1: [objective.explanation_text]")
- ticker.mode.update_traitor_icons_added(missionary.mind)
- ticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds
+ SSticker.mode.update_traitor_icons_added(missionary.mind)
+ SSticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds
if(missionary.mind.som)//do not add if not a traitor..and you just picked up a robe and staff in the hall...
var/datum/mindslaves/slaved = missionary.mind.som
@@ -1665,7 +1665,7 @@
/datum/mind/proc/remove_zealot(obj/item/clothing/under/jumpsuit = null)
if(!zealot_master) //if they aren't a zealot, we can't remove their zealot status, obviously. don't bother with the rest so we don't confuse them with the messages
return
- ticker.mode.remove_traitor_mind(src)
+ SSticker.mode.remove_traitor_mind(src)
add_attack_logs(zealot_master, current, "Lost control of zealot")
zealot_master = null
@@ -1696,8 +1696,8 @@
mind.key = key
else
mind = new /datum/mind(key)
- if(ticker)
- ticker.minds += mind
+ if(SSticker)
+ SSticker.minds += mind
else
error("mind_initialize(): No ticker ready yet! Please inform Carn")
if(!mind.name)
diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm
index 2b0c3e1a44c..31c20315508 100644
--- a/code/datums/mutable_appearance.dm
+++ b/code/datums/mutable_appearance.dm
@@ -4,6 +4,11 @@
// Mutable appearances are children of images, just so you know.
+/mutable_appearance/New()
+ ..()
+ plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE
+ // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var
+
// Helper similar to image()
/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE)
var/mutable_appearance/MA = new()
@@ -13,7 +18,7 @@
MA.plane = plane
return MA
-/mutable_appearance/clean
+
/mutable_appearance/clean/New()
. = ..()
alpha = 255
diff --git a/code/datums/periodic_news.dm b/code/datums/periodic_news.dm
index cdf2d5b9ad8..9a09ec4a7ec 100644
--- a/code/datums/periodic_news.dm
+++ b/code/datums/periodic_news.dm
@@ -118,7 +118,7 @@
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots)
proc/process_newscaster()
- check_for_newscaster_updates(ticker.mode.newscaster_announcements)
+ check_for_newscaster_updates(SSticker.mode.newscaster_announcements)
var/global/tmp/announced_news_types = list()
proc/check_for_newscaster_updates(type)
diff --git a/code/datums/spells/chaplain.dm b/code/datums/spells/chaplain.dm
index f9c2641c50e..bdb7bb3f551 100644
--- a/code/datums/spells/chaplain.dm
+++ b/code/datums/spells/chaplain.dm
@@ -64,9 +64,9 @@
spawn(0) // allows cast to complete even if recipient ignores the prompt
if(alert(target, "[user] wants to bless you, in the name of [user.p_their()] religion. Accept?", "Accept Blessing?", "Yes", "No") == "Yes") // prevents forced conversions
- user.visible_message("[user] starts blessing [target] in the name of [ticker.Bible_deity_name].", "You start blessing [target] in the name of [ticker.Bible_deity_name].")
+ user.visible_message("[user] starts blessing [target] in the name of [SSticker.Bible_deity_name].", "You start blessing [target] in the name of [SSticker.Bible_deity_name].")
if(do_after(user, 150, target = target))
- user.visible_message("[user] has blessed [target] in the name of [ticker.Bible_deity_name].", "You have blessed [target] in the name of [ticker.Bible_deity_name].")
+ user.visible_message("[user] has blessed [target] in the name of [SSticker.Bible_deity_name].", "You have blessed [target] in the name of [SSticker.Bible_deity_name].")
if(!target.mind.isblessed)
target.mind.isblessed = TRUE
user.mind.num_blessed++
diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm
index f1744e22550..f37d48c0a10 100644
--- a/code/datums/spells/lichdom.dm
+++ b/code/datums/spells/lichdom.dm
@@ -20,7 +20,7 @@
action_icon_state = "skeleton"
/obj/effect/proc_holder/spell/targeted/lichdom/Destroy()
- for(var/datum/mind/M in ticker.mode.wizards) //Make sure no other bones are about
+ for(var/datum/mind/M in SSticker.mode.wizards) //Make sure no other bones are about
for(var/obj/effect/proc_holder/spell/S in M.spell_list)
if(istype(S,/obj/effect/proc_holder/spell/targeted/lichdom) && S != src)
return ..()
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 3a78dfc9b28..b6167338ad3 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -12,9 +12,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
var/datum/uplink_item/I = new path
if(!I.item)
continue
- if(I.gamemodes.len && ticker && !(ticker.mode.type in I.gamemodes))
+ if(I.gamemodes.len && SSticker && !(SSticker.mode.type in I.gamemodes))
continue
- if(I.excludefrom.len && ticker && (ticker.mode.type in I.excludefrom))
+ if(I.excludefrom.len && SSticker && (SSticker.mode.type in I.excludefrom))
continue
if(I.last)
last += I
diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm
index d73612e6b3e..6d36b81f7b4 100644
--- a/code/datums/weather/weather.dm
+++ b/code/datums/weather/weather.dm
@@ -28,6 +28,7 @@
var/impacted_z_levels // The list of z-levels that this weather is actively affecting
var/overlay_layer = AREA_LAYER //Since it's above everything else, this is the layer used by default. TURF_LAYER is below mobs and walls if you need to use that.
+ var/overlay_plane = BLACKNESS_PLANE
var/aesthetic = FALSE //If the weather has no purpose other than looks
var/immunity_type = "storm" //Used by mobs to prevent them from being affected by the weather
@@ -123,6 +124,7 @@
for(var/V in impacted_areas)
var/area/N = V
N.layer = overlay_layer
+ N.plane = overlay_plane
N.icon = 'icons/effects/weather_effects.dmi'
N.invisibility = 0
N.color = weather_color
@@ -137,6 +139,6 @@
N.color = null
N.icon_state = ""
N.icon = 'icons/turf/areas.dmi'
- N.layer = AREA_LAYER //Just default back to normal area stuff since I assume setting a var is faster than initial
- N.invisibility = INVISIBILITY_MAXIMUM
+ N.layer = initial(N.layer)
+ N.plane = initial(N.plane)
N.set_opacity(FALSE)
diff --git a/code/datums/weather/weather_types/floor_is_lava.dm b/code/datums/weather/weather_types/floor_is_lava.dm
index 6d06e3ca1ef..72f49ad5057 100644
--- a/code/datums/weather/weather_types/floor_is_lava.dm
+++ b/code/datums/weather/weather_types/floor_is_lava.dm
@@ -19,6 +19,7 @@
target_trait = STATION_LEVEL
overlay_layer = ABOVE_OPEN_TURF_LAYER //Covers floors only
+ overlay_plane = FLOOR_PLANE
immunity_type = "lava"
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 58f51d59e3c..ed89a75cd5d 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -185,11 +185,12 @@
. = 0
// Called after a successful Move(). By this point, we've already moved
-/atom/movable/proc/Moved(atom/OldLoc, Dir)
- if(!inertia_moving)
+/atom/movable/proc/Moved(atom/OldLoc, Dir, Forced = FALSE)
+ SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, OldLoc, Dir, Forced)
+ if (!inertia_moving)
inertia_next_move = world.time + inertia_move_delay
newtonian_move(Dir)
- return 1
+ return TRUE
// Previously known as HasEntered()
// This is automatically called when something enters your square
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 461de475b41..1370b64ecc7 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -218,7 +218,7 @@
/mob/living/carbon/human/proc/sec_hud_set_security_status()
var/image/holder = hud_list[WANTED_HUD]
var/perpname = get_visible_name(TRUE) //gets the name of the perp, works if they have an id or if their face is uncovered
- if(!ticker) return //wait till the game starts or the monkeys runtime....
+ if(!SSticker) return //wait till the game starts or the monkeys runtime....
if(perpname)
var/datum/data/record/R = find_record("name", perpname, data_core.security)
if(R)
diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm
index 9ab851e86bf..506ef5714f8 100644
--- a/code/game/dna/genes/vg_powers.dm
+++ b/code/game/dna/genes/vg_powers.dm
@@ -188,9 +188,19 @@
..()
block=REMOTETALKBLOCK
+/datum/dna/gene/basic/grant_spell/remotetalk/activate(mob/user)
+ ..()
+ user.AddSpell(new /obj/effect/proc_holder/spell/targeted/mindscan(null))
+
+/datum/dna/gene/basic/grant_spell/remotetalk/deactivate(mob/user)
+ ..()
+ for(var/obj/effect/proc_holder/spell/S in user.mob_spell_list)
+ if(istype(S, /obj/effect/proc_holder/spell/targeted/mindscan))
+ user.RemoveSpell(S)
+
/obj/effect/proc_holder/spell/targeted/remotetalk
name = "Project Mind"
- desc = "Make people understand your thoughts at any range!"
+ desc = "Make people understand your thoughts!"
charge_max = 0
clothes_req = 0
@@ -242,6 +252,89 @@
for(var/mob/dead/observer/G in GLOB.player_list)
G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]")
+/obj/effect/proc_holder/spell/targeted/mindscan
+ name = "Scan Mind"
+ desc = "Offer people a chance to share their thoughts!"
+ charge_max = 0
+ clothes_req = 0
+ stat_allowed = 0
+ invocation_type = "none"
+ range = -2
+ selection_type = "range"
+ action_icon_state = "genetic_mindscan"
+ var/list/available_targets = list()
+
+/obj/effect/proc_holder/spell/targeted/mindscan/choose_targets(mob/user = usr)
+ var/list/targets = new /list()
+ var/list/validtargets = new /list()
+ var/turf/T = get_turf(user)
+ for(var/mob/living/M in range(14, T))
+ if(M && M.mind)
+ if(M == user)
+ continue
+ validtargets += M
+
+ if(!validtargets.len)
+ to_chat(user, "There are no valid targets!")
+ start_recharge()
+ return
+
+ targets += input("Choose the target to listen to.", "Targeting") as null|mob in validtargets
+
+ if(!targets.len || !targets[1]) //doesn't waste the spell
+ revert_cast(user)
+ return
+
+ perform(targets, user = user)
+
+/obj/effect/proc_holder/spell/targeted/mindscan/cast(list/targets, mob/user = usr)
+ if(!ishuman(user))
+ return
+ for(var/mob/living/target in targets)
+ var/message = "You feel your mind expand briefly... (Click to send a message.)"
+ if(REMOTE_TALK in target.mutations)
+ message = "You feel [user.real_name] request a response from you... (Click here to project mind.)"
+ user.show_message("You offer your mind to [target.name].")
+ target.show_message("[message]")
+ available_targets += target
+ addtimer(CALLBACK(src, .proc/removeAvailability, target), 100)
+
+/obj/effect/proc_holder/spell/targeted/mindscan/proc/removeAvailability(mob/living/target)
+ if(target in available_targets)
+ available_targets -= target
+ if(!(target in available_targets))
+ target.show_message("You feel the sensation fade...")
+
+/obj/effect/proc_holder/spell/targeted/mindscan/Topic(href, href_list)
+ var/mob/living/user
+ if(href_list["user"])
+ user = locateUID(href_list["user"])
+ if(href_list["target"])
+ if(!user)
+ return
+ var/mob/living/target = locateUID(href_list["target"])
+ if(!(target in available_targets))
+ return
+ available_targets -= target
+ var/say = input("What do you wish to say") as text|null
+ if(!say)
+ return
+ say = strip_html(say)
+ say = pencode_to_html(say, target, format = 0, fields = 0)
+
+ log_say("(TPATH to [key_name(target)]) [say]", user)
+ if(REMOTE_TALK in target.mutations)
+ target.show_message("You project your mind into [user.name]: [say]")
+ else
+ target.show_message("You fill the space in your thoughts: [say]")
+ user.show_message("You hear [target.name]'s voice: [say]")
+ for(var/mob/dead/observer/G in GLOB.player_list)
+ G.show_message("Telepathic response from [target] ([ghost_follow_link(target, ghost=G)]) to [user] ([ghost_follow_link(user, ghost=G)]): [say]")
+
+/obj/effect/proc_holder/spell/targeted/mindscan/Destroy()
+ available_targets.Cut()
+ return ..()
+
/datum/dna/gene/basic/grant_spell/remoteview
name="Remote Viewing"
activation_messages=list("Your mind can see things from afar.")
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index 97371f6d35b..63f9d5fbaff 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -96,7 +96,8 @@
for(var/obj/item/implant/mindshield/I in H.contents)
if(I && I.implanted)
possible_traitors -= player
-
+ if(!H.job) //Golems, special events stuff, etc.
+ possible_traitors -= player
//message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]")
// message_admins("Potential Traitors:")
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 61196c9862f..5eb15759d99 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -378,8 +378,8 @@
new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring")
qdel(N)
- if(ticker && ticker.mode.name == "blob")
- var/datum/game_mode/blob/BL = ticker.mode
+ if(SSticker && SSticker.mode.name == "blob")
+ var/datum/game_mode/blob/BL = SSticker.mode
BL.blobwincount += initial(BL.blobwincount)
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 9e45cab4292..2b860756b45 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -5,7 +5,7 @@ var/global/list/all_cults = list()
var/list/datum/mind/cult = list()
/proc/iscultist(mob/living/M as mob)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult)
+ return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.cult)
/proc/is_convertable_to_cult(datum/mind/mind)
@@ -30,8 +30,8 @@ var/global/list/all_cults = list()
return 1
/proc/is_sacrifice_target(datum/mind/mind)
- if(istype(ticker.mode.name, "cult"))
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ if(istype(SSticker.mode.name, "cult"))
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
if(mind == cult_mode.sacrifice_target)
return 1
return 0
@@ -121,7 +121,7 @@ var/global/list/all_cults = list()
var/datum/action/innate/cultcomm/C = new()
C.Grant(cult_mind.current)
update_cult_icons_added(cult_mind)
- to_chat(cult_mind.current, "You catch a glimpse of the Realm of [ticker.cultdat.entity_name], [ticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.cultdat.entity_name].")
+ to_chat(cult_mind.current, "You catch a glimpse of the Realm of [SSticker.cultdat.entity_name], [SSticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [SSticker.cultdat.entity_name].")
first_phase()
@@ -135,16 +135,16 @@ var/global/list/all_cults = list()
if("survive")
explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station."
if("convert")
- explanation = "We must increase our influence before we can summon [ticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
+ explanation = "We must increase our influence before we can summon [SSticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
if("bloodspill")
- explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles."
+ explanation = "We must prepare this place for [SSticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles."
if("sacrifice")
if(sacrifice_target)
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune and three acolytes to do so."
else
explanation = "Free objective."
if("eldergod")
- explanation = "Summon [ticker.cultdat.entity_name] by invoking the 'Tear Reality' rune.The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin."
+ explanation = "Summon [SSticker.cultdat.entity_name] by invoking the 'Tear Reality' rune.The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin."
to_chat(cult_mind.current, "Objective #[obj_count]: [explanation]")
cult_mind.memory += "Objective #[obj_count]: [explanation]
"
@@ -179,7 +179,7 @@ var/global/list/all_cults = list()
/datum/game_mode/proc/add_cultist(datum/mind/cult_mind) //BASE
if(!istype(cult_mind))
return 0
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
if(!(cult_mind in cult) && is_convertable_to_cult(cult_mind))
cult += cult_mind
cult_mind.current.faction |= "cult"
@@ -314,10 +314,10 @@ var/global/list/all_cults = list()
feedback_add_details("cult_objective","cult_sacrifice|FAIL|GIBBED")
if("eldergod")
if(!eldergod)
- explanation = "Summon [ticker.cultdat.entity_name]. Success!"
+ explanation = "Summon [SSticker.cultdat.entity_name]. Success!"
feedback_add_details("cult_objective","cult_narsie|SUCCESS")
else
- explanation = "Summon [ticker.cultdat.entity_name]. Fail."
+ explanation = "Summon [SSticker.cultdat.entity_name]. Fail."
feedback_add_details("cult_objective","cult_narsie|FAIL")
if("slaughter")
if(demons_summoned)
@@ -345,10 +345,10 @@ var/global/list/all_cults = list()
if("harvest")
if(harvested > harvest_target)
- explanation = "Offer [harvest_target] humans for [ticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Success!"
+ explanation = "Offer [harvest_target] humans for [SSticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Success!"
feedback_add_details("cult_objective","cult_harvest|SUCCESS")
else
- explanation = "Offer [harvest_target] humans for [ticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Fail!"
+ explanation = "Offer [harvest_target] humans for [SSticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Fail!"
feedback_add_details("cult_objective","cult_harvest|FAIL")
if("hijack")
@@ -375,7 +375,7 @@ var/global/list/all_cults = list()
/datum/game_mode/proc/auto_declare_completion_cult()
- if(cult.len || (ticker && GAMEMODE_IS_CULT))
+ if(cult.len || (SSticker && GAMEMODE_IS_CULT))
var/text = "The cultists were:"
for(var/datum/mind/cultist in cult)
diff --git a/code/game/gamemodes/cult/cult_objectives.dm b/code/game/gamemodes/cult/cult_objectives.dm
index beef75e103b..da4e190cb7f 100644
--- a/code/game/gamemodes/cult/cult_objectives.dm
+++ b/code/game/gamemodes/cult/cult_objectives.dm
@@ -19,10 +19,10 @@
switch(new_objective)
if("convert")
- explanation = "We must increase our influence before we can summon [ticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
+ explanation = "We must increase our influence before we can summon [SSticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
if("bloodspill")
spilltarget = 100 + rand(0,GLOB.player_list.len * 3)
- explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles."
+ explanation = "We must prepare this place for [SSticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles."
if("sacrifice")
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for [sacrifice_target.p_their()] blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
@@ -59,8 +59,8 @@
message_admins("The Cult has already completed [prenarsie_objectives] objectives! Nar-Sie objective unlocked.")
log_admin("The Cult has already completed [prenarsie_objectives] objectives! Nar-Sie objective unlocked.")
else
- message_admins("There are less than 4 cultists! [ticker.cultdat.entity_name] objective unlocked.")
- log_admin("There are less than 4 cultists! [ticker.cultdat.entity_name] objective unlocked.")
+ message_admins("There are less than 4 cultists! [SSticker.cultdat.entity_name] objective unlocked.")
+ log_admin("There are less than 4 cultists! [SSticker.cultdat.entity_name] objective unlocked.")
gtfo_phase()
if(!sacrificed.len && (new_objective != "sacrifice"))
@@ -76,10 +76,10 @@
switch(new_objective)
if("convert")
- explanation = "We must increase our influence before we can summon [ticker.cultdat.entity_name]. Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
+ explanation = "We must increase our influence before we can summon [SSticker.cultdat.entity_name]. Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
if("bloodspill")
spilltarget = 100 + rand(0,GLOB.player_list.len * 3)
- explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles."
+ explanation = "We must prepare this place for [SSticker.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles."
if("sacrifice")
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for [sacrifice_target.p_their()] blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
@@ -111,7 +111,7 @@
if(prob(40))//split the chance of this
objectives += "eldergod"
- explanation = "Summon [ticker.cultdat.entity_name] on the Station via the use of the Tear Reality rune. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin."
+ explanation = "Summon [SSticker.cultdat.entity_name] on the Station via the use of the Tear Reality rune. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin."
else
objectives += "slaughter"
explanation = "Bring the Slaughter via the rune 'Bring forth the slaughter'. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin."
@@ -135,11 +135,11 @@
switch(last_objective)
if("harvest")
- explanation = "[ticker.cultdat.entity_title1] hungers for their first meal of this never-ending day. Offer them [harvest_target] humans in sacrifice."
+ explanation = "[SSticker.cultdat.entity_title1] hungers for their first meal of this never-ending day. Offer them [harvest_target] humans in sacrifice."
if("hijack")
- explanation = "[ticker.cultdat.entity_name] wishes for their troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it."
+ explanation = "[SSticker.cultdat.entity_name] wishes for their troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it."
if("massacre")
- explanation = "[ticker.cultdat.entity_name] wants to watch you as you massacre the remaining humans on the station (until less than [massacre_target] humans are left alive)."
+ explanation = "[SSticker.cultdat.entity_name] wants to watch you as you massacre the remaining humans on the station (until less than [massacre_target] humans are left alive)."
for(var/datum/mind/cult_mind in cult)
if(cult_mind)
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index d561291c19f..fb6bb95a4a8 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -11,7 +11,7 @@
return
/obj/effect/rune/proc/check_icon()
- if(!ticker.mode)//work around for maps with runes and cultdat is not loaded all the way
+ if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way
var/bits = make_bit_triplet()
icon = get_rune(bits)
else
@@ -39,16 +39,16 @@
canbypass = 1
/obj/item/tome/New()
- if(!ticker.mode)
+ if(!SSticker.mode)
icon_state = "tome"
else
- icon_state = ticker.cultdat.tome_icon
+ icon_state = SSticker.cultdat.tome_icon
..()
/obj/item/tome/examine(mob/user)
..()
if(iscultist(user) || user.stat == DEAD)
- to_chat(user, "The scriptures of [ticker.cultdat.entity_title3]. Allows the scribing of runes and access to the knowledge archives of the cult of [ticker.cultdat.entity_name].")
+ to_chat(user, "The scriptures of [SSticker.cultdat.entity_title3]. Allows the scribing of runes and access to the knowledge archives of the cult of [SSticker.cultdat.entity_name].")
to_chat(user, "Striking another cultist with it will purge holy water from them.")
to_chat(user, "Striking a noncultist, however, will sear their flesh.")
@@ -91,7 +91,7 @@
/obj/item/tome/proc/read_tome(mob/user)
var/text = list()
- text += "
Archives of [ticker.cultdat.entity_title1]
"
+ text += "Archives of [SSticker.cultdat.entity_title1]
"
text += "A rune's name and effects can be revealed by examining the rune.<
"
text += "Rite of Binding
This rune is one of the most important runes the cult has, being the only way to create new talismans. A blank sheet of paper must be on top of the rune. After \
@@ -102,7 +102,7 @@
text += "Rite of Enlightenment
This rune is critical to the success of the cult. It will allow you to convert normal crew members into cultists. \
To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is mindshielded or a certain assignment, they will \
- be unable to be converted. People [ticker.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\
+ be unable to be converted. People [SSticker.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\
Successful conversions will produce a tome for the new cultist.
"
text += "Rite of Tribute
This rune is necessary to achieve your goals. Simply place any dead creature upon the rune and invoke it (this will not \
@@ -135,12 +135,12 @@
text += "Leeching
When invoked, this rune will transfer lifeforce from the victim to the invoker.
"
- text += "Rite of Spectral Manifestation
This rune allows you to summon spirits as humanoid fighters. When invoked, a spirit above the rune will be brought to life as a human, wearing nothing, that seeks only to serve you and [ticker.cultdat.entity_title3]. \
+ text += "Rite of Spectral Manifestation
This rune allows you to summon spirits as humanoid fighters. When invoked, a spirit above the rune will be brought to life as a human, wearing nothing, that seeks only to serve you and [SSticker.cultdat.entity_title3]. \
However, the spirit's link to reality is fragile - you must remain on top of the rune, and you will slowly take damage. Upon stepping off the rune, all summoned spirits will dissipate, dropping their items to the ground. You may manifest \
multiple spirits with one rune, but you will rapidly take damage in doing so.
"
text += "Ritual of Dimensional Rending
This rune is necessary to achieve your goals. On attempting to scribe it, it will produce shields around you and alert everyone you are attempting to scribe it; it takes a very long time to scribe, \
- and does massive damage to the one attempting to scribe it.
Invoking it requires 9 invokers and the sacrifice of a specific crewmember, and once invoked, will summon [ticker.cultdat.entity_title3], [ticker.cultdat.entity_name]. \
+ and does massive damage to the one attempting to scribe it.
Invoking it requires 9 invokers and the sacrifice of a specific crewmember, and once invoked, will summon [SSticker.cultdat.entity_title3], [SSticker.cultdat.entity_name]. \
This will complete your objectives.
"
text += "Talisman of Teleportation
The talisman form of the Teleport rune will transport the invoker to a selected Teleport rune once.
"
@@ -201,12 +201,12 @@
return 1
/obj/item/tome/proc/finale_runes_ok(mob/living/user, obj/effect/rune/rune_to_scribe)
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
var/area/A = get_area(src)
if(GAMEMODE_IS_CULT)
if(!canbypass)//not an admin-tome, check things
if(!cult_mode.narsie_condition_cleared)
- to_chat(user, "There is still more to do before unleashing [ticker.cultdat.entity_name] power!")
+ to_chat(user, "There is still more to do before unleashing [SSticker.cultdat.entity_name] power!")
return 0
if(!cult_mode.eldergod)
to_chat(user, "\"I am already here. There is no need to try to summon me now.\"")
@@ -215,19 +215,19 @@
to_chat(user, "\"We are already here. There is no need to try to summon us now.\"")
return 0
if(!((CULT_ELDERGOD in cult_mode.objectives) || (CULT_SLAUGHTER in cult_mode.objectives)))
- to_chat(user, "[ticker.cultdat.entity_name]'s power does not wish to be unleashed!")
+ to_chat(user, "[SSticker.cultdat.entity_name]'s power does not wish to be unleashed!")
return 0
if(!(A in summon_spots))
- to_chat(user, "[ticker.cultdat.entity_name] can only be summoned where the veil is weak - in [english_list(summon_spots)]!")
+ to_chat(user, "[SSticker.cultdat.entity_name] can only be summoned where the veil is weak - in [english_list(summon_spots)]!")
return 0
- var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [ticker.cultdat.entity_name]!", "No")
+ var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [SSticker.cultdat.entity_name]!", "No")
if(confirm_final == "No" || confirm_final == null)
to_chat(user, "You decide to prepare further before scribing the rune.")
return 0
else
return 1
else//the game mode is not cult..but we ARE a cultist...ALL ON THE ADMINBUS
- var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [ticker.cultdat.entity_name]!", "No")
+ var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [SSticker.cultdat.entity_name]!", "No")
if(confirm_final == "No" || confirm_final == null)
to_chat(user, "You decide to prepare further before scribing the rune.")
return 0
@@ -296,7 +296,7 @@
var/mob/living/carbon/human/H = user
var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot")
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
- user.visible_message("[user] cuts open [user.p_their()] [affecting] and begins writing in [user.p_their()] own blood!", "You slice open your [affecting] and begin drawing a sigil of [ticker.cultdat.entity_title3].")
+ user.visible_message("[user] cuts open [user.p_their()] [affecting] and begins writing in [user.p_their()] own blood!", "You slice open your [affecting] and begin drawing a sigil of [SSticker.cultdat.entity_title3].")
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE , affecting)
if(!do_after(user, initial(rune_to_scribe.scribe_delay)-scribereduct, target = get_turf(user)))
for(var/V in shields)
@@ -308,7 +308,7 @@
to_chat(user, "There is already a rune here.")
return
user.visible_message("[user] creates a strange circle in [user.p_their()] own blood.", \
- "You finish drawing the arcane markings of [ticker.cultdat.entity_title3].")
+ "You finish drawing the arcane markings of [SSticker.cultdat.entity_title3].")
for(var/V in shields)
var/obj/machinery/shield/S = V
if(S && !QDELETED(S))
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 1ed5e812989..ef2a970adb3 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -197,7 +197,7 @@ structure_check() searches for nearby cultist structures required for the invoca
..()
for(var/M in invokers)
var/mob/living/L = M
- to_chat(L, "You feel your life force draining. [ticker.cultdat.entity_title3] is displeased.")
+ to_chat(L, "You feel your life force draining. [SSticker.cultdat.entity_title3] is displeased.")
qdel(src)
/mob/proc/null_rod_check() //The null rod, if equipped, will protect the holder from the effects of most runes
@@ -372,12 +372,12 @@ var/list/teleport_runes = list()
new_cultist.visible_message("[new_cultist] writhes in pain as the markings below them glow a bloody red!", \
"AAAAAAAAAAAAAA-")
- ticker.mode.add_cultist(new_cultist.mind, 1)
+ SSticker.mode.add_cultist(new_cultist.mind, 1)
new /obj/item/tome(get_turf(src))
new_cultist.mind.special_role = "Cultist"
to_chat(new_cultist, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
and something evil takes root.")
- to_chat(new_cultist, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [ticker.cultdat.entity_title3] above all else. Bring it back.\
+ to_chat(new_cultist, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [SSticker.cultdat.entity_title3] above all else. Bring it back.\
")
//Rite of Tribute: Sacrifices a crew member to Nar-Sie. Places them into a soul shard if they're in their body.
@@ -391,7 +391,7 @@ var/list/teleport_runes = list()
/obj/effect/rune/sacrifice/New()
..()
- cultist_desc = "sacrifices a crew member to [ticker.cultdat.entity_title3]. May place them into a soul shard if their spirit remains in their body."
+ cultist_desc = "sacrifices a crew member to [SSticker.cultdat.entity_title3]. May place them into a soul shard if their spirit remains in their body."
/obj/effect/rune/sacrifice/invoke(var/list/invokers)
if(rune_in_use)
@@ -432,7 +432,7 @@ var/list/teleport_runes = list()
/obj/effect/rune/sacrifice/proc/sac(var/list/invokers, mob/living/T)
var/sacrifice_fulfilled
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
if(T)
if(istype(T, /mob/living/simple_animal/pet/corgi))
for(var/M in invokers)
@@ -445,7 +445,7 @@ var/list/teleport_runes = list()
if(is_sacrifice_target(T.mind))
sacrifice_fulfilled = 1
new /obj/effect/temp_visual/cult/sac(loc)
- if(ticker && ticker.mode && ticker.mode.name == "cult")
+ if(SSticker && SSticker.mode && SSticker.mode.name == "cult")
cult_mode.harvested++
for(var/M in invokers)
@@ -494,8 +494,8 @@ var/list/teleport_runes = list()
/obj/effect/rune/narsie/New()
..()
- cultist_name = "Summon [ticker.cultdat.entity_name]"
- cultist_desc = "tears apart dimensional barriers, calling forth [ticker.cultdat.entity_title3]. Requires 9 invokers."
+ cultist_name = "Summon [SSticker.cultdat.entity_name]"
+ cultist_desc = "tears apart dimensional barriers, calling forth [SSticker.cultdat.entity_title3]. Requires 9 invokers."
/obj/effect/rune/narsie/check_icon()
@@ -508,7 +508,7 @@ var/list/teleport_runes = list()
if(used)
return
var/mob/living/user = invokers[1]
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
if(!(CULT_ELDERGOD in cult_mode.objectives))
message_admins("[key_name_admin(user)] tried to summonn an eldritch horror when the objective was wrong")
burn_invokers(invokers)
@@ -521,7 +521,7 @@ var/list/teleport_runes = list()
return
if(!cult_mode.eldergod)
for(var/M in invokers)
- to_chat(M, "[ticker.cultdat.entity_name] is already on this plane!")
+ to_chat(M, "[SSticker.cultdat.entity_name] is already on this plane!")
log_game("Summon god rune failed - already summoned")
return
//BEGIN THE SUMMONING
@@ -594,7 +594,7 @@ var/list/teleport_runes = list()
if(used)
return
var/mob/living/user = invokers[1]
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
if(!(CULT_SLAUGHTER in cult_mode.objectives))
message_admins("[key_name_admin(user)] tried to summon demons when the objective was wrong")
burn_invokers(invokers)
@@ -856,10 +856,10 @@ var/list/teleport_runes = list()
/obj/effect/rune/summon/invoke(var/list/invokers)
var/mob/living/user = invokers[1]
var/list/cultists = list()
- for(var/datum/mind/M in ticker.mode.cult)
+ for(var/datum/mind/M in SSticker.mode.cult)
if(!(M.current in invokers) && M.current && M.current.stat != DEAD)
cultists |= M.current
- var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of [ticker.cultdat.entity_title3]") as null|anything in cultists
+ var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of [SSticker.cultdat.entity_title3]") as null|anything in cultists
if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated())
return
if(!cultist_to_summon)
@@ -868,7 +868,7 @@ var/list/teleport_runes = list()
log_game("Summon Cultist rune failed - no target")
return
if(!iscultist(cultist_to_summon))
- to_chat(user, "[cultist_to_summon] is not a follower of [ticker.cultdat.entity_title3]!")
+ to_chat(user, "[cultist_to_summon] is not a follower of [SSticker.cultdat.entity_title3]!")
fail_invoke()
log_game("Summon Cultist rune failed - no target")
return
@@ -977,7 +977,7 @@ var/list/teleport_runes = list()
/obj/effect/rune/manifest/New(loc)
..()
- cultist_desc = "manifests a spirit as a servant of [ticker.cultdat.entity_title3]. The invoker must not move from atop the rune, and will take damage for each summoned spirit."
+ cultist_desc = "manifests a spirit as a servant of [SSticker.cultdat.entity_title3]. The invoker must not move from atop the rune, and will take damage for each summoned spirit."
notify_ghosts("Manifest rune created in [get_area(src)].", ghost_sound='sound/effects/ghost2.ogg', source = src)
@@ -1033,10 +1033,10 @@ var/list/teleport_runes = list()
N.health = 20
N.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
new_human.key = ghost_to_spawn.key
- ticker.mode.add_cultist(new_human.mind, 0)
+ SSticker.mode.add_cultist(new_human.mind, 0)
summoned_guys |= new_human
ghosts++
- to_chat(new_human, "You are a servant of [ticker.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.cultdat.entity_name], and you are to serve them at all costs.")
+ to_chat(new_human, "You are a servant of [SSticker.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [SSticker.cultdat.entity_name], and you are to serve them at all costs.")
while(user in get_turf(src))
if(user.stat)
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index 875e8a3d1e9..92fc09490ec 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -41,7 +41,7 @@
invocation = "Ra'sha yoka!"
/obj/item/paper/talisman/malformed/invoke(mob/living/user, successfuluse = 1)
- to_chat(user, "You feel a pain in your head. [ticker.cultdat.entity_title3] is displeased.")
+ to_chat(user, "You feel a pain in your head. [SSticker.cultdat.entity_title3] is displeased.")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.apply_damage(10, BRUTE, "head")
diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/game/gamemodes/devil/devilinfo.dm
index e11d31f7d98..419034a9e1f 100644
--- a/code/game/gamemodes/devil/devilinfo.dm
+++ b/code/game/gamemodes/devil/devilinfo.dm
@@ -300,9 +300,9 @@ var/global/list/lawlorify = list (
to_chat(world, "SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!")
world << 'sound/hallucinations/veryfar_noise.ogg'
sleep(50)
- if(!ticker.mode.devil_ascended)
+ if(!SSticker.mode.devil_ascended)
SSshuttle.emergency.request(null, 0.3)
- ticker.mode.devil_ascended++
+ SSticker.mode.devil_ascended++
/datum/devilinfo/proc/increase_arch_devil()
if(!ascendable)
diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm
index 5214ab336ec..04d0217b599 100644
--- a/code/game/gamemodes/devil/objectives.dm
+++ b/code/game/gamemodes/devil/objectives.dm
@@ -68,7 +68,7 @@
explanation_text = "Ensure at least [target_amount] mortals are sintouched."
/datum/objective/devil/sintouch/check_completion()
- return target_amount <= ticker.mode.sintouched.len
+ return target_amount <= SSticker.mode.sintouched.len
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 5f3ed489107..4f583abdfed 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -75,8 +75,8 @@
display_roundstart_logout_report()
feedback_set_details("round_start","[time2text(world.realtime)]")
- if(ticker && ticker.mode)
- feedback_set_details("game_mode","[ticker.mode]")
+ if(SSticker && SSticker.mode)
+ feedback_set_details("game_mode","[SSticker.mode]")
// if(revdata)
// feedback_set_details("revision","[revdata.revision]")
feedback_set_details("server_ip","[world.internet_address]:[world.port]")
diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm
index e8a3ff6c981..2b4d095b327 100644
--- a/code/game/gamemodes/heist/heist.dm
+++ b/code/game/gamemodes/heist/heist.dm
@@ -312,5 +312,5 @@ datum/game_mode/proc/auto_declare_completion_heist()
message_admins("[key_name_admin(user)] has pressed the vox win button.")
log_admin("[key_name(user)] pressed the vox win button during a vox round.")
- var/datum/game_mode/heist/H = ticker.mode
+ var/datum/game_mode/heist/H = SSticker.mode
H.win_button_triggered = 1
diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm
index 5e8be8b1229..d1d176f797e 100644
--- a/code/game/gamemodes/intercept_report.dm
+++ b/code/game/gamemodes/intercept_report.dm
@@ -113,10 +113,10 @@
if(man.client && man.client.prefs.nanotrasen_relation == "Opposed")
//don't include suspects who can't possibly be the antag based on their job (no suspecting the captain of being a damned dirty tator)
if(man.mind && man.mind.assigned_role)
- if((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs))
+ if((man.mind.assigned_role in SSticker.mode.protected_jobs) || (man.mind.assigned_role in SSticker.mode.restricted_jobs))
return
//don't include suspects who can't possibly be the antag based on their species (no suspecting the machines of being sneaky changelings)
- if(man.dna.species.name in ticker.mode.protected_species)
+ if(man.dna.species.name in SSticker.mode.protected_species)
return
dudes += man
for(var/i = 0, i < max(GLOB.player_list.len/10,2), i++)
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 13df41fe531..8eeee9e4f2a 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -111,7 +111,7 @@
to_chat(L, "The blast wave from [src] tears you atom from atom!")
L.dust()
to_chat(world, "The AI cleansed the station of life with the doomsday device!")
- ticker.force_ending = 1
+ SSticker.force_ending = 1
/datum/AI_Module/large/upgrade_turrets
diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm
index 587c2b3d476..aab75687df4 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction.dm
@@ -251,14 +251,14 @@
/datum/game_mode/proc/remove_abductor(datum/mind/abductor_mind)
if(abductor_mind in abductors)
- ticker.mode.abductors -= abductor_mind
+ SSticker.mode.abductors -= abductor_mind
abductor_mind.special_role = null
abductor_mind.current.create_attack_log("No longer abductor")
if(issilicon(abductor_mind.current))
to_chat(abductor_mind.current, "You have been turned into a robot! You are no longer an abductor.")
else
to_chat(abductor_mind.current, "You have been brainwashed! You are no longer an abductor.")
- ticker.mode.update_abductor_icons_removed(abductor_mind)
+ SSticker.mode.update_abductor_icons_removed(abductor_mind)
/datum/game_mode/proc/update_abductor_icons_added(datum/mind/alien_mind)
var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR]
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
index 53969aaf7d1..db6f07c1d24 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
@@ -140,14 +140,14 @@
to_chat(H, "You can't remember how you got here...")
var/objtype = pick(subtypesof(/datum/objective/abductee/))
var/datum/objective/abductee/O = new objtype()
- ticker.mode.abductees += H.mind
+ SSticker.mode.abductees += H.mind
H.mind.objectives += O
var/obj_count = 1
to_chat(H, "Your current objectives:")
for(var/datum/objective/objective in H.mind.objectives)
to_chat(H, "Objective #[obj_count]: [objective.explanation_text]")
obj_count++
- ticker.mode.update_abductor_icons_added(H.mind)
+ SSticker.mode.update_abductor_icons_added(H.mind)
for(var/obj/item/organ/internal/heart/gland/G in H.internal_organs)
G.Start()
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
index f7ff2864608..697d173716a 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
@@ -7,7 +7,8 @@
var/turf/teleport_target
/obj/machinery/abductor/pad/proc/Warp(mob/living/target)
- target.Move(src.loc)
+ if(!target.buckled)
+ target.forceMove(get_turf(src))
/obj/machinery/abductor/pad/proc/Send()
if(teleport_target == null)
diff --git a/code/game/gamemodes/miniantags/morph/morph_event.dm b/code/game/gamemodes/miniantags/morph/morph_event.dm
index 4a1c8ebeb7e..e80374e2dca 100644
--- a/code/game/gamemodes/miniantags/morph/morph_event.dm
+++ b/code/game/gamemodes/miniantags/morph/morph_event.dm
@@ -21,7 +21,7 @@
player_mind.transfer_to(S)
player_mind.assigned_role = SPECIAL_ROLE_MORPH
player_mind.special_role = SPECIAL_ROLE_MORPH
- ticker.mode.traitors |= player_mind
+ SSticker.mode.traitors |= player_mind
to_chat(S, S.playstyle_string)
S << 'sound/magic/mutate.ogg'
message_admins("[key_of_morph] has been made into morph by an event.")
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index 72fbd350f0d..740601f3798 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -171,7 +171,7 @@
objective2.owner = mind
mind.objectives += objective2
to_chat(src, "Objective #2: [objective2.explanation_text]")
- ticker.mode.traitors |= mind //Necessary for announcing
+ SSticker.mode.traitors |= mind //Necessary for announcing
/mob/living/simple_animal/revenant/proc/giveSpells()
mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null))
@@ -416,7 +416,7 @@
player_mind.transfer_to(R)
player_mind.assigned_role = SPECIAL_ROLE_REVENANT
player_mind.special_role = SPECIAL_ROLE_REVENANT
- ticker.mode.traitors |= player_mind
+ SSticker.mode.traitors |= player_mind
message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.")
log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.")
visible_message("[src] suddenly rises into the air before fading away.")
diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm
index 757fbe579a2..437e7637a77 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm
@@ -45,7 +45,7 @@
player_mind.transfer_to(revvie)
player_mind.assigned_role = SPECIAL_ROLE_REVENANT
player_mind.special_role = SPECIAL_ROLE_REVENANT
- ticker.mode.traitors |= player_mind
+ SSticker.mode.traitors |= player_mind
message_admins("[key_of_revenant] has been made into a revenant by an event.")
log_game("[key_of_revenant] was spawned as a revenant by an event.")
return 1
diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm
index 68b886207e3..f732e251a0a 100644
--- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm
+++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm
@@ -72,7 +72,7 @@
if(!(vialspawned))
var/datum/objective/slaughter/objective = new
var/datum/objective/demonFluff/fluffObjective = new
- ticker.mode.traitors |= mind
+ SSticker.mode.traitors |= mind
objective.owner = mind
fluffObjective.owner = mind
//Paradise Port:I added the objective for one spawned like this
@@ -174,7 +174,7 @@
S.mind.assigned_role = "Harbringer of the Slaughter"
S.mind.special_role = "Harbringer of the Slaughter"
to_chat(S, playstyle_string)
- ticker.mode.add_cultist(S.mind)
+ SSticker.mode.add_cultist(S.mind)
var/obj/effect/proc_holder/spell/targeted/sense_victims/SV = new
AddSpell(SV)
var/datum/objective/new_objective = new /datum/objective
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 8271a3c860d..4e9d507c9ea 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -4,7 +4,7 @@
var/list/datum/mind/syndicates = list()
proc/issyndicate(mob/living/M as mob)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.syndicates)
+ return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.syndicates)
/datum/game_mode/nuclear
name = "nuclear emergency"
@@ -64,7 +64,7 @@ proc/issyndicate(mob/living/M as mob)
/datum/game_mode/proc/remove_operative(datum/mind/operative_mind)
if(operative_mind in syndicates)
- ticker.mode.syndicates -= operative_mind
+ SSticker.mode.syndicates -= operative_mind
operative_mind.special_role = null
for(var/datum/objective/nuclear/O in operative_mind.objectives)
operative_mind.objectives -= O
@@ -73,7 +73,7 @@ proc/issyndicate(mob/living/M as mob)
to_chat(operative_mind.current, "You have been turned into a robot! You are no longer a Syndicate operative.")
else
to_chat(operative_mind.current, "You have been brainwashed! You are no longer a Syndicate operative.")
- ticker.mode.update_synd_icons_removed(operative_mind)
+ SSticker.mode.update_synd_icons_removed(operative_mind)
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
@@ -208,7 +208,7 @@ proc/issyndicate(mob/living/M as mob)
P.stamp(stamp)
qdel(stamp)
- if(ticker.mode.config_tag=="nuclear")
+ if(SSticker.mode.config_tag=="nuclear")
P.loc = synd_mind.current.loc
else
var/mob/living/carbon/human/H = synd_mind.current
@@ -437,7 +437,7 @@ proc/issyndicate(mob/living/M as mob)
/datum/game_mode/nuclear/set_scoreboard_gvars()
var/foecount = 0
- for(var/datum/mind/M in ticker.mode.syndicates)
+ for(var/datum/mind/M in SSticker.mode.syndicates)
foecount++
if(!M || !M.current)
score_opkilled++
@@ -490,7 +490,7 @@ proc/issyndicate(mob/living/M as mob)
var/diskdat = ""
var/bombdat = null
- for(var/datum/mind/M in ticker.mode.syndicates)
+ for(var/datum/mind/M in SSticker.mode.syndicates)
foecount++
for(var/mob/living/C in world)
diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm
index 45711bb52fc..35c26408c5b 100644
--- a/code/game/gamemodes/nuclear/nuclear_challenge.dm
+++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm
@@ -21,7 +21,7 @@
return
declaring_war = TRUE
- var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]. Are you sure you want to alert the enemy crew? You have [-round((world.time-round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", "Yes", "No")
+ var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]. Are you sure you want to alert the enemy crew? You have [-round((world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", "Yes", "No")
declaring_war = FALSE
if(!check_allowed(user))
@@ -88,7 +88,7 @@
if(!is_admin_level(user.z))
to_chat(user, "You have to be at your base to use this.")
return FALSE
- if((world.time - round_start_time) > CHALLENGE_TIME_LIMIT) // Only count after the round started
+ if((world.time - SSticker.round_start_time) > CHALLENGE_TIME_LIMIT) // Only count after the round started
to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.")
return FALSE
for(var/obj/machinery/computer/shuttle/syndicate/S in GLOB.machines)
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 2e36488cc8a..09de3f917bd 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -354,8 +354,8 @@ var/bomb_set
if(!lighthack)
icon_state = "nuclearbomb3"
playsound(src,'sound/machines/alarm.ogg',100,0,5)
- if(ticker && ticker.mode)
- ticker.mode.explosion_in_progress = 1
+ if(SSticker && SSticker.mode)
+ SSticker.mode.explosion_in_progress = 1
sleep(100)
enter_allowed = 0
@@ -368,17 +368,17 @@ var/bomb_set
else
off_station = 2
- if(ticker)
- if(ticker.mode && ticker.mode.name == "nuclear emergency")
+ if(SSticker)
+ if(SSticker.mode && SSticker.mode.name == "nuclear emergency")
var/obj/docking_port/mobile/syndie_shuttle = SSshuttle.getShuttle("syndicate")
if(syndie_shuttle)
- ticker.mode:syndies_didnt_escape = is_station_level(syndie_shuttle.z)
- ticker.mode:nuke_off_station = off_station
- ticker.station_explosion_cinematic(off_station,null)
- if(ticker.mode)
- ticker.mode.explosion_in_progress = 0
- if(ticker.mode.name == "nuclear emergency")
- ticker.mode:nukes_left --
+ SSticker.mode:syndies_didnt_escape = is_station_level(syndie_shuttle.z)
+ SSticker.mode:nuke_off_station = off_station
+ SSticker.station_explosion_cinematic(off_station,null)
+ if(SSticker.mode)
+ SSticker.mode.explosion_in_progress = 0
+ if(SSticker.mode.name == "nuclear emergency")
+ SSticker.mode:nukes_left --
else if(off_station == 1)
to_chat(world, "A nuclear device was set off, but the explosion was out of reach of the station!")
else if(off_station == 2)
@@ -386,10 +386,10 @@ var/bomb_set
else
to_chat(world, "The station was destoyed by the nuclear blast!")
- ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
+ SSticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
//kinda shit but I couldn't get permission to do what I wanted to do.
- if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
+ if(!SSticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
world.Reboot("Station destroyed by Nuclear Device.", "end_error", "nuke - unhandled ending")
return
return
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 61986b34f94..d221c94d39f 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -273,7 +273,7 @@
var/mob/living/carbon/nearest_op = null
/obj/item/pinpointer/operative/attack_self()
- if(!usr.mind || !(usr.mind in ticker.mode.syndicates))
+ if(!usr.mind || !(usr.mind in SSticker.mode.syndicates))
to_chat(usr, "AUTHENTICATION FAILURE. ACCESS DENIED.")
return 0
if(!active)
@@ -290,7 +290,7 @@
nearest_op = null //Resets nearest_op every time it scans
var/closest_distance = 1000
for(var/mob/living/carbon/M in GLOB.mob_list)
- if(M.mind && (M.mind in ticker.mode.syndicates))
+ if(M.mind && (M.mind in SSticker.mode.syndicates))
if(get_dist(M, get_turf(src)) < closest_distance) //Actually points toward the nearest op, instead of a random one like it used to
nearest_op = M
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 3dc5f4f952f..5b06e09f5ba 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -43,7 +43,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
/datum/objective/proc/find_target()
var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(is_invalid_target(possible_target))
continue
@@ -263,9 +263,9 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
return 0
if(!owner.current || owner.current.stat == DEAD)
return 0
- if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith
+ if(SSticker.force_ending) //This one isn't their fault, so lets just assume good faith
return 1
- if(ticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win
+ if(SSticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win
return 1
if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
return 0
@@ -287,7 +287,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
/datum/objective/escape/escape_with_identity/find_target()
var/list/possible_targets = list() //Copypasta because NO_DNA races, yay for snowflakes.
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && possible_target.current.client)
var/mob/living/carbon/human/H = possible_target.current
if(!(NO_DNA in H.dna.species.species_traits))
@@ -452,19 +452,19 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
/datum/objective/absorb
/datum/objective/absorb/proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6)
target_amount = rand (lowbound,highbound)
- if(ticker)
+ if(SSticker)
var/n_p = 1 //autowin
- if(ticker.current_state == GAME_STATE_SETTING_UP)
+ if(SSticker.current_state == GAME_STATE_SETTING_UP)
for(var/mob/new_player/P in GLOB.player_list)
if(P.client && P.ready && P.mind != owner)
if(P.client.prefs && (P.client.prefs.species == "Machine")) // Special check for species that can't be absorbed. No better solution.
continue
n_p++
- else if(ticker.current_state == GAME_STATE_PLAYING)
+ else if(SSticker.current_state == GAME_STATE_PLAYING)
for(var/mob/living/carbon/human/P in GLOB.player_list)
if(NO_DNA in P.dna.species.species_traits)
continue
- if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner)
+ if(P.client && !(P.mind in SSticker.mode.changelings) && P.mind!=owner)
n_p++
target_amount = min(target_amount, n_p)
@@ -531,7 +531,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
var/list/possible_targets = list()
var/list/priority_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role))
possible_targets += possible_target
for(var/role in roles)
@@ -627,7 +627,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
if(total_amount >= target_amount)
return 1
- var/datum/game_mode/heist/H = ticker.mode
+ var/datum/game_mode/heist/H = SSticker.mode
for(var/datum/mind/raider in H.raiders)
if(raider.current)
for(var/obj/O in raider.current.get_contents())
@@ -697,7 +697,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
S = I
total_amount += S.get_amount()
- var/datum/game_mode/heist/H = ticker.mode
+ var/datum/game_mode/heist/H = SSticker.mode
for(var/datum/mind/raider in H.raiders)
if(raider.current)
for(var/obj/item/O in raider.current.get_contents())
@@ -714,7 +714,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
explanation_text = "Do not leave any Vox behind, alive or dead."
/datum/objective/heist/inviolate_crew/check_completion()
- var/datum/game_mode/heist/H = ticker.mode
+ var/datum/game_mode/heist/H = SSticker.mode
if(H.is_raider_crew_safe())
return 1
return 0
@@ -726,7 +726,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
var/vox_allowed_kills = 3 // The number of people the vox can accidently kill. Mostly a counter to people killing themselves if a raider touches them to force fail.
var/vox_total_kills = 0
- var/datum/game_mode/heist/H = ticker.mode
+ var/datum/game_mode/heist/H = SSticker.mode
for(var/datum/mind/raider in H.raiders)
vox_total_kills += raider.kills.len // Kills are listed in the mind; uses this to calculate vox kills
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 7cab3de5aa1..9f7e14ccef2 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -87,7 +87,7 @@
if(check_counter >= 5)
if(!finished)
check_heads()
- ticker.mode.check_win()
+ SSticker.mode.check_win()
check_counter = 0
return FALSE
@@ -369,7 +369,7 @@
/datum/game_mode/revolution/set_scoreboard_gvars()
var/foecount = 0
- for(var/datum/mind/M in ticker.mode.head_revolutionaries)
+ for(var/datum/mind/M in SSticker.mode.head_revolutionaries)
foecount++
if(!M || !M.current)
score_opkilled++
@@ -408,10 +408,10 @@
var/comcount = 0
var/revcount = 0
var/loycount = 0
- for(var/datum/mind/M in ticker.mode:head_revolutionaries)
+ for(var/datum/mind/M in SSticker.mode:head_revolutionaries)
if(M.current && M.current.stat != DEAD)
foecount++
- for(var/datum/mind/M in ticker.mode:revolutionaries)
+ for(var/datum/mind/M in SSticker.mode:revolutionaries)
if(M.current && M.current.stat != DEAD)
revcount++
for(var/mob/living/carbon/human/player in world)
@@ -421,7 +421,7 @@
if(player.stat != DEAD)
comcount++
else
- if(player.mind in ticker.mode.revolutionaries) continue
+ if(player.mind in SSticker.mode.revolutionaries) continue
loycount++
for(var/mob/living/silicon/X in world)
diff --git a/code/game/gamemodes/scoreboard.dm b/code/game/gamemodes/scoreboard.dm
index bd17175eaa2..379b4fbdcd9 100644
--- a/code/game/gamemodes/scoreboard.dm
+++ b/code/game/gamemodes/scoreboard.dm
@@ -1,9 +1,9 @@
-/datum/controller/gameticker/proc/scoreboard()
+/datum/controller/subsystem/ticker/proc/scoreboard()
//Print a list of antagonists to the server log
var/list/total_antagonists = list()
//Look into all mobs in world, dead or alive
- for(var/datum/mind/Mind in minds)
+ for(var/datum/mind/Mind in SSticker.minds)
var/temprole = Mind.special_role
if(temprole) //if they are an antagonist of some sort.
if(temprole in total_antagonists) //If the role exists already, add the name to it
@@ -66,8 +66,8 @@
score_dmgestjob = E.job
score_dmgestkey = E.key
- if(ticker && ticker.mode)
- ticker.mode.set_scoreboard_gvars()
+ if(SSticker && SSticker.mode)
+ SSticker.mode.set_scoreboard_gvars()
// Check station's power levels
@@ -147,7 +147,7 @@
E.scorestats()
// A recursive function to properly determine the wealthiest escapee
-/datum/controller/gameticker/proc/get_score_container_worth(atom/C, level=0)
+/datum/controller/subsystem/ticker/proc/get_score_container_worth(atom/C, level=0)
if(level >= 5)
// in case the containers recurse or something
return 0
@@ -171,8 +171,8 @@
/mob/proc/scorestats()
var/dat = "Round Statistics and Score
"
- if(ticker && ticker.mode)
- dat += ticker.mode.get_scoreboard_stats()
+ if(SSticker && SSticker.mode)
+ dat += SSticker.mode.get_scoreboard_stats()
dat += {"
General Statistics
@@ -208,7 +208,7 @@
else
dat += "No-one escaped!
"
- dat += ticker.mode.declare_job_completion()
+ dat += SSticker.mode.declare_job_completion()
dat += {"
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index 0c16e88279b..78e6cea4987 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -142,12 +142,12 @@
qdel(F)
continue
else
- ticker.factions.Add(F)
- ticker.availablefactions.Add(F)
+ SSticker.factions.Add(F)
+ SSticker.availablefactions.Add(F)
// Populate the syndicate coalition:
- for(var/datum/faction/syndicate/S in ticker.factions)
- ticker.syndicate_coalition.Add(S)
+ for(var/datum/faction/syndicate/S in SSticker.factions)
+ SSticker.syndicate_coalition.Add(S)
/proc/setupcult()
var/static/datum/cult_info/picked_cult // Only needs to get picked once
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index 230f797626d..b580f88c0b7 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -56,15 +56,15 @@ Made by Xhuis
var/thrall_ratio = 1
/proc/is_thrall(var/mob/living/M)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.shadowling_thralls)
+ return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadowling_thralls)
/proc/is_shadow_or_thrall(var/mob/living/M)
- return istype(M) && M.mind && ticker && ticker.mode && ((M.mind in ticker.mode.shadowling_thralls) || (M.mind in ticker.mode.shadows))
+ return istype(M) && M.mind && SSticker && SSticker.mode && ((M.mind in SSticker.mode.shadowling_thralls) || (M.mind in SSticker.mode.shadows))
/proc/is_shadow(var/mob/living/M)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.shadows)
+ return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadows)
/datum/game_mode/shadowling
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index ea95f62af57..2515de135fa 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -216,11 +216,11 @@
/obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets, mob/user = usr)
var/mob/living/carbon/human/ling = user
- listclearnulls(ticker.mode.shadowling_thralls)
- if(!(ling.mind in ticker.mode.shadows))
+ listclearnulls(SSticker.mode.shadowling_thralls)
+ if(!(ling.mind in SSticker.mode.shadows))
return
if(!isshadowling(ling))
- if(ticker.mode.shadowling_thralls.len >= 5)
+ if(SSticker.mode.shadowling_thralls.len >= 5)
charge_counter = charge_max
return
for(var/mob/living/carbon/human/target in targets)
@@ -291,7 +291,7 @@
target.visible_message("[target] looks to have experienced a revelation!", \
"False faces all dark not real not real not--")
target.setOxyLoss(0) //In case the shadowling was choking them out
- ticker.mode.add_thrall(target.mind)
+ SSticker.mode.add_thrall(target.mind)
target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor
@@ -345,7 +345,7 @@
return
for(var/mob/living/target in targets)
var/thralls = 0
- var/victory_threshold = ticker.mode.required_thralls
+ var/victory_threshold = SSticker.mode.required_thralls
var/mob/M
to_chat(target, "You focus your telepathic energies abound, harnessing and drawing together the strength of your thralls.")
@@ -359,24 +359,24 @@
to_chat(target, "Your concentration has been broken. The mental hooks you have sent out now retract into your mind.")
return
- if(thralls >= CEILING(3 * ticker.mode.thrall_ratio, 1) && !screech_acquired)
+ if(thralls >= CEILING(3 * SSticker.mode.thrall_ratio, 1) && !screech_acquired)
screech_acquired = 1
to_chat(target, "The power of your thralls has granted you the Sonic Screech ability. This ability will shatter nearby windows and deafen enemies, plus stunning silicon lifeforms.")
target.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech(null))
- if(thralls >= CEILING(5 * ticker.mode.thrall_ratio, 1) && !blind_smoke_acquired)
+ if(thralls >= CEILING(5 * SSticker.mode.thrall_ratio, 1) && !blind_smoke_acquired)
blind_smoke_acquired = 1
to_chat(target, "The power of your thralls has granted you the Blinding Smoke ability. \
It will create a choking cloud that will blind any non-thralls who enter.")
target.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/blindness_smoke(null))
- if(thralls >= CEILING(7 * ticker.mode.thrall_ratio, 1) && !nullChargeAcquired)
+ if(thralls >= CEILING(7 * SSticker.mode.thrall_ratio, 1) && !nullChargeAcquired)
nullChargeAcquired = 1
to_chat(user, "The power of your thralls has granted you the Null Charge ability. This ability will drain an APC's contents to the void, preventing it from recharging \
or sending power until repaired.")
target.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/null_charge(null))
- if(thralls >= CEILING(9 * ticker.mode.thrall_ratio, 1) && !reviveThrallAcquired)
+ if(thralls >= CEILING(9 * SSticker.mode.thrall_ratio, 1) && !reviveThrallAcquired)
reviveThrallAcquired = 1
to_chat(target, "The power of your thralls has granted you the Black Recuperation ability. \
This will, after a short time, bring a dead thrall completely back to life with no bodily defects.")
@@ -578,7 +578,7 @@
charge_counter = charge_max
return
var/empowered_thralls = 0
- for(var/datum/mind/M in ticker.mode.shadowling_thralls)
+ for(var/datum/mind/M in SSticker.mode.shadowling_thralls)
if(!ishuman(M.current))
return
var/mob/living/carbon/human/H = M.current
@@ -767,7 +767,7 @@
to_chat(user, "You instantly rearrange [target]'s memories, hyptonitizing [target.p_them()] into a thrall.")
to_chat(target, "An agonizing spike of pain drives into your mind, and--")
- ticker.mode.add_thrall(target.mind)
+ SSticker.mode.add_thrall(target.mind)
target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
target.add_language("Shadowling Hivemind")
diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
index c11105e9f30..514a16174b1 100644
--- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
@@ -181,9 +181,9 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
H.invisibility = 60 //This is pretty bad, but is also necessary for the shuttle call to function properly
H.loc = A
sleep(50)
- if(!ticker.mode.shadowling_ascended)
+ if(!SSticker.mode.shadowling_ascended)
SSshuttle.emergency.request(null, 0.3)
SSshuttle.emergency.canRecall = FALSE
- ticker.mode.shadowling_ascended = 1
+ SSticker.mode.shadowling_ascended = 1
A.mind.RemoveSpell(src)
qdel(H)
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index de7ce59eaa2..c2855f5c338 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -208,11 +208,11 @@
/datum/game_mode/proc/give_codewords(mob/living/traitor_mob)
to_chat(traitor_mob, "The Syndicate provided you with the following information on how to identify their agents:")
- to_chat(traitor_mob, "Code Phrase: [syndicate_code_phrase]")
- to_chat(traitor_mob, "Code Response: [syndicate_code_response]")
+ to_chat(traitor_mob, "Code Phrase: [GLOB.syndicate_code_phrase]")
+ to_chat(traitor_mob, "Code Response: [GLOB.syndicate_code_response]")
- traitor_mob.mind.store_memory("Code Phrase: [syndicate_code_phrase]")
- traitor_mob.mind.store_memory("Code Response: [syndicate_code_response]")
+ traitor_mob.mind.store_memory("Code Phrase: [GLOB.syndicate_code_phrase]")
+ traitor_mob.mind.store_memory("Code Response: [GLOB.syndicate_code_response]")
to_chat(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.")
@@ -348,14 +348,14 @@
/datum/game_mode/proc/remove_traitor(datum/mind/traitor_mind)
if(traitor_mind in traitors)
- ticker.mode.traitors -= traitor_mind
+ SSticker.mode.traitors -= traitor_mind
traitor_mind.special_role = null
traitor_mind.current.create_attack_log("De-traitored")
if(issilicon(traitor_mind.current))
to_chat(traitor_mind.current, "You have been turned into a robot! You are no longer a traitor.")
else
to_chat(traitor_mind.current, "You have been brainwashed! You are no longer a traitor.")
- ticker.mode.update_traitor_icons_removed(traitor_mind)
+ SSticker.mode.update_traitor_icons_removed(traitor_mind)
/datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind)
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm
index 18d36ad57f3..9dec5b573e2 100644
--- a/code/game/gamemodes/vampire/vampire.dm
+++ b/code/game/gamemodes/vampire/vampire.dm
@@ -288,7 +288,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
else
H.LAssailant = owner
while(do_mob(owner, H, 50))
- if(!(owner.mind in ticker.mode.vampires))
+ if(!(owner.mind in SSticker.mode.vampires))
to_chat(owner, "Your fangs have disappeared!")
return
old_bloodtotal = bloodtotal
@@ -337,7 +337,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
/datum/game_mode/proc/remove_vampire(datum/mind/vampire_mind)
if(vampire_mind in vampires)
- ticker.mode.vampires -= vampire_mind
+ SSticker.mode.vampires -= vampire_mind
vampire_mind.special_role = null
vampire_mind.current.create_attack_log("De-vampired")
if(vampire_mind.vampire)
@@ -347,7 +347,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
to_chat(vampire_mind.current, "You have been turned into a robot! You can feel your powers fading away...")
else
to_chat(vampire_mind.current, "You have been brainwashed! You are no longer a vampire.")
- ticker.mode.update_vampire_icons_removed(vampire_mind)
+ SSticker.mode.update_vampire_icons_removed(vampire_mind)
//prepare for copypaste
/datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind)
diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm
index 6a664fbe75c..c9524458975 100644
--- a/code/game/gamemodes/vampire/vampire_powers.dm
+++ b/code/game/gamemodes/vampire/vampire_powers.dm
@@ -276,7 +276,7 @@
/proc/isvampirethrall(mob/living/M as mob)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.vampire_enthralled)
+ return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.vampire_enthralled)
/obj/effect/proc_holder/spell/vampire/targetted/enthrall
name = "Enthrall (300)"
@@ -315,11 +315,11 @@
if(!C.mind)
to_chat(user, "[C.name]'s mind is not there for you to enthrall.")
return 0
- if(enthrall_safe || ( C.mind in ticker.mode.vampires )||( C.mind.vampire )||( C.mind in ticker.mode.vampire_enthralled ))
+ if(enthrall_safe || ( C.mind in SSticker.mode.vampires )||( C.mind.vampire )||( C.mind in SSticker.mode.vampire_enthralled ))
C.visible_message("[C] seems to resist the takeover!", "You feel a familiar sensation in your skull that quickly dissipates.")
return 0
if(!affects(C))
- C.visible_message("[C] seems to resist the takeover!", "Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil.")
+ C.visible_message("[C] seems to resist the takeover!", "Your faith of [SSticker.Bible_deity_name] has kept your mind clear of all evil.")
return 0
if(!ishuman(C))
to_chat(user, "You can only enthrall humans!")
@@ -330,21 +330,21 @@
if(!istype(H))
return 0
var/ref = "\ref[user.mind]"
- if(!(ref in ticker.mode.vampire_thralls))
- ticker.mode.vampire_thralls[ref] = list(H.mind)
+ if(!(ref in SSticker.mode.vampire_thralls))
+ SSticker.mode.vampire_thralls[ref] = list(H.mind)
else
- ticker.mode.vampire_thralls[ref] += H.mind
+ SSticker.mode.vampire_thralls[ref] += H.mind
- ticker.mode.update_vampire_icons_added(H.mind)
- ticker.mode.update_vampire_icons_added(user.mind)
+ SSticker.mode.update_vampire_icons_added(H.mind)
+ SSticker.mode.update_vampire_icons_added(user.mind)
var/datum/mindslaves/slaved = user.mind.som
H.mind.som = slaved
slaved.serv += H
slaved.add_serv_hud(user.mind, "vampire")//handles master servent icons
slaved.add_serv_hud(H.mind, "vampthrall")
- ticker.mode.vampire_enthralled.Add(H.mind)
- ticker.mode.vampire_enthralled[H.mind] = user.mind
+ SSticker.mode.vampire_enthralled.Add(H.mind)
+ SSticker.mode.vampire_enthralled[H.mind] = user.mind
H.mind.special_role = SPECIAL_ROLE_VAMPIRE_THRALL
to_chat(H, "You have been Enthralled by [user]. Follow [user.p_their()] every command.")
to_chat(user, "You have successfully Enthralled [H]. If [H.p_they()] refuse[H.p_s()] to do as you say just adminhelp.")
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index a069787c375..1eedc354f5e 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -99,9 +99,9 @@
new_objective:target = H:mind
new_objective.explanation_text = "Protect [H.real_name], the wizard."
M.mind.objectives += new_objective
- ticker.mode.traitors += M.mind
+ SSticker.mode.traitors += M.mind
M.mind.special_role = SPECIAL_ROLE_WIZARD_APPRENTICE
- ticker.mode.update_wiz_icons_added(M.mind)
+ SSticker.mode.update_wiz_icons_added(M.mind)
M.faction = list("wizard")
else
used = 0
@@ -283,7 +283,7 @@ var/global/list/multiverse = list()
usr.mind.objectives += hijack_objective
hijack_objective.explanation_text = "Ensure only [usr.real_name] and [usr.p_their()] copies are on the shuttle!"
to_chat(usr, "Objective #[1]: [hijack_objective.explanation_text]")
- ticker.mode.traitors += usr.mind
+ SSticker.mode.traitors += usr.mind
usr.mind.special_role = "[usr.real_name] Prime"
evil = TRUE
else
@@ -293,7 +293,7 @@ var/global/list/multiverse = list()
new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones."
to_chat(usr, "Objective #[1]: [new_objective.explanation_text]")
usr.mind.objectives += new_objective
- ticker.mode.traitors += usr.mind
+ SSticker.mode.traitors += usr.mind
usr.mind.special_role = "[usr.real_name] Prime"
evil = FALSE
else
diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index 3e22f3f84df..a71b51c58f0 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -273,11 +273,11 @@
Z.key = A.key
Z.faction |= "\ref[U]"
if(iscultist(U))
- if(ticker.mode.name == "cult")
- ticker.mode:add_cultist(Z.mind)
+ if(SSticker.mode.name == "cult")
+ SSticker.mode:add_cultist(Z.mind)
else
- ticker.mode.cult+=Z.mind
- ticker.mode.update_cult_icons_added(Z.mind)
+ SSticker.mode.cult+=Z.mind
+ SSticker.mode.update_cult_icons_added(Z.mind)
qdel(T)
to_chat(Z, "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, create shield walls and even deflect energy weapons, and rip apart enemies and walls alike.")
to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.")
@@ -289,11 +289,11 @@
Z.key = A.key
Z.faction |= "\ref[U]"
if(iscultist(U))
- if(ticker.mode.name == "cult")
- ticker.mode:add_cultist(Z.mind)
+ if(SSticker.mode.name == "cult")
+ SSticker.mode:add_cultist(Z.mind)
else
- ticker.mode.cult+=Z.mind
- ticker.mode.update_cult_icons_added(Z.mind)
+ SSticker.mode.cult+=Z.mind
+ SSticker.mode.update_cult_icons_added(Z.mind)
qdel(T)
to_chat(Z, "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.")
to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.")
@@ -305,11 +305,11 @@
Z.key = A.key
Z.faction |= "\ref[U]"
if(iscultist(U))
- if(ticker.mode.name == "cult")
- ticker.mode:add_cultist(Z.mind)
+ if(SSticker.mode.name == "cult")
+ SSticker.mode:add_cultist(Z.mind)
else
- ticker.mode.cult+=Z.mind
- ticker.mode.update_cult_icons_added(Z.mind)
+ SSticker.mode.cult+=Z.mind
+ SSticker.mode.update_cult_icons_added(Z.mind)
qdel(T)
to_chat(Z, "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, use magic missile, repair allied constructs (by clicking on them), and most important of all create new constructs (Use your Artificer spell to summon a new construct shell and Summon Soulstone to create a new soulstone).")
to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.")
@@ -326,11 +326,11 @@
newstruct.faction |= "\ref[stoner]"
newstruct.key = target.key
if(stoner && iscultist(stoner) || cultoverride)
- if(ticker.mode.name == "cult")
- ticker.mode:add_cultist(newstruct.mind)
+ if(SSticker.mode.name == "cult")
+ SSticker.mode:add_cultist(newstruct.mind)
else
- ticker.mode.cult+=newstruct.mind
- ticker.mode.update_cult_icons_added(newstruct.mind)
+ SSticker.mode.cult+=newstruct.mind
+ SSticker.mode.update_cult_icons_added(newstruct.mind)
if(stoner && iswizard(stoner))
to_chat(newstruct, "You are still bound to serve your creator, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.")
else if(stoner && iscultist(stoner))
@@ -357,7 +357,7 @@
if(U)
S.faction |= "\ref[U]" //Add the master as a faction, allowing inter-mob cooperation
if(U && iscultist(U))
- ticker.mode.add_cultist(S.mind, 0)
+ SSticker.mode.add_cultist(S.mind, 0)
S.cancel_camera()
name = "soulstone: Shade of [T.real_name]"
icon_state = "soulstone2"
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index f380cf74b23..5592f5f41fc 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -475,7 +475,7 @@
cost = 0
/datum/spellbook_entry/summon/ghosts/IsAvailible()
- if(!ticker.mode)
+ if(!SSticker.mode)
return FALSE
else
return TRUE
@@ -495,9 +495,9 @@
log_name = "SG"
/datum/spellbook_entry/summon/guns/IsAvailible()
- if(!ticker.mode) // In case spellbook is placed on map
+ if(!SSticker.mode) // In case spellbook is placed on map
return 0
- if(ticker.mode.name == "ragin' mages")
+ if(SSticker.mode.name == "ragin' mages")
return 0
else
return 1
@@ -518,9 +518,9 @@
log_name = "SU"
/datum/spellbook_entry/summon/magic/IsAvailible()
- if(!ticker.mode) // In case spellbook is placed on map
+ if(!SSticker.mode) // In case spellbook is placed on map
return 0
- if(ticker.mode.name == "ragin' mages")
+ if(SSticker.mode.name == "ragin' mages")
return 0
else
return 1
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index b249ebe8520..4a5bf190e04 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -58,7 +58,7 @@
/datum/game_mode/proc/remove_wizard(datum/mind/wizard_mind)
if(wizard_mind in wizards)
- ticker.mode.wizards -= wizard_mind
+ SSticker.mode.wizards -= wizard_mind
wizard_mind.special_role = null
wizard_mind.current.create_attack_log("De-wizarded")
wizard_mind.current.spellremove(wizard_mind.current)
@@ -67,7 +67,7 @@
to_chat(wizard_mind.current, "You have been turned into a robot! You can feel your magical powers fading away...")
else
to_chat(wizard_mind.current, "You have been brainwashed! You are no longer a wizard.")
- ticker.mode.update_wiz_icons_removed(wizard_mind)
+ SSticker.mode.update_wiz_icons_removed(wizard_mind)
/datum/game_mode/proc/update_wiz_icons_added(datum/mind/wiz_mind)
var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ]
@@ -282,4 +282,4 @@ Made a proc so this is not repeated 14 (or more) times.*/
return 1
/proc/iswizard(mob/living/M as mob)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.wizards)
+ return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.wizards)
diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm
index 73ec2483af1..ac393e277a8 100644
--- a/code/game/jobs/job/support_chaplain.dm
+++ b/code/game/jobs/job/support_chaplain.dm
@@ -158,11 +158,11 @@
to_chat(H, "Welp, out of time, buddy. You're stuck. Next time choose faster.")
accepted = 1
- if(ticker)
- ticker.Bible_icon_state = B.icon_state
- ticker.Bible_item_state = B.item_state
- ticker.Bible_name = B.name
- ticker.Bible_deity_name = B.deity_name
+ if(SSticker)
+ SSticker.Bible_icon_state = B.icon_state
+ SSticker.Bible_item_state = B.item_state
+ SSticker.Bible_name = B.name
+ SSticker.Bible_deity_name = B.deity_name
feedback_set_details("religion_deity", "[new_deity]")
feedback_set_details("religion_book", "[new_book_style]")
diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm
index 90bac6d8383..4456bb571e5 100644
--- a/code/game/jobs/job_objective.dm
+++ b/code/game/jobs/job_objective.dm
@@ -44,7 +44,7 @@
/datum/game_mode/proc/declare_job_completion()
var/text = "
Job Completion"
- for(var/datum/mind/employee in ticker.minds)
+ for(var/datum/mind/employee in SSticker.minds)
if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this.
continue
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 8136881e6e1..1d05204e381 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -416,24 +416,24 @@
/obj/machinery/clonepod/proc/update_clone_antag(var/mob/living/carbon/human/H)
// Check to see if the clone's mind is an antagonist of any kind and handle them accordingly to make sure they get their spells, HUD/whatever else back.
- if((H.mind in ticker.mode:revolutionaries) || (H.mind in ticker.mode:head_revolutionaries))
- ticker.mode.update_rev_icons_added() //So the icon actually appears
- if(H.mind in ticker.mode.syndicates)
- ticker.mode.update_synd_icons_added()
- if(H.mind in ticker.mode.cult)
- ticker.mode.add_cultist(occupant.mind)
- ticker.mode.update_cult_icons_added() //So the icon actually appears
- ticker.mode.update_cult_comms_added(H.mind) //So the comms actually appears
- if((H.mind in ticker.mode.implanter) || (H.mind in ticker.mode.implanted))
- ticker.mode.update_traitor_icons_added(H.mind) //So the icon actually appears
+ if((H.mind in SSticker.mode:revolutionaries) || (H.mind in SSticker.mode:head_revolutionaries))
+ SSticker.mode.update_rev_icons_added() //So the icon actually appears
+ if(H.mind in SSticker.mode.syndicates)
+ SSticker.mode.update_synd_icons_added()
+ if(H.mind in SSticker.mode.cult)
+ SSticker.mode.add_cultist(occupant.mind)
+ SSticker.mode.update_cult_icons_added() //So the icon actually appears
+ SSticker.mode.update_cult_comms_added(H.mind) //So the comms actually appears
+ if((H.mind in SSticker.mode.implanter) || (H.mind in SSticker.mode.implanted))
+ SSticker.mode.update_traitor_icons_added(H.mind) //So the icon actually appears
if(H.mind.vampire)
H.mind.vampire.update_owner(H)
- if((H.mind in ticker.mode.vampire_thralls) || (H.mind in ticker.mode.vampire_enthralled))
- ticker.mode.update_vampire_icons_added(H.mind)
- if(H.mind in ticker.mode.changelings)
- ticker.mode.update_change_icons_added(H.mind)
- if((H.mind in ticker.mode.shadowling_thralls) || (H.mind in ticker.mode.shadows))
- ticker.mode.update_shadow_icons_added(H.mind)
+ if((H.mind in SSticker.mode.vampire_thralls) || (H.mind in SSticker.mode.vampire_enthralled))
+ SSticker.mode.update_vampire_icons_added(H.mind)
+ if(H.mind in SSticker.mode.changelings)
+ SSticker.mode.update_change_icons_added(H.mind)
+ if((H.mind in SSticker.mode.shadowling_thralls) || (H.mind in SSticker.mode.shadows))
+ SSticker.mode.update_shadow_icons_added(H.mind)
//Put messages in the connected computer's temp var for display.
/obj/machinery/clonepod/proc/connected_message(message)
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 67f1dba85f0..38cc0b56866 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -134,8 +134,8 @@
return
if(P:brainmob.mind)
- ticker.mode.remove_cultist(P:brainmob.mind, 1)
- ticker.mode.remove_revolutionary(P:brainmob.mind, 1)
+ SSticker.mode.remove_cultist(P:brainmob.mind, 1)
+ SSticker.mode.remove_revolutionary(P:brainmob.mind, 1)
user.drop_item()
P.loc = src
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index e369b203759..d064dbda743 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -439,7 +439,7 @@
to_chat(user, "The emergency shuttle may not be called while returning to Central Command.")
return
- if(ticker.mode.name == "blob")
+ if(SSticker.mode.name == "blob")
to_chat(user, "Under directive 7-10, [station_name()] is quarantined until further notice.")
return
@@ -464,7 +464,7 @@
to_chat(user, "The shuttle is refueling. Please wait another [round((54000-world.time)/600)] minutes before trying again.")
return
- if(ticker.mode.name == "epidemic")
+ if(SSticker.mode.name == "epidemic")
to_chat(user, "Under directive 7-10, [station_name()] is quarantined until further notice.")
return
@@ -481,7 +481,7 @@
/proc/cancel_call_proc(var/mob/user)
- if(ticker.mode.name == "meteor")
+ if(SSticker.mode.name == "meteor")
return
if(SSshuttle.cancelEvac(user))
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 9674a60c7d4..0ab3d01ddf1 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -53,7 +53,7 @@
var/dat
- if(!( ticker ))
+ if(!( SSticker ))
return
dat += "
[storage_name]
"
@@ -364,13 +364,13 @@
// Skip past any cult sacrifice objective using this person
if(GAMEMODE_IS_CULT && is_sacrifice_target(occupant.mind))
- var/datum/game_mode/cult/cult_mode = ticker.mode
+ var/datum/game_mode/cult/cult_mode = SSticker.mode
var/list/p_s_t = cult_mode.get_possible_sac_targets()
if(p_s_t.len)
cult_mode.sacrifice_target = pick(p_s_t)
- for(var/datum/mind/H in ticker.mode.cult)
+ for(var/datum/mind/H in SSticker.mode.cult)
if(H.current)
- to_chat(H.current, "[ticker.cultdat.entity_name] murmurs, [occupant] is beyond your reach. Sacrifice [cult_mode.sacrifice_target.current] instead...")
+ to_chat(H.current, "[SSticker.cultdat.entity_name] murmurs, [occupant] is beyond your reach. Sacrifice [cult_mode.sacrifice_target.current] instead...")
else
cult_mode.bypass_phase()
@@ -403,8 +403,8 @@
occupant.mind.objectives.Cut()
occupant.mind.special_role = null
else
- if(ticker.mode.name == "AutoTraitor")
- var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
+ if(SSticker.mode.name == "AutoTraitor")
+ var/datum/game_mode/traitor/autotraitor/current_mode = SSticker.mode
current_mode.possible_traitors.Remove(occupant)
// Delete them from datacore.
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 3838a52325f..549b5be3929 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -77,7 +77,7 @@
else
do_animate("deny")
return
- if(!ticker)
+ if(!SSticker)
return
var/mob/living/M = AM
if(!M.restrained() && M.mob_size > MOB_SIZE_TINY && (!(isrobot(M) && M.stat)))
@@ -214,7 +214,7 @@
return attack_hand(user)
/obj/machinery/door/window/attack_hand(mob/user)
- return bumpopen(user)
+ return try_to_activate_door(user)
/obj/machinery/door/window/emag_act(mob/user, obj/weapon)
if(!operating && density && !emagged)
@@ -228,7 +228,6 @@
return 1
/obj/machinery/door/window/attackby(obj/item/I, mob/living/user, params)
-
//If it's in the process of opening/closing, ignore the click
if(operating)
return
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index e3ba1e642a9..8f542a2ea3c 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -977,6 +977,7 @@ var/list/turret_icons
/atom/movable/porta_turret_cover
icon = 'icons/obj/turrets.dmi'
+ anchored = TRUE
// Syndicate turrets
/obj/machinery/porta_turret/syndicate
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 6422e94dc74..1a63371915b 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -57,8 +57,8 @@
return
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/N = M
- ticker.mode.equip_traitor(N)
- ticker.mode.traitors += N.mind
+ SSticker.mode.equip_traitor(N)
+ SSticker.mode.traitors += N.mind
N.mind.special_role = SPECIAL_ROLE_TRAITOR
var/objective = "Free Objective"
switch(rand(1,100))
diff --git a/code/game/machinery/telecomms/ntsl2.dm b/code/game/machinery/telecomms/ntsl2.dm
index 32e9913e129..04f85750516 100644
--- a/code/game/machinery/telecomms/ntsl2.dm
+++ b/code/game/machinery/telecomms/ntsl2.dm
@@ -131,7 +131,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
var/job_indicator_type = null
/* Tables */
- var/list/regex = list()
+ // var/list/regex = list()
/* Arrays */
var/list/firewall = list()
@@ -145,7 +145,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
)
// This is used to sanitize topic data
- var/list/tables = list("regex")
+ // var/list/tables = list("regex")
var/list/arrays = list("firewall")
// This tells the datum what is safe to serialize and what's not. It also applies to deserialization.
@@ -160,7 +160,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
"toggle_gibberish",
"toggle_honk",
"setting_language",
- "regex",
+ // "regex",
"firewall"
)
@@ -176,7 +176,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
"toggle_gibberish" = "bool",
"toggle_honk" = "bool",
"setting_language" = "string",
- "regex" = "table",
+ // "regex" = "table",
"firewall" = "array"
)
@@ -204,7 +204,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
job_indicator_type = initial(job_indicator_type)
/* Tables */
- regex = list()
+ // regex = list()
/* Arrays */
firewall = list()
@@ -251,7 +251,8 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
switch(sanitize_method)
if("bool")
return variable ? TRUE : FALSE
- if("table", "array")
+ // if("table", "array")
+ if("array")
if(!islist(variable))
return list()
// Insert html filtering for the regexes here if you're boring
@@ -356,14 +357,14 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
S.speaking = GLOB.all_languages[setting_language]
// Regex replacements
- if(islist(regex) && regex.len > 0)
- for(var/datum/multilingual_say_piece/S in message_pieces)
- var/new_message = S.message
- for(var/reg in regex)
- var/replacePattern = pencode_to_html(regex[reg])
- var/regex/start = regex("[reg]", "gi")
- new_message = start.Replace(new_message, replacePattern)
- S.message = new_message
+ // if(islist(regex) && regex.len > 0)
+ // for(var/datum/multilingual_say_piece/S in message_pieces)
+ // var/new_message = S.message
+ // for(var/reg in regex)
+ // var/replacePattern = pencode_to_html(regex[reg])
+ // var/regex/start = regex("[reg]", "gi")
+ // new_message = start.Replace(new_message, replacePattern)
+ // S.message = new_message
// Make sure the message is valid after we tinkered with it, otherwise reject it
if(signal.data["message"] == "" || !signal.data["message"])
@@ -404,34 +405,34 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
log_action(user, new_language == "--DISABLE--" ? "disabled NTTC language conversion" : "set NTTC language conversion to [new_language]", TRUE)
// Tables
- if(href_list["create_row"])
- if(href_list["table"] && href_list["table"] in tables)
- if(requires_unlock[href_list["table"]] && !source.unlocked)
- return
- var/new_key = input(user, "Provide a key for the new row.", "New Row") as text|null
- if(!new_key)
- return
- var/new_value = input(user, "Provide a new value for the key [new_key]", "New Row") as text|null
- if(new_value == null)
- return
- if(word_blacklist.Find(new_value)) //uh oh, they tried to be naughty
- message_admins("EXPLOIT WARNING: [user.ckey] attempted to add a NTTC regex row containing JS abusable tags!")
- log_admin("EXPLOIT WARNING: [user.ckey] attempted to add a NTTC regex row containing JS abusable tags")
- to_chat(user, "ERROR: Regex contained bad strings. Upload cancelled.")
- return
- var/list/table = vars[href_list["table"]]
- table[new_key] = new_value
- to_chat(user, "Added row [new_key] -> [new_value].")
- log_action(user, "updated [href_list["table"]] - new row [new_key] -> [new_value]")
+ // if(href_list["create_row"])
+ // if(href_list["table"] && href_list["table"] in tables)
+ // if(requires_unlock[href_list["table"]] && !source.unlocked)
+ // return
+ // var/new_key = input(user, "Provide a key for the new row.", "New Row") as text|null
+ // if(!new_key)
+ // return
+ // var/new_value = input(user, "Provide a new value for the key [new_key]", "New Row") as text|null
+ // if(new_value == null)
+ // return
+ // if(word_blacklist.Find(new_value)) //uh oh, they tried to be naughty
+ // message_admins("EXPLOIT WARNING: [user.ckey] attempted to add a NTTC regex row containing JS abusable tags!")
+ // log_admin("EXPLOIT WARNING: [user.ckey] attempted to add a NTTC regex row containing JS abusable tags")
+ // to_chat(user, "ERROR: Regex contained bad strings. Upload cancelled.")
+ // return
+ // var/list/table = vars[href_list["table"]]
+ // table[new_key] = new_value
+ // to_chat(user, "Added row [new_key] -> [new_value].")
+ // log_action(user, "updated [href_list["table"]] - new row [new_key] -> [new_value]")
- if(href_list["delete_row"])
- if(href_list["table"] && href_list["table"] in tables)
- if(requires_unlock[href_list["table"]] && !source.unlocked)
- return
- var/list/table = vars[href_list["table"]]
- table.Remove(href_list["delete_row"])
- to_chat(user, "Removed row [href_list["delete_row"]] from [href_list["table"]]")
- log_action(user, "updated [href_list["table"]] - removed row [href_list["delete_row"]]")
+ // if(href_list["delete_row"])
+ // if(href_list["table"] && href_list["table"] in tables)
+ // if(requires_unlock[href_list["table"]] && !source.unlocked)
+ // return
+ // var/list/table = vars[href_list["table"]]
+ // table.Remove(href_list["delete_row"])
+ // to_chat(user, "Removed row [href_list["delete_row"]] from [href_list["table"]]")
+ // log_action(user, "updated [href_list["table"]] - removed row [href_list["delete_row"]]")
// Arrays
if(href_list["create_item"])
@@ -481,7 +482,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
"tab_hack.html" = 'html/nttc/dist/tab_hack.html',
"tab_filtering.html" = 'html/nttc/dist/tab_filtering.html',
"tab_firewall.html" = 'html/nttc/dist/tab_firewall.html',
- "tab_regex.html" = 'html/nttc/dist/tab_regex.html',
+ // "tab_regex.html" = 'html/nttc/dist/tab_regex.html',
"uiTitleFluff.png" = 'html/nttc/dist/uiTitleFluff.png'
)
diff --git a/code/game/magic/Uristrunes.dm b/code/game/magic/Uristrunes.dm
index 1a242594bfe..e0621db3d9b 100644
--- a/code/game/magic/Uristrunes.dm
+++ b/code/game/magic/Uristrunes.dm
@@ -1,7 +1,7 @@
/proc/get_rune_cult(word)
var/animated
- if(word && !(ticker.cultdat.theme == "fire" || ticker.cultdat.theme == "death"))
+ if(word && !(SSticker.cultdat.theme == "fire" || SSticker.cultdat.theme == "death"))
animated = 1
else
animated = 0
@@ -18,11 +18,11 @@ var/runetype = "rune"
var/lookup = "[symbol_bits]-[animated]"
- if(!ticker.mode)//work around for maps with runes and cultdat is not loaded all the way
+ if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way
runetype = "rune"
- else if(ticker.cultdat.theme == "fire")
+ else if(SSticker.cultdat.theme == "fire")
runetype = "fire-rune"
- else if(ticker.cultdat.theme == "death")
+ else if(SSticker.cultdat.theme == "death")
runetype = "death-rune"
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 7cfd8bbec45..45bfb37f035 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -28,7 +28,7 @@ var/global/list/image/splatter_cache = list()
. = ..()
update_icon()
if(GAMEMODE_IS_CULT)
- var/datum/game_mode/cult/mode_ticker = ticker.mode
+ var/datum/game_mode/cult/mode_ticker = SSticker.mode
var/turf/T = get_turf(src)
if(T && (is_station_level(T.z)))//F I V E T I L E S
if(!(T in mode_ticker.bloody_floors))
@@ -48,7 +48,7 @@ var/global/list/image/splatter_cache = list()
/obj/effect/decal/cleanable/blood/Destroy()
if(GAMEMODE_IS_CULT)
- var/datum/game_mode/cult/mode_ticker = ticker.mode
+ var/datum/game_mode/cult/mode_ticker = SSticker.mode
var/turf/T = get_turf(src)
if(T && (is_station_level(T.z)))
mode_ticker.bloody_floors -= T
diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm
index 1231c8136fa..04ea1dc0841 100644
--- a/code/game/objects/effects/effect_system/effect_system.dm
+++ b/code/game/objects/effects/effect_system/effect_system.dm
@@ -14,11 +14,11 @@ would spawn and follow the beaker, even if it is carried or thrown.
/obj/effect/particle_effect/New()
..()
- if(ticker)
+ if(SSticker)
cameranet.updateVisibility(src)
/obj/effect/particle_effect/Destroy()
- if(ticker)
+ if(SSticker)
cameranet.updateVisibility(src)
return ..()
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 2fb1aae8ff0..a618383a819 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -155,14 +155,14 @@
/obj/item/flash/proc/terrible_conversion_proc(mob/M, mob/user)
if(ishuman(M) && ishuman(user) && M.stat != DEAD)
- if(user.mind && (user.mind in ticker.mode.head_revolutionaries))
+ if(user.mind && (user.mind in SSticker.mode.head_revolutionaries))
if(M.client)
if(M.stat == CONSCIOUS)
M.mind_initialize() //give them a mind datum if they don't have one.
var/resisted
if(!ismindshielded(M))
- if(user.mind in ticker.mode.head_revolutionaries)
- if(ticker.mode.add_revolutionary(M.mind))
+ if(user.mind in SSticker.mode.head_revolutionaries)
+ if(SSticker.mode.add_revolutionary(M.mind))
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
else
resisted = 1
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 6d44a9722e3..74f98a9384a 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -51,7 +51,7 @@
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
- if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") //don't have dexterity
+ if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey") //don't have dexterity
to_chat(user, "You don't have the dexterity to do this!")
return
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index e5bbeef7686..c6cfe03a151 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -31,8 +31,8 @@ var/list/world_uplinks = list()
/obj/item/uplink/New()
..()
- welcome = ticker.mode.uplink_welcome
- uses = ticker.mode.uplink_uses
+ welcome = SSticker.mode.uplink_welcome
+ uses = SSticker.mode.uplink_uses
uplink_items = get_uplink_items()
world_uplinks += src
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index f17f4ff54db..6ce10294940 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -245,7 +245,7 @@
to_chat(user, "Sticking a dead [M] into the frame would sort of defeat the purpose.")
return
- if(M.brainmob.mind in ticker.mode.head_revolutionaries)
+ if(M.brainmob.mind in SSticker.mode.head_revolutionaries)
to_chat(user, "The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [M].")
return
diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm
index a20dd86c897..68e731b8c44 100644
--- a/code/game/objects/items/weapons/holy_weapons.dm
+++ b/code/game/objects/items/weapons/holy_weapons.dm
@@ -443,15 +443,15 @@
return ..()
if(!user.mind || !user.mind.isholy)
- to_chat(user, "You are not close enough with [ticker.Bible_deity_name] to use [src].")
+ to_chat(user, "You are not close enough with [SSticker.Bible_deity_name] to use [src].")
return
if(praying)
to_chat(user, "You are already using [src].")
return
- user.visible_message("[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [ticker.Bible_deity_name].", \
- "You kneel[M == user ? null : " next to [M]"] and begin a prayer to [ticker.Bible_deity_name].")
+ user.visible_message("[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [SSticker.Bible_deity_name].", \
+ "You kneel[M == user ? null : " next to [M]"] and begin a prayer to [SSticker.Bible_deity_name].")
praying = 1
if(do_after(user, 150, target = M))
@@ -460,18 +460,18 @@
if(target.mind)
if(iscultist(target))
- ticker.mode.remove_cultist(target.mind) // This proc will handle message generation.
+ SSticker.mode.remove_cultist(target.mind) // This proc will handle message generation.
praying = 0
return
if(target.mind.vampire && !target.mind.vampire.get_ability(/datum/vampire_passive/full)) // Getting a full prayer off on a vampire will interrupt their powers for a large duration.
target.mind.vampire.nullified = max(120, target.mind.vampire.nullified + 120)
- to_chat(target, "[user]'s prayer to [ticker.Bible_deity_name] has interfered with your power!")
+ to_chat(target, "[user]'s prayer to [SSticker.Bible_deity_name] has interfered with your power!")
praying = 0
return
if(prob(25))
- to_chat(target, "[user]'s prayer to [ticker.Bible_deity_name] has eased your pain!")
+ to_chat(target, "[user]'s prayer to [SSticker.Bible_deity_name] has eased your pain!")
target.adjustToxLoss(-5)
target.adjustOxyLoss(-5)
target.adjustBruteLoss(-5)
@@ -480,7 +480,7 @@
praying = 0
else
- to_chat(user, "Your prayer to [ticker.Bible_deity_name] was interrupted.")
+ to_chat(user, "Your prayer to [SSticker.Bible_deity_name] was interrupted.")
praying = 0
/obj/item/nullrod/rosary/process()
@@ -506,13 +506,13 @@
/obj/item/nullrod/salt/attack_self(mob/user)
if(!user.mind || !user.mind.isholy)
- to_chat(user, "You are not close enough with [ticker.Bible_deity_name] to use [src].")
+ to_chat(user, "You are not close enough with [SSticker.Bible_deity_name] to use [src].")
return
if(!(ghostcall_CD > world.time))
ghostcall_CD = world.time + 3000 //deciseconds..5 minutes
- user.visible_message("[user] kneels and begins to utter a prayer to [ticker.Bible_deity_name] while drawing a circle with salt!", \
- "You kneel and begin a prayer to [ticker.Bible_deity_name] while drawing a circle!")
+ user.visible_message("[user] kneels and begins to utter a prayer to [SSticker.Bible_deity_name] while drawing a circle with salt!", \
+ "You kneel and begin a prayer to [SSticker.Bible_deity_name] while drawing a circle!")
notify_ghosts("The Chaplain is calling ghosts to [get_area(src)] with [name]!", source = src)
else
to_chat(user, "You need to wait before using [src] again.")
diff --git a/code/game/objects/items/weapons/implants/implant_mindshield.dm b/code/game/objects/items/weapons/implants/implant_mindshield.dm
index 739fe2827e4..bc942b73d81 100644
--- a/code/game/objects/items/weapons/implants/implant_mindshield.dm
+++ b/code/game/objects/items/weapons/implants/implant_mindshield.dm
@@ -19,14 +19,14 @@
/obj/item/implant/mindshield/implant(mob/target)
if(..())
- if(target.mind in ticker.mode.head_revolutionaries || is_shadow_or_thrall(target))
+ if(target.mind in SSticker.mode.head_revolutionaries || is_shadow_or_thrall(target))
target.visible_message("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!")
removed(target, 1)
qdel(src)
return -1
- if(target.mind in ticker.mode.revolutionaries)
- ticker.mode.remove_revolutionary(target.mind)
- if(target.mind in ticker.mode.cult)
+ if(target.mind in SSticker.mode.revolutionaries)
+ SSticker.mode.remove_revolutionary(target.mind)
+ if(target.mind in SSticker.mode.cult)
to_chat(target, "You feel the corporate tendrils of Nanotrasen try to invade your mind!")
else
to_chat(target, "Your mind feels hardened - more resistant to brainwashing.")
diff --git a/code/game/objects/items/weapons/implants/implant_traitor.dm b/code/game/objects/items/weapons/implants/implant_traitor.dm
index 58f78a7be4e..16d8943567d 100644
--- a/code/game/objects/items/weapons/implants/implant_traitor.dm
+++ b/code/game/objects/items/weapons/implants/implant_traitor.dm
@@ -45,15 +45,15 @@
return -1
H.implanting = 1
to_chat(H, "You feel completely loyal to [user.name].")
- if(!(user.mind in ticker.mode.implanter))
- ticker.mode.implanter[ref] = list()
- implanters = ticker.mode.implanter[ref]
+ if(!(user.mind in SSticker.mode.implanter))
+ SSticker.mode.implanter[ref] = list()
+ implanters = SSticker.mode.implanter[ref]
implanters.Add(H.mind)
- ticker.mode.implanted.Add(H.mind)
- ticker.mode.implanted[H.mind] = user.mind
- //ticker.mode.implanter[user.mind] += H.mind
- ticker.mode.implanter[ref] = implanters
- ticker.mode.traitors += H.mind
+ SSticker.mode.implanted.Add(H.mind)
+ SSticker.mode.implanted[H.mind] = user.mind
+ //SSticker.mode.implanter[user.mind] += H.mind
+ SSticker.mode.implanter[ref] = implanters
+ SSticker.mode.traitors += H.mind
H.mind.special_role = SPECIAL_ROLE_TRAITOR
to_chat(H, "You're now completely loyal to [user.name]! You now must lay down your life to protect [user.p_them()] and assist in [user.p_their()] goals at any cost.")
var/datum/objective/protect/mindslave/MS = new
@@ -64,8 +64,8 @@
for(var/datum/objective/objective in H.mind.objectives)
to_chat(H, "Objective #1: [objective.explanation_text]")
- ticker.mode.update_traitor_icons_added(user.mind)
- ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds
+ SSticker.mode.update_traitor_icons_added(user.mind)
+ SSticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds
if(user.mind.som)//do not add if not a traitor..and you just picked up an implanter in the hall...
var/datum/mindslaves/slaved = user.mind.som
@@ -77,12 +77,12 @@
log_admin("[key_name(user)] has mind-slaved [key_name(H)].")
activated = 1
if(jobban_isbanned(M, ROLE_SYNDICATE))
- ticker.mode.replace_jobbanned_player(M, ROLE_SYNDICATE)
+ SSticker.mode.replace_jobbanned_player(M, ROLE_SYNDICATE)
return 1
return 0
/obj/item/implant/traitor/removed(mob/target)
if(..())
- ticker.mode.remove_traitor_mind(target.mind)
+ SSticker.mode.remove_traitor_mind(target.mind)
return 1
return 0
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm
index 54ef5f06f85..15b0b914391 100644
--- a/code/game/objects/items/weapons/staff.dm
+++ b/code/game/objects/items/weapons/staff.dm
@@ -27,7 +27,7 @@
if(user)
user.update_inv_l_hand()
user.update_inv_r_hand()
- if(user.mind in ticker.mode.wizards)
+ if(user.mind in SSticker.mode.wizards)
user.flying = wielded ? 1 : 0
if(wielded)
to_chat(user, "You hold \the [src] between your legs.")
diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm
index dfa1bf97358..eb778b6a280 100644
--- a/code/game/objects/items/weapons/storage/bible.dm
+++ b/code/game/objects/items/weapons/storage/bible.dm
@@ -45,7 +45,7 @@
else
M.LAssailant = user
- if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey")
to_chat(user, "You don't have the dexterity to do this!")
return
if(!user.mind || !user.mind.isholy)
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index faf86394dba..58a2d0464fc 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -31,17 +31,17 @@
/obj/structure/New()
..()
if(smooth)
- if(ticker && ticker.current_state == GAME_STATE_PLAYING)
+ if(SSticker && SSticker.current_state == GAME_STATE_PLAYING)
queue_smooth(src)
queue_smooth_neighbors(src)
icon_state = ""
if(climbable)
verbs += /obj/structure/proc/climb_on
- if(ticker)
+ if(SSticker)
cameranet.updateVisibility(src)
/obj/structure/Destroy()
- if(ticker)
+ if(SSticker)
cameranet.updateVisibility(src)
if(smooth)
var/turf/T = get_turf(src)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 3001b52f399..2953744a824 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -484,14 +484,4 @@
if(istype(C)) //We found our corpse, is it inside a morgue?
morgue = get(C.loc, /obj/structure/morgue)
if(morgue)
- morgue.update()
-
-/hook/mob_login/proc/update_morgue(var/client/client, var/mob/mob)
- //Update morgues on login
- mob.update_morgue()
- return 1
-
-/hook/mob_logout/proc/update_morgue(var/client/client, var/mob/mob)
- //Update morgues on logout
- mob.update_morgue()
- return 1
+ morgue.update()
\ No newline at end of file
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 3846e2edeaa..d27239ae4e7 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -108,10 +108,10 @@
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = chan))
/client/proc/playtitlemusic()
- if(!ticker || !ticker.login_music || config.disable_lobby_music)
+ if(!SSticker || !SSticker.login_music || config.disable_lobby_music)
return
if(prefs.sound & SOUND_LOBBY)
- SEND_SOUND(src, sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS
+ SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS
/proc/get_rand_frequency()
return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 0973e24b568..de1e61039e7 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -73,7 +73,9 @@
/turf/simulated/floor/beach/water/New()
..()
- overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)
+ var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = "water5", layer = ABOVE_MOB_LAYER)
+ overlay_image.plane = GAME_PLANE
+ overlays += overlay_image
/turf/simulated/floor/beach/water/Entered(atom/movable/AM, atom/OldLoc)
. = ..()
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index d7ce7393131..83056d73eb5 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -145,8 +145,8 @@
/turf/simulated/floor/engine/cult/New()
..()
- if(ticker.mode)//only do this if the round is going..otherwise..fucking asteroid..
- icon_state = ticker.cultdat.cult_floor_icon_state
+ if(SSticker.mode)//only do this if the round is going..otherwise..fucking asteroid..
+ icon_state = SSticker.cultdat.cult_floor_icon_state
/turf/simulated/floor/engine/cult/narsie_act()
return
diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm
index 73cf7c3d46f..9b4cba19f0a 100644
--- a/code/game/turfs/simulated/walls_misc.dm
+++ b/code/game/turfs/simulated/walls_misc.dm
@@ -12,9 +12,9 @@
/turf/simulated/wall/cult/New()
..()
- if(ticker.mode)//game hasn't started offically don't do shit..
+ if(SSticker.mode)//game hasn't started offically don't do shit..
new /obj/effect/temp_visual/cult/turf(src)
- icon_state = ticker.cultdat.cult_wall_icon_state
+ icon_state = SSticker.cultdat.cult_wall_icon_state
/turf/simulated/wall/cult/artificer
name = "runed stone wall"
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 63c5eebe9ff..3973f49fdee 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -38,7 +38,7 @@
..()
for(var/atom/movable/AM in src)
Entered(AM)
- if(smooth && ticker && ticker.current_state == GAME_STATE_PLAYING)
+ if(smooth && SSticker && SSticker.current_state == GAME_STATE_PLAYING)
queue_smooth(src)
/turf/Initialize(mapload)
@@ -427,7 +427,7 @@
return(2)
/turf/proc/visibilityChanged()
- if(ticker)
+ if(SSticker)
cameranet.updateVisibility(src)
/turf/attackby(obj/item/I, mob/user, params)
@@ -480,7 +480,7 @@
blueprint_data += I
/turf/proc/add_blueprints_preround(atom/movable/AM)
- if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
+ if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING)
add_blueprints(AM)
/turf/proc/empty(turf_type=/turf/space)
diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm
index b7c76359c46..15650c1f00e 100644
--- a/code/game/turfs/unsimulated/beach.dm
+++ b/code/game/turfs/unsimulated/beach.dm
@@ -7,7 +7,9 @@
/turf/unsimulated/beach/New()
..()
if(water_overlay_image)
- overlays += image("icon"='icons/misc/beach.dmi',"icon_state"= water_overlay_image,"layer"=MOB_LAYER+0.1)
+ var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = water_overlay_image, layer = ABOVE_MOB_LAYER)
+ overlay_image.plane = GAME_PLANE
+ overlays += overlay_image
/turf/unsimulated/beach/sand
name = "Sand"
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 46d5c4e36ba..8febe20e840 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -59,7 +59,7 @@
to_chat(src, "You're already dead!")
return
- if(!ticker)
+ if(!SSticker)
to_chat(src, "You can't commit suicide before the game starts!")
return
@@ -116,7 +116,7 @@
to_chat(src, "You're already dead!")
return
- if(!ticker)
+ if(!SSticker)
to_chat(src, "You can't commit suicide before the game starts!")
return
diff --git a/code/game/world.dm b/code/game/world.dm
index 86ca6d883bd..0341699a254 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -32,26 +32,9 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG
processScheduler = new
spawn(1)
- processScheduler.deferSetupFor(/datum/controller/process/ticker)
processScheduler.setup()
- if(!syndicate_code_phrase)
- syndicate_code_phrase = generate_code_phrase()
- if(!syndicate_code_response)
- syndicate_code_response = generate_code_phrase()
- if(using_map && using_map.name)
- map_name = "[using_map.name]"
- else
- map_name = "Unknown"
-
-
- if(config && config.server_name)
- name = "[config.server_name]: [station_name()]"
- else
- name = station_name()
-
-
#undef RECOMMENDED_VERSION
return
@@ -119,13 +102,13 @@ var/world_topic_spam_protect_time = world.timeofday
player_count++
s["players"] = player_count
s["admins"] = admin_count
- s["map_name"] = map_name ? map_name : "Unknown"
+ s["map_name"] = GLOB.map_name ? GLOB.map_name : "Unknown"
if(key_valid)
- if(ticker && ticker.mode)
- s["real_mode"] = ticker.mode.name
+ if(SSticker && SSticker.mode)
+ s["real_mode"] = SSticker.mode.name
s["security_level"] = get_security_level()
- s["ticker_state"] = ticker.current_state
+ s["ticker_state"] = SSticker.current_state
if(SSshuttle && SSshuttle.emergency)
// Shuttle status, see /__DEFINES/stat.dm
@@ -301,8 +284,8 @@ var/world_topic_spam_protect_time = world.timeofday
if(!isnull(time))
delay = max(0,time)
else
- delay = ticker.restart_timeout
- if(ticker.delay_end)
+ delay = SSticker.restart_timeout
+ if(SSticker.delay_end)
to_chat(world, "An admin has delayed the round end.")
return
to_chat(world, "Rebooting world in [delay/10] [delay > 10 ? "seconds" : "second"]. [reason]")
@@ -311,12 +294,12 @@ var/world_topic_spam_protect_time = world.timeofday
var/sound_length = GLOB.round_end_sounds[round_end_sound]
if(delay > sound_length) // If there's time, play the round-end sound before rebooting
spawn(delay - sound_length)
- if(!ticker.delay_end)
+ if(!SSticker.delay_end)
world << round_end_sound
sleep(delay)
if(blackbox)
blackbox.save_all_data_to_sql()
- if(ticker.delay_end)
+ if(SSticker.delay_end)
to_chat(world, "Reboot was cancelled by an admin.")
return
feedback_set_details("[feedback_c]","[feedback_r]")
@@ -394,7 +377,7 @@ var/world_topic_spam_protect_time = world.timeofday
s += "
"
var/list/features = list()
- if(ticker)
+ if(SSticker)
if(master_mode && master_mode != "secret")
features += master_mode
else
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 4fcf95dbfd2..2a981e8b9c4 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -572,7 +572,7 @@ var/global/nologevent = 0
delay = delay * 10
message_admins("[key_name_admin(usr)] has initiated a server restart with a delay of [delay/10] seconds")
log_admin("[key_name(usr)] has initiated a server restart with a delay of [delay/10] seconds")
- ticker.delay_end = 0
+ SSticker.delay_end = 0
feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay)
@@ -672,21 +672,26 @@ var/global/nologevent = 0
if(!check_rights(R_SERVER))
return
- if(!ticker)
+ if(!SSticker)
alert("Unable to start the game as it is not set up.")
return
- if(ticker.current_state == GAME_STATE_PREGAME)
- if(config.start_now_confirmation)
- if(alert(usr, "This is a live server. Are you sure you want to start now?", "Start game", "Yes", "No") != "Yes")
- return
- ticker.current_state = GAME_STATE_SETTING_UP
- log_admin("[key_name(usr)] has started the game.")
- message_admins("[key_name_admin(usr)] has started the game.")
+
+ if(config.start_now_confirmation)
+ if(alert(usr, "This is a live server. Are you sure you want to start now?", "Start game", "Yes", "No") != "Yes")
+ return
+
+ if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP)
+ SSticker.force_start = TRUE
+ log_admin("[usr.key] has started the game.")
+ var/msg = ""
+ if(SSticker.current_state == GAME_STATE_STARTUP)
+ msg = " (The server is still setting up, but the round will be started as soon as possible.)"
+ message_admins("[usr.key] has started the game.[msg]")
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return 1
else
to_chat(usr, "Error: Start Now: Game has already started.")
- return 0
+ return
/datum/admins/proc/toggleenter()
set category = "Server"
@@ -763,10 +768,10 @@ var/global/nologevent = 0
if(!check_rights(R_SERVER))
return
- if(!ticker || ticker.current_state != GAME_STATE_PREGAME)
- ticker.delay_end = !ticker.delay_end
- log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
- message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
+ if(!SSticker || SSticker.current_state != GAME_STATE_PREGAME)
+ SSticker.delay_end = !SSticker.delay_end
+ log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
+ message_admins("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
return //alert("Round end delayed", null, null, null, null, null)
going = !( going )
if(!( going ))
@@ -780,32 +785,32 @@ var/global/nologevent = 0
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
- if(!ticker || !ticker.mode)
+ if(!SSticker || !SSticker.mode)
return 0
if(!istype(M))
return 0
- if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries))
- if(ticker.mode.config_tag == "revolution")
+ if((M.mind in SSticker.mode.head_revolutionaries) || (M.mind in SSticker.mode.revolutionaries))
+ if(SSticker.mode.config_tag == "revolution")
return 2
return 1
- if(M.mind in ticker.mode.cult)
- if(ticker.mode.config_tag == "cult")
+ if(M.mind in SSticker.mode.cult)
+ if(SSticker.mode.config_tag == "cult")
return 2
return 1
- if(M.mind in ticker.mode.syndicates)
- if(ticker.mode.config_tag == "nuclear")
+ if(M.mind in SSticker.mode.syndicates)
+ if(SSticker.mode.config_tag == "nuclear")
return 2
return 1
- if(M.mind in ticker.mode.wizards)
- if(ticker.mode.config_tag == "wizard")
+ if(M.mind in SSticker.mode.wizards)
+ if(SSticker.mode.config_tag == "wizard")
return 2
return 1
- if(M.mind in ticker.mode.changelings)
- if(ticker.mode.config_tag == "changeling")
+ if(M.mind in SSticker.mode.changelings)
+ if(SSticker.mode.config_tag == "changeling")
return 2
return 1
- if(M.mind in ticker.mode.abductors)
- if(ticker.mode.config_tag == "abduction")
+ if(M.mind in SSticker.mode.abductors)
+ if(SSticker.mode.config_tag == "abduction")
return 2
return 1
if(isrobot(M))
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 970defdd672..9203477c7f9 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -400,9 +400,9 @@
/datum/admins/proc/check_antagonists()
if(!check_rights(R_ADMIN)) return
- if(ticker && ticker.current_state >= GAME_STATE_PLAYING)
+ if(SSticker && SSticker.current_state >= GAME_STATE_PLAYING)
var/dat = "Round StatusRound Status
"
- dat += "Current Game Mode: [ticker.mode.name]
"
+ dat += "Current Game Mode: [SSticker.mode.name]
"
dat += "Round Duration: [round(ROUND_TIME / 36000)]:[add_zero(num2text(ROUND_TIME / 600 % 60), 2)]:[add_zero(num2text(ROUND_TIME / 10 % 60), 2)]
"
dat += "Emergency shuttle
"
if(SSshuttle.emergency.mode < SHUTTLE_CALL)
@@ -415,10 +415,10 @@
else
dat += "ETA: [(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]
"
- dat += "[ticker.delay_end ? "End Round Normally" : "Delay Round End"]
"
- if(ticker.mode.syndicates.len)
+ dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
"
+ if(SSticker.mode.syndicates.len)
dat += "
| Syndicates | |
"
- for(var/datum/mind/N in ticker.mode.syndicates)
+ for(var/datum/mind/N in SSticker.mode.syndicates)
var/mob/M = N.current
if(M)
dat += check_antagonists_line(M)
@@ -439,20 +439,20 @@
dat += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z])"
dat += "
"
- if(ticker.mode.head_revolutionaries.len || ticker.mode.revolutionaries.len)
+ if(SSticker.mode.head_revolutionaries.len || SSticker.mode.revolutionaries.len)
dat += "
| Revolutionaries | |
"
- for(var/datum/mind/N in ticker.mode.head_revolutionaries)
+ for(var/datum/mind/N in SSticker.mode.head_revolutionaries)
var/mob/M = N.current
if(!M)
dat += "| Head Revolutionary not found! |
"
else
dat += check_antagonists_line(M, "(leader)")
- for(var/datum/mind/N in ticker.mode.revolutionaries)
+ for(var/datum/mind/N in SSticker.mode.revolutionaries)
var/mob/M = N.current
if(M)
dat += check_antagonists_line(M)
dat += "
| Target(s) | | Location |
"
- for(var/datum/mind/N in ticker.mode.get_living_heads())
+ for(var/datum/mind/N in SSticker.mode.get_living_heads())
var/mob/M = N.current
if(M)
dat += check_antagonists_line(M)
@@ -463,7 +463,7 @@
dat += "
"
if(GAMEMODE_IS_BLOB)
- var/datum/game_mode/blob/mode = ticker.mode
+ var/datum/game_mode/blob/mode = SSticker.mode
dat += "
| Blob | | |
"
dat += "| Progress: [blobs.len]/[mode.blobwincount] |
"
@@ -476,67 +476,67 @@
dat += "| Blob not found! |
"
dat += "
"
- if(ticker.mode.blob_overminds.len)
- dat += check_role_table("Blob Overminds", ticker.mode.blob_overminds)
+ if(SSticker.mode.blob_overminds.len)
+ dat += check_role_table("Blob Overminds", SSticker.mode.blob_overminds)
- if(ticker.mode.changelings.len)
- dat += check_role_table("Changelings", ticker.mode.changelings)
+ if(SSticker.mode.changelings.len)
+ dat += check_role_table("Changelings", SSticker.mode.changelings)
- if(ticker.mode.wizards.len)
- dat += check_role_table("Wizards", ticker.mode.wizards)
+ if(SSticker.mode.wizards.len)
+ dat += check_role_table("Wizards", SSticker.mode.wizards)
- if(ticker.mode.raiders.len)
- dat += check_role_table("Raiders", ticker.mode.raiders)
+ if(SSticker.mode.raiders.len)
+ dat += check_role_table("Raiders", SSticker.mode.raiders)
/*if(ticker.mode.ninjas.len)
dat += check_role_table("Ninjas", ticker.mode.ninjas)*/
- if(ticker.mode.cult.len)
- dat += check_role_table("Cultists", ticker.mode.cult, 0)
+ if(SSticker.mode.cult.len)
+ dat += check_role_table("Cultists", SSticker.mode.cult, 0)
dat += "
use Cult Mindspeak"
if(GAMEMODE_IS_CULT)
- var/datum/game_mode/cult/cult_round = ticker.mode
+ var/datum/game_mode/cult/cult_round = SSticker.mode
if(!cult_round.narsie_condition_cleared)
dat += "
complete objective (debug)"
- if(ticker.mode.traitors.len)
- dat += check_role_table("Traitors", ticker.mode.traitors)
+ if(SSticker.mode.traitors.len)
+ dat += check_role_table("Traitors", SSticker.mode.traitors)
- if(ticker.mode.shadows.len)
- dat += check_role_table("Shadowlings", ticker.mode.shadows)
+ if(SSticker.mode.shadows.len)
+ dat += check_role_table("Shadowlings", SSticker.mode.shadows)
- if(ticker.mode.shadowling_thralls.len)
- dat += check_role_table("Shadowling Thralls", ticker.mode.shadowling_thralls)
+ if(SSticker.mode.shadowling_thralls.len)
+ dat += check_role_table("Shadowling Thralls", SSticker.mode.shadowling_thralls)
- if(ticker.mode.abductors.len)
- dat += check_role_table("Abductors", ticker.mode.abductors)
+ if(SSticker.mode.abductors.len)
+ dat += check_role_table("Abductors", SSticker.mode.abductors)
- if(ticker.mode.abductees.len)
- dat += check_role_table("Abductees", ticker.mode.abductees)
+ if(SSticker.mode.abductees.len)
+ dat += check_role_table("Abductees", SSticker.mode.abductees)
- if(ticker.mode.vampires.len)
- dat += check_role_table("Vampires", ticker.mode.vampires)
+ if(SSticker.mode.vampires.len)
+ dat += check_role_table("Vampires", SSticker.mode.vampires)
- if(ticker.mode.vampire_enthralled.len)
- dat += check_role_table("Vampire Thralls", ticker.mode.vampire_enthralled)
+ if(SSticker.mode.vampire_enthralled.len)
+ dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled)
- if(ticker.mode.devils.len)
- dat += check_role_table("Devils", ticker.mode.devils)
+ if(SSticker.mode.devils.len)
+ dat += check_role_table("Devils", SSticker.mode.devils)
- if(ticker.mode.xenos.len)
- dat += check_role_table("Xenos", ticker.mode.xenos)
+ if(SSticker.mode.xenos.len)
+ dat += check_role_table("Xenos", SSticker.mode.xenos)
- if(ticker.mode.superheroes.len)
- dat += check_role_table("Superheroes", ticker.mode.superheroes)
+ if(SSticker.mode.superheroes.len)
+ dat += check_role_table("Superheroes", SSticker.mode.superheroes)
- if(ticker.mode.supervillains.len)
- dat += check_role_table("Supervillains", ticker.mode.supervillains)
+ if(SSticker.mode.supervillains.len)
+ dat += check_role_table("Supervillains", SSticker.mode.supervillains)
- if(ticker.mode.greyshirts.len)
- dat += check_role_table("Greyshirts", ticker.mode.greyshirts)
+ if(SSticker.mode.greyshirts.len)
+ dat += check_role_table("Greyshirts", SSticker.mode.greyshirts)
- if(ticker.mode.eventmiscs.len)
- dat += check_role_table("Event Roles", ticker.mode.eventmiscs)
+ if(SSticker.mode.eventmiscs.len)
+ dat += check_role_table("Event Roles", SSticker.mode.eventmiscs)
if(ts_spiderlist.len)
var/list/spider_minds = list()
@@ -556,8 +556,8 @@
count_spiderlings += 1
dat += "| Growing TS on-station: [count_eggs] egg[count_eggs != 1 ? "s" : ""], [count_spiderlings] spiderling[count_spiderlings != 1 ? "s" : ""]. |
"
- if(ticker.mode.ert.len)
- dat += check_role_table("ERT", ticker.mode.ert)
+ if(SSticker.mode.ert.len)
+ dat += check_role_table("ERT", SSticker.mode.ert)
dat += ""
usr << browse(dat, "window=roundstatus;size=400x500")
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 984f6b083f3..224f07d4277 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -6,7 +6,7 @@
message_admins("[key_name_admin(usr)] has attempted to override the admin panel!")
return
- if(ticker.mode && ticker.mode.check_antagonists_topic(href, href_list))
+ if(SSticker.mode && SSticker.mode.check_antagonists_topic(href, href_list))
check_antagonists()
return
@@ -315,9 +315,9 @@
else if(href_list["delay_round_end"])
if(!check_rights(R_SERVER)) return
- ticker.delay_end = !ticker.delay_end
- log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
- message_admins("[key_name_admin(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
+ SSticker.delay_end = !SSticker.delay_end
+ log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
+ message_admins("[key_name_admin(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -1085,7 +1085,7 @@
else if(href_list["c_mode"])
if(!check_rights(R_ADMIN)) return
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
var/dat = {"What mode do you wish to play?
"}
for(var/mode in config.modes)
@@ -1098,7 +1098,7 @@
else if(href_list["f_secret"])
if(!check_rights(R_ADMIN)) return
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
if(master_mode != "secret")
return alert(usr, "The game mode has to be secret!", null, null, null, null)
@@ -1112,7 +1112,7 @@
else if(href_list["c_mode2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [master_mode].")
@@ -1125,7 +1125,7 @@
else if(href_list["f_secret2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
if(master_mode != "secret")
return alert(usr, "The game mode has to be secret!", null, null, null, null)
@@ -1559,25 +1559,25 @@
alert("Couldn't locate cult mode datum! This shouldn't ever happen, tell a coder!")
return
- var/datum/game_mode/cult/cult_round = ticker.mode
+ var/datum/game_mode/cult/cult_round = SSticker.mode
cult_round.bypass_phase()
message_admins("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.")
log_admin("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.")
else if(href_list["cult_mindspeak"])
- var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [ticker.cultdat.entity_name]", "Voice of [ticker.cultdat.entity_name]", "")
+ var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [SSticker.cultdat.entity_name]", "Voice of [SSticker.cultdat.entity_name]", "")
if(!input)
return
- for(var/datum/mind/H in ticker.mode.cult)
+ for(var/datum/mind/H in SSticker.mode.cult)
if (H.current)
- to_chat(H.current, "[ticker.cultdat.entity_name] murmurs, [input]")
+ to_chat(H.current, "[SSticker.cultdat.entity_name] murmurs, [input]")
for(var/mob/dead/observer/O in GLOB.player_list)
- to_chat(O, "[ticker.cultdat.entity_name] murmurs, [input]")
+ to_chat(O, "[SSticker.cultdat.entity_name] murmurs, [input]")
- message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [ticker.cultdat.entity_name].")
- log_admin("[key_name(usr)] Voice of [ticker.cultdat.entity_name]: [input]")
+ message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [SSticker.cultdat.entity_name].")
+ log_admin("[key_name(usr)] Voice of [SSticker.cultdat.entity_name]: [input]")
else if(href_list["adminplayerobservecoodjump"])
if(!check_rights(R_ADMIN)) return
@@ -1958,8 +1958,8 @@
kill_objective.target = H.mind
kill_objective.explanation_text = "Assassinate [H.real_name], the [H.mind.assigned_role]."
newtraitormind.objectives += kill_objective
- ticker.mode.equip_traitor(newtraitor)
- ticker.mode.traitors |= newtraitor.mind
+ SSticker.mode.equip_traitor(newtraitor)
+ SSticker.mode.traitors |= newtraitor.mind
to_chat(newtraitor, "ATTENTION: It is time to pay your debt to the Syndicate...")
to_chat(newtraitor, "You are now a traitor.")
to_chat(newtraitor, "Goal: KILL [H.real_name], currently in [get_area(H.loc)]");
@@ -2341,7 +2341,7 @@
else if(href_list["traitor"])
if(!check_rights(R_ADMIN|R_MOD)) return
- if(!ticker || !ticker.mode)
+ if(!SSticker || !SSticker.mode)
alert("The game hasn't started yet!")
return
@@ -2484,7 +2484,7 @@
else if(href_list["kick_all_from_lobby"])
if(!check_rights(R_ADMIN))
return
- if(ticker && ticker.current_state == GAME_STATE_PLAYING)
+ if(SSticker && SSticker.current_state == GAME_STATE_PLAYING)
var/afkonly = text2num(href_list["afkonly"])
if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby?","Confirmation","Yes","Cancel") != "Yes")
return
@@ -2573,7 +2573,7 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","TriAI")
if("gravity")
- if(!(ticker && ticker.mode))
+ if(!(SSticker && SSticker.mode))
to_chat(usr, "Please wait until the game starts! Not sure how it will work otherwise.")
return
gravity_is_on = !gravity_is_on
@@ -2609,7 +2609,7 @@
message_admins("[key_name_admin(usr)] made all SMESs powered", 1)
power_restore_quick()
if("prisonwarp")
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!", null, null, null, null, null)
return
feedback_inc("admin_secrets_fun_used",1)
@@ -2651,7 +2651,7 @@
H.loc = pick(prisonsecuritywarp)
prisonwarped += H
if("traitor_all")
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
var/objective = sanitize(copytext(input("Enter an objective"),1,MAX_MESSAGE_LEN))
@@ -2663,24 +2663,24 @@
if(H.stat == 2 || !H.client || !H.mind) continue
if(is_special_character(H)) continue
//traitorize(H, objective, 0)
- ticker.mode.traitors += H.mind
+ SSticker.mode.traitors += H.mind
H.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/new_objective = new
new_objective.owner = H
new_objective.explanation_text = objective
H.mind.objectives += new_objective
- ticker.mode.greet_traitor(H.mind)
+ SSticker.mode.greet_traitor(H.mind)
//ticker.mode.forge_traitor_objectives(H.mind)
- ticker.mode.finalize_traitor(H.mind)
+ SSticker.mode.finalize_traitor(H.mind)
for(var/mob/living/silicon/A in GLOB.player_list)
- ticker.mode.traitors += A.mind
+ SSticker.mode.traitors += A.mind
A.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/new_objective = new
new_objective.owner = A
new_objective.explanation_text = objective
A.mind.objectives += new_objective
- ticker.mode.greet_traitor(A.mind)
- ticker.mode.finalize_traitor(A.mind)
+ SSticker.mode.greet_traitor(A.mind)
+ SSticker.mode.finalize_traitor(A.mind)
message_admins("[key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1)
log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]")
@@ -2946,10 +2946,10 @@
if("showailaws")
output_ai_laws()
if("showgm")
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
- else if(ticker.mode)
- alert("The game mode is [ticker.mode.name]")
+ else if(SSticker.mode)
+ alert("The game mode is [SSticker.mode.name]")
else alert("For some reason there's a ticker, but not a game mode")
if("manifest")
var/dat = "Showing Crew Manifest.
"
@@ -3284,7 +3284,7 @@
return
G.report_message = description
message_admins("[key_name_admin(usr)] created \"[G.name]\" station goal.")
- ticker.mode.station_goals += G
+ SSticker.mode.station_goals += G
modify_goals()
else if(href_list["showdetails"])
@@ -3408,7 +3408,7 @@
protect_objective.target = H.mind
protect_objective.explanation_text = "Protect [H.real_name], the [H.mind.assigned_role]."
hunter_mind.objectives += protect_objective
- ticker.mode.traitors |= hunter_mob.mind
+ SSticker.mode.traitors |= hunter_mob.mind
to_chat(hunter_mob, "ATTENTION: You are now on a mission!")
to_chat(hunter_mob, "Goal: [killthem ? "MURDER" : "PROTECT"] [H.real_name], currently in [get_area(H.loc)]. ");
if(killthem)
diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm
index 3449350e11f..63ebd52d09b 100644
--- a/code/modules/admin/verbs/cinematic.dm
+++ b/code/modules/admin/verbs/cinematic.dm
@@ -3,7 +3,7 @@
set category = "Debug"
set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted.
set hidden = 1
- if(!ticker)
+ if(!SSticker)
return
switch(cinematic)
if("explosion")
@@ -14,4 +14,4 @@
override = input(src, "mode = ?","Enter Parameter", null) as anything in list("nuclear emergency", "fake", "no override")
if(0)
override = input(src, "mode = ?","Enter Parameter", null) as anything in list("blob", "nuclear emergency", "AI malfunction", "no override")
- ticker.station_explosion_cinematic(parameter, override)
\ No newline at end of file
+ SSticker.station_explosion_cinematic(parameter, override)
\ No newline at end of file
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 6eba7650384..6a419ebb29a 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -215,7 +215,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_SPAWN))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon/human))
@@ -233,7 +233,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_SPAWN))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
@@ -293,7 +293,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_SPAWN))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
if(ishuman(M))
@@ -313,7 +313,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_SPAWN))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
if(ishuman(M))
@@ -333,7 +333,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_SPAWN))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
if(ishuman(M))
@@ -405,7 +405,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_EVENT))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon/human))
@@ -818,7 +818,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_SPAWN))
return
- if(!ticker)
+ if(!SSticker)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon))
diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm
index 081c820aaee..cad93e8b880 100644
--- a/code/modules/admin/verbs/gimmick_team.dm
+++ b/code/modules/admin/verbs/gimmick_team.dm
@@ -7,7 +7,7 @@
set desc = "Spawns a group of players in the specified outfit."
if(!check_rights(R_EVENT))
return
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
if(alert("Do you want to spawn a Gimmick Team at YOUR CURRENT LOCATION?",,"Yes","No")=="No")
@@ -82,7 +82,7 @@
H.mind.store_memory("[themission]
")
if(is_syndicate)
- ticker.mode.traitors |= H.mind //Adds them to extra antag list
+ SSticker.mode.traitors |= H.mind //Adds them to extra antag list
players_spawned++
if(players_spawned >= teamsize)
diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm
index b4c0e6a05eb..f4013edbe1e 100644
--- a/code/modules/admin/verbs/honksquad.dm
+++ b/code/modules/admin/verbs/honksquad.dm
@@ -4,7 +4,7 @@ var/const/honksquad_possible = 6 //if more Commandos are needed in the future
var/global/sent_honksquad = 0
/client/proc/honksquad()
- if(!ticker)
+ if(!SSticker)
to_chat(usr, "The game hasn't started yet!")
return
if(world.time < 6000)
@@ -95,7 +95,7 @@ var/global/sent_honksquad = 0
new_honksquad.mind.special_role = SPECIAL_ROLE_HONKSQUAD
new_honksquad.mind.offstation_role = TRUE
new_honksquad.add_language("Clownish")
- ticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list.
+ SSticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list.
new_honksquad.equip_honksquad(honk_leader_selected)
return new_honksquad
diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm
index 4597a838733..a7da1553ec0 100644
--- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm
+++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm
@@ -10,7 +10,7 @@ var/global/sent_syndicate_infiltration_team = 0
if(!check_rights(R_ADMIN))
to_chat(src, "Only administrators may use this command.")
return
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
if(alert("Do you want to send in the Syndicate Infiltration Team?",,"Yes","No")=="No")
@@ -132,7 +132,7 @@ var/global/sent_syndicate_infiltration_team = 0
new_syndicate_infiltrator.mind.assigned_role = "Syndicate Infiltrator"
new_syndicate_infiltrator.mind.special_role = "Syndicate Infiltrator"
new_syndicate_infiltrator.mind.offstation_role = TRUE //they can flee to z2 so make them inelligible as antag targets
- ticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list
+ SSticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list
new_syndicate_infiltrator.equip_syndicate_infiltrator(syndicate_leader_selected, uplink_tc, is_mgmt)
return new_syndicate_infiltrator
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 8b172630d7b..170b93a50f6 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -175,7 +175,7 @@ client/proc/one_click_antag()
for(var/i = 0, iYou are a Vox Primalis, fresh out of the Shoal. Your ship has arrived at the Tau Ceti system hosting the NSV Exodus... or was it the Luna? NSS? Utopia? Nobody is really sure, but everyong is raring to start pillaging! Your current goal is: [input]")
to_chat(new_vox, "Don't forget to turn on your nitrogen internals!")
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index c2260a051eb..3db8f102320 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -1,5 +1,5 @@
/client/proc/only_one()
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
@@ -14,7 +14,7 @@
var/datum/preferences/A = new() // Randomize appearance
A.copy_to(H)
- ticker.mode.traitors += H.mind
+ SSticker.mode.traitors += H.mind
H.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/hijack/hijack_objective = new
@@ -58,7 +58,7 @@
world << sound('sound/music/thunderdome.ogg')
/client/proc/only_me()
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
@@ -66,7 +66,7 @@
if(H.stat == 2 || !(H.client)) continue
if(is_special_character(H)) continue
- ticker.mode.traitors += H.mind
+ SSticker.mode.traitors += H.mind
H.mind.special_role = "[H.real_name] Prime"
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm
index d2490cdf9c3..846a77c508a 100644
--- a/code/modules/admin/verbs/onlyoneteam.dm
+++ b/code/modules/admin/verbs/onlyoneteam.dm
@@ -1,5 +1,5 @@
/client/proc/only_one_team()
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index 1c75421f4b7..b6986f4960f 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -18,8 +18,8 @@
var/prayer_type = "PRAYER"
var/deity
if(usr.job == "Chaplain")
- if(ticker && ticker.Bible_deity_name)
- deity = ticker.Bible_deity_name
+ if(SSticker && SSticker.Bible_deity_name)
+ deity = SSticker.Bible_deity_name
cross = image('icons/obj/storage.dmi',"kingyellow")
font_color = "blue"
prayer_type = "CHAPLAIN PRAYER"
@@ -27,7 +27,7 @@
cross = image('icons/obj/storage.dmi',"tome")
font_color = "red"
prayer_type = "CULTIST PRAYER"
- deity = ticker.cultdat.entity_name
+ deity = SSticker.cultdat.entity_name
log_say("(PRAYER) [msg]", usr)
msg = "[bicon(cross)][prayer_type][deity ? " (to [deity])" : ""][mind && mind.isholy ? " (blessings: [mind.num_blessed])" : ""]: [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (CA) ([ADMIN_SC(src,"SC")]) (BLESS) (SMITE): [msg]"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 4e9562a7457..ec731458109 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -437,11 +437,11 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("traitor")
SSjobs.AssignRank(new_character, new_character.mind.assigned_role, 0)
SSjobs.EquipRank(new_character, new_character.mind.assigned_role, 1)
- ticker.mode.equip_traitor(new_character)
+ SSticker.mode.equip_traitor(new_character)
if("Wizard")
new_character.loc = pick(wizardstart)
//ticker.mode.learn_basic_spells(new_character)
- ticker.mode.equip_wizard(new_character)
+ SSticker.mode.equip_wizard(new_character)
if("Syndicate")
var/obj/effect/landmark/synd_spawn = locate("landmark*Syndicate-Spawn")
if(synd_spawn)
@@ -858,7 +858,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Admin"
set name = "Toggle Deny Shuttle"
- if(!ticker)
+ if(!SSticker)
return
if(!check_rights(R_ADMIN))
@@ -891,12 +891,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_SERVER|R_EVENT))
return
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!")
return
- if(ticker.random_players)
- ticker.random_players = 0
+ if(SSticker.random_players)
+ SSticker.random_players = 0
message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.", 1)
to_chat(usr, "Disabled.")
return
@@ -914,7 +914,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.")
- ticker.random_players = 1
+ SSticker.random_players = 1
feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_random_events()
@@ -1009,13 +1009,13 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_EVENT))
return
- if(ticker.mode.ert_disabled)
- ticker.mode.ert_disabled = 0
+ if(SSticker.mode.ert_disabled)
+ SSticker.mode.ert_disabled = 0
to_chat(usr, "ERT has been Enabled.")
log_admin("Admin [key_name(src)] has enabled ERT calling.")
message_admins("Admin [key_name_admin(usr)] has enabled ERT calling.", 1)
else
- ticker.mode.ert_disabled = 1
+ SSticker.mode.ert_disabled = 1
to_chat(usr, "ERT has been Disabled.")
log_admin("Admin [key_name(src)] has disabled ERT calling.")
message_admins("Admin [key_name_admin(usr)] has disabled ERT calling.", 1)
@@ -1033,14 +1033,14 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!input)
return
- if(!ticker)
+ if(!SSticker)
return
- ticker.selected_tip = input
+ SSticker.selected_tip = input
// If we've already tipped, then send it straight away.
- if(ticker.tipped)
- ticker.send_tip_of_the_round()
+ if(SSticker.tipped)
+ SSticker.send_tip_of_the_round()
message_admins("[key_name_admin(usr)] sent a Tip of the round.")
log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.")
@@ -1055,12 +1055,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
holder.modify_goals()
/datum/admins/proc/modify_goals()
- if(!ticker || !ticker.mode)
+ if(!SSticker || !SSticker.mode)
to_chat(usr, "This verb can only be used if the round has started.")
return
var/dat = ""
- for(var/datum/station_goal/S in ticker.mode.station_goals)
+ for(var/datum/station_goal/S in SSticker.mode.station_goals)
dat += "[S.name] - Announce | Remove
"
dat += "
Add New Goal"
usr << browse(dat, "window=goals;size=400x400")
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index a23e6eea69c..4b555bc724a 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -4,7 +4,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
var/global/sent_strike_team = 0
/client/proc/strike_team()
- if(!ticker)
+ if(!SSticker)
to_chat(usr, "The game hasn't started yet!")
return
if(sent_strike_team == 1)
@@ -86,9 +86,9 @@ var/global/sent_strike_team = 0
R.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD
R.mind.special_role = SPECIAL_ROLE_DEATHSQUAD
R.mind.offstation_role = TRUE
- if(!(R.mind in ticker.minds))
- ticker.minds += R.mind
- ticker.mode.traitors += R.mind
+ if(!(R.mind in SSticker.minds))
+ SSticker.minds += R.mind
+ SSticker.mode.traitors += R.mind
R.key = ghost_mob.key
if(nuke_code)
R.mind.store_memory("Nuke Code: [nuke_code].")
@@ -150,7 +150,7 @@ var/global/sent_strike_team = 0
new_commando.mind_initialize()
new_commando.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD
new_commando.mind.special_role = SPECIAL_ROLE_DEATHSQUAD
- ticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
+ SSticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
new_commando.equip_death_commando(is_leader)
return new_commando
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm
index bf20d2b5503..7e77fe17df7 100644
--- a/code/modules/admin/verbs/striketeam_syndicate.dm
+++ b/code/modules/admin/verbs/striketeam_syndicate.dm
@@ -9,7 +9,7 @@ var/global/sent_syndicate_strike_team = 0
if(!src.holder)
to_chat(src, "Only administrators may use this command.")
return
- if(!ticker)
+ if(!SSticker)
alert("The game hasn't started yet!")
return
if(sent_syndicate_strike_team == 1)
@@ -117,7 +117,7 @@ var/global/sent_syndicate_strike_team = 0
new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
new_syndicate_commando.mind.offstation_role = TRUE
- ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
+ SSticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
new_syndicate_commando.equip_syndicate_commando(is_leader)
qdel(spawn_location)
return new_syndicate_commando
diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm
index 10ad3f07020..98a4bf82e98 100644
--- a/code/modules/admin/verbs/tripAI.dm
+++ b/code/modules/admin/verbs/tripAI.dm
@@ -2,21 +2,21 @@
set category = "Event"
set name = "Create AI Triumvirate"
- if(ticker.current_state > GAME_STATE_PREGAME)
+ if(SSticker.current_state > GAME_STATE_PREGAME)
to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.")
return
- if(SSjobs && ticker)
+ if(SSjobs && SSticker)
var/datum/job/job = SSjobs.GetJob("AI")
if(!job)
to_chat(usr, "Unable to locate the AI job")
return
- if(ticker.triai)
- ticker.triai = 0
+ if(SSticker.triai)
+ SSticker.triai = 0
to_chat(usr, "Only one AI will be spawned at round start.")
message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
else
- ticker.triai = 1
+ SSticker.triai = 1
to_chat(usr, "There will be an AI Triumvirate at round start.")
message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
return
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 4e66c7b1797..f8d008c0c2c 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -18,6 +18,7 @@
icon_state = "locator"
var/borg_to_spawn
var/checking = FALSE
+ var/rolename = "Syndicate Operative"
/obj/item/antag_spawner/nuke_ops/proc/before_candidate_search(user)
return TRUE
@@ -26,12 +27,12 @@
if(used)
to_chat(user, "[src] is out of power!")
return FALSE
- if(!(user.mind in ticker.mode.syndicates))
+ if(!(user.mind in SSticker.mode.syndicates))
to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.")
return FALSE
if(checking)
to_chat(user, "The device is already connecting to Syndicate command. Please wait.")
- return FALSE
+ return FALSE
return TRUE
/obj/item/antag_spawner/nuke_ops/attack_self(mob/user)
@@ -45,7 +46,7 @@
checking = TRUE
to_chat(user, "You activate [src] and wait for confirmation.")
- var/list/nuke_candidates = pollCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg" : "operative"]?", ROLE_OPERATIVE, TRUE, 150)
+ var/list/nuke_candidates = pollCandidates("Do you want to play as a [rolename]?", ROLE_OPERATIVE, TRUE, 150)
if(LAZYLEN(nuke_candidates))
checking = FALSE
if(QDELETED(src) || !check_usability(user))
@@ -62,27 +63,27 @@
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
- var/agent_number = LAZYLEN(ticker.mode.syndicates) - 1
+ var/agent_number = LAZYLEN(SSticker.mode.syndicates) - 1
M.real_name = "[syndicate_name()] Operative #[agent_number]"
set_syndicate_values(C, M)
- ticker.mode.create_syndicate(M.mind)
- ticker.mode.equip_syndicate(M, 0)
- ticker.mode.update_syndicate_id(M.mind, FALSE)
+ SSticker.mode.create_syndicate(M.mind)
+ SSticker.mode.equip_syndicate(M, 0)
+ SSticker.mode.update_syndicate_id(M.mind, FALSE)
/obj/item/antag_spawner/nuke_ops/proc/set_syndicate_values(client/C, mob/living/M)
M.key = C.key
- ticker.mode.syndicates += M.mind
- ticker.mode.update_synd_icons_added(M.mind)
+ SSticker.mode.syndicates += M.mind
+ SSticker.mode.update_synd_icons_added(M.mind)
M.mind.assigned_role = SPECIAL_ROLE_NUKEOPS
M.mind.special_role = SPECIAL_ROLE_NUKEOPS
M.mind.offstation_role = TRUE
M.faction = list("syndicate")
- ticker.mode.forge_syndicate_objectives(M.mind)
- ticker.mode.greet_syndicate(M.mind)
+ SSticker.mode.forge_syndicate_objectives(M.mind)
+ SSticker.mode.greet_syndicate(M.mind)
//////SYNDICATE BORG
/obj/item/antag_spawner/nuke_ops/borg_tele
@@ -109,13 +110,15 @@
if(switch_roles_choice == "Syndicate Cyborg")
switch_roles = TRUE
+ rolename = initial(rolename)
else
switch_roles = FALSE
+ rolename = "Syndicate [borg_to_spawn] Cyborg"
return TRUE
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, datum/mind/user)
- if(!(user in ticker.mode.syndicates))
+ if(!(user in SSticker.mode.syndicates))
used = FALSE
return
@@ -147,7 +150,7 @@
set_syndicate_values(user.current.client, R)
L.key = C.key
- ticker.mode.greet_syndicate(L.mind)
+ SSticker.mode.greet_syndicate(L.mind)
///////////SLAUGHTER DEMON
@@ -195,7 +198,7 @@
S.key = C.key
S.mind.assigned_role = S.name
S.mind.special_role = S.name
- ticker.mode.traitors += S.mind
+ SSticker.mode.traitors += S.mind
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
KillDaWiz.owner = S.mind
KillDaWiz.target = user.mind
@@ -264,7 +267,7 @@
M.mind.assigned_role = SPECIAL_ROLE_MORPH
M.mind.special_role = SPECIAL_ROLE_MORPH
to_chat(M, M.playstyle_string)
- ticker.mode.traitors += M.mind
+ SSticker.mode.traitors += M.mind
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
KillDaWiz.owner = M.mind
KillDaWiz.target = user.mind
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index d866fa56419..d80d5d68028 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -34,7 +34,7 @@
/obj/effect/mob_spawn/attack_ghost(mob/user)
var/mob/dead/observer/O = user
- if(ticker.current_state != GAME_STATE_PLAYING || !loc || !ghost_usable)
+ if(SSticker.current_state != GAME_STATE_PLAYING || !loc || !ghost_usable)
return
if(!uses)
to_chat(user, "This spawner is out of charges!")
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 61e9dec627a..00a9137fe05 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -74,7 +74,7 @@
//Admin PM
if(href_list["priv_msg"])
var/client/C = locate(href_list["priv_msg"])
-
+
if(!C) // Might be a stealthmin ID, so pass it in straight
C = href_list["priv_msg"]
else if(C.UID() != href_list["priv_msg"])
@@ -432,6 +432,7 @@
if(check_rights(R_ADMIN, 0, mob)) // Yes, the mob is required, regardless of other examples in this file, it won't work otherwise
donator_level = DONATOR_LEVEL_MAX
+ donor_loadout_points()
return
//Donator stuff.
@@ -443,8 +444,13 @@
donator_level = 0
return
donator_level = text2num(query_donor_select.item[2])
+ donor_loadout_points()
break
+/client/proc/donor_loadout_points()
+ if(donator_level > 0 && prefs)
+ prefs.max_gear_slots = config.max_loadout_points + 5
+
/client/proc/log_client_to_db(connectiontopic)
if(IsGuestKey(key))
return
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 849898238b2..632c5053b48 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -211,8 +211,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
unlock_content = C.IsByondMember()
if(unlock_content)
max_save_slots = MAX_SAVE_SLOTS_MEMBER
- if(C.donator_level > 0)
- max_gear_slots += 5
loaded_preferences_successfully = load_preferences(C) // Do not call this with no client/C, it generates a runtime / SQL error
if(loaded_preferences_successfully)
diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm
index 731bf06496e..6b72d71bc9b 100644
--- a/code/modules/client/preference/preferences_mysql.dm
+++ b/code/modules/client/preference/preferences_mysql.dm
@@ -87,7 +87,7 @@
UI_style_alpha='[UI_style_alpha]',
be_role='[sanitizeSQL(list2params(be_special))]',
default_slot='[default_slot]',
- toggles='[toggles]',
+ toggles='[num2text(toggles, 7)]',
atklog='[atklog]',
sound='[sound]',
randomslot='[randomslot]',
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 3a427d96bec..032792063be 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -178,6 +178,15 @@
flags = NODROP
flags_cover = null
+/obj/item/clothing/glasses/material/lighting
+ name = "Neutron Goggles"
+ desc = "These odd glasses use a form of neutron-based imaging to completely negate the effects of light and darkness."
+ origin_tech = null
+ vision_flags = 0
+
+ flags = NODROP
+ lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
+
/obj/item/clothing/glasses/regular
name = "prescription glasses"
desc = "Made by Nerd. Co."
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index ed4471d7b7c..1805d911caa 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -83,7 +83,7 @@ obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team
/obj/item/clothing/shoes/magboots/wizard/attack_self(mob/user)
if(user)
- if(user.mind in ticker.mode.wizards)
+ if(user.mind in SSticker.mode.wizards)
if(magpulse) //faint blue light when shoes are turned on gives a reason to turn them off when not needed in maint
set_light(0)
else
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index d2b32f720cf..6181644ffc8 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -1785,4 +1785,4 @@
item_state = "voxbodysuit"
item_color = "voxbodysuit"
body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- species_fit = list("Vox")
\ No newline at end of file
+ species_fit = list("Vox")
diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm
index 18d75f3ef30..3c7dcc6496b 100644
--- a/code/modules/events/abductor.dm
+++ b/code/modules/events/abductor.dm
@@ -13,11 +13,11 @@
if(candidates.len >= 2)
//Oh god why we can't have static functions
- var/number = ticker.mode.abductor_teams + 1
+ var/number = SSticker.mode.abductor_teams + 1
var/datum/game_mode/abduction/temp
- if(ticker.mode.config_tag == "abduction")
- temp = ticker.mode
+ if(SSticker.mode.config_tag == "abduction")
+ temp = SSticker.mode
else
temp = new
@@ -42,10 +42,10 @@
temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
temp.post_setup_team(number)
- ticker.mode.abductor_teams++
+ SSticker.mode.abductor_teams++
- if(ticker.mode.config_tag != "abduction")
- ticker.mode.abductors |= temp.abductors
+ if(SSticker.mode.config_tag != "abduction")
+ SSticker.mode.abductors |= temp.abductors
processing = 1 //So it will get gc'd
return 1
else
diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm
index 7e4473cb0d2..590ff374ad6 100644
--- a/code/modules/events/alien_infestation.dm
+++ b/code/modules/events/alien_infestation.dm
@@ -27,8 +27,8 @@
GLOB.respawnable_list -= C.client
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
new_xeno.key = C.key
- if(ticker && ticker.mode)
- ticker.mode.xenos += new_xeno.mind
+ if(SSticker && SSticker.mode)
+ SSticker.mode.xenos += new_xeno.mind
spawncount--
successSpawn = 1
diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm
index 107ec3c4f3f..57063b0d743 100644
--- a/code/modules/karma/karma.dm
+++ b/code/modules/karma/karma.dm
@@ -59,7 +59,7 @@ var/list/karma_spenders = list()
if(config.disable_karma)
to_chat(src, "Karma is disabled.")
return FALSE
- if(!ticker || !GLOB.player_list.len || (ticker.current_state == GAME_STATE_PREGAME))
+ if(!SSticker || !GLOB.player_list.len || (SSticker.current_state == GAME_STATE_PREGAME))
to_chat(src, "You can't award karma until the game has started.")
return FALSE
if(client.karma_spent || (ckey in karma_spenders))
diff --git a/code/modules/library/computers/checkout.dm b/code/modules/library/computers/checkout.dm
index 10e747b4e31..638aaeee7c3 100644
--- a/code/modules/library/computers/checkout.dm
+++ b/code/modules/library/computers/checkout.dm
@@ -320,11 +320,11 @@
if(!bibledelay)
var/obj/item/storage/bible/B = new /obj/item/storage/bible(src.loc)
- if(ticker && ( ticker.Bible_icon_state && ticker.Bible_item_state) )
- B.icon_state = ticker.Bible_icon_state
- B.item_state = ticker.Bible_item_state
- B.name = ticker.Bible_name
- B.deity_name = ticker.Bible_deity_name
+ if(SSticker && ( SSticker.Bible_icon_state && SSticker.Bible_item_state) )
+ B.icon_state = SSticker.Bible_icon_state
+ B.item_state = SSticker.Bible_item_state
+ B.name = SSticker.Bible_name
+ B.deity_name = SSticker.Bible_deity_name
bibledelay = 1
spawn(60)
diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm
index 5dbc396ef89..33e4a9297c9 100644
--- a/code/modules/mining/lavaland/loot/colossus_loot.dm
+++ b/code/modules/mining/lavaland/loot/colossus_loot.dm
@@ -38,7 +38,7 @@
/obj/machinery/smartfridge/black_box/process()
..()
- if(!memory_saved && ticker.current_state == GAME_STATE_FINISHED)
+ if(!memory_saved && SSticker.current_state == GAME_STATE_FINISHED)
WriteMemory()
/obj/machinery/smartfridge/black_box/proc/WriteMemory()
diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm
index ca868b5e88f..f34aa75cd5e 100644
--- a/code/modules/mob/dead/dead.dm
+++ b/code/modules/mob/dead/dead.dm
@@ -1,23 +1,4 @@
/mob/dead/forceMove(atom/destination)
- // Overriden from code/game/atoms_movable.dm#141 to prevent things like mice squeaking when ghosts walk on them.
- // Same as parent, except that it does not include Uncrossed or Crossed calls.
- var/turf/old_loc = loc
+ var/oldloc = loc
loc = destination
-
- if(old_loc)
- old_loc.Exited(src, destination)
-
- if(destination)
- destination.Entered(src)
-
- if(isturf(destination) && opacity)
- var/turf/new_loc = destination
- new_loc.reconsider_lights()
-
- if(isturf(old_loc) && opacity)
- old_loc.reconsider_lights()
-
- for(var/datum/light_source/L in light_sources)
- L.source_atom.update_light()
-
- return 1
\ No newline at end of file
+ Moved(oldloc, NONE, TRUE)
\ No newline at end of file
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 787e2e072c6..fd3fa7df29c 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -226,31 +226,31 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
P.despawn_occupant()
return
+// Ghosts have no momentum, being massless ectoplasm
+/mob/dead/observer/Process_Spacemove(movement_dir)
+ return 1
+
/mob/dead/observer/Move(NewLoc, direct)
following = null
- dir = direct
- ghostimage.dir = dir
+ setDir(direct)
+ ghostimage.setDir(dir)
+
+ var/oldloc = loc
+
if(NewLoc)
forceMove(NewLoc)
- return
- forceMove(get_turf(src)) //Get out of closets and such as a ghost
- if((direct & NORTH) && y < world.maxy)
- y++
- else if((direct & SOUTH) && y > 1)
- y--
- if((direct & EAST) && x < world.maxx)
- x++
- else if((direct & WEST) && x > 1)
- x--
+ else
+ forceMove(get_turf(src)) //Get out of closets and such as a ghost
+ if((direct & NORTH) && y < world.maxy)
+ y++
+ else if((direct & SOUTH) && y > 1)
+ y--
+ if((direct & EAST) && x < world.maxx)
+ x++
+ else if((direct & WEST) && x > 1)
+ x--
- for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb
- S.Crossed(src)
-
- var/area/A = get_area(src)
- if(A)
- A.Entered(src)
-
- ..()
+ Moved(oldloc, direct)
/mob/dead/observer/can_use_hands() return 0
@@ -399,7 +399,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/area/A = input("Area to jump to", "BOOYEA") as null|anything in ghostteleportlocs
var/area/thearea = ghostteleportlocs[A]
-
+
if(!thearea)
return
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index e6dcaebf51c..ee858138f70 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -277,6 +277,7 @@ Des: Removes all infected images from the alien.
grant_death_vision()
return
+ see_invisible = initial(see_invisible)
sight = SEE_MOBS
if(nightvision)
see_in_dark = 8
diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm
index ec2d96ed880..5eb8f5766e4 100644
--- a/code/modules/mob/living/carbon/alien/alien_defense.dm
+++ b/code/modules/mob/living/carbon/alien/alien_defense.dm
@@ -6,7 +6,7 @@ As such, they can either help or harm other aliens. Help works like the human he
In all, this is a lot like the monkey code. /N
*/
/mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M)
- if(!ticker)
+ if(!SSticker)
to_chat(M, "You cannot attack people before the game has started.")
return
diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm
index f1076721cf1..27837dc7cf5 100644
--- a/code/modules/mob/living/carbon/alien/larva/powers.dm
+++ b/code/modules/mob/living/carbon/alien/larva/powers.dm
@@ -7,8 +7,8 @@
if(stat != CONSCIOUS)
return
- if(layer != TURF_LAYER+0.2)
- layer = TURF_LAYER+0.2
+ if(layer != ABOVE_NORMAL_TURF_LAYER)
+ layer = ABOVE_NORMAL_TURF_LAYER
visible_message("[src] scurries to the ground!", "You are now hiding.")
else
layer = MOB_LAYER
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 3a752e61619..0addea8d4b6 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -93,8 +93,8 @@
spawn(6)
var/mob/living/carbon/alien/larva/new_xeno = new(owner.drop_location())
new_xeno.key = C.key
- if(ticker && ticker.mode)
- ticker.mode.xenos += new_xeno.mind
+ if(SSticker && SSticker.mode)
+ SSticker.mode.xenos += new_xeno.mind
new_xeno.mind.name = new_xeno.name
new_xeno.mind.assigned_role = SPECIAL_ROLE_XENOMORPH
new_xeno.mind.special_role = SPECIAL_ROLE_XENOMORPH
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 2e4d3e8efd6..6b194315f1d 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -44,7 +44,7 @@
visible_message("[user] sticks \a [O] into \the [src].")
brainmob = B.brainmob
B.brainmob = null
- brainmob.loc = src
+ brainmob.forceMove(src)
brainmob.container = src
brainmob.stat = CONSCIOUS
GLOB.respawnable_list -= brainmob
@@ -152,7 +152,7 @@
held_brain.name = "\the [brainmob.name]'s [initial(held_brain.name)]"
brainmob.container = null//Reset brainmob mmi var.
- brainmob.loc = held_brain//Throw mob into brain.
+ brainmob.forceMove(held_brain) //Throw mob into brain.
GLOB.respawnable_list += brainmob
GLOB.living_mob_list -= brainmob//Get outta here
held_brain.brainmob = brainmob//Set the brain to use the brainmob
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index 0f7d4230587..df0afa62f49 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -67,10 +67,10 @@
/mob/living/carbon/brain/on_forcemove(atom/newloc)
if(container)
- container.loc = newloc
+ container.forceMove(newloc)
else //something went very wrong.
CRASH("Brainmob without container.")
- loc = container
+ forceMove(container)
/*
This will return true if the brain has a container that leaves it less helpless than a naked brain
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 44a333fbe44..31788ecc8cf 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -72,7 +72,7 @@
if(prob(src.getBruteLoss() - 50))
for(var/atom/movable/A in stomach_contents)
- A.loc = loc
+ A.forceMove(drop_location())
stomach_contents.Remove(A)
src.gib()
@@ -833,7 +833,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
to_chat(src, "You successfully remove [I].")
if(I == handcuffed)
- handcuffed.loc = loc
+ handcuffed.forceMove(drop_location())
handcuffed.dropped(src)
handcuffed = null
if(buckled && buckled.buckle_requires_restraints)
@@ -841,7 +841,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
update_handcuffed()
return
if(I == legcuffed)
- legcuffed.loc = loc
+ legcuffed.forceMove(drop_location())
legcuffed.dropped()
legcuffed = null
update_inv_legcuffed()
@@ -935,7 +935,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(client)
client.screen -= W
if(W)
- W.loc = loc
+ W.forceMove(drop_location())
W.dropped(src)
if(W)
W.layer = initial(W.layer)
@@ -947,7 +947,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(client)
client.screen -= W
if(W)
- W.loc = loc
+ W.forceMove(drop_location())
W.dropped(src)
if(W)
W.layer = initial(W.layer)
@@ -1139,9 +1139,11 @@ so that different stomachs can handle things in different ways VB*/
grant_death_vision()
return
+ see_invisible = initial(see_invisible)
+ see_in_dark = initial(see_in_dark)
sight = initial(sight)
lighting_alpha = initial(lighting_alpha)
-
+
for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs)
sight |= E.vision_flags
if(E.see_in_dark)
@@ -1160,6 +1162,6 @@ so that different stomachs can handle things in different ways VB*/
sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS)
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
-
+
SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT)
sync_lighting_plane_alpha()
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 6d245674fd1..64d06dac4db 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -112,7 +112,7 @@
if(H.mind)
H.mind.kills += "[key_name(src)]"
- if(ticker && ticker.mode)
+ if(SSticker && SSticker.mode)
// log_world("k")
sql_report_death(src)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 86a25e3db46..e497fd04814 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1977,7 +1977,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
if(7) // Pride
log_game("[src] was influenced by the sin of pride.")
O = new /datum/objective/sintouched/pride
- ticker.mode.sintouched += src.mind
+ SSticker.mode.sintouched += src.mind
src.mind.objectives += O
var/obj_count = 1
to_chat(src, "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")
- return
/mob/living/carbon/human/put_in_hands(obj/item/W)
if(!W) return 0
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index efaaa7a86be..7dc6c042e0c 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -331,11 +331,11 @@
/datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
//Vampire code
- if(user.mind && user.mind.vampire && (user.mind in ticker.mode.vampires) && !user.mind.vampire.draining && user.zone_sel && user.zone_sel.selecting == "head" && target != user)
+ if(user.mind && user.mind.vampire && (user.mind in SSticker.mode.vampires) && !user.mind.vampire.draining && user.zone_sel && user.zone_sel.selecting == "head" && target != user)
if((NO_BLOOD in target.dna.species.species_traits) || target.dna.species.exotic_blood || !target.blood_volume)
to_chat(user, "They have no blood!")
return
- if(target.mind && target.mind.vampire && (target.mind in ticker.mode.vampires))
+ if(target.mind && target.mind.vampire && (target.mind in SSticker.mode.vampires))
to_chat(user, "Your fangs fail to pierce [target.name]'s cold flesh")
return
if(SKELETON in target.mutations)
@@ -629,6 +629,8 @@ It'll return null if the organ doesn't correspond, so include null checks when u
return has_organ[organ_slot]
/datum/species/proc/update_sight(mob/living/carbon/human/H)
+ H.sight = initial(H.sight)
+
var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes)
if(eyes)
H.sight |= eyes.vision_flags
@@ -636,7 +638,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u
H.see_invisible = eyes.see_invisible
H.lighting_alpha = eyes.lighting_alpha
else
- H.sight = initial(H.sight)
H.see_in_dark = initial(H.see_in_dark)
H.see_invisible = initial(H.see_invisible)
H.lighting_alpha = initial(H.lighting_alpha)
diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm
index e790181188e..c1e416a8a48 100644
--- a/code/modules/mob/living/carbon/human/species/golem.dm
+++ b/code/modules/mob/living/carbon/human/species/golem.dm
@@ -607,7 +607,6 @@
..()
last_banana = world.time
last_honk = world.time
- H.job = "Clown"
H.mutations.Add(COMIC)
H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store)
@@ -682,7 +681,6 @@
/datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H)
..()
- H.job = "Mime"
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/cane(H), slot_l_hand)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 6e540c4cf5a..6133c5150e1 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -597,7 +597,7 @@ var/global/list/damage_icon_parts = list()
client.screen -= thing // WHAT THE FUCKING FUCK BAY GODDAMNIT
// **I FUCKING HATE YOU AAAAAAAAAA**
if(thing) //
- thing.loc = loc //
+ thing.forceMove(drop_location()) //
thing.dropped(src) //
thing.layer = initial(thing.layer)
thing.plane = initial(thing.plane)
diff --git a/code/modules/mob/living/carbon/slime/powers.dm b/code/modules/mob/living/carbon/slime/powers.dm
index 23918680197..40f9060ee63 100644
--- a/code/modules/mob/living/carbon/slime/powers.dm
+++ b/code/modules/mob/living/carbon/slime/powers.dm
@@ -47,7 +47,7 @@
/mob/living/carbon/slime/proc/Feedon(var/mob/living/M)
Victim = M
- src.loc = M.loc
+ forceMove(M.loc)
canmove = 0
anchored = 1
var/lastnut = nutrition
@@ -64,7 +64,7 @@
canmove = 0
if(Adjacent(Victim))
- loc = M.loc
+ forceMove(M.loc)
if(iscarbon(Victim))
Victim.adjustCloneLoss(rand(5,6))
@@ -163,7 +163,7 @@
/mob/living/carbon/slime/proc/UpdateFeed(var/mob/M)
if(Victim)
if(Victim == M)
- loc = M.loc // simple "attach to head" effect!
+ forceMove(M.loc) // simple "attach to head" effect!
/mob/living/carbon/slime/verb/Evolve()
diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm
index 4e04090b649..62935713a80 100644
--- a/code/modules/mob/living/carbon/superheroes.dm
+++ b/code/modules/mob/living/carbon/superheroes.dm
@@ -50,11 +50,11 @@
if(class == "Superhero")
W.assignment = "Superhero"
W.rank = "Superhero"
- ticker.mode.superheroes += H.mind
+ SSticker.mode.superheroes += H.mind
else if(class == "Supervillain")
W.assignment = "Supervillain"
W.rank = "Supervillain"
- ticker.mode.supervillains += H.mind
+ SSticker.mode.supervillains += H.mind
W.icon_state = "lifetimeid"
W.SetOwnerInfo(H)
W.UpdateName()
@@ -157,7 +157,7 @@
/obj/effect/proc_holder/spell/targeted/recruit/cast(list/targets,mob/living/user = usr)
for(var/mob/living/carbon/human/target in targets)
var/obj/item/organ/external/head/head_organ = target.get_organ("head")
- if(ticker.mode.greyshirts.len >= 3)
+ if(SSticker.mode.greyshirts.len >= 3)
to_chat(user, "You have already recruited the maximum number of henchmen.")
if(!in_range(user, target))
to_chat(user, "You need to be closer to enthrall [target].")
@@ -218,7 +218,7 @@
to_chat(target, "You have decided to enroll as a henchman for [user]. You are now part of the feared 'Greyshirts'.")
to_chat(target, "You must follow the orders of [user], and help [user.p_them()] succeed in [user.p_their()] dastardly schemes.")
to_chat(target, "You may not harm other Greyshirt or [user]. However, you do not need to obey other Greyshirts.")
- ticker.mode.greyshirts += target.mind
+ SSticker.mode.greyshirts += target.mind
target.set_species(/datum/species/human)
head_organ.h_style = "Bald"
head_organ.f_style = "Shaved"
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index d0a0619be2b..6054068eb15 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -88,8 +88,8 @@
mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
GLOB.respawnable_list += src
- if(ticker && ticker.mode)
- ticker.mode.check_win()
+ if(SSticker && SSticker.mode)
+ SSticker.mode.check_win()
if(mind && mind.devilinfo) // Expand this into a general-purpose death-response system when appropriate
mind.devilinfo.beginResurrectionCheck(src)
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 03182a07ba8..e0c58c484d8 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -211,7 +211,7 @@
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
+ lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
see_in_dark = 8
see_invisible = SEE_INVISIBLE_OBSERVER
sync_lighting_plane_alpha()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 9af52718ab3..727c900ac9c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -519,7 +519,6 @@
var/turf/T = loc
. = ..()
if(.)
- SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED)
handle_footstep(loc)
step_count++
@@ -691,7 +690,7 @@
return name
/mob/living/update_gravity(has_gravity)
- if(!ticker)
+ if(!SSticker)
return
if(has_gravity)
clear_alert("weightless")
@@ -972,7 +971,7 @@
/mob/living/onTransitZ(old_z,new_z)
..()
- update_z(new_z)
+ update_z(new_z)
/mob/living/proc/owns_soul()
if(mind)
@@ -1039,13 +1038,3 @@
update_transform()
if("lighting_alpha")
sync_lighting_plane_alpha()
-
-/mob/living/update_sight()
- if(!client)
- return
-
- if(stat == DEAD)
- grant_death_vision()
- return
-
- . = ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 88b17124451..e9df2f0edad 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -279,7 +279,7 @@
return G
/mob/living/attack_slime(mob/living/carbon/slime/M)
- if(!ticker)
+ if(!SSticker)
to_chat(M, "You cannot attack people before the game has started.")
return
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 54750e6afc1..80d644152f4 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -1303,8 +1303,8 @@ var/list/ai_verbs_default = list(
see_invisible = initial(see_invisible)
see_in_dark = initial(see_in_dark)
- lighting_alpha = initial(lighting_alpha)
sight = initial(sight)
+ lighting_alpha = initial(lighting_alpha)
if(aiRestorePowerRoutine)
sight = sight &~ SEE_TURFS
diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm
index 6d32c24bb0a..c8ffebc6647 100644
--- a/code/modules/mob/living/silicon/ai/ai_defense.dm
+++ b/code/modules/mob/living/silicon/ai/ai_defense.dm
@@ -1,5 +1,5 @@
/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M)
- if(!ticker)
+ if(!SSticker)
to_chat(M, "You cannot attack people before the game has started.")
return
..()
diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
index 2771725a96d..6d12559ee9b 100644
--- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
@@ -101,7 +101,7 @@ var/datum/cameranet/cameranet = new()
/datum/cameranet/proc/updateVisibility(atom/A, opacity_check = 1)
- if(!ticker || (opacity_check && !A.opacity))
+ if(!SSticker || (opacity_check && !A.opacity))
return
majorChunkChange(A, 2)
diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm
index 69136e07a99..513b26ee558 100644
--- a/code/modules/mob/living/silicon/ai/latejoin.dm
+++ b/code/modules/mob/living/silicon/ai/latejoin.dm
@@ -33,8 +33,8 @@ var/global/list/empty_playable_ai_cores = list()
mind.objectives.Cut()
mind.special_role = null
else
- if(ticker.mode.name == "AutoTraitor")
- var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
+ if(SSticker.mode.name == "AutoTraitor")
+ var/datum/game_mode/traitor/autotraitor/current_mode = SSticker.mode
current_mode.possible_traitors.Remove(src)
// Ghost the current player and disallow them to return to the body
diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm
index 01240adf942..4892441b804 100644
--- a/code/modules/mob/living/silicon/login.dm
+++ b/code/modules/mob/living/silicon/login.dm
@@ -1,12 +1,12 @@
/mob/living/silicon/Login()
SetSleeping(0)
- if(mind && ticker && ticker.mode)
- ticker.mode.remove_revolutionary(mind, 1)
- ticker.mode.remove_cultist(mind, 1)
- ticker.mode.remove_wizard(mind)
- ticker.mode.remove_changeling(mind)
- ticker.mode.remove_vampire(mind)
- ticker.mode.remove_thrall(mind, 0)
- ticker.mode.remove_shadowling(mind)
- ticker.mode.remove_abductor(mind)
- ..()
+ if(mind && SSticker && SSticker.mode)
+ SSticker.mode.remove_revolutionary(mind, 1)
+ SSticker.mode.remove_cultist(mind, 1)
+ SSticker.mode.remove_wizard(mind)
+ SSticker.mode.remove_changeling(mind)
+ SSticker.mode.remove_vampire(mind)
+ SSticker.mode.remove_thrall(mind, 0)
+ SSticker.mode.remove_shadowling(mind)
+ SSticker.mode.remove_abductor(mind)
+ ..()
diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm
index ff859853ea5..b2828070ad3 100644
--- a/code/modules/mob/living/silicon/pai/recruit.dm
+++ b/code/modules/mob/living/silicon/pai/recruit.dm
@@ -50,8 +50,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
card.setPersonality(pai)
card.looking_for_personality = 0
- ticker.mode.update_cult_icons_removed(card.pai.mind)
- ticker.mode.update_rev_icons_removed(card.pai.mind)
+ SSticker.mode.update_cult_icons_removed(card.pai.mind)
+ SSticker.mode.update_rev_icons_removed(card.pai.mind)
pai_candidates -= candidate
usr << browse(null, "window=findPai")
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index e94f9e072b4..3985bfce50e 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -182,7 +182,7 @@
to_chat(user, "You swipe the sequencer across [src]'s interface and watch its eyes flicker.")
if(jobban_isbanned(src, ROLE_SYNDICATE))
- ticker.mode.replace_jobbanned_player(src, ROLE_SYNDICATE)
+ SSticker.mode.replace_jobbanned_player(src, ROLE_SYNDICATE)
to_chat(src, "You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script. You sense you have five minutes before the drone server detects this and automatically shuts you down.")
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
index 9bf388fe5fe..35bbad68b6a 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
@@ -27,7 +27,7 @@
/obj/machinery/drone_fabricator/process()
- if(ticker.current_state < GAME_STATE_PLAYING)
+ if(SSticker.current_state < GAME_STATE_PLAYING)
return
if(stat & NOPOWER || !produce_drones)
@@ -98,7 +98,7 @@
to_chat(usr, "You are banned from playing drones and cannot spawn as a drone.")
return
- if(!ticker || ticker.current_state < 3)
+ if(!SSticker || SSticker.current_state < 3)
to_chat(src, "You can't join as a drone before the game starts!")
return
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 68d0ca33908..7521270346e 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1351,9 +1351,9 @@ var/list/robot_verbs_default = list(
mind.special_role = SPECIAL_ROLE_ERT
if(cyborg_unlock)
crisis = 1
- if(!(mind in ticker.minds))
- ticker.minds += mind
- ticker.mode.ert += mind
+ if(!(mind in SSticker.minds))
+ SSticker.minds += mind
+ SSticker.mode.ert += mind
/mob/living/silicon/robot/ert/gamma
crisis = 1
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 91abb6b2696..ab9253b96cc 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -29,21 +29,21 @@
/mob/living/simple_animal/hostile/construct/New()
..()
- if(!ticker.mode)//work around for maps with runes and cultdat is not loaded all the way
+ if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way
name = "[const_type] ([rand(1, 1000)])"
real_name = const_type
icon_living = const_type
icon_state = const_type
else
- name = "[ticker.cultdat.get_name(const_type)] ([rand(1, 1000)])"
- real_name = ticker.cultdat.get_name(const_type)
- icon_living = ticker.cultdat.get_icon(const_type)
- icon_state = ticker.cultdat.get_icon(const_type)
+ name = "[SSticker.cultdat.get_name(const_type)] ([rand(1, 1000)])"
+ real_name = SSticker.cultdat.get_name(const_type)
+ icon_living = SSticker.cultdat.get_icon(const_type)
+ icon_state = SSticker.cultdat.get_icon(const_type)
for(var/spell in construct_spells)
AddSpell(new spell(null))
- if(ticker.cultdat.theme == "blood")
+ if(SSticker.cultdat.theme == "blood")
updateglow()
/mob/living/simple_animal/hostile/construct/examine(mob/user)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 5e8310a8f2f..62784a793f9 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -48,9 +48,9 @@
..()
/mob/living/simple_animal/pet/cat/Runtime/Life(seconds, times_fired)
- if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP)
+ if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP)
Deploy_The_Cats()
- if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved)
+ if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
Write_Memory()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
index 04360da3897..5be21c8646e 100644
--- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
@@ -22,7 +22,7 @@
del_on_death = 1
/mob/living/simple_animal/cockroach/can_die()
- return ..() && !ticker.cinematic //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes.
+ return ..() && !SSticker.cinematic //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes.
/mob/living/simple_animal/cockroach/Crossed(var/atom/movable/AM)
if(isliving(AM))
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 869c663e312..3b9b2d720ca 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -35,8 +35,9 @@
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
-/mob/living/simple_animal/mouse/Initialize()
+/mob/living/simple_animal/mouse/Initialize(mapload)
. = ..()
+ AddComponent(/datum/component/squeak, list('sound/creatures/mousesqueak.ogg' = 1), 100)
/mob/living/simple_animal/mouse/handle_automated_speech()
..()
@@ -92,10 +93,9 @@
/mob/living/simple_animal/mouse/Crossed(AM as mob|obj)
if(ishuman(AM))
- if(stat == CONSCIOUS)
+ if(!stat)
var/mob/M = AM
to_chat(M, "[bicon(src)] Squeek!")
- SEND_SOUND(M, squeak_sound)
..()
/mob/living/simple_animal/mouse/death(gibbed)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 365889344d2..3799daacb63 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -609,4 +609,33 @@
..()
if(AIStatus == AI_Z_OFF)
SSidlenpcpool.idle_mobs_by_zlevel[old_z] -= src
- toggle_ai(initial(AIStatus))
\ No newline at end of file
+ toggle_ai(initial(AIStatus))
+
+// Simple animals will not be given night vision upon death, as that would result in issues when they are revived.
+/mob/living/simple_animal/grant_death_vision()
+ sight |= SEE_TURFS
+ sight |= SEE_MOBS
+ sight |= SEE_OBJS
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_OBSERVER
+ sync_lighting_plane_alpha()
+
+/mob/living/simple_animal/update_sight()
+ if(!client)
+ return
+
+ if(stat == DEAD)
+ grant_death_vision()
+ return
+
+ see_invisible = initial(see_invisible)
+ see_in_dark = initial(see_in_dark)
+ sight = initial(sight)
+
+ if(client.eye != src)
+ var/atom/A = client.eye
+ if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates.
+ return
+
+ SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT)
+ sync_lighting_plane_alpha()
\ No newline at end of file
diff --git a/code/modules/mob/living/update_status.dm b/code/modules/mob/living/update_status.dm
index bec41f68698..39357533abb 100644
--- a/code/modules/mob/living/update_status.dm
+++ b/code/modules/mob/living/update_status.dm
@@ -93,9 +93,9 @@
density = !lying
if(lying)
if(layer == initial(layer))
- layer = MOB_LAYER - 0.2
+ layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
else
- if(layer == MOB_LAYER - 0.2)
+ if(layer == LYING_MOB_LAYER)
layer = initial(layer)
update_transform()
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 0a1346fd0ed..f5f1924e395 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -70,5 +70,4 @@
AA.display_to(list(src))
update_client_colour(0)
-
- callHook("mob_login", list("client" = client, "mob" = src))
+ update_morgue()
diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm
index f409d184340..376b8d46ea5 100644
--- a/code/modules/mob/logout.dm
+++ b/code/modules/mob/logout.dm
@@ -6,7 +6,7 @@
create_attack_log("Logged out at [atom_loc_line(get_turf(src))]")
// `holder` is nil'd out by now, so we check the `admin_datums` array directly
//Only report this stuff if we are currently playing.
- if(admin_datums[ckey] && ticker && ticker.current_state == GAME_STATE_PLAYING)
+ if(admin_datums[ckey] && SSticker && SSticker.current_state == GAME_STATE_PLAYING)
var/datum/admins/temp_admin = admin_datums[ckey]
// Triggers on people with banhammer power only - no mentors tripping the alarm
if(temp_admin.rights & R_BAN)
@@ -16,5 +16,5 @@
send2irc(config.admin_notify_irc, "[key_name(src)] logged out - No active admins, [admincounter[2]] non-admin staff, [admincounter[3]] inactive staff.")
..()
- callHook("mob_logout", list("client" = client, "mob" = src))
+ update_morgue()
return 1
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index bdc900618ba..86b8b8dcdbd 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -745,7 +745,7 @@ var/list/slot_equipment_priority = list( \
to_chat(usr, "Respawning is disabled.")
return
- if(stat != DEAD || !ticker)
+ if(stat != DEAD || !SSticker)
to_chat(usr, "You must be dead to use this!")
return
@@ -1101,7 +1101,7 @@ var/list/slot_equipment_priority = list( \
to_chat(usr, "You are banned from playing as sentient animals.")
return
- if(!ticker || ticker.current_state < 3)
+ if(!SSticker || SSticker.current_state < 3)
to_chat(src, "You can't respawn as an NPC before the game starts!")
return
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index a4a52d4ef1e..077164be6b7 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -214,12 +214,12 @@
shift = -10
adir = assailant.dir
affecting.setDir(assailant.dir)
- affecting.loc = assailant.loc
+ affecting.forceMove(assailant.loc)
if(GRAB_KILL)
shift = 0
adir = 1
affecting.setDir(SOUTH)//face up
- affecting.loc = assailant.loc
+ affecting.forceMove(assailant.loc)
switch(adir)
if(NORTH)
@@ -387,7 +387,7 @@
if(M == assailant && state >= GRAB_AGGRESSIVE) //no eatin unless you have an agressive grab
if(checkvalid(user, affecting)) //wut
var/mob/living/carbon/attacker = user
-
+
if(affecting.buckled)
to_chat(user, "[affecting] is buckled!")
return
diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm
index 1c7b06b1ce1..d8e6a239a9a 100644
--- a/code/modules/mob/new_player/login.dm
+++ b/code/modules/mob/new_player/login.dm
@@ -14,21 +14,16 @@
loc = locate(1,1,1)
lastarea = loc
+ client.screen = list() // Remove HUD items just in case.
+ client.images = list()
+ if(!hud_used)
+ create_mob_hud()
+ if(hud_used)
+ hud_used.show_hud(hud_used.hud_version)
+
sight |= SEE_TURFS
GLOB.player_list |= src
-/*
- var/list/watch_locations = list()
- for(var/obj/effect/landmark/landmark in GLOB.landmarks_list)
- if(landmark.tag == "landmark*new_player")
- watch_locations += landmark.loc
-
- if(watch_locations.len>0)
- loc = pick(watch_locations)
-*/
-
- callHook("mob_login", list("client" = client, "mob" = src))
-
new_player_panel()
spawn(30)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index b942b551313..f0b6c0a5d7a 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -59,7 +59,7 @@
real_name = "Random Character Slot"
var/output = "Setup Character
[real_name]
"
- if(!ticker || ticker.current_state <= GAME_STATE_PREGAME)
+ if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME)
if(!ready) output += "Declare Ready
"
else output += "You are ready (Cancel)
"
else
@@ -106,21 +106,21 @@
/mob/new_player/Stat()
statpanel("Lobby")
- if(client.statpanel=="Lobby" && ticker)
- if(ticker.hide_mode)
+ if(client.statpanel=="Lobby" && SSticker)
+ if(SSticker.hide_mode)
stat("Game Mode:", "Secret")
else
- if(ticker.hide_mode == 0)
+ if(SSticker.hide_mode == 0)
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
else
stat("Game Mode: ", "Secret")
- if((ticker.current_state == GAME_STATE_PREGAME) && going)
- stat("Time To Start:", ticker.pregame_timeleft)
- if((ticker.current_state == GAME_STATE_PREGAME) && !going)
+ if((SSticker.current_state == GAME_STATE_PREGAME) && going)
+ stat("Time To Start:", round(SSticker.pregame_timeleft/10))
+ if((SSticker.current_state == GAME_STATE_PREGAME) && !going)
stat("Time To Start:", "DELAYED")
- if(ticker.current_state == GAME_STATE_PREGAME)
+ if(SSticker.current_state == GAME_STATE_PREGAME)
stat("Players:", "[totalPlayers]")
if(check_rights(R_ADMIN, 0, src))
stat("Players Ready:", "[totalPlayersReady]")
@@ -136,7 +136,7 @@
..()
statpanel("Status")
- if(client.statpanel == "Status" && ticker)
+ if(client.statpanel == "Status" && SSticker)
show_stat_station_time()
@@ -217,7 +217,7 @@
if(!tos_consent)
to_chat(usr, "You must consent to the terms of service before you can join!")
return 0
- if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
+ if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING)
to_chat(usr, "The round is either not ready, or has already finished...")
return
@@ -303,7 +303,7 @@
/mob/new_player/proc/AttemptLateSpawn(rank,var/spawning_at)
if(src != usr)
return 0
- if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
+ if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING)
to_chat(usr, "The round is either not ready, or has already finished...")
return 0
if(!enter_allowed)
@@ -330,7 +330,7 @@
ai_character.moveToEmptyCore()
AnnounceCyborg(ai_character, rank, "has been downloaded to the empty core in \the [get_area(ai_character)]")
- ticker.mode.latespawn(ai_character)
+ SSticker.mode.latespawn(ai_character)
qdel(src)
return
@@ -370,13 +370,13 @@
character = SSjobs.EquipRank(character, rank, 1) //equips the human
EquipCustomItems(character)
- ticker.mode.latespawn(character)
+ SSticker.mode.latespawn(character)
if(character.mind.assigned_role == "Cyborg")
AnnounceCyborg(character, rank, join_message)
else
data_core.manifest_inject(character)
- ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
+ SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
AnnounceArrival(character, rank, join_message)
AddEmploymentContract(character)
@@ -386,7 +386,7 @@
/mob/new_player/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message)
- if(ticker.current_state == GAME_STATE_PLAYING)
+ if(SSticker.current_state == GAME_STATE_PLAYING)
var/ailist[] = list()
for(var/mob/living/silicon/ai/A in GLOB.living_mob_list)
ailist += A
@@ -418,7 +418,7 @@
employmentCabinet.addFile(employee)
/mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message)
- if(ticker.current_state == GAME_STATE_PLAYING)
+ if(SSticker.current_state == GAME_STATE_PLAYING)
var/ailist[] = list()
for(var/mob/living/silicon/ai/A in GLOB.living_mob_list)
ailist += A
@@ -536,7 +536,7 @@
var/mob/living/carbon/human/new_character = new(loc)
new_character.lastarea = get_area(loc)
- if(ticker.random_players || appearance_isbanned(new_character))
+ if(SSticker.random_players || appearance_isbanned(new_character))
client.prefs.random_character()
client.prefs.real_name = random_name(client.prefs.gender)
client.prefs.copy_to(new_character)
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index e15c727accb..53ab45c58dc 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -25,8 +25,8 @@
/obj/singularity/narsie/large/New()
..()
- icon_state = ticker.cultdat.entity_icon_state
- name = ticker.cultdat.entity_name
+ icon_state = SSticker.cultdat.entity_icon_state
+ name = SSticker.cultdat.entity_name
to_chat(world, " [name] HAS RISEN")
world << pick(sound('sound/hallucinations/im_here1.ogg'), sound('sound/hallucinations/im_here2.ogg'))
@@ -127,12 +127,12 @@
/obj/singularity/narsie/proc/acquire(var/mob/food)
if(food == target)
return
- to_chat(target, "[uppertext(ticker.cultdat.entity_name)] HAS LOST INTEREST IN YOU")
+ to_chat(target, "[uppertext(SSticker.cultdat.entity_name)] HAS LOST INTEREST IN YOU")
target = food
if(ishuman(target))
- to_chat(target, "[uppertext(ticker.cultdat.entity_name)] HUNGERS FOR YOUR SOUL")
+ to_chat(target, "[uppertext(SSticker.cultdat.entity_name)] HUNGERS FOR YOUR SOUL")
else
- to_chat(target, "[uppertext(ticker.cultdat.entity_name)] HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL")
+ to_chat(target, "[uppertext(SSticker.cultdat.entity_name)] HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL")
//Wizard narsie
/obj/singularity/narsie/wizard
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 6c9ecb55afc..7ebc4f4471a 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -198,7 +198,7 @@
return 0
/obj/machinery/power/smes/Destroy()
- if(ticker && ticker.current_state == GAME_STATE_PLAYING)
+ if(SSticker && SSticker.current_state == GAME_STATE_PLAYING)
var/area/area = get_area(src)
if(area)
message_admins("SMES deleted at ([area.name])")
diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm
index b50ed09a27c..850df4f2382 100644
--- a/code/modules/reagents/chemistry/reagents/drinks.dm
+++ b/code/modules/reagents/chemistry/reagents/drinks.dm
@@ -178,7 +178,7 @@
/datum/reagent/consumable/drink/banana/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- if((ishuman(M) && M.job in list("Clown") ) || issmall(M))
+ if((ishuman(M) && COMIC in M.mutations) || issmall(M))
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
@@ -194,7 +194,7 @@
/datum/reagent/consumable/drink/nothing/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- if(ishuman(M) && M.job in list("Mime"))
+ if(ishuman(M) && M.mind && M.mind.miming)
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
@@ -402,7 +402,7 @@
/datum/reagent/consumable/drink/bananahonk/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- if((ishuman(M) && M.job in list("Clown") ) || issmall(M))
+ if((ishuman(M) && COMIC in M.mutations) || issmall(M))
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm
index bf2417a192e..a67f681973d 100644
--- a/code/modules/reagents/chemistry/reagents/food.dm
+++ b/code/modules/reagents/chemistry/reagents/food.dm
@@ -9,7 +9,7 @@
var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN
/datum/reagent/consumable/on_mob_life(mob/living/M)
- if(!(M.mind in ticker.mode.vampires))
+ if(!(M.mind in SSticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
@@ -27,7 +27,7 @@
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- if(!(M.mind in ticker.mode.vampires))
+ if(!(M.mind in SSticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 6e6c4dce1a7..57f8b96b787 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -326,14 +326,14 @@
if(current_cycle >= 75 && prob(33)) // 30 units, 150 seconds
M.AdjustConfused(3)
if(isvampirethrall(M))
- ticker.mode.remove_vampire_mind(M.mind)
+ SSticker.mode.remove_vampire_mind(M.mind)
holder.remove_reagent(id, volume)
M.SetJitter(0)
M.SetStuttering(0)
M.SetConfused(0)
return
if(iscultist(M))
- ticker.mode.remove_cultist(M.mind)
+ SSticker.mode.remove_cultist(M.mind)
holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
M.SetJitter(0)
M.SetStuttering(0)
diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm
index 0bac5824780..2a86d4a4a54 100644
--- a/code/modules/response_team/ert.dm
+++ b/code/modules/response_team/ert.dm
@@ -21,11 +21,11 @@ var/ert_request_answered = FALSE
if(!check_rights(R_EVENT))
return
- if(!ticker)
+ if(!SSticker)
to_chat(usr, "The game hasn't started yet!")
return
- if(ticker.current_state == GAME_STATE_PREGAME)
+ if(SSticker.current_state == GAME_STATE_PREGAME)
to_chat(usr, "The round hasn't started yet!")
return
@@ -164,9 +164,9 @@ var/ert_request_answered = FALSE
M.mind.original = M
M.mind.assigned_role = SPECIAL_ROLE_ERT
M.mind.special_role = SPECIAL_ROLE_ERT
- if(!(M.mind in ticker.minds))
- ticker.minds += M.mind //Adds them to regular mind list.
- ticker.mode.ert += M.mind
+ if(!(M.mind in SSticker.minds))
+ SSticker.minds += M.mind //Adds them to regular mind list.
+ SSticker.mode.ert += M.mind
M.forceMove(spawn_location)
SSjobs.CreateMoneyAccount(M, class, null)
diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm
index 3f074c1246c..834d3ddc907 100644
--- a/code/modules/security_levels/keycard authentication.dm
+++ b/code/modules/security_levels/keycard authentication.dm
@@ -183,7 +183,7 @@
trigger_armed_response_team(new /datum/response_team/amber) // No admins? No problem. Automatically send a code amber ERT.
/obj/machinery/keycard_auth/proc/is_ert_blocked()
- return ticker.mode && ticker.mode.ert_disabled
+ return SSticker.mode && SSticker.mode.ert_disabled
var/global/maint_all_access = 0
var/global/station_all_access = 0
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 0efe2043ab0..4c945921389 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -13,7 +13,7 @@
/datum/station_goal/dna_vault/New()
..()
animal_count = rand(15, 20) //might be too few given ~15 roundstart stationside ones
- human_count = rand(round(0.75 * ticker.mode.num_players_started()), ticker.mode.num_players_started()) // 75%+ roundstart population.
+ human_count = rand(round(0.75 * SSticker.mode.num_players_started()), SSticker.mode.num_players_started()) // 75%+ roundstart population.
var/non_standard_plants = non_standard_plants_count()
plant_count = rand(round(0.5 * non_standard_plants),round(0.7 * non_standard_plants))
@@ -166,8 +166,8 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
F.parent = src
fillers += F
- if(ticker.mode)
- for(var/datum/station_goal/dna_vault/G in ticker.mode.station_goals)
+ if(SSticker.mode)
+ for(var/datum/station_goal/dna_vault/G in SSticker.mode.station_goals)
animals_max = G.animal_count
plants_max = G.plant_count
dna_max = G.human_count
diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm
index 09ccb3ce36b..68977b5e14d 100644
--- a/code/modules/station_goals/shield.dm
+++ b/code/modules/station_goals/shield.dm
@@ -83,7 +83,7 @@
))
data["notice"] = notice
- var/datum/station_goal/station_shield/G = locate() in ticker.mode.station_goals
+ var/datum/station_goal/station_shield/G = locate() in SSticker.mode.station_goals
if(G)
data["meteor_shield"] = 1
data["meteor_shield_coverage"] = G.get_coverage()
diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm
index 754e09b4185..90d4defa26c 100644
--- a/code/modules/station_goals/station_goal.dm
+++ b/code/modules/station_goals/station_goal.dm
@@ -33,7 +33,7 @@
to_chat(world, "Station Goal : [name] : Failed!")
/datum/station_goal/Destroy()
- ticker.mode.station_goals -= src
+ SSticker.mode.station_goals -= src
. = ..()
/datum/station_goal/Topic(href, href_list)
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index f959732427a..ebe824f0bbc 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -328,7 +328,7 @@
if(target.vision_type) //Turns off their darksight if it's still active.
to_chat(target, "Your eyes are suddenly wrought with immense pain as your darksight is forcibly dismissed!")
target.vision_type = null
- ticker.mode.remove_thrall(target.mind, 0)
+ SSticker.mode.remove_thrall(target.mind, 0)
target.visible_message("A strange black mass falls from [target]'s [E]!")
var/obj/item/organ/thing = new /obj/item/organ/internal/shadowtumor(get_turf(target))
thing.set_dna(target.dna)
diff --git a/html/changelog.html b/html/changelog.html
index 6ce02bc19c8..1d3eb4038b5 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,122 @@
-->
+
10 May 2019
+
AffectedArc07 updated:
+
+ - Removes an infinite loop in the code
+ - Removes unused code
+ - Captains display case now actually has captains thumbprint lock on it
+ - Morgue updates happen slightly better now
+ - Fixes a minor NTTC issue
+
+
Arkatos updated:
+
+ - Patch Pack is now craftable with a cardboard, costs 2 cardboard sheets.
+ - Examine tooltip delay increased slightly
+ - Examine tooltips now work properly on items in storage
+ - Full toolbelts now spawn with randomly a colored cable coil
+ - Added inhand sprites for belts
+ - Species name now shows in a species theme color on examine
+ - Added 4 new plushies
+
+
Couls updated:
+
+ - necromantic stone now forces the ghost back into the body as a skeleton
+ - allow skeletons to give up their bodies and offer control to ghosts
+
+
Crazylemon and Fox McCloud updated:
+
+ - Fixes toggles not properly saving
+
+
EvadableMoxie updated:
+
+ - Added the Nanotrasen Hospital Vessel Asclepius, able to be deployed by admins.
+ - Admin shuttle now requires ERT clearance instead of admin clearance.
+ - Admin shuttle now has a navigation computer and tiny fans at the airlock.
+
+
Fox McCloud updated:
+
+ - Fixes a few instances generating log spam relating to z-level tracking
+ - Fixes weird behavior with ghosts being able to trigger a few things by crossing over them
+ - Fixes drifting ghosts
+
+
Ionward updated:
+
+ - Updated the cautery sprite!
+
+
KasparoVy updated:
+
+ - Adds a verb to eyewear you can use to adjust them so they appear above or below masks. Discover interesting combinations and enjoy a cool look.
+
+
Kyep updated:
+
+ - Trying to latejoin a round with no open job slots now results in an informative error message, rather than broken-looking blank window.
+ - Added new bonus loadout items for higher-tier patrons. Also gave admins access to patron items, and ensured that during custom events, you see the custom event announcement when you connect.
+ - You can now identify when someone is using internals from a tank in their pocket, without having to remove the tank.
+ - punching a windoor no longer generates a runtime error.
+ - cryogenic_liquid/envenomed_filaments blobs no longer generate runtimes when their blob special attack hits mobs that do not process reagents
+ - fixed $5+ donors not getting extra loadout points.
+
+
Markolie updated:
+
+ - Ambient occlusion had been added to the game. This represents a shadowy effect on most objects. It can be turned off through the game preferences menu.
+ - Our lighting system has been updated to /tg/'s latest version. Hopefully this means we'll have less lag later in the round.
+ - Night vision has been modified. There are now three levels of night vision. Certain creatures that were previously able to toggle night vision can now switch between all levels. Thermals now give some night vision.
+ - Mesons now no longer fully light up non-visible turfs. It uses slight darkness instead.
+ - Syndicate operatives may now purchase a chameleon bundles (2TC), which allows them to disguise not just their jumpsuit, but all of their equipment. They can change individual clothing as well as the outfit as a whole.
+ - When using a voice changer, NTTC will no longer default to an "Unknown" job: it'll still use the assignment on your card to prevent meta-gaming. Always combine a voice changer and a Syndicate ID.
+ - Admins with advanced admin interaction toggled on can now interact with the small airlock buttons.
+ - The steel_rain runtime fix has been re-applied.
+ - The propulsion on the admin shuttles has been fixed. The shutters on the south side of the hospital shuttle now point the right way.
+ - Nuclear Operative reinforcements now spawn with a properly counted agent designation.
+ - Fixed an issue where a mob's sight wouldn't update properly in certain cases, such as being revived.
+ - Resolved an issue where the lobby would be bright white when being sent back.
+ - Resolved an issue where the ambient occlusion preference wouldn't update properly in the lobby.
+ - Resolved an issue where clicking on a windoor would no longer prevent it from auto-closing.
+ - When a nuclear operative chooses to play as the borg instead of operative using the cyborg teleporter, ghosts will now be informed of this in their acceptance message.
+ - Resolved an issue where cameras couldn't take pictures of non-dynamic lighting areas, such as the holodeck or space.
+ - Resolved an issue where mobs would appear above water.
+ - Resolved an issue where radiation storms would make lighting invisible in space.
+ - Simple mobs no longer retain their X-Ray upon being revived.
+ - Applying brute/fire damage through the View Variables menu for non-humans has been fixed.
+ - NTTC regex has been disabled due to an urgent security issue.
+
+
Mitchs98 updated:
+
+ - You can now order a Pig Crate from Cargo for 25 points.
+
+
TDSSS updated:
+
+ - typo on sst shuttle console
+ - opening turret covers now stay on top of their turret.
+
+
Twinmold93 updated:
+
+ - Adds Server Time to the Status Tab for Admins.
+
+
farie82 updated:
+
+ - Transforming into another species will now retain the items correctly. Example clings will keep their armblades and they won't get stuck with a non existing armblade they can't put back
+ - Devour and regurgitate use forcemove now. So no being buckled inside an alien
+
+
fludd12 updated:
+
+ - Project Mind now has a corollary ability, Scan Mind. Now communication can be two-way!
+
+
variableundefined updated:
+
+ - Simple animals actually use the new subsystem now
+ - What was NPCAI is now renamed to NPCPool - Its the functional equivalent of what it is in tg
+ - Simple animals actually run on subsystem instead of a process now.
+ - idleNPCpool has been added reducing performance impact of hostile simple animals
+ - NPCAI Process (That run both SNPC and SimpleAnimals) that was somehow left out by me
+ - SNPC & assocaited NPCAI Subsystem
+ - Some of space hotel's functions.
+ - Bodysnatch gland.
+ - process_ai has been deprecated
+
+
02 May 2019
AffectedArc07 updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 5ad4bdbcd9e..d0e51aa9571 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -10043,3 +10043,122 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Adds Lumi's vox suit fluff
uc_guy:
- bugfix: Players in the lobby no longer see cult speak.
+2019-05-10:
+ AffectedArc07:
+ - tweak: Removes an infinite loop in the code
+ - rscdel: Removes unused code
+ - tweak: Captains display case now actually has captains thumbprint lock on it
+ - tweak: Morgue updates happen slightly better now
+ - bugfix: Fixes a minor NTTC issue
+ Arkatos:
+ - rscadd: Patch Pack is now craftable with a cardboard, costs 2 cardboard sheets.
+ - tweak: Examine tooltip delay increased slightly
+ - bugfix: Examine tooltips now work properly on items in storage
+ - tweak: Full toolbelts now spawn with randomly a colored cable coil
+ - imageadd: Added inhand sprites for belts
+ - tweak: Species name now shows in a species theme color on examine
+ - imageadd: Added 4 new plushies
+ Couls:
+ - tweak: necromantic stone now forces the ghost back into the body as a skeleton
+ - rscadd: allow skeletons to give up their bodies and offer control to ghosts
+ Crazylemon and Fox McCloud:
+ - bugfix: Fixes toggles not properly saving
+ EvadableMoxie:
+ - rscadd: Added the Nanotrasen Hospital Vessel Asclepius, able to be deployed by
+ admins.
+ - tweak: Admin shuttle now requires ERT clearance instead of admin clearance.
+ - tweak: Admin shuttle now has a navigation computer and tiny fans at the airlock.
+ Fox McCloud:
+ - bugfix: Fixes a few instances generating log spam relating to z-level tracking
+ - bugfix: Fixes weird behavior with ghosts being able to trigger a few things by
+ crossing over them
+ - bugfix: Fixes drifting ghosts
+ Ionward:
+ - imageadd: Updated the cautery sprite!
+ KasparoVy:
+ - rscadd: Adds a verb to eyewear you can use to adjust them so they appear above
+ or below masks. Discover interesting combinations and enjoy a cool look.
+ Kyep:
+ - rscadd: Trying to latejoin a round with no open job slots now results in an informative
+ error message, rather than broken-looking blank window.
+ - rscadd: Added new bonus loadout items for higher-tier patrons. Also gave admins
+ access to patron items, and ensured that during custom events, you see the custom
+ event announcement when you connect.
+ - tweak: You can now identify when someone is using internals from a tank in their
+ pocket, without having to remove the tank.
+ - bugfix: punching a windoor no longer generates a runtime error.
+ - bugfix: cryogenic_liquid/envenomed_filaments blobs no longer generate runtimes
+ when their blob special attack hits mobs that do not process reagents
+ - bugfix: fixed $5+ donors not getting extra loadout points.
+ Markolie:
+ - rscadd: Ambient occlusion had been added to the game. This represents a shadowy
+ effect on most objects. It can be turned off through the game preferences menu.
+ - tweak: Our lighting system has been updated to /tg/'s latest version. Hopefully
+ this means we'll have less lag later in the round.
+ - tweak: Night vision has been modified. There are now three levels of night vision.
+ Certain creatures that were previously able to toggle night vision can now switch
+ between all levels. Thermals now give some night vision.
+ - tweak: Mesons now no longer fully light up non-visible turfs. It uses slight darkness
+ instead.
+ - rscadd: Syndicate operatives may now purchase a chameleon bundles (2TC), which
+ allows them to disguise not just their jumpsuit, but all of their equipment.
+ They can change individual clothing as well as the outfit as a whole.
+ - tweak: 'When using a voice changer, NTTC will no longer default to an "Unknown"
+ job: it''ll still use the assignment on your card to prevent meta-gaming. Always
+ combine a voice changer and a Syndicate ID.'
+ - tweak: Admins with advanced admin interaction toggled on can now interact with
+ the small airlock buttons.
+ - bugfix: The steel_rain runtime fix has been re-applied.
+ - bugfix: The propulsion on the admin shuttles has been fixed. The shutters on the
+ south side of the hospital shuttle now point the right way.
+ - bugfix: Nuclear Operative reinforcements now spawn with a properly counted agent
+ designation.
+ - bugfix: Fixed an issue where a mob's sight wouldn't update properly in certain
+ cases, such as being revived.
+ - bugfix: Resolved an issue where the lobby would be bright white when being sent
+ back.
+ - bugfix: Resolved an issue where the ambient occlusion preference wouldn't update
+ properly in the lobby.
+ - bugfix: Resolved an issue where clicking on a windoor would no longer prevent
+ it from auto-closing.
+ - bugfix: When a nuclear operative chooses to play as the borg instead of operative
+ using the cyborg teleporter, ghosts will now be informed of this in their acceptance
+ message.
+ - bugfix: Resolved an issue where cameras couldn't take pictures of non-dynamic
+ lighting areas, such as the holodeck or space.
+ - bugfix: Resolved an issue where mobs would appear above water.
+ - bugfix: Resolved an issue where radiation storms would make lighting invisible
+ in space.
+ - bugfix: Simple mobs no longer retain their X-Ray upon being revived.
+ - bugfix: Applying brute/fire damage through the View Variables menu for non-humans
+ has been fixed.
+ - rscdel: NTTC regex has been disabled due to an urgent security issue.
+ Mitchs98:
+ - rscadd: You can now order a Pig Crate from Cargo for 25 points.
+ TDSSS:
+ - bugfix: typo on sst shuttle console
+ - bugfix: opening turret covers now stay on top of their turret.
+ Twinmold93:
+ - rscadd: Adds Server Time to the Status Tab for Admins.
+ farie82:
+ - bugfix: Transforming into another species will now retain the items correctly.
+ Example clings will keep their armblades and they won't get stuck with a non
+ existing armblade they can't put back
+ - bugfix: Devour and regurgitate use forcemove now. So no being buckled inside an
+ alien
+ fludd12:
+ - rscadd: Project Mind now has a corollary ability, Scan Mind. Now communication
+ can be two-way!
+ variableundefined:
+ - tweak: Simple animals actually use the new subsystem now
+ - tweak: What was NPCAI is now renamed to NPCPool - Its the functional equivalent
+ of what it is in tg
+ - tweak: Simple animals actually run on subsystem instead of a process now.
+ - rscadd: idleNPCpool has been added reducing performance impact of hostile simple
+ animals
+ - rscdel: NPCAI Process (That run both SNPC and SimpleAnimals) that was somehow
+ left out by me
+ - rscdel: SNPC & assocaited NPCAI Subsystem
+ - rscdel: Some of space hotel's functions.
+ - rscdel: Bodysnatch gland.
+ - tweak: process_ai has been deprecated
diff --git a/html/changelogs/AutoChangeLog-pr-11261.yml b/html/changelogs/AutoChangeLog-pr-11261.yml
deleted file mode 100644
index 15595372438..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11261.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Couls"
-delete-after: True
-changes:
- - tweak: "necromantic stone now forces the ghost back into the body as a skeleton"
- - rscadd: "allow skeletons to give up their bodies and offer control to ghosts"
diff --git a/html/changelogs/AutoChangeLog-pr-11315.yml b/html/changelogs/AutoChangeLog-pr-11315.yml
deleted file mode 100644
index e8d1dacb7dd..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11315.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "farie82"
-delete-after: True
-changes:
- - bugfix: "Transforming into another species will now retain the items correctly. Example clings will keep their armblades and they won't get stuck with a non existing armblade they can't put back"
diff --git a/html/changelogs/AutoChangeLog-pr-11357.yml b/html/changelogs/AutoChangeLog-pr-11357.yml
deleted file mode 100644
index 61304092a00..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11357.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: "Markolie"
-delete-after: True
-changes:
- - rscadd: "Ambient occlusion had been added to the game. This represents a shadowy effect on most objects. It can be turned off through the game preferences menu."
- - tweak: "Our lighting system has been updated to /tg/'s latest version. Hopefully this means we'll have less lag later in the round."
- - tweak: "Night vision has been modified. There are now three levels of night vision. Certain creatures that were previously able to toggle night vision can now switch between all levels. Thermals now give some night vision."
- - tweak: "Mesons now no longer fully light up non-visible turfs. It uses slight darkness instead."
diff --git a/html/changelogs/AutoChangeLog-pr-11368.yml b/html/changelogs/AutoChangeLog-pr-11368.yml
new file mode 100644
index 00000000000..f2d543bae3a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11368.yml
@@ -0,0 +1,5 @@
+author: "AffectedArc07"
+delete-after: True
+changes:
+ - rscadd: "SSticker"
+ - tweak: "You can no longer force-start a round unless its fully initialised."
diff --git a/html/changelogs/AutoChangeLog-pr-11384.yml b/html/changelogs/AutoChangeLog-pr-11384.yml
deleted file mode 100644
index 1dee1b49d8e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11384.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Kyep"
-delete-after: True
-changes:
- - rscadd: "Trying to latejoin a round with no open job slots now results in an informative error message, rather than broken-looking blank window."
diff --git a/html/changelogs/AutoChangeLog-pr-11399.yml b/html/changelogs/AutoChangeLog-pr-11399.yml
deleted file mode 100644
index 44c51779cbf..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11399.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Kyep"
-delete-after: True
-changes:
- - rscadd: "Added new bonus loadout items for higher-tier patrons. Also gave admins access to patron items, and ensured that during custom events, you see the custom event announcement when you connect."
diff --git a/html/changelogs/AutoChangeLog-pr-11403.yml b/html/changelogs/AutoChangeLog-pr-11403.yml
deleted file mode 100644
index 2ffea4e8a9d..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11403.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Kyep"
-delete-after: True
-changes:
- - tweak: "You can now identify when someone is using internals from a tank in their pocket, without having to remove the tank."
diff --git a/html/changelogs/AutoChangeLog-pr-11415.yml b/html/changelogs/AutoChangeLog-pr-11415.yml
deleted file mode 100644
index 8a197f8f6f4..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11415.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Twinmold93"
-delete-after: True
-changes:
- - rscadd: "Adds Server Time to the Status Tab for Admins."
diff --git a/html/changelogs/AutoChangeLog-pr-11416.yml b/html/changelogs/AutoChangeLog-pr-11416.yml
deleted file mode 100644
index c3c444d9879..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11416.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "KasparoVy"
-delete-after: True
-changes:
- - rscadd: "Adds a verb to eyewear you can use to adjust them so they appear above or below masks. Discover interesting combinations and enjoy a cool look."
diff --git a/html/changelogs/AutoChangeLog-pr-11418.yml b/html/changelogs/AutoChangeLog-pr-11418.yml
deleted file mode 100644
index 8e9f296ca97..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11418.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Arkatos"
-delete-after: True
-changes:
- - rscadd: "Patch Pack is now craftable with a cardboard, costs 2 cardboard sheets."
diff --git a/html/changelogs/AutoChangeLog-pr-11425.yml b/html/changelogs/AutoChangeLog-pr-11425.yml
deleted file mode 100644
index f3ed1d5bd9e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11425.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Arkatos"
-delete-after: True
-changes:
- - tweak: "Examine tooltip delay increased slightly"
- - bugfix: "Examine tooltips now work properly on items in storage"
diff --git a/html/changelogs/AutoChangeLog-pr-11426.yml b/html/changelogs/AutoChangeLog-pr-11426.yml
deleted file mode 100644
index 49414869223..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11426.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Arkatos"
-delete-after: True
-changes:
- - tweak: "Full toolbelts now spawn with randomly a colored cable coil"
- - imageadd: "Added inhand sprites for belts"
diff --git a/html/changelogs/AutoChangeLog-pr-11427.yml b/html/changelogs/AutoChangeLog-pr-11427.yml
deleted file mode 100644
index 32e770e594f..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11427.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Arkatos"
-delete-after: True
-changes:
- - tweak: "Species name now shows in a species theme color on examine"
diff --git a/html/changelogs/AutoChangeLog-pr-11428.yml b/html/changelogs/AutoChangeLog-pr-11428.yml
deleted file mode 100644
index fe0d3f99aac..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11428.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Markolie"
-delete-after: True
-changes:
- - rscadd: "Syndicate operatives may now purchase a chameleon bundles (2TC), which allows them to disguise not just their jumpsuit, but all of their equipment. They can change individual clothing as well as the outfit as a whole."
- - tweak: "When using a voice changer, NTTC will no longer default to an \"Unknown\" job: it'll still use the assignment on your card to prevent meta-gaming. Always combine a voice changer and a Syndicate ID."
diff --git a/html/changelogs/AutoChangeLog-pr-11429.yml b/html/changelogs/AutoChangeLog-pr-11429.yml
deleted file mode 100644
index 86509436332..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11429.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Mitchs98"
-delete-after: True
-changes:
- - rscadd: "You can now order a Pig Crate from Cargo for 25 points."
diff --git a/html/changelogs/AutoChangeLog-pr-11431.yml b/html/changelogs/AutoChangeLog-pr-11431.yml
deleted file mode 100644
index d9f93831773..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11431.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Arkatos"
-delete-after: True
-changes:
- - imageadd: "Added 4 new plushies"
diff --git a/html/changelogs/AutoChangeLog-pr-11434.yml b/html/changelogs/AutoChangeLog-pr-11434.yml
deleted file mode 100644
index f07ba09cf41..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11434.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "TDSSS"
-delete-after: True
-changes:
- - bugfix: "typo on sst shuttle console"
diff --git a/html/changelogs/AutoChangeLog-pr-11440.yml b/html/changelogs/AutoChangeLog-pr-11440.yml
deleted file mode 100644
index 1ddb3e68464..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11440.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "farie82"
-delete-after: True
-changes:
- - bugfix: "Devour and regurgitate use forcemove now. So no being buckled inside an alien"
diff --git a/html/changelogs/AutoChangeLog-pr-11441.yml b/html/changelogs/AutoChangeLog-pr-11441.yml
deleted file mode 100644
index 083b619ed6d..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11441.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Markolie"
-delete-after: True
-changes:
- - tweak: "Admins with advanced admin interaction toggled on can now interact with the small airlock buttons."
diff --git a/html/changelogs/AutoChangeLog-pr-11442.yml b/html/changelogs/AutoChangeLog-pr-11442.yml
deleted file mode 100644
index 2cdaf2355fe..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11442.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "EvadableMoxie"
-delete-after: True
-changes:
- - rscadd: "Added the Nanotrasen Hospital Vessel Asclepius, able to be deployed by admins."
- - tweak: "Admin shuttle now requires ERT clearance instead of admin clearance."
- - tweak: "Admin shuttle now has a navigation computer and tiny fans at the airlock."
diff --git a/html/changelogs/AutoChangeLog-pr-11443.yml b/html/changelogs/AutoChangeLog-pr-11443.yml
deleted file mode 100644
index 5c3a9a1b8e2..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11443.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Kyep"
-delete-after: True
-changes:
- - bugfix: "punching a windoor no longer generates a runtime error."
diff --git a/html/changelogs/AutoChangeLog-pr-11445.yml b/html/changelogs/AutoChangeLog-pr-11445.yml
deleted file mode 100644
index 30b9ae088e8..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11445.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Kyep"
-delete-after: True
-changes:
- - bugfix: "cryogenic_liquid/envenomed_filaments blobs no longer generate runtimes when their blob special attack hits mobs that do not process reagents"
diff --git a/html/changelogs/AutoChangeLog-pr-11446.yml b/html/changelogs/AutoChangeLog-pr-11446.yml
deleted file mode 100644
index ac51997fc92..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11446.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ionward"
-delete-after: True
-changes:
- - imageadd: "Updated the cautery sprite!"
diff --git a/html/changelogs/AutoChangeLog-pr-11450.yml b/html/changelogs/AutoChangeLog-pr-11450.yml
deleted file mode 100644
index efa7b8c358e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11450.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-author: "variableundefined"
-delete-after: True
-changes:
- - tweak: "Simple animals actually use the new subsystem now"
- - tweak: "What was NPCAI is now renamed to NPCPool - Its the functional equivalent of what it is in tg"
- - tweak: "Simple animals actually run on subsystem instead of a process now."
- - rscadd: "idleNPCpool has been added reducing performance impact of hostile simple animals"
- - rscdel: "NPCAI Process (That run both SNPC and SimpleAnimals) that was somehow left out by me"
- - rscdel: "SNPC & assocaited NPCAI Subsystem"
- - rscdel: "Some of space hotel's functions."
- - rscdel: "Bodysnatch gland."
- - tweak: "process_ai has been deprecated"
diff --git a/html/changelogs/AutoChangeLog-pr-11451.yml b/html/changelogs/AutoChangeLog-pr-11451.yml
deleted file mode 100644
index 347ccdf9b19..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11451.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Markolie"
-delete-after: True
-changes:
- - bugfix: "The steel_rain runtime fix has been re-applied."
diff --git a/html/changelogs/AutoChangeLog-pr-11453.yml b/html/changelogs/AutoChangeLog-pr-11453.yml
deleted file mode 100644
index be5b75e4bfa..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11453.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Fox McCloud"
-delete-after: True
-changes:
- - bugfix: "Fixes a few instances generating log spam relating to z-level tracking"
diff --git a/html/changelogs/AutoChangeLog-pr-11455.yml b/html/changelogs/AutoChangeLog-pr-11455.yml
deleted file mode 100644
index a571ffc3c0b..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11455.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "AffectedArc07"
-delete-after: True
-changes:
- - tweak: "Removes an infinite loop in the code"
diff --git a/html/changelogs/AutoChangeLog-pr-11457.yml b/html/changelogs/AutoChangeLog-pr-11457.yml
deleted file mode 100644
index d7b6c6c7de2..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11457.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Markolie"
-delete-after: True
-changes:
- - bugfix: "The propulsion on the admin shuttles has been fixed. The shutters on the south side of the hospital shuttle now point the right way."
diff --git a/html/changelogs/AutoChangeLog-pr-11461.yml b/html/changelogs/AutoChangeLog-pr-11461.yml
deleted file mode 100644
index d65e90c7079..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11461.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Markolie"
-delete-after: True
-changes:
- - bugfix: "Nuclear Operative reinforcements now spawn with a properly counted agent designation."
diff --git a/html/changelogs/AutoChangeLog-pr-11463.yml b/html/changelogs/AutoChangeLog-pr-11463.yml
deleted file mode 100644
index dad85167b1a..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11463.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "AffectedArc07"
-delete-after: True
-changes:
- - rscdel: "Removes unused code"
diff --git a/html/changelogs/AutoChangeLog-pr-11467.yml b/html/changelogs/AutoChangeLog-pr-11467.yml
deleted file mode 100644
index ff6e7c5f739..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11467.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "AffectedArc07"
-delete-after: True
-changes:
- - tweak: "Captains display case now actually has captains thumbprint lock on it"
diff --git a/html/changelogs/AutoChangeLog-pr-11475.yml b/html/changelogs/AutoChangeLog-pr-11475.yml
deleted file mode 100644
index 9f7c02a26eb..00000000000
--- a/html/changelogs/AutoChangeLog-pr-11475.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "AffectedArc07"
-delete-after: True
-changes:
- - bugfix: "Fixes a minor NTTC issue"
diff --git a/html/changelogs/AutoChangeLog-pr-11483.yml b/html/changelogs/AutoChangeLog-pr-11483.yml
new file mode 100644
index 00000000000..635f5efede9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11483.yml
@@ -0,0 +1,6 @@
+author: "datlo"
+delete-after: True
+changes:
+ - bugfix: "The Syndicate will no longer hire golems as agents."
+ - tweak: "Banana juice and Banana honk will now heal everyone with the Comic Sans mutation instead of checking for the clown job"
+ - tweak: "Nothing will now check if the player has an active vow of silence instead of checking for the mime job"
diff --git a/html/changelogs/AutoChangeLog-pr-11508.yml b/html/changelogs/AutoChangeLog-pr-11508.yml
new file mode 100644
index 00000000000..ebe3ed56455
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11508.yml
@@ -0,0 +1,6 @@
+author: "datlo"
+delete-after: True
+changes:
+ - bugfix: "Ghosts will no longer get the wrong role offered when a nukie
+spawns a borg and will properly be informed whether they will spawn as a
+nuke ops or a syndi cyborg."
diff --git a/html/changelogs/AutoChangeLog-pr-11523.yml b/html/changelogs/AutoChangeLog-pr-11523.yml
new file mode 100644
index 00000000000..654203e359b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11523.yml
@@ -0,0 +1,4 @@
+author: "Fox McCloud"
+delete-after: True
+changes:
+ - bugfix: "Future proofs the coming Ticker subsystem"
diff --git a/html/nttc/dist/index.html b/html/nttc/dist/index.html
index a8a7a17f1e3..ef7d917b471 100644
--- a/html/nttc/dist/index.html
+++ b/html/nttc/dist/index.html
@@ -13,7 +13,7 @@
Home
Configuration
- Regex
+
Firewall
1337
NTTC
diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi
index 0b34b6747ba..6f2b1ce4806 100644
Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ
diff --git a/paradise.dme b/paradise.dme
index b08ff76020a..46bee7e20b6 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -199,7 +199,6 @@
#include "code\controllers\master.dm"
#include "code\controllers\subsystem.dm"
#include "code\controllers\verbs.dm"
-#include "code\controllers\Processes\ticker.dm"
#include "code\controllers\ProcessScheduler\core\process.dm"
#include "code\controllers\ProcessScheduler\core\processScheduler.dm"
#include "code\controllers\subsystem\air.dm"
@@ -228,6 +227,7 @@
#include "code\controllers\subsystem\spacedrift.dm"
#include "code\controllers\subsystem\sun.dm"
#include "code\controllers\subsystem\throwing.dm"
+#include "code\controllers\subsystem\ticker.dm"
#include "code\controllers\subsystem\timer.dm"
#include "code\controllers\subsystem\vote.dm"
#include "code\controllers\subsystem\weather.dm"
@@ -448,7 +448,6 @@
#include "code\game\dna\genes\vg_powers.dm"
#include "code\game\gamemodes\factions.dm"
#include "code\game\gamemodes\game_mode.dm"
-#include "code\game\gamemodes\gameticker.dm"
#include "code\game\gamemodes\intercept_report.dm"
#include "code\game\gamemodes\objective.dm"
#include "code\game\gamemodes\scoreboard.dm"