Files
Bubberstation/code/modules/power/apc/apc_malf.dm
grungussuss 58501dce77 Reorganizes the sound folder (#86726)
## About The Pull Request

<details>

- renamed ai folder to announcer

-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer

- separated the ambience folder into ambience and instrumental
-- ambience --

- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it

-- instrumental --

- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)

-- items --

- moved secdeath to hailer
- moved surgery to handling

-- effects --

- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects

-- vehicles --

- moved mecha into vehicles


created mobs folder

-- mobs --

- moved creatures folder into mobs
- moved voice into mobs

renamed creatures to non-humanoids
renamed voice to humanoids

-- non-humanoids--

created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg

-- humanoids --




-- misc --

moved ghostwhisper to misc
moved insane_low_laugh to misc

I give up trying to document this.

</details>

- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc 
- [X] mobs
- [X] runtime
- [X] vehicles

- [ ] attributions

## Why It's Good For The Game

This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.

## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
2024-09-23 22:24:50 -07:00

145 lines
6.2 KiB
Plaintext

/obj/machinery/power/apc/proc/get_malf_status(mob/living/silicon/ai/malf)
if(!istype(malf) || !malf.malf_picker)
return APC_AI_NO_MALF
if(malfai != malf)
return APC_AI_NO_HACK
if(occupier == malf)
return APC_AI_HACK_SHUNT_HERE
if(istype(malf.loc, /obj/machinery/power/apc))
return APC_AI_HACK_SHUNT_ANOTHER
return APC_AI_HACK_NO_SHUNT
/obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf)
if(!istype(malf))
return
if(get_malf_status(malf) != APC_AI_NO_HACK)
return
if(malf.malfhacking)
to_chat(malf, span_warning("You are already hacking an APC!"))
return
to_chat(malf, span_notice("Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."))
malf.malfhack = src
malf.malfhacking = addtimer(CALLBACK(malf, TYPE_PROC_REF(/mob/living/silicon/ai/, malfhacked), src), 600, TIMER_STOPPABLE)
var/atom/movable/screen/alert/hackingapc/hacking_apc
hacking_apc = malf.throw_alert(ALERT_HACKING_APC, /atom/movable/screen/alert/hackingapc)
hacking_apc.target = src
/obj/machinery/power/apc/proc/malfoccupy(mob/living/silicon/ai/malf)
if(!istype(malf))
return
if(istype(malf.loc, /obj/machinery/power/apc)) // Already in an APC
to_chat(malf, span_warning("You must evacuate your current APC first!"))
return
if(!malf.can_shunt)
to_chat(malf, span_warning("You cannot shunt!"))
return
if(!is_station_level(z))
return
INVOKE_ASYNC(src, PROC_REF(malfshunt), malf)
/obj/machinery/power/apc/proc/malfshunt(mob/living/silicon/ai/malf)
var/confirm = tgui_alert(malf, "Are you sure that you want to shunt? This will take you out of your core!", "Shunt to [name]?", list("Yes", "No"))
if(confirm != "Yes")
return
malf.ShutOffDoomsdayDevice()
occupier = malf
if (isturf(malf.loc)) // create a deactivated AI core if the AI isn't coming from an emergency mech shunt
malf.linked_core = new /obj/structure/ai_core/deactivated(malf.loc)
malf.linked_core.remote_ai = malf // note that we do not set the deactivated core's core_mmi.brainmob
malf.forceMove(src) // move INTO the APC, not to its tile
if(!findtext(occupier.name, "APC Copy"))
occupier.name = "[malf.name] APC Copy"
malf.shunted = TRUE
occupier.eyeobj.name = "[occupier.name] (AI Eye)"
occupier.eyeobj.forceMove(src.loc)
for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list)
disk_pinpointers.switch_mode_to(TRACK_MALF_AI) //Pinpointer will track the shunted AI
var/datum/action/innate/core_return/return_action = new
return_action.Grant(occupier)
SEND_SIGNAL(src, COMSIG_SILICON_AI_OCCUPY_APC, occupier)
SEND_SIGNAL(occupier, COMSIG_SILICON_AI_OCCUPY_APC, occupier)
occupier.cancel_camera()
/obj/machinery/power/apc/proc/malfvacate(forced)
if(!occupier)
return
SEND_SIGNAL(occupier, COMSIG_SILICON_AI_VACATE_APC, occupier)
SEND_SIGNAL(src, COMSIG_SILICON_AI_VACATE_APC, occupier)
if(forced)
occupier.forceMove(drop_location())
INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death))
occupier.gib(DROP_ALL_REMAINS)
occupier = null
return
if(occupier.linked_core)
occupier.shunted = FALSE
occupier.forceMove(occupier.linked_core.loc)
qdel(occupier.linked_core)
occupier.cancel_camera()
occupier = null
else
stack_trace("An AI: [occupier] has vacated an APC with no linked core and without being gibbed.")
if(!occupier.nuking) //Pinpointers go back to tracking the nuke disk, as long as the AI (somehow) isn't mid-nuking.
for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list)
disk_pinpointers.switch_mode_to(TRACK_NUKE_DISK)
disk_pinpointers.alert = FALSE
/obj/machinery/power/apc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
. = ..()
if(!.)
return
if(card.AI)
to_chat(user, span_warning("[card] is already occupied!"))
return FALSE
if(!occupier)
to_chat(user, span_warning("There's nothing in [src] to transfer!"))
return FALSE
if(!occupier.mind || !occupier.client)
to_chat(user, span_warning("[occupier] is either inactive or destroyed!"))
return FALSE
if(occupier.linked_core) //if they have an active linked_core, they can't be transferred from an APC
to_chat(user, span_warning("[occupier] is refusing all attempts at transfer!") )
return FALSE
if(transfer_in_progress)
to_chat(user, span_warning("There's already a transfer in progress!"))
return FALSE
if(interaction != AI_TRANS_TO_CARD || occupier.stat)
return FALSE
var/turf/user_turf = get_turf(user)
if(!user_turf)
return FALSE
transfer_in_progress = TRUE
user.visible_message(span_notice("[user] slots [card] into [src]..."), span_notice("Transfer process initiated. Sending request for AI approval..."))
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
SEND_SOUND(occupier, sound('sound/announcer/notice/notice2.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out
if(tgui_alert(occupier, "[user] is attempting to transfer you to \a [card.name]. Do you consent to this?", "APC Transfer", list("Yes - Transfer Me", "No - Keep Me Here")) == "No - Keep Me Here")
to_chat(user, span_danger("AI denied transfer request. Process terminated."))
playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE)
transfer_in_progress = FALSE
return FALSE
if(user.loc != user_turf)
to_chat(user, span_danger("Location changed. Process terminated."))
to_chat(occupier, span_warning("[user] moved away! Transfer canceled."))
transfer_in_progress = FALSE
return FALSE
to_chat(user, span_notice("AI accepted request. Transferring stored intelligence to [card]..."))
to_chat(occupier, span_notice("Transfer starting. You will be moved to [card] shortly."))
if(!do_after(user, 5 SECONDS, target = src))
to_chat(occupier, span_warning("[user] was interrupted! Transfer canceled."))
transfer_in_progress = FALSE
return FALSE
if(!occupier || !card)
transfer_in_progress = FALSE
return FALSE
user.visible_message(span_notice("[user] transfers [occupier] to [card]!"), span_notice("Transfer complete! [occupier] is now stored in [card]."))
to_chat(occupier, span_notice("Transfer complete! You've been stored in [user]'s [card.name]."))
occupier.forceMove(card)
card.AI = occupier
occupier.shunted = FALSE
occupier.cancel_camera()
occupier = null
transfer_in_progress = FALSE
return TRUE