From 5aad34f3390ed903cd37da1808d3237a793e4f1f Mon Sep 17 00:00:00 2001
From: CHOMPStation2StaffMirrorBot
<94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com>
Date: Thu, 6 Mar 2025 04:36:25 -0700
Subject: [PATCH] [MIRROR] Some more Init and Destroy issues (#10317)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
---
code/__defines/materials.dm | 1 +
code/__defines/ores.dm | 4 ++
code/game/gamemodes/events/black_hole.dm | 2 +-
code/game/jobs/job/civilian.dm | 2 +-
.../objects/effects/decals/Cleanable/fuel.dm | 18 ++++-----
.../effects/decals/Cleanable/humans.dm | 20 ++++++----
.../objects/effects/decals/Cleanable/misc.dm | 8 +++-
code/game/objects/effects/gibs.dm | 7 ++--
code/game/objects/effects/landmarks.dm | 2 +-
.../objects/effects/spawners/gibspawner.dm | 12 +++---
.../objects/items/devices/taperecorder.dm | 7 ++--
code/game/objects/items/weapons/cosmetics.dm | 4 ++
.../objects/items/weapons/material/ashtray.dm | 20 +++++-----
.../objects/items/weapons/material/foam.dm | 17 +++++----
.../items/weapons/material/shards_vr.dm | 8 ++--
.../items/weapons/material/twohanded.dm | 2 +-
.../items/weapons/tools/weldingtool.dm | 19 +++++-----
code/game/objects/structures/catwalk.dm | 8 +++-
.../game/objects/structures/props/machines.dm | 38 ++++++++++++-------
code/game/turfs/simulated.dm | 2 +-
code/modules/clothing/glasses/glasses.dm | 4 +-
.../spacesuits/rig/modules/modules.dm | 4 +-
code/modules/clothing/spacesuits/rig/rig.dm | 2 +
code/modules/mining/drilling/drill.dm | 6 +--
code/modules/mining/drilling/scanner.dm | 2 +-
code/modules/mining/mine_turfs.dm | 9 ++++-
code/modules/mining/mineral_effect.dm | 13 ++++---
code/modules/random_map/automata/caves.dm | 4 +-
code/modules/random_map/drop/droppod_doors.dm | 9 +++--
code/modules/random_map/noise/ore.dm | 2 +-
code/modules/rogueminer_vr/zonemaster.dm | 7 +++-
code/modules/shieldgen/shield_generator.dm | 4 +-
maps/expedition_vr/aerostat/_aerostat.dm | 2 +-
maps/expedition_vr/alienship/_alienship.dm | 2 +-
.../debris_field/debrisfield_things.dm | 3 +-
35 files changed, 165 insertions(+), 109 deletions(-)
diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm
index bdc9eab939..ca1a22ca43 100644
--- a/code/__defines/materials.dm
+++ b/code/__defines/materials.dm
@@ -67,6 +67,7 @@
#define MAT_DARKGLASS "darkglass"
#define MAT_FLESH "flesh"
#define MAT_FANCYBLACK "fancyblack"
+#define MAT_FOAM "foam"
// cloth materials
#define MAT_WOOL "wool"
diff --git a/code/__defines/ores.dm b/code/__defines/ores.dm
index acc85cc518..8c920fa346 100644
--- a/code/__defines/ores.dm
+++ b/code/__defines/ores.dm
@@ -1,3 +1,7 @@
+#define TURF_HAS_MINERALS 0x1
+#define TURF_HAS_ORE 0x2
+#define TURF_HAS_RARE_ORE 0x4
+
#define ORE_MARBLE "marble"
#define ORE_QUARTZ "quartz"
#define ORE_COPPER "copper"
diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm
index f378a197f8..034578be5d 100644
--- a/code/game/gamemodes/events/black_hole.dm
+++ b/code/game/gamemodes/events/black_hole.dm
@@ -8,7 +8,7 @@
density = FALSE
anchored = TRUE
-/obj/effect/bhole/Initialize()
+/obj/effect/bhole/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, PROC_REF(controller)), 0.4 SECONDS, TIMER_DELETE_ME)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index d7e7b31b94..cd875e3edd 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -323,7 +323,7 @@
job_description = "An " + JOB_ENTERTAINER + " does just that, entertains! Put on plays, play music, sing songs, tell stories, or read your favorite fanfic."
alt_titles = list(JOB_ALT_PERFORMER = /datum/alt_title/performer, JOB_ALT_MUSICIAN = /datum/alt_title/musician, JOB_ALT_STAGEHAND = /datum/alt_title/stagehand,
JOB_ALT_ACTOR = /datum/alt_title/actor, JOB_ALT_DANCER = /datum/alt_title/dancer, JOB_ALT_SINGER = /datum/alt_title/singer,
- JOB_ALT_MAGICIAN = /datum/alt_title/magician, JOB_ALT_COMEDIAN = /datum/alt_title/comedian, JOB_ALT_ARTIST = /datum/alt_title/tragedian,
+ JOB_ALT_MAGICIAN = /datum/alt_title/magician, JOB_ALT_COMEDIAN = /datum/alt_title/comedian, JOB_ALT_TRAGEDIAN = /datum/alt_title/tragedian,
JOB_CLOWN = /datum/alt_title/clown, JOB_ALT_JESTER = /datum/alt_title/clown/jester,JOB_ALT_FOOL = /datum/alt_title/clown/fool,
JOB_MIME= /datum/alt_title/mime,JOB_ALT_PASEUR= /datum/alt_title/mime/poseur, //CHOMPEDIT: Adding clown + mime and their alts as alts of entertainer
JOB_ALT_ARTIST = /datum/alt_title/artist, JOB_ALT_FITNESS_INSTRUCTOR = /datum/alt_title/fitnessinstructor, JOB_ALT_GAME_MASTER = /datum/alt_title/game_master)
diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm
index 6b6aab8022..5f3c7a3942 100644
--- a/code/game/objects/effects/decals/Cleanable/fuel.dm
+++ b/code/game/objects/effects/decals/Cleanable/fuel.dm
@@ -9,15 +9,17 @@
generic_filth = TRUE
persistent = FALSE
-/obj/effect/decal/cleanable/liquid_fuel/New(turf/newLoc,amt=1,nologs=1)
+/obj/effect/decal/cleanable/liquid_fuel/Initialize(mapload, amt=1, nologs=1)
+ if(!isturf(loc))
+ return INITIALIZE_HINT_QDEL
if(!nologs)
- message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (JMP)")
- log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
+ message_admins("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP)")
+ log_game("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z])")
src.amount = amt
var/has_spread = 0
//Be absorbed by any other liquid fuel in the tile.
- for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
+ for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc)
if(other != src)
other.amount += src.amount
other.Spread()
@@ -27,8 +29,6 @@
. = ..()
if(!has_spread)
Spread()
- else
- qdel(src)
/obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list())
//Allows liquid fuels to sometimes flow into other tiles.
@@ -53,10 +53,10 @@
icon_state = "mustard"
anchored = FALSE
-/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0)
+/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Initialize(mapload, amt = 1, d = 0)
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
- if(istype(newLoc, /turf/simulated))
- var/turf/simulated/T = newLoc
+ if(istype(loc, /turf/simulated))
+ var/turf/simulated/T = loc
T.hotspot_expose((T20C*2) + 380,500) //Ignite the fuel.
. = ..()
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 6767cb1d0d..d6478d6ae2 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -23,6 +23,7 @@ var/global/list/image/splatter_cache=list()
var/amount = 5
generic_filth = TRUE
persistent = FALSE
+ var/delete_me = FALSE
/obj/effect/decal/cleanable/blood/reveal_blood()
if(!fluorescent)
@@ -37,8 +38,10 @@ var/global/list/image/splatter_cache=list()
amount = 0
..(ignore=1)
-/obj/effect/decal/cleanable/blood/New()
- ..()
+/obj/effect/decal/cleanable/blood/Initialize(mapload)
+ . = ..()
+ if(delete_me)
+ return INITIALIZE_HINT_QDEL
update_icon()
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
return
@@ -48,7 +51,10 @@ var/global/list/image/splatter_cache=list()
if(B != src)
if (B.blood_DNA)
blood_DNA |= B.blood_DNA.Copy()
- qdel(B)
+ if(!(B.flags & ATOM_INITIALIZED))
+ B.delete_me = TRUE
+ else
+ qdel(B)
//VOREstation edit - Moved timer call to Init, and made it not call on mapload
/obj/effect/decal/cleanable/blood/Initialize(mapload, var/_age)
@@ -164,8 +170,8 @@ var/global/list/image/splatter_cache=list()
amount = 0
var/list/drips = list()
-/obj/effect/decal/cleanable/blood/drip/New()
- ..()
+/obj/effect/decal/cleanable/blood/drip/Initialize(mapload)
+ . = ..()
drips |= icon_state
/obj/effect/decal/cleanable/blood/writing
@@ -176,8 +182,8 @@ var/global/list/image/splatter_cache=list()
amount = 0
var/message
-/obj/effect/decal/cleanable/blood/writing/New()
- ..()
+/obj/effect/decal/cleanable/blood/writing/Initialize(mapload)
+ . = ..()
if(random_icon_states.len)
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
random_icon_states.Remove(W.icon_state)
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index c65e2d22d9..eec51ca591 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -37,9 +37,12 @@
icon = 'icons/effects/effects.dmi'
icon_state = "dirt"
mouse_opacity = 0
+ var/delete_me = FALSE
/obj/effect/decal/cleanable/dirt/Initialize(mapload, var/_age, var/dirt)
.=..()
+ if(delete_me)
+ return INITIALIZE_HINT_QDEL
var/turf/simulated/our_turf = src.loc
if(our_turf && istype(our_turf) && our_turf.can_dirty)
our_turf.dirt = clamp(max(age ? (dirt ? dirt : 101) : our_turf.dirt, our_turf.dirt), 0, 101)
@@ -49,7 +52,10 @@
if (alreadythere == src)
continue
else if (alreadyfound)
- qdel(alreadythere)
+ if(!(alreadythere.flags & ATOM_INITIALIZED))
+ delete_me = TRUE
+ else
+ qdel(alreadythere)
continue
alreadyfound = TRUE
alreadythere.alpha = calcalpha //don't need to constantly recalc for all of them in it because it'll just max if a non-persistent dirt overlay gets added, and then the new dirt overlay will be deleted
diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm
index 27cac182a9..96859c4aed 100644
--- a/code/game/objects/effects/gibs.dm
+++ b/code/game/objects/effects/gibs.dm
@@ -12,12 +12,13 @@
icon = 'icons/effects/map_effects.dmi'
icon_state = "gibspawn"
-/obj/effect/gibspawner/New(location, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
- ..()
+/obj/effect/gibspawner/Initialize(mapload, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
+ . = ..()
if(fleshcolor) src.fleshcolor = fleshcolor
if(bloodcolor) src.bloodcolor = bloodcolor
Gib(loc,MobDNA)
+ return INITIALIZE_HINT_QDEL
/obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
@@ -54,5 +55,3 @@
var/list/directions = gibdirections[i]
if(directions.len)
gib.streak(directions)
-
- qdel(src)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 5cc387b828..8f9c9f6328 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -6,7 +6,7 @@
unacidable = TRUE
simulated = FALSE
invisibility = 100
- var/delete_me = 0
+ var/delete_me = FALSE
/obj/effect/landmark/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index c35a753a86..12dd106ac9 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -2,25 +2,25 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(2,2,1)
-/obj/effect/gibspawner/generic/New()
+/obj/effect/gibspawner/generic/Initialize(mapload)
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
- ..()
+ . = ..()
/obj/effect/gibspawner/human
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(1,1,1,1,1,1,1)
-/obj/effect/gibspawner/human/New()
+/obj/effect/gibspawner/human/Initialize(mapload)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
gibamounts[6] = pick(0,1,2)
- ..()
+ . = ..()
/obj/effect/gibspawner/robot
sparks = 1
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
gibamounts = list(1,1,1,1,1,1)
-/obj/effect/gibspawner/robot/New()
+/obj/effect/gibspawner/robot/Initialize(mapload)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
gibamounts[6] = pick(0,1,2)
- ..()
+ . = ..()
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 5b1314c11f..ead44cbca2 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -21,8 +21,8 @@
pickup_sound = 'sound/items/pickup/device.ogg'
drop_sound = 'sound/items/drop/device.ogg'
-/obj/item/taperecorder/New()
- ..()
+/obj/item/taperecorder/Initialize(mapload)
+ . = ..()
if(ispath(mytape))
mytape = new mytape(src)
update_icon()
@@ -445,5 +445,6 @@
//Random colour tapes
-/obj/item/rectape/random/New()
+/obj/item/rectape/random/Initialize(mapload)
+ . = ..()
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index c88e10c9e5..78b902dda1 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -112,3 +112,7 @@
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(istype(E))
E.change_eye_color()
+
+/obj/item/makeover/Destroy()
+ qdel(M)
+ . = ..()
diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index d037d3e992..d25681f5c5 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -11,16 +11,14 @@ var/global/list/ashtray_cache = list()
var/image/base_image
var/max_butts = 10
-/obj/item/material/ashtray/New(var/newloc, var/material_name)
- ..(newloc, material_name)
+/obj/item/material/ashtray/Initialize(mapload, material_key)
+ . = ..()
if(!material)
- qdel(src)
- return
+ return INITIALIZE_HINT_QDEL
icon_state = "blank"
max_butts = round(material.hardness/5) //This is arbitrary but whatever.
randpixel_xy()
update_icon()
- return
/obj/item/material/ashtray/update_icon()
color = null
@@ -100,11 +98,11 @@ var/global/list/ashtray_cache = list()
update_icon()
return ..()
-/obj/item/material/ashtray/plastic/New(var/newloc)
- ..(newloc, MAT_PLASTIC)
+/obj/item/material/ashtray/plastic/Initialize(mapload)
+ . = ..(mapload, MAT_PLASTIC)
-/obj/item/material/ashtray/bronze/New(var/newloc)
- ..(newloc, MAT_BRONZE)
+/obj/item/material/ashtray/bronze/Initialize(mapload)
+ . = ..(mapload, MAT_BRONZE)
-/obj/item/material/ashtray/glass/New(var/newloc)
- ..(newloc,MAT_GLASS)
+/obj/item/material/ashtray/glass/Initialize(mapload)
+ . = ..(mapload, MAT_GLASS)
diff --git a/code/game/objects/items/weapons/material/foam.dm b/code/game/objects/items/weapons/material/foam.dm
index a719c4ea2e..ef3a2fd218 100644
--- a/code/game/objects/items/weapons/material/foam.dm
+++ b/code/game/objects/items/weapons/material/foam.dm
@@ -1,5 +1,5 @@
-/obj/item/material/twohanded/baseballbat/foam/New(var/newloc)
- ..(newloc,"foam")
+/obj/item/material/twohanded/baseballbat/foam/Initialize(mapload)
+ . = ..(mapload, MAT_FOAM)
/obj/item/material/sword/foam
attack_verb = list("bonked","whacked")
@@ -14,8 +14,8 @@
unbreakable = 1
damtype = HALLOSS
-/obj/item/material/sword/foam/New(var/newloc)
- ..(newloc,"foam")
+/obj/item/material/sword/foam/Initialize(mapload)
+ . = ..(mapload, MAT_FOAM)
/obj/item/material/twohanded/spear/foam
attack_verb = list("bonked","whacked")
@@ -26,8 +26,9 @@
base_icon = "spear_mask"
icon_state = "spear_mask0"
unbreakable = 1
-/obj/item/material/twohanded/spear/foam/New(var/newloc)
- ..(newloc,"foam")
+
+/obj/item/material/twohanded/spear/foam/Initialize(mapload)
+ . = ..(mapload, MAT_FOAM)
/obj/item/material/twohanded/fireaxe/foam
attack_verb = list("bonked","whacked")
@@ -39,8 +40,8 @@
icon_state = "fireaxe_mask0"
unbreakable = 1
-/obj/item/material/twohanded/fireaxe/foam/New(var/newloc)
- ..(newloc,"foam")
+/obj/item/material/twohanded/fireaxe/foam/Initialize(mapload)
+ . = ..(mapload, MAT_FOAM)
/obj/item/material/twohanded/fireaxe/foam/afterattack()
return
diff --git a/code/game/objects/items/weapons/material/shards_vr.dm b/code/game/objects/items/weapons/material/shards_vr.dm
index fddafde1cf..f13cf35b03 100644
--- a/code/game/objects/items/weapons/material/shards_vr.dm
+++ b/code/game/objects/items/weapons/material/shards_vr.dm
@@ -1,5 +1,5 @@
-/obj/item/material/shard/titaniumglass/New(loc)
- ..(loc, MAT_TITANIUMGLASS)
+/obj/item/material/shard/titaniumglass/Initialize(mapload)
+ . = ..(mapload, MAT_TITANIUMGLASS)
-/obj/item/material/shard/plastitaniumglass/New(loc)
- ..(loc, MAT_PLASTITANIUMGLASS)
\ No newline at end of file
+/obj/item/material/shard/plastitaniumglass/Initialize(mapload)
+ . = ..(mapload, MAT_PLASTITANIUMGLASS)
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 3a17abdbea..11e5c45c66 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -56,7 +56,7 @@
throwforce = round(force*thrown_force_divisor)
//to_world("[src] has unwielded force [force_unwielded], wielded force [force_wielded] and throwforce [throwforce] when made from default material [material.name]")
-/obj/item/material/twohanded/Initialize(mapload)
+/obj/item/material/twohanded/Initialize(mapload, material_key)
. = ..()
update_icon()
diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm
index 51586188da..aae9e2de19 100644
--- a/code/game/objects/items/weapons/tools/weldingtool.dm
+++ b/code/game/objects/items/weapons/tools/weldingtool.dm
@@ -43,7 +43,7 @@
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
tool_qualities = list(TOOL_WELDER)
-/obj/item/weldingtool/Initialize()
+/obj/item/weldingtool/Initialize(mapload)
. = ..()
// var/random_fuel = min(rand(10,20),max_fuel)
var/datum/reagents/R = new/datum/reagents(max_fuel)
@@ -493,13 +493,13 @@
always_process = TRUE
var/obj/item/weldpack/mounted_pack = null
-/obj/item/weldingtool/tubefed/New(location)
- ..()
- if(istype(location, /obj/item/weldpack))
- var/obj/item/weldpack/holder = location
+/obj/item/weldingtool/tubefed/Initialize(mapload)
+ . = ..()
+ if(istype(loc, /obj/item/weldpack))
+ var/obj/item/weldpack/holder = loc
mounted_pack = holder
else
- qdel(src)
+ return INITIALIZE_HINT_QDEL
/obj/item/weldingtool/tubefed/Destroy()
mounted_pack.nozzle = null
@@ -556,11 +556,12 @@
acti_sound = 'sound/effects/sparks4.ogg'
deac_sound = 'sound/effects/sparks4.ogg'
-/obj/item/weldingtool/electric/unloaded/New()
+/obj/item/weldingtool/electric/unloaded/Initialize(mapload)
cell_type = null
+ . = ..()
-/obj/item/weldingtool/electric/New()
- ..()
+/obj/item/weldingtool/electric/Initialize(mapload)
+ . = ..()
if(cell_type == null)
update_icon()
else if(cell_type)
diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm
index 465fdd1bb1..f19c1e4bfb 100644
--- a/code/game/objects/structures/catwalk.dm
+++ b/code/game/objects/structures/catwalk.dm
@@ -18,12 +18,18 @@
/obj/item/stack/tile/floor/techgrey = "#363f43")
var/health = 100
var/maxhealth = 100
+ var/delete_me = FALSE
/obj/structure/catwalk/Initialize()
. = ..()
+ if(delete_me)
+ return INITIALIZE_HINT_QDEL
for(var/obj/structure/catwalk/C in get_turf(src))
if(C != src)
- qdel(C)
+ if(!(C.flags & ATOM_INITIALIZED))
+ C.delete_me = TRUE
+ else
+ qdel(C)
update_connections(1)
update_icon()
diff --git a/code/game/objects/structures/props/machines.dm b/code/game/objects/structures/props/machines.dm
index c2a60eaa52..548bc27587 100644
--- a/code/game/objects/structures/props/machines.dm
+++ b/code/game/objects/structures/props/machines.dm
@@ -579,6 +579,7 @@
var/contents_vis_flags = NONE
var/contents_original_pixel_y = 0
+ var/changing_state = FALSE
/obj/structure/prop/machine/nt_pod/Initialize(mapload)
. = ..()
@@ -641,33 +642,30 @@
return
if(!user.client?.holder)
return
+ if(changing_state)
+ return
AM.forceMove(src)
/obj/structure/prop/machine/nt_pod/change_state(state)
. = ..()
+ if(changing_state)
+ return
switch(state)
if("open")
+ changing_state = TRUE
cut_overlay("nt_pod_top_on")
cut_overlay("nt_pod_under")
// Fluid drains
fluid.icon_state = "nothing"
flick("nt_pod_emptying", fluid) // 8ds
- sleep(8)
// Door opens
- door.icon_state = "nothing"
- flick("nt_pod_opening", door) // 9ds
- sleep(9)
-
- // GET OUT
- outside.layer = BELOW_MOB_LAYER
- if(contents.len)
- for(var/atom/movable/AM as anything in contents)
- unduct(AM)
+ addtimer(CALLBACK(src, PROC_REF(delayed_flick), door, "nothing", "nt_pod_opening", 0.9 SECONDS), 0.8 SECONDS) // 9ds
if("closed")
+ changing_state = TRUE
outside.layer = ABOVE_MOB_LAYER
cut_overlay("nt_pod_top_on")
add_overlay("nt_pod_top_on")
@@ -676,10 +674,8 @@
// Door closes
door.icon_state = "nt_pod_glass"
flick("nt_pod_closing", door) // 9ds
- sleep(9)
// Fluid fills
- fluid.icon_state = "nt_pod_liquid"
- flick("nt_pod_filling", fluid) // 8ds
+ addtimer(CALLBACK(src, PROC_REF(delayed_flick), fluid, "nt_pod_liquid", "nt_pod_filling"), 0.9 SECONDS) // 8ds
if("panel_open")
cut_overlay("nt_pod_panel")
@@ -689,6 +685,22 @@
// Old Virology stuff
+/obj/structure/prop/machine/nt_pod/proc/delayed_flick(var/obj/effect/overlay/ovrl, var/icon_state, var/flicked, var/get_out_time)
+ ovrl.icon_state = icon_state
+ flick(flicked, ovrl)
+ // GET OUT
+ if(get_out_time)
+ addtimer(CALLBACK(src, PROC_REF(get_out)), get_out_time)
+ return
+ changing_state = FALSE
+
+/obj/structure/prop/machine/nt_pod/proc/get_out()
+ outside.layer = BELOW_MOB_LAYER
+ if(contents.len)
+ for(var/atom/movable/AM as anything in contents)
+ unduct(AM)
+ changing_state = FALSE
+
/obj/structure/prop/machine/centrifuge
name = "centrifuge"
desc = "Used to separate things with different weight. Spin 'em round, round, right round."
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index c226796cfd..1995ff0756 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -4,7 +4,7 @@
var/image/wet_overlay = null
//Mining resources (for the large drills).
- var/has_resources
+ var/turf_resource_types
var/list/resources
var/thermite = 0
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index dbc4f62e15..d34492b0e5 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -242,8 +242,8 @@ BLIND // can't see anything
vision_flags = SEE_OBJS
enables_planes = list(VIS_FULLBRIGHT)
-/obj/item/clothing/glasses/material/New()
- ..()
+/obj/item/clothing/glasses/material/Initialize(mapload)
+ . = ..()
overlay = global_hud.material
/obj/item/clothing/glasses/material/prescription
diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm
index ffcf992449..974b65dce0 100644
--- a/code/modules/clothing/spacesuits/rig/modules/modules.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm
@@ -135,7 +135,9 @@
stat_modules += new/stat_rig_module/select(src)
stat_modules += new/stat_rig_module/charge(src)
-/obj/item/rig_module/Destroy(force, ...)
+/obj/item/rig_module/Destroy()
+ holder.installed_modules -= src
+ holder = null
QDEL_NULL_LIST(stat_modules)
. = ..()
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 9f04814e45..fcee18e83a 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -176,6 +176,8 @@
chest = null
cell = null
air_supply = null
+ for(var/obj/item/rig_module/module in installed_modules)
+ qdel(module)
STOP_PROCESSING(SSobj, src)
qdel(wires)
wires = null
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
index eccfdc130f..24cdacb445 100644
--- a/code/modules/mining/drilling/drill.dm
+++ b/code/modules/mining/drilling/drill.dm
@@ -164,7 +164,7 @@
var/turf/simulated/harvesting = pick(resource_field)
while(resource_field.len && !harvesting.resources)
- harvesting.has_resources = 0
+ harvesting.turf_resource_types &= ~(TURF_HAS_MINERALS)
harvesting.resources = null
resource_field -= harvesting
if(resource_field.len) // runtime protection
@@ -209,7 +209,7 @@
current_capacity++ // Adds the ore to the drill's capacity.
if(!found_resource) // If a drill can't see an advanced material, it will destroy it while going through.
- harvesting.has_resources = 0
+ harvesting.turf_resource_types &= ~(TURF_HAS_MINERALS)
harvesting.resources = null
resource_field -= harvesting
else
@@ -381,7 +381,7 @@
for(var/ix = 0, ix < drill_range, ix++)
mine_turf = locate(tx + ix, ty + iy, T.z)
if(!istype(mine_turf, /turf/space/))
- if(mine_turf && mine_turf.has_resources)
+ if(mine_turf && mine_turf.turf_resource_types & TURF_HAS_MINERALS)
resource_field += mine_turf
if(!resource_field.len)
diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm
index 1888c7d8eb..6fd864e02e 100644
--- a/code/modules/mining/drilling/scanner.dm
+++ b/code/modules/mining/drilling/scanner.dm
@@ -34,7 +34,7 @@
for(var/turf/simulated/T in range(range, Turf))
- if(!T.has_resources)
+ if(!(T.turf_resource_types & TURF_HAS_MINERALS))
continue
for(var/metal in T.resources)
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 3b138d1082..c92c3c6487 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -76,7 +76,7 @@ var/list/mining_overlay_cache = list()
ORE_RUTILE = /obj/item/ore/rutile
)
- has_resources = 1
+ turf_resource_types = TURF_HAS_MINERALS
/turf/simulated/mineral/ChangeTurf(turf/N, tell_universe, force_lighting_update, preserve_outdoors)
clear_ore_effects()
@@ -206,6 +206,10 @@ var/list/mining_overlay_cache = list()
/turf/simulated/mineral/Initialize()
. = ..()
+ if(turf_resource_types & TURF_HAS_RARE_ORE)
+ make_ore(1)
+ else if (turf_resource_types & TURF_HAS_ORE)
+ make_ore()
if(prob(20))
overlay_detail = "asteroid[rand(0,9)]"
update_icon(1)
@@ -353,7 +357,7 @@ var/list/mining_overlay_cache = list()
/turf/simulated/mineral/proc/UpdateMineral()
clear_ore_effects()
if(mineral)
- new /obj/effect/mineral(src, mineral)
+ new /obj/effect/mineral(src)
update_icon()
//Not even going to touch this pile of spaghetti
@@ -597,6 +601,7 @@ var/list/mining_overlay_cache = list()
update_icon()
/turf/simulated/mineral/proc/clear_ore_effects()
+ turf_resource_types &= ~(TURF_HAS_ORE | TURF_HAS_RARE_ORE)
for(var/obj/effect/mineral/M in contents)
qdel(M)
diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm
index f2506702bd..2c44fa599f 100644
--- a/code/modules/mining/mineral_effect.dm
+++ b/code/modules/mining/mineral_effect.dm
@@ -9,15 +9,18 @@
var/image/scanner_image
var/ore_reagent // Reagent from pumping water near this ore.
-/obj/effect/mineral/New(var/newloc, var/ore/M)
- ..(newloc)
+/obj/effect/mineral/Initialize(mapload)
+ . = ..()
+ var/turf/simulated/mineral/min_turf = loc
+ if(!istype(min_turf))
+ return INITIALIZE_HINT_QDEL
+ var/ore/M = min_turf.mineral
name = "[M.display_name] deposit"
ore_key = M.name
if(M.reagent)
ore_reagent = M.reagent
icon_state = "rock_[ore_key]"
- var/turf/T = get_turf(src)
- layer = T.layer+0.1
+ layer = min_turf.layer+0.1
/obj/effect/mineral/proc/get_scan_overlay()
if(!scanner_image)
@@ -26,4 +29,4 @@
scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state))
else
to_world("No ore data for [src]!")
- return scanner_image
\ No newline at end of file
+ return scanner_image
diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm
index 2c18508026..96c29db5a4 100644
--- a/code/modules/random_map/automata/caves.dm
+++ b/code/modules/random_map/automata/caves.dm
@@ -71,9 +71,9 @@
if(T.density && !T.ignore_oregen)
if(map[current_cell] == DOOR_CHAR)
- T.make_ore()
+ T.turf_resource_types |= TURF_HAS_ORE
else if(map[current_cell] == EMPTY_CHAR)
- T.make_ore(1)
+ T.turf_resource_types |= TURF_HAS_RARE_ORE
get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y))
//VOREStation Edit End
return T
diff --git a/code/modules/random_map/drop/droppod_doors.dm b/code/modules/random_map/drop/droppod_doors.dm
index 869b999b04..e0fd1cd96d 100644
--- a/code/modules/random_map/drop/droppod_doors.dm
+++ b/code/modules/random_map/drop/droppod_doors.dm
@@ -25,15 +25,16 @@
/obj/structure/droppod_door/attack_hand(var/mob/user)
if(deploying) return
+ deploying = TRUE
to_chat(user, span_danger("You prime the explosive bolts. Better get clear!"))
- sleep(30)
- deploy()
+ addtimer(CALLBACK(src, PROC_REF(deploy)), 3 SECONDS, TIMER_DELETE_ME)
/obj/structure/droppod_door/proc/deploy()
if(deployed)
return
- deployed = 1
+ deploying = FALSE
+ deployed = TRUE
visible_message(span_danger("The explosive bolts on \the [src] detonate, throwing it open!"))
playsound(src, 'sound/effects/bang.ogg', 50, 1, 5)
@@ -72,7 +73,7 @@
set_opacity(0)
icon_state = "ramptop"
var/obj/structure/droppod_door/door_bottom = new(T)
- door_bottom.deployed = 1
+ door_bottom.deployed = TRUE
door_bottom.density = FALSE
door_bottom.set_opacity(0)
door_bottom.dir = src.dir
diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm
index fda06fdcbf..074abe04fe 100644
--- a/code/modules/random_map/noise/ore.dm
+++ b/code/modules/random_map/noise/ore.dm
@@ -44,7 +44,7 @@
for(var/i=0,i= 3 ? 1 : 0)
+ if(rm_controller.diffstep >= 3)
+ M.turf_resource_types |= TURF_HAS_RARE_ORE
+ else
+ M.turf_resource_types |= TURF_HAS_ORE
mineral_rocks += M
- //If above difficulty threshold make rare ore instead (M.make_ore(1))
+ //If above difficulty threshold make rare ore instead (M.turf_resource_types |= TURF_HAS_RARE_ORE)
//Increase with difficulty etc
if(!M.density)
diff --git a/code/modules/shieldgen/shield_generator.dm b/code/modules/shieldgen/shield_generator.dm
index 72af36fff6..e6ac72c38f 100644
--- a/code/modules/shieldgen/shield_generator.dm
+++ b/code/modules/shieldgen/shield_generator.dm
@@ -695,12 +695,12 @@
// Starts fully charged
-/obj/machinery/power/shield_generator/charged/Initialize()
+/obj/machinery/power/shield_generator/charged/Initialize(mapload)
. = ..()
current_energy = max_energy
// Starts with the best SMES coil and capacitor (and fully charged)
-/obj/machinery/power/shield_generator/upgraded/Initialize()
+/obj/machinery/power/shield_generator/upgraded/Initialize(mapload)
. = ..()
for(var/obj/item/smes_coil/sc in component_parts)
component_parts -= sc
diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm
index e89260a4bd..e9d209fba9 100644
--- a/maps/expedition_vr/aerostat/_aerostat.dm
+++ b/maps/expedition_vr/aerostat/_aerostat.dm
@@ -44,7 +44,7 @@
for(var/i=0,i