From 7126b6120521f59f1c467f962a4159f37c852878 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 6 Feb 2018 19:06:31 -0600 Subject: [PATCH] [MIRROR] Return of ore stacking, various changes to lavaland bombs to facilitate reduced lag (#5327) * Return of ore stacking, various changes to lavaland bombs to facilitate reduced lag * really? Like, a dozen fucking map conflicts. this map was fucked entirely --- .../LavaRuins/lavaland_surface_greed.dmm | 2 +- _maps/RandomRuins/SpaceRuins/TheDerelict.dmm | 12 +- .../SpaceRuins/crashedclownship.dmm | 22 +-- _maps/RandomRuins/SpaceRuins/oldstation.dmm | 6 +- _maps/RandomRuins/SpaceRuins/onehalf.dmm | 4 +- _maps/RandomZLevels/moonoutpost19.dmm | 10 +- _maps/RandomZLevels/snowdin.dmm | 6 +- _maps/RandomZLevels/spacebattle.dmm | 10 +- _maps/map_files/BoxStation/BoxStation.dmm | 6 +- _maps/map_files/MetaStation/MetaStation.dmm | 14 +- _maps/map_files/OmegaStation/OmegaStation.dmm | 12 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 2 +- code/__DEFINES/maps.dm | 2 +- code/datums/components/material_container.dm | 17 +- code/game/gamemodes/meteor/meteors.dm | 10 +- code/game/machinery/autolathe.dm | 2 +- code/game/machinery/gulag_teleporter.dm | 4 +- code/game/mecha/mech_fabricator.dm | 2 +- code/game/mecha/mecha_construction_paths.dm | 7 +- code/game/mecha/working/ripley.dm | 8 +- .../circuitboards/machine_circuitboards.dm | 18 +- code/game/objects/items/stacks/bscrystal.dm | 26 +-- .../objects/items/stacks/sheets/mineral.dm | 7 +- code/game/objects/items/storage/bags.dm | 55 ++++++- code/game/objects/items/storage/belt.dm | 2 +- code/game/objects/items/teleprod.dm | 5 +- code/game/objects/items/trash.dm | 2 +- .../game/turfs/simulated/floor/fancy_floor.dm | 11 +- .../turfs/simulated/floor/plating/asteroid.dm | 8 +- code/game/turfs/simulated/minerals.dm | 36 ++-- .../clockcult/clock_items/clock_components.dm | 2 +- code/modules/antagonists/swarmer/swarmer.dm | 2 +- .../mission_code/stationCollision.dm | 4 +- code/modules/cargo/exports/materials.dm | 10 +- code/modules/crafting/recipes.dm | 2 +- .../recipes/tablecraft/recipes_soup.dm | 2 +- code/modules/mining/abandoned_crates.dm | 8 +- code/modules/mining/machine_processing.dm | 4 +- code/modules/mining/machine_redemption.dm | 8 +- code/modules/mining/machine_unloading.dm | 2 +- code/modules/mining/minebot.dm | 20 +-- code/modules/mining/ores_coins.dm | 154 +++++++++--------- code/modules/mining/satchel_ore_boxdm.dm | 22 +-- .../carbon/human/species_types/golems.dm | 24 +-- .../hostile/megafauna/colossus.dm | 4 +- .../simple_animal/hostile/megafauna/dragon.dm | 6 +- .../hostile/mining_mobs/basilisk.dm | 8 +- .../hostile/mining_mobs/goldgrub.dm | 28 ++-- .../projectiles/guns/energy/special.dm | 5 +- .../chemistry/machinery/reagentgrinder.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 +- .../chemistry/recipes/slime_extracts.dm | 2 +- code/modules/research/circuitprinter.dm | 2 +- .../research/designs/bluespace_designs.dm | 2 +- code/modules/research/protolathe.dm | 4 +- code/modules/research/rdmachines.dm | 2 +- 56 files changed, 348 insertions(+), 311 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm index 1422cde1a4..df450b9803 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm @@ -77,7 +77,7 @@ /area/ruin/powered/greed) "p" = ( /obj/structure/table/wood/poker, -/obj/item/ore/gold, +/obj/item/stack/ore/gold, /turf/open/floor/engine/cult, /area/ruin/powered/greed) "q" = ( diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm index 16def0b934..857313a6b4 100644 --- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm @@ -690,9 +690,9 @@ /turf/open/floor/plasteel, /area/ruin/space/derelict/solar_control) "cn" = ( -/obj/item/ore/iron, -/obj/item/ore/iron, -/obj/item/ore/iron, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, /turf/template_noop, /area/template_noop) "co" = ( @@ -736,7 +736,7 @@ }, /area/ruin/space/derelict/gravity_generator) "cv" = ( -/obj/item/ore/slag, +/obj/item/stack/ore/slag, /turf/open/floor/plasteel/airless{ icon_state = "damaged4" }, @@ -807,7 +807,7 @@ /turf/open/floor/plasteel/airless, /area/ruin/space/derelict/gravity_generator) "cI" = ( -/obj/item/ore/slag, +/obj/item/stack/ore/slag, /turf/template_noop, /area/template_noop) "cJ" = ( @@ -1897,7 +1897,7 @@ /turf/open/floor/plasteel/airless, /area/ruin/space/derelict/bridge/access) "gh" = ( -/obj/item/ore/slag, +/obj/item/stack/ore/slag, /turf/open/floor/plating/airless, /area/ruin/space/derelict/singularity_engine) "gi" = ( diff --git a/_maps/RandomRuins/SpaceRuins/crashedclownship.dmm b/_maps/RandomRuins/SpaceRuins/crashedclownship.dmm index 3eb74e5dfb..6c5c25488c 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedclownship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedclownship.dmm @@ -27,11 +27,11 @@ /area/ruin/unpowered) "i" = ( /obj/structure/closet/crate, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, /turf/open/floor/mineral/bananium/airless, /area/ruin/unpowered) "j" = ( @@ -39,7 +39,7 @@ icon_state = "crateopen"; opened = 1 }, -/obj/item/ore/bananium, +/obj/item/stack/ore/bananium, /turf/open/floor/mineral/bananium/airless, /area/ruin/unpowered) "k" = ( @@ -84,7 +84,7 @@ /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered) "p" = ( -/obj/item/ore/bananium, +/obj/item/stack/ore/bananium, /turf/open/floor/mineral/bananium/airless, /area/ruin/unpowered) "q" = ( @@ -148,10 +148,10 @@ /area/ruin/unpowered) "y" = ( /obj/structure/closet/crate, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, /turf/open/floor/mineral/bananium/airless, /area/ruin/unpowered) "z" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 75252da7b5..2d3b85d7f1 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -43,9 +43,9 @@ /obj/item/stack/sheet/mineral/gold{ amount = 15 }, -/obj/item/ore/bluespace_crystal, -/obj/item/ore/bluespace_crystal, -/obj/item/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/ancientstation/hivebot) "ak" = ( diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 24a6c319ee..b90f2e6780 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -188,7 +188,7 @@ /area/ruin/space/has_grav/onehalf/drone_bay) "aF" = ( /obj/structure/disposalpipe/trunk, -/obj/item/ore/diamond, +/obj/item/stack/ore/diamond, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/onehalf/drone_bay) "aG" = ( @@ -1100,7 +1100,7 @@ /area/ruin/space/has_grav/onehalf/bridge) "cZ" = ( /obj/structure/table/reinforced, -/obj/item/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, /obj/item/coin/plasma, /turf/open/floor/plasteel, /area/ruin/space/has_grav/onehalf/bridge) diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 7ab1cfa1b6..9250564dfc 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -273,7 +273,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "aS" = ( -/obj/item/ore/iron{ +/obj/item/stack/ore/iron{ pixel_x = 7; pixel_y = -6 }, @@ -1656,8 +1656,8 @@ }, /area/awaymission/moonoutpost19/syndicate) "dv" = ( -/obj/item/ore/iron, -/obj/item/ore/iron{ +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron{ pixel_x = -7; pixel_y = -4 }, @@ -1708,7 +1708,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "dz" = ( -/obj/item/ore/iron{ +/obj/item/stack/ore/iron{ pixel_x = -3; pixel_y = 9 }, @@ -1854,7 +1854,7 @@ }, /area/awaymission/moonoutpost19/main) "dN" = ( -/obj/item/ore/iron{ +/obj/item/stack/ore/iron{ pixel_x = -7; pixel_y = -4 }, diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 1eea3be802..8d9f9b6b7a 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -11312,7 +11312,7 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/snowdin/cave) "Ci" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /turf/open/floor/plating/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) "Cj" = ( @@ -12354,7 +12354,7 @@ /turf/closed/wall/mineral/plastitanium, /area/awaymission/snowdin/cave) "EU" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /turf/closed/mineral/iron/ice, /area/awaymission/snowdin/cave/cavern) "EV" = ( @@ -80045,4 +80045,4 @@ ad ad ad ad -"} +"} \ No newline at end of file diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index 4dff027d92..f5a2565677 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -1735,11 +1735,11 @@ /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) "gT" = ( -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, -/obj/item/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, +/obj/item/stack/ore/bananium, /obj/structure/closet/crate, /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 5d67213046..6a487f9a08 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -34234,7 +34234,7 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bHz" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -35474,8 +35474,8 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bKk" = ( -/obj/item/ore/silver, -/obj/item/ore/silver, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/silver, /obj/effect/turf_decal/stripes/line{ dir = 10 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 1109d24d7c..6c8b27b277 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -11785,7 +11785,7 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "azj" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -13140,8 +13140,8 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "aBS" = ( -/obj/item/ore/silver, -/obj/item/ore/silver, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/silver, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -13215,7 +13215,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/item/ore/glass, +/obj/item/stack/ore/glass, /turf/open/floor/plasteel/floorgrime, /area/quartermaster/warehouse) "aCc" = ( @@ -17462,8 +17462,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/item/ore/glass, -/obj/item/ore/iron, +/obj/item/stack/ore/glass, +/obj/item/stack/ore/iron, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -75666,7 +75666,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/item/ore/slag, +/obj/item/stack/ore/slag, /turf/open/floor/plating, /area/maintenance/aft) "diS" = ( diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 340afb89dc..0108231197 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -462,7 +462,7 @@ /turf/open/floor/plating/asteroid, /area/asteroid/nearstation) "aaW" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /turf/open/floor/plating/asteroid, /area/asteroid/nearstation) "aaX" = ( @@ -927,7 +927,7 @@ /turf/open/space, /area/asteroid/nearstation) "abS" = ( -/obj/item/ore/glass, +/obj/item/stack/ore/glass, /turf/open/floor/plating/astplate, /area/asteroid/nearstation) "abT" = ( @@ -2887,7 +2887,7 @@ /turf/open/floor/plating, /area/asteroid/nearstation) "afM" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate, /area/asteroid/nearstation) @@ -3289,8 +3289,8 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "agE" = ( -/obj/item/ore/silver, -/obj/item/ore/iron, +/obj/item/stack/ore/silver, +/obj/item/stack/ore/iron, /turf/open/floor/plating/astplate, /area/asteroid/nearstation) "agF" = ( @@ -5052,7 +5052,7 @@ /turf/open/floor/plating/airless, /area/shuttle/supply) "ajQ" = ( -/obj/item/ore/iron, +/obj/item/stack/ore/iron, /turf/open/floor/plating/astplate, /area/asteroid/nearstation) "ajR" = ( diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index affc670467..0fa9ce1d3b 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -7526,7 +7526,7 @@ /obj/item/ammo_box/a357, /obj/item/tank/internals/plasma/full, /obj/item/disk/nuclear/fake, -/obj/item/ore/diamond, +/obj/item/stack/ore/diamond, /obj/item/gun/energy/disabler, /turf/open/floor/plasteel/vault{ dir = 4 diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 5ab7e793ae..d3835631ff 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -67,7 +67,7 @@ Last space-z level = empty DECLARE_LEVEL("Main Station", CROSSLINKED, list(ZTRAIT_STATION = TRUE)),\ DECLARE_LEVEL("Empty Area 1", CROSSLINKED, list(ZTRAIT_SPACE_RUINS = TRUE)),\ DECLARE_LEVEL("Empty Area 2", CROSSLINKED, list(ZTRAIT_SPACE_RUINS = TRUE)),\ - DECLARE_LEVEL("Lavaland", UNAFFECTED, list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 3)),\ + DECLARE_LEVEL("Lavaland", UNAFFECTED, list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 2)),\ DECLARE_LEVEL("Reebe", UNAFFECTED, list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)),\ ) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index e91aa3a89e..548cdb8f97 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -72,10 +72,10 @@ /datum/component/material_container/proc/user_insert(obj/item/I, mob/living/user) set waitfor = FALSE var/requested_amount - var/Itype = I.type - if(ispath(Itype, /obj/item/stack) && precise_insertion) + if(istype(I, /obj/item/stack) && precise_insertion) var/atom/current_parent = parent - requested_amount = input(user, "How much do you want to insert?", "Inserting sheets") as num|null + var/obj/item/stack/S = I + requested_amount = input(user, "How much do you want to insert?", "Inserting [S.singular_name]s") as num|null if(isnull(requested_amount) || (requested_amount <= 0)) return if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || !user.canUseTopic(current_parent) || !user.is_holding(I) || !user.Adjacent(current_parent)) @@ -86,14 +86,15 @@ var/inserted = insert_item(I, stack_amt = requested_amount) if(inserted) if(istype(I, /obj/item/stack)) - to_chat(user, "You insert [inserted] sheet[inserted>1 ? "s" : ""] into [parent].") + var/obj/item/stack/S = I + to_chat(user, "You insert [inserted] [S.singular_name][inserted>1 ? "s" : ""] into [parent].") if(!QDELETED(I)) user.put_in_active_hand(I) else to_chat(user, "You insert a material total of [inserted] into [parent].") qdel(I) if(after_insert) - after_insert.Invoke(Itype, last_inserted_id, inserted) + after_insert.Invoke(I.type, last_inserted_id, inserted) else user.put_in_active_hand(I) @@ -114,7 +115,7 @@ return (total_amount - total_amount_saved) return FALSE -/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt) +/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt, multiplier = 1) if(isnull(amt)) amt = S.amount @@ -132,7 +133,7 @@ if(!amt) return FALSE - last_inserted_id = insert_materials(S,amt) + last_inserted_id = insert_materials(S,amt * multiplier) S.use(amt) return amt @@ -140,7 +141,7 @@ if(!I) return FALSE if(istype(I, /obj/item/stack)) - return insert_stack(I, stack_amt) + return insert_stack(I, stack_amt, multiplier) var/material_amount = get_item_material_amount(I) if(!material_amount || !has_space(material_amount)) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index d0c6cde8b9..8d83c646c2 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event var/threat = 0 // used for determining which meteors are most interesting var/lifetime = DEFAULT_METEOR_LIFETIME var/timerid = null - var/list/meteordrop = list(/obj/item/ore/iron) + var/list/meteordrop = list(/obj/item/stack/ore/iron) var/dropamt = 2 /obj/effect/meteor/Move() @@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event hits = 1 hitpwr = 3 meteorsound = 'sound/weapons/gunshot_smg.ogg' - meteordrop = list(/obj/item/ore/glass) + meteordrop = list(/obj/item/stack/ore/glass) threat = 1 //Medium-sized @@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event hits = 5 heavy = 1 meteorsound = 'sound/effects/bamf.ogg' - meteordrop = list(/obj/item/ore/plasma) + meteordrop = list(/obj/item/stack/ore/plasma) threat = 20 /obj/effect/meteor/flaming/meteor_effect() @@ -262,7 +262,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event name = "glowing meteor" icon_state = "glowing" heavy = 1 - meteordrop = list(/obj/item/ore/uranium) + meteordrop = list(/obj/item/stack/ore/uranium) threat = 15 @@ -332,7 +332,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event hitpwr = 1 heavy = 1 meteorsound = 'sound/effects/bamf.ogg' - meteordrop = list(/obj/item/ore/plasma) + meteordrop = list(/obj/item/stack/ore/plasma) threat = 50 /obj/effect/meteor/tunguska/Move() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index c425bbf8f4..71158aa34c 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -124,7 +124,7 @@ return ..() /obj/machinery/autolathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) - if(ispath(type_inserted, /obj/item/ore/bluespace_crystal)) + if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal)) use_power(MINERAL_MATERIAL_AMOUNT / 10) else switch(id_inserted) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 380760963d..65773aa432 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -165,10 +165,10 @@ The console is located at computer/gulag_teleporter.dm name = "labor camp teleporter (Machine Board)" build_path = /obj/machinery/gulag_teleporter req_components = list( - /obj/item/ore/bluespace_crystal = 2, + /obj/item/stack/ore/bluespace_crystal = 2, /obj/item/stock_parts/scanning_module, /obj/item/stock_parts/manipulator) - def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) /* beacon that receives the teleported prisoner */ /obj/structure/gulag_beacon diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 021b05cb58..8a5044fdfa 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -37,7 +37,7 @@ /obj/machinery/mecha_part_fabricator/Initialize() var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + FALSE, list(/obj/item/stack, /obj/item/stack/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE stored_research = new return ..() diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index de50d6f86f..fe01877cfd 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -28,6 +28,9 @@ else to_chat(user, ("There's not enough cable to finish the task!")) return FALSE + else if(istype(used_atom, /obj/item/stack/ore/bluespace_crystal)) + var/obj/item/stack/ore/bluespace_crystal/BSC = used_atom + BSC.use(1) else if(istype(used_atom, /obj/item/stack)) var/obj/item/stack/S = used_atom if(S.get_amount() < 5) @@ -1320,7 +1323,7 @@ "backkey"=/obj/item/crowbar, "desc"="The bluespace crystal is installed."), //12 - list("key"=/obj/item/ore/bluespace_crystal, + list("key"=/obj/item/stack/ore/bluespace_crystal, "backkey"=/obj/item/screwdriver, "desc"="Super capacitor is secured."), //13 @@ -1514,7 +1517,7 @@ holder.icon_state = "phazon16" else user.visible_message("[user] removes the bluespace crystal from the [holder].", "You remove the bluespace crystal from the [holder].") - new /obj/item/ore/bluespace_crystal(get_turf(holder)) + new /obj/item/stack/ore/bluespace_crystal(get_turf(holder)) holder.icon_state = "phazon14" if(11) if(diff==FORWARD) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 714e24696a..eaa09ff9b7 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -26,7 +26,7 @@ if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment) var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo if(ore_box) - for(var/obj/item/ore/ore in range(1, src)) + for(var/obj/item/stack/ore/ore in range(1, src)) if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it! ore.forceMove(ore_box) @@ -128,10 +128,10 @@ if(href_list["drop_from_cargo"]) var/obj/O = locate(href_list["drop_from_cargo"]) if(O && O in src.cargo) - src.occupant_message("You unload [O].") + occupant_message("You unload [O].") O.forceMove(drop_location()) - src.cargo -= O - src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") + cargo -= O + log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") return diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 1228cf2011..6c87257720 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -58,9 +58,9 @@ name = "Bluespace Launchpad (Machine Board)" build_path = /obj/machinery/launchpad req_components = list( - /obj/item/ore/bluespace_crystal = 1, + /obj/item/stack/ore/bluespace_crystal = 1, /obj/item/stock_parts/manipulator = 1) - def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) /obj/item/circuitboard/machine/limbgrower name = "Limb Grower (Machine Board)" @@ -74,11 +74,11 @@ name = "Quantum Pad (Machine Board)" build_path = /obj/machinery/quantumpad req_components = list( - /obj/item/ore/bluespace_crystal = 1, + /obj/item/stack/ore/bluespace_crystal = 1, /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/manipulator = 1, /obj/item/stack/cable_coil = 1) - def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) /obj/item/circuitboard/machine/recharger name = "Weapon Recharger (Machine Board)" @@ -175,18 +175,18 @@ name = "Teleporter Hub (Machine Board)" build_path = /obj/machinery/teleport/hub req_components = list( - /obj/item/ore/bluespace_crystal = 3, + /obj/item/stack/ore/bluespace_crystal = 3, /obj/item/stock_parts/matter_bin = 1) - def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) /obj/item/circuitboard/machine/teleporter_station name = "Teleporter Station (Machine Board)" build_path = /obj/machinery/teleport/station req_components = list( - /obj/item/ore/bluespace_crystal = 2, + /obj/item/stack/ore/bluespace_crystal = 2, /obj/item/stock_parts/capacitor = 2, /obj/item/stack/sheet/glass = 1) - def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) /obj/item/circuitboard/machine/vendor name = "Booze-O-Mat Vendor (Machine Board)" @@ -674,7 +674,7 @@ name = "Bluespace Artillery Fusor (Machine Board)" build_path = /obj/machinery/bsa/middle req_components = list( - /obj/item/ore/bluespace_crystal = 20, + /obj/item/stack/ore/bluespace_crystal = 20, /obj/item/stack/cable_coil = 2) /obj/item/circuitboard/machine/bsa/front diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index b7df34ca08..0afa4945d2 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -1,5 +1,5 @@ //Bluespace crystals, used in telescience and when crushed it will blink you to a random turf. -/obj/item/ore/bluespace_crystal +/obj/item/stack/ore/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' @@ -11,38 +11,38 @@ refined_type = /obj/item/stack/sheet/bluespace_crystal grind_results = list("bluespace" = 20) -/obj/item/ore/bluespace_crystal/refined +/obj/item/stack/ore/bluespace_crystal/refined name = "refined bluespace crystal" points = 0 refined_type = null -/obj/item/ore/bluespace_crystal/New() - ..() +/obj/item/stack/ore/bluespace_crystal/Initialize() + . = ..() pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) -/obj/item/ore/bluespace_crystal/attack_self(mob/user) +/obj/item/stack/ore/bluespace_crystal/attack_self(mob/user) user.visible_message("[user] crushes [src]!", "You crush [src]!") new /obj/effect/particle_effect/sparks(loc) - playsound(src.loc, "sparks", 50, 1) + playsound(loc, "sparks", 50, 1) blink_mob(user) - qdel(src) + use(1) -/obj/item/ore/bluespace_crystal/proc/blink_mob(mob/living/L) +/obj/item/stack/ore/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/stack/ore/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) new /obj/effect/particle_effect/sparks(T) - playsound(src.loc, "sparks", 50, 1) + playsound(loc, "sparks", 50, 1) if(isliving(hit_atom)) blink_mob(hit_atom) - qdel(src) + use(1) //Artifical bluespace crystal, doesn't give you much research. -/obj/item/ore/bluespace_crystal/artificial +/obj/item/stack/ore/bluespace_crystal/artificial name = "artificial bluespace crystal" desc = "An artificially made bluespace crystal, it looks delicate." materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT / 2) @@ -61,7 +61,7 @@ attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") novariants = TRUE grind_results = list("bluespace" = 20) - var/crystal_type = /obj/item/ore/bluespace_crystal/refined + var/crystal_type = /obj/item/stack/ore/bluespace_crystal/refined /obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening to_chat(user, "You cannot crush the polycrystal in-hand, try breaking one off.") diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 82f6073b85..f2151ad9f5 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 2, 4, 20), \ new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Breakdown into sand", /obj/item/ore/glass, 1, one_per_turf = 0, on_floor = 1) \ + new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = 0, on_floor = 1) \ )) /obj/item/stack/sheet/mineral/sandstone @@ -84,12 +84,13 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ w_class = WEIGHT_CLASS_TINY /obj/item/emptysandbag/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/ore/glass)) + if(istype(W, /obj/item/stack/ore/glass)) + var/obj/item/stack/ore/glass/G = W to_chat(user, "You fill the sandbag.") var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags qdel(src) user.put_in_hands(I) - qdel(W) + G.use(1) else return ..() diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 917ec898ad..a1c86f91d6 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -85,11 +85,56 @@ icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET w_class = WEIGHT_CLASS_NORMAL - storage_slots = 50 - max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class - max_w_class = WEIGHT_CLASS_NORMAL - can_hold = list(/obj/item/ore) + storage_slots = 8 + max_combined_w_class = 16 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class + max_w_class = WEIGHT_CLASS_HUGE + can_hold = list(/obj/item/stack/ore) var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it + var/datum/component/mobhook + +/obj/item/storage/bag/ore/equipped(mob/user) + . = ..() + if (mobhook && mobhook.parent != user) + QDEL_NULL(mobhook) + if (!mobhook) + mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED), CALLBACK(src, .proc/Pickup_ores, user)) + +/obj/item/storage/bag/ore/dropped() + . = ..() + if (mobhook) + QDEL_NULL(mobhook) + +/obj/item/storage/bag/ore/proc/Pickup_ores(mob/living/user) + var/show_message = FALSE + var/obj/structure/ore_box/box + var/turf/tile = user.loc + if (!isturf(tile)) + return + if (istype(user.pulling, /obj/structure/ore_box)) + box = user.pulling + for(var/A in tile) + if (!is_type_in_typecache(A, can_hold)) + continue + if (box) + user.transferItemToLoc(A, box) + show_message = TRUE + else if(can_be_inserted(A, TRUE, user)) + handle_item_insertion(A, TRUE, user) + show_message = TRUE + else + if(!spam_protection) + to_chat(user, "Your [name] is full and can't hold any more!") + spam_protection = TRUE + continue + if(show_message) + playsound(user, "rustle", 50, TRUE) + if (box) + user.visible_message("[user] offloads the ores beneath them into [box].", \ + "You offload the ores beneath you into your [box].") + else + user.visible_message("[user] scoops up the ores beneath them.", \ + "You scoop up the ores beneath you with your [name].") + spam_protection = FALSE /obj/item/storage/bag/ore/cyborg name = "cyborg mining satchel" @@ -228,7 +273,7 @@ var/col_count = min(7,storage_slots) -1 if (adjusted_contents > 7) row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.standard_orient_objs(row_num, col_count, numbered_contents) + standard_orient_objs(row_num, col_count, numbered_contents) return diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index e3703cf435..f3ac1d2ca1 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -230,7 +230,7 @@ /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, - /obj/item/ore, + /obj/item/stack/ore, /obj/item/reagent_containers/food/drinks, /obj/item/organ/regenerative_core, /obj/item/device/wormhole_jaunter, diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index b31797fb5c..6c9f6f176c 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -26,12 +26,13 @@ do_teleport(M, get_turf(M), 15) /obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod - if(istype(I, /obj/item/ore/bluespace_crystal)) + if(istype(I, /obj/item/stack/ore/bluespace_crystal)) if(!cell) + var/obj/item/stack/ore/bluespace_crystal/BSC = I var/obj/item/melee/baton/cattleprod/teleprod/S = new /obj/item/melee/baton/cattleprod/teleprod remove_item_from_storage(user) qdel(src) - qdel(I) + BSC.use(1) user.put_in_hands(S) to_chat(user, "You place the bluespace crystal firmly into the igniter.") else diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 7d371102c3..9e5edcacbb 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -80,5 +80,5 @@ /obj/item/trash/coal/burn() visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...") - new /obj/item/ore/diamond(loc) + new /obj/item/stack/ore/diamond(loc) qdel(src) \ No newline at end of file diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index b2a764f77a..723fd02bf0 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -72,7 +72,7 @@ floor_tile = /obj/item/stack/tile/grass broken_states = list("sand") flags_1 = NONE - var/ore_type = /obj/item/ore/glass + var/ore_type = /obj/item/stack/ore/glass var/turfverb = "uproot" /turf/open/floor/grass/Initialize() @@ -81,9 +81,8 @@ /turf/open/floor/grass/attackby(obj/item/C, mob/user, params) if(istype(C, /obj/item/shovel) && params) - new ore_type(src) - new ore_type(src) //Make some sand if you shovel grass - user.visible_message("[user] digs up [src].", "You [src.turfverb] [src].") + new ore_type(src, 2) + user.visible_message("[user] digs up [src].", "You [turfverb] [src].") playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) make_plating() if(..()) @@ -109,7 +108,7 @@ name = "volcanic floor" icon = 'icons/turf/floors.dmi' icon_state = "basalt" - ore_type = /obj/item/ore/glass/basalt + ore_type = /obj/item/stack/ore/glass/basalt initial_gas_mix = LAVALAND_DEFAULT_ATMOS slowdown = 0 @@ -126,7 +125,7 @@ icon = 'icons/turf/floors.dmi' icon_state = "basalt" floor_tile = /obj/item/stack/tile/basalt - ore_type = /obj/item/ore/glass/basalt + ore_type = /obj/item/stack/ore/glass/basalt turfverb = "dig up" slowdown = 0 diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index d46d799783..6863274327 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -13,7 +13,7 @@ var/environment_type = "asteroid" var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal var/floor_variance = 20 //probability floor has a different icon state - archdrops = list(/obj/item/ore/glass = 5) + archdrops = list(/obj/item/stack/ore/glass = 5) attachment_holes = FALSE /turf/open/floor/plating/asteroid/Initialize() @@ -41,7 +41,7 @@ if(istype(W, /obj/item/storage/bag/ore)) var/obj/item/storage/bag/ore/S = W if(S.collection_mode == 1) - for(var/obj/item/ore/O in src.contents) + for(var/obj/item/stack/ore/O in contents) O.attackby(W,user) return @@ -77,7 +77,7 @@ icon_state = "basalt" icon_plating = "basalt" environment_type = "basalt" - archdrops = list(/obj/item/ore/glass/basalt = 5) + archdrops = list(/obj/item/stack/ore/glass/basalt = 5) floor_variance = 15 /turf/open/floor/plating/asteroid/basalt/lava //lava underneath @@ -213,7 +213,7 @@ C.produce_tunnel_from_data(rand(10, 15), dir) else SpawnFloor(tunnel) - else //if(!istype(tunnel, src.parent)) // We hit space/normal/wall, stop our tunnel. + else //if(!istype(tunnel, parent)) // We hit space/normal/wall, stop our tunnel. break // Chance to change our direction left or right. diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index d6af969fbb..8a473cc42a 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -71,11 +71,9 @@ return attack_hand(user) /turf/closed/mineral/proc/gets_drilled() - if (mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11)) - var/i - for(i in 1 to mineralAmt) - new mineralType(src) - SSblackbox.record_feedback("tally", "ore_mined", 1, mineralType) + if (mineralType && (mineralAmt > 0)) + new mineralType(src, mineralAmt) + SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) for(var/obj/effect/temp_visual/mining_overlay/M in src) qdel(M) var/flags = NONE @@ -108,7 +106,7 @@ else if(iscyborg(AM)) var/mob/living/silicon/robot/R = AM if(istype(R.module_active, /obj/item/pickaxe)) - src.attackby(R.module_active,R) + attackby(R.module_active,R) return else return @@ -121,12 +119,12 @@ switch(severity) if(3) if (prob(75)) - src.gets_drilled(null, 1) + gets_drilled(null, 1) if(2) if (prob(90)) - src.gets_drilled(null, 1) + gets_drilled(null, 1) if(1) - src.gets_drilled(null, 1) + gets_drilled(null, 1) return /turf/closed/mineral/Spread(turf/T) @@ -225,7 +223,7 @@ /turf/closed/mineral/iron - mineralType = /obj/item/ore/iron + mineralType = /obj/item/stack/ore/iron spreadChance = 20 spread = 1 scan_state = "rock_Iron" @@ -248,7 +246,7 @@ /turf/closed/mineral/uranium - mineralType = /obj/item/ore/uranium + mineralType = /obj/item/stack/ore/uranium spreadChance = 5 spread = 1 scan_state = "rock_Uranium" @@ -262,7 +260,7 @@ /turf/closed/mineral/diamond - mineralType = /obj/item/ore/diamond + mineralType = /obj/item/stack/ore/diamond spreadChance = 0 spread = 1 scan_state = "rock_Diamond" @@ -285,7 +283,7 @@ /turf/closed/mineral/gold - mineralType = /obj/item/ore/gold + mineralType = /obj/item/stack/ore/gold spreadChance = 5 spread = 1 scan_state = "rock_Gold" @@ -299,7 +297,7 @@ /turf/closed/mineral/silver - mineralType = /obj/item/ore/silver + mineralType = /obj/item/stack/ore/silver spreadChance = 5 spread = 1 scan_state = "rock_Silver" @@ -313,7 +311,7 @@ /turf/closed/mineral/titanium - mineralType = /obj/item/ore/titanium + mineralType = /obj/item/stack/ore/titanium spreadChance = 5 spread = 1 scan_state = "rock_Titanium" @@ -327,7 +325,7 @@ /turf/closed/mineral/plasma - mineralType = /obj/item/ore/plasma + mineralType = /obj/item/stack/ore/plasma spreadChance = 8 spread = 1 scan_state = "rock_Plasma" @@ -351,7 +349,7 @@ /turf/closed/mineral/bananium - mineralType = /obj/item/ore/bananium + mineralType = /obj/item/stack/ore/bananium mineralAmt = 3 spreadChance = 0 spread = 0 @@ -359,7 +357,7 @@ /turf/closed/mineral/bscrystal - mineralType = /obj/item/ore/bluespace_crystal + mineralType = /obj/item/stack/ore/bluespace_crystal mineralAmt = 1 spreadChance = 0 spread = 0 @@ -492,7 +490,7 @@ stage = GIBTONITE_STABLE if(det_time < 0) det_time = 0 - visible_message("The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!") + visible_message("The chain reaction was stopped! The gibtonite had [det_time] reactions left till the explosion!") /turf/closed/mineral/gibtonite/gets_drilled(mob/user, triggered_by_explosion = 0) if(stage == GIBTONITE_UNSTRUCK && mineralAmt >= 1) //Gibtonite deposit is activated diff --git a/code/modules/antagonists/clockcult/clock_items/clock_components.dm b/code/modules/antagonists/clockcult/clock_items/clock_components.dm index 5ff7b0f6f2..ebb688a0ab 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_components.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_components.dm @@ -28,7 +28,7 @@ to_chat(user, "[cultist_message]") if(user.mind && user.mind.isholy) to_chat(user, "The power of your faith melts away [src]!") - var/obj/item/ore/slag/wrath = new /obj/item/ore/slag + var/obj/item/stack/ore/slag/wrath = new /obj/item/stack/ore/slag qdel(src) user.put_in_active_hand(wrath) if(is_servant_of_ratvar(user) && prob(20)) diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm index 729a273c53..8d301c934a 100644 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ b/code/modules/antagonists/swarmer/swarmer.dm @@ -90,7 +90,7 @@ projectiletype = /obj/item/projectile/beam/disabler ranged_cooldown_time = 20 projectilesound = 'sound/weapons/taser2.ogg' - loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/ore/bluespace_crystal) + loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/stack/ore/bluespace_crystal) del_on_death = 1 deathmessage = "explodes with a sharp pop!" light_color = LIGHT_COLOR_CYAN diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 65ed8f95b7..3b865492ef 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -23,7 +23,7 @@ name = "Safecode hint spawner" /obj/effect/landmark/sc_bible_spawner/New() - var/obj/item/storage/book/bible/B = new /obj/item/storage/book/bible/booze(src.loc) + var/obj/item/storage/book/bible/B = new /obj/item/storage/book/bible/booze(loc) B.name = "The Holy book of the Geometer" B.deity_name = "Narsie" B.icon_state = "melted" @@ -131,7 +131,7 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") new /obj/item/device/soulstone(src) new /obj/item/clothing/suit/space/hardsuit/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/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index 543bee7c21..04117fc7a3 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -4,7 +4,7 @@ var/material_id = null export_types = list( /obj/item/stack/sheet/mineral, /obj/item/stack/tile/mineral, - /obj/item/ore, /obj/item/coin) + /obj/item/stack/ore, /obj/item/coin) // Yes, it's a base type containing export_types. // But it has no material_id, so any applies_to check will return false, and these types reduce amount of copypasta a lot @@ -22,8 +22,8 @@ if(istype(I, /obj/item/stack)) var/obj/item/stack/S = I amount *= S.amount - else if(istype(I, /obj/item/ore)) - amount *= 0.8 // Station's ore redemption equipment is really goddamn good. + if(istype(I, /obj/item/stack/ore)) + amount *= 0.8 // Station's ore redemption equipment is really goddamn good. return round(amount/MINERAL_MATERIAL_AMOUNT) @@ -84,11 +84,11 @@ material_id = MAT_METAL export_types = list( /obj/item/stack/sheet/metal, /obj/item/stack/tile/plasteel, - /obj/item/stack/rods, /obj/item/ore, /obj/item/coin) + /obj/item/stack/rods, /obj/item/stack/ore, /obj/item/coin) // Glass. Common building material. /datum/export/material/glass message = "cm3 of glass" material_id = MAT_GLASS - export_types = list(/obj/item/stack/sheet/glass, /obj/item/ore, + export_types = list(/obj/item/stack/sheet/glass, /obj/item/stack/ore, /obj/item/shard) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index c68e5c2722..fa63da1ef1 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -80,7 +80,7 @@ reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/stack/rods = 1, /obj/item/device/assembly/igniter = 1, - /obj/item/ore/bluespace_crystal = 1) + /obj/item/stack/ore/bluespace_crystal = 1) time = 40 category = CAT_WEAPONRY subcategory = CAT_WEAPON diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm index 3207938ff1..267f5f8427 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm @@ -140,7 +140,7 @@ /datum/reagent/water = 10, /obj/item/reagent_containers/glass/bowl = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, - /obj/item/ore/bananium = 1 + /obj/item/stack/ore/bananium = 1 ) result = /obj/item/reagent_containers/food/snacks/soup/clownstears subcategory = CAT_SOUP diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 5e7265f043..c20971fe9d 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -38,8 +38,7 @@ if(11 to 15) new /obj/item/reagent_containers/glass/beaker/bluespace(src) if(16 to 20) - for(var/i in 1 to 10) - new /obj/item/ore/diamond(src) + new /obj/item/stack/ore/diamond(src, 10) if(21 to 25) for(var/i in 1 to 5) new /obj/item/poster/random_contraband(src) @@ -86,8 +85,7 @@ var/newitem = pick(subtypesof(/obj/item/stock_parts) - /obj/item/stock_parts/subspace) new newitem(src) if(69 to 70) - for(var/i in 1 to 5) - new /obj/item/ore/bluespace_crystal(src) + new /obj/item/stack/ore/bluespace_crystal(src, 5) if(71 to 72) new /obj/item/pickaxe/drill(src) if(73 to 74) @@ -196,7 +194,7 @@ if(attempts == 1) to_chat(user, "* Anti-Tamper Bomb will activate on next failed access attempt.") else - to_chat(user, "* Anti-Tamper Bomb will activate after [src.attempts] failed access attempts.") + to_chat(user, "* Anti-Tamper Bomb will activate after [attempts] failed access attempts.") if(lastattempt != null) var/list/guess = list() var/list/answer = list() diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 52416787cd..b1587dd6ae 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -83,10 +83,10 @@ return ..() /obj/machinery/mineral/processing_unit/HasProximity(atom/movable/AM) - if(istype(AM, /obj/item/ore) && AM.loc == get_step(src, input_dir)) + if(istype(AM, /obj/item/stack/ore) && AM.loc == get_step(src, input_dir)) process_ore(AM) -/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/ore/O) +/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O) GET_COMPONENT(materials, /datum/component/material_container) var/material_amount = materials.get_item_material_amount(O) if(!materials.has_space(material_amount)) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index fe94d88168..16929f9b09 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -48,12 +48,12 @@ point_upgrade = point_upgrade_temp sheet_per_ore = sheet_per_ore_temp -/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/ore/O) +/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O) ore_buffer -= O if(O && O.refined_type) - points += O.points * point_upgrade + points += O.points * point_upgrade * O.amount GET_COMPONENT(materials, /datum/component/material_container) var/material_amount = materials.get_item_material_amount(O) @@ -61,7 +61,7 @@ if(!material_amount) qdel(O) //no materials, incinerate it - else if(!materials.has_space(material_amount * sheet_per_ore)) //if there is no space, eject it + else if(!materials.has_space(material_amount * sheet_per_ore * O.amount)) //if there is no space, eject it unload_mineral(O) else @@ -133,7 +133,7 @@ if(OB) input = OB - for(var/obj/item/ore/O in input) + for(var/obj/item/stack/ore/O in input) if(QDELETED(O)) continue ore_buffer |= O diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm index c22ba5d757..380509f415 100644 --- a/code/modules/mining/machine_unloading.dm +++ b/code/modules/mining/machine_unloading.dm @@ -16,7 +16,7 @@ if(T) var/limit for(var/obj/structure/ore_box/B in T) - for (var/obj/item/ore/O in B) + for (var/obj/item/stack/ore/O in B) B.contents -= O unload_mineral(O) limit++ diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 3c33441561..a74f2283a3 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -36,9 +36,9 @@ projectiletype = /obj/item/projectile/kinetic projectilesound = 'sound/weapons/gunshot4.ogg' speak_emote = list("states") - wanted_objects = list(/obj/item/ore/diamond, /obj/item/ore/gold, /obj/item/ore/silver, - /obj/item/ore/plasma, /obj/item/ore/uranium, /obj/item/ore/iron, - /obj/item/ore/bananium, /obj/item/ore/titanium) + wanted_objects = list(/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver, + /obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron, + /obj/item/stack/ore/bananium, /obj/item/stack/ore/titanium) healable = 0 var/mode = MINEDRONE_COLLECT var/light_on = 0 @@ -85,7 +85,7 @@ /mob/living/simple_animal/hostile/mining_drone/death() ..() visible_message("[src] is destroyed!") - new /obj/effect/decal/cleanable/robot_debris(src.loc) + new /obj/effect/decal/cleanable/robot_debris(loc) DropOre(0) qdel(src) return @@ -124,20 +124,14 @@ to_chat(src, "You are set to attack mode. You can now attack from range.") /mob/living/simple_animal/hostile/mining_drone/AttackingTarget() - if(istype(target, /obj/item/ore) && mode == MINEDRONE_COLLECT) + if(istype(target, /obj/item/stack/ore) && mode == MINEDRONE_COLLECT) CollectOre() return return ..() /mob/living/simple_animal/hostile/mining_drone/proc/CollectOre() - var/obj/item/ore/O - for(O in src.loc) + for(var/obj/item/stack/ore/O in range(1, src)) O.forceMove(src) - for(var/dir in GLOB.alldirs) - var/turf/T = get_step(src,dir) - for(O in T) - O.forceMove(src) - return /mob/living/simple_animal/hostile/mining_drone/proc/DropOre(message = 1) if(!contents.len) @@ -146,7 +140,7 @@ return if(message) to_chat(src, "You dump your stored ore.") - for(var/obj/item/ore/O in contents) + for(var/obj/item/stack/ore/O in contents) contents -= O O.forceMove(drop_location()) return diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 30be7c9689..163e590ea9 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -3,16 +3,43 @@ #define GIBTONITE_QUALITY_MEDIUM 2 #define GIBTONITE_QUALITY_LOW 1 +#define ORESTACK_OVERLAYS_MAX 10 + /**********************Mineral ores**************************/ -/obj/item/ore +/obj/item/stack/ore name = "rock" icon = 'icons/obj/mining.dmi' icon_state = "ore" + full_w_class = WEIGHT_CLASS_BULKY + singular_name = "ore chunk" var/points = 0 //How many points this ore gets you from the ore redemption machine var/refined_type = null //What this ore defaults to being refined into + novariants = FALSE // Ore stacks handle their icon updates themselves to keep the illusion that there's more going + var/list/stack_overlays -/obj/item/ore/attackby(obj/item/I, mob/user, params) +/obj/item/stack/ore/add(amount) + var/amount_added = 0 + while (amount_added < amount && LAZYLEN(stack_overlays) < ORESTACK_OVERLAYS_MAX) + var/mutable_appearance/newore = mutable_appearance(icon, icon_state) + newore.pixel_x = rand(-8,8) + newore.pixel_y = rand(-8,8) + LAZYADD(stack_overlays, newore) + amount_added++ + return ..() + +/obj/item/stack/ore/use(amount) + var/newamount = src.amount - amount + if (newamount <= ORESTACK_OVERLAYS_MAX) + if (LAZYLEN(stack_overlays)) + stack_overlays.len = newamount-1 + return ..() + +/obj/item/stack/ore/update_icon() + . = ..() + add_overlay(stack_overlays) + +/obj/item/stack/ore/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weldingtool)) var/obj/item/weldingtool/W = I if(W.remove_fuel(15) && refined_type) @@ -22,91 +49,40 @@ to_chat(user, "Not enough fuel to smelt [src].") ..() -/obj/item/ore/Crossed(atom/movable/AM) - set waitfor = FALSE - var/show_message = TRUE - for(var/obj/item/ore/O in loc) - if(O != src) - show_message = FALSE - break - var/obj/item/storage/bag/ore/OB - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - OB = locate(/obj/item/storage/bag/ore) in H.get_storage_slots() - if(!OB) - OB = locate(/obj/item/storage/bag/ore) in H.held_items - else if(iscyborg(AM)) - var/mob/living/silicon/robot/R = AM - OB = locate(/obj/item/storage/bag/ore) in R.held_items - if(OB) - var/obj/structure/ore_box/box - if(!OB.can_be_inserted(src, TRUE, AM)) - if(!OB.spam_protection) - to_chat(AM, "Your [OB.name] is full and can't hold any more ore!") - OB.spam_protection = TRUE - sleep(1) - OB.spam_protection = FALSE - else - OB.handle_item_insertion(src, TRUE, AM) - // Then, if the user is dragging an ore box, empty the satchel - // into the box. - var/mob/living/L = AM - if(istype(L.pulling, /obj/structure/ore_box)) - box = L.pulling - for(var/obj/item/ore/O in OB) - OB.remove_from_storage(src, box) - if(show_message) - playsound(L, "rustle", 50, TRUE) - if(box) - L.visible_message("[L] offloads the ores into [box].", \ - "You offload the ores beneath you into your [box.name].") - else - L.visible_message("[L] scoops up the ores beneath them.", \ - "You scoop up the ores beneath you with your [OB.name].") - return ..() - -/obj/item/ore/uranium +/obj/item/stack/ore/uranium name = "uranium ore" icon_state = "Uranium ore" + singular_name = "uranium ore chunk" points = 30 materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/uranium -/obj/item/ore/iron +/obj/item/stack/ore/iron name = "iron ore" icon_state = "Iron ore" + singular_name = "iron ore chunk" points = 1 materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/metal -/obj/item/ore/glass +/obj/item/stack/ore/glass name = "sand pile" icon_state = "Glass ore" + singular_name = "sand pile" points = 1 materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/glass w_class = WEIGHT_CLASS_TINY -/obj/item/ore/glass/attack_self(mob/living/user) - to_chat(user, "You use the sand to make sandstone.") - var/sandAmt = 1 - for(var/obj/item/ore/glass/G in user.loc) // The sand on the floor - sandAmt += 1 - qdel(G) - while(sandAmt > 0) - var/obj/item/stack/sheet/mineral/sandstone/SS = new /obj/item/stack/sheet/mineral/sandstone(user.loc) - if(sandAmt >= SS.max_amount) - SS.amount = SS.max_amount - else - SS.amount = sandAmt - for(var/obj/item/stack/sheet/mineral/sandstone/SA in user.loc) - if(SA != SS && SA.amount < SA.max_amount) - SA.attackby(SS, user) //we try to transfer all old unfinished stacks to the new stack we created. - sandAmt -= SS.max_amount - qdel(src) - return +GLOBAL_LIST_INIT(sand_recipes, list(\ + new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50)\ + )) -/obj/item/ore/glass/throw_impact(atom/hit_atom) +/obj/item/stack/ore/glass/Initialize(mapload, new_amount, merge = TRUE) + recipes = GLOB.sand_recipes + . = ..() + +/obj/item/stack/ore/glass/throw_impact(atom/hit_atom) if(..() || !ishuman(hit_atom)) return var/mob/living/carbon/human/C = hit_atom @@ -125,18 +101,20 @@ to_chat(C, "\The [src] gets into your eyes! The pain, it burns!") qdel(src) -/obj/item/ore/glass/basalt +/obj/item/stack/ore/glass/basalt name = "volcanic ash" icon_state = "volcanic_sand" + singular_name = "volcanic ash pile" -/obj/item/ore/plasma +/obj/item/stack/ore/plasma name = "plasma ore" icon_state = "Plasma ore" + singular_name = "plasma ore chunk" points = 15 materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/plasma -/obj/item/ore/plasma/attackby(obj/item/I, mob/user, params) +/obj/item/stack/ore/plasma/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weldingtool)) var/obj/item/weldingtool/W = I if(W.welding) @@ -145,45 +123,51 @@ ..() -/obj/item/ore/silver +/obj/item/stack/ore/silver name = "silver ore" icon_state = "Silver ore" + singular_name = "silver ore chunk" points = 16 materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/silver -/obj/item/ore/gold +/obj/item/stack/ore/gold name = "gold ore" icon_state = "Gold ore" + singular_name = "gold ore chunk" points = 18 materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/gold -/obj/item/ore/diamond +/obj/item/stack/ore/diamond name = "diamond ore" icon_state = "Diamond ore" + singular_name = "diamond ore chunk" points = 50 materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/diamond -/obj/item/ore/bananium +/obj/item/stack/ore/bananium name = "bananium ore" icon_state = "Bananium ore" + singular_name = "bananium ore chunk" points = 60 materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/bananium -/obj/item/ore/titanium +/obj/item/stack/ore/titanium name = "titanium ore" icon_state = "Titanium ore" + singular_name = "titanium ore chunk" points = 50 materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/titanium -/obj/item/ore/slag +/obj/item/stack/ore/slag name = "slag" desc = "Completely useless." icon_state = "slag" + singular_name = "slag chunk" /obj/item/twohanded/required/gibtonite name = "gibtonite ore" @@ -285,13 +269,20 @@ explosion(src,0,1,3,adminlog = notify_admins) qdel(src) -/obj/item/ore/Initialize() +/obj/item/stack/ore/Initialize() . = ..() pixel_x = rand(0,16)-8 pixel_y = rand(0,8)-8 -/obj/item/ore/ex_act() - return +/obj/item/stack/ore/ex_act(severity, target) + if (!severity || severity >= 2) + return + qdel(src) + +/obj/item/ore/stack/glass/ex_act(severity, target) + if (severity == EXPLODE_NONE) + return + qdel(src) /*****************************Coin********************************/ @@ -463,4 +454,7 @@ user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \ "You flip [src]. It lands on [coinflip].", \ "You hear the clattering of loose change.") - return TRUE//did the coin flip? useful for suicide_act \ No newline at end of file + return TRUE//did the coin flip? useful for suicide_act + + +#undef ORESTACK_OVERLAYS_MAX diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 8e58da8e05..6c62b5a365 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -10,11 +10,11 @@ pressure_resistance = 5*ONE_ATMOSPHERE /obj/structure/ore_box/attackby(obj/item/W, mob/user, params) - if (istype(W, /obj/item/ore)) + if (istype(W, /obj/item/stack/ore)) user.transferItemToLoc(W, src) else if (istype(W, /obj/item/storage)) var/obj/item/storage/S = W - for(var/obj/item/ore/O in S.contents) + 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 to_chat(user, "You empty the ore in [S] into \the [src].") else if(istype(W, /obj/item/crowbar)) @@ -41,18 +41,18 @@ /obj/structure/ore_box/proc/show_contents(mob/user) var/dat = text("The contents of the ore box reveal...
") - var/list/oretypes = list() - for(var/obj/item/ore/O in contents) - oretypes |= O.type - for(var/i in oretypes) - var/obj/item/ore/T = locate(i) in contents - dat += "[capitalize(T.name)]: [count_by_type(contents, T.type)]
" + var/list/assembled = list() + for(var/obj/item/stack/ore/O in src) + assembled[O.type] += O.amount + for(var/type in assembled) + var/obj/item/stack/ore/O = type + dat += "[initial(O.name)] - [assembled[type]]
" dat += text("

Empty box") user << browse(dat, "window=orebox") /obj/structure/ore_box/proc/dump_box_contents() var/drop = drop_location() - for(var/obj/item/ore/O in src) + for(var/obj/item/stack/ore/O in src) if(QDELETED(O)) continue if(QDELETED(src)) @@ -69,7 +69,7 @@ return usr.set_machine(src) - src.add_fingerprint(usr) + add_fingerprint(usr) if(href_list["removeall"]) dump_box_contents() to_chat(usr, "You open the release hatch on the box..") @@ -83,4 +83,4 @@ qdel(src) /obj/structure/ore_box/onTransitZ() - return \ No newline at end of file + return diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index aded7f89b1..2fd9812340 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -74,7 +74,7 @@ name = "Plasma Golem" id = "plasma golem" fixed_mut_color = "a3d" - meat = /obj/item/ore/plasma + meat = /obj/item/stack/ore/plasma //Can burn and takes damage from heat species_traits = list(SPECIES_INORGANIC,NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!" @@ -134,7 +134,7 @@ id = "diamond golem" fixed_mut_color = "0ff" armor = 70 //up from 55 - meat = /obj/item/ore/diamond + meat = /obj/item/stack/ore/diamond info_text = "As a Diamond Golem, you are more resistant than the average golem." prefix = "Diamond" special_names = list("Back") @@ -146,7 +146,7 @@ fixed_mut_color = "cc0" speedmod = 1 armor = 25 //down from 55 - meat = /obj/item/ore/gold + meat = /obj/item/stack/ore/gold info_text = "As a Gold Golem, you are faster but less resistant than the average golem." prefix = "Golden" @@ -156,7 +156,7 @@ id = "silver golem" fixed_mut_color = "ddd" punchstunthreshold = 9 //60% chance, from 40% - meat = /obj/item/ore/silver + meat = /obj/item/stack/ore/silver info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning." prefix = "Silver" special_names = list("Surfer", "Chariot", "Lining") @@ -171,7 +171,7 @@ punchdamagehigh = 21 punchstunthreshold = 18 //still 40% stun chance speedmod = 4 //pretty fucking slow - meat = /obj/item/ore/iron + meat = /obj/item/stack/ore/iron info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." attack_verb = "smash" attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard @@ -182,7 +182,7 @@ name = "Titanium Golem" id = "titanium golem" fixed_mut_color = "fff" - meat = /obj/item/ore/titanium + meat = /obj/item/stack/ore/titanium info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." burnmod = 0.9 prefix = "Titanium" @@ -200,7 +200,7 @@ name = "Plastitanium Golem" id = "plastitanium golem" fixed_mut_color = "888" - meat = /obj/item/ore/titanium + meat = /obj/item/stack/ore/titanium info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." burnmod = 0.8 prefix = "Plastitanium" @@ -291,7 +291,7 @@ name = "Uranium Golem" id = "uranium golem" fixed_mut_color = "7f0" - meat = /obj/item/ore/uranium + meat = /obj/item/stack/ore/uranium info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." var/last_event = 0 @@ -312,7 +312,7 @@ name = "Sand Golem" id = "sand golem" fixed_mut_color = "ffdc8f" - meat = /obj/item/ore/glass //this is sand + meat = /obj/item/stack/ore/glass //this is sand armor = 0 burnmod = 3 //melts easily brutemod = 0.25 @@ -325,7 +325,7 @@ for(var/obj/item/W in H) H.dropItemToGround(W) for(var/i=1, i <= rand(3,5), i++) - new /obj/item/ore/glass(get_turf(H)) + new /obj/item/stack/ore/glass(get_turf(H)) qdel(H) /datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) @@ -378,7 +378,7 @@ name = "Bluespace Golem" id = "bluespace golem" fixed_mut_color = "33f" - meat = /obj/item/ore/bluespace_crystal + meat = /obj/item/stack/ore/bluespace_crystal info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance." attack_verb = "bluespace punch" attack_sound = 'sound/effects/phasein.ogg' @@ -475,7 +475,7 @@ punchdamagelow = 0 punchdamagehigh = 1 punchstunthreshold = 2 //Harmless and can't stun - meat = /obj/item/ore/bananium + meat = /obj/item/stack/ore/bananium info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged." attack_verb = "honk" attack_sound = 'sound/items/airhorn2.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index f09a31415a..0842329483 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -48,7 +48,7 @@ Difficulty: Very Hard score_type = COLOSSUS_SCORE crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher) loot = list(/obj/structure/closet/crate/necropolis/colossus) - butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30) + butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30) deathmessage = "disintegrates, leaving a glowing core in its wake." death_sound = 'sound/magic/demon_dies.ogg' @@ -113,7 +113,7 @@ Difficulty: Very Hard /mob/living/simple_animal/hostile/megafauna/colossus/bullet_act(obj/item/projectile/P) if(!stat) - var/obj/effect/temp_visual/at_shield/AT = new /obj/effect/temp_visual/at_shield(src.loc, src) + var/obj/effect/temp_visual/at_shield/AT = new /obj/effect/temp_visual/at_shield(loc, src) var/random_x = rand(-32, 32) AT.pixel_x += random_x diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index c8e7c7e4f5..3efb3e2885 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -54,7 +54,7 @@ Difficulty: Medium pixel_x = -16 crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher) loot = list(/obj/structure/closet/crate/necropolis/dragon) - butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30) + butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30) var/swooping = NONE var/swoop_cooldown = 0 medal_type = MEDAL_PREFIX @@ -238,7 +238,7 @@ Difficulty: Medium swooping &= ~SWOOP_INVULNERABLE mouse_opacity = initial(mouse_opacity) icon_state = "dragon" - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1) + playsound(loc, 'sound/effects/meteorimpact.ogg', 200, 1) for(var/mob/living/L in orange(1, src)) if(L.stat) visible_message("[src] slams down on [L], crushing them!") @@ -383,7 +383,7 @@ Difficulty: Medium damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) loot = list() crusher_loot = list() - butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) + butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) /mob/living/simple_animal/hostile/megafauna/dragon/lesser/grant_achievement(medaltype,scoretype) return diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index bc4686fd42..faff533cff 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -31,8 +31,8 @@ idle_vision_range = 2 turns_per_move = 5 gold_core_spawnable = HOSTILE_SPAWN - loot = list(/obj/item/ore/diamond{layer = ABOVE_MOB_LAYER}, - /obj/item/ore/diamond{layer = ABOVE_MOB_LAYER}) + loot = list(/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER}, + /obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER}) /obj/item/projectile/temp/basilisk name = "freezing blast" @@ -79,7 +79,7 @@ robust_searching = 1 crusher_loot = /obj/item/crusher_trophy/watcher_wing loot = list() - butcher_results = list(/obj/item/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) + butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random/Initialize() . = ..() @@ -116,7 +116,7 @@ maxHealth = 170 health = 170 projectiletype = /obj/item/projectile/temp/basilisk/icewing - butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) //No sinew; the wings are too fragile to be usable + butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) //No sinew; the wings are too fragile to be usable crusher_loot = /obj/item/crusher_trophy/watcher_wing/ice_wing crusher_drop_mod = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm index 85329c76ec..0c59a576d9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm @@ -26,8 +26,8 @@ deathmessage = "spits up the contents of its stomach before dying!" status_flags = CANPUSH search_objects = 1 - wanted_objects = list(/obj/item/ore/diamond, /obj/item/ore/gold, /obj/item/ore/silver, - /obj/item/ore/uranium) + wanted_objects = list(/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver, + /obj/item/stack/ore/uranium) var/chase_time = 100 var/will_burrow = TRUE @@ -36,42 +36,44 @@ . = ..() var/i = rand(1,3) while(i) - loot += pick(/obj/item/ore/silver, /obj/item/ore/gold, /obj/item/ore/uranium, /obj/item/ore/diamond) + loot += pick(/obj/item/stack/ore/silver, /obj/item/stack/ore/gold, /obj/item/stack/ore/uranium, /obj/item/stack/ore/diamond) i-- /mob/living/simple_animal/hostile/asteroid/goldgrub/GiveTarget(new_target) target = new_target if(target != null) - if(istype(target, /obj/item/ore) && loot.len < 10) - visible_message("The [src.name] looks at [target.name] with hungry eyes.") + if(istype(target, /obj/item/stack/ore) && loot.len < 10) + visible_message("The [name] looks at [target.name] with hungry eyes.") else if(isliving(target)) Aggro() - visible_message("The [src.name] tries to flee from [target.name]!") + visible_message("The [name] tries to flee from [target.name]!") retreat_distance = 10 minimum_distance = 10 if(will_burrow) addtimer(CALLBACK(src, .proc/Burrow), chase_time) /mob/living/simple_animal/hostile/asteroid/goldgrub/AttackingTarget() - if(istype(target, /obj/item/ore)) + if(istype(target, /obj/item/stack/ore)) EatOre(target) return return ..() /mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(atom/targeted_ore) - for(var/obj/item/ore/O in targeted_ore.loc) - if(loot.len < 10) - loot += O.type - qdel(O) + for(var/obj/item/stack/ore/O in get_turf(targeted_ore)) + if(length(loot) < 10) + var/using = min(10 - length(loot), O.amount) + for(var/i in 1 to using) + loot += O.type + O.use(using) visible_message("The ore was swallowed whole!") /mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Burrow()//Begin the chase to kill the goldgrub in time if(!stat) - visible_message("The [src.name] buries into the ground, vanishing from sight!") + visible_message("The [name] buries into the ground, vanishing from sight!") qdel(src) /mob/living/simple_animal/hostile/asteroid/goldgrub/bullet_act(obj/item/projectile/P) - visible_message("The [P.name] was repelled by [src.name]'s girth!") + visible_message("The [P.name] was repelled by [name]'s girth!") return /mob/living/simple_animal/hostile/asteroid/goldgrub/adjustHealth(amount, updating_health = TRUE, forced = FALSE) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 1226172262..b79ed02d86 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -142,8 +142,9 @@ S.use(1) cell.give(1000) to_chat(user, "You insert [A] in [src], recharging it.") - else if(istype(A, /obj/item/ore/plasma)) - qdel(A) + else if(istype(A, /obj/item/stack/ore/plasma)) + var/obj/item/stack/ore/S = A + S.use(1) cell.give(500) to_chat(user, "You insert [A] in [src], recharging it.") else diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index ec447ce2e5..7d4e244063 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -168,7 +168,7 @@ var/datum/browser/popup = new(user, "reagentgrinder", "All-In-One Grinder") popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open(1) return diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 348848c447..9d5eda10b2 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1100,7 +1100,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/M) - for(var/obj/item/ore/O in orange(3, M)) + for(var/obj/item/stack/ore/O in orange(3, M)) step_towards(O, get_turf(M)) return ..() diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 11d41ea20f..6f87de4e8a 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -501,7 +501,7 @@ required_other = 1 /datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume) - var/obj/item/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom)) + var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom)) BC.visible_message("The [BC.name] appears out of thin air!") ..() diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 207b610a8c..a35c261120 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -31,7 +31,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/rnd/circuit_imprinter/Initialize() materials = AddComponent(/datum/component/material_container, list(MAT_GLASS, MAT_GOLD, MAT_DIAMOND, MAT_METAL, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + FALSE, list(/obj/item/stack, /obj/item/stack/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE create_reagents(0) RefreshParts() diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 0ec15ac037..f5170066e2 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -30,7 +30,7 @@ id = "bluespace_crystal" build_type = PROTOLATHE materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500) - build_path = /obj/item/ore/bluespace_crystal/artificial + build_path = /obj/item/stack/ore/bluespace_crystal/artificial category = list("Bluespace Designs") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 1dc32e6dde..12630cafbe 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -35,7 +35,7 @@ Note: Must be placed west/left of and R&D console to function. create_reagents(0) materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + FALSE, list(/obj/item/stack, /obj/item/stack/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE RefreshParts() return ..() @@ -129,6 +129,6 @@ Note: Must be placed west/left of and R&D console to function. message_admins("[ADMIN_LOOKUPFLW(usr)] has built [amount] of [path] at a protolathe") for(var/i in 1 to amount) var/obj/item/I = new path(get_turf(src)) - if(!istype(I, /obj/item/stack/sheet) && !istype(I, /obj/item/ore/bluespace_crystal)) + if(!istype(I, /obj/item/stack/sheet) && !istype(I, /obj/item/stack/ore/bluespace_crystal)) I.materials = matlist.Copy() SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]")) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 60b8a1d6da..707e3e1e46 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -108,7 +108,7 @@ /obj/machinery/rnd/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) var/stack_name - if(ispath(type_inserted, /obj/item/ore/bluespace_crystal)) + if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal)) stack_name = "bluespace" use_power(MINERAL_MATERIAL_AMOUNT / 10) else