"
var/job_count = 0
@@ -428,7 +442,7 @@
popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc
-/mob/new_player/proc/create_character(transfer_after)
+/mob/dead/new_player/proc/create_character(transfer_after)
spawning = 1
close_spawn_windows()
@@ -450,24 +464,24 @@
if(transfer_after)
transfer_character()
-/mob/new_player/proc/transfer_character()
+/mob/dead/new_player/proc/transfer_character()
. = new_character
if(.)
new_character.key = key //Manually transfer the key to log them in
new_character.stopLobbySound()
-/mob/new_player/proc/ViewManifest()
+/mob/dead/new_player/proc/ViewManifest()
var/dat = ""
dat += "
Crew Manifest
"
dat += data_core.get_manifest(OOC = 1)
src << browse(dat, "window=manifest;size=387x420;can_close=1")
-/mob/new_player/Move()
+/mob/dead/new_player/Move()
return 0
-/mob/new_player/proc/close_spawn_windows()
+/mob/dead/new_player/proc/close_spawn_windows()
src << browse(null, "window=latechoices") //closes late choices window
src << browse(null, "window=playersetup") //closes the player setup window
diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/dead/new_player/poll.dm
similarity index 95%
rename from code/modules/mob/new_player/poll.dm
rename to code/modules/mob/dead/new_player/poll.dm
index 80a43d5be40..2f77767558f 100644
--- a/code/modules/mob/new_player/poll.dm
+++ b/code/modules/mob/dead/new_player/poll.dm
@@ -2,7 +2,7 @@
var/optionid
var/optiontext
-/mob/new_player/proc/handle_player_polling()
+/mob/dead/new_player/proc/handle_player_polling()
if(!dbcon.IsConnected())
to_chat(usr, "
Failed to establish database connection.")
return
@@ -19,7 +19,7 @@
output += ""
src << browse(output,"window=playerpolllist;size=500x300")
-/mob/new_player/proc/poll_player(pollid)
+/mob/dead/new_player/proc/poll_player(pollid)
if(!pollid)
return
if (!dbcon.Connect())
@@ -323,7 +323,7 @@
src << browse(output,"window=playerpoll;size=500x500")
return
-/mob/new_player/proc/poll_check_voted(pollid, text = FALSE)
+/mob/dead/new_player/proc/poll_check_voted(pollid, text = FALSE)
var/table = "poll_vote"
if (text)
table = "poll_textreply"
@@ -342,7 +342,7 @@
return .
-/mob/new_player/proc/vote_rig_check()
+/mob/dead/new_player/proc/vote_rig_check()
if (usr != src)
if (!usr || !src)
return 0
@@ -354,7 +354,7 @@
return 0
return 1
-/mob/new_player/proc/vote_valid_check(pollid, holder, type)
+/mob/dead/new_player/proc/vote_valid_check(pollid, holder, type)
if (!dbcon.Connect())
to_chat(src, "
Failed to establish database connection.")
return 0
@@ -369,7 +369,7 @@
return 0
return 1
-/mob/new_player/proc/vote_on_irv_poll(pollid, list/votelist)
+/mob/dead/new_player/proc/vote_on_irv_poll(pollid, list/votelist)
if (!dbcon.Connect())
to_chat(src, "
Failed to establish database connection.")
return 0
@@ -438,7 +438,7 @@
return 1
-/mob/new_player/proc/vote_on_poll(pollid, optionid)
+/mob/dead/new_player/proc/vote_on_poll(pollid, optionid)
if (!dbcon.Connect())
to_chat(src, "
Failed to establish database connection.")
return 0
@@ -458,7 +458,7 @@
usr << browse(null,"window=playerpoll")
return 1
-/mob/new_player/proc/log_text_poll_reply(pollid, replytext)
+/mob/dead/new_player/proc/log_text_poll_reply(pollid, replytext)
if (!dbcon.Connect())
to_chat(src, "
Failed to establish database connection.")
return 0
@@ -485,7 +485,7 @@
usr << browse(null,"window=playerpoll")
return 1
-/mob/new_player/proc/vote_on_numval_poll(pollid, optionid, rating)
+/mob/dead/new_player/proc/vote_on_numval_poll(pollid, optionid, rating)
if (!dbcon.Connect())
to_chat(src, "
Failed to establish database connection.")
return 0
@@ -512,7 +512,7 @@
usr << browse(null,"window=playerpoll")
return 1
-/mob/new_player/proc/vote_on_multi_poll(pollid, optionid)
+/mob/dead/new_player/proc/vote_on_multi_poll(pollid, optionid)
if (!dbcon.Connect())
to_chat(src, "
Failed to establish database connection.")
return 0
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm
similarity index 100%
rename from code/modules/mob/new_player/preferences_setup.dm
rename to code/modules/mob/dead/new_player/preferences_setup.dm
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm
similarity index 100%
rename from code/modules/mob/new_player/sprite_accessories.dm
rename to code/modules/mob/dead/new_player/sprite_accessories.dm
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 3cefc25646a..a24809bbb20 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -59,7 +59,7 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER
// of the mob
var/deadchat_name
-/mob/dead/observer/New(mob/body)
+/mob/dead/observer/Initialize()
invisibility = observer_default_invisibility
verbs += /mob/dead/observer/proc/dead_tele
@@ -79,6 +79,7 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER
updateallghostimages()
var/turf/T
+ var/mob/body = loc
if(ismob(body))
T = get_turf(body) //Where is the body located?
logging = body.logging //preserve our logs by copying them to our ghost
@@ -671,12 +672,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/atom/movable/target = locate(href_list["follow"])
if(istype(target) && (target != src))
ManualFollow(target)
- if(href_list["jump_to_turf"])
- var/turf/target = locate(href_list["jump_to_turf"])
+ return
+ if(href_list["x"] && href_list["y"] && href_list["z"])
+ var/tx = text2num(href_list["x"])
+ var/ty = text2num(href_list["y"])
+ var/tz = text2num(href_list["z"])
+ var/turf/target = locate(tx, ty, tz)
if(istype(target))
forceMove(target)
+ return
if(href_list["reenter"])
reenter_corpse()
+ return
//We don't want to update the current var
//But we will still carry a mind.
diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/interactive.dm
index e07c95b7f94..0363520f4c8 100644
--- a/code/modules/mob/interactive.dm
+++ b/code/modules/mob/interactive.dm
@@ -381,7 +381,7 @@
faction -= "neutral"
faction += "hostile"
-/mob/living/carbon/human/interactive/New()
+/mob/living/carbon/human/interactive/Initialize()
..()
set_species(/datum/species/synth)
@@ -1605,13 +1605,13 @@
nearby += M
//END OF MODULES
-/mob/living/carbon/human/interactive/angry/New()
+/mob/living/carbon/human/interactive/angry/Initialize()
TRAITS |= TRAIT_ROBUST
TRAITS |= TRAIT_MEAN
faction += "bot_angry"
..()
-/mob/living/carbon/human/interactive/friendly/New()
+/mob/living/carbon/human/interactive/friendly/Initialize()
TRAITS |= TRAIT_FRIENDLY
TRAITS |= TRAIT_UNROBUST
faction += "bot_friendly"
@@ -1619,7 +1619,7 @@
functions -= "combat"
..()
-/mob/living/carbon/human/interactive/greytide/New()
+/mob/living/carbon/human/interactive/greytide/Initialize()
TRAITS |= TRAIT_ROBUST
TRAITS |= TRAIT_MEAN
TRAITS |= TRAIT_THIEVING
@@ -1631,7 +1631,7 @@
..()
//Walk softly and carry a big stick
-/mob/living/carbon/human/interactive/robust/New()
+/mob/living/carbon/human/interactive/robust/Initialize()
TRAITS |= TRAIT_FRIENDLY
TRAITS |= TRAIT_ROBUST
TRAITS |= TRAIT_SMART
diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm
index c8e797b7572..089efe4444f 100644
--- a/code/modules/mob/living/brain/brain.dm
+++ b/code/modules/mob/living/brain/brain.dm
@@ -10,13 +10,13 @@
stat = DEAD //we start dead by default
see_invisible = SEE_INVISIBLE_LIVING
-/mob/living/brain/New(loc)
+/mob/living/brain/Initialize()
..()
create_dna(src)
stored_dna.initialize_dna(random_blood_type())
if(isturf(loc)) //not spawned in an MMI or brain organ (most likely adminspawned)
var/obj/item/organ/brain/OB = new(loc) //we create a new brain organ for it.
- src.loc = OB
+ loc = OB
OB.brainmob = src
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index d0d36c18e9e..3dd354050f9 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -33,7 +33,7 @@
var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?")
-/mob/living/carbon/alien/New()
+/mob/living/carbon/alien/Initialize()
verbs += /mob/living/proc/mob_sleep
verbs += /mob/living/proc/lay_down
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
index e68e80cc0c3..6069f5e444c 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
@@ -6,7 +6,7 @@
icon_state = "aliend"
-/mob/living/carbon/alien/humanoid/drone/New()
+/mob/living/carbon/alien/humanoid/drone/Initialize()
AddAbility(new/obj/effect/proc_holder/alien/evolve(null))
..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
index c2a63144b11..90d4ced85fc 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
@@ -7,7 +7,7 @@
-/mob/living/carbon/alien/humanoid/royal/praetorian/New()
+/mob/living/carbon/alien/humanoid/royal/praetorian/Initialize()
real_name = name
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 7183730c5e7..f3acaa9d529 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -6,7 +6,7 @@
icon_state = "aliens"
-/mob/living/carbon/alien/humanoid/sentinel/New()
+/mob/living/carbon/alien/humanoid/sentinel/Initialize()
AddAbility(new /obj/effect/proc_holder/alien/sneak)
..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 5ebb00e0092..6393ad49695 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -21,7 +21,7 @@
//This is fine right now, if we're adding organ specific damage this needs to be updated
-/mob/living/carbon/alien/humanoid/New()
+/mob/living/carbon/alien/humanoid/Initialize()
AddAbility(new/obj/effect/proc_holder/alien/regurgitate(null))
..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index ef4c85a58b6..2ce6ea31926 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -44,7 +44,7 @@
owner.remove_alt_appearance("smallqueen")
small = 0
-/mob/living/carbon/alien/humanoid/royal/queen/New()
+/mob/living/carbon/alien/humanoid/royal/queen/Initialize()
//there should only be one queen
for(var/mob/living/carbon/alien/humanoid/royal/queen/Q in living_mob_list)
if(Q == src)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 52ffa8bdf7c..2bbc0308808 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -18,7 +18,7 @@
//This is fine right now, if we're adding organ specific damage this needs to be updated
-/mob/living/carbon/alien/larva/New()
+/mob/living/carbon/alien/larva/Initialize()
AddAbility(new/obj/effect/proc_holder/alien/hide(null))
AddAbility(new/obj/effect/proc_holder/alien/larva_evolve(null))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 3e276c31d2f..f21aff65d10 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -1,7 +1,7 @@
/mob/living/carbon
blood_volume = BLOOD_VOLUME_NORMAL
-/mob/living/carbon/New()
+/mob/living/carbon/Initialize()
create_reagents(1000)
update_body_parts() //to update the carbon's new bodyparts appearance
..()
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index eb88ca12820..18db161a6b9 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -10,7 +10,7 @@
return number
/mob/living/carbon/get_ear_protection()
- if(head && (head.flags & HEADBANGPROTECT))
+ if(head && HAS_SECONDARY_FLAG(head, BANG_PROTECT))
return 1
/mob/living/carbon/check_projectile_dismemberment(obj/item/projectile/P, def_zone)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index cfa0a04136f..14a63390f87 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -11,9 +11,13 @@
real_name = "Test Dummy"
status_flags = GODMODE|CANPUSH
+/mob/living/carbon/human/dummy/New(loc)
+ ..()
+ if(!initialized)
+ args[1] = FALSE
+ Initialize(arglist(args))
-
-/mob/living/carbon/human/New()
+/mob/living/carbon/human/Initialize()
verbs += /mob/living/proc/mob_sleep
verbs += /mob/living/proc/lay_down
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index e86af4f461c..4054803b278 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -47,7 +47,7 @@
return number
/mob/living/carbon/human/get_ear_protection()
- if((ears && (ears.flags & EARBANGPROTECT)) || (head && (head.flags & HEADBANGPROTECT)))
+ if((ears && HAS_SECONDARY_FLAG(ears, BANG_PROTECT)) || (head && HAS_SECONDARY_FLAG(head, BANG_PROTECT)))
return 1
/mob/living/carbon/human/on_hit(obj/item/projectile/P)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index f63a72bb37f..c06a9cd6b30 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -887,7 +887,7 @@
if(H.back)
. += H.back.slowdown
for(var/obj/item/I in H.held_items)
- if(I.flags & HANDSLOW)
+ if(HAS_SECONDARY_FLAG(I, SLOWS_WHILE_IN_HAND))
. += I.slowdown
var/health_deficiency = (100 - H.health + H.staminaloss)
var/hungry = (500 - H.nutrition) / 5 // So overeat would be 100 and default level would be 80
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index de3210f1a0d..20798dcb47b 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -31,7 +31,7 @@
H.nutrition += light_amount * 10
if(H.nutrition > NUTRITION_LEVEL_FULL)
H.nutrition = NUTRITION_LEVEL_FULL
- if(light_amount > 2) //if there's enough light, heal
+ if(light_amount > 0.2) //if there's enough light, heal
H.heal_overall_damage(1,1)
H.adjustToxLoss(-1)
H.adjustOxyLoss(-1)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 548b5aab3ad..156ac27da66 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -18,7 +18,7 @@
-/mob/living/carbon/monkey/New()
+/mob/living/carbon/monkey/Initialize()
verbs += /mob/living/proc/mob_sleep
verbs += /mob/living/proc/lay_down
diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm
index 995c30f6fed..073a0634518 100644
--- a/code/modules/mob/living/carbon/monkey/punpun.dm
+++ b/code/modules/mob/living/carbon/monkey/punpun.dm
@@ -9,7 +9,7 @@
var/list/pet_monkey_names = list("Pun Pun", "Bubbles", "Mojo", "George", "Darwin", "Aldo", "Caeser", "Kanzi", "Kong", "Terk", "Grodd", "Mala", "Bojangles", "Coco", "Able", "Baker", "Scatter", "Norbit", "Travis")
var/list/rare_pet_monkey_names = list("Professor Bobo", "Deempisi's Revenge", "Furious George", "King Louie", "Dr. Zaius", "Jimmy Rustles", "Dinner", "Lanky")
-/mob/living/carbon/monkey/punpun/New()
+/mob/living/carbon/monkey/punpun/Initialize()
Read_Memory()
if(ancestor_name)
name = ancestor_name
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index b59082133b3..51554f848f1 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,4 +1,4 @@
-/mob/living/New()
+/mob/living/Initialize()
. = ..()
generateStaticOverlay()
if(staticOverlays.len)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 6e681dd0f09..d1dcecca359 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -85,7 +85,7 @@ var/list/ai_list = list()
var/obj/structure/AIcore/deactivated/linked_core //For exosuit control
-/mob/living/silicon/ai/New(loc, datum/ai_laws/L, mob/target_ai)
+/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai)
..()
if(!target_ai) //If there is no player/brain inside.
new/obj/structure/AIcore/deactivated(loc) //New empty terminal.
@@ -910,7 +910,7 @@ var/list/ai_list = list()
/mob/living/silicon/ai/resist()
return
-/mob/living/silicon/ai/spawned/New(loc, datum/ai_laws/L, mob/target_ai)
+/mob/living/silicon/ai/spawned/Initialize(mapload, datum/ai_laws/L, mob/target_ai)
if(!target_ai)
target_ai = src //cheat! just give... ourselves as the spawned AI, because that's technically correct
..()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index e80506e418c..59d901cb88b 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -81,7 +81,8 @@
pai_list -= src
..()
-/mob/living/silicon/pai/New(var/obj/item/device/paicard/P)
+/mob/living/silicon/pai/Initialize()
+ var/obj/item/device/paicard/P = loc
START_PROCESSING(SSfastprocess, src)
pai_list += src
make_laws()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 4ec42454fea..97c4fb5c98b 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -93,7 +93,7 @@
buckle_lying = FALSE
can_ride_typecache = list(/mob/living/carbon/human)
-/mob/living/silicon/robot/New(loc)
+/mob/living/silicon/robot/Initialize(mapload)
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -816,7 +816,7 @@
Help the operatives secure the disk at all costs!"
var/set_module = /obj/item/weapon/robot_module/syndicate
-/mob/living/silicon/robot/syndicate/New(loc)
+/mob/living/silicon/robot/syndicate/Initialize()
..()
cell.maxcharge = 25000
cell.charge = 25000
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index eb188bb3662..ed001610136 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -39,7 +39,7 @@
var/law_change_counter = 0
-/mob/living/silicon/New()
+/mob/living/silicon/Initialize()
..()
silicon_mobs += src
var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC]
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 99f25ef33d6..9f746c0f5b5 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -114,7 +114,7 @@
bot_reset() //Resets an AI's call, should it exist.
update_icon()
-/mob/living/simple_animal/bot/New()
+/mob/living/simple_animal/bot/Initialize()
..()
access_card = new /obj/item/weapon/card/id(src)
//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first.
@@ -800,7 +800,7 @@ Pass a positive integer as an argument to override a bot's default speed.
use_power = 0
var/mob/living/simple_animal/bot/owner = null
-/obj/machinery/bot_core/New(loc)
+/obj/machinery/bot_core/Initialize()
..()
owner = loc
if(!istype(owner))
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index 0a221d8fd82..15612fa82c2 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -31,7 +31,7 @@
var/next_dest
var/next_dest_loc
-/mob/living/simple_animal/bot/cleanbot/New()
+/mob/living/simple_animal/bot/cleanbot/Initialize()
..()
get_targets()
icon_state = "cleanbot[on]"
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index 136527098b1..fc67908f46d 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -42,7 +42,7 @@
var/shoot_sound = 'sound/weapons/Taser.ogg'
-/mob/living/simple_animal/bot/ed209/New(loc,created_name,created_lasercolor)
+/mob/living/simple_animal/bot/ed209/Initialize(mapload,created_name,created_lasercolor)
..()
if(created_name)
name = created_name
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index 75425e0981a..61fe93792b3 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -38,7 +38,7 @@
#define REPLACE_TILE 6
#define TILE_EMAG 7
-/mob/living/simple_animal/bot/floorbot/New()
+/mob/living/simple_animal/bot/floorbot/Initialize()
..()
update_icon()
var/datum/job/engineer/J = new/datum/job/engineer
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index d51d45b85b6..0f6c3a76d83 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -85,7 +85,7 @@
else
icon_state = "medibot1"
-/mob/living/simple_animal/bot/medbot/New()
+/mob/living/simple_animal/bot/medbot/Initialize()
..()
update_icon()
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index c1bd34f028f..50fe9bc4102 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -48,7 +48,7 @@ var/global/mulebot_count = 0
var/obj/item/weapon/stock_parts/cell/cell
var/bloodiness = 0
-/mob/living/simple_animal/bot/mulebot/New()
+/mob/living/simple_animal/bot/mulebot/Initialize()
..()
wires = new /datum/wires/mulebot(src)
var/datum/job/cargo_tech/J = new/datum/job/cargo_tech
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 60854b5be06..3478458d40f 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -52,7 +52,7 @@
desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment."
radio_channel = "AI Private"
-/mob/living/simple_animal/bot/secbot/New()
+/mob/living/simple_animal/bot/secbot/Initialize()
..()
icon_state = "secbot[on]"
spawn(3)
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 390a875ea96..886c7db33e7 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -32,7 +32,7 @@
var/playstyle_string = "
You are a generic construct! Your job is to not exist, and you should probably adminhelp this."
-/mob/living/simple_animal/hostile/construct/New()
+/mob/living/simple_animal/hostile/construct/Initialize()
..()
for(var/spell in construct_spells)
AddSpell(new spell(null))
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 869d067cd79..36ad869b051 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -24,7 +24,7 @@
verb_exclaim = "flutters intensely"
verb_yell = "flutters intensely"
-/mob/living/simple_animal/butterfly/New()
+/mob/living/simple_animal/butterfly/Initialize()
..()
var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 46c53a0132b..29143ac6999 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -30,7 +30,7 @@
var/mob/living/simple_animal/mouse/movement_target
gold_core_spawnable = 2
-/mob/living/simple_animal/pet/cat/New()
+/mob/living/simple_animal/pet/cat/Initialize()
..()
verbs += /mob/living/proc/lay_down
@@ -85,7 +85,7 @@
var/cats_deployed = 0
var/memory_saved = 0
-/mob/living/simple_animal/pet/cat/Runtime/New()
+/mob/living/simple_animal/pet/cat/Runtime/Initialize()
if(prob(5))
icon_state = "original"
icon_living = "original"
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 2a7338c5eaa..377acecd613 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -43,7 +43,7 @@
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug = 3)
gold_core_spawnable = 2
-/mob/living/simple_animal/pet/dog/corgi/New()
+/mob/living/simple_animal/pet/dog/corgi/Initialize()
..()
regenerate_icons()
@@ -281,7 +281,7 @@
var/memory_saved = 0
var/saved_head //path
-/mob/living/simple_animal/pet/dog/corgi/Ian/New()
+/mob/living/simple_animal/pet/dog/corgi/Ian/Initialize()
..()
//parent call must happen first to ensure IAN
//is not in nullspace when child puppies spawn
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 53d9f359391..6d23f54150a 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -68,7 +68,7 @@
var/hacked = 0 //If we have laws to destroy the station
var/can_be_held = TRUE //if assholes can pick us up
-/mob/living/simple_animal/drone/New()
+/mob/living/simple_animal/drone/Initialize()
. = ..()
access_card = new /obj/item/weapon/card/id(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index e2a991ba265..c56d679a627 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -30,7 +30,7 @@
seeStatic = 0 //Our programming is superior.
hacked = TRUE
-/mob/living/simple_animal/drone/syndrone/New()
+/mob/living/simple_animal/drone/syndrone/Initialize()
..()
internal_storage.hidden_uplink.telecrystals = 10
@@ -43,7 +43,7 @@
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
default_storage = /obj/item/device/radio/uplink/nuclear
-/mob/living/simple_animal/drone/syndrone/badass/New()
+/mob/living/simple_animal/drone/syndrone/badass/Initialize()
..()
internal_storage.hidden_uplink.telecrystals = 30
var/obj/item/weapon/implant/weapons_auth/W = new/obj/item/weapon/implant/weapons_auth(src)
@@ -52,7 +52,7 @@
/mob/living/simple_animal/drone/snowflake
default_hatmask = /obj/item/clothing/head/chameleon/drone
-/mob/living/simple_animal/drone/snowflake/New()
+/mob/living/simple_animal/drone/snowflake/Initialize()
..()
desc += " This drone appears to have a complex holoprojector built on its 'head'."
@@ -76,7 +76,7 @@
default_hatmask = null
picked = TRUE
-/mob/living/simple_animal/drone/polymorphed/New()
+/mob/living/simple_animal/drone/polymorphed/Initialize()
. = ..()
liberate()
visualAppearence = pick(MAINTDRONE, REPAIRDRONE, SCOUTDRONE)
@@ -126,7 +126,7 @@
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost proselytizer and slab in its box
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/admin
-/mob/living/simple_animal/drone/cogscarab/New()
+/mob/living/simple_animal/drone/cogscarab/Initialize()
. = ..()
set_light(2, 0.5)
qdel(access_card) //we don't have free access
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 4035b06a9be..6a132cf8d0e 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -29,7 +29,7 @@
blood_volume = BLOOD_VOLUME_NORMAL
var/obj/item/udder/udder = null
-/mob/living/simple_animal/hostile/retaliate/goat/New()
+/mob/living/simple_animal/hostile/retaliate/goat/Initialize()
udder = new()
..()
/mob/living/simple_animal/hostile/retaliate/goat/Destroy()
@@ -106,7 +106,7 @@
gold_core_spawnable = 2
blood_volume = BLOOD_VOLUME_NORMAL
-/mob/living/simple_animal/cow/New()
+/mob/living/simple_animal/cow/Initialize()
udder = new()
..()
@@ -181,7 +181,7 @@
mob_size = MOB_SIZE_TINY
gold_core_spawnable = 2
-/mob/living/simple_animal/chick/New()
+/mob/living/simple_animal/chick/Initialize()
..()
pixel_x = rand(-6, 6)
pixel_y = rand(0, 10)
@@ -238,7 +238,7 @@ var/global/chicken_count = 0
var/list/validColors = list("brown","black","white")
gold_core_spawnable = 2
-/mob/living/simple_animal/chicken/New()
+/mob/living/simple_animal/chicken/Initialize()
..()
if(!body_color)
body_color = pick(validColors)
@@ -297,7 +297,7 @@ var/global/chicken_count = 0
/obj/item/udder
name = "udder"
-/obj/item/udder/New()
+/obj/item/udder/Initialize()
reagents = new(50)
reagents.my_atom = src
reagents.add_reagent("milk", 20)
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index e22590b56b5..1189273adbe 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -25,7 +25,7 @@
gold_core_spawnable = 2
var/chew_probability = 1
-/mob/living/simple_animal/mouse/New()
+/mob/living/simple_animal/mouse/Initialize()
..()
if(!body_color)
body_color = pick( list("brown","gray","white") )
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index 229218ea7da..baad2da95cf 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -29,7 +29,7 @@
else
..()
-/mob/living/simple_animal/pet/New()
+/mob/living/simple_animal/pet/Initialize()
..()
if(pcollar)
pcollar = new(src)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 5a83efc67f6..665a227a4ee 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -50,7 +50,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
var/tech_fluff_string = "
BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!"
var/carp_fluff_string = "
CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP"
-/mob/living/simple_animal/hostile/guardian/New(loc, theme)
+/mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme)
parasites |= src
setthemename(theme)
@@ -659,7 +659,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
/obj/item/weapon/storage/box/syndie_kit/guardian
name = "holoparasite injector kit"
-/obj/item/weapon/storage/box/syndie_kit/guardian/New()
+/obj/item/weapon/storage/box/syndie_kit/guardian/Initialize()
..()
new /obj/item/weapon/guardiancreator/tech/choose/traitor(src)
new /obj/item/weapon/paper/guardian(src)
diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
index a794a9420a1..3baafb6c797 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
@@ -16,7 +16,7 @@
var/obj/screen/alert/canstealthalert
var/obj/screen/alert/instealthalert
-/mob/living/simple_animal/hostile/guardian/assassin/New()
+/mob/living/simple_animal/hostile/guardian/assassin/Initialize()
..()
stealthcooldown = 0
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index afffb626506..9313d1311a7 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -15,7 +15,7 @@
var/beacon_cooldown = 0
var/toggle = FALSE
-/mob/living/simple_animal/hostile/guardian/healer/New()
+/mob/living/simple_animal/hostile/guardian/healer/Initialize()
..()
var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED]
medsensor.add_hud_to(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index f01ff29a220..fba21e36637 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -56,7 +56,7 @@
return 1
-/mob/living/simple_animal/hostile/poison/bees/New()
+/mob/living/simple_animal/hostile/poison/bees/Initialize()
..()
generate_bee_visuals()
@@ -209,7 +209,7 @@
BB.bees |= src
beehome = BB
-/mob/living/simple_animal/hostile/poison/bees/toxin/New()
+/mob/living/simple_animal/hostile/poison/bees/toxin/Initialize()
. = ..()
var/datum/reagent/R = pick(typesof(/datum/reagent/toxin))
assign_reagent(chemical_reagents_list[initial(R.id)])
@@ -283,12 +283,12 @@
..()
-/obj/item/queen_bee/bought/New()
+/obj/item/queen_bee/bought/Initialize()
..()
queen = new(src)
/obj/item/queen_bee/Destroy()
- qdel(queen)
+ QDEL_NULL(queen)
return ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm
index 77209751fb9..154afc47bc9 100644
--- a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm
@@ -11,7 +11,7 @@
var/point_regen_delay = 1
-/mob/living/simple_animal/hostile/boss/New()
+/mob/living/simple_animal/hostile/boss/Initialize()
..()
atb = new()
@@ -90,7 +90,7 @@
/datum/boss_active_timed_battle/New()
..()
- SSobj.processing.Add(src)
+ START_PROCESSING(SSobj, src)
/datum/boss_active_timed_battle/proc/assign_abilities(list/L)
diff --git a/code/modules/mob/living/simple_animal/hostile/flan.dm b/code/modules/mob/living/simple_animal/hostile/flan.dm
index 1d0bfd9aac8..c77fff881e2 100644
--- a/code/modules/mob/living/simple_animal/hostile/flan.dm
+++ b/code/modules/mob/living/simple_animal/hostile/flan.dm
@@ -34,7 +34,7 @@
var/spelldamage = 15
var/spellcasttime = 15 //if you varedit this also varedit ranged_cooldown_time else the mob will attack again before the spell hits, looking weird but still working
-/mob/living/simple_animal/hostile/flan/New() //Required for the inheritance of casting animations.
+/mob/living/simple_animal/hostile/flan/Initialize() //Required for the inheritance of casting animations.
..()
casting = 0
icon_state = "[initial(icon_state)][casting]"
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index c4f00da7866..7c751f70f4d 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -28,7 +28,7 @@
del_on_death = 1
loot = list(/obj/effect/decal/cleanable/robot_debris)
-/mob/living/simple_animal/hostile/hivebot/New()
+/mob/living/simple_animal/hostile/hivebot/Initialize()
..()
deathmessage = "[src] blows apart!"
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index aac60f82fe5..13fb015cdac 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -54,7 +54,7 @@
var/lose_patience_timeout = 300 //30 seconds by default, so there's no major changes to AI behaviour, beyond actually bailing if stuck forever
-/mob/living/simple_animal/hostile/New()
+/mob/living/simple_animal/hostile/Initialize()
..()
if(!targets_from)
@@ -103,10 +103,8 @@
//////////////HOSTILE MOB TARGETTING AND AGGRESSION////////////
/mob/living/simple_animal/hostile/proc/ListTargets()//Step 1, find out what we can see
- . = list()
if(!search_objects)
- var/list/Mobs = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide
- . += Mobs
+ . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden))
@@ -114,8 +112,7 @@
if(can_see(targets_from, HM, vision_range))
. += HM
else
- var/list/Objects = oview(vision_range, targets_from)
- . += Objects
+ . = oview(vision_range, targets_from)
/mob/living/simple_animal/hostile/proc/FindTarget(var/list/possible_targets, var/HasTargetsList = 0)//Step 2, filter down possible targets to things we actually care about
. = list()
@@ -438,4 +435,4 @@
/mob/living/simple_animal/hostile/proc/RegainSearchObjects(value)
if(!value)
value = initial(search_objects)
- search_objects = value
\ No newline at end of file
+ search_objects = value
diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
index 7f6419fc2fe..5335cd7e350 100644
--- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
@@ -39,7 +39,7 @@
spawn_mecha_type = null
search_objects = 2
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/New()
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize()
..()
wanted_objects = typecacheof(/obj/mecha/combat, ignore_root_path=TRUE)
@@ -59,7 +59,7 @@
faction = list("nanotrasen")
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/New()
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Initialize()
..()
if(spawn_mecha_type)
var/obj/mecha/M = new spawn_mecha_type (get_turf(src))
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index fff83e9ecdd..3516cb14927 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -103,7 +103,7 @@ Difficulty: Hard
INVOKE_ASYNC(src, .proc/warp_charge)
-/mob/living/simple_animal/hostile/megafauna/bubblegum/New()
+/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize()
..()
for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in mob_list)
if(B != src)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 3adfb7f328c..20aa46db2e7 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -91,7 +91,7 @@ Difficulty: Very Hard
INVOKE_ASYNC(src, .proc/alternating_dir_shots)
-/mob/living/simple_animal/hostile/megafauna/colossus/New()
+/mob/living/simple_animal/hostile/megafauna/colossus/Initialize()
..()
internal = new/obj/item/device/gps/internal/colossus(src)
@@ -105,7 +105,7 @@ Difficulty: Very Hard
duration = 8
var/target
-/obj/effect/overlay/temp/at_shield/New(new_loc, new_target)
+/obj/effect/overlay/temp/at_shield/Initialize(mapload, new_target)
..()
target = new_target
INVOKE_ASYNC(src, /atom/movable/proc/orbit, target, 0, FALSE, 0, 0, FALSE, TRUE)
@@ -631,7 +631,7 @@ Difficulty: Very Hard
stop_automated_movement = 1
var/heal_power = 5
-/mob/living/simple_animal/hostile/lightgeist/New()
+/mob/living/simple_animal/hostile/lightgeist/Initialize()
..()
verbs -= /mob/living/verb/pulled
verbs -= /mob/verb/me_verb
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm
index 35cdf5102fd..b3fb02394a9 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm
@@ -53,7 +53,7 @@ Difficulty: Medium
deathmessage = "collapses into a pile of bones, its flesh sloughing away."
death_sound = 'sound/magic/demon_dies.ogg'
-/mob/living/simple_animal/hostile/megafauna/dragon/New()
+/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
..()
internal = new/obj/item/device/gps/internal/dragon(src)
@@ -96,7 +96,7 @@ Difficulty: Medium
duration = 12
pixel_z = 500
-/obj/effect/overlay/temp/fireball/New(loc)
+/obj/effect/overlay/temp/fireball/Initialize(loc)
..()
animate(src, pixel_z = 0, time = 12)
@@ -121,7 +121,7 @@ Difficulty: Medium
/obj/effect/overlay/temp/target/ex_act()
return
-/obj/effect/overlay/temp/target/New(loc)
+/obj/effect/overlay/temp/target/Initialize(loc)
..()
INVOKE_ASYNC(src, .proc/fall)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index b289fd2b934..8a7344e2625 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -73,7 +73,7 @@ Difficulty: Hard
del_on_death = TRUE
death_sound = 'sound/magic/Repulse.ogg'
-/mob/living/simple_animal/hostile/megafauna/hierophant/New()
+/mob/living/simple_animal/hostile/megafauna/hierophant/Initialize()
..()
internal = new/obj/item/device/gps/internal/hierophant(src)
spawned_beacon = new(loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 49d516a5ac8..061d11d2e58 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -50,7 +50,7 @@ Difficulty: Medium
appearance_flags = 0
mouse_opacity = 1
-/mob/living/simple_animal/hostile/megafauna/legion/New()
+/mob/living/simple_animal/hostile/megafauna/legion/Initialize()
..()
internal = new/obj/item/device/gps/internal/legion(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
index 940b673ea85..9ac4acd88ce 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
@@ -65,7 +65,7 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa
var/static/list/swarmer_caps
-/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/New()
+/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize()
..()
swarmer_caps = AISwarmerCapsByType //for admin-edits
internal = new/obj/item/device/gps/internal/swarmer_beacon(src)
@@ -108,7 +108,7 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa
AIStatus = AI_ON
-/mob/living/simple_animal/hostile/swarmer/ai/New()
+/mob/living/simple_animal/hostile/swarmer/ai/Initialize()
..()
ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity
LAZYINITLIST(AISwarmersByType[type])
@@ -178,7 +178,7 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa
var/static/list/sharedIgnore = list()
-/mob/living/simple_animal/hostile/swarmer/ai/resource/New()
+/mob/living/simple_animal/hostile/swarmer/ai/resource/Initialize()
..()
sharedWanted = typecacheof(sharedWanted)
sharedIgnore = typecacheof(sharedIgnore)
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 374e0d62c05..a2f49cc2cf8 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -110,8 +110,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
var/image/googly_eyes = null
gold_core_spawnable = 0
-/mob/living/simple_animal/hostile/mimic/copy/New(loc, obj/copy, mob/living/creator, destroy_original = 0)
- ..(loc)
+/mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0)
+ ..()
CopyObject(copy, creator, destroy_original)
/mob/living/simple_animal/hostile/mimic/copy/Life()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index e7ed85ad01a..3cf5529c25a 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -141,7 +141,7 @@
var/chase_time = 100
var/will_burrow = TRUE
-/mob/living/simple_animal/hostile/asteroid/goldgrub/New()
+/mob/living/simple_animal/hostile/asteroid/goldgrub/Initialize()
..()
var/i = rand(1,3)
while(i)
@@ -249,7 +249,7 @@
var/inert = 0
var/preserved = 0
-/obj/item/organ/hivelord_core/New()
+/obj/item/organ/hivelord_core/Initialize()
..()
addtimer(CALLBACK(src, .proc/inert_check), 2400)
@@ -337,7 +337,7 @@
pass_flags = PASSTABLE
del_on_death = 1
-/mob/living/simple_animal/hostile/asteroid/hivelordbrood/New()
+/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize()
..()
addtimer(CALLBACK(src, .proc/death), 100)
@@ -355,7 +355,7 @@
reagents.reaction(get_turf(src))
..()
-/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/New()
+/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/Initialize()
create_reagents(30)
..()
@@ -896,7 +896,7 @@
wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/)
var/obj/item/udder/gutlunch/udder = null
-/mob/living/simple_animal/hostile/asteroid/gutlunch/New()
+/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize()
udder = new()
..()
@@ -946,7 +946,7 @@
name = "gubbuck"
gender = MALE
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/New()
+/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize()
..()
add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY)
resize = 0.85
@@ -993,7 +993,7 @@
del_on_death = 1
var/gps = null
-/mob/living/simple_animal/hostile/spawner/lavaland/New()
+/mob/living/simple_animal/hostile/spawner/lavaland/Initialize()
..()
for(var/F in RANGE_TURFS(1, src))
if(ismineralturf(F))
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index e21a863e1db..94941a0508e 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -48,7 +48,7 @@
if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten
adjustBruteLoss(-2)
-/mob/living/simple_animal/hostile/mushroom/New()//Makes every shroom a little unique
+/mob/living/simple_animal/hostile/mushroom/Initialize()//Makes every shroom a little unique
melee_damage_lower += rand(3, 5)
melee_damage_upper += rand(10,20)
maxHealth += rand(40,60)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
index 0d93a7f2b46..7162e4ff0c0 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
@@ -25,7 +25,7 @@
mob_size = MOB_SIZE_TINY
gold_core_spawnable = 1
-/mob/living/simple_animal/hostile/retaliate/frog/New()
+/mob/living/simple_animal/hostile/retaliate/frog/Initialize()
..()
if(prob(1))
name = "rare frog"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
index 5321cce2af1..0353b6b3a04 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
@@ -38,7 +38,7 @@
var/image/ghost_facial_hair = null
var/random = TRUE //if you want random names for ghosts or not
-/mob/living/simple_animal/hostile/retaliate/ghost/New()
+/mob/living/simple_animal/hostile/retaliate/ghost/Initialize()
..()
if(!random)
give_hair()
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 01dfa7f9f42..3d9d9591609 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -51,7 +51,7 @@
// No movement while seen code.
-/mob/living/simple_animal/hostile/statue/New(loc, var/mob/living/creator)
+/mob/living/simple_animal/hostile/statue/Initialize(mapload, var/mob/living/creator)
..()
// Give spells
mob_spell_list += new /obj/effect/proc_holder/spell/aoe_turf/flicker_lights(src)
@@ -110,7 +110,7 @@
return null
// Check for darkness
var/turf/T = get_turf(loc)
- if(T && destination && T.lighting_overlay)
+ if(T && destination && T.lighting_object)
if(T.get_lumcount()<0.1 && destination.get_lumcount()<0.1) // No one can see us in the darkness, right?
return null
if(T == destination)
diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm
index 3fcdc3e37a7..3f4267e164b 100644
--- a/code/modules/mob/living/simple_animal/hostile/stickman.dm
+++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm
@@ -50,7 +50,7 @@
icon_living = "stickdog"
icon_dead = "stickdog_dead"
-/mob/living/simple_animal/hostile/stickman/New(var/turf/loc, var/wizard_summoned)
+/mob/living/simple_animal/hostile/stickman/Initialize(mapload, var/wizard_summoned)
..()
new /obj/effect/overlay/temp/paper_scatter(src)
summoned_by_wizard = wizard_summoned
diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm
index cae6f7c6f64..efd5ee47c4a 100644
--- a/code/modules/mob/living/simple_animal/hostile/wizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm
@@ -37,7 +37,7 @@
var/next_cast = 0
-/mob/living/simple_animal/hostile/wizard/New()
+/mob/living/simple_animal/hostile/wizard/Initialize()
..()
fireball = new /obj/effect/proc_holder/spell/aimed/fireball
fireball.clothes_req = 0
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 3161901e593..b66dd111666 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -99,7 +99,7 @@
var/obj/item/held_item = null
-/mob/living/simple_animal/parrot/New()
+/mob/living/simple_animal/parrot/Initialize()
..()
if(!ears)
var/headset = pick(/obj/item/device/radio/headset/headset_sec, \
@@ -876,7 +876,7 @@
var/longest_survival = 0
var/longest_deathstreak = 0
-/mob/living/simple_animal/parrot/Poly/New()
+/mob/living/simple_animal/parrot/Poly/Initialize()
ears = new /obj/item/device/radio/headset/headset_eng(src)
available_channels = list(":e")
Read_Memory()
@@ -949,7 +949,7 @@
incorporeal_move = 1
butcher_results = list(/obj/item/weapon/ectoplasm = 1)
-/mob/living/simple_animal/parrot/Poly/ghost/New()
+/mob/living/simple_animal/parrot/Poly/ghost/Initialize()
memory_saved = 1 //At this point nothing is saved
..()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index eb469fd4674..afaf7718e0d 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -85,7 +85,7 @@
//domestication
var/tame = 0
-/mob/living/simple_animal/New()
+/mob/living/simple_animal/Initialize()
..()
handcrafting = new()
if(gender == PLURAL)
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 4c8c33f087e..023aea68da3 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -78,7 +78,7 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange",
var/coretype = /obj/item/slime_extract/grey
var/list/slime_mutation[4]
-/mob/living/simple_animal/slime/New(loc, new_colour="grey", new_is_adult=FALSE)
+/mob/living/simple_animal/slime/Initialize(mapload, new_colour="grey", new_is_adult=FALSE)
var/datum/action/innate/slime/feed/F = new
F.Grant(src)
@@ -422,5 +422,5 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange",
if(..())
return 3
-/mob/living/simple_animal/slime/random/New(loc, new_colour, new_is_adult)
- . = ..(loc, pick(slime_colours), prob(50))
+/mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_is_adult)
+ . = ..(mapload, pick(slime_colours), prob(50))
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index a00ef03f93d..ccceb58dfad 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -20,7 +20,7 @@
return QDEL_HINT_HARDDEL
var/next_mob_id = 0
-/mob/New()
+/mob/Initialize()
tag = "mob_[next_mob_id++]"
mob_list += src
if(stat == DEAD)
@@ -117,8 +117,8 @@ var/next_mob_id = 0
else
continue
- else if(T.lighting_overlay)
- if(T.lighting_overlay.invisibility <= M.see_invisible && T.is_softly_lit()) //the light object is dark and not invisible to us
+ else if(T.lighting_object)
+ if(T.lighting_object.invisibility <= M.see_invisible && T.is_softly_lit()) //the light object is dark and not invisible to us
if(blind_message)
msg = blind_message
else
@@ -448,7 +448,7 @@ var/next_mob_id = 0
log_game("[usr.key] AM failed due to disconnect.")
return
- var/mob/new_player/M = new /mob/new_player()
+ var/mob/dead/new_player/M = new /mob/dead/new_player()
if(!client)
log_game("[usr.key] AM failed due to disconnect.")
qdel(M)
diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm
index fd07279e830..f53287ee6b5 100644
--- a/code/modules/mob/mob_transformation_simple.dm
+++ b/code/modules/mob/mob_transformation_simple.dm
@@ -18,7 +18,7 @@
to_chat(usr, "Invalid type path (new_type = [new_type]) in change_mob_type(). Contact a coder.")
return
- if(ispath(new_type, /mob/new_player))
+ if(ispath(new_type, /mob/dead/new_player))
to_chat(usr, "
Cannot convert into a new_player mob type.")
return
diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm
index f87eb0e6daf..6a14d3a43fe 100644
--- a/code/modules/modular_computers/computers/item/laptop.dm
+++ b/code/modules/modular_computers/computers/item/laptop.dm
@@ -12,16 +12,18 @@
max_hardware_size = 2
w_class = WEIGHT_CLASS_NORMAL
- flags = HANDSLOW // No running around with open laptops in hands.
-
screen_on = 0 // Starts closed
var/start_open = 1 // unless this var is set to 1
var/icon_state_closed = "laptop-closed"
var/w_class_open = WEIGHT_CLASS_BULKY
var/slowdown_open = 1
-/obj/item/device/modular_computer/laptop/New()
+/obj/item/device/modular_computer/laptop/Initialize()
..()
+
+ // No running around with open laptops in hands.
+ SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
+
if(start_open && !screen_on)
toggle_open()
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 0767ed9c3be..edb17a17bcf 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -2,19 +2,44 @@
//Please do not bother them with bugs from this port, however, as it has been modified quite a bit.
//Modifications include removing the world-ending full supermatter variation, and leaving only the shard.
-#define NITROGEN_RETARDATION_FACTOR 2 //Higher == N2 slows reaction more
-#define THERMAL_RELEASE_MODIFIER 5 //Higher == less heat released during reaction
-#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
-#define OXYGEN_RELEASE_MODIFIER 325 //Higher == less oxygen released at high temperature/power
-#define REACTION_POWER_MODIFIER 0.55 //Higher == more overall power
+#define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty.
+#define OXYGEN_HEAT_PENALTY 1
+#define CO2_HEAT_PENALTY 0.1
+#define NITROGEN_HEAT_MODIFIER -1.5
+#define OXYGEN_TRANSMIT_MODIFIER 1.5 //Higher == Bigger bonus to power generation.
+#define PLASMA_TRANSMIT_MODIFIER 4
+#define FREON_TRANSMIT_PENALTY 0.75 // Scales how much freon reduces total power transmission. 1 equals 1% per 1% of freon in the mix.
+
+#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage.
+
+#define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts.
+#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 100 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached
+#define POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD 500 //bonus powerloss inhibition boost if this amount of moles is reached
+
+#define MOLE_PENALTY_THRESHOLD 1800 //Higher == Shard can absorb more moles before triggering the high mole penalties.
+#define MOLE_HEAT_PENALTY 350 //Heat damage scales around this. Too hot setups with this amount of moles do regular damage, anything above and below is scaled
+#define POWER_PENALTY_THRESHOLD 5000 //Higher == Engine can generate more power before triggering the high power penalties.
+#define SEVERE_POWER_PENALTY_THRESHOLD 7000 //Same as above, but causes more dangerous effects
+#define CRITICAL_POWER_PENALTY_THRESHOLD 9000 //Even more dangerous effects, threshold for tesla delamination
+#define HEAT_PENALTY_THRESHOLD 40 //Higher == Crystal safe operational temperature is higher.
+#define DAMAGE_HARDCAP 0.01
+
+
+#define THERMAL_RELEASE_MODIFIER 5 //Higher == less heat released during reaction, not to be confused with the above values
+#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
+#define OXYGEN_RELEASE_MODIFIER 325 //Higher == less oxygen released at high temperature/power
+#define FREON_BREEDING_MODIFIER 100 //Higher == less freon created
+#define REACTION_POWER_MODIFIER 0.55 //Higher == more overall power
+
+#define MATTER_POWER_CONVERSION 10 //Crystal converts 1/this value of stored matter into energy.
//These would be what you would get at point blank, decreases with distance
#define DETONATION_RADS 200
#define DETONATION_HALLUCINATION 600
-#define WARNING_DELAY 30 //seconds between warnings.
+#define WARNING_DELAY 30
#define HALLUCINATION_RANGE(P) (min(7, round(P ** 0.25)))
@@ -45,12 +70,31 @@
var/emergency_issued = 0
- var/explosion_power = 8
+ var/explosion_power = 12
+ var/temp_factor = 30
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
var/power = 0
- var/oxygen = 0 // Moving this up here for easier debugging.
+ var/n2comp = 0 // raw composition of each gas in the chamber, ranges from 0 to 1
+ var/freoncomp = 0
+
+ var/plasmacomp = 0
+ var/o2comp = 0
+ var/co2comp = 0
+ var/n2ocomp = 0
+
+ var/combined_gas = 0
+ var/gasmix_power_ratio = 0
+ var/dynamic_heat_modifier = 1
+ var/dynamic_heat_resistance = 1
+ var/powerloss_inhibitor = 1
+ var/powerloss_dynamic_scaling= 0
+ var/power_transmission_bonus = 0
+ var/mole_heat_penalty = 0
+ var/freon_transmit_modifier = 1
+
+ var/matter_power = 0
//Temporary values so that we can optimize this
//How much the bullets damage should be multiplied by when it is added to the internal variables
@@ -112,12 +156,25 @@
return list(SPAN_ROBOT)
/obj/machinery/power/supermatter_shard/proc/explode()
- investigate_log("has collapsed into a singularity.", "supermatter")
var/turf/T = get_turf(src)
- qdel(src)
- if(T)
- var/obj/singularity/S = new(T)
- S.energy = 800
+ for(var/mob/M in mob_list)
+ if(M.z == z)
+ M << 'sound/magic/Charge.ogg'
+ to_chat(M, "
You feel reality distort for a moment...")
+ if(combined_gas > MOLE_PENALTY_THRESHOLD)
+ investigate_log("has collapsed into a singularity.", "supermatter")
+ if(T)
+ var/obj/singularity/S = new(T)
+ S.energy = 800
+ S.consume(src)
+ else
+ investigate_log("has exploded.", "supermatter")
+ explosion(get_turf(T), explosion_power * max(gasmix_power_ratio, 0.205) * 0.5 , explosion_power * max(gasmix_power_ratio, 0.205) + 2, explosion_power * max(gasmix_power_ratio, 0.205) + 4 , explosion_power * max(gasmix_power_ratio, 0.205) + 6, 1, 1)
+ if(power > CRITICAL_POWER_PENALTY_THRESHOLD)
+ investigate_log("has spawned additional energy balls.", "supermatter")
+ var/obj/singularity/energy_ball/E = new(T)
+ E.energy = power
+ qdel(src)
/obj/machinery/power/supermatter_shard/process()
var/turf/T = loc
@@ -128,42 +185,6 @@
if(!istype(T)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now.
return //Yeah just stop.
- if(isspaceturf(T)) // Stop processing this stuff if we've been ejected.
- return
-
- if(damage > warning_point) // while the core is still damaged and it's still worth noting its status
- if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY)
- var/stability = num2text(round((damage / explosion_point) * 100))
-
- if(damage > emergency_point)
- radio.talk_into(src, "[emergency_alert] Instability: [stability]%")
- lastwarning = world.timeofday
- if(!has_reached_emergency)
- investigate_log("has reached the emergency point for the first time.", "supermatter")
- message_admins("[src] has reached the emergency point
(JMP).")
- has_reached_emergency = 1
-
- else if(damage >= damage_archived) // The damage is still going up
- radio.talk_into(src, "[warning_alert] Instability: [stability]%")
- lastwarning = world.timeofday - 150
-
- else // Phew, we're safe
- radio.talk_into(src, "[safe_alert]")
- lastwarning = world.timeofday
-
- if(damage > explosion_point)
- for(var/mob in living_mob_list)
- var/mob/living/L = mob
- if(istype(L) && L.z == z)
- if(ishuman(mob))
- //Hilariously enough, running into a closet should make you get hit the hardest.
- var/mob/living/carbon/human/H = mob
- H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
- var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) )
- L.rad_act(rads)
-
- explode()
-
//Ok, get the air from the turf
var/datum/gas_mixture/env = T.return_air()
@@ -176,28 +197,65 @@
// Pass all the gas related code an empty gas container
removed = new()
- if(!removed || !removed.total_moles())
+ if(!removed || !removed.total_moles() || isspaceturf(T)) //we're in space or there is no gas to process
if(takes_damage)
damage += max((power-1600)/10, 0)
- power = min(power, 1600)
return 1
damage_archived = damage
if(takes_damage)
- damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
- //Ok, 100% oxygen atmosphere = best reaction
- //Maxes out at 100% oxygen pressure
- var/removed_nitrogen = 0
- if(removed.gases["n2"])
- removed_nitrogen = (removed.gases["n2"][MOLES] * NITROGEN_RETARDATION_FACTOR)
+ //causing damage
+ damage = max(damage + (max(removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ), 0)
+ damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500), 0)
+ damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80), 0)
- removed.assert_gases("o2", "plasma")
+ //healing damage
+ if(combined_gas < MOLE_PENALTY_THRESHOLD)
+ damage = max(damage + (min(removed.temperature - (T0C + HEAT_PENALTY_THRESHOLD), 0) / 150 ), 0)
- oxygen = max(min((removed.gases["o2"][MOLES] - removed_nitrogen) / MOLES_CELLSTANDARD, 1), 0)
+ //capping damage
+ damage = min(damage_archived + (DAMAGE_HARDCAP * explosion_point),damage)
+ if(damage > damage_archived && prob(10))
+ playsound(get_turf(src), 'sound/effects/EMPulse.ogg', 50, 1)
+
+ removed.assert_gases("o2", "plasma", "co2", "n2o", "n2", "freon")
+ //calculating gas related values
+ combined_gas = max(removed.total_moles(), 0)
+
+ plasmacomp = max(removed.gases["plasma"][MOLES]/combined_gas, 0)
+ o2comp = max(removed.gases["o2"][MOLES]/combined_gas, 0)
+ co2comp = max(removed.gases["co2"][MOLES]/combined_gas, 0)
+
+ n2ocomp = max(removed.gases["n2o"][MOLES]/combined_gas, 0)
+ n2comp = max(removed.gases["n2"][MOLES]/combined_gas, 0)
+ freoncomp = max(removed.gases["freon"][MOLES]/combined_gas, 0)
+
+ gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp - n2ocomp - n2comp - freoncomp, 0), 1)
+
+ dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY)+(o2comp * OXYGEN_HEAT_PENALTY)+(co2comp * CO2_HEAT_PENALTY)+(n2comp * NITROGEN_HEAT_MODIFIER), 0.5)
+ dynamic_heat_resistance = max(n2ocomp * N2O_HEAT_RESISTANCE, 1)
+
+ power_transmission_bonus = max((plasmacomp * PLASMA_TRANSMIT_MODIFIER) + (o2comp * OXYGEN_TRANSMIT_MODIFIER), 0)
+
+ freon_transmit_modifier = max(1-(freoncomp * FREON_TRANSMIT_PENALTY), 0)
+
+ //more moles of gases are harder to heat than fewer, so let's scale heat damage around them
+ mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25)
+
+ if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && co2comp > POWERLOSS_INHIBITION_GAS_THRESHOLD)
+ powerloss_dynamic_scaling = Clamp(powerloss_dynamic_scaling + Clamp(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
+ else
+ powerloss_dynamic_scaling = Clamp(powerloss_dynamic_scaling - 0.10,0, 1)
+ powerloss_inhibitor = Clamp(1-(powerloss_dynamic_scaling * Clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1)
+
+ if(matter_power)
+ var/removed_matter = max(matter_power/MATTER_POWER_CONVERSION, 40)
+ power = max(power + removed_matter, 0)
+ matter_power = max(matter_power - removed_matter, 0)
var/temp_factor = 50
- if(oxygen > 0.8)
+ if(gasmix_power_ratio > 0.8)
// with a perfect gas mix, make the power less based on heat
icon_state = "[base_icon_state]_glow"
else
@@ -205,7 +263,7 @@
temp_factor = 30
icon_state = base_icon_state
- power = max( (removed.temperature * temp_factor / T0C) * oxygen + power, 0) //Total laser power plus an overload
+ power = max( (removed.temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) //Total laser power plus an overload
//We've generated power, now let's transfer it to the collectors for storing/usage
transfer_energy()
@@ -219,14 +277,17 @@
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
- removed.temperature += (device_energy / THERMAL_RELEASE_MODIFIER)
+ removed.temperature += ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_MODIFIER)
- removed.temperature = max(0, min(removed.temperature, 2500))
+ removed.temperature = max(0, min(removed.temperature, 2500 * dynamic_heat_modifier))
//Calculate how much gas to release
- removed.gases["plasma"][MOLES] += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
+ removed.gases["plasma"][MOLES] += max((device_energy * dynamic_heat_modifier) / PLASMA_RELEASE_MODIFIER, 0)
- removed.gases["o2"][MOLES] += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
+ removed.gases["o2"][MOLES] += max(((device_energy + removed.temperature * dynamic_heat_modifier) - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
+
+ if(combined_gas < 50)
+ removed.gases["freon"][MOLES] = max((removed.gases["freon"][MOLES] + device_energy) * freoncomp / FREON_BREEDING_MODIFIER, 0)
if(produces_gas)
env.merge(removed)
@@ -241,12 +302,72 @@
var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) )
l.rad_act(rads)
- power -= (power/500)**3
+ if(power > POWER_PENALTY_THRESHOLD)
+ playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10)
+ supermatter_zap(src, 5, min(power*2, 20000))
+ supermatter_zap(src, 5, min(power*2, 20000))
+ if(power > SEVERE_POWER_PENALTY_THRESHOLD)
+ supermatter_zap(src, 5, min(power*2, 20000))
+ if(power > CRITICAL_POWER_PENALTY_THRESHOLD)
+ supermatter_zap(src, 5, min(power*2, 20000))
+
+ if(prob(15))
+ supermatter_pull(src, power/750)
+ if(prob(5))
+ supermatter_anomaly_gen(src, 1, rand(5, 10))
+ if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(2))
+ supermatter_anomaly_gen(src, 2, rand(5, 10))
+ if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3))
+ supermatter_anomaly_gen(src, 3, rand(5, 10))
+
+
+
+ if(damage > warning_point) // while the core is still damaged and it's still worth noting its status
+ if((REALTIMEOFDAY - lastwarning) / 10 >= WARNING_DELAY)
+ var/stability = num2text(round((damage / explosion_point) * 100))
+
+ if(damage > emergency_point)
+
+ radio.talk_into(src, "[emergency_alert] Instability: [stability]%")
+ lastwarning = REALTIMEOFDAY
+ if(!has_reached_emergency)
+ investigate_log("has reached the emergency point for the first time.", "supermatter")
+ message_admins("[src] has reached the emergency point
(JMP).")
+ has_reached_emergency = 1
+ else if(damage >= damage_archived) // The damage is still going up
+ radio.talk_into(src, "[warning_alert] Instability: [stability]%")
+ lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5)
+
+ else // Phew, we're safe
+ radio.talk_into(src, "[safe_alert] Instability: [stability]%")
+ lastwarning = REALTIMEOFDAY
+
+ if(power > POWER_PENALTY_THRESHOLD)
+ radio.talk_into(src, "Warning: Hyperstructure has reached dangerous power level.")
+ if(powerloss_inhibitor < 0.5)
+ radio.talk_into(src, "DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.")
+
+ if(combined_gas > MOLE_PENALTY_THRESHOLD)
+ radio.talk_into(src, "Warning: Critical coolant mass reached.")
+
+ if(damage > explosion_point)
+ for(var/mob in living_mob_list)
+ var/mob/living/L = mob
+ if(istype(L) && L.z == z)
+ if(ishuman(mob))
+ //Hilariously enough, running into a closet should make you get hit the hardest.
+ var/mob/living/carbon/human/H = mob
+ H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
+ var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) )
+ L.rad_act(rads)
+
+ explode()
+
+
+ power -= ((power/500)**3) * powerloss_inhibitor
return 1
-/obj/machinery/power/supermatter_shard
-
/obj/machinery/power/supermatter_shard/bullet_act(obj/item/projectile/Proj)
var/turf/L = loc
if(!istype(L)) // We don't run process() when we are in space
@@ -316,7 +437,7 @@
/obj/machinery/power/supermatter_shard/proc/transfer_energy()
for(var/obj/machinery/power/rad_collector/R in rad_collectors)
if(R.z == z && get_dist(R, src) <= 15) //Better than using orange() every process
- R.receive_pulse(power/10)
+ R.receive_pulse(power * (1 + power_transmission_bonus)/10 * freon_transmit_modifier)
/obj/machinery/power/supermatter_shard/attackby(obj/item/W, mob/living/user, params)
if(!istype(W) || (W.flags & ABSTRACT) || !istype(user))
@@ -347,19 +468,18 @@
Consume(AM)
-
/obj/machinery/power/supermatter_shard/proc/Consume(atom/movable/AM)
if(isliving(AM))
var/mob/living/user = AM
message_admins("[src] has consumed [key_name_admin(user)]
? (
FLW)
(JMP).")
investigate_log("has consumed [key_name(user)].", "supermatter")
user.dust()
- power += 200
+ matter_power += 200
else if(isobj(AM) && !istype(AM, /obj/effect))
investigate_log("has consumed [AM].", "supermatter")
qdel(AM)
- power += 200
+ matter_power += 200
//Some poor sod got eaten, go ahead and irradiate people nearby.
radiation_pulse(get_turf(src), 4, 10, 500, 1)
@@ -384,7 +504,106 @@
icon_state = "darkmatter"
anchored = 1
gasefficency = 0.15
- explosion_power = 20
+ explosion_power = 35
+/obj/machinery/power/supermatter_shard/proc/supermatter_pull(turf/center, pull_range = 10)
+ playsound(src.loc, 'sound/weapons/marauder.ogg', 100, 1, extrarange = 7)
+ for(var/atom/P in orange(pull_range,center))
+ if(istype(P, /atom/movable))
+ var/atom/movable/pulled_object = P
+ if(ishuman(P))
+ var/mob/living/carbon/human/H = P
+ H.apply_effect(2, WEAKEN, 0)
+ if(pulled_object && !pulled_object.anchored && !ishuman(P))
+ step_towards(pulled_object,center)
+ step_towards(pulled_object,center)
+ step_towards(pulled_object,center)
+ step_towards(pulled_object,center)
+
+ return
+
+/obj/machinery/power/supermatter_shard/proc/supermatter_anomaly_gen(turf/anomalycenter, type = 1, anomalyrange = 5)
+ var/turf/L = pick(orange(anomalyrange, anomalycenter))
+ if(L)
+ if(type == 1)
+ var/obj/effect/anomaly/flux/A = new(L)
+ A.explosive = 0
+ A.lifespan = 300
+ else if(type == 2)
+ var/obj/effect/anomaly/grav/A = new(L)
+ A.lifespan = 250
+ else if(type == 3)
+ var/obj/effect/anomaly/pyro/A = new(L)
+ A.lifespan = 200
+
+ return
+
+/obj/machinery/power/supermatter_shard/proc/supermatter_zap(atom/zapstart, range = 3, power)
+ . = zapstart.dir
+ if(power < 1000)
+ return
+
+ var/target_atom
+ var/mob/living/target_mob
+ var/obj/machinery/target_machine
+ var/obj/structure/target_structure
+ var/list/arctargetsmob = list()
+ var/list/arctargetsmachine = list()
+ var/list/arctargetsstructure = list()
+
+ if(prob(20)) //let's not hit all the engineers with every beam and/or segment of the arc
+ for(var/mob/living/Z in oview(zapstart, range+2))
+ arctargetsmob += Z
+ if(arctargetsmob.len)
+ var/mob/living/H = pick(arctargetsmob)
+ var/atom/A = H
+ target_mob = H
+ target_atom = A
+
+ else
+ for(var/obj/machinery/X in oview(zapstart, range+2))
+ arctargetsmachine += X
+ if(arctargetsmachine.len)
+ var/obj/machinery/M = pick(arctargetsmachine)
+ var/atom/A = M
+ target_machine = M
+ target_atom = A
+
+ else
+ for(var/obj/structure/Y in oview(zapstart, range+2))
+ arctargetsstructure += Y
+ if(arctargetsstructure.len)
+ var/obj/structure/O = pick(arctargetsstructure)
+ var/atom/A = O
+ target_structure = O
+ target_atom = A
+
+ if(target_atom)
+ zapstart.Beam(target_atom, icon_state="nzcrentrs_power", time=5)
+ var/zapdir = get_dir(zapstart, target_atom)
+ if(zapdir)
+ . = zapdir
+
+ if(target_mob)
+ target_mob.electrocute_act(rand(5,10), "Supermatter Discharge Bolt", 1, stun = 0)
+ if(prob(15))
+ supermatter_zap(target_mob, 5, power / 2)
+ supermatter_zap(target_mob, 5, power / 2)
+ else
+ supermatter_zap(target_mob, 5, power / 1.5)
+
+ else if(target_machine)
+ if(prob(15))
+ supermatter_zap(target_machine, 5, power / 2)
+ supermatter_zap(target_machine, 5, power / 2)
+ else
+ supermatter_zap(target_machine, 5, power / 1.5)
+
+ else if(target_structure)
+ if(prob(15))
+ supermatter_zap(target_structure, 5, power / 2)
+ supermatter_zap(target_structure, 5, power / 2)
+ else
+ supermatter_zap(target_structure, 5, power / 1.5)
#undef HALLUCINATION_RANGE
diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm
index 42eca2b053d..bd00fdd7d92 100644
--- a/code/modules/projectiles/guns/ballistic/bow.dm
+++ b/code/modules/projectiles/guns/ballistic/bow.dm
@@ -9,12 +9,15 @@
var/item_state_firing = "bow"
fire_sound = 'sound/weapons/grenadelaunch.ogg'
mag_type = /obj/item/ammo_box/magazine/internal/bow
- flags = HANDSLOW
weapon_weight = WEAPON_HEAVY
var/draw_sound = 'sound/weapons/draw_bow.ogg'
var/ready_to_fire = 0
var/slowdown_when_ready = 2
+/obj/item/weapon/gun/ballistic/bow/Initialize(mapload)
+ ..()
+ SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
+
/obj/item/weapon/gun/ballistic/bow/update_icon()
if(ready_to_fire)
icon_state = icon_state_firing
diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
index 38cc6a344d7..e8af057cfd8 100644
--- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm
+++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
@@ -22,7 +22,7 @@
/obj/item/weapon/minigunpack/Destroy()
STOP_PROCESSING(SSobj, src)
- ..()
+ return ..()
/obj/item/weapon/minigunpack/process()
overheat = max(0, overheat - heat_diffusion)
@@ -96,7 +96,7 @@
icon_state = "minigun_spin"
item_state = "minigun"
origin_tech = "combat=6;powerstorage=5;magnets=4"
- flags = CONDUCT | HANDSLOW
+ flags = CONDUCT
slowdown = 1
slot_flags = null
w_class = WEIGHT_CLASS_HUGE
@@ -110,6 +110,17 @@
casing_ejector = 0
var/obj/item/weapon/minigunpack/ammo_pack
+/obj/item/weapon/gun/ballistic/minigun/Initialize(mapload)
+ ..()
+ SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
+
+ if(!ammo_pack)
+ if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one.
+ ammo_pack = loc
+ ..()
+ else
+ qdel(src)//No pack, no gun
+
/obj/item/weapon/gun/ballistic/minigun/attack_self(mob/living/user)
return
@@ -132,14 +143,6 @@
to_chat(user, "You need the backpack power source to fire the gun!")
..()
-/obj/item/weapon/gun/ballistic/minigun/New()
- if(!ammo_pack)
- if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one.
- ammo_pack = loc
- ..()
- else
- qdel(src)//No pack, no gun
-
/obj/item/weapon/gun/ballistic/minigun/dropped(mob/living/user)
ammo_pack.attach_gun(user)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index fc0c1064de1..e6fa3e9cfdf 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -56,7 +56,7 @@
/obj/item/weapon/gun/energy/meteorgun
name = "meteor gun"
desc = "For the love of god, make sure you're aiming this the right way!"
- icon_state = "riotgun"
+ icon_state = "meteor_gun"
item_state = "c20r"
w_class = WEIGHT_CLASS_BULKY
ammo_type = list(/obj/item/ammo_casing/energy/meteor)
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 1bf87e3d4dd..bb6f9f7b909 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -513,6 +513,11 @@ var/const/INJECT = 5 //injection
if("OBJ")
R.reaction_obj(A, R.volume * volume_modifier, show_message)
+/datum/reagents/proc/holder_full()
+ if(total_volume >= maximum_volume)
+ return TRUE
+ return FALSE
+
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, no_react = 0)
if(!isnum(amount) || !amount)
return FALSE
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 1938588222d..35895dfdac2 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -5,7 +5,7 @@
icon_state = "camera_target"
var/allowed_area = null
-/mob/camera/aiEye/remote/xenobio/New(loc)
+/mob/camera/aiEye/remote/xenobio/Initialize()
var/area/A = get_area(loc)
allowed_area = A.name
..()
diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm
index 5ce3af29e88..c8cd3ee11ad 100644
--- a/code/modules/shuttle/arrivals.dm
+++ b/code/modules/shuttle/arrivals.dm
@@ -111,11 +111,10 @@
return FALSE
/obj/docking_port/mobile/arrivals/proc/PersonCheck()
- for(var/A in areas)
- for(var/mob/living/L in A)
- //don't dock for braindead'
- if(L.key && L.client && L.stat != DEAD)
- return TRUE
+ for(var/M in (living_mob_list & player_list))
+ var/mob/living/L = M
+ if((get_area(M) in areas) && L.stat != DEAD)
+ return TRUE
return FALSE
/obj/docking_port/mobile/arrivals/proc/SendToStation()
diff --git a/code/modules/shuttle/ripple.dm b/code/modules/shuttle/ripple.dm
index c87345e890f..ca49f50ae51 100644
--- a/code/modules/shuttle/ripple.dm
+++ b/code/modules/shuttle/ripple.dm
@@ -16,3 +16,7 @@
/obj/effect/overlay/temp/ripple/Initialize(mapload, time_left)
. = ..()
animate(src, alpha=255, time=time_left)
+ addtimer(CALLBACK(src, .proc/stop_animation), 8, TIMER_CLIENT_TIME)
+
+/obj/effect/overlay/temp/ripple/proc/stop_animation()
+ icon_state = "medi_holo_no_anim"
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index 650de473283..d039929d2fc 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -150,7 +150,7 @@
status_flags = GODMODE // Please don't punch the barkeeper
unique_name = FALSE // disables the (123) number suffix
-/mob/living/simple_animal/drone/snowflake/bardrone/New()
+/mob/living/simple_animal/drone/snowflake/bardrone/Initialize()
. = ..()
access_card.access |= access_cent_bar
@@ -166,7 +166,7 @@
AIStatus = AI_OFF
stop_automated_movement = TRUE
-/mob/living/simple_animal/hostile/alien/maid/barmaid/New()
+/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize()
. = ..()
access_card = new /obj/item/weapon/card/id(src)
var/datum/job/captain/C = new /datum/job/captain
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 65706d1e51a..8f391570fc7 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -72,7 +72,7 @@ var/list/blacklisted_cargo_types = typecacheof(list(
var/list/empty_turfs = list()
for(var/turf/open/floor/T in areaInstance)
- if(T.density || T.contents.len)
+ if(is_blocked_turf(T))
continue
empty_turfs += T
diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm
index eaece53bb00..0a84b4bca05 100644
--- a/code/modules/spells/spell_types/mime.dm
+++ b/code/modules/spells/spell_types/mime.dm
@@ -61,7 +61,7 @@
else
to_chat(H, "
You break your vow of silence.")
-// These spells can only be gotten from the "Guide for Advanced Mimery series+" for Mime Traitors.
+// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors.
/obj/effect/proc_holder/spell/targeted/forcewall/mime
name = "Invisible Blockade"
@@ -99,6 +99,7 @@
invocation_emote_self = "
You fire your finger gun!"
range = 20
projectile_type = /obj/item/projectile/bullet/weakbullet2
+ projectile_amount = 3
sound = null
active_msg = "You draw your fingers!"
deactive_msg = "You put your fingers at ease. Another time."
diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm
index b3f0b519075..42a72f0e972 100644
--- a/code/modules/station_goals/station_goal.dm
+++ b/code/modules/station_goals/station_goal.dm
@@ -13,7 +13,7 @@
/datum/station_goal/proc/send_report()
priority_announce("Priority Nanotrasen directive received. Project \"[name]\" details inbound.", "Incoming Priority Message", 'sound/AI/commandreport.ogg')
- print_command_report(get_report(),"Nanotrasen Directive [pick(phonetic_alphabet)] \Roman[rand(1,50)]")
+ print_command_report(get_report(),"Nanotrasen Directive [pick(phonetic_alphabet)] \Roman[rand(1,50)]", announce=FALSE)
on_report()
/datum/station_goal/proc/on_report()
@@ -61,4 +61,4 @@
//Should keep sec busy.
//Maybe after completion you'll get some ling detecting gear or some station wide DNA scan ?
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm
index 8fddbeb57e6..67fc9ea1b53 100644
--- a/code/modules/uplink/uplink_item.dm
+++ b/code/modules/uplink/uplink_item.dm
@@ -1203,6 +1203,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
cost = 12
item = /obj/item/weapon/storage/box/syndie_kit/mimery
restricted_roles = list("Mime")
+ surplus = 0
/datum/uplink_item/role_restricted/ez_clean_bundle
name = "EZ Clean Grenade Bundle"
@@ -1228,8 +1229,8 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
desc = "A tattered old jumpsuit that will provide absolutely no benefit to you. It fills the wearer with a strange compulsion to blurt out 'glorf'."
item = /obj/item/clothing/under/color/grey/glorf
cost = 20
- surplus = 0
restricted_roles = list("Assistant")
+ surplus = 0
/datum/uplink_item/role_restricted/haunted_magic_eightball
name = "Haunted Magic Eightball"
diff --git a/code/orphaned_procs/priority_announce.dm b/code/orphaned_procs/priority_announce.dm
index d677f23e4e4..26b3548e3ea 100644
--- a/code/orphaned_procs/priority_announce.dm
+++ b/code/orphaned_procs/priority_announce.dm
@@ -30,11 +30,17 @@
if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)
M << sound(sound)
-/proc/print_command_report(text = "", title = "Central Command Update")
- for (var/obj/machinery/computer/communications/C in machines)
+/proc/print_command_report(text = "", title = null, announce=TRUE)
+ if(!title)
+ title = "Classified [command_name()] Update"
+
+ if(announce)
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg')
+
+ for(var/obj/machinery/computer/communications/C in machines)
if(!(C.stat & (BROKEN|NOPOWER)) && C.z == ZLEVEL_STATION)
- var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
- P.name = "paper- '[title]'"
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc)
+ P.name = "paper - '[title]'"
P.info = text
C.messagetitle.Add("[title]")
C.messagetext.Add(text)
diff --git a/code/world.dm b/code/world.dm
index 2b7ef6c93e7..986049afeaf 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -1,5 +1,5 @@
/world
- mob = /mob/new_player
+ mob = /mob/dead/new_player
turf = /turf/basic
area = /area/space
view = "15x15"
diff --git a/html/changelog.html b/html/changelog.html
index b3614977ce8..f0f2e80b99f 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,85 @@
-->
+
15 March 2017
+
Cyberboss updated:
+
+ - You can no longer depart on the arrivals shuttle by hiding inside things
+
+
Joan updated:
+
+ - Proselytizers converting clockwork floors to walls now always take 10 seconds, regardless of how fast the proselytizer is.
+ - Clockwork grilles no longer provide CV.
+
+
Penguaro updated:
+
+ - **Engineering** - Changed Access Level from **24** (_Atmo_) to **10** (_Engine_) on **Radiation Shutter Control**
+
+
TrustyGun updated:
+
+ - Traitor Mimes with the finger guns spell now fire 3 bullets at a time, as opposed to just 1.
+
+
octareenroon91 updated:
+
+ - Allow new reflector frames to be built from metal sheets.
+
+
+
14 March 2017
+
Joan updated:
+
+ - Shuttles now have dynamic lighting; you can remove the lights on them and use your own lights.
+ - All maps now use Deltastation's fancy syndicate shuttle.
+ - Shadowshrooms of lower potency are much less able to blanket the station in darkness.
+
+
PKPenguin321 updated:
+
+ - Lattices now require wirecutters to deconstruct, rather than welding tools.
+
+
+
13 March 2017
+
Cyberboss updated:
+
+ - You must now be on any intent EXCEPT help to weld an airlock shut
+ - You can now repair airlocks with welding tools on help intent (broken airlocks still need their wires mended though)
+
+
Cyberboss, Bgobandit, and Yogstation updated:
+
+ - The HoP can now prioritze roles for late-joiners
+
+
Every coder, player, and admin in Space Station 13 updated:
+
+ - Adds the Tomb Of The Unknown Employee to Central Command,
+ - Rest in peace, those who died after contributing to Space Station 13.
+
+
Hyena updated:
+
+ - Surplus leg r/l name fixed
+ - You can now carry honey in plant bags
+
+
Lordpidey updated:
+
+ - Devils can no longer break into areas with sheer force of disco funk
+ - The pitchfork of an ascended devil can now break down walls.
+ - Hell has decided to at least clothe it's devils when sending them a brand new body.
+ - Pitchforks glow red now.
+
+
Penguaro updated:
+
+ - **Engineering** - Removed Tables, paper bin, and pen
+ - **Engineering** - Replaced with Welder and Electrical Lockers
+ - **Engineering** - Moved First-Aid Burn kit to Engineering Foyer
+ - **Chapel** - Replaced one Window with Win-Door for Coffin Storage
+
+
Space Bicycle Consortium updated:
+
+ - Bicycles now only cost 10,000 yen, down from 1,000,000 yen.
+
+
coiax updated:
+
+ - The egg spawner on Metastation will generate a station message and inform the admins if an egg is spawned. (It's only a two percent chance, but live in hope.)
+ - Glowsticks can now be found in "Swarmer Cyan" colors.
+
+
12 March 2017
JStheguy updated:
@@ -1719,43 +1798,6 @@
- The end of round stats include the number of people who escaped on the main emergency shuttle.
-
- 10 January 2017
- Arianya updated:
-
- - Doors and vending machines once again make a sound when you screwdriver them.
-
- Cyberboss updated:
-
- - Explosions can no longer be dodged
- - Airlocks are now destroyed by the same level explosion that destroys walls
- - Diamond/External/Centcomm airlocks and firedoors now block explosions as walls do
-
- Joan updated:
-
- - Clockwork Proselytizers no longer require Replicant Alloy to function; instead, they gradually charge themselves with power, which is used more or less the same as alloy.
- - Clockwork Proselytizers now produce brass sheets when used in-hand, instead of Replicant Alloy.
- - Tinkerer's Caches can no longer have Replicant Alloy removed from them; using an empty hand on them will simply check when they'll next produce a component.
- - Mending Motors can no longer use Replicant Alloy in place of power.
-
- Mervill updated:
-
- - Controlling the station status displays no longer overrides the cargo supply timer
-
- MrStonedOne updated:
-
- - Lighting was made more responsive.
-
- XDTM updated:
-
- - Earmuffs and null rods protect against the Voice of God.
- - Earmuffs are now buildable in autolathes.
- - Voice of God stuns have a longer cooldown.
-
- coiax updated:
-
- - Girders now offer hints to their deconstruction when examined.
-
GoonStation 13 Development Team
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 8c0d193ebfa..6fbe531006e 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -10098,3 +10098,60 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
coiax:
- rscdel: A cloner that is EMP'd will merely eject the clone early, rather than
gibbing it. Emagging the cloner will still gib the clone.
+2017-03-13:
+ Cyberboss:
+ - tweak: You must now be on any intent EXCEPT help to weld an airlock shut
+ - rscadd: You can now repair airlocks with welding tools on help intent (broken
+ airlocks still need their wires mended though)
+ Cyberboss, Bgobandit, and Yogstation:
+ - rscadd: The HoP can now prioritze roles for late-joiners
+ Every coder, player, and admin in Space Station 13:
+ - rscadd: Adds the Tomb Of The Unknown Employee to Central Command,
+ - rscadd: Rest in peace, those who died after contributing to Space Station 13.
+ Hyena:
+ - bugfix: Surplus leg r/l name fixed
+ - bugfix: You can now carry honey in plant bags
+ Lordpidey:
+ - bugfix: Devils can no longer break into areas with sheer force of disco funk
+ - rscadd: The pitchfork of an ascended devil can now break down walls.
+ - rscadd: Hell has decided to at least clothe it's devils when sending them a brand
+ new body.
+ - rscadd: Pitchforks glow red now.
+ Penguaro:
+ - rscdel: '**Engineering** - Removed Tables, paper bin, and pen'
+ - rscadd: '**Engineering** - Replaced with Welder and Electrical Lockers'
+ - rscadd: '**Engineering** - Moved First-Aid Burn kit to Engineering Foyer'
+ - tweak: '**Chapel** - Replaced one Window with Win-Door for Coffin Storage'
+ Space Bicycle Consortium:
+ - bugfix: Bicycles now only cost 10,000 yen, down from 1,000,000 yen.
+ coiax:
+ - rscadd: The egg spawner on Metastation will generate a station message and inform
+ the admins if an egg is spawned. (It's only a two percent chance, but live in
+ hope.)
+ - rscadd: Glowsticks can now be found in "Swarmer Cyan" colors.
+2017-03-14:
+ Joan:
+ - rscadd: Shuttles now have dynamic lighting; you can remove the lights on them
+ and use your own lights.
+ - tweak: All maps now use Deltastation's fancy syndicate shuttle.
+ - tweak: Shadowshrooms of lower potency are much less able to blanket the station
+ in darkness.
+ PKPenguin321:
+ - tweak: Lattices now require wirecutters to deconstruct, rather than welding tools.
+2017-03-15:
+ Cyberboss:
+ - bugfix: You can no longer depart on the arrivals shuttle by hiding inside things
+ Joan:
+ - tweak: Proselytizers converting clockwork floors to walls now always take 10 seconds,
+ regardless of how fast the proselytizer is.
+ - tweak: Clockwork grilles no longer provide CV.
+ Penguaro:
+ - bugfix: '**Engineering** - Changed Access Level from **24** (_Atmo_) to **10**
+ (_Engine_) on **Radiation Shutter Control**'
+ TrustyGun:
+ - tweak: Traitor Mimes with the finger guns spell now fire 3 bullets at a time,
+ as opposed to just 1.
+ octareenroon91:
+ - rscadd: Allow new reflector frames to be built from metal sheets.
+ oranges:
+ - rscdel: Removed patting
diff --git a/html/changelogs/AutoChangeLog-pr-24693.yml b/html/changelogs/AutoChangeLog-pr-24693.yml
deleted file mode 100644
index 25a69d778ad..00000000000
--- a/html/changelogs/AutoChangeLog-pr-24693.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: "Lordpidey"
-delete-after: True
-changes:
- - bugfix: "Devils can no longer break into areas with sheer force of disco funk"
- - rscadd: "The pitchfork of an ascended devil can now break down walls."
- - rscadd: "Hell has decided to at least clothe it's devils when sending them a brand new body."
- - rscadd: "Pitchforks glow red now."
diff --git a/html/changelogs/AutoChangeLog-pr-24785.yml b/html/changelogs/AutoChangeLog-pr-24785.yml
new file mode 100644
index 00000000000..4afa1dec0ca
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-24785.yml
@@ -0,0 +1,9 @@
+author: "Tokiko1"
+delete-after: True
+changes:
+ - rscadd: "Most gases now have unique effects when surrounding the supermatter crystal."
+ - tweak: "The supermatter crystal can now take damage from too much energy and too much gas."
+ - rscadd: "Added a dangerous overcharged state to the supermatter crystal."
+ - rscadd: "Readded explosion delaminations, a new tesla delamination and allowed the singulo delamination to absorb the supermatter."
+ - tweak: "The type of delamination now depends on the state of the supermatter crystal."
+ - tweak: "Various supermatter engine rebalancing and fixes."
diff --git a/html/changelogs/AutoChangeLog-pr-24907.yml b/html/changelogs/AutoChangeLog-pr-24907.yml
new file mode 100644
index 00000000000..b70e9ca9ceb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-24907.yml
@@ -0,0 +1,4 @@
+author: "rock"
+delete-after: True
+changes:
+ - tweak: "if we can have glowsticks in toolvends why not flashlights amirite guys"
diff --git a/html/changelogs/AutoChangeLog-pr-24913.yml b/html/changelogs/AutoChangeLog-pr-24913.yml
deleted file mode 100644
index ade2db067d1..00000000000
--- a/html/changelogs/AutoChangeLog-pr-24913.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: "Penguaro"
-delete-after: True
-changes:
- - rscdel: "**Engineering** - Removed Tables, paper bin, and pen"
- - rscadd: "**Engineering** - Replaced with Welder and Electrical Lockers"
- - rscadd: "**Engineering** - Moved First-Aid Burn kit to Engineering Foyer"
- - tweak: "**Chapel** - Replaced one Window with Win-Door for Coffin Storage"
diff --git a/html/changelogs/AutoChangeLog-pr-24988.yml b/html/changelogs/AutoChangeLog-pr-24988.yml
deleted file mode 100644
index b40db84cef9..00000000000
--- a/html/changelogs/AutoChangeLog-pr-24988.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Hyena"
-delete-after: True
-changes:
- - bugfix: "Surplus leg r/l name fixed"
diff --git a/html/changelogs/AutoChangeLog-pr-25089.yml b/html/changelogs/AutoChangeLog-pr-25089.yml
new file mode 100644
index 00000000000..cb105bde16b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-25089.yml
@@ -0,0 +1,4 @@
+author: "Tofa01"
+delete-after: True
+changes:
+ - bugfix: "[Delta] Fixes telecoms temperature and gas mixing / being contaminated."
diff --git a/html/changelogs/AutoChangeLog-pr-25115.yml b/html/changelogs/AutoChangeLog-pr-25115.yml
new file mode 100644
index 00000000000..2688a9fe58c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-25115.yml
@@ -0,0 +1,4 @@
+author: "Cyberboss"
+delete-after: True
+changes:
+ - bugfix: "The shield generators in Boxstation Xenobiology now have the correct access"
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 30f8a0f9708..d684794ee85 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/effects/lighting_overlay.png b/icons/effects/lighting_object.png
similarity index 100%
rename from icons/effects/lighting_overlay.png
rename to icons/effects/lighting_object.png
diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi
index 32c23345e29..53bc2616860 100644
Binary files a/icons/mob/neck.dmi and b/icons/mob/neck.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index 1baca493c29..3916befb125 100644
Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ
diff --git a/icons/obj/tomb.dmi b/icons/obj/tomb.dmi
new file mode 100644
index 00000000000..41903374c0c
Binary files /dev/null and b/icons/obj/tomb.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index c3dfae19b0d..5d080aa34f3 100644
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 31631a8d952..92b318371da 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -672,6 +672,7 @@
#include "code\game\objects\effects\spawners\lootdrop.dm"
#include "code\game\objects\effects\spawners\structure.dm"
#include "code\game\objects\effects\spawners\vaultspawner.dm"
+#include "code\game\objects\effects\spawners\xeno_egg_delivery.dm"
#include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm"
#include "code\game\objects\items\body_egg.dm"
@@ -861,6 +862,7 @@
#include "code\game\objects\structures\ladders.dm"
#include "code\game\objects\structures\lattice.dm"
#include "code\game\objects\structures\life_candle.dm"
+#include "code\game\objects\structures\memorial.dm"
#include "code\game\objects\structures\mineral_doors.dm"
#include "code\game\objects\structures\mirror.dm"
#include "code\game\objects\structures\mop_bucket.dm"
@@ -1363,7 +1365,7 @@
#include "code\modules\lighting\lighting_area.dm"
#include "code\modules\lighting\lighting_atom.dm"
#include "code\modules\lighting\lighting_corner.dm"
-#include "code\modules\lighting\lighting_overlay.dm"
+#include "code\modules\lighting\lighting_object.dm"
#include "code\modules\lighting\lighting_setup.dm"
#include "code\modules\lighting\lighting_source.dm"
#include "code\modules\lighting\lighting_turf.dm"
@@ -1412,7 +1414,13 @@
#include "code\modules\mob\transform_procs.dm"
#include "code\modules\mob\update_icons.dm"
#include "code\modules\mob\camera\camera.dm"
-#include "code\modules\mob\dead\death.dm"
+#include "code\modules\mob\dead\dead.dm"
+#include "code\modules\mob\dead\new_player\login.dm"
+#include "code\modules\mob\dead\new_player\logout.dm"
+#include "code\modules\mob\dead\new_player\new_player.dm"
+#include "code\modules\mob\dead\new_player\poll.dm"
+#include "code\modules\mob\dead\new_player\preferences_setup.dm"
+#include "code\modules\mob\dead\new_player\sprite_accessories.dm"
#include "code\modules\mob\dead\observer\login.dm"
#include "code\modules\mob\dead\observer\logout.dm"
#include "code\modules\mob\dead\observer\observer.dm"
@@ -1667,12 +1675,6 @@
#include "code\modules\mob\living\simple_animal\slime\say.dm"
#include "code\modules\mob\living\simple_animal\slime\slime.dm"
#include "code\modules\mob\living\simple_animal\slime\subtypes.dm"
-#include "code\modules\mob\new_player\login.dm"
-#include "code\modules\mob\new_player\logout.dm"
-#include "code\modules\mob\new_player\new_player.dm"
-#include "code\modules\mob\new_player\poll.dm"
-#include "code\modules\mob\new_player\preferences_setup.dm"
-#include "code\modules\mob\new_player\sprite_accessories.dm"
#include "code\modules\modular_computers\laptop_vendor.dm"
#include "code\modules\modular_computers\computers\item\computer.dm"
#include "code\modules\modular_computers\computers\item\computer_components.dm"