diff --git a/citadel.dme b/citadel.dme
index d76c0d555aa..2abc2abd8d5 100644
--- a/citadel.dme
+++ b/citadel.dme
@@ -3276,10 +3276,10 @@
#include "code\modules\mining\mine_turfs.dm"
#include "code\modules\mining\mineral_effect.dm"
#include "code\modules\mining\ore.dm"
+#include "code\modules\mining\ore_box.dm"
#include "code\modules\mining\ore_datum.dm"
#include "code\modules\mining\ore_datum_vr.dm"
#include "code\modules\mining\resonator_vr.dm"
-#include "code\modules\mining\satchel_ore_boxdm.dm"
#include "code\modules\mining\shelter_atoms.dm"
#include "code\modules\mining\shelters.dm"
#include "code\modules\mining\vertibore.dm"
diff --git a/code/_globals/lists/mapping.dm b/code/_globals/lists/mapping.dm
index 360641682f3..31a03fa7432 100644
--- a/code/_globals/lists/mapping.dm
+++ b/code/_globals/lists/mapping.dm
@@ -39,17 +39,17 @@ GLOBAL_LIST_EMPTY(sortedAreas)
GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area)
GLOBAL_LIST_INIT(ore_types, list(
- MAT_HEMATITE = /obj/item/ore/iron,
- MAT_URANIUM = /obj/item/ore/uranium,
- MAT_GOLD = /obj/item/ore/gold,
- MAT_SILVER = /obj/item/ore/silver,
- MAT_DIAMOND = /obj/item/ore/diamond,
- MAT_PHORON = /obj/item/ore/phoron,
- MAT_OSMIUM = /obj/item/ore/osmium,
- "hydrogen" = /obj/item/ore/hydrogen,
- "silicates" = /obj/item/ore/glass,
- MAT_CARBON = /obj/item/ore/coal,
- MAT_VERDANTIUM = /obj/item/ore/verdantium,
- MAT_MARBLE = /obj/item/ore/marble,
- MAT_LEAD = /obj/item/ore/lead
+ MAT_HEMATITE = /obj/item/stack/ore/iron,
+ MAT_URANIUM = /obj/item/stack/ore/uranium,
+ MAT_GOLD = /obj/item/stack/ore/gold,
+ MAT_SILVER = /obj/item/stack/ore/silver,
+ MAT_DIAMOND = /obj/item/stack/ore/diamond,
+ MAT_PHORON = /obj/item/stack/ore/phoron,
+ MAT_OSMIUM = /obj/item/stack/ore/osmium,
+ "hydrogen" = /obj/item/stack/ore/hydrogen,
+ "silicates" = /obj/item/stack/ore/glass,
+ MAT_CARBON = /obj/item/stack/ore/coal,
+ MAT_VERDANTIUM = /obj/item/stack/ore/verdantium,
+ MAT_MARBLE = /obj/item/stack/ore/marble,
+ MAT_LEAD = /obj/item/stack/ore/lead
))
diff --git a/code/datums/recipe/crafting_recipes/recipes_misc.dm b/code/datums/recipe/crafting_recipes/recipes_misc.dm
index 6987bfab63e..0c15003d63a 100644
--- a/code/datums/recipe/crafting_recipes/recipes_misc.dm
+++ b/code/datums/recipe/crafting_recipes/recipes_misc.dm
@@ -570,7 +570,7 @@
name = "Bluespace Bike horn"
result = /obj/item/bikehorn/bluespacehonker
time = 10
- reqs = list(/obj/item/stack/ore/bluespace_crystal = 1,
+ reqs = list(/obj/item/bluespace_crystal = 1,
/obj/item/toy/crayon/blue = 1,
/obj/item/bikehorn = 1)
subcategory = CAT_MISCELLANEOUS
diff --git a/code/datums/recipe/crafting_recipes/recipes_primal.dm b/code/datums/recipe/crafting_recipes/recipes_primal.dm
index e4c003f8640..9978e7d382e 100644
--- a/code/datums/recipe/crafting_recipes/recipes_primal.dm
+++ b/code/datums/recipe/crafting_recipes/recipes_primal.dm
@@ -416,7 +416,7 @@
result = /obj/item/reagent_containers/glass/stone
time = 40
reqs = list(/obj/item/stack/animalhide/goliath_hide = 1,
- /obj/item/ore/slag = 1
+ /obj/item/stack/ore/slag = 1
)
category = CAT_PRIMAL
always_available = FALSE
@@ -460,7 +460,7 @@
result = /obj/machinery/reagentgrinder/ashlander
time = 120
reqs = list(/obj/item/stack/material/bone = 10,
- /obj/item/ore/slag = 5,
+ /obj/item/stack/ore/slag = 5,
/obj/item/stack/sinew = 5,
/obj/item/reagent_containers/glass/stone = 1
)
@@ -472,7 +472,7 @@
result = /obj/structure/ashlander/calcinator
time = 60
reqs = list(/obj/item/stack/material/bone = 5,
- /obj/item/ore/slag = 2,
+ /obj/item/stack/ore/slag = 2,
/obj/item/elderstone = 1
)
category = CAT_PRIMAL
@@ -493,7 +493,7 @@
name = "Stone Dropper"
result = /obj/item/reagent_containers/dropper/ashlander
time = 40
- reqs = list(/obj/item/ore/slag = 1,
+ reqs = list(/obj/item/stack/ore/slag = 1,
/obj/item/stack/material/bone = 1
)
category = CAT_PRIMAL
@@ -594,7 +594,7 @@
result = /obj/item/whetstone/ashlander
time = 30
reqs = list(/obj/item/stack/material/sandstone = 2,
- /obj/item/ore/slag = 1)
+ /obj/item/stack/ore/slag = 1)
category = CAT_PRIMAL
always_available = FALSE
@@ -634,7 +634,7 @@
time = 300
reqs = list(/obj/item/reagent_containers/glass/bucket/sandstone = 1,
/obj/item/condensedphlogiston = 3,
- /obj/item/ore/slag = 2,
+ /obj/item/stack/ore/slag = 2,
/obj/item/elderstone = 1)
category = CAT_PRIMAL
always_available = FALSE
diff --git a/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm b/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm
index ae579e9a52a..7bd926e0b30 100644
--- a/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm
@@ -69,7 +69,7 @@
reqs = list(/obj/item/handcuffs/cable = 1,
/obj/item/stack/rods = 1,
/obj/item/assembly/igniter = 1,
- /obj/item/ore/bluespace_crystal = 1)
+ /obj/item/bluespace_crystal = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_MELEE
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index b33b71d1528..3e5e2ef1749 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -99,7 +99,7 @@
var/heavy = 0
var/z_original
- var/meteordrop = /obj/item/ore/iron
+ var/meteordrop = /obj/item/stack/ore/iron
var/dropamt = 2
// How much damage it does to walls, using take_damage().
@@ -217,7 +217,7 @@
pass_flags = ATOM_PASS_TABLE | ATOM_PASS_GRILLE
hits = 1
hitpwr = 3
- meteordrop = /obj/item/ore/glass
+ meteordrop = /obj/item/stack/ore/glass
wall_power = 50
// Medium-sized meteors aren't very special and can be stopped easily by r-walls.
@@ -250,7 +250,7 @@
icon_state = "flaming"
hits = 5
heavy = 1
- meteordrop = /obj/item/ore/phoron
+ meteordrop = /obj/item/stack/ore/phoron
wall_power = 100
/obj/effect/meteor/flaming/meteor_effect(var/explode)
@@ -263,7 +263,7 @@
name = "glowing meteor"
icon_state = "glowing"
heavy = 1
- meteordrop = /obj/item/ore/uranium
+ meteordrop = /obj/item/stack/ore/uranium
wall_power = 75
@@ -279,7 +279,7 @@
name = "conducting meteor"
icon_state = "glowing_blue"
desc = "Hide your floppies!"
- meteordrop = /obj/item/ore/osmium
+ meteordrop = /obj/item/stack/ore/osmium
dropamt = 3
wall_power = 80
@@ -296,11 +296,11 @@
/obj/effect/meteor/tunguska
name = "tunguska meteor"
icon_state = "flaming"
- desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity"
+ desc = "Your life briefly passes before your eyes the moment you lay them on this monstrosity"
hits = 30
hitpwr = 1
heavy = 1
- meteordrop = /obj/item/ore/phoron
+ meteordrop = /obj/item/stack/ore/phoron
wall_power = 150
/obj/effect/meteor/tunguska/meteor_effect(var/explode)
diff --git a/code/game/mecha/equipment/tools/drill.dm b/code/game/mecha/equipment/tools/drill.dm
index 30439c66c15..080daaf81af 100644
--- a/code/game/mecha/equipment/tools/drill.dm
+++ b/code/game/mecha/equipment/tools/drill.dm
@@ -44,7 +44,7 @@
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
if(ore_box)
- for(var/obj/item/ore/ore in range(chassis,1))
+ for(var/obj/item/stack/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
ore.forceMove(ore_box)
else if(isliving(target))
@@ -122,7 +122,7 @@
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
if(ore_box)
- for(var/obj/item/ore/ore in range(chassis,1))
+ for(var/obj/item/stack/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
ore.forceMove(ore_box)
else if(target.loc == C)
diff --git a/code/game/mecha/micro/micro_equipment.dm b/code/game/mecha/micro/micro_equipment.dm
index e22f593a17d..242982a3998 100644
--- a/code/game/mecha/micro/micro_equipment.dm
+++ b/code/game/mecha/micro/micro_equipment.dm
@@ -138,7 +138,7 @@
log_message("Drilled through [target]")
var/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/ore_box = (locate(/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop) in chassis.equipment)
if(ore_box)
- for(var/obj/item/ore/ore in range(chassis,1))
+ for(var/obj/item/stack/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
if (ore_box.contents.len >= ore_box.orecapacity)
occupant_message("The ore compartment is full.")
@@ -174,7 +174,7 @@
//var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
- for(var/obj/item/ore/ore in range(chassis,1))
+ for(var/obj/item/stack/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
if (contents.len >= orecapacity)
occupant_message("The ore compartment is full.")
@@ -189,7 +189,7 @@
if(contents.len < 1)
occupant_message("The ore compartment is empty.")
return
- for (var/obj/item/ore/O in contents)
+ for (var/obj/item/stack/ore/O in contents)
contents -= O
O.loc = chassis.loc
occupant_message("Ore compartment emptied.")
@@ -219,7 +219,7 @@
to_chat(usr, "The ore box is empty")
return
- for (var/obj/item/ore/O in contents)
+ for (var/obj/item/stack/ore/O in contents)
contents -= O
O.loc = src.loc
to_chat(usr, "You empty the ore box")
diff --git a/code/game/objects/items/stacks/sandbag.dm b/code/game/objects/items/stacks/sandbag.dm
index 13fff9346b7..3dc35bc7663 100644
--- a/code/game/objects/items/stacks/sandbag.dm
+++ b/code/game/objects/items/stacks/sandbag.dm
@@ -29,19 +29,19 @@
icon_state = "sandbag_empty"
/obj/item/stack/emptysandbag/attackby(var/obj/item/W, var/mob/user)
- if(istype(W, /obj/item/ore/glass) && !interact(user, src))
+ if(istype(W, /obj/item/stack/ore/glass) && !interact(user, src))
if(do_after(user, 1 SECONDS, src) && use(1))
+ var/obj/item/stack/ore/glass/O = W
var/turf/T = get_turf(user)
- to_chat(user, "You fill the sandbag.")
- qdel(W)
- new /obj/item/stack/sandbags(T)
+ if(O.use(1))
+ to_chat(user, "You fill the sandbag.")
+ new /obj/item/stack/sandbags(T)
return
else if(is_sharp(W))
user.visible_message("\The [user] begins cutting up [src] with [W].", "You begin cutting up [src] with [W].")
if(do_after(user, 3 SECONDS, src) && use(1))
to_chat(user, "You cut [src] into pieces!")
- for(var/i in 1 to rand(1,2))
- new /obj/item/stack/material/cloth(drop_location())
+ new /obj/item/stack/material/cloth(drop_location(),rand(1,2))
return
return ..()
@@ -86,7 +86,7 @@
to_chat(user, "You cut [src] into pieces, causing sand to spill everywhere!")
for(var/i in 1 to rand(1,1))
new /obj/item/stack/material/cloth(drop_location())
- new /obj/item/ore/glass(drop_location())
+ new /obj/item/stack/ore/glass(drop_location())
return
else
if(do_after(user, 1 SECONDS, src) && use(1))
@@ -94,7 +94,7 @@
to_chat(user, "You cut the cords securing the sandbag, spilling sand everywhere!")
for(var/i in 1 to rand(1,1))
new /obj/item/stack/emptysandbag(T)
- new /obj/item/ore/glass(T)
+ new /obj/item/stack/ore/glass(T)
return
//Sandbag Barricades
@@ -158,5 +158,5 @@
new /obj/item/stack/sandbags(src.loc)
else
new /obj/item/stack/material/cloth(src.loc)
- new /obj/item/ore/glass(src.loc)
+ new /obj/item/stack/ore/glass(src.loc)
qdel(src)
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 90972866f68..f2ed4d9d5ff 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -387,5 +387,5 @@
if(amount == 0 && !no_limits)
qdel(src)
return FALSE
-
+ update_icon()
return TRUE
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index da126f8105b..558ba613974 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -110,6 +110,7 @@
// -----------------------------
/*
* Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it. Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents.
+ * this now functions like an ore box, but limited capacity. - Blubelle
*/
/obj/item/storage/bag/ore
@@ -119,10 +120,12 @@
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = ITEMSIZE_NORMAL
- max_storage_space = ITEMSIZE_COST_NORMAL * 25
+ max_storage_space = ITEMSIZE_COST_NORMAL * 25 //kinda irrelevant now :^)
max_w_class = ITEMSIZE_NORMAL
- can_hold = list(/obj/item/ore)
+ can_hold = list(/obj/item/stack/ore)
var/stored_ore = list()
+ var/total_ore = 0 //current ore stored
+ var/max_ore = 200 //how much ore it can hold
var/last_update = 0
/obj/item/storage/bag/ore/update_w_class()
@@ -131,26 +134,30 @@
/obj/item/storage/bag/ore/gather_all(turf/T as turf, mob/user as mob, var/silent = 0)
var/success = 0
var/failure = 0
- for(var/obj/item/ore/I in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds.
- if(contents.len >= max_storage_space)
+ for(var/obj/item/stack/ore/I in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds.
+ if(istype(user.pulling, /obj/structure/ore_box))
+ var/obj/structure/ore_box/O = user.pulling
+ I.forceMove(O)
+ if(world.time < last_message && !silent)
+ to_chat(user, "You put the contents you scooped up into [O].")
+ last_message = world.time + 10
+ else if(total_ore >= max_ore || contents.len >= max_storage_space)
failure = 1
break
- I.forceMove(src)
- success = 1
+ else
+ I.forceMove(src)
+ success = 1
if(success && !failure && !silent)
- if(world.time >= last_message == 0)
+ if(world.time < last_message == 0)
to_chat(user, "You put everything in [src].")
last_message = world.time + 10
- else if(success && (!silent || (silent && contents.len >= max_storage_space)))
+ else if (success && (!silent || total_ore >= max_ore))
to_chat(user, "You fill the [src].")
last_message = world.time + 10
else if(!silent)
if(world.time >= last_message == 0)
to_chat(user, "You fail to pick anything up with \the [src].")
last_message = world.time + 90
- if(istype(user.pulling, /obj/structure/ore_box)) // buffy fix with last_message, no more spam
- var/obj/structure/ore_box/O = user.pulling
- O.attackby(src, user)
/obj/item/storage/bag/ore/equipped(mob/user, slot, flags)
. = ..()
@@ -161,43 +168,99 @@
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
/obj/item/storage/bag/ore/proc/autoload(datum/source, atom/oldLoc, dir, forced)
- var/obj/item/ore/O = locate() in get_turf(src)
+ var/obj/item/stack/ore/O = locate() in get_turf(src)
if(O)
gather_all(get_turf(src), ismob(source)? source : null)
+/obj/item/storage/bag/ore/attack_self(mob/user)
+ . = ..()
+
+ if(isOreEmpty())
+ to_chat(user, SPAN_WARNING("[src] is empty."))
+ return
+
+ to_chat(user, SPAN_NOTICE("You begin emptying [src]."))
+
+ if(do_after(usr,10,src))
+ while(!isOreEmpty())
+ if(!do_after(user, 2, src))
+ to_chat(user,SPAN_NOTICE("You stop emptying [src]."))
+ return
+ var/atom/A = drop_location()
+ if(!A || (length(A.contents) > 200))
+ to_chat(user, SPAN_WARNING("The area under [src] is too full."))
+ return
+ deposit(A,50)
+ to_chat(user,SPAN_NOTICE("You finish emptying [src]."))
+
+/obj/item/storage/bag/ore/Entered(atom/movable/AM, atom/oldLoc)
+ . = ..()
+ if(istype(AM, /obj/item/stack/ore))
+ take(AM)
+ else //shouldn't be possible unless someone's adminbussing weirdly.
+ AM.forceMove(drop_location())
+
+/obj/item/storage/bag/ore/drop_products(method, atom/where)
+ . = ..()
+ var/i = 0
+ while(!isOreEmpty() && i < 200) //may be laggy as hell if they're carrying 2,000+ sand, so capping it at 200 items dropped.
+ deposit(where, 50)
+ i++
+
+/obj/item/storage/bag/ore/proc/take(obj/item/stack/ore/O)
+ if(!istype(O))
+ return
+ var/overflow = max((total_ore + O.amount) - max_ore, 0)
+ var/store_amount = O.amount - overflow
+
+ if(!stored_ore[O.type])
+ stored_ore[O.type] = store_amount
+ else
+ stored_ore[O.type] += store_amount
+ total_ore += O.amount
+
+ if(overflow)
+ O.use(store_amount)
+ O.forceMove(drop_location())
+ else
+ qdel(O)
+
+/obj/item/storage/bag/ore/proc/deposit(atom/newloc, amount = 50)
+ if(isOreEmpty())
+ return FALSE
+ var/path = stored_ore[1]
+ if(amount > stored_ore[path])
+ amount = stored_ore[path]
+ new path(newloc, amount)
+ stored_ore[path] -= amount
+ total_ore -= amount
+ if(stored_ore[path] <= 0)
+ stored_ore -= path
+ return TRUE
+
+/obj/item/storage/bag/ore/proc/isOreEmpty()
+ return !length(stored_ore)
+
/obj/item/storage/bag/ore/examine(mob/user, dist)
. = ..()
if(!Adjacent(user)) //Can only check the contents of ore bags if you can physically reach them.
return
if(istype(user, /mob/living))
add_fingerprint(user)
- if(!contents.len)
+ if(isOreEmpty())
. += "It is empty."
return
if(world.time > last_update + 10)
- update_ore_count()
last_update = world.time
. += "It holds:"
for(var/ore in stored_ore)
- . += "- [stored_ore[ore]] [ore]"
+ var/obj/item/stack/ore/O = ore
+ . += "- [stored_ore[ore]] [initial(O.name)]"
-/obj/item/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it.
- if(world.time > last_update + 10)
- update_ore_count()
- last_update = world.time
- user.do_examinate(src)
-
-/obj/item/storage/bag/ore/proc/update_ore_count() //Stolen from ore boxes.
-
- stored_ore = list()
-
- for(var/obj/item/ore/O in contents)
- if(stored_ore[O.name])
- stored_ore[O.name]++
- else
- stored_ore[O.name] = 1
+/obj/item/storage/bag/ore/open(mob/user as mob) //No opening it since the ores are nonexistent
+ user.do_examinate(src)
//Ashlander variant!
/obj/item/storage/bag/ore/ashlander
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index a2426135c33..b60c1aa3a1c 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -220,9 +220,9 @@
else
to_chat(user, "This cell is not fitted for [src].")
- if(istype(W, /obj/item/ore/bluespace_crystal))
+ if(istype(W, /obj/item/bluespace_crystal))
if(!bcell)
- var/obj/item/ore/bluespace_crystal/BSC = W
+ var/obj/item/bluespace_crystal/BSC = W
var/obj/item/melee/baton/cattleprod/teleprod/S = new /obj/item/melee/baton/cattleprod/teleprod
qdel(src)
qdel(BSC)
diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm
index 98237b4a4db..c60289bde9b 100644
--- a/code/game/objects/random/mapping.dm
+++ b/code/game/objects/random/mapping.dm
@@ -174,26 +174,26 @@
/obj/structure/closet/crate/science
),
prob(5);list(
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
- /obj/item/ore/gold,
+ /obj/item/stack/ore/diamond, //TODO: get rid of this legacy loot bullshit so we don't have nonsense like this.
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
+ /obj/item/stack/ore/gold,
/obj/structure/closet/crate/engineering
),
prob(5);list(
diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm
index 5ac89312c44..b6fc32dbd1f 100644
--- a/code/game/objects/random/misc.dm
+++ b/code/game/objects/random/misc.dm
@@ -1062,82 +1062,82 @@
prob(9);list(
/obj/item/storage/bag/ore,
/obj/item/shovel,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen
+ /obj/item/stack/ore/glass, //TODO: replace this legacy loot nonsense.
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen
),
prob(7);list(
/obj/item/storage/bag/ore,
/obj/item/pickaxe,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium
),
prob(4);list(
/obj/item/clothing/suit/radiation,
/obj/item/clothing/head/radiation,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium),
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium),
prob(2);list(
/obj/item/flashlight/lantern,
/obj/item/clothing/glasses/material,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond
),
prob(1);list(
/obj/item/mining_scanner,
/obj/item/shovel/spade,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium
)
)
diff --git a/code/game/objects/random/underdark.dm b/code/game/objects/random/underdark.dm
index 2bac39a527c..8df29b27057 100644
--- a/code/game/objects/random/underdark.dm
+++ b/code/game/objects/random/underdark.dm
@@ -42,82 +42,82 @@
prob(9);list(
/obj/item/storage/bag/ore,
/obj/item/shovel,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/glass,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen,
- /obj/item/ore/hydrogen
+ /obj/item/stack/ore/glass, //TODO: tell this legacy loot bullshit to fuck off so we don't have this happening.
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/glass,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen,
+ /obj/item/stack/ore/hydrogen
),
prob(7);list(
/obj/item/storage/bag/ore,
/obj/item/pickaxe,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium,
- /obj/item/ore/osmium
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium,
+ /obj/item/stack/ore/osmium
),
prob(4);list(
/obj/item/clothing/suit/radiation,
/obj/item/clothing/head/radiation,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium,
- /obj/item/ore/uranium),
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium,
+ /obj/item/stack/ore/uranium),
prob(2);list(
/obj/item/flashlight/lantern,
/obj/item/clothing/glasses/material,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond,
- /obj/item/ore/diamond
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond,
+ /obj/item/stack/ore/diamond
),
prob(1);list(
/obj/item/mining_scanner,
/obj/item/shovel/spade,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium,
- /obj/item/ore/verdantium
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium,
+ /obj/item/stack/ore/verdantium
)
)
diff --git a/code/game/objects/structures/ashlander.dm b/code/game/objects/structures/ashlander.dm
index 3d00370a7f4..d11a1d037c3 100644
--- a/code/game/objects/structures/ashlander.dm
+++ b/code/game/objects/structures/ashlander.dm
@@ -20,7 +20,7 @@
/obj/structure/ashlander/production/attackby(var/obj/item/I, mob/user)
. = ..()
var/msg = insert_msg_override[I.type] || default_message
- if(istype(I, /obj/item/ore))
+ if(istype(I, /obj/item/stack/ore))
to_chat(user, "You pour the [I] into the [src]! [msg]")
attempt_consume()
if(istype(I, /obj/item/storage/bag))
@@ -47,7 +47,7 @@
* @return TRUE / FALSE based on success / failure.
*/
-/obj/structure/ashlander/production/proc/attempt_consume(obj/item/ore/O, mob/user)
+/obj/structure/ashlander/production/proc/attempt_consume(obj/item/stack/ore/O, mob/user)
if (!istype(O))
return FALSE
@@ -60,7 +60,8 @@
if (istype(O, ty))
var/target_type = ore_mapping[ty]
new target_type(get_turf(src))
- qdel(O)
+ if(!O.use(1))
+ return FALSE
return TRUE
return FALSE
@@ -70,13 +71,13 @@
desc = "A primitive forge of Scorian design. It is used primarily to convert iron and lead into more workable shapes."
default_message = "It begins to melt in the crucible."
ore_mapping = list(
- /obj/item/ore/lead = /obj/item/stack/material/lead,
- /obj/item/ore/copper = /obj/item/stack/material/copper,
- /obj/item/ore/iron = /obj/item/stack/rods,
- /obj/item/ore/glass = /obj/item/ore/slag
+ /obj/item/stack/ore/lead = /obj/item/stack/material/lead,
+ /obj/item/stack/ore/copper = /obj/item/stack/material/copper,
+ /obj/item/stack/ore/iron = /obj/item/stack/rods,
+ /obj/item/stack/ore/glass = /obj/item/stack/ore/slag
)
insert_msg_override = list(
- /obj/item/ore/iron = "It slowly feeds through the extruder."
+ /obj/item/stack/ore/iron = "It slowly feeds through the extruder."
)
/obj/structure/ashlander/production/brickmaker
@@ -85,16 +86,19 @@
icon_state = "brickmaker"
default_message = "It is slowly compacted by the press."
ore_mapping = list(
- /obj/item/ore/glass = /obj/item/stack/material/sandstone
+ /obj/item/stack/ore/glass = /obj/item/stack/material/sandstone
)
-/obj/structure/ashlander/production/brickmaker/attackby(obj/item/O, mob/user)
+/obj/structure/ashlander/production/brickmaker/attackby(obj/item/I, mob/user)
. = ..()
- if(istype(O, /obj/item/ore/glass))
- to_chat(user, "You pour the [O] into the [src]! After some work you compress it into a sturdy brick.")
- qdel(O)
- var/turf/T = get_turf(src)
- new /obj/item/stack/material/sandstone(T)
+ if(istype(I, /obj/item/stack/ore/glass))
+ var/obj/item/stack/ore/glass/O = I
+ if(O.use(1))
+ to_chat(user, "You pour the [O] into [src]! After some work you compress it into a sturdy brick.")
+ var/turf/T = get_turf(src)
+ new /obj/item/stack/material/sandstone(T)
+ else
+ to_chat(user, SPAN_WARNING("You try to pour the [O] into [src], but realize [O] didn't actually exist. (you somehow had zero or less of a stack??? yell at coders how you did that.)"))
//This is a child of the Hydroponics seed extractor, and was originally in that file. But I've moved it here since it's an Ashlander "machine".
/obj/machinery/seed_extractor/press
diff --git a/code/game/objects/structures/flora/rocks.dm b/code/game/objects/structures/flora/rocks.dm
index b37b5813f7c..04ac335af12 100644
--- a/code/game/objects/structures/flora/rocks.dm
+++ b/code/game/objects/structures/flora/rocks.dm
@@ -9,7 +9,7 @@
randomize_size = TRUE
var/mindrop = 0
var/upperdrop = 4
- var/outcropdrop = /obj/item/ore/glass
+ var/outcropdrop = /obj/item/stack/ore/glass
/obj/structure/flora/rock/alternative_1
icon_state = "basalt2"
@@ -32,7 +32,6 @@
to_chat(user, "[user] begins to hack away at \the [src].")
if(do_after(user,40))
to_chat(user, "You have finished digging!")
- for(var/i=0;i<(rand(mindrop,upperdrop));i++)
- new outcropdrop(get_turf(src))
+ new outcropdrop(get_turf(src),rand(mindrop,upperdrop))
qdel(src)
return
diff --git a/code/modules/events/meteor_strike_vr.dm b/code/modules/events/meteor_strike_vr.dm
index 48ffced22af..053198c6a15 100644
--- a/code/modules/events/meteor_strike_vr.dm
+++ b/code/modules/events/meteor_strike_vr.dm
@@ -87,13 +87,13 @@
switch(rand(1,100))
if(1 to 30)
for(var/i=1 to rand(12,36))
- new /obj/item/ore/iron(src)
+ new /obj/item/stack/ore/iron(src)
if(31 to 90)
for(var/i=1 to rand(8,24))
- new /obj/item/ore/silver(src)
- new /obj/item/ore/gold(src)
- new /obj/item/ore/osmium(src)
- new /obj/item/ore/diamond(src)
+ new /obj/item/stack/ore/silver(src)
+ new /obj/item/stack/ore/gold(src)
+ new /obj/item/stack/ore/osmium(src)
+ new /obj/item/stack/ore/diamond(src)
if(91 to 100)
new /obj/machinery/artifact(src)
diff --git a/code/modules/loot/packs/misc.dm b/code/modules/loot/packs/misc.dm
index 9f9324eb9f9..c7dad6fb77a 100644
--- a/code/modules/loot/packs/misc.dm
+++ b/code/modules/loot/packs/misc.dm
@@ -24,7 +24,7 @@
/datum/prototype/struct/loot_pack/misc/clown/draw(amount)
return list(
- /obj/item/ore/vaudium = isnull(amount)? rand(15, 25) : amount,
+ /obj/item/stack/ore/vaudium = isnull(amount)? rand(15, 25) : amount,
)
/datum/prototype/struct/loot_pack/misc/clown/is_deterministic()
diff --git a/code/modules/loot/packs/ore.dm b/code/modules/loot/packs/ore.dm
index 69bdc8965ac..cb7ffc87a2e 100644
--- a/code/modules/loot/packs/ore.dm
+++ b/code/modules/loot/packs/ore.dm
@@ -3,9 +3,9 @@
/datum/prototype/struct/loot_pack/ore/valuable
some = list(
- /obj/item/ore/osmium = 5,
- /obj/item/ore/diamond = 3,
- /obj/item/ore/verdantium = 1,
- /obj/item/ore/hydrogen = 1,
+ /obj/item/stack/ore/osmium = 5,
+ /obj/item/stack/ore/diamond = 3,
+ /obj/item/stack/ore/verdantium = 1,
+ /obj/item/stack/ore/hydrogen = 1,
)
amt = 30
diff --git a/code/modules/maps/away_missions/archive/stationCollision.dm b/code/modules/maps/away_missions/archive/stationCollision.dm
index 3530f63eb5b..e0cf1a49ec8 100644
--- a/code/modules/maps/away_missions/archive/stationCollision.dm
+++ b/code/modules/maps/away_missions/archive/stationCollision.dm
@@ -171,7 +171,7 @@ var/sc_safecode5 = "[rand(0,9)]"
new /obj/item/clothing/head/helmet/space/cult(src)
new /obj/item/clothing/suit/space/cult(src)
//new /obj/item/teleportation_scroll(src)
- new /obj/item/ore/diamond(src)
+ new /obj/item/stack/ore/diamond(src)
/*
* Modified Nar-Sie
diff --git a/code/modules/materials/definitions/organic/wood/plank.dm b/code/modules/materials/definitions/organic/wood/plank.dm
index 32af57eea47..cc96c5491bd 100644
--- a/code/modules/materials/definitions/organic/wood/plank.dm
+++ b/code/modules/materials/definitions/organic/wood/plank.dm
@@ -231,4 +231,10 @@
cost = 5,
time = 4 SECONDS,
)
+ recipes += create_stack_recipe_datum(
+ name = "ore box",
+ product = /obj/structure/ore_box,
+ cost = 5,
+ time = 5 SECONDS,
+ )
return recipes
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
index 2ef6a7d542f..8af7afc2a28 100644
--- a/code/modules/mining/drilling/drill.dm
+++ b/code/modules/mining/drilling/drill.dm
@@ -18,19 +18,19 @@
var/obj/item/radio/intercom/faultreporter = new /obj/item/radio/intercom{channels=list("Supply")}(null)
var/gps_tag = "DRILL0"
var/list/ore_types = list(
- MAT_HEMATITE = /obj/item/ore/iron,
- MAT_URANIUM = /obj/item/ore/uranium,
- MAT_GOLD = /obj/item/ore/gold,
- MAT_SILVER = /obj/item/ore/silver,
- MAT_COPPER = /obj/item/ore/copper,
- MAT_DIAMOND = /obj/item/ore/diamond,
- MAT_PHORON = /obj/item/ore/phoron,
- MAT_OSMIUM = /obj/item/ore/osmium,
- "hydrogen" = /obj/item/ore/hydrogen,
- "silicates" = /obj/item/ore/glass,
- MAT_CARBON = /obj/item/ore/coal,
- MAT_MARBLE = /obj/item/ore/marble,
- MAT_LEAD = /obj/item/ore/lead,
+ MAT_HEMATITE = /obj/item/stack/ore/iron,
+ MAT_URANIUM = /obj/item/stack/ore/uranium,
+ MAT_GOLD = /obj/item/stack/ore/gold,
+ MAT_SILVER = /obj/item/stack/ore/silver,
+ MAT_COPPER = /obj/item/stack/ore/copper,
+ MAT_DIAMOND = /obj/item/stack/ore/diamond,
+ MAT_PHORON = /obj/item/stack/ore/phoron,
+ MAT_OSMIUM = /obj/item/stack/ore/osmium,
+ "hydrogen" = /obj/item/stack/ore/hydrogen,
+ "silicates" = /obj/item/stack/ore/glass,
+ MAT_CARBON = /obj/item/stack/ore/coal,
+ MAT_MARBLE = /obj/item/stack/ore/marble,
+ MAT_LEAD = /obj/item/stack/ore/lead,
)
//Upgrades
@@ -104,15 +104,19 @@
for(var/metal in GLOB.ore_types)
- if(contents.len >= capacity)
+ var/orecount = 0
+ for(var/obj/item/stack/ore/s in contents)
+ orecount += s.amount
+
+ if(orecount >= capacity)
system_error("Insufficient storage space.")
active = 0
need_player_check = 1
update_icon()
return
- if(contents.len + total_harvest >= capacity)
- total_harvest = capacity - contents.len
+ if(orecount + total_harvest >= capacity)
+ total_harvest = capacity - orecount
if(total_harvest <= 0)
break
@@ -295,7 +299,7 @@
var/obj/structure/ore_box/B = locate() in orange(1)
if(B)
- for(var/obj/item/ore/O in contents)
+ for(var/obj/item/stack/ore/O in contents)
B.take(O)
to_chat(usr, "You unload the drill's storage cache into the ore box.")
else
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 153fd2e743b..ead6d027430 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -158,6 +158,7 @@
var/obj/machinery/mineral/output = null
var/obj/machinery/mineral/console = null
var/sheets_per_tick = 20
+ var/ores_per_tick = 30
var/list/ores_processing = list()
var/list/ores_stored = list()
var/static/list/alloy_data
@@ -226,13 +227,17 @@
tick++
//Grab some more ore to process this tick.
- for(var/i = 0,i[user] begins to hack away at \the [src].")
if(do_after(user,40))
to_chat(user, "You have finished digging!")
- for(var/i=0;i<(rand(mindrop,upperdrop));i++)
- new outcropdrop(get_turf(src))
+ new outcropdrop(get_turf(src), rand(mindrop,upperdrop))
qdel(src)
return
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 842d956ef03..f7f5610b7e9 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -409,7 +409,7 @@
else if(istype(W,/obj/item/storage/bag/ore))
var/obj/item/storage/bag/ore/S = W
if(S.collection_mode)
- for(var/obj/item/ore/O in contents)
+ for(var/obj/item/stack/ore/O in contents)
O.attackby(W,user)
return
@@ -521,7 +521,7 @@
next_rock += P.excavation_amount
while(next_rock > 50)
next_rock -= 50
- new /obj/item/ore(src)
+ new /obj/item/stack/ore(src)
return
else
return
@@ -574,7 +574,7 @@
next_rock += T.excavation_amount
while(next_rock > 50)
next_rock -= 50
- var/obj/item/ore/O = new(src)
+ var/obj/item/stack/ore/O = new(src)
O.geologic_data = geologic_data
return
else
@@ -634,11 +634,11 @@
for(var/obj/effect/mineral/M in contents)
qdel(M)
-/turf/simulated/mineral/proc/DropMineral()
+/turf/simulated/mineral/proc/DropMineral(var/amount)
if(!mineral)
return
clear_ore_effects()
- var/obj/item/ore/O = new mineral.ore (src)
+ var/obj/item/stack/ore/O = new mineral.ore(src,amount)
return O
/turf/simulated/mineral/proc/excavate_turf()
@@ -666,16 +666,13 @@
if(!density)
if(!sand_dug)
sand_dug = 1
- for(var/i=0;i<5;i++)
- new/obj/item/ore/glass(src)
+ new/obj/item/stack/ore/glass(src,5)
QUEUE_SMOOTH(src)
return
if (mineral && mineral.result_amount)
-
//if the turf has already been excavated, some of it's ore has been removed
- for (var/i = 1 to mineral.result_amount - mined_ore)
- DropMineral()
+ DropMineral(mineral.result_amount - mined_ore)
//destroyed artifacts have weird, unpleasant effects
//make sure to destroy them before changing the turf though
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index 5ac729534ff..8d8807e6faa 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -1,48 +1,83 @@
-/obj/item/ore
+/obj/item/stack/ore
name = "small rock"
- icon = 'icons/obj/mining.dmi'
- icon_state = "ore2"
- w_class = ITEMSIZE_SMALL
+ icon = 'icons/obj/stacks_ore.dmi'
+ icon_state = "ore"
+ no_variants = FALSE
+ w_class = ITEMSIZE_NORMAL
rad_flags = RAD_BLOCK_CONTENTS | RAD_NO_CONTAMINATE // uh let's like, not? it'd be funny but fields usually have like 400 pieces of ore in just a few tiles.
+ //^ not as horrible now that it's stacked but I'm keeping this. <3
+ singular_name = "ore"
+ max_amount = 50
+
var/datum/geosample/geologic_data
var/material
-/obj/item/ore/legacy_ex_act(severity)
+/obj/item/stack/ore/update_icon()
+ if(no_variants)
+ icon_state = initial(icon_state)
+ else //this is assuming that max_amount for ores will always be 50.
+ switch(amount)
+ if(-INFINITY to 1)
+ icon_state = initial(icon_state)
+ if(2 to 4)
+ icon_state = "[initial(icon_state)]_[amount]"
+ if(5 to 10)
+ icon_state = "[initial(icon_state)]_5"
+ if(11 to 26)
+ icon_state = "[initial(icon_state)]_6"
+ if(27 to INFINITY)
+ icon_state = "[initial(icon_state)]_7"
+ item_state = initial(icon_state)
+
+/obj/item/stack/ore/legacy_ex_act(severity)
return
-/obj/item/ore/uranium
+/obj/item/stack/ore/Initialize(mapload)
+ . = ..()
+ pixel_x = rand(0,16)-8
+ pixel_y = rand(0,8)-8
+
+/obj/item/stack/ore/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/core_sampler))
+ var/obj/item/core_sampler/C = W
+ C.sample_item(src, user)
+ else
+ return ..()
+
+/obj/item/stack/ore/uranium
name = "pitchblende"
- icon_state = "ore_uranium"
+ icon_state = "uranium"
origin_tech = list(TECH_MATERIAL = 5)
- material = "uranium"
+ material = MAT_URANIUM
-/obj/item/ore/iron
+/obj/item/stack/ore/iron
name = "hematite"
- icon_state = "ore_iron"
+ icon_state = "iron"
origin_tech = list(TECH_MATERIAL = 1)
- material = "hematite"
+ material = MAT_HEMATITE
-/obj/item/ore/coal
+/obj/item/stack/ore/coal
name = "raw carbon"
- icon_state = "ore_coal"
+ icon_state = "coal"
origin_tech = list(TECH_MATERIAL = 1)
- material = "carbon"
+ material = MAT_CARBON
-/obj/item/ore/marble
+/obj/item/stack/ore/marble
name = "recrystallized carbonate"
- icon_state = "ore_marble"
+ icon_state = "marble"
origin_tech = list(TECH_MATERIAL = 1)
- material = "marble"
+ material = MAT_MARBLE
-/obj/item/ore/glass
+/obj/item/stack/ore/glass
name = "sand"
- icon_state = "ore_glass"
+ icon_state = "glass"
origin_tech = list(TECH_MATERIAL = 1)
material = "sand"
+ singular_name = "sand"
slot_flags = SLOT_HOLSTER
// POCKET SAND!
-/obj/item/ore/glass/throw_impact(atom/hit_atom)
+/obj/item/stack/ore/glass/throw_impact(atom/hit_atom)
..()
var/mob/living/carbon/human/H = hit_atom
if(istype(H) && H.has_eyes() && prob(85))
@@ -50,56 +85,59 @@
H.Blind(5)
H.eye_blurry += 10
spawn(1)
- if(istype(loc, /turf/)) qdel(src)
+ if(isturf(loc))
+ use(1) //oh no, they might toss the sand right back if you had more of it...
-
-/obj/item/ore/phoron
+/obj/item/stack/ore/phoron
name = "phoron crystals"
- icon_state = "ore_phoron"
+ icon_state = "phoron"
+ singular_name = "crystal"
origin_tech = list(TECH_MATERIAL = 2)
- material = "phoron"
+ material = MAT_PHORON
-/obj/item/ore/copper
+/obj/item/stack/ore/copper
name = "native copper ore"
- icon_state = "ore_copper"
+ icon_state = "copper"
origin_tech = list(TECH_MATERIAL = 2)
- material = "copper"
-/obj/item/ore/silver
+ material = MAT_COPPER
+
+/obj/item/stack/ore/silver
name = "native silver ore"
- icon_state = "ore_silver"
+ icon_state = "silver"
origin_tech = list(TECH_MATERIAL = 3)
- material = "silver"
+ material = MAT_SILVER
-/obj/item/ore/gold
+/obj/item/stack/ore/gold
name = "native gold ore"
- icon_state = "ore_gold"
+ icon_state = "gold"
origin_tech = list(TECH_MATERIAL = 4)
- material = "gold"
+ material = MAT_GOLD
-/obj/item/ore/diamond
+/obj/item/stack/ore/diamond
name = "diamonds"
- icon_state = "ore_diamond"
+ icon_state = "diamond"
+ singular_name = "diamond"
origin_tech = list(TECH_MATERIAL = 6)
- material = "diamond"
+ material = MAT_DIAMOND
-/obj/item/ore/osmium
+/obj/item/stack/ore/osmium
name = "raw platinum"
- icon_state = "ore_platinum"
- material = "platinum"
+ icon_state = "platinum"
+ material = MAT_PLATINUM
-/obj/item/ore/hydrogen
+/obj/item/stack/ore/hydrogen
name = "raw hydrogen"
- icon_state = "ore_hydrogen"
- material = "mhydrogen"
+ icon_state = "hydrogen"
+ material = MAT_METALHYDROGEN
-/obj/item/ore/verdantium
+/obj/item/stack/ore/verdantium
name = "verdantite dust"
- icon_state = "ore_verdantium"
+ icon_state = "verdantium"
material = MAT_VERDANTIUM
origin_tech = list(TECH_MATERIAL = 7)
// POCKET ... Crystal dust.
-/obj/item/ore/verdantium/throw_impact(atom/hit_atom)
+/obj/item/stack/ore/verdantium/throw_impact(atom/hit_atom)
..()
var/mob/living/carbon/human/H = hit_atom
if(istype(H) && H.has_eyes() && prob(85))
@@ -107,35 +145,25 @@
H.Blind(10)
H.eye_blurry += 15
spawn(1)
- if(istype(loc, /turf/)) qdel(src)
+ if(isturf(loc))
+ use(1)
-/obj/item/ore/lead
+/obj/item/stack/ore/lead
name = "lead glance"
- icon_state = "ore_lead"
+ icon_state = "lead"
material = MAT_LEAD
origin_tech = list(TECH_MATERIAL = 3)
-/obj/item/ore/slag
+/obj/item/stack/ore/slag
name = "Slag"
desc = "Someone screwed up..."
+ singular_name = "slag"
icon_state = "slag"
material = null
-/obj/item/ore/Initialize(mapload)
- . = ..()
- pixel_x = rand(0,16)-8
- pixel_y = rand(0,8)-8
-
-/obj/item/ore/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W,/obj/item/core_sampler))
- var/obj/item/core_sampler/C = W
- C.sample_item(src, user)
- else
- return ..()
-
//Vaudium
-/obj/item/ore/vaudium
+/obj/item/stack/ore/vaudium
name = "raw vaudium"
- icon_state = "ore_vaudium"
+ icon_state = "vaudium"
material = MAT_VAUDIUM
origin_tech = list(TECH_MATERIAL = 7)
diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm
new file mode 100644
index 00000000000..c46e7f24802
--- /dev/null
+++ b/code/modules/mining/ore_box.dm
@@ -0,0 +1,124 @@
+
+/**********************Ore box**************************/
+
+/obj/structure/ore_box
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "orebox0"
+ name = "ore box"
+ desc = "A heavy box used for storing ore."
+ density = 1
+ climb_allowed = TRUE //it's a fuckin' box.
+ var/last_update = 0
+ var/list/stored_ore = list()
+
+/obj/structure/ore_box/attackby(obj/item/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/stack/ore))
+ if(!user.attempt_insert_item_for_installation(W, src))
+ return
+ user.visible_message(SPAN_NOTICE("[user] drops [W] into [src]."), SPAN_NOTICE("You drop [W] into [src]."))
+ else if (istype(W, /obj/item/storage/bag/ore)) //it works differently now
+ var/obj/item/storage/bag/ore/S = W
+ if(S.isOreEmpty())
+ return
+ for(var/ore in S.stored_ore)
+ if(!stored_ore[ore])
+ stored_ore[ore] = S.stored_ore[ore]
+ else
+ stored_ore[ore] += S.stored_ore[ore]
+ S.stored_ore = list() //it'll get emptied as a result.
+ S.total_ore = 0
+ user.visible_message(SPAN_NOTICE("[user] offloads ores from [W] into [src]."), SPAN_NOTICE("You offload the ores in [W] into [src]."))
+ else if (istype(W, /obj/item/storage))
+ var/obj/item/storage/S = W
+ if(!S.contents.len)
+ return
+ S.hide_from(usr)
+ for(var/obj/item/stack/ore/O in S.contents)
+ S.remove_from_storage(O, src) //This will move the item to this item's contents
+ user.visible_message(SPAN_NOTICE("[user] offloads ores from [W] into [src]."), SPAN_NOTICE("You offload the ores in [W] into [src]."))
+
+/obj/structure/ore_box/examine(mob/user, dist)
+ . = ..()
+ if(isEmpty())
+ . += SPAN_NOTICE("It is empty.")
+ return
+ . += SPAN_NOTICE("It holds:")
+ for(var/ore in stored_ore)
+ var/obj/item/stack/ore/O = ore
+ . += SPAN_NOTICE("- [stored_ore[ore]] [initial(O.name)]")
+
+/// Sigh.
+/obj/structure/ore_box/Entered(atom/movable/AM, atom/oldLoc)
+ . = ..()
+ if(istype(AM, /obj/item/stack/ore))
+ take(AM)
+
+/obj/structure/ore_box/drop_products(method, atom/where)
+ . = ..()
+ var/i = 0
+ while(!isEmpty() && i < 200) //may be laggy as hell if they're carrying 2,000+ sand, so capping it at 200 items dropped.
+ deposit(where, 50)
+ i++
+
+ new /obj/item/stack/material/wood/hard(where, 5)
+
+/obj/structure/ore_box/proc/take(obj/item/stack/ore/O)
+ if(!istype(O))
+ return
+ if(!stored_ore[O.type])
+ stored_ore[O.type] = O.amount
+ else
+ stored_ore[O.type] += O.amount
+ qdel(O)
+
+/obj/structure/ore_box/proc/deposit(atom/newloc, amount = 50)
+ if(isEmpty())
+ return FALSE
+ var/path = stored_ore[1]
+ if(amount > stored_ore[path])
+ amount = stored_ore[path]
+ new path(newloc, amount)
+ stored_ore[path] -= amount
+ if(stored_ore[path] <= 0)
+ stored_ore -= path
+ return TRUE
+
+/obj/structure/ore_box/proc/isEmpty()
+ return !length(stored_ore)
+
+/obj/structure/ore_box/verb/empty_box()
+ set name = "Empty Ore Box"
+ set category = "Object"
+ set src in view(1)
+
+ if(!istype(usr, /mob/living/carbon/human) && !istype(usr, /mob/living/silicon/robot)) //Only living, intelligent creatures with gripping aparatti can empty ore boxes.
+ to_chat(usr,"You are physically incapable of emptying the ore box.")
+ return
+
+ if( usr.stat || usr.restrained() )
+ return
+
+ if(!Adjacent(usr)) //You can only empty the box if you can physically reach it
+ to_chat(usr,"You cannot reach the ore box.")
+ return
+
+ add_fingerprint(usr)
+
+ if(isEmpty())
+ to_chat(usr, SPAN_WARNING("[src] is empty."))
+ return
+
+ var/mob/living/user = usr
+ to_chat(user, SPAN_NOTICE("You begin emptying [src]."))
+
+ if(do_after(usr,10,src))
+ while(!isEmpty())
+ if(!do_after(user, 2, src))
+ to_chat(user,SPAN_NOTICE("You stop emptying [src]."))
+ return
+ var/atom/A = drop_location()
+ if(!A || (length(A.contents) > 200))
+ to_chat(user, SPAN_WARNING("The area under [src] is too full."))
+ return
+ deposit(A,50)
+ to_chat(user,SPAN_NOTICE("You finish emptying [src]."))
diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm
index 4db16f820a5..c486400f838 100644
--- a/code/modules/mining/ore_datum.dm
+++ b/code/modules/mining/ore_datum.dm
@@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
smelts_to = "uranium"
result_amount = 5
spread_chance = 15
- ore = /obj/item/ore/uranium
+ ore = /obj/item/stack/ore/uranium
scan_icon = "mineral_uncommon"
xarch_ages = list(
"thousand" = 999,
@@ -50,7 +50,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
alloy = 1
result_amount = 5
spread_chance = 25
- ore = /obj/item/ore/iron
+ ore = /obj/item/stack/ore/iron
scan_icon = "mineral_common"
/datum/ore/coal
@@ -60,7 +60,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
alloy = 1
result_amount = 5
spread_chance = 25
- ore = /obj/item/ore/coal
+ ore = /obj/item/stack/ore/coal
scan_icon = "mineral_common"
/datum/ore/glass
@@ -77,7 +77,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
//smelts_to = something that explodes violently on the conveyor, huhuhuhu
result_amount = 8
spread_chance = 15
- ore = /obj/item/ore/phoron
+ ore = /obj/item/stack/ore/phoron
scan_icon = "mineral_uncommon"
xarch_ages = list(
"thousand" = 999,
@@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
smelts_to = "silver"
result_amount = 5
spread_chance = 18
- ore = /obj/item/ore/silver
+ ore = /obj/item/stack/ore/silver
scan_icon = "mineral_uncommon"
/datum/ore/gold
@@ -102,7 +102,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
display_name = "native gold"
result_amount = 5
spread_chance = 15
- ore = /obj/item/ore/gold
+ ore = /obj/item/stack/ore/gold
scan_icon = "mineral_uncommon"
xarch_ages = list(
"thousand" = 999,
@@ -118,7 +118,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
compresses_to = "diamond"
result_amount = 6
spread_chance = 15
- ore = /obj/item/ore/diamond
+ ore = /obj/item/stack/ore/diamond
scan_icon = "mineral_rare"
xarch_source_mineral = "nitrogen"
@@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
alloy = 1
result_amount = 5
spread_chance = 15
- ore = /obj/item/ore/osmium
+ ore = /obj/item/stack/ore/osmium
scan_icon = "mineral_rare"
/datum/ore/hydrogen
@@ -146,7 +146,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
compresses_to = MAT_VERDANTIUM
result_amount = 4
spread_chance = 13
- ore = /obj/item/ore/verdantium
+ ore = /obj/item/stack/ore/verdantium
scan_icon = "mineral_rare"
xarch_ages = list(
"billion" = 13,
@@ -159,7 +159,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
compresses_to = "marble"
result_amount = 2
spread_chance = 10
- ore = /obj/item/ore/marble
+ ore = /obj/item/stack/ore/marble
scan_icon = "mineral_common"
/datum/ore/lead
@@ -168,7 +168,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
smelts_to = "lead"
result_amount = 4
spread_chance = 17
- ore = /obj/item/ore/lead
+ ore = /obj/item/stack/ore/lead
scan_icon = "mineral_rare"
/datum/ore/vaudium
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
compresses_to = "silencium"
result_amount = 5
spread_chance = 20
- ore = /obj/item/ore/vaudium
+ ore = /obj/item/stack/ore/vaudium
scan_icon = "mineral_rare"
/datum/ore/copper
@@ -188,5 +188,5 @@ GLOBAL_LIST_INIT(ore_data, initialize_ore_data())
alloy = 1
result_amount = 4
spread_chance = 20
- ore = /obj/item/ore/copper
+ ore = /obj/item/stack/ore/copper
scan_icon = "mineral_common"
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
deleted file mode 100644
index b2db86a1455..00000000000
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-
-/**********************Ore box**************************/
-//Why the hell is this file called satchel_ore_boxdm.dm? -CK
-/obj/structure/ore_box
- icon = 'icons/obj/mining.dmi'
- icon_state = "orebox0"
- name = "ore box"
- desc = "A heavy box used for storing ore."
- density = 1
- var/last_update = 0
- var/list/stored_ore = list()
-
-/obj/structure/ore_box/legacy_ex_act(severity)
- return //if an overstuffed ore box explodes it crashes the server, thank you GC
-
-/obj/structure/ore_box/attackby(obj/item/W as obj, mob/user as mob)
- if (istype(W, /obj/item/ore))
- if(!user.attempt_insert_item_for_installation(W, src))
- return
- take(W)
-
- else if (istype(W, /obj/item/storage))
- var/obj/item/storage/S = W
- if(!S.contents.len)
- return
- S.hide_from(usr)
- for(var/obj/item/ore/O in S.contents)
- S.remove_from_storage(O, src) //This will move the item to this item's contents
-
-/obj/structure/ore_box/examine(mob/user, dist)
- . = ..()
-
- to_chat(user,"It holds:")
- for(var/ore in stored_ore)
- var/obj/item/ore/O = ore
- to_chat(user,"- [stored_ore[ore]] [initial(O.name)]")
-
-/// Sigh.
-/obj/structure/ore_box/Entered(atom/movable/AM, atom/oldLoc)
- . = ..()
- if(istype(AM, /obj/item/ore))
- take(AM)
-
-/obj/structure/ore_box/proc/take(obj/item/ore/O)
- if(!istype(O))
- return
- if(!stored_ore[O.type])
- stored_ore[O.type] = 1
- else
- stored_ore[O.type]++
- qdel(O)
-
-/obj/structure/ore_box/proc/deposit(atom/newloc)
- if(isEmpty())
- return FALSE
- var/path = stored_ore[1]
- new path(newloc)
- stored_ore[path]--
- if(stored_ore[path] <= 0)
- stored_ore -= path
- return TRUE
-
-/obj/structure/ore_box/proc/isEmpty()
- return !length(stored_ore)
-
-/obj/structure/ore_box/verb/empty_box()
- set name = "Empty Ore Box"
- set category = "Object"
- set src in view(1)
-
- if(!istype(usr, /mob/living/carbon/human) && !istype(usr, /mob/living/silicon/robot)) //Only living, intelligent creatures with gripping aparatti can empty ore boxes.
- to_chat(usr,"You are physically incapable of emptying the ore box.")
- return
-
- if( usr.stat || usr.restrained() )
- return
-
- if(!Adjacent(usr)) //You can only empty the box if you can physically reach it
- to_chat(usr,"You cannot reach the ore box.")
- return
-
- add_fingerprint(usr)
-
- if(isEmpty())
- to_chat(usr,"The ore box is empty.")
- return
-
- var/mob/living/user = usr
- to_chat(user, "You begin emptying the ore box.")
-
- if(do_after(usr,15,src))
- while(!isEmpty())
- if(!do_after(user, 5, src))
- to_chat(user,"You stop emptying the ore box.")
- return
- var/atom/A = drop_location()
- if(!A || (length(A.contents) > 1000))
- to_chat(user, "The area under the box is too full.")
- return
- for(var/i in 1 to 20)
- deposit(A)
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm
index fec5cb03adf..1664f0594e9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm
@@ -188,7 +188,7 @@
new /obj/effect/temporary_effect/tunneler_hole(get_turf(src))
/mob/living/simple_mob/animal/giant_spider/tunneler/proc/dig_under_floor(turf/T)
- new /obj/item/ore/glass(T) // This will be rather weird when on station but the alternative is too much work.
+ new /obj/item/stack/ore/glass(T) // This will be rather weird when on station but the alternative is too much work.
/obj/effect/temporary_effect/tunneler_hole
name = "hole"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm
index 1c6ec1ceecc..d7e485790e0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm
@@ -437,7 +437,7 @@
/obj/random/contraband = 3,
/obj/random/unidentified_medicine/old_medicine = 7,
/obj/item/strangerock = 3,
- /obj/item/ore/phoron = 7,
+ /obj/item/stack/ore/phoron = 7,
/obj/random/handgun = 1,
/obj/random/toolbox = 4,
/obj/random/drinkbottle = 5
diff --git a/code/modules/research/designs/teleport_vr.dm b/code/modules/research/designs/teleport_vr.dm
index 72de402f82c..e6fc47a3027 100644
--- a/code/modules/research/designs/teleport_vr.dm
+++ b/code/modules/research/designs/teleport_vr.dm
@@ -18,5 +18,5 @@
id = "bluespace_crystal"
req_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 4)
materials_base = list(MAT_DIAMOND = 1500, MAT_PHORON = 1500)
- build_path = /obj/item/ore/bluespace_crystal/artificial
+ build_path = /obj/item/bluespace_crystal/artificial
*/
diff --git a/code/modules/telesci/bscyrstal.dm b/code/modules/telesci/bscyrstal.dm
index 74ec03d84bd..eac988d1fbf 100644
--- a/code/modules/telesci/bscyrstal.dm
+++ b/code/modules/telesci/bscyrstal.dm
@@ -1,6 +1,6 @@
// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
-/obj/item/ore/bluespace_crystal
+/obj/item/bluespace_crystal
name = "bluespace crystal"
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
icon = 'icons/obj/telescience.dmi'
@@ -9,12 +9,12 @@
origin_tech = list(TECH_BLUESPACE = 6, TECH_MATERIAL = 3)
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
-/obj/item/ore/bluespace_crystal/Initialize(mapload)
+/obj/item/bluespace_crystal/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
-/obj/item/ore/bluespace_crystal/attack_self(mob/user)
+/obj/item/bluespace_crystal/attack_self(mob/user)
. = ..()
if(.)
return
@@ -25,10 +25,10 @@
blink_mob(user)
qdel(src)
-/obj/item/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
+/obj/item/bluespace_crystal/proc/blink_mob(mob/living/L)
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
-/obj/item/ore/bluespace_crystal/throw_impact(atom/hit_atom)
+/obj/item/bluespace_crystal/throw_impact(atom/hit_atom)
if(!..()) // not caught in mid-air
visible_message("[src] fizzles and disappears upon impact!")
var/turf/T = get_turf(hit_atom)
@@ -41,7 +41,7 @@
// Artifical bluespace crystal, doesn't give you much research.
-/obj/item/ore/bluespace_crystal/artificial
+/obj/item/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
origin_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 4)
diff --git a/code/modules/telesci/construction.dm b/code/modules/telesci/construction.dm
index 54d27be0626..13153235b72 100644
--- a/code/modules/telesci/construction.dm
+++ b/code/modules/telesci/construction.dm
@@ -15,7 +15,7 @@
build_path = /obj/machinery/telepad
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_PHORON = 4, TECH_BLUESPACE = 5)
req_components = list(
- /obj/item/ore/bluespace_crystal = 1,
+ /obj/item/bluespace_crystal = 1,
/obj/item/stock_parts/capacitor = 2,
/obj/item/stack/cable_coil = 5,
/obj/item/stock_parts/console_screen = 1)
@@ -27,7 +27,7 @@
build_path = /obj/machinery/power/quantumpad
origin_tech = list(TECH_ENGINEERING = 4, TECH_POWER = 4, TECH_BLUESPACE = 4, TECH_PRECURSOR = 1)
req_components = list(
- /obj/item/ore/bluespace_crystal = 1,
+ /obj/item/bluespace_crystal = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 5)
@@ -51,4 +51,4 @@
id = "bluespace_crystal"
req_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 4)
materials_base = list(MAT_DIAMOND = 1500, MAT_PHORON = 1500)
- build_path = /obj/item/ore/bluespace_crystal/artificial
+ build_path = /obj/item/bluespace_crystal/artificial
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index e8b779185b9..7445b287c5c 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -44,10 +44,10 @@
. = ..()
recalibrate()
for(var/i = 1; i <= starting_crystals; i++)
- crystals += new /obj/item/ore/bluespace_crystal/artificial(src) // starting crystals
+ crystals += new /obj/item/bluespace_crystal/artificial(src) // starting crystals
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/ore/bluespace_crystal))
+ if(istype(W, /obj/item/bluespace_crystal))
if(crystals.len >= max_crystals)
to_chat(user, SPAN_WARNING("There are not enough crystal slots."))
return
diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm
index 6fd30126ccf..2cb9d546141 100644
--- a/code/modules/xenoarcheaology/sampling.dm
+++ b/code/modules/xenoarcheaology/sampling.dm
@@ -48,8 +48,8 @@
/obj/item/core_sampler/proc/sample_item(var/item_to_sample, var/mob/user)
var/datum/geosample/geo_data
- if(istype(item_to_sample, /obj/item/ore))
- var/obj/item/ore/O = item_to_sample
+ if(istype(item_to_sample, /obj/item/stack/ore))
+ var/obj/item/stack/ore/O = item_to_sample
geo_data = O.geologic_data
if(geo_data)
diff --git a/icons/obj/stacks_ore.dmi b/icons/obj/stacks_ore.dmi
new file mode 100644
index 00000000000..cd45d8808b6
Binary files /dev/null and b/icons/obj/stacks_ore.dmi differ
diff --git a/maps/away_missions/140x140/snow_outpost.dmm b/maps/away_missions/140x140/snow_outpost.dmm
index 0b847a8fa9e..0745747a3fe 100644
--- a/maps/away_missions/140x140/snow_outpost.dmm
+++ b/maps/away_missions/140x140/snow_outpost.dmm
@@ -629,7 +629,7 @@
/turf/simulated/wall/sandstone,
/area/awaymission/snow_outpost/dark)
"cf" = (
-/obj/item/ore/diamond,
+/obj/item/stack/ore/diamond,
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
"cg" = (
@@ -643,7 +643,7 @@
/turf/simulated/floor/plating/external,
/area/awaymission/snow_outpost/dark)
"cj" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/floor/plating/external,
/area/awaymission/snow_outpost/dark)
"ck" = (
@@ -679,7 +679,7 @@
/turf/simulated/mineral/floor/ignore_mapgen,
/area/awaymission/snow_outpost/outside)
"cs" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
"ct" = (
@@ -843,26 +843,15 @@
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
"db" = (
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 12
+ },
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
"dc" = (
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 5
+ },
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
"dd" = (
@@ -1788,7 +1777,7 @@
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
"fW" = (
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold,
/obj/tether_away_spawner/aerostat_inside,
/turf/simulated/floor/snow/snow2,
/area/awaymission/snow_outpost/dark)
diff --git a/maps/away_missions/archive/zresearchlabs.dmm b/maps/away_missions/archive/zresearchlabs.dmm
index 048a6c07d5c..a8fc991c1b1 100644
--- a/maps/away_missions/archive/zresearchlabs.dmm
+++ b/maps/away_missions/archive/zresearchlabs.dmm
@@ -4759,11 +4759,12 @@
/obj/structure/closet/crate/secure/bin{
name = "Valuable Ores"
},
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/uranium,
-/obj/item/ore/uranium,
-/obj/item/ore/uranium,
+/obj/item/stack/ore/diamond{
+ amount = 2
+ },
+/obj/item/stack/ore/uranium{
+ amount = 3
+ },
/turf/simulated/floor,
/area/awaymission/labs/cargo)
"nA" = (
diff --git a/maps/rift/levels/rift-03-underground1.dmm b/maps/rift/levels/rift-03-underground1.dmm
index 7b7edbd93a3..44cbe520380 100644
--- a/maps/rift/levels/rift-03-underground1.dmm
+++ b/maps/rift/levels/rift-03-underground1.dmm
@@ -12932,12 +12932,9 @@
"RP" = (
/obj/structure/closet/crate/miningcar,
/obj/effect/floor_decal/rust,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal{
+ amount = 6
+ },
/turf/simulated/floor/tiled,
/area/maintenance/elevator)
"RQ" = (
diff --git a/maps/rift/levels/rift-04-surface1.dmm b/maps/rift/levels/rift-04-surface1.dmm
index 9008e904061..fc91214874e 100644
--- a/maps/rift/levels/rift-04-surface1.dmm
+++ b/maps/rift/levels/rift-04-surface1.dmm
@@ -17000,11 +17000,9 @@
/area/maintenance/research/lower)
"kLo" = (
/obj/structure/table/rack/shelf,
-/obj/item/ore/phoron{
- pixel_x = 2;
- pixel_y = 4
+/obj/item/stack/ore/phoron{
+ amount = 2
},
-/obj/item/ore/phoron,
/turf/simulated/floor/tiled/steel,
/area/quartermaster/warehouse)
"kLC" = (
diff --git a/maps/rift/levels/rift-08-west_deep.dmm b/maps/rift/levels/rift-08-west_deep.dmm
index 3308b878914..2a1adf710b7 100644
--- a/maps/rift/levels/rift-08-west_deep.dmm
+++ b/maps/rift/levels/rift-08-west_deep.dmm
@@ -880,15 +880,9 @@
/area/gateway)
"iQ" = (
/obj/structure/closet/crate/miningcar,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal{
+ amount = 10
+ },
/turf/simulated/floor/tiled/dark,
/area/rift/facility/interior/temple)
"iY" = (
diff --git a/maps/sectors/gaia_140/levels/gaia_140.dmm b/maps/sectors/gaia_140/levels/gaia_140.dmm
index 19ea29192a0..c097bf844a2 100644
--- a/maps/sectors/gaia_140/levels/gaia_140.dmm
+++ b/maps/sectors/gaia_140/levels/gaia_140.dmm
@@ -855,7 +855,7 @@
/turf/simulated/floor/outdoors/dirt/classm,
/area/class_m/outside)
"sL" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/mineral/floor/classm,
/area/class_m/outside)
"sW" = (
@@ -1007,7 +1007,7 @@
/turf/simulated/floor/carpet/turcarpet,
/area/class_m/inside)
"vX" = (
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/mineral/floor/classm,
/area/class_m/outside)
"vY" = (
@@ -1265,8 +1265,9 @@
/turf/simulated/floor/wood/classm,
/area/class_m/inside)
"By" = (
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal{
+ amount = 2
+ },
/turf/simulated/mineral/floor/classm,
/area/class_m/outside)
"BE" = (
@@ -1290,10 +1291,9 @@
/turf/simulated/floor/outdoors/beach/sand/classm,
/area/class_m/outside)
"Ca" = (
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal{
+ amount = 4
+ },
/turf/simulated/mineral/floor/classm,
/area/class_m/outside)
"Ce" = (
@@ -1914,9 +1914,9 @@
/turf/simulated/mineral/ignore_mapgen,
/area/class_m/outside)
"QI" = (
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal{
+ amount = 3
+ },
/turf/simulated/mineral/floor/classm,
/area/class_m/outside)
"QL" = (
@@ -2164,7 +2164,7 @@
/turf/simulated/floor/wood/classm,
/area/class_m/inside)
"Wj" = (
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/dirt/classm,
/area/class_m/outside)
"Wk" = (
diff --git a/maps/sectors/gaia_192/levels/gaia_192.dmm b/maps/sectors/gaia_192/levels/gaia_192.dmm
index e27d3f3d6df..23a7aba8594 100644
--- a/maps/sectors/gaia_192/levels/gaia_192.dmm
+++ b/maps/sectors/gaia_192/levels/gaia_192.dmm
@@ -1868,7 +1868,7 @@
/turf/simulated/floor/outdoors/grass,
/area/class_m/outside)
"kC" = (
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/dirt/classm/outdoors,
/area/class_m/outside)
"kD" = (
@@ -2234,7 +2234,7 @@
/area/class_m/inside)
"lX" = (
/obj/structure/flora/ausbushes/fullgrass,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/grass,
/area/class_m/outside)
"lY" = (
@@ -2465,7 +2465,7 @@
},
/area/class_m/outside)
"nm" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/floor/outdoors/dirt/classm/outdoors,
/area/class_m/outside)
"nn" = (
@@ -2775,7 +2775,7 @@
/turf/simulated/floor/wood/classm,
/area/class_m/inside/main)
"pe" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/floor/outdoors/grass/classm,
/area/class_m/outside)
"pg" = (
@@ -7194,7 +7194,7 @@
/turf/simulated/floor/concrete/rng/classm/outdoors,
/area/class_m/outside)
"NY" = (
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
/obj/structure/flora/ausbushes/stalkybush,
/turf/simulated/floor/outdoors/dirt/classm/outdoors,
/area/class_m/outside)
@@ -9233,7 +9233,7 @@
/turf/simulated/floor/wood/classm,
/area/class_m/inside)
"Ze" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/floor/outdoors/grass,
/area/class_m/outside)
"Zf" = (
diff --git a/maps/submaps/level_specific/class_h/minesH.dmm b/maps/submaps/level_specific/class_h/minesH.dmm
index bea797acae0..1f6a9850562 100644
--- a/maps/submaps/level_specific/class_h/minesH.dmm
+++ b/maps/submaps/level_specific/class_h/minesH.dmm
@@ -4,14 +4,9 @@
/area/template_noop)
"b" = (
/obj/random/multiple/minevault,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 8
+ },
/turf/simulated/mineral/floor/cave,
/area/class_h/POIs/goldmine)
"e" = (
@@ -25,10 +20,9 @@
/obj/structure/closet/crate/miningcar,
/obj/random/roguemineloot,
/obj/random/roguemineloot,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 4
+ },
/turf/simulated/mineral/floor/cave,
/area/class_h/POIs/goldmine)
"h" = (
@@ -66,11 +60,9 @@
/obj/structure/closet/crate/miningcar,
/obj/random/roguemineloot,
/obj/random/roguemineloot,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 5
+ },
/turf/simulated/mineral/floor/cave,
/area/class_h/POIs/goldmine)
"y" = (
@@ -112,24 +104,16 @@
/obj/random/roguemineloot,
/obj/random/roguemineloot,
/obj/random/roguemineloot,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 4
+ },
/turf/simulated/mineral/floor/cave,
/area/class_h/POIs/goldmine)
"H" = (
/obj/random/multiple/minevault,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold{
+ amount = 10
+ },
/turf/simulated/mineral/floor/cave,
/area/class_h/POIs/goldmine)
"J" = (
diff --git a/maps/submaps/level_specific/debrisfield/clownship.dmm b/maps/submaps/level_specific/debrisfield/clownship.dmm
index e8d09732a90..4b76dd10566 100644
--- a/maps/submaps/level_specific/debrisfield/clownship.dmm
+++ b/maps/submaps/level_specific/debrisfield/clownship.dmm
@@ -147,16 +147,9 @@
"iz" = (
/obj/effect/floor_decal/industrial/outline,
/obj/structure/closet/crate/secure,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
-/obj/item/ore/vaudium,
+/obj/item/stack/ore/vaudium{
+ amount = 10
+ },
/obj/machinery/light{
dir = 8
},
diff --git a/maps/submaps/level_specific/debrisfield_vr/mining_drones.dmm b/maps/submaps/level_specific/debrisfield_vr/mining_drones.dmm
index dd30ab456ff..13782335918 100644
--- a/maps/submaps/level_specific/debrisfield_vr/mining_drones.dmm
+++ b/maps/submaps/level_specific/debrisfield_vr/mining_drones.dmm
@@ -115,7 +115,7 @@
/turf/simulated/floor/tiled/asteroid_steel/airless,
/area/submap/debrisfield_vr/mining_outpost)
"u" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/obj/effect/floor_decal/asteroid,
/turf/simulated/floor/tiled/asteroid_steel/airless,
/area/submap/debrisfield_vr/mining_outpost)
diff --git a/maps/submaps/level_specific/debrisfield_vr/old_satellite.dmm b/maps/submaps/level_specific/debrisfield_vr/old_satellite.dmm
index 295560391cc..464bb53d983 100644
--- a/maps/submaps/level_specific/debrisfield_vr/old_satellite.dmm
+++ b/maps/submaps/level_specific/debrisfield_vr/old_satellite.dmm
@@ -119,17 +119,18 @@
/area/submap/debrisfield_vr/old_sat)
"q" = (
/obj/item/material/shard/phoron,
-/obj/item/ore/iron,
+/obj/item/stack/ore/iron,
/obj/random/tech_supply/component,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/old_sat)
"r" = (
-/obj/item/ore/iron,
-/obj/item/ore/iron,
+/obj/item/stack/ore/iron{
+ amount = 2
+ },
/turf/template_noop,
/area/space)
"s" = (
-/obj/item/ore/glass,
+/obj/item/stack/ore/glass,
/turf/template_noop,
/area/space)
"t" = (
diff --git a/maps/submaps/level_specific/debrisfield_vr/ship_mining_drone.dmm b/maps/submaps/level_specific/debrisfield_vr/ship_mining_drone.dmm
index db6f4b049f3..2a02d24229d 100644
--- a/maps/submaps/level_specific/debrisfield_vr/ship_mining_drone.dmm
+++ b/maps/submaps/level_specific/debrisfield_vr/ship_mining_drone.dmm
@@ -190,251 +190,251 @@
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aA" = (
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aB" = (
-/obj/item/ore,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aC" = (
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
/obj/machinery/artifact,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aD" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aE" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aF" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/coal,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aG" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/coal,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/gold,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/gold,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aH" = (
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aI" = (
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
/mob/living/simple_mob/mechanical/hivebot/support/commander,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aJ" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
-/obj/item/ore/gold,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aK" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/coal,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aL" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aM" = (
-/obj/item/ore,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
-/obj/item/ore/gold,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
-/obj/item/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aN" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aO" = (
-/obj/item/ore,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
-/obj/item/ore/gold,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aP" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aQ" = (
-/obj/item/ore/gold,
-/obj/item/ore/iron,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
/obj/structure/mob_spawner{
density = 1;
desc = "A bizarre mess of robotic limbs, glowing microrefineries, and nanoassemblers gradually converting the pile of raw materials into active hivebots.";
@@ -454,79 +454,79 @@
/turf/space,
/area/submap/debrisfield_vr/mining_drone_ship)
"aS" = (
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aT" = (
-/obj/item/ore,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
+/obj/item/stack/ore,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aU" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/coal,
-/obj/item/ore/iron,
-/obj/item/ore,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aV" = (
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/phoron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/phoron,
+/obj/item/stack/ore/phoron,
/obj/machinery/light_construct,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aW" = (
-/obj/item/ore,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/iron,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
-/obj/item/ore/phoron,
+/obj/item/stack/ore,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/phoron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aX" = (
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/diamond,
-/obj/item/ore/gold,
-/obj/item/ore/silver,
-/obj/item/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aY" = (
-/obj/item/ore/diamond,
-/obj/item/ore/iron,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/iron,
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/mining_drone_ship)
"aZ" = (
diff --git a/maps/submaps/level_specific/underdark/goldhall.dmm b/maps/submaps/level_specific/underdark/goldhall.dmm
index f884a5fc307..b3dbcffe80b 100644
--- a/maps/submaps/level_specific/underdark/goldhall.dmm
+++ b/maps/submaps/level_specific/underdark/goldhall.dmm
@@ -23,7 +23,7 @@
/area/mine/explored/underdark)
"g" = (
/obj/effect/decal/remains,
-/obj/item/ore/bluespace_crystal,
+/obj/item/bluespace_crystal,
/turf/simulated/floor/tiled/kafel_full/yellow/virgo3b,
/area/mine/explored/underdark)
diff --git a/maps/submaps/mountains/Cliff1.dmm b/maps/submaps/mountains/Cliff1.dmm
index a81859066fc..287e5bcc51c 100644
--- a/maps/submaps/mountains/Cliff1.dmm
+++ b/maps/submaps/mountains/Cliff1.dmm
@@ -6,7 +6,7 @@
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/random_cliff)
"c" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/random_cliff)
"d" = (
diff --git a/maps/submaps/mountains/Mineshaft1.dmm b/maps/submaps/mountains/Mineshaft1.dmm
index f43eda6200b..24e3ef4b81b 100644
--- a/maps/submaps/mountains/Mineshaft1.dmm
+++ b/maps/submaps/mountains/Mineshaft1.dmm
@@ -53,30 +53,30 @@
/turf/simulated/floor/tiled,
/area/submap/cave/AMine1)
"n" = (
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/AMine1)
"o" = (
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/AMine1)
"p" = (
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
-/obj/item/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/gold,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/AMine1)
"q" = (
diff --git a/maps/submaps/mountains/crystal1.dmm b/maps/submaps/mountains/crystal1.dmm
index a53fd7a6faf..ea2a16c8014 100644
--- a/maps/submaps/mountains/crystal1.dmm
+++ b/maps/submaps/mountains/crystal1.dmm
@@ -10,7 +10,7 @@
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/crystal1)
"d" = (
-/obj/item/ore/diamond,
+/obj/item/stack/ore/diamond,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/crystal1)
diff --git a/maps/submaps/mountains/crystal2.dmm b/maps/submaps/mountains/crystal2.dmm
index f0b148b6141..dcc7765a187 100644
--- a/maps/submaps/mountains/crystal2.dmm
+++ b/maps/submaps/mountains/crystal2.dmm
@@ -10,7 +10,7 @@
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/crystal2)
"d" = (
-/obj/item/ore/diamond,
+/obj/item/stack/ore/diamond,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/crystal2)
diff --git a/maps/submaps/mountains/crystal3.dmm b/maps/submaps/mountains/crystal3.dmm
index e3947b1fc73..c8b74183c2c 100644
--- a/maps/submaps/mountains/crystal3.dmm
+++ b/maps/submaps/mountains/crystal3.dmm
@@ -13,7 +13,7 @@
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/crystal3)
"e" = (
-/obj/item/ore/diamond,
+/obj/item/stack/ore/diamond,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/crystal3)
diff --git a/maps/submaps/mountains/digsite.dmm b/maps/submaps/mountains/digsite.dmm
index f87ed85eb20..0a1a9391840 100644
--- a/maps/submaps/mountains/digsite.dmm
+++ b/maps/submaps/mountains/digsite.dmm
@@ -22,7 +22,7 @@
/turf/simulated/floor/plating/external,
/area/submap/cave/digsite)
"h" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/floor/plating/external,
/area/submap/cave/digsite)
"i" = (
@@ -55,7 +55,7 @@
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/digsite)
"p" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/digsite)
"q" = (
diff --git a/maps/submaps/plains/Thiefc.dmm b/maps/submaps/plains/Thiefc.dmm
index 16463d4e836..30fb902eec5 100644
--- a/maps/submaps/plains/Thiefc.dmm
+++ b/maps/submaps/plains/Thiefc.dmm
@@ -10,11 +10,11 @@
/area/submap/Thiefc)
"d" = (
/obj/structure/ore_box,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
@@ -35,14 +35,14 @@
},
/area/submap/Thiefc)
"g" = (
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
diff --git a/maps/submaps/plains/Thiefc_vr.dmm b/maps/submaps/plains/Thiefc_vr.dmm
index 1970eb44fe2..b7fc35c88a9 100644
--- a/maps/submaps/plains/Thiefc_vr.dmm
+++ b/maps/submaps/plains/Thiefc_vr.dmm
@@ -10,11 +10,11 @@
/area/submap/Thiefc)
"d" = (
/obj/structure/ore_box,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
@@ -35,14 +35,14 @@
},
/area/submap/Thiefc)
"g" = (
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
diff --git a/maps/submaps/wilderness/Chapel.dmm b/maps/submaps/wilderness/Chapel.dmm
index dbc1d45e20e..ef9ac82ad75 100644
--- a/maps/submaps/wilderness/Chapel.dmm
+++ b/maps/submaps/wilderness/Chapel.dmm
@@ -329,20 +329,20 @@
/turf/simulated/floor/wood/sif,
/area/submap/Chapel1)
"bs" = (
-/obj/item/ore,
-/obj/item/ore,
-/obj/item/ore,
-/obj/item/ore,
-/obj/item/ore/gold,
-/obj/item/ore/diamond,
-/obj/item/ore/silver,
-/obj/item/ore/uranium,
-/obj/item/ore,
-/obj/item/ore,
-/obj/item/ore,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
-/obj/item/ore/coal,
+/obj/item/stack/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore/gold,
+/obj/item/stack/ore/diamond,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/uranium,
+/obj/item/stack/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
+/obj/item/stack/ore/coal,
/obj/item/pickaxe/hand,
/turf/simulated/floor/wood/sif,
/area/submap/Chapel1)
diff --git a/maps/templates/admin/skipjack.dmm b/maps/templates/admin/skipjack.dmm
index 45bd68d48eb..0e63db3d044 100644
--- a/maps/templates/admin/skipjack.dmm
+++ b/maps/templates/admin/skipjack.dmm
@@ -43,7 +43,7 @@
},
/area/skipjack_station)
"ai" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/unsimulated/floor{
icon_state = "steel"
},
@@ -116,7 +116,7 @@
},
/area/skipjack_station)
"as" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/obj/structure/reagent_dispensers/beerkeg,
/turf/unsimulated/floor{
icon_state = "white"
@@ -133,7 +133,7 @@
},
/area/skipjack_station)
"au" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/unsimulated/floor{
icon_state = "plating";
name = "plating"
@@ -497,7 +497,7 @@
},
/area/skipjack_station)
"bn" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/unsimulated/floor{
icon_state = "asteroid_dug";
name = "plating"
@@ -571,7 +571,7 @@
},
/area/skipjack_station)
"bx" = (
-/obj/item/ore,
+/obj/item/stack/ore,
/turf/unsimulated/floor{
icon_state = "asteroid"
},
diff --git a/maps/templates/admin/wizard.dmm b/maps/templates/admin/wizard.dmm
index b5952d69bcf..9b1fa966bb5 100644
--- a/maps/templates/admin/wizard.dmm
+++ b/maps/templates/admin/wizard.dmm
@@ -144,7 +144,7 @@
pixel_x = 0;
pixel_y = 32
},
-/obj/item/ore/slag{
+/obj/item/stack/ore/slag{
desc = "Well at least Arthur doesn't have to share now...";
name = "pet rock"
},