From 985fac79eb786937823510228212aa47624e0d82 Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Sat, 13 Sep 2025 01:17:39 -0400 Subject: [PATCH] Boulders can now be used on lava turfs in order to create temporary, walkable platforms (#92877) --- _maps/map_files/Mining/Lavaland.dmm | 62 ++++++++++++++---- code/__DEFINES/mining.dm | 8 +++ code/game/objects/structures/lattice.dm | 50 +++++++++++++- .../objects/structures/lavaland/gulag_vent.dm | 5 +- .../objects/structures/lavaland/ore_vent.dm | 9 +++ code/game/turfs/closed/minerals.dm | 3 +- code/game/turfs/open/lava.dm | 12 ++++ .../mining/boulder_processing/boulder.dm | 29 ++++++++ .../boulder_processing/boulder_types.dm | 3 +- icons/obj/ore.dmi | Bin 9564 -> 11084 bytes 10 files changed, 164 insertions(+), 17 deletions(-) diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 538b38ba037..8789106bd6a 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -1187,6 +1187,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) "gM" = ( @@ -3827,6 +3828,10 @@ /obj/item/crowbar/large/emergency, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"uo" = ( +/obj/structure/fluff/minepost, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "up" = ( /obj/structure/railing{ dir = 1 @@ -4292,6 +4297,16 @@ /obj/item/seeds/banana, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"wT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "wU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -4598,6 +4613,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) "yV" = ( @@ -5636,8 +5652,15 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) +"Gi" = ( +/obj/item/stack/cable_coil/cut, +/turf/open/misc/asteroid/basalt/lava_land_surface{ + icon_state = "basalt_dug" + }, +/area/lavaland/surface/outdoors) "Gl" = ( /obj/item/reagent_containers/cup/glass/colocup, /turf/open/misc/asteroid/basalt/lava_land_surface, @@ -7020,6 +7043,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/mine/laborcamp/production) +"NC" = ( +/obj/structure/gulag_vent, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "NE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7920,6 +7947,16 @@ }, /turf/open/floor/iron/dark/textured_large, /area/mine/laborcamp/security) +"SI" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "SL" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -9154,6 +9191,7 @@ /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) "ZN" = ( +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) "ZP" = ( @@ -19956,7 +19994,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -20212,9 +20250,9 @@ uU uU uU uU -uU -uU -uU +pU +NC +pU uU uU uU @@ -20470,7 +20508,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -21240,8 +21278,8 @@ uU uU uU uU -uU -uU +uo +pU uU uU uU @@ -21755,7 +21793,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -22269,7 +22307,7 @@ uU uU uU uU -pU +SI uU uU uU @@ -22525,7 +22563,7 @@ uU uU uU uU -pU +uo pU pU uU @@ -22783,7 +22821,7 @@ uU uU pU pU -pU +Gi pU pU uU @@ -23040,7 +23078,7 @@ pU pU pU tL -pU +wT pV pU pU diff --git a/code/__DEFINES/mining.dm b/code/__DEFINES/mining.dm index 7a122679dc1..8e7e7d25591 100644 --- a/code/__DEFINES/mining.dm +++ b/code/__DEFINES/mining.dm @@ -67,6 +67,14 @@ /// The amount of ore that is mined from a wall that is VENT_PROX_FAR tiles to a vent. #define ORE_WALL_FAR 1 +/// Lifetime of a boulder platform in seconds when spawned in lava/plasma. +#define PLATFORM_LIFE_DEFAULT 10 SECONDS + +#define PLATFORM_LIFE_GULAG 1 SECONDS +#define PLATFORM_LIFE_SMALL 20 SECONDS +#define PLATFORM_LIFE_MEDIUM 45 SECONDS +#define PLATFORM_LIFE_LARGE 90 SECONDS + /// The number of points a miner gets for discovering a vent, multiplied by BOULDER_SIZE when completing a wave defense minus the discovery bonus. #define MINER_POINT_MULTIPLIER 100 /// The multiplier that gets applied for automatically generated mining points. diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index a98b9ac8f9f..6b84fd10826 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -73,7 +73,8 @@ return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) /obj/structure/lattice/atom_deconstruct(disassembled = TRUE) - new build_material(get_turf(src), number_of_mats) + if(!isnull(build_material) && number_of_mats >= 1) + new build_material(get_turf(src), number_of_mats) /obj/structure/lattice/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(the_rcd.mode == RCD_TURF) @@ -189,3 +190,50 @@ turf_we_place_on.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) qdel(src) + +/obj/structure/lattice/catwalk/boulder + name = "boulder platform" + desc = "A boulder, floating on the molten hot deadly lava. More like a BOATlder." + icon = 'icons/obj/ore.dmi' + icon_state = "boulder_platform" + base_icon_state = "boulder_platform" + smoothing_flags = NONE + smoothing_groups = null + canSmoothWith = null + build_material = null + /// The type of particle to make before the platform collapses. + var/warning_particle = /particles/smoke/ash + +/obj/structure/lattice/catwalk/boulder/Initialize(mapload) + . = ..() + fast_emissive_blocker(src) + AddElement(/datum/element/elevation, pixel_shift = 8) + +/obj/structure/lattice/catwalk/boulder/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) + if(ismetaltile(attacking_item)) + balloon_alert(user, "too unstable!") + return FALSE + return ..() + +/obj/structure/lattice/catwalk/boulder/CanAllowThrough(atom/movable/mover, border_dir) + if(istype(mover, /obj/structure/ore_box)) + self_destruct() + return TRUE + . = ..() + +/obj/structure/lattice/catwalk/boulder/proc/pre_self_destruct() + if(istype(loc, /turf/open/lava/plasma)) + add_overlay("plasma_cracks") + else + add_overlay("lava_cracks") + animate(src, alpha = 0, time = 2 SECONDS, pixel_y = -16, easing = QUAD_EASING|EASE_IN) + addtimer(CALLBACK(src, PROC_REF(self_destruct)), 2 SECONDS) + +/** + * Handles platforms deleting themselves with a visual effect and message. + */ +/obj/structure/lattice/catwalk/boulder/proc/self_destruct() + visible_message(span_notice("\The [src] sinks and dissapears!")) + playsound(src, 'sound/effects/gas_hissing.ogg', 20) + remove_shared_particles(warning_particle) + deconstruct() diff --git a/code/game/objects/structures/lavaland/gulag_vent.dm b/code/game/objects/structures/lavaland/gulag_vent.dm index d6e30cf1fe3..e0298fd3cc5 100644 --- a/code/game/objects/structures/lavaland/gulag_vent.dm +++ b/code/game/objects/structures/lavaland/gulag_vent.dm @@ -44,7 +44,10 @@ var/stamina_damage_to_inflict = HAS_TRAIT(user, TRAIT_STRENGTH) ? 60 : 120 //Decreases the amount of stamina damage inflicted by half if you're STRONG living_user.mind?.adjust_experience(/datum/skill/athletics, 10) living_user.apply_status_effect(/datum/status_effect/exercised) - new spawned_boulder(get_turf(living_user)) + + var/obj/item/boulder/gulag_boulder = new spawned_boulder(get_turf(living_user)) + gulag_boulder.platform_lifespan = PLATFORM_LIFE_GULAG + living_user.visible_message(span_notice("[living_user] hauls a boulder out of [src].")) living_user.apply_damage(stamina_damage_to_inflict, STAMINA) playsound(src, 'sound/items/weapons/genhit.ogg', vol = 50, vary = TRUE) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index ac8ffc2861d..c6afbc362a1 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -423,6 +423,15 @@ new_rock.boulder_size = boulder_size new_rock.durability = rand(2, boulder_size) //randomize durability a bit for some flavor. new_rock.boulder_string = boulder_icon_state + + switch(boulder_size) + if(BOULDER_SIZE_SMALL) + new_rock.platform_lifespan = PLATFORM_LIFE_SMALL + if(BOULDER_SIZE_MEDIUM) + new_rock.platform_lifespan = PLATFORM_LIFE_MEDIUM + if(BOULDER_SIZE_LARGE) + new_rock.platform_lifespan = PLATFORM_LIFE_LARGE + new_rock.update_appearance(UPDATE_ICON_STATE) //start the cooldown & return the boulder diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 505371164bf..14cfeaf4219 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -215,7 +215,8 @@ new mineralType(src, mineralAmt) SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) if(spawned_boulder) - new spawned_boulder(src) + var/obj/item/boulder/wall_boulder = new spawned_boulder(src) + wall_boulder.platform_lifespan = PLATFORM_LIFE_GULAG if(ishuman(user)) var/mob/living/carbon/human/H = user if(exp_multiplier) diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 2f09fbe2e9f..8de10a7ea06 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -58,6 +58,7 @@ if(!smoothing_flags) update_appearance() RegisterSignal(src, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(on_atom_inited)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_LAVA_STOPPED), PROC_REF(drop_contents_into_lava)) /turf/open/lava/Destroy() checked_atoms = null @@ -348,6 +349,17 @@ return FALSE +/** + * Called when a lava stopper (Catwalks/boulder platforms) is removed and it's contents need to be subjected to the lava underneath. + */ +/turf/open/lava/proc/drop_contents_into_lava() + SIGNAL_HANDLER + balloon_alert_to_viewers("[pick("splash","pshhhh","hiss","blorble")]!") + playsound(src, 'sound/items/match_strike.ogg', 15, TRUE) + for(var/atom/movable/each_content as anything in contents) + on_atom_inited(src, each_content) + return TRUE + /turf/open/lava/can_cross_safely(atom/movable/crossing) return HAS_TRAIT(src, TRAIT_LAVA_STOPPED) || HAS_TRAIT(crossing, immunity_trait ) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) diff --git a/code/modules/mining/boulder_processing/boulder.dm b/code/modules/mining/boulder_processing/boulder.dm index 274b5d3816d..6ffddb8e5cd 100644 --- a/code/modules/mining/boulder_processing/boulder.dm +++ b/code/modules/mining/boulder_processing/boulder.dm @@ -1,4 +1,5 @@ +#define PLATFORM_WARNING_MODIFIER 5 SECONDS /** * The objects that ore vents produce, which is refined into minerals. @@ -25,6 +26,8 @@ var/boulder_size = BOULDER_SIZE_SMALL /// Used in inheriting the icon_state from our parent vent in update_icon. var/boulder_string = "boulder" + /// If the boulder is converted into a platform, how long will it last? Default is 10 seconds unless overwritten by a vent. + var/platform_lifespan = PLATFORM_LIFE_DEFAULT /obj/item/boulder/Initialize(mapload) . = ..() @@ -108,6 +111,30 @@ if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) manual_process(null, user, INATE_BOULDER_SPEED_MULTIPLIER) //A little hacky but it works around the speed of the blackboard task selection process for now. +/obj/item/boulder/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(istype(interacting_with, /turf/open/lava)) + if(!create_platform(interacting_with, user, interacting_with)) + return ITEM_INTERACT_BLOCKING + return ITEM_INTERACT_SUCCESS + +/obj/item/boulder/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, gentle, quickstart, throw_type_path) + . = ..() + if(istype(target, /turf/open/lava)) + if(!create_platform(target, thrower)) + return FALSE + +/obj/item/boulder/proc/create_platform(atom/interacting_with, mob/living/user) + if(locate(/obj/structure/lattice/catwalk/boulder, interacting_with)) + to_chat(user, span_warning("There is already a boulder platform here!")) + return FALSE + + var/obj/structure/lattice/catwalk/boulder/platform = new(interacting_with) + addtimer(CALLBACK(platform, TYPE_PROC_REF(/obj/structure/lattice/catwalk/boulder, pre_self_destruct)), platform_lifespan) + // See Lattice.dm for more info + visible_message(span_notice("\The [src] floats on \the [interacting_with], forming a temporary platform!")) + qdel(src) + return TRUE /** * This is called when a boulder is processed by a mob or tool, and reduces the durability of the boulder. * @param obj/item/weapon The weapon that is being used to process the boulder, that we pull toolspeed from. If null, we use the override_speed_multiplier instead. @@ -189,3 +216,5 @@ for(var/obj/item/content as anything in contents) content.forceMove(get_turf(src)) qdel(src) + +#undef PLATFORM_WARNING_MODIFIER diff --git a/code/modules/mining/boulder_processing/boulder_types.dm b/code/modules/mining/boulder_processing/boulder_types.dm index 6298bb98139..ec67648fe2a 100644 --- a/code/modules/mining/boulder_processing/boulder_types.dm +++ b/code/modules/mining/boulder_processing/boulder_types.dm @@ -69,10 +69,9 @@ /datum/material/titanium = 8, /datum/material/uranium = 3, ) - set_custom_materials(list(pick_weight(expanded_gulag_minerals) = SHEET_MATERIAL_AMOUNT)) -///lowgrade boulder, most commonly spawned +///lowgrade boulder, Exists as an admin spawn for testing /obj/item/boulder/shabby name = "shabby boulder" desc = "A bizarre, twisted boulder. Wait, wait no, it's just a rock." diff --git a/icons/obj/ore.dmi b/icons/obj/ore.dmi index 7cc3b8820577c88044de6c38f037d81053e7737c..5346161a9e7b975c8f6158ba4f01fb3b51156e4e 100644 GIT binary patch literal 11084 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 literal 9564 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