mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-27 06:00:23 +01:00
Kitchen Sink PR (#17515)
* insanity - Crawling - Recursive Listeners - Global Conversion to GLOB. - Sound channels (and sound (but not looping sound yet)) - Species and gender specific sounds - Admin proc to enable vore antag on a target - Dying by being crushed inside of shoes now enables your vore_death flag - *pain emote - RNG Spaceslipping removed - Selecting the groin with help intent will do a bellyrub on the target - Xenochimera get lick wounds - Wolves now get stomachs (and stomach overlays) - Proper vantag handling - Staff exiting will now notify staff - Modular computers get a power on sound now GET IN THERE * whoops forgot to give it to mobs * Bellyrubbing is now an emote * Update vorestation.dme * some small edits actually gives voice freq a valid starting selection makes the default voice less jarring * Update atoms_movable.dm * Update atoms_movable.dm
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#define CANBROADCAST_INNERBOX 0.7071067811865476 //This is sqrt(2)/2
|
||||
// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't
|
||||
//VOREStation Edit Start - Updating this for Virgo
|
||||
var/global/list/default_internal_channels = list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(AI_FREQ) = list(access_synth),
|
||||
@@ -14,7 +14,7 @@ var/global/list/default_internal_channels = list(
|
||||
num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology),
|
||||
num2text(SUP_FREQ) = list(access_cargo, access_mining_station),
|
||||
num2text(SRV_FREQ) = list(access_janitor, access_library, access_hydroponics, access_bar, access_kitchen),
|
||||
num2text(EXP_FREQ) = list(access_explorer) //VOREStation Edit
|
||||
num2text(EXP_FREQ) = list(access_explorer)
|
||||
)
|
||||
|
||||
var/global/list/default_medbay_channels = list(
|
||||
@@ -22,7 +22,6 @@ var/global/list/default_medbay_channels = list(
|
||||
num2text(MED_FREQ) = list(),
|
||||
num2text(MED_I_FREQ) = list()
|
||||
)
|
||||
//VOREStation Edit End
|
||||
|
||||
/obj/item/radio
|
||||
icon = 'icons/obj/radio_vr.dmi'
|
||||
@@ -298,7 +297,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
|
||||
|
||||
/obj/item/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels, var/states) //VOREStation Edit
|
||||
/obj/item/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels, var/states)
|
||||
|
||||
if(!GLOB.autospeaker)
|
||||
return
|
||||
@@ -315,15 +314,13 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
|
||||
|
||||
if(!LAZYLEN(zlevels))
|
||||
zlevels = list(0)
|
||||
//VOREStation Edit Start
|
||||
if(!states)
|
||||
states = "states"
|
||||
//VOREStation Edit End
|
||||
GLOB.autospeaker.SetName(from)
|
||||
Broadcast_Message(connection, GLOB.autospeaker,
|
||||
0, "*garbled automated announcement*", src,
|
||||
message_to_multilingual(message, GLOB.all_languages[LANGUAGE_GALCOM]), from, "Automated Announcement", from, "synthesized voice",
|
||||
DATA_FAKE, 0, zlevels, connection.frequency, states) //VOREStation Edit
|
||||
DATA_FAKE, 0, zlevels, connection.frequency, states)
|
||||
|
||||
// Interprets the message mode when talking into a radio, possibly returning a connection datum
|
||||
/obj/item/radio/proc/handle_message_mode(mob/living/M as mob, list/message_pieces, message_mode)
|
||||
@@ -769,3 +766,78 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
|
||||
/obj/item/radio/phone/medbay/Initialize(mapload)
|
||||
. = ..()
|
||||
internal_channels = default_medbay_channels.Copy()
|
||||
|
||||
/obj/item/radio/proc/can_broadcast_to()
|
||||
var/list/output = list()
|
||||
var/turf/T = get_turf(src)
|
||||
var/dnumber = canhear_range*CANBROADCAST_INNERBOX
|
||||
for(var/cand_x = max(0, T.x - canhear_range), cand_x <= T.x + canhear_range, cand_x++)
|
||||
for(var/cand_y = max(0, T.y - canhear_range), cand_y <= T.y + canhear_range, cand_y++)
|
||||
var/turf/cand_turf = locate(cand_x,cand_y,T.z)
|
||||
if(!cand_turf)
|
||||
continue
|
||||
if((abs(T.x - cand_x) < dnumber) || (abs(T.y - cand_y) < dnumber))
|
||||
output += cand_turf
|
||||
continue
|
||||
if(sqrt((T.x - cand_x)**2 + (T.y - cand_y)**2) <= canhear_range)
|
||||
output += cand_turf
|
||||
continue
|
||||
return output
|
||||
/obj/item/radio/intercom
|
||||
var/list/broadcast_tiles
|
||||
|
||||
/obj/item/radio/intercom/proc/update_broadcast_tiles()
|
||||
var/list/output = list()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
var/dnumber = canhear_range*CANBROADCAST_INNERBOX
|
||||
for(var/cand_x = max(0, T.x - canhear_range), cand_x <= T.x + canhear_range, cand_x++)
|
||||
for(var/cand_y = max(0, T.y - canhear_range), cand_y <= T.y + canhear_range, cand_y++)
|
||||
var/turf/cand_turf = locate(cand_x,cand_y,T.z)
|
||||
if(!cand_turf)
|
||||
continue
|
||||
if((abs(T.x - cand_x) < dnumber) || (abs(T.y - cand_y) < dnumber))
|
||||
output += cand_turf
|
||||
continue
|
||||
if(sqrt((T.x - cand_x)**2 + (T.y - cand_y)**2) <= canhear_range)
|
||||
output += cand_turf
|
||||
continue
|
||||
broadcast_tiles = output
|
||||
|
||||
/obj/item/radio/intercom/forceMove(atom/destination)
|
||||
. = ..()
|
||||
update_broadcast_tiles()
|
||||
|
||||
/obj/item/radio/intercom/Initialize(mapload)
|
||||
. = ..()
|
||||
update_broadcast_tiles()
|
||||
|
||||
/obj/item/radio/intercom/can_broadcast_to()
|
||||
if(!broadcast_tiles)
|
||||
update_broadcast_tiles()
|
||||
return broadcast_tiles
|
||||
|
||||
//*Subspace Radio*//
|
||||
/obj/item/radio/subspace
|
||||
adhoc_fallback = 1
|
||||
canhear_range = 8
|
||||
desc = "A heavy duty radio that can pick up all manor of shortwave and subspace frequencies. It's a bit bulkier than a normal radio thanks to the extra hardware."
|
||||
description_info = "This radio can broadcast over any headset frequency that the user has access to. It has a shortwave fallback to directly broadcast to all radio equipment on the same Z-Level/Map in the event of a telecommunications failure. This device requires a functioning Telecommunications Network/Relay to send and receive signals meant for headsets. Additionally, the volume knob seems to be stuck on the max setting. You could hear this thing clear across a room... Not good for discretely listening in on secure channels or being stealthy!"
|
||||
icon_state = "radio"
|
||||
name = "subspace radio"
|
||||
subspace_transmission = 1
|
||||
throwforce = 5
|
||||
throw_range = 7
|
||||
throw_speed = 1
|
||||
|
||||
//* Bluespace Radio *//
|
||||
/obj/item/bluespaceradio/southerncross_prelinked
|
||||
name = "bluespace radio (southerncross)"
|
||||
handset = /obj/item/radio/bluespacehandset/linked/southerncross_prelinked
|
||||
|
||||
/obj/item/radio/bluespacehandset/linked/southerncross_prelinked
|
||||
bs_tx_preload_id = "Receiver A" //Transmit to a receiver
|
||||
bs_rx_preload_id = "Broadcaster A" //Recveive from a transmitter
|
||||
|
||||
#undef CANBROADCAST_INNERBOX
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
/obj/item/perfect_tele/attack_self(mob/user, var/radial_menu_anchor = src)
|
||||
if(loc_network)
|
||||
for(var/obj/item/perfect_tele_beacon/stationary/nb in premade_tele_beacons)
|
||||
for(var/obj/item/perfect_tele_beacon/stationary/nb in GLOB.premade_tele_beacons)
|
||||
if(nb.tele_network == loc_network)
|
||||
beacons[nb.tele_name] = nb
|
||||
loc_network = null //Consumed
|
||||
|
||||
@@ -61,7 +61,7 @@ Frequency:
|
||||
if (sr)
|
||||
src.temp += span_bold("Located Beacons:") + "<BR>"
|
||||
|
||||
for(var/obj/item/radio/beacon/W in all_beacons)
|
||||
for(var/obj/item/radio/beacon/W in GLOB.all_beacons)
|
||||
if (W.frequency == src.frequency)
|
||||
var/turf/tr = get_turf(W)
|
||||
if (tr.z == sr.z && tr)
|
||||
@@ -79,7 +79,7 @@ Frequency:
|
||||
src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
|
||||
|
||||
src.temp += span_bold("Extraneous Signals:") + "<BR>"
|
||||
for (var/obj/item/implant/tracking/W in all_tracking_implants)
|
||||
for (var/obj/item/implant/tracking/W in GLOB.all_tracking_implants)
|
||||
if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction))
|
||||
continue
|
||||
|
||||
@@ -168,7 +168,7 @@ Frequency:
|
||||
if ((user.get_active_hand() != src || user.stat || user.restrained()))
|
||||
return
|
||||
var/count = 0 //num of portals from this teleport in world
|
||||
for(var/obj/effect/portal/PO in all_portals)
|
||||
for(var/obj/effect/portal/PO in GLOB.all_portals)
|
||||
if(PO.creator == src) count++
|
||||
if(count >= 3)
|
||||
user.show_message(span_notice("\The [src] is recharging!"))
|
||||
|
||||
@@ -186,9 +186,6 @@
|
||||
/obj/proc/see_emote(mob/M as mob, text, var/emote_type)
|
||||
return
|
||||
|
||||
/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
|
||||
return
|
||||
|
||||
// Used to mark a turf as containing objects that are dangerous to step onto.
|
||||
/obj/proc/register_dangerous_to_step()
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -343,7 +343,7 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium)
|
||||
if(..())
|
||||
return
|
||||
if(src.allowed(user))
|
||||
for (var/obj/structure/morgue/crematorium/C in all_crematoriums)
|
||||
for (var/obj/structure/morgue/crematorium/C in GLOB.all_crematoriums)
|
||||
if (C.id == id)
|
||||
if (!C.cremating)
|
||||
C.cremate(user)
|
||||
|
||||
Reference in New Issue
Block a user