mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-11 09:22:41 +00:00
## About The Pull Request "Behold, a navigation beacon" Plato says to the crowd of shocked onlookers.  What are you looking at here? Navigation beacons have been party reworked for significantly improved ease of use, and for significantly cooler functionality. As it stands, in order to explore space with a ship of some sort, you have to take the following steps: Fly to target zlevel Build a floor Build a machine frame, then make the beacon out of it Go back and park your ship Now, while this doesn't eliminate this process, it makes it a step shorter and a good bit less annoying to do. There are no gigabeacon boards, instead a compact beacon can be printed. This can be used inhand and, after a delay of three seconds, will create a brand new gigabeacon in front of you with no extra hassle. So, aside from the sprite (the old one is an alien power core, by the way), what's new? Just a bit of flavor. Examining a gigabeacon will mention a radio frequency. If you tune into this radio frequency, then you might be able to catch the automatic messages the beacons put out every five minutes. They detail a little bit about the beacon, namely its coordinates, and if its activate or locked. While not critical info my any means, it can be good information to have pop up every few minutes, or for discovering that there are gigabeacons you didn't know were there before. ## Why It's Good For The Game Gigabeacons had two big problems, one was that they were pointlessly annoying to set up, and two was that they didn't have their own sprite. Yup, they just used a random alien tech structure and nobody said anything about it. Hopefully this pr fixes both of those problems, alongside adding a little neat bit of flavor to them in the form of the automatic radio broadcasts they put every few minutes on a non-standard channel. ## Changelog 🆑 qol: Gigabeacons no longer need to be constructed like standard machines, instead being printed as items that can be deployed quickly inhand without tools. qol: Gigabeacons are no longer their own research node, instead being a part of telecomms tech (due to the fact they're RADIO navigation beacons) image: Navigation gigabeacons now have their own unique sprites, inspired by maritime EPIRB devices. If you find a yellow box with an antenna on it, you probably found a nav beacon! code: The deployable component now gives you an option to disable the examine blurb it adds to its parent /🆑
80 lines
3.2 KiB
Plaintext
80 lines
3.2 KiB
Plaintext
/**
|
|
* Deployable - Bring your big guns with you, and smack em' down where you want.
|
|
*
|
|
* Allows items to spawn other items (usually objects) in front of the user after a short delay.
|
|
* If attaching this to something:
|
|
* Set deploy_time to a number in seconds for the deploy delay
|
|
* Set thing_to_be_deployed to an obj path for the thing that gets spawned
|
|
* Lastly, set delete_on_use to TRUE or FALSE if you want the object you're deploying with to get deleted when used
|
|
*/
|
|
|
|
/datum/component/deployable
|
|
/// The time it takes to deploy the object
|
|
var/deploy_time
|
|
/// The object that gets spawned if deployed successfully
|
|
var/obj/thing_to_be_deployed
|
|
/// If the item used to deploy gets deleted on use or not
|
|
var/delete_on_use
|
|
/// If the component adds a little bit into the parent's description
|
|
var/add_description_hint
|
|
|
|
/// Used in getting the name of the deployed object
|
|
var/deployed_name
|
|
|
|
/datum/component/deployable/Initialize(deploy_time = 5 SECONDS, thing_to_be_deployed, delete_on_use = TRUE, add_description_hint = TRUE)
|
|
. = ..()
|
|
if(!isitem(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
src.deploy_time = deploy_time
|
|
src.thing_to_be_deployed = thing_to_be_deployed
|
|
src.delete_on_use = delete_on_use
|
|
src.add_description_hint = add_description_hint
|
|
|
|
if(add_description_hint)
|
|
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine))
|
|
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_hand))
|
|
|
|
var/obj/item/typecast = thing_to_be_deployed
|
|
deployed_name = initial(typecast.name)
|
|
|
|
/datum/component/deployable/proc/examine(datum/source, mob/user, list/examine_list)
|
|
SIGNAL_HANDLER
|
|
|
|
examine_list += span_notice("[source.p_they()] look[source.p_s()] like [source.p_they()] can be deployed into \a [deployed_name].")
|
|
|
|
/datum/component/deployable/proc/on_attack_hand(datum/source, mob/user, location, direction)
|
|
SIGNAL_HANDLER
|
|
INVOKE_ASYNC(src, PROC_REF(deploy), source, user, location, direction)
|
|
|
|
/datum/component/deployable/proc/deploy(obj/source, mob/user, location, direction) //If there's no user, location and direction are used
|
|
var/obj/deployed_object //Used for spawning the deployed object
|
|
var/turf/deploy_location //Where our deployed_object gets put
|
|
var/new_direction //What direction do we want our deployed object in
|
|
if(user)
|
|
if(!ishuman(user))
|
|
return
|
|
|
|
deploy_location = get_step(user, user.dir) //Gets spawn location for thing_to_be_deployed if there is a user
|
|
if(deploy_location.is_blocked_turf(TRUE))
|
|
source.balloon_alert(user, "insufficient room to deploy here.")
|
|
return
|
|
new_direction = user.dir //Gets the direction for thing_to_be_deployed if there is a user
|
|
source.balloon_alert(user, "deploying...")
|
|
playsound(source, 'sound/items/ratchet.ogg', 50, TRUE)
|
|
if(!do_after(user, deploy_time))
|
|
return
|
|
else //If there is for some reason no user, then the location and direction are set here
|
|
deploy_location = location
|
|
new_direction = direction
|
|
|
|
deployed_object = new thing_to_be_deployed(deploy_location)
|
|
deployed_object.setDir(new_direction)
|
|
|
|
//Sets the integrity of the new deployed machine to that of the object it came from
|
|
deployed_object.modify_max_integrity(source.max_integrity)
|
|
deployed_object.update_icon_state()
|
|
|
|
if(delete_on_use)
|
|
qdel(source)
|