From 252f7e2521de922e7c4f7e88d25c2a398931159d Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Tue, 13 May 2025 00:32:17 -0400 Subject: [PATCH] Adds the bridge capsule, a mining tool for spawning bridges. (#29173) * Adds the bridge capsule, a mining tool for spawning bridges. * add some info messages for failed bridges --- code/__DEFINES/misc_defines.dm | 5 ++ code/datums/ruins/bridges/bridges.dm | 62 +++++++++++++++----- code/game/turfs/simulated/floor/chasm.dm | 4 +- code/game/turfs/simulated/floor/lava.dm | 12 ++-- code/modules/mining/bridge_capsule.dm | 70 +++++++++++++++++++++++ code/modules/mining/machine_vending.dm | 1 + icons/obj/mining.dmi | Bin 10320 -> 9326 bytes paradise.dme | 1 + 8 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 code/modules/mining/bridge_capsule.dm diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index f344f422427..ba08edc8af7 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -745,3 +745,8 @@ do { \ //! The number of seconds between the start of the UNIX and BYOND epochs. #define BYOND_EPOCH_UNIX 946702800 + +#define BRIDGE_SPAWN_SUCCESS 0 +#define BRIDGE_SPAWN_TOO_WIDE 1 +#define BRIDGE_SPAWN_TOO_NARROW 2 +#define BRIDGE_SPAWN_BAD_TERRAIN 3 diff --git a/code/datums/ruins/bridges/bridges.dm b/code/datums/ruins/bridges/bridges.dm index f8e1b51df56..35155716682 100644 --- a/code/datums/ruins/bridges/bridges.dm +++ b/code/datums/ruins/bridges/bridges.dm @@ -29,7 +29,7 @@ /obj/effect/spawner/dynamic_bridge var/max_length = 8 var/min_length = 4 - var/bridge_theme = LONG_BRIDGE_THEME_CULT + var/bridge_theme var/list/forwards_backwards var/list/side_to_side var/turf/forward_goal @@ -37,20 +37,21 @@ /obj/effect/spawner/dynamic_bridge/Initialize(mapload) . = ..() - bridge_theme = pick( - LONG_BRIDGE_THEME_CULT, - LONG_BRIDGE_THEME_HIERO, - LONG_BRIDGE_THEME_CLOCKWORK, - LONG_BRIDGE_THEME_STONE, - LONG_BRIDGE_THEME_WOOD, - LONG_BRIDGE_THEME_CATWALK, - ) + if(!bridge_theme) + bridge_theme = pick( + LONG_BRIDGE_THEME_CULT, + LONG_BRIDGE_THEME_HIERO, + LONG_BRIDGE_THEME_CLOCKWORK, + LONG_BRIDGE_THEME_STONE, + LONG_BRIDGE_THEME_WOOD, + LONG_BRIDGE_THEME_CATWALK, + ) return INITIALIZE_HINT_LATELOAD /obj/effect/spawner/dynamic_bridge/LateInitialize() forwards_backwards = list(NORTH, SOUTH) side_to_side = list(EAST, WEST) - if(!attempt_bridge()) + if(attempt_bridge() != BRIDGE_SPAWN_SUCCESS) forward_goal = null backward_goal = null forwards_backwards = list(EAST, WEST) @@ -85,6 +86,16 @@ return TRUE +/obj/effect/spawner/dynamic_bridge/proc/bridgeable_turf(turf/T) + // Pre SSlatemapping, before we've replaced mapping turfs with their river theme + if(istype(T, /turf/simulated/floor/lava/mapping_lava)) + return TRUE + // Everything else + if(istype(T, /turf/simulated/floor/chasm)) + return TRUE + if(istype(T, /turf/simulated/floor/lava)) + return TRUE + /// Returns whether the passed in turf is a valid "passage". A valid passage is /// a lava tile that has lava on both sides of it. Invalid passage tiles do not /// look good as bridge walkways and defeat the purpose of there is floor right @@ -92,11 +103,11 @@ /obj/effect/spawner/dynamic_bridge/proc/valid_passage(turf/T) if(T.flags & LAVA_BRIDGE) return FALSE - if(!istype(T, /turf/simulated/floor/lava/mapping_lava)) + if(!bridgeable_turf(T)) return FALSE - if(!istype(get_step(T, side_to_side[1]), /turf/simulated/floor/lava/mapping_lava)) + if(!bridgeable_turf(get_step(T, side_to_side[1]))) return FALSE - if(!istype(get_step(T, side_to_side[2]), /turf/simulated/floor/lava/mapping_lava)) + if(!bridgeable_turf(get_step(T, side_to_side[2]))) return FALSE var/area/A = get_area(T) if(istype(A, /area/lavaland/surface/gulag_rock)) @@ -225,7 +236,7 @@ /// Make a tile safe for player passage, for use at the bridge entrance and exits /obj/effect/spawner/dynamic_bridge/proc/cleanup_edge(turf/T) - if(istype(T, /turf/simulated/floor/lava/mapping_lava)) + if(bridgeable_turf(T)) T.ChangeTurf(/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface) T.icon_state = "basalt" // hate @@ -260,6 +271,13 @@ count++ walk_dir = forwards_backwards[1] + if(bad_passage) + return BRIDGE_SPAWN_BAD_TERRAIN + if(count < min_length) + return BRIDGE_SPAWN_TOO_NARROW + if(count > max_length) + return BRIDGE_SPAWN_TOO_WIDE + if(!bad_passage && count >= min_length && forward_goal && backward_goal) for(var/turf/T in get_line(forward_goal, backward_goal)) make_walkway(T) @@ -278,7 +296,7 @@ get_step(get_step(backward_goal, side_to_side[2]), forwards_backwards[2]))) cleanup_edge(T) - return TRUE + return BRIDGE_SPAWN_SUCCESS /// Checks if we are going out of bounds. Returns TRUE if we are close (less than or equal to 2 turfs) to a border /obj/effect/spawner/dynamic_bridge/proc/out_of_bounds(direction, turf/current_turf) @@ -296,6 +314,20 @@ return current_turf.x <= 2 return TRUE +/obj/effect/spawner/dynamic_bridge/capsule + bridge_theme = LONG_BRIDGE_THEME_CATWALK + +/obj/effect/spawner/dynamic_bridge/capsule/Initialize(mapload, thrown_dir) + . = ..() + if(thrown_dir in list(EAST, WEST)) + forwards_backwards = list(EAST, WEST) + side_to_side = list(NORTH, SOUTH) + else + forwards_backwards = list(NORTH, SOUTH) + side_to_side = list(EAST, WEST) + + return INITIALIZE_HINT_NORMAL + /datum/map_template/ruin/lavaland/zlvl_bridge prefix = "_maps/map_files/RandomRuins/LavaRuins/zlvl_bridges/" ci_exclude = /datum/map_template/ruin/lavaland/zlvl_bridge diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index 2a41fb32514..1f34b58e429 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -146,9 +146,11 @@ if(!AM.simulated || is_type_in_typecache(AM, forbidden_types) || AM.throwing) return FALSE //Flies right over the chasm + if(HAS_TRAIT(AM, TRAIT_FLYING)) + return FALSE if(isliving(AM)) var/mob/living/M = AM - if(HAS_TRAIT(M, TRAIT_FLYING) || M.floating) + if(M.floating) return FALSE if(istype(M.buckled, /obj/tgvehicle/scooter/skateboard/hoverboard)) return FALSE diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index 9d8393db817..bb75c9f9147 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -76,7 +76,10 @@ var/thing_to_check = src if(AM) thing_to_check = list(AM) - for(var/thing in thing_to_check) + for(var/atom/thing in thing_to_check) + if(HAS_TRAIT(thing, TRAIT_FLYING)) + continue //YOU'RE FLYING OVER IT + if(isobj(thing)) var/obj/O = thing if(!O.simulated) @@ -97,8 +100,6 @@ else if(isliving(thing)) . = TRUE var/mob/living/L = thing - if(HAS_TRAIT(L, TRAIT_FLYING)) - continue //YOU'RE FLYING OVER IT var/buckle_check = L.buckling if(!buckle_check) buckle_check = L.buckled @@ -206,7 +207,10 @@ var/thing_to_check = src if(AM) thing_to_check = list(AM) - for(var/thing in thing_to_check) + for(var/atom/thing in thing_to_check) + if(HAS_TRAIT(thing, TRAIT_FLYING)) + continue //YOU'RE FLYING OVER IT + if(isobj(thing)) var/obj/O = thing if(!O.simulated) diff --git a/code/modules/mining/bridge_capsule.dm b/code/modules/mining/bridge_capsule.dm new file mode 100644 index 00000000000..454bc862b8d --- /dev/null +++ b/code/modules/mining/bridge_capsule.dm @@ -0,0 +1,70 @@ +/obj/item/bridge_capsule + name = "bluespace bridge capsule" + desc = "A bridge stored within a pocket of bluespace." + icon_state = "bridge_capsule" + icon = 'icons/obj/mining.dmi' + w_class = WEIGHT_CLASS_TINY + origin_tech = "engineering=3;bluespace=3" + new_attack_chain = TRUE + var/used = FALSE + var/thrown_dir + +/obj/item/bridge_capsule/examine(mob/user) + . = ..() + . += "To use, activate it in-hand and throw it between the middle of the two areas you are trying to bridge." + . += "For best results, ensure the land on both sides of the span are smooth." + +/obj/item/bridge_capsule/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, dodgeable) + . = ..() + if(used) + ADD_TRAIT(src, TRAIT_FLYING, "[UID()]") + thrown_dir = get_dir(thrower, target) + to_chat(thrower, "[src] hovers above the ground as it prepares to deploy...") + +/obj/item/bridge_capsule/activate_self(mob/user) + . = ..() + if(!used) + loc.visible_message("[src] begins to shake. Stand back!") + used = TRUE + addtimer(CALLBACK(src, PROC_REF(deploy)), 5 SECONDS) + +/obj/item/bridge_capsule/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + . = ..() + thrown_dir = throwingdatum.init_dir + +/obj/item/bridge_capsule/proc/deploy() + if(ismob(loc)) + to_chat(loc, "[src] stops shaking. Looks like it needs to be thrown to deploy.") + used = FALSE + return + + if(istype(loc, SSmapping.lavaland_theme?.primary_turf_type)) + loc.visible_message("[src] suddenly bursts!") + var/obj/effect/spawner/dynamic_bridge/capsule/spawner = new(loc, thrown_dir) + var/result = spawner.attempt_bridge() + var/fail_message = "[src] buzzes loudly and falls to the ground!" + switch(result) + if(BRIDGE_SPAWN_SUCCESS) + qdel(src) + if(BRIDGE_SPAWN_BAD_TERRAIN) + loc.visible_message("[fail_message] It looks like the terrain here is too uneven for a bridge.") + stop_flying() + if(BRIDGE_SPAWN_TOO_NARROW) + loc.visible_message("[fail_message] It looks like the span here is too narrow.") + stop_flying() + if(BRIDGE_SPAWN_TOO_WIDE) + loc.visible_message("[fail_message] It looks like the span here is too wide.") + stop_flying() + + qdel(spawner) + return + + stop_flying() + to_chat(loc, "[src] flutters to the ground, refusing to deploy. Maybe you can't do that here?") + +/obj/item/bridge_capsule/proc/stop_flying() + REMOVE_TRAIT(src, TRAIT_FLYING, "[UID()]") + // Easiest/fastest way to trigger chasms/lava underneath us to + // determine if something needs to happen when we lose our trait + if(isturf(loc)) + loc.process() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index f53b72938ab..1998a12f84b 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -59,6 +59,7 @@ EQUIPMENT("Mining Charge Detonator", /obj/item/detonator, 150), EQUIPMENT("Shelter Capsule", /obj/item/survivalcapsule, 400), EQUIPMENT("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), + EQUIPMENT("Bridge Capsule", /obj/item/bridge_capsule, 300), EQUIPMENT("Stabilizing Serum", /obj/item/hivelordstabilizer, 400), EQUIPMENT("Survival Medipen", /obj/item/reagent_containers/hypospray/autoinjector/survival, 500), ) diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index adf10d0a2d6cf920052c87d4285661f723da1d71..d869254834e08183a2ed22dd0da42d1726560a7f 100644 GIT binary patch literal 9326 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 KqvpP2?EeCT>F0g` diff --git a/paradise.dme b/paradise.dme index a4a18400f65..efdd4e56593 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2260,6 +2260,7 @@ #include "code\modules\maze_generation\loot_modules\_loot_module_base.dm" #include "code\modules\maze_generation\loot_modules\turf_painter.dm" #include "code\modules\mining\abandonedcrates.dm" +#include "code\modules\mining\bridge_capsule.dm" #include "code\modules\mining\fulton.dm" #include "code\modules\mining\machine_processing.dm" #include "code\modules\mining\machine_redemption.dm"