Skip to content

Commit

Permalink
Multitool can be used to find the area's APC (#16544)
Browse files Browse the repository at this point in the history
Co-authored-by: TiviPlus <[email protected]>
  • Loading branch information
Runian and TiviPlus committed Sep 17, 2024
1 parent bc426b6 commit a92eff7
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
1 change: 1 addition & 0 deletions code/__DEFINES/cooldowns.dm
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
#define COOLDOWN_WHISTLE_BLOW "cooldown_whistle_blow"
#define COOLDOWN_WHISTLE_WARCRY "cooldown_whistle_warcry"
#define COOLDOWN_ARMORED_SMOKE "cooldown_armored_smoke"
#define COOLDOWN_LOCATE_APC "cooldown_locate_apc"

//Mecha cooldowns
#define COOLDOWN_MECHA "mecha"
Expand Down
40 changes: 40 additions & 0 deletions code/game/objects/items/multitool.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,43 @@
tool_behaviour = TOOL_MULTITOOL

var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage

/obj/item/tool/multitool/attack_self(mob/user)
. = ..()

if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_LOCATE_APC) || !ishuman(user) || user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_METAL || !user.client)
return

var/area/current_area = get_area(src)
var/atom/area_apc = current_area ? current_area.get_apc() : null
if(!area_apc)
to_chat(user, span_warning("ERROR: Could not locate local APC."))
user.balloon_alert(user, "could not locate!")
return

var/dist = get_dist(src, area_apc)
var/direction = angle_to_dir(Get_Angle(get_turf(src), get_turf(area_apc)))
to_chat(user, span_notice("The local APC is located at [span_bold("[dist] units [dir2text(direction)]")]."))
user.balloon_alert(user, "[dist] units [dir2text(direction)]")

//Create the appearance so we have something to apply the filter to.
var/mutable_appearance/apc_appearance = new(area_apc)
apc_appearance.filters += list("type" = "outline", "size" = 1, "color" = COLOR_GREEN)
//Make it an image we can give to the client
var/image/final_image = image(apc_appearance)

final_image.layer = WALL_OBJ_LAYER
final_image.plane = GAME_PLANE
final_image.loc = get_turf(area_apc)
final_image.dir = apc_appearance.dir
final_image.alpha = 225
user.client.images += final_image

TIMER_COOLDOWN_START(src, COOLDOWN_LOCATE_APC, 1.5 SECONDS)
addtimer(CALLBACK(src, PROC_REF(remove_apc_highlight), user.client, final_image), 1.4 SECONDS)

/// Removes the highlight from the APC.
/obj/item/tool/multitool/proc/remove_apc_highlight(client/user_client, image/highlight_image)
if(!user_client)
return
user_client.images -= highlight_image

0 comments on commit a92eff7

Please sign in to comment.