From 7adbcdc8118868f3b95485cb58d8a7d900ec5c95 Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sat, 18 Nov 2023 00:07:22 -0700 Subject: [PATCH] Ore Stacking (#6136) ## About The Pull Request - All ores have been converted to become stacks. - Various for loops have been destroyed due to ore stacks now existing. - Bluespace crystals is detyped from being ores (request of Sili) - Mining satchels have been recoded to be more like ore boxes (there's an update I'd like to do to them later that will include even bigger ore satchels so I decided this was necessary) and their capacity has been buffed to carrying 200 ores instead of 50. People can now shove up to 7 ore stacks into their backpack with this update, so I decided that made sense. - .dm file containing ore box code was renamed. - fixed a bug that allowed you to dupe ores using the ore box ("take" was called twice when inserting ores by hand) - Some minor polishing of ore box code, particularly examine code, interaction feedback, and allowing you to climb onto boxes. - Ore boxes when destroyed will drop all of their ores, unless there's too much ore (up to 200 stacks will be dropped). It'll also drop 5 hardwood planks. People who accidentally shoot their box with their PKA, rejoice. - You can craft ore boxes using 5 hardwood planks. ## Why It's Good For The Game Having ores be stackable will greatly reduce lag. Otherwise, QoL changes good. ## Changelog :cl: add: You can climb ore boxes. qol: Ore boxes will drop their contents when destroyed. You can also craft ore boxes using hardwood planks now. balance: Mining satchels can now carry 200 ores instead of 50. fix: Ore box examines look proper now. fix: Fixed a bug that allowed you to dupe ores using the ore box. imageadd: stacks_ore.dmi was added. It holds ore stack stuff. code: Orebox DM file renamed to ore_box.dm code: Bluespace crystals are detyped from being ores. refactor: Ore is now stackable. This will reduce lag when miners are out causing havoc or shoving ore onto conveyor belts. /:cl: --- citadel.dme | 2 +- code/_globals/lists/mapping.dm | 26 +- .../recipe/crafting_recipes/recipes_misc.dm | 2 +- .../recipe/crafting_recipes/recipes_primal.dm | 12 +- .../recipes_weapon_and_ammo.dm | 2 +- code/game/gamemodes/meteor/meteors.dm | 14 +- code/game/mecha/equipment/tools/drill.dm | 4 +- code/game/mecha/micro/micro_equipment.dm | 8 +- code/game/objects/items/stacks/sandbag.dm | 18 +- code/game/objects/items/stacks/stack.dm | 2 +- code/game/objects/items/storage/bags.dm | 123 +++-- code/game/objects/items/weapons/stunbaton.dm | 4 +- code/game/objects/random/mapping.dm | 40 +- code/game/objects/random/misc.dm | 122 ++--- code/game/objects/random/underdark.dm | 122 ++--- code/game/objects/structures/ashlander.dm | 34 +- code/game/objects/structures/flora/rocks.dm | 5 +- code/modules/events/meteor_strike_vr.dm | 10 +- code/modules/loot/packs/misc.dm | 2 +- code/modules/loot/packs/ore.dm | 8 +- .../away_missions/archive/stationCollision.dm | 2 +- .../definitions/organic/wood/plank.dm | 6 + code/modules/mining/drilling/drill.dm | 38 +- code/modules/mining/machine_processing.dm | 19 +- code/modules/mining/machine_unloading.dm | 11 +- code/modules/mining/mine_outcrops.dm | 23 +- code/modules/mining/mine_turfs.dm | 17 +- code/modules/mining/ore.dm | 156 +++--- code/modules/mining/ore_box.dm | 124 +++++ code/modules/mining/ore_datum.dm | 26 +- code/modules/mining/satchel_ore_boxdm.dm | 101 ---- .../subtypes/animal/giant_spider/tunneler.dm | 2 +- .../simple_mob/subtypes/animal/space/worm.dm | 2 +- code/modules/research/designs/teleport_vr.dm | 2 +- code/modules/telesci/bscyrstal.dm | 12 +- code/modules/telesci/construction.dm | 6 +- code/modules/telesci/telesci_computer.dm | 4 +- code/modules/xenoarcheaology/sampling.dm | 4 +- icons/obj/stacks_ore.dmi | Bin 0 -> 56727 bytes maps/away_missions/140x140/snow_outpost.dmm | 31 +- maps/away_missions/archive/zresearchlabs.dmm | 11 +- maps/rift/levels/rift-03-underground1.dmm | 9 +- maps/rift/levels/rift-04-surface1.dmm | 6 +- maps/rift/levels/rift-08-west_deep.dmm | 12 +- maps/sectors/gaia_140/levels/gaia_140.dmm | 24 +- maps/sectors/gaia_192/levels/gaia_192.dmm | 12 +- .../submaps/level_specific/class_h/minesH.dmm | 46 +- .../level_specific/debrisfield/clownship.dmm | 13 +- .../debrisfield_vr/mining_drones.dmm | 2 +- .../debrisfield_vr/old_satellite.dmm | 9 +- .../debrisfield_vr/ship_mining_drone.dmm | 498 +++++++++--------- .../level_specific/underdark/goldhall.dmm | 2 +- maps/submaps/mountains/Cliff1.dmm | 2 +- maps/submaps/mountains/Mineshaft1.dmm | 36 +- maps/submaps/mountains/crystal1.dmm | 2 +- maps/submaps/mountains/crystal2.dmm | 2 +- maps/submaps/mountains/crystal3.dmm | 2 +- maps/submaps/mountains/digsite.dmm | 4 +- maps/submaps/plains/Thiefc.dmm | 26 +- maps/submaps/plains/Thiefc_vr.dmm | 26 +- maps/submaps/wilderness/Chapel.dmm | 28 +- maps/templates/admin/skipjack.dmm | 10 +- maps/templates/admin/wizard.dmm | 2 +- 63 files changed, 1006 insertions(+), 924 deletions(-) create mode 100644 code/modules/mining/ore_box.dm delete mode 100644 code/modules/mining/satchel_ore_boxdm.dm create mode 100644 icons/obj/stacks_ore.dmi 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 0000000000000000000000000000000000000000..cd45d8808b6d8f5e805de45b019acc70f50b8b88 GIT binary patch literal 56727 zcmZ6yWmFtZ6DYhm1ef6M!65`$+}(maxI-YgJ1p)V+zG+m-EHyU?gV%DyS(4|e%w3f z^y!}7ovG^b>aGb_R+K{hMED5+0HDf9i+=|Ipt>O~7ZDyZBk;HB3jhG~)l*H=S=`LY z#L?2;+0xDy0C3NYUhJ{OX2$?+IbGqD-NocG+aJL-hzitKDJ!@|n^;UMon(gTsL|o7-iM;b=f=fVc-pc z3CW$7eU)dt<*S%QZ}{FdEBmTOXex?GJxz{1{9A-JPBKuQJQ6-l7z>rdpSVbwmY0*$ zkdfxA>!9J-1it(-L7)+z37g%Ilh748j~M^~qWM&;*%Z3jRIKR~y6IFbwj3Zug$Zg+ zJo0*!X#%~Dr)zZkg(>p7Y>e+Q@s$Y~Mi1r52<6EP<;fD|$p$5W>i2g>)!pIZS=pE< z*^2*b@TpWSDGbBnyE>&bq|rkfBBULts8bHJ(=6==c6E*W)9XFywcgA)A1)kDqtDVb zo2h97K|bpgEtWtyH-)0j#zUM{?yLZ!B2_j$8Kpd7Nm^@v!$DlcLP$4(i%4tZ@0-aU zNeSBA0ykvcD~*IWaJM66X^UO@<0dzCZexd?QEQu>acL9MZ$SDrNWTi{mrb&N zR7c>3*sgj=mJO4)xa<>DPzLV)%lc6tp?y_UOv53{9RFw;j-n)I>Zna=GJ}rSF4=JI#!zm~P_Drc`NML`%uV`_ zi)tO3$N47hixRtrO}UMqJ)xa*0q5Rjw~?>>vX*}2Fcm0Ic_>dwC{N)iPd+FC2r&gP zEwN+qbTKj)gX~D8ytF-xL)7m7Qg4X%w(r5g_26JAb<8@n9RzG)M0R-nubz14QC>NmPBx;tO-PK4ABz^W^F7?SW64ozv(Cl`Ud#vflfB z0{|cg$cT%mxo4hq__(XjwXi>?KN}=larlnL{Ro6e z{SMEEN_s@1NWYD|uLdDvPrx0qVUaJN{z3Y|_Nr17<=h)*8rPoeDqkgMURmUt2Pf?E zNty-(3u^4Qp1ra;7;&@5pQtwS2~P5AE=M7|yW74voS|oC=zaV9+rixsupdnl>F*D< zYM2{KB|JLZB;iOKK+=~cU3iqx{byBx^_%DWf`*ab({E$Ut%JCN@b=PAxeX-vIw(vs z=9PA9X}HQ!GZm-VKlYYQHLw@qb6YSMVGLOBvw5QEhs&#~G6hk)Sun4tkpX;wOju=J zPtH~>ByZlLeCTIBzM23p#ljRP{}A!GV0#JmTHdkkf4Gu>L-uyV zDI$~XD6VhNd!N@QLzmfKaR8W>z_9gdLNkjG!3TC zEc<;1PrzN^0e(wHiwWhFNZ9EBEASyLOIt*o*T)O72~IV55`S;dFnAO6n>QWGdqZ1;Ha0AADR_kQHBdDS51ViBcdyFSI?_1YH$NvaTXfpt8Tx zJwFCkL8+^L?Q$a?@x|3OXxtiWz}XHseNe(lTR=s@XKgexh3SFKh*c1Q;Nzl@9Tg}Q zlUrT@3lVi5pgGFZ)6+%KOc6U_w-F$cwFNfE`?x}x!$n5Jd{4#io(RKPW!9gU=)%*> z;xQ3Qg(e->W9fArM6mokFVzhoa{Uq~m?sAQZ==aDZX?qQ2W{!j5}swH}n}$d3eyx0FVN#qHLZoFV|+z zC1H!#ZUE}JNoN!@rzkCsW!Q|?e&oYqtq7jdR|@$0@At4YjwW<-iKD~AIQFj1BI3Y6 zR(JT@$qp*+G+?Gd-oVbTye*$$$-9`OK?F=}Q<19AK9FsVyONqyqz{+rITZN_rN3I$ z@>kBAB6B@093i1oeauDGTI}EBKS|c-y4sOCXbE=1hB@3MBLpbz1iRP44%Qqtnzzy6<0S?yKUVky&Rw6){V^?pvDNov&& z@nvOcdV^`Yb?nT-cs2!R-e6js1dnel{ZfYX+c3Mc0-hDt<9V^^@~f)QhhoX@x4oEs ze<2VdAVd$DNqTvT92|6arTjAVGazFCoG4*)V)Q`&Y8mKmnd}ud^B5DaL}tlpg-UzC zLQZO%fL)-i1FMD5$egb~m7VAm(rQ>7QyBIP{58EkQzKs(SX|$Wm;a<+3+7$DZB#sW z0`S1GdIZ}A+Tai1XRV-X7ztoUA=;H$H>}jb?)tk(F(id;q~T+6EFYAn;NXt6fZ5@B^p4Lj*Dj; z*kT$cg=H(=896<>DIN3B&A1U{Ww<+=@$mz&I=R_T5$VKxFNdiq+?ETI*30B-8hI7z z-i0ho%kTzntz%O1zoGM^Q8J0IDipu~QH0+S=@!Z8F=R)EV`#41Wy`VT*ih|1WnmAdiCS^emaBu~iw9sfFnAv5T;q2U)y4{rdB; ziwFxoVJ$9t2cSoMq}6B$X|-Bpa-#=4>*D`&L5Ae#&`q^g9COr)f|&~-``FIF!6cxT z*5;tlu`fZ+Rt9TvHcUGyxK80Bt>jtV^wq|FoN7ZMx;QDGs%jyjAeGZB7q!1ovgWhw zP78G!#k$RfZk%4$l4&{P^X=WBXXA-K!nvZ&@tCF=(}7ds{ZLBm7#W?A-`;0o%sTY~ zd}^a3b^UiJR()w(<-cA4cP-o7|DXzy7VE#pwxLA^hmVHqZElysJ!i}m`I`(?`J^BI1iwthp}% zVQ;6?gvdsTYO}coqR6!$DrhJ)L^-F?Q}ZCk-+Dq~LG3=H)yRjEM1XL>WN`C0Hl6)h z%f9hYH-L=|bolwR=EBmUjd(~%(2kG38}}Uo|0FKhDn$f#&J615%Ra|g&<`kOK8}Q? z*@KoA=@90%hu@U|4}#tXur-HaRUI2MTrN9#RtmM#im6QYstd&7Uqv=*@bb&i{^hThcgzo zc2Wkw`344`u5ldi}sLic8_lZZ>2!wf8pL zm(fOBNhI>q?qcH;A^LEV;4g5CfrI^qHTq1)hUr0vnrxIb1Rh^<$pVj|wU<@K=sfCO z3Yl|$Nx>FiSA8Y(!|stxh(CM2hJ+0rr6iq$brq^_`cvPs+@z$qMBMzVRYC_uagU#z zfb*aK^Pc*3U}J|Ozg$PL66CCo#7YZGk&y@y;eY*jRYsLQCpU+g$2fF<+;$1wFO}aq zGsK~1rev5nNbIuQEsB|@cxuVP)OraxIyUkzj8(00G@yQUay!x9fq_Lvrw{A#5;9MuBPG9;G3lG znGL7qm832lO`awhENUv!*q!lTgbN7^%is+p7*~91wb^E;@dQ-2u(QR#gPYcC8CFc0 zY%pOr+>-VXVRe$#hhp;HW=oWD>D!j_gQzH{RSw+?58Y?3f2DG^l{4w$(ns>tk(I$VV^uk|(??a+%&Sq^a_NjXqOmKRi~{gz7*Hs<|)LPj}V&F zk@uOCUP1C4d0iw!wDw?||CG?-;o++vcV)auT*E_yk^W|^SJkmk*-R#%u+6`Y<>h5Q zqKjd0(uv>}pMklB-I43zx{ClWsE%KC@yM=XG_gMKL=I*|TuS`G@y0D?hpMfiB~TN` zg%kPlWqG~=!wfN)e5;t92Rna%r|Ca6nhe#psr-oFwrhtip8n4M9vt`Cjfzz-fZ=|M zN3YU^w4me^LV>cH7Iranj>n=n8EcA*%cVQXa|8A1nHt&L-yw|JpOU`KFD-?OxYwj! zQmo+R)zq+yKt!2YvFT6MfLVMxM#teRkO*e&&UysxYx2vBR2Fv99=>xHlib>~JMu3s zo&2ZXDn#8%wdCHm-I5nr&@{AJo&+d5IvUBfr%wHbIT8EjeCvknkIh`KWtF8#6rCMyU}yo6d7LDqq3 z>i=diRd?6*+asqEu9aNxDvz@ENww%g0?qsc@&2_f-oedi50@?G;JPeN-aPSh4AZz7FNDVm85gw9tNDfk*4tcbd4SaT13 zJdcEnezXvuK2JXK6V>1+=M1}i#fd#s+tQfU3!Q?fn;q+smDQz@9C9+1w?OU@aHH_> zm1|Eb-o}cluRc+pR+S8JAorfZZUp_I4yUtUoO|mk)fSG6`8%^U+Uo6&CZvl?fuK`06AFVY0|Ad*HgWbiX-1V9Q3lFh!gt_r&h8+^ zHZ}{dBlRT&=(uuv;J-fYNTSB@ed~~lnpvArM2ks|vR<`Ma6yE1N z9}7e`%XRLeeCYA4EG<}XdK=zs#T3;8(r&}6*C3+Nk*ST1bDdnetrq_ZKcfCLK%&qh zk8Yn=&sdZ&oT!YK*8sF>@7 z%VJ27o&T^1IwO|PX{xCOK^B`s-A1c~tL-HO>&T=m1ww-hR(xTP%J|RpPsDay^{lJz zr6EG-R}y|L_?GYQ9u~tq>kkRk@JEPKd7IUr5ja~GIMGUG8cSkg03^hJ=iU8H43w;{2KuzRj|U)^BvZcW1Q6QU9&+(8 zVjiuKf6PMWfx0BQfq}GV+P5335<5l42M;1R(K!(f_ugM?u6l;P-#kxU20m=1zYh)E z5ffj5cC$@CJ%a|zdWUARkY{@+0E}ebOmG18J#6-dQmmDY$Ehw2Rh`fte|`Ci(*B-1 zw0buZI6!&Fent!;39+%LqY_6jYxe%@)y38n^#S5kkBEN~x?nP80+nM~$!({SyL~R+ zfC(KGKwBpr%AHz^-xUioB0&Q3^aGM#e*TN<+cJn2c@OExlb-t6pb8mgw*0ME`xN%V zlI}#4?fF6~UzQQky7UeQP}cp`4elhxiOmWcS-$@3V~;-ZzR2I+cHJb11U*6M9EQN9 z3!*{=3xH>9Q@TP>l{#So`1c}TD&It~s(g#sagZPc3kzySq(^Mmxia*U!aW3Rg@w{| zPG1oMx@-CnE(aM|jkVX*0Nt}sOMp!szd)FdV!;hY|8v1+1OVF>|M_}$rG``x+WeM| zNEd%pT`+9jYPMz6bMEYW%lm1^pve~E6a~&UCAr>GtE~(+NwFUE%3J6CTTsmo-EYS$ z9snuQcYgczf&Cu?a7epoG(1hkfv6amA1~0k@ehbI6l7LTeo6M((YAKKqRDwFe7)v% zf9E?lSsFFy3$e=PAVh}9+F)2D$ayz`$x+VtVd0cM1Bgw+OlAzB^KUs>cAnk20j~3> z4W21)3|9VU=UlW8hJM>uMP~Cn;mIUE7)qVd^ZkyTv8To9%dnhr{~)dj8T`}p76ceR z^O2da$x(Y4tF>&LO$gb!P+K7Vs6)P(JLiN3Jl&rS)EcC+zHr@C#|IfxmYGlR)SsOo z#MQh&ei~nWz-(uIh5?y()Y!w~V+K1y;X*rL#Z~IgGa~`aRDVDNmIYUn_Yz=1fzPf` zpydDI<+AsAVO!abuT^Iq4v@2|uEC-dbJB5gZPtKiG*ZCua(A0Dao|R6Kwp5YEZ+V| zZj$UQ_-4Rx@rI5Dczs>(RSMHW(2p&ap{K1y6nt!GFj{)|65x92Q*Aymz}rE8Kjj91 zMt!s2v;twJsG-mhroa3`uEy}0M1Tr6t=$z3rz@WW2du_jvj~zQtnk^}Z?L4sVBaQY zt7x?VcZbb`uqI%y80+`crSWpZ+^F0B~x1Ad2_r|a>17VciqJvrP0#~QdYPSLtqSo1A5rayf*QH?l z*O37vQcvvmFJX;D3BJj53+hQq;$90XV{H%KzmoN$sOUW7dCta#h(eK{V-7T1PW7ac zc84c~lme)-0LWS1DiFlt+@bmv2J5$qJxbv#_?`u{Y;4vC-rmNdDRe=Do|=lHNX%sw zs0Zg#<0RiKe0UVxrJ&^HH!d)huh$6ceY@04X2K}CMF+CnNu+H%^+4VmNDjEh$JRX7 zhrP79uyYHTNYKL(T{XbePAZ_rnU0QM3XPcCTZ*n9BPc!xQ~O{yQnVEy(H|KLY6hon z*hlGb^(7|J3dbYIF_CqzYxXAvVNpkJ`?k*^cW2!D0RD9o-TS#ST=SxbEB0jrkR^Z| zBv*UTyL;a^{GOlWJiheLFWJ{Oa_aouYpq&M{XVx~<8`Z*2PdmR`%bXtbvS46*Hg-L zDW`pp$m|V|Q`b^}igQEDJy^c;LrA3C^ z2amZBv?gkuh&q(~e*WKlL~qseNc0yipDYDrwY!*Eg9l4pkAVistIAGc<6FnzhQ+Z_PCtg(nXT6Tjxx{44712p4 ztcc>t_LW4pn$iS&W%OKru^=8iS#%M4=%}xxMWsWZC`kZ=X?`NDfTMw^SP=;s>8q#9<>KtbbaE`W+&gdy_{nnhWp2 zD5|h~xSxcW0zcJWTgAd(F_=eJy>&`-#p4ig5GF$ZN?tH@miZ$1a_oBI<;J+a{KUrz zvHce3z;qX;rA^_gdpr8z?V3by?jK9DX%81wE9|WWI3GYEIIO$RkBdX3cY;DFvC*R3 zdEE8pVja<_2Ciin8t~ae_9bxhl6WRVD+-9wx-bvzy znUDd>tOw9i3-lN>RCB8dt39aUjx1!hnx#G*)WDJ!+#OxD&4;$v!=nZpGmARH zq&EWsnWl0@o#&yGlB|cBl#`G(=94W&=X>9Gu6?^e_I`MeiqJ-TdUpmwfkHwz{#}b* z?;ZDbxYR2$9iTSiQ2GZfn6`y7)6sJBn zn(JCB%69_8hL!$Zaal&rr77t`<;siZxkavjQP*)2Y#_I{6?a&n_rue!lp@i^KpVz-|p9F_W_=`RmnTD>T;ihmVFw?uYyZL@>6 zM}s#7e)C4f1*u-+BvOk@vl2xA_l@=!EIth>9v2cdqJ!q|Lh7#b4k4{qbCBpL9SO*O zhcKDb!2RwJ*3Q4yw8#W1Quec&3>zS5C?Rc@BBFapP+fzuMMz;dmOP42You58sGE|O z15M%v1yh`2r#b_L(tv2E2Mem@ra&wAHqCb@C3Nn7eotGFK~A0#Dfs7Ex28L6AT^H4 zd);z%Tu>k{z}4J#W&%2?WoVIv-4DZFw_oaMu~D)wu6>+3PINSuqmoHWVkzo^uKS?= zk1C}DB+U4y*1{Fe+ zGxgfK#T{nCU$57Fdzj;LRw0(WN0oq=8q~YFbMM2yBJo8`7%SqW#>fdPN`@Z|^x3UQ zK9;BaZ!z^G7UuIfpybjemERo8vvs5A&Q0)F>n6aCg1O*@ZD)k#Ot^kL>ZB@s{C!zJM(QaGGd{zk5rKuWtT>co(7HDq51lgDW^ELHJ=B(G?2LQO`d37kVnT z{ojX@Jn6)z?ul^lU}G?W{g>iB`)_;=Znek_s&4^rmL7k>fIh<@rekcWB* zKCVCb`vcU9#*}lVFw{_LYffF3z)J=__@L9YTSov2D_oadZ$#TQXZ{+!z01raX zti~P6o$A+5*O~D|$>6B^!w8KSs&;Lls+R8;(QbYm2BaVT*tvZd{x;C&lZR2;KlP^U z&2r(aMQaQ92tYt2a1ZGx8v-f+8f49T{cawX%x^KbTc)b!>8byJEkI4RBNhsbjtmbZ zOABGnAN0{GE>|K+Kz&x1Hh7p8`jQw&j0C)3tFgEyz>5*n$V;>*h618k^^@GsMT;zl z36<(rqoGlzYSus2``UmRoUvl4ghMeAR%$dpgCRe|w-}NTPnhFyAPr$ck~~1;ks{I$ z+1|)NF7i!uTNOqg_K zVIl3@>}*hn*L|V+Sn8JaR1bwMfA_1edb4>Z9ORL(z0s5+fZ^-YZTQD%-TPXB80d_c z!EGnWkQ6{Af)MH+Ctt|iH7;znq)W`_it<`f(Y>z(01y(5Gl~3w0`gb{gq@FbZ-`4t zA$%`UE3K?Vi^O9cwDY|tV$!ZhR8UaRg4NQDhR}c*atw>(Inl@any8|o5yHM7)dTLz zg#Gz*s;dTu$C(&X_FyI&Fahn1e@Tu<4O%R(`oKt|LOWO@5|<)gI=8kqK^lX5)gA_r z+tx+|sCL|w1qh3Y!D#E~KyuSehYRK!PI+e5nZ`u0>8Dc~d_FTEe2lB%V82rCvjw+j zQ={Qce>jiF74={gK_GTkR(EYI$0Y0lBmt)2xDpX&x;hLneZJdGRN5}gujhX`FrN@& z496B_c;Xk6UN5REGEY`0|gtt0zw^bPB?u z2CIdD8)QbY`6kH7cxNzLni@;`4~G?M{N_j!?Joyo0gYHOz# zw!-PMg=J)r(lathkO(Qsk`;4LID>FgH?`?`;Z3pe*e`)KEW;}JaKxnj#VWt;uU=!@ zulWe@3cf(WH@>#`{`QTL8K0ka=*QYzGKTsrS|}ab+6uh6y@ea>23bRM#6un2JIxd- zXt4}Kr0UU8VGx24L+$T=JV5jFSsN4pBKdbhR4Iqkf8>0QtJ~VV`Y{bDn5(=sf!|v| z%cth?aSC8s7GvYvFEZmjGMW8{{yW|ARKhYyg)v%{dLGNBb%tcyl!ck>JZzs* z*`U74u?`p!55`k@`TyQg;r0Qh8_1E#`aH0)Sz_65BHAbFcLm$fHSVwC73T1|H}Fdh z85tn(5dW+imUZ6_rvsScdO;tPQZ15qk*6{KS2^a0lpw!i($gr@YQ0oT^P`6ji)|?` zh-5{*OykjUp;9lB{#wk3D&RN!9y4EZI|N-}(y)&O2*C`eCw{Y5tdfIJN3#jb8*U&pUY?b{0Cy*GF3((GjnkUAKrLXM{JL35u3Y9 zikn?8AFPx4(a*<@LkXeVP7n^KioP3C%r^a9fgr4>C!52SGfL(Q;_EpnTu2C8Wj)R- zof5Rk(9c8z#g*{?I?!P=$~*fNH-~q}QmGqv$QuiFcw&0~8~yr9eYLY96HA~!d0;UB z9W_d#g;*w6D3ysDS28AQO3Y%=$!}&1RRfzx7+P&22d2N_1t*wUmi`N+6MiBXjw8jS zXiEzPLptz7GISVjU4J%pGiCODRbTZ z=KpMuH>7e}VxhUY!GQ0|t^Cc1ijF`|=?&$UWSDirGF8g3spxK|g4>F;hB9wwZRdl@ z%sMX;+)1)#@t|?`+#D}Y&uX(#Tqdnr>bt1E51#{C6}3%R?I!Jg<|7Hc)9mLPb$hc01OSk*aG!u+Y3+&$u zPzC==I4iEGX(9CyJvg6?8$XLx=Je$c`FU^2d?vwsi~khsBYY~3qm-E{A-@a+t*h8S>xN2)Chu)81E z1`u)Ejye7(0k;zRp^%00X#pW2@YGmH<@z0j5N{^^=lffLT+ZcLQ?cQiD`Y|wvMyOU zxmR~}B_;IMwzk*clsMTxA0{0l?s*V**m_;#cD}Ag8GliM?~1bcO#e1Wn{5rj1Qit( z@mlfb=H`J#FQLPHoN(3We(l3DLTpbBk$0KQD4qIWQw=r5#9Wn@J517V#eG&3`^WhYUsTv{j53%z)o zuPV1`lZLA&;rL(8Q3mH`0YpPELZ45TsX)@3IEqjJ#ro4esSX5o$QJ$0+ilgs`MH#X z7QuzmMP#ha$YgK*O!qF;Vxs$JshE?2e((&t=gDFevhB9G;md_> zA3|aoD|ASRef1v+j|$r}-ObrAC}=2~{r)h*4mI(|HITC>f2VZ+aJ_Ec@nRk=v`oR% zc!T9V&(Z<}n*Cq7`xfY)%PZ_WJO?eh`?D}a69dYpf|+hh#1Qs|eH2dJ-5KAcvTI)@ zo#TUY@6m;e-JDi`d7_})Je-}*6e*cZ2WaC!O1;ib;htW}q}%E2eryO%5-N(VKr^Xf zA->AvV%WJrbweCF)S^RIx;fRL%hQm{f?kSthiAk2kx2y$mrS7BDU`knmllWGZ(L5i zg0f2FSSA6Y^Prd$8oA`41POgubzF-$WLJo%FzmpzPC(Y9TQhUQ`i5MOQ8_F;%2+ed z#!hR+IgEv=4a`|go0I%i|9&;=?M$;i_T=sS{K%tqOJQm|lBiB*&VA$AP;(r=5a`P_ z5`aT4jWEaeZ;1cfMwd)S&Xgy2aPr-(KT}5p_d>`h^ym6Mojq+CwqR*!it0!qEj?k{ zxy%II>2F$JbhJ|HN6#VEM3C^nz7LiABU;dkw03iAsv?Tt*dB;f`R~8b^z`)ELWPVl z&Zw}9*5gV!m9E7%)l&lI&2aJFSU-qzKq9S&AOusUA6dSM$abg84VrDP6 ziYDTIV&Nw`7mu?BxbH-Bf5c!WTGl1~tiG4XfQyxlx*xGh?KCtr2gk?P723(V{!u!2 zV7i>K5{XP9zfLmb0@R*=;~73pjBC$>M0UFeR!^1x_>f@Z=!7`w8h4w2Thk66P_LuR zo%MOxO^VprvBKjuY_e%P4ksW|N0I7?v(}RA8ldOyJYZ?5-EqoR% zp30JjzF@kixK){bqz4bD!nD=+cQM^Z_ilWFM#&uM914X-fIVQf(l z@H{lQkHeL3$v{%R0j}^+n@QkK^-41+TuP*%B<4syu%JPguTQ|XX5ms8E&CA9wqWVo z6^nj43^3mGZ@z?Py+yno=2xOXVa7NGSPBnedkStF*!*_vd}^G4GZoWvrt~s}3@#&x z?)Gv4OwIhK2c_=HEw?dO$W)@HO#?NDsWDXeKh?DvGk0>az#^0zGgS!h&(VZAZvBWSB;M|G_+`g*arVPh6p8wpF~ zW}Jxo5i`$~{bzD}GzW=WMIc5h!k9-q2*?)AyBza;0mk?4T3p0wP%s3?o*7v!1x%m) zSE+lb;|6MSw_9!gn=_M68l$e?w z_0ub0{x>EAr^WwiDs0KV23Hlop^AWLI$Wvt54yP`&F?w9Mf1%)Pg#UCMEyp2A zUo+Qa0E0kO;O|Cry|13{f-c0(`KW=B+U@w+yK5)1?Ii*sURYJ0yG;be-gYd5uMY4R zW$gOleL`rKO=4^jQ0WCdD=hLwsf$qrU$KBSJ=NbVX-}c63Gctud&`2hz`u5t;Tec@ zU~9RlPcV&`@=E_vSbL|9kB&_}t3=k8->H{W zsL*?PRVmv;EYzw3X<1JUe}daxN^TqJ7*nQ&m#yq&V_#y*|HUr^ymfeg?eh@Onv8wk zi7LOJ6h}X0f2TXpa(kUyb}~|f&vTp%cHj#U$vj(Rqb3t4Y%TH&I!r0Yp+0#`oW)BR zz;&y0amx>|C26V{dnG7b4Nd}MW3m#>y%T#%O z=P^x+>Wi}@&VaJPJ2{@?Id8vy!MDKSF0WZxm~LV}h^M^+`bc1Ym6Ul(NESEpu?+zgrx8~Q21FL4K!eU1{!nK?!dyr|(Qjw+5fpZK zx)djnSpIy;#?G5r`<>f%mQdsRTzyW+Wyy;6D9N(OxNQG`&G&T|V;Z%L z8GDK$kZn%v2MW~JrsgxM_o1iym8t=DRkwaKhn@xqmV3K9V()2w$y z!!|jB#y^+73-vYscG2zPBr}>oMx7R;$!Q46@xGEdS*k-Q`>$$H=%r5xRy*~>_d+5U zMi3QwN>jlBa&gMfJoKQC2)rWlN1#z_A_}6?DcaPr*Vv6O3rybA32i zTeoN|1k(15`DGQ0VByt`1dQO_aM&fyC1loiL!3~~Lp(VRt|N^5v$c#**g7c3F=&ng zb+_KMw%==O1B_?et#Y#WlB}zbiUqE0%5#P#*1d^ot&$;7Jd+O_+qnz$-&N1K#Uf$ zSiNn?oVu#)D&AWoXkocP_!E1IZBVyWcB3H zpjmfY8h$WZC)QYcsqBS1^gxI0hRnr>ckvNNn7W|F}!`5MTMzlrJ+jFDI z8GyQwGj?m8o`-y3gX3H$j0D_e1iEon22w({CxRS%pyOAofgG3jQqeNFfin%aQ_&*n z&4!Z?c0q1oWQ8>Y&1-)her>@fH9wJ)%fXz^`(WfUCtG=FXis{^=m6QqdQh@ zM>N{AEM{L%WI`UKN6GKU-LYRuH$ONM-qZi{RY?Kcev$QLd`JWn?FVUZvzkq_QQ!?n zbad$r1YSr)^v{0s&{ytWJ{;V7<)+3)LZOxA<@8i`lMr4{*ORK_Rsgcghhk>fiMAUWrcfRxR})-^$(w0*`;?Di_KA{52*1!?nR1-D-5~> zYkXgy`XLHhV+zKqZ)~K6WavIuRQLZrOammNCr6%(&j}191{M)3Ec!ypD~V1EFoU%~ zXlN+%=)ydzqqfAvpP;hv3oE<;kn?afNom>~_0O^F_;O&YKzc>qJj> z6CYb;vfJZgFgP9db$1eSoPM)dcS)caPW!{y z)2sRE4tVliI^Qu6Z`am}qjq1~5L=POeh1Ul4&2&Wxdc~1N z1wp5J?};efvpU%T@=3EiGkktGJE@NK;;K>vl&fSTS(WUvHb!)^Y`q-XtiS!5&>&?0cy|J}{$ zX`{AZp=Pk_>T@7A7&AVH0qLK7G%_ymt)C_2aoVK$rp4Bi85A|3D)gg~^X+r!L_6tC zmn`}Uhd;_?Z4OkL1N+~B7GWtsh}dabB^+)_TWr$g2u;c^=mJ8&ippUOiM6Q+`JTF^NH3sQe@Cr)g<8Oy-5g%%h(y^sL z@bs{lhl3s4^NeZUEH2l7xOcuQ3LXMX%SjA%))Q0$4D&-R%2TYUTQDYe3426`avlca za9eq9r%s)SiC{Vvl40*pSCi@%>+aunm<=R9$p3Ul(nb}n6o;HZM^5CFPpONWKMvsI zvOxd>hWAayF*fZRKp=NK9+EOEv7_*IruN6$Zc`4e)c#%PXBMiiYA_r3*U6>Em}?Rk zM%c%&-I?C9x=l$Esx`r(8uqw`$6!|0M3#qIFUzRj1ahG}riVvEOf%xew@41b!|TF# z_s4C10CYKcuo54Xrox%X7L8>uKkj})*JFBjzGg_ zT1ugxIi_XnGL+IQHQnAr-JeMOuxRu!Oxeji|J7Qtpnp!BKCNS7r;%lnpZga%X*1j+ zbf8Z;a0E`IJfw_hyS(l>`Yup`b^ULG!&mC@EfGauW5%!jXw-^tD*h{4xnLE z-i~59X|UsaNjXb*9q0BeV-Ab7er2g0(RU@y(>9s4oHIU|YBQ4k71S@wIRHk(paVMywn>51}hPejk{qd|n%w3*W)CSq%>Y1!~1*Pu{Y55#c9!@`yHjw8s z@i7fM_2PpmN#jW$UEgaQ%?{tn;qXKCfh@yj;Tg&TlU8@rnS26r3{02s@qSY-nBuMC zCC`a1z(7MF?W3#M2(ECl_hK`4kH(7(E{tk?{DD3;UamzHcz`ydr3TRv2Hpn6IXq=< zsL(r&g#oW%?6qWCOo|r0b5n2D&DSZnERqWf7YLuMv>kt#M@iZ3^xiSwJpc1O@GM-8 zb?spXBD#RhMDjSfph9Z=fg?^Iso%4&hqwdB2YI5MCWf_H&0&CtW^6CJ#fQXbeEc?y zBTb5Yc5|7e=&xWdcyIoQUFf4||DSatr^UO8C!>`u{B%^RQk@pW&Uqumx zK)Rl4C)R76I2P^Ti$@00WDy)UXh*l@mtIS%%RpaTGngw_{;-yL=czS&ShFvZ6ni$H zX*eX^qeR1%yI)EHwfoK(rqPEu`DL=7#W4pe$j#q*L#?{}?ZAjh?M_nl!O4m|}M)kTop0=EAJFo!seJ=SPdYW-hJw zj>LTy@LKwof;@B%v5N8~%LQIbu8&??OMdQ;(Ms0n@F7xnatUOXF82r~6@&eKE>lcW=3bz(Rx7Nl19Iy^ zKf}N0u>d{IrORA-aZIg*7$%AmF8KWMkYYUzUksIu;s0#v-5ozgOo9bfv+${oy2egR zAcud}b^XWr3ZT+~IBBqV7a5ALKg1bHLpk1KVXRT2>i8O}B4nXTt!lKyxbTLxXi=9r z@zj4}I974P9we12e2$5D8lfYq$vHgCCq%#9kc}ha2z^0udlq^4*Ktq#zeU93$)SiO z)04SP*N7`H>BWB|Z~H)&nTenWyQg}0sIg~VYMux^Ip}dbgnojiHb7lmVJe<%Hvomf z55r~<@#UMZzFGz|`NApqi0XL-Lo49KWuC^?8M5QRIPHoe4?D@=&GNZPf^fETLO{iN zYRSG|0KRqpj{>9GoZXB<>I9#xen>7ge)jNz8yAw~uiU;SDbK?}fSKP3lf2t=t6?3& zPQAFoGM<(NmoqzsAtgSEl{y`A;+pkATy?nhPXk(=1vs$i(5s9PLJK*W_ikR0Mcu$% zV$v5%(Yy8X=~T-kURxtU(sBuqNToEn(C!eWZKPV!YqJaDvVA{|Pz3UP$Y+Kl?pt2^ ztx)p1c6vp*-QUNqNm_jzyv}}$_=ZyxsS+CbBHgwdI1W1bg{MP#kzaZe;SdkB`mBY_ zaOwSm(n{BOm>fs~Fhy{#cl>bIM)9gfnT*r2DS0^}f4ydGzT=86Kz*-8Xz97~=vQ6U zN^3nGs(^WJqraq^KvC|v!uE0r&1sru z1A^4*nGG4jG22_47s^T{-YvP>98$_MZJnzhcCS}yy9d^?xr``oCsa@p2Y?@{5w9!% z)uEVZ;`Nqch-0WQf6ux@V8;`=U#yLgAc|=o>@IlemrRqL9aEwtBY-N4p;5iP{U>L~ z#o(O+&T|D>{NXEA{kF}It57doic6|B9VriiDdA$T;*2ELO>5eXcNIAz=KKLrVL_aT zIRPx{Hj_7vG({yuBF@~0UjsW#^*=I;Y7cPj9cy`9-eM}oX!Z&Q6&q& z@`Y5)Q0gcuuYTR22rLd;!TM&iQOH6IOC0*G9C9+Kz0Kr2th@ldyFXfhs|w%A9}paY zNRS&>HnKxOBC`H2APpQ#~2CjLgpelA2gN1n8)lX}N(#)(n}gSC|HDzKwJXrUPu+Dwo@D8vTTM_h{0~8uSBY%NIEU?ivxu`1C|5|h=ar6 zR>sgMwcwAkG_qaKQ1+`q*lYs;budJ!?$GU>ZEze%)^CP-T(47{TCEWDrH{OLHAm!9 zno{I9P#6JWMLB5^&~hgIElnWa%m>~_(NL)j$%!ewxZag`Ppqt%LX{uhrzVoR<<_e z@QcHOTSFm5xLf528N*bLE$P0ezlLRBpZkBuybu#p)2k7LP(cuZ&o9?V)TE|a4Lg!R zRwv!rWJ`#fENOyNP0wOI)N;gQSAhCdmw3Kus zu!Mjh-QAr_z7OAXe(xWgeGahq&YhY2nYk19fvFW^uwuDd1NFjGu3s#LfC6E31bKH{ z-0 zbH~SxuL33KlgxC~bHlnuO%m3`#S$I~p%=$(=Ut6vg(`t^L@fE@Bg zZnSeQ&febI(yFWU`Kpb0-S@tiU*5kN3;tR8_!6{|vv}xzp7S!>an3Fr*{2C~QrmKT z-oAgl$Mtri$3X)=Yy6?cjw$3QIQmcbx$xIaw|DI3`J|hIcw=6MvPjn&`Tc zkaAGqDs+;2=W)<$9`5NSH;Pgw^|KBK*QIH_8!JigTm2T=6bRRslaV7&$G|~iS)BjX z0@&wpbsQ@ER1X=Vh8LWP{aqjm*BztjxH)R*NLzb)A(b%i+^WeeSSltXL#x70b=*R3 zBQ!OO^5{cl8ajv5{8A>jR3K!|lT^%t#M-k9dj0Fg65`z+m!_ysGLIZF@%2K0?dJ#E zy8trgS?kB%@2{upk7wfQ>Dp#4PRPsKHU*x4p2!z}D(PX+T?7081wD)7@Qvp->~41P zn&p_Vi=it_qMeY!dc$o#POzxpcbkgq^MlS&`*FaXaS8W2zI8ab`q$A?rS6hU z-D5&%Wu;7RfhSXX{1>A@{@T5?2h5sBIob&012*bgZ>%$>Nvt!rgl~X%H(%fi=u*** z0Y#Ig4_1sA7l$3pZFI05#SBF_$L42{_^rAh!FPtG(emtH4GR%z2~RPB=D>+Wi zWx@rDKVY+1_OHL5PSx;QN4@O#=utafD74AUhZ<`ekzd9{k(AYk(e-B|EEA^Qzi7*P zTuYYWfxNrMvU6biAL(-xJu*l=fQG&L0oCDV;p!7 zG=qrxFG)ElKZ-UiXO74Hnspx)1LiLQ7-fbBth&oiSm|#`+ z2Kpnl&fDv|kB?h_R)9dQa5X%TbsT>pnM;z0088W%U2Nkq5+!HJhAV?*SXzI7n+~zj zzf&F>mWfwm4Em56%zq3_>0#)Mnc0q4wi(D|p91KCgGG%0rZTh&s|IJ*8ov8`4kRIH zR`e|kwnx7+xSG%Q<)N*v5aAoe76?YQ{}<=u*y-T9A@ony8>}FG?9n}Jn4lt1PJ8a; zT5^G&5(Y+LEJP|c4QNi!eBWy51yy^J{Zwq7GBo}hlQ5V;+|)DyC%ZGO+A3A1*W7A3 zlzBG4;&Ab1_k0w`0g+Ep4u*!YrA=M)i0-MwGT6Rk{?L5DZbnY zuu(h#)M}>28LKZ2u8b?0?0fac>(f}0=jdK+bo}H1Q&yE*F&_eV?XYfP%ZFYmN5cl$ z8%i##r3FJVggwV(DTb~MHX1tSS5oO4_-NhqmNP-lE!NS+bLd}x@7z+{)Ri+Og^*<-nV3ic`nq2bTjEYFKPs1G1MIH?R>U5-5p%P* zcbtEdF#7G25kvYywURKZOfxW;=6(P6>Ez^c&zXFCR5%;)TlXGHfB`62`s^3S`U5k7 zZ>=66jG^3zT&x7+c4AXdOYBW^A^1l_CxFp|>K;WBl^%zV>>}XpMS~@F#ONR`z{&0k z#yC4Hp3C9(RGG3BZYHoV9Yi$!S<0?6`v&YG7IHEs+MzaU^j>zQf?8^(*MolV{EzRk z>ey`ZMWDKQ$_GiteI{&#oi*zTwP%IReVpWkqW8zau|O`aPXHpU?wTJCMyq~(dl$b* zdOv&#N|bJN>|@|!Qb{lW>@FzUic0lUBtEyD(eaZv4#?&HjhWBFsMw2von42)xk8Qf zy`sozAZFn*#W=u>r6a3U*E#F3;zL&g>)w=zf@%};A`G?(yazxjPq<^2K2V@RtF6=CG3?*mNY zOZ;z+9oR(nV`)H(P5A<|kD3ISNu#lbOGSByljiRhd!7Z9DzM2I8kK0{A<*RoKRfN; zvrC&9>0L=TY31JcN@1S`!1EiRKcFBN%d^>XC;6{#YS4UNdBKgr#Dm+ z#gNjA3rLvifGw27|D}u^Z2@)})_gi_+`;MisshS96*2Jc+po6y2|A81hqX#*Y4ayP zM#aCZR7igw&BRY-PnYKjEpN;_!=!x&p7EyrRU&1uuTG2#AMZjj-L@9ozheG#dWToH^1CPb53avOsCo68ISe1eZ|M_GZc zEcNB{$&7V|P1DFC^3{sp5fK3+87;U9=A7?nYbnz((n^zM&w6PV8Z%*oFKmMa1X#|p zS^zlAoUk2t)-uCo3tcjtWlUOPaw2(8^VUL=M;9wuZCDwV$_sK_gr)R}ds0@mlO6om zmM5x)N*4XAc#Sups2bY35mrb{bv2YeFq7Zq6sb?9)0gEn<2Jv`#?#X9koz&C?;VFD z(ZfFnqx80eT!LeIsP3K>+Q-9o*2$~&tWks7vn#GNX84ba_eoMDL2AiB&p-YlqfB5^ z!`Bswse=imU|+3F>zw32eLpfx&gaDy^;b2VqK#v@l;7Mk^&N5o0FT9i8{lB!D0zS5He@ zmzdQj?BsI4Bb%RC-2br&dAFaSqH^Ex()sh;N*-4 zd?SfrOHDnneHfLg#|I)fC2N9X9f)DS*Oq1%omD`RijY)OB@7xFwKQm3Z-U+5>bE3l|q07lq5N)28>86j$p z2G^UaGNxA^7u6QWa3a)3Qxn}4IKlwrY~%BlRt{wfhLjO&d?Alg(D1E zkE(W49Wd_7wQo%vaTQ+uzq11uME5?zu`>8n;Ie#SZ5s*%5ReHRsnO$XxLj9hFwcdA+ z0)XO!HHngu<$7yPtbst+_a8qM-^WdOD3w|YM)w)!Nxs>v3fvHOGmK#ykwG$5COLU) zDc}*kX1`UznA>WNOh=1gS~ex4zLzz8h9PVpH<$XW>>HMHfXL1auV>}V8Rp`3$fy#7 z*DJgf^3Gx`CsL6cm~=FtxB*mTiH5@}UUQ7x9+$*Vr#=qNGOoP)sfw_*4~$c)8ucZW zScxVD!pOrU=_$E9$4CyDW$YSr3r@?`6s;&qho2>6U=3~l{my|YjgMF6ZyydjhMOW8 z-Z~-vTVy%EjtGD6YQez?X@4eKkkhoAz3#q1`Gimhdn-)fl|cC%;5!8jC$rN*yaHw? zEMzQ96I<0}Oe|s17l{O1AH@ybc%mw+vj}d{WbP=UYsS8=b;-X}!Uq#L0wF(u;<QW|02HN^RRZY8_GY52sli7}01#$=t+o=Dvv8oZj zIL8tz?%8_gZNU>Wh=_Chi6N;h zi_49~i9jd(9Iy$vGj`4&)10W$PUaMJh0W1ENq*$|US0*0|u z9U909{#O(ygEae4lwQeU3gSnYSLE%j z8fqnGaU}3DYIDK+uOyOW1uPFTI#EVYL!!pg!|lK2R5^vwSY%;wD2Ej3RVb-XwphwE zejVUs%p%S?eWh3veaFlPk^U53b^9!mdM9m?#ric^5CZ|xz#4UB&}m48&DrB}h5SZ+?c7E;cd0!ZcA-2O!_BcR{( ze}-0h-4*-pW0W7T^8d>EL{~N=46m0KH zJ%#IaCX=KXR+>pQD*+<`AC0|ykS%CU4VBzED(1rDZKbf=XdS>3&I0%gT=sEBTS%_aVYa~(u<5ET)$D1ZOhHJ<9)a(kFKD)CJjk#fmguv|H zyT-5hzn*LCIj`A&IT{{T(~Z#X zMf){DLSYFHeuoJGR4rn-xa?<=LanVX%hz-wPkVuD72D7OTCz$0th4AH&ZbAy`=ia} z{JL#WDUhxV7&$obh0fz=6s|w_GoMi*S#2iWC80+JEM0b?O}XP=CPXEcx2G*XQVKk+ zhO)n<7u^Zy20WtmcxhY z0-4@JnwtSx+Yj0k^g0cj+&E@%-gBm}&^*Yhv7m@TJ<>^Qzp|Na^M|C8!K(%N&3M zYE%!cm1Hyr;Inkai-S6ta~UjaWMoHSTf<-rh2N?QMa23hw?x9Ia)2wssZcYL?!U_@ za@+GJRajbrawPnU<~>*Ma*jxs>OctxIHGsuITfY^19P!IuS0JX-- zZsRSsn`F&3(%H4lzYgf*FrDz#$33>o1XyBP*GT5h?R3X&Q#qW%4mrbRI!g%+VurmmTNw2xgx5*^h5zu)bTUAnCQ`931nb`jX`lhjK8l6o}r5WI|f91V;z(hzfUmsw^ zsr$dj9b1_imM%Y(wu*dfh&QR(QSsQ>yX_>0_fo|SHSDW?mtG*&FnHZM|ECX_`L~fa zJ3Q%y9H&HxGj{B;_^+bTz!bkMu z;fZ)8c`(|1foPD^J|QDG>`yE*{_DFWFQ3x4cC;kx6Z=P)m$?}*8*!2*F}Q2YxoO-R z;xFpcS?IJ_=t1f)B^B|5uG>BorKb=6VoE0LC;i(e*Z=kH{CbME3VYQvOny&Uka|E* zmb4Svjui=?90?hX&EblqI3T?G@mPyx z1^g7V81C5TaP3m>z$(}2WrjQ79r zCX@N6$K-t%m`K8K11k^$9Hw>UXv?Tx2b%gn-E*lVQ2$|Q+YZYf#Vh3K7)TlO%%j`? z8g*Z16%_tKzO+2AaZN3#og%RuX9?wfau669D44ziC3pv6OYSw&+qnKH*5lkIWw<+? zYI&(v(fUxCZD5#@u?@(Qz$l83_`sJoWk@P@w+VhtQN6kh?VO{25O$EJZT{lIHrPV$ z#jaKdL4egD%2YORb2j7!Xdy;az91@sWO>|GZ^%A9J;Ss7@|~xeROAS0bh5U{-7p+ksANauo$ZtsT;;}l+HaV=@ zg(oEUM_hkIU?AB9Y894P4Q46Dwhs~oogzLGRbp9qn%@OpI3LF{f`4_fJs|HY{y zfO_E7k1$J|Tlpr5>KijBtm+l_gspd*>Oi(hoI4cur>q5GrQe)bJxA4xL>t{!RKQ4zCpWtA$<6=4~7Uf?5>wXI%X*R&Kwz4z+R zG@1iR*#<|%13=-&Z|w*jDZ6?{`F|SuHSB)lRc>|W!4@+?~gr5c?#=?9c5=Q1l>`L4% zuQ&okZ{)!Knauvg+bj@E*wR)XWSLVT4W&p~!V#)cu9t+;2faYtFHn$C17WD^7PMQoieZA$|dk`GoxCeL2D}HZG;bEDppq z4vidF z73|@6G(rzAZ9euSPcTd`Ti75;d@OSaMr=9`kH?xS#+KTM$ENtmgW`fwBMiD)sAiNI z?OSm)=qo~2sdDl`o?JySG;Iyw)3YS}aC4xZOh=o?ecsuR;E@c~@t>R(LUzJcwQ`lH zZy6Uj?X`>hn)qNmD*o+7Ezc~e%%O4W>B&5LRPbL>SNg88ZA$@=@CMN~s)Sxl@qWl8 zXDDP0Q7UkF1Ch{%d5&E^uYRU?P!1zV0XHeHxNVliWaYZ4RV3xU^9x(mdetZ*GkXqCq*13;g?^53%nh-oNh!23X&NbQJ`$gTNCtAXojS9KkX4+?wV)+=W^AlW(Gv-JLd_Wsp>ie z2|WRPMhsaUJf^|Dy2D$W%?Y981LjlFb`5g@JV^}h@K^-IJ%em!&0YaG!m05$#%RHE zn{OYve4*@HwsV4+y(FF@n0CQ??}9%oX{ngzl$!)l0*%!F&D`S=5uq1h)?PDqU=iwB0p#?MctY9O>! znrFU5)~;cYfva_L^GB4w)LeklVZdwTun>&HN}GRb5Em<%8)w2wT@#%^A;}ghcw#Ft ztMb36X?87y8m+K!0nt`JL3jhNxzb?PBkR*|$@KHpmJ5!W3}&?1unFey^Y{wqhRm5$jueACS{i1>O2$;Ii;o;P|&L{&*R9Q!N6?Di5hVXQD-b(JDOh=2ksl2o)@;k^PDp zb%3t2))i>HrAO{1lVx}z%pWURt@xaBrqpqjo9F?%AA11Ty3#R^6w|8D@*+R~CE^BN zt9~13;_LYf1Um9v36OWj#eKDwx&5e*3A#G=pME-Mx%Lk9S`IvU{C7b{5?nd4E&1WU z-eaivo%P-s%F@7%i{s*9V7sk;%zwq2C&M3~*!Wv$v^Uzzc5y&tJlSIFv}2d1sxB*k ziWo(jkNSfH6F4#Yx+DpC&X9sKYaLG8e2+(8O90oQ(~ujS%}-uLs0Ree`+;g;qsTye zFwjJ68Wf%wxc}MZJ2Cs$m?4tkK^k$rFC&%C6*)gbdlaN8IbjgLr>;9~Xxl0=$j!~S zwge-M-^OCotIiWiVr97i$RE=Y&7owd!)Xh0UbpBegt+G%(cCxu^y^8=m$oJf@$-he zHbQ*J9J54b#6H8E1Ei5|wnO`1U<>q(dBneIKvf?r31lGFm-39kT((XGqh>?F0_s7( zgO37-P@BSO*&Lsiyt<6-iiCGAk{)u?8B7Yan>=psN^hn`lKupcOeY+TN5n1_hN zKm4c)P(->3lc>9r@}zY(Lj822=20+^ufee2H#5FE8*)>SMJ9@GV9B6x&lZ$j@E5V> zv$Oo^3byt%L=YK9HK#-tJ@een!cE|#ljE6cRDD6~@RPYr5a`~s-g#;DZ74WNT`;eb zU5Zk8Gt|%B9mGT5v)?sXR?afiJoT6S-m7?`pPK@d4$`&aJHV(Ka~70p=YSCUxb8C0 zQYVR|`|Z4>u*#desiJ4D>F)N%uzn>@yn(oROt|O^4>9zF+W{`M9PcyBd8RQ$_2P0CUdB%DkE&r(8zfhzU@$uttuYv(cHehqpvcO1<~~u#at2B)4|wYb6F_&Dr;fZ~Fn+JHT(VR8=2s zX@?vDZDVy9q)mbDnw)QtY?=DFFD4MmB-T=J_S?ENqDQ2LcXE#)q6}ql!CWLEF9vv=+sr zU3%&Eg(P8DGNTo^=`TB|yM&vyv&1+WEEWqaNm;Wt6%Dohq_%NHCrBMUH|~0gWR%n_KHYKhjx%@w^-s8vmWkGv;iBN^V65}H6k<9iUOnbG0<(ntgk1d zPuGEXt?HLzJH!0*FMXFE+m7Ffj_&m)*B+R%@F6&~NO&x2xwg>CZrBc8%8j`qjIWIb zsKuDd`WS9lRqxoCR=wv0V2Ev)$66e#dDOj&-?e1!gZ4zm`FSINflviR2|GKn2f)z$ z4Th4WJSK~nF`40lsVJUW{JP57uUTkV;hQ~F@I~Jvb@w_?D*!jXW6@GPt&)72hec9w z$Fk20hv#fFABT>ZM0&XHwXntWszGiIJZ^a{Y{%3^#EO$^&NnNo zviXTFM}Xm_QGGUtwPTueEtMjEoTl`WmBNTrT9IfYn@db;D--?^M`@}&CZiUI}fcZo2@a)*rD z5hEvB!vbvSN&gynl<;V?-4hSIrU@0Fl`tiIr_DkTNitf@4-p5?up2DS#Qt9TEhQ4W zj7a>i#u=2w^!>QVXe?5)G(Sq5mo`&+gX& z-@kvqR%h>uro`Ehk}#>q|3*4Z1^`N|n?&Q75V8c}brEJs3ocj~51o&BIVpZGH|*sThF z6X~~R1w#!AOVeyt5*Fpo3lW;}X_`$oj4%etT=aEz}bG9ochfKCe^v(n!b z^V}8ed{gfBqsqfM!+A4WprVm-O=BPXdQT)H_Vpis8&yMMgo!>&0N~quOTTppAe@Ev z_ooMa7$9amd(+Y!?zUd95Q@&vNx&(C1Ho5uyho(gAMA3AsEPyZ!mpMfQUwMkV;NP%FHLQq(0E?inx*fM1*p^<%`z-W zpa!dwTZofP2G3UZ#a)hpXauPY+baYYYxofE5pc=PN)Up{@R3f1vpDeD^zcWjD=9rZf5P)lO%Id93heVpeE|v~clOw-9Ra=l;JQ69V6YCWB21 zFSyv@B?K-vcR;IXQ@F?crsV{OlMx!}B+8%BZ_ZuJAES6?{mcDcs4SM&FH|*D z-spW6AO6b3e)V-nh(`dmc)i(X2oiK4EJs!Kap>J*&GZdD&1Z_5QQUo((6Mk%&2Xoz zCzXwm&!J%+^S@ZkJx)ManJ*YxCT0vIaRdB9o5*LV?_^f z)-Sia6S!D?dMVR8S)iJF&<-)QY=?JU1S}CSAR_a~^fwb3p6D^DJ2Qsw6(UVie^$^V z9?~&gp1kOL8eO`R-`36EE*MR>R-R%qPN$-$j}5t}n|aOXjBQ5~c$T9wk zjL5l}C`-tc-*?LK0f(chkEyVq1{WdOn<1a`)ka~=Rb_7*O$-71Fb4-hHnV3H)lfQE zPKu|VUKz?Un|$?PwV!jmc>d==v^LN$c{pI|tfnq-_-^E&!e`58J7-qbxVmIS{I<>R zOwxomwdw5~YBds%IR3=5poZ2ftv>a~4O#vtL^l5*iKyW}ago8kU zLy+Z;@pCd=MIp1XIE*A7az;l{=c&=I{wpopQCTm$zLbxy6Pw4e!IDm9Ha<>=DN;p^ zl4vP)8$DF2x>aOW?SbJO2}4KLjHkOkDr?F-Y?S+T6-HSRRS51mT|DL_7(z4bJacLJ z-!Q^65xU>PETci8Fr61~8Gt$* zkA66Fk41sd`bgY67^qMXZBQ4Il#xBtlQ6VGPsl(-A#klILmX-0vCWG(j2|_SYs`O1 zSBl9$TcpgWPuQDzvG6_u+fEXKAQibXklj00a~P;)c|C@6mi<3>n{``lBBH~&*lS1kgY>;j!`Oz4@yM9J=E zQwkH1_u1BAG=Z+s<~!I)!0$4Oz||vZwDyyeFSJjhy|*tdBCttl?GyA@u>{Q+(f8Sw zTl>EU7TLhA%jbV}J#@!?$-nZ}HFCD~hOSP=b$keHJoTNTzRTsjdVV?rh65WsO7B0C z3RA1x5215QuNgErgeq^mGWGYqx>Tda(5rYI8H~~s4BU~4!%iwU`SoM>7p?_wvRwZ* zUN?UpYYmzxP*Lpzwex-M-B`1Dys277Ah52e@RB_Doac@{Ao<;9s{QJ$Dx%LDj2y|iG(vPo#FvB_N?&$6Q-t) z3^%@0+LJy!W%YYE(fi-JocI=mwNuS~Ta{+u!@6HqBgI7{jBYTlfKSvK)v(u97NqYl z&E>@&C+fZErk@_->9+z4R`NXpV|@hzMmc_&?%hA_tUmq8UrvDpl{i0bd067@wSeJ3sA#zC1ToruWVdlm3y6`Ssugifi}l z@1K3*HQi_sXa%$GW-j=j*0@-qC3Fk!-6XznBYKTlx01^g$l`b)jpixpqmwu%=6>S` z5ve;$@ZUc2Ir|d)sH%*ZZEx97_@=Q$>`6u`k`Orw4A#`izy+!Jar>x8;j8xK_Ehj{ z`nF=m{ka4MshgPJ$S7NV6a`ewveAQaoRVHeposO9KDv>np>RG5-GW*;>=xxSM$mn$ z{n|q;7HzTrPG|m?2xJUKyQk8vTUs}iRsp|)b6tR@_hKhw%F-b#pq0xJGtdduw`J&# z--|Pmf`jEcn$D6`i^L*K*4}$j4OxjxvttKZX%H}Roi919lmKM_U%3PVZcwuyikp1FK zLKQR++Pke7zdRq2`Rg$BFLQB6@ZqAEa6FNN*)zW!hzRKBlndGuoaxhg|U?NWbusG6#Ht226YD z=Eyk>T;FzpRx`hbo*#VC=(|Q{wq^lZG z5QPY$zpp5xwI($*S^|NYG8ziXqiz%!UiN?`1M1r~C_ThO)JZ&>1wH(y4haiL|@Y5{ytC>i0@9^6!* zIuUa;(9I90W6YL|+_5{`+uVz~1gl1mqLU^7QUEkzK}C@%;A)?zAzH5a_}aY9C+F$= z8pu0mQ?lC~2Fk%+(+rk-5Lj)X&(jjASzB|Gq2f(cq0np*ueXUA8fr!4XvB{BfMVpQ zbTDDykP2s}V+M!MivoOWEIbVDj!KCC<^#vFerEe{^}3z29S9449cWn`+tho1^;I1OxrJsL}!UPhXc zcLUqw^EDj-Li$@ZPS(}mn%@LyByupv6Y!_>*dac9gRCVy-Nxw&^EWH8PaJoql z{@rM4skc2t-MR&M%V&pRs854ZifVe*O4_po+m%`7DjWX{Hy58!T`M zZVXiT&$I2nE!1u*3Nw87jRz*UzxvBGd|OMIPm#FswD-|pmme`6Lw6;D2rEA$`(#=> z%r<3f=9GxcwjZv1;OR~>LCM5dCqUP3KG*Xe-5`x;9$w%0e6{jRylp6wiT#R#j=)T5GmSH7vqH6C_Wr9N)OaJ-&p z-^6V4`jw`O*tRSX)^;v03onfW1;WygYH7s99;E3D$o+PBc%xfYCbwTvfy3z19`WJFFhY!hK*!Tm6c_wTN z;pT`buz)`LJJ`M!0gR`i;;k5NrJBaMe6)vI7lq4%Ar3&U#<16b4PvK_L72J~NAbGY zq~6Uuu=>k1+24|dXDdDPQqX8tL^+!elgh~DT08eIwJ#OvVO`soTNTXbN$h_D&k)c9 z(Khi5M@YT~Za9sQbZEo*rd2wQKb;lN?4mFy^3EdNW2VBm#)UiSlO^y2+e#>?k8@G`|(mboMnH0YZ7}Jo^4^KnCmBV+5wV$uwFgUB~KZT#R_D5WR}^ z*o0VoM6XRjj!)m)v3n~o+nPfPfI1%R;`t{n-%|g z8M}_gb)H<0XFr6D84B8SYk|v5G@huPcJLeicxCvsMFU%w903ifSKUpv&ip4hX!uYGfzvVISpaN zOZ7F|a^T_1?=A7tbryegb3Flgj*Q`HGQCYlNt;tQSv)|1Odig#8ySswXh$vI@8Q4W zQj9;%B-t&4>c`DnWnqAiZ4*>#@%2T?Sy$o6+1(F1V_I?A%)HJG4Q?OLwLJ_50+6&<2O>_6FOlcr#Djp9hJh9e4nn~v4_I!H; zVTBJ>ic*TnVR2g$v-fl~7%1d=+eag24mCIw=rCjz&&}RLz*({+_=*N09+JZJ*aer5*}lJ0ALTRK-zG!1a4UtW^}vRjq>)#ke>=0Wtn!fOn~AonEzjPA?7a*Z2@F z(CBIq(^5VJtqiaGGauk6$qZ~i!RpIHDk2J-#qSH{vn83+$kV1*Ctv>T25@qd09lG4 z;J0R;V&aK4v&Mw5m)Dh162~9guXVkE!C$^FRWlst7vWo8)(8e5B`ZsA#^*7>9h9Iv1^*5vsslZI8<` z>7+OWPM}vF#ddI-$bn+VJ$&-4eH0ABSK4S4@;ND{K7_WN#<5Ec6Rd}svqEf$trDrEMD5=yXWROe?FHyHb@)?+AO1i zh!i3N86>Z-Nxzo^W`f>^`oz}SjX?Y1P_yIwa%=Psmd@1zIq?WDQ4vGeO zghpV6Bfn;(qfL#V7C>%w>m`7`r4RGCS4>SS^ar&sevGn4U|xP2Y{!c_gFog-tR7EU zbGt3~sdB<^+09NoXDzLnBYo9>#bL?f5-G$TF`VJPc>;E3ksv}lG*3IvF8RcoMI*#y z8?RjxVUoHJ2aAB_kC*3xYl~BiShRV@Dy4i zl~w`~D!`JLfzxmub`)}VF}hB>r~!>OK*e5r=h$)T$=BB(e!~)VwSfa?_lkc%O6*6_ zPr4nemgdIT<*7>*p0@oPbO z+)I6Uq{7K~eoKBmZ+9al3S#yuJQ8(4Q9>?$0|i?|C}d!x7-3Q$%{LCs4mpDcX*l(J#Vxk>A2J^66X`EuNSzIQ5!CCL zIv(nYQh$JWPXtB=^APjiN7mvkY_cK>9eZsQG0-pF;^){DKGM_a;m^^AcW>b;(Mz{osU$}4sfj=^K$-?WbCC+wD+~p94X>7# zq961M^px-o)W|Bn$1>~9qLD^ddJ#guhGd}<;CkRKAd+^SWwrv797P2I^ckKohh}(6q5liAu~&P;L)8S%3G(Qc)4H2@cjyeP#Q`IqZAb&X zerj0Aa9SN7p>P`;|ERjk)YT65bH?8!`N_@-g>gked`z39bl_iDIy1b*-yx(6V}v!l znq^q1YF37;gn}5zzleGG5N7Q zIZbC?qK*NK4M(M3{Cgc&3c09p!y#xe@nVtYf3*PIWjn%2$ULsum2YA`obgsb=RGA- z@j&neh#NC=<$a5W4#$GX*V1=l*Xebcnq_Lais`Oaz0?0X!}A*wG#tByyVY?xP>54!Ixf9!L}x zUVKCCO@M*-k8J#Ya5fs;Ka*g1K1rHaZd%tPuT6eAK;lfQwM>R=l0`Gly_)W`>aZ@`Bzw5MS=PB>*hbp=|&$M}F7%Umr zRhDLf4|p|wPTrtr>;KVo)nQS6Pk-s|l9Fx&L|EzWZjeSna_NxnMr!Hql$4f6q=Y4< zOB(5J-plv*ynpDk&*jEBb7nphXU>e78v!7a(M(Shk?n}xP1%vV8$zk@t=_fS8yM(~ z8SKfmzM=}G@H|-Zc)foNr7!7N{Ot}0w|2QX-L906bZ>8h-Xhi*Lx7dzO3K)8KYR|MGGz)Cz=~5FE>sn0RWy5Skh?x6pa$6@8 zezdTNp@%K1P&F{jM+8JT}At7D<$5_?M1}dNNW2`@hSocb% zQMPW7Ih+KU2qZ(@B_dS#Ph7GnCgu84(U6(#px^A5a*nR`AQVgDPWe|=$Kl^T6u%BK;fF8a)KrDt{nr=mSxHv$8YGpNgYxU7gYNbl^-qOsE#3ag)D)Bn7E@s-e7Han#{=Zt9==;TRx0PdqYuu3C=Z-OXR zP_4zisCZsK;*YN#;mu%KUAnHq^J|Bk&5^^McyJ4@YT}eJSmv~#2TGxN`QRAHpa_;| z=gn8kEXym`4|qcJ^ko7@P;n4T{tF2DZ?kHX?z~?4!$?0o(qR3M3ttC|&u+nR_K(&z zJ+cLl0tw}X)D9-0hggxHD`gW)nWokouaroR2zJ-(4i+V}KOxM)$Vep!n61W}7~O

C@-4HAnHKQ7fR$M`%j)wXSx}f+P6e5gKErwWC%K731DIB6JIkIq##tx-a%B!5zx{PuE?MuBd{5RfmiwZ;fnOn7AR za8OeIK6@WGz4rNA@TO%(U^-w3pF65URkdzzj8@$`Ux1OdUG^FYa%bnFs)o$mNF_Tb zagk?UR(lWk9i01{T`hy40C(nu#`KRA3LSJ6;2U4T5UHLQ8ckG%64}XJ z`tEyL$3<*v-3?WZ$u~*OD`+w*!yxoRpVo5)7sdL9p*i|fM!7AzrR_#KD=l+U@qmf@q|!_ zCFdd+jh<$K)|;YRG>It9RE;w$+PANNOKTS$X=)V^%UaSR?GoSlItw@K;&i4$*5)EF z$@ocImKIv~RkUP_poe}hd`O65R4}ZHXcIl@-ZBx*MzAJ*+TFZFaFza+H>{T%8%NWP zjmJoi`@k?U@0QH8fFLA@ozUeSc%Rdbl7gwLXj{5(TWIU-zx8@(84}5(5EmRv8_P`a zHA3YpdsDc8?oE95u5`5B&Be!TN86=#%8QMMXp-?$<{9*=FDXDdLPNx|4YT+2Mqmq? z2BUkRRW2>}WsfTxk4P6Yf!nyg^gNZHU4=ikd>G3I(A5xU31a35EDTNkE~#vt_DfI{ zy%N-XP?wfG6HZ}VBu`w5oR@Uy^EjRx2={{h<{i#`1A&9f)K}#CV>lJbGl>HK1m-7xEj%X*+4=WF(Pp-ATNzO&UHHbu>-=hCm$%SSn zg2t`ymnL}OYfCmi%9w$>7l_^#22QM{>l z%n~t8oO<|y71tzk|G@dIUOTNsq>RvNngOS2eLe=XkxzJDU=8ygc2|mM+TRIRB!*Y{ z2r@lm@0I8hYjAX!dr3yP!IgfQp!Te^dNFGv)|vRFu-H_*?LsEEc^a9V%L>#~vO!xG zJCz49tEsAX+<`+>&>0nc-~(h9l<-WB-EDzy&Jt_mD@PkEPV8g?rZ9@tGMl6fqHrAv zyX@@JL;N;EO#6C!UL2(}=6-yNPUhFBIISY5aVo5e>fG&JW|9rulZIr_KOk!MpTk5Y zK<)-EVZr}gytxoVPh`8f#s@W&Q?id(f}G)|Xl67EFS!b)wOFkslsTjE>k{Ge z5i?*!a(BSN#U$m4Xv34312z~f2J^xoyYI(5{WyT@Q}}U^`M+TBY~hdZwIeq`3__H< z=iz*es>S(3#ix3l3m0I&`03zJm$U267yh$G!1Ywy7-(MFgzxr$9-5N&=TwI|z4FHs zkqj#j8fda}`f-muzC0iO3kWq_lo*^|i!N-@QIan;J3%X1*~%VXZh3x^{c$ppX-|ac z0l56tM_ES;n55igr&VsbZZ&ol$ZFI)@Q;2Ln!KHjN8f+#n46<>1@i_asgj}6Mgzf) z3mD`V@2p9%$MYfo0YvcNzsLZ*?}kNqa(^8VYA}4rtr zO$#$Gqw)v&MPq!wL38b$ltOoR>}bnaQ1ZJ|iEHZ4t4&yzL)HDaA5BhRE@$k+9oDy8 zX|lQRw%KeC+Z7I5YlLsVvm<8EkjX6zJ@%e|xn9kY^swXvzR*DFX;@DmWb>^O2_*jd zt6Ssl5jnF!bsIRs{Kd6zWQnfU&feMS9WJmfeFvA)cAjk~+ESl4#y93xe8vRvmXdRD z&4$B0`!_E;%>t*6pItC5+1jKjNHA3qmkwW(U>K0IDd z2{vA<%EGg|?Ff?kS@k(3?(dSHty)&7$OY0Lsu~KKT?ruHH5AnY3$%bj`EN%IaS&p5 zrB@e~NzG4o(DLb1nl4y#juAZGO4a@f!CIr&aw)T1BkF@aLW z)!*fQ^k!GN8NI9gwUi1YMBL)+Ui%O?B_7|r&zz%{&?Ue+3{G+RR;7tbe4VdaAZj{t zTVTd>KLC2cRGrP`UHS`V-52F6$$azimckq!vE5Sf3RN7P5LBIILPN;BmOydKMsU`^ z)U8p;5mdz*^-q<8h`4bh8HJej^0NHWgE-k%GKKZ*t+Isr=!ld5)_t$su=$ay2++#J z%Ecf5*fztgTf?IhdMK;LSM7i*;TDnrXT&sSO&HNA%09jGz3))A_LIi5CIXUy?^xP1 znMyofPG1wu+xD{sExi>{SrIyCWqP4j9-_x@K@~qOD}#?w;>AHZe(Sf9Dpj}|Z4MiZ z?;-e`ly0K`w1T-}Rb%PL^d)q~9DLEn1Ul+G$+;GPon*jZ~s8;o_KX^cMp?~ZY7 zPr#hqf4^uf=U|Ygn?A3CB!Oz4Dfcex?X>dJPI=wiRYRjWm-r!7VUHbQ%cs{DSa7zP z6~4z$b@@{u@5RU%maP4x)ILgbfGn$P_Fns>OmE?p-cgimh^qs22=eaK_1-AR0?~i^ zh}JqFJZf5Z1bZR`aaC@iUm#dX^}J4i)#R@1m7k1dOLPpG%V(1AAv4$O@8>SY#Hp0Y z*Uv8lrxXwSU{pXXRDa2(ExIVZAfdU}w~=f2Og zuOAVsj zAc2qhB&*ArZU@YK;*T%3W&yrBia55v#+(N4oKx7abPF_xx8ojx=^UhXaRjw-8^*AJ zc0h8wdX&v+e8vmbil_yCX4?0EOJVadPb1#L)4IF|1nu;F^J>fsfUb|gfLcSAf>-@2 zj%xE8G;;QF+?eGXo!eeD8y(wswjorx`u?R>-?=WEn-6Pi4BMzcW9|n8+1JBFiijUH z5>c*6KzBP}5-c^ce>Tx8ShQ0g-sqwl0Nb~nZ9L#vl4JxBtN&h>wIFUnX2W~`&H(@J zZm5CZ(+yqz^ndm1d@ z>0zf7@^jzNAtc-U1{y3NHjg8~6#i`Y_#*O4vUw*)hX)kZb``(=&R3thy=ipowEeO} zzB$nR$M?_UpEek}bKcmKiE38h5vACclDNwBgeHH}*Cs!~R9kW1M5($Z0JA4Lmr=R~6R)H&9x972n)gp0JEe;6YV^ZJj3sFF zLIeybV+I4NS`}>h;cwv(E#Z*e0ye)_KN%)Zw{Er6m+McbTH@nJ1h5>MFq-D&Awy6Y z%;cHPj>VGb361?td?k_fW+h(vt5nARgi4eyM5(BJacR}AaeM9 z?XUwdLQVx89Q@dsf3uIN8usCR7DeyvO+Z}aq7MBnl|r>fhtRDVOjy8;6*nJd+DaAR zi#q;mY{4^GZ;{UclfroSwbX!^i8`5Z=v9O%z;J|7(c5bPcN0?zt?3q~32)!pt>sd{ z)2pR@NP5$O&{@wkhBO*Ee2G(UvXg>A#6FldhI6-b2xvzSTK@94NCamyiy}>vRE&vR$otYf1Dd&p9sxcP~pmL7aEj+dc zViEhCv#{+CfJLG!)eUO@6o&Ziyys^p+GLIk{O`eTO7bauHI4K5w$`x%?07CS&Tj}> z`D1TLehx)OGbuVIHfIMTMD>NFK}49>v%xrU_hTaij1eRBq;l2%@xHx)n07Ypkq0?o zkI5Fnb&k79g>>SUZIhnUzw)e3=p7GgM+*);P(2H_BMTKP4517BB2Ufeq7GhXCO0V< z6K32R@g;xX`dz;omtGYW-BaWi_8fO9;RFTe<60!`a7tRh+&NW9#V;|2+onUuga6R% z?~@Wo#oik)gwVm=^E27Y5M-D6WOAsMKfL*>Hss+4r@; z->nJ}Tb~+0!qvX7>yvik__NNOzh X^s6PH?oZC&Gi|e%t4g2eX^>aAPM?xrZRuk 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 BEF=H` literal 0 HcmV?d00001 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" },