Files
Jacquerel 7a994fffba Pathfinder Module no longer pathfinds (#94261)
## About The Pull Request


![dreamseeker_9pYVx5xTE0](https://github.com/user-attachments/assets/86695b34-deb1-4307-83c8-ecd81b1b6b28)

Removes the "pathfinding through the halls" function of the MODsuit
pathfinder module in favour of having it "fly" to your location in the
same manner as cargo pods (by getting inside an invisible cargo pod).

If it's inside a locked crate or locker when this happens it will break
the door on the way out, so be careful where you leave it.

## Why It's Good For The Game

Mostly because nobody uses the pathfinder module.
Pathfinding through the corridors is _cool_ on a conceptual level but
it's not very practical, _especially_ because it means that it has a
good chance of not functioning at all if you are on a station with Z
levels.
This method means that it will always arrive in the same amount of time
(quite fast, but not fast enough that it will arrive before someone can
shoot you) regardless of where you are when you suddenly realise that
you need spaceproofing rather than drip.

Also Fikou asked me to do it.

## Changelog

🆑
balance: The Captain's MODSuit pathfinder module now flies it directly
to their location rather than physically traversing the halls of the
station.
/🆑
2025-12-03 13:37:35 -07:00

72 lines
2.7 KiB
Plaintext

/obj/machinery/botpad
name = "Bot pad"
desc = "A lighter version of the orbital mech pad modified to launch bots. Requires linking to a remote to function."
icon = 'icons/obj/machines/telepad.dmi'
icon_state = "botpad"
circuit = /obj/item/circuitboard/machine/botpad
// ID of the console, used for linking up
var/id = "botlauncher"
var/obj/item/botpad_remote/connected_remote
var/datum/weakref/launched_bot // we need this to recall the bot
/obj/machinery/botpad/Destroy()
if(connected_remote)
connected_remote.connected_botpad = null
connected_remote = null
launched_bot = null
return ..()
/obj/machinery/botpad/screwdriver_act(mob/user, obj/item/tool)
return default_deconstruction_screwdriver(user, "botpad-open", "botpad", tool)
/obj/machinery/botpad/crowbar_act(mob/user, obj/item/tool)
return default_deconstruction_crowbar(tool)
/obj/machinery/botpad/multitool_act(mob/living/user, obj/item/multitool/tool)
if(!panel_open)
return NONE
var/obj/item/multitool/multitool = tool
multitool.set_buffer(src)
balloon_alert(user, "saved to multitool buffer")
return ITEM_INTERACT_SUCCESS
// Checks the turf for a bot and launches it if it's the only mob on the pad.
/obj/machinery/botpad/proc/launch(mob/living/user)
var/turf/reverse_turf = get_turf(user)
var/atom/possible_bot
for(var/mob/living/robot in get_turf(src))
if(!isbot(robot))
user.balloon_alert(user, "unidentified life form on the pad!")
return
if(!isnull(possible_bot))
user.balloon_alert(user, "too many bots on the pad!")
return
possible_bot = robot // We don't change the launched_bot var here because we are not sure if there is another bot on the pad.
if(!use_energy(active_power_usage, force = FALSE))
balloon_alert(user, "not enough energy!")
return
launched_bot = WEAKREF(possible_bot)
podspawn(list(
"target" = get_turf(src),
"path" = /obj/structure/closet/supplypod/transport/botpod,
"style" = /datum/pod_style/seethrough,
"reverse_dropoff_coords" = list(reverse_turf.x, reverse_turf.y, reverse_turf.z)
))
/obj/machinery/botpad/proc/recall(mob/living/user)
var/atom/our_bot = launched_bot?.resolve()
if(isnull(our_bot))
user.balloon_alert(user, "no bots sent from the pad!")
return
user.balloon_alert(user, "bot sent back to pad")
if(isbasicbot(our_bot))
var/mob/living/basic/bot/basic_bot = our_bot
basic_bot.summon_bot(src)
return
var/mob/living/simple_animal/bot/simple_bot = our_bot
simple_bot.call_bot(src, get_turf(src))
/obj/structure/closet/supplypod/transport/botpod
reverse_option_list = list("Mobs"=TRUE,"Objects"=FALSE,"Anchored"=FALSE,"Underfloor"=FALSE,"Wallmounted"=FALSE,"Floors"=FALSE,"Walls"=FALSE,"Mecha"=FALSE)
leavingSound = 'sound/vehicles/rocketlaunch.ogg'