From 8445d042dc36f9bfe15c88d805cd4db605902047 Mon Sep 17 00:00:00 2001 From: Lohikar Date: Tue, 20 Jun 2017 16:09:55 -0500 Subject: [PATCH] Miscellaneous fixes (#2774) changes: Fixed various GC failures. Converted integrated radios (used in PDA cartridges) to Initialize. Added a missing Destroy to the QM PDA cartridge's integrated radio. Fixed a runtime when mineturfs with no ore were destroyed by explosions. Fixed a runtime when explosions attempted to Z-travel. Minor radio performance improvements. Converted radio globals to defines. Changed the Security-I and Medical-I frequencies to use the same colors as their respective departments. Fixes #2646. --- code/__defines/radio.dm | 100 ++++-- code/controllers/subsystems/explosives.dm | 4 +- code/controllers/subsystems/garbage-debug.dm | 14 - code/controllers/subsystems/radio.dm | 58 ++-- code/game/objects/items/devices/PDA/PDA.dm | 1 + code/game/objects/items/devices/PDA/cart.dm | 9 +- code/game/objects/items/devices/PDA/radio.dm | 312 +++++++++--------- .../objects/items/devices/radio/headset.dm | 4 + code/modules/clothing/suits/hoodies.dm | 9 +- code/modules/mining/mine_turfs.dm | 8 +- 10 files changed, 276 insertions(+), 243 deletions(-) diff --git a/code/__defines/radio.dm b/code/__defines/radio.dm index 2fd45c22ed8..f3f63f7c8da 100644 --- a/code/__defines/radio.dm +++ b/code/__defines/radio.dm @@ -1,16 +1,16 @@ -var/const/RADIO_LOW_FREQ = 1200 -var/const/PUBLIC_LOW_FREQ = 1441 -var/const/PUBLIC_HIGH_FREQ = 1489 -var/const/RADIO_HIGH_FREQ = 1600 +#define RADIO_LOW_FREQ 1200 +#define PUBLIC_LOW_FREQ 1441 +#define PUBLIC_HIGH_FREQ 1489 +#define RADIO_HIGH_FREQ 1600 -var/const/BOT_FREQ = 1447 -var/const/COMM_FREQ = 1353 -var/const/ERT_FREQ = 1345 -var/const/AI_FREQ = 1343 -var/const/DTH_FREQ = 1341 -var/const/SYND_FREQ = 1213 -var/const/RAID_FREQ = 1277 -var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency. +#define BOT_FREQ 1447 +#define COMM_FREQ 1353 +#define ERT_FREQ 1345 +#define AI_FREQ 1343 +#define DTH_FREQ 1341 +#define SYND_FREQ 1213 +#define RAID_FREQ 1277 +#define ENT_FREQ 1461 //entertainment frequency. This is not a diona exclusive frequency. // department channels var/const/PUB_FREQ = 1459 @@ -22,8 +22,8 @@ var/const/SRV_FREQ = 1349 var/const/SUP_FREQ = 1347 // internal department channels -var/const/MED_I_FREQ = 1485 -var/const/SEC_I_FREQ = 1475 +#define MED_I_FREQ 1485 +#define SEC_I_FREQ 1475 var/list/radiochannels = list( "Common" = PUB_FREQ, @@ -40,18 +40,58 @@ var/list/radiochannels = list( "Service" = SRV_FREQ, "AI Private" = AI_FREQ, "Entertainment" = ENT_FREQ, - "Medical(I)" = MED_I_FREQ, - "Security(I)" = SEC_I_FREQ + "Medical (I)" = MED_I_FREQ, + "Security (I)" = SEC_I_FREQ ) +// The assoc variants are separate lists because they need the keys to be strings, but some code expects numbers. + // central command channels, i.e deathsquid & response teams -var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) +var/list/CENT_FREQS = list( + ERT_FREQ, + DTH_FREQ +) + +var/list/CENT_FREQS_ASSOC = list( + "[ERT_FREQ]" = TRUE, + "[DTH_FREQ]" = TRUE +) // Antag channels, i.e. Syndicate -var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ) +var/list/ANTAG_FREQS = list( + SYND_FREQ, + RAID_FREQ +) + +var/list/ANTAG_FREQS_ASSOC = list( + "[SYND_FREQ]" = TRUE, + "[RAID_FREQ]" = TRUE +) //Department channels, arranged lexically -var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ, ENT_FREQ) +var/list/DEPT_FREQS = list( + AI_FREQ, + COMM_FREQ, + ENG_FREQ, + MED_FREQ, + SEC_FREQ, + SCI_FREQ, + SRV_FREQ, + SUP_FREQ, + ENT_FREQ +) + +var/list/DEPT_FREQS_ASSOC = list( + "[AI_FREQ]" = TRUE, + "[COMM_FREQ]" = TRUE, + "[ENG_FREQ]" = TRUE, + "[MED_FREQ]" = TRUE, + "[SEC_FREQ]" = TRUE, + "[SCI_FREQ]" = TRUE, + "[SRV_FREQ]" = TRUE, + "[SUP_FREQ]" = TRUE, + "[ENT_FREQ]" = TRUE +) #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 @@ -62,15 +102,15 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI //This is done for performance, so we don't send signals to lots of machines unnecessarily. //This filter is special because devices belonging to default also recieve signals sent to any other filter. -var/const/RADIO_DEFAULT = "radio_default" +#define RADIO_DEFAULT "radio_default" -var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms -var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms -var/const/RADIO_CHAT = "radio_telecoms" -var/const/RADIO_ATMOSIA = "radio_atmos" -var/const/RADIO_NAVBEACONS = "radio_navbeacon" -var/const/RADIO_AIRLOCK = "radio_airlock" -var/const/RADIO_SECBOT = "radio_secbot" -var/const/RADIO_MULEBOT = "radio_mulebot" -var/const/RADIO_MAGNETS = "radio_magnet" -var/const/RADIO_ARRIVALS = "radio_arrvl" +#define RADIO_TO_AIRALARM "radio_airalarm" //air alarms +#define RADIO_FROM_AIRALARM "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms +#define RADIO_CHAT "radio_telecoms" +#define RADIO_ATMOSIA "radio_atmos" +#define RADIO_NAVBEACONS "radio_navbeacon" +#define RADIO_AIRLOCK "radio_airlock" +#define RADIO_SECBOT "radio_secbot" +#define RADIO_MULEBOT "radio_mulebot" +#define RADIO_MAGNETS "radio_magnet" +#define RADIO_ARRIVALS "radio_arrvl" diff --git a/code/controllers/subsystems/explosives.dm b/code/controllers/subsystems/explosives.dm index 1e70e0ee0ea..67e3b56abaf 100644 --- a/code/controllers/subsystems/explosives.dm +++ b/code/controllers/subsystems/explosives.dm @@ -82,9 +82,9 @@ var/datum/controller/subsystem/explosives/SSexplosives // Handles recursive propagation of explosions. if(devastation_range > 2 || heavy_impact_range > 2) if(HasAbove(epicenter.z) && z_transfer & UP) - explosion(GetAbove(epicenter), max(0, devastation_range - 2), max(0, heavy_impact_range - 2), max(0, light_impact_range - 2), max(0, flash_range - 2), 0, UP) + global.explosion(GetAbove(epicenter), max(0, devastation_range - 2), max(0, heavy_impact_range - 2), max(0, light_impact_range - 2), max(0, flash_range - 2), 0, UP) if(HasBelow(epicenter.z) && z_transfer & DOWN) - explosion(GetAbove(epicenter), max(0, devastation_range - 2), max(0, heavy_impact_range - 2), max(0, light_impact_range - 2), max(0, flash_range - 2), 0, DOWN) + global.explosion(GetAbove(epicenter), max(0, devastation_range - 2), max(0, heavy_impact_range - 2), max(0, light_impact_range - 2), max(0, flash_range - 2), 0, DOWN) var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flash_range) diff --git a/code/controllers/subsystems/garbage-debug.dm b/code/controllers/subsystems/garbage-debug.dm index 2b8471e5780..7c0f2f521e5 100644 --- a/code/controllers/subsystems/garbage-debug.dm +++ b/code/controllers/subsystems/garbage-debug.dm @@ -366,9 +366,6 @@ SearchVar(panic_targets_data_loss) SearchVar(Failsafe) SearchVar(Master) - SearchVar(MC_restart_clear) - SearchVar(MC_restart_timeout) - SearchVar(MC_restart_count) SearchVar(CURRENT_TICKLIMIT) SearchVar(SSalarm) SearchVar(SSchemistry) @@ -658,8 +655,6 @@ SearchVar(uristrune_cache) SearchVar(slot_flags_enumeration) SearchVar(BUMP_TELEPORTERS) - SearchVar(splatter_cache) - SearchVar(fluidtrack_cache) SearchVar(active_radio_jammers) SearchVar(default_uplink_selection) SearchVar(chatrooms) @@ -680,9 +675,7 @@ SearchVar(stool_cache) SearchVar(enterloopsanity) SearchVar(flooring_types) - SearchVar(floor_decals) SearchVar(random_junk) - SearchVar(flooring_cache) SearchVar(js_byjax) SearchVar(js_dropdowns) SearchVar(BSACooldown) @@ -705,7 +698,6 @@ SearchVar(admin_verbs_mod) SearchVar(admin_verbs_dev) SearchVar(admin_verbs_cciaa) - SearchVar(jobban_runonce) SearchVar(jobban_keylist) SearchVar(admin_datums) SearchVar(CMinutes) @@ -771,7 +763,6 @@ SearchVar(admin_verbs_lighting) SearchVar(liquid_delay) SearchVar(puddles) - SearchVar(maploader) SearchVar(_preloader) SearchVar(swapmaps_iconcache) SearchVar(SWAPMAPS_SAV) @@ -807,9 +798,6 @@ SearchVar(diona_banned_languages) SearchVar(alcohol_clumsy) SearchVar(sparring_attack_cache) - SearchVar(human_icon_cache) - SearchVar(tail_icon_cache) - SearchVar(light_overlay_cache) SearchVar(damage_icon_parts) SearchVar(MAXIMUM_MEME_POINTS) SearchVar(host_brain) @@ -822,7 +810,6 @@ SearchVar(pai_emotions) SearchVar(robot_custom_icons) SearchVar(robot_modules) - SearchVar(mob_hat_cache) SearchVar(protected_objects) SearchVar(SKILL_NONE) SearchVar(SKILL_BASIC) @@ -849,7 +836,6 @@ SearchVar(BLOOD_VOLUME_BAD) SearchVar(BLOOD_VOLUME_SURVIVE) SearchVar(organ_cache) - SearchVar(limb_icon_cache) SearchVar(all_robolimbs) SearchVar(chargen_robolimbs) SearchVar(basic_robolimb) diff --git a/code/controllers/subsystems/radio.dm b/code/controllers/subsystems/radio.dm index d995c4bb68c..ba8fdcf335d 100644 --- a/code/controllers/subsystems/radio.dm +++ b/code/controllers/subsystems/radio.dm @@ -155,34 +155,36 @@ var/datum/controller/subsystem/radio/SSradio return null /proc/frequency_span_class(var/frequency) + . = "radio" + var/fstr = "[frequency]" // Antags! - if (frequency in ANTAG_FREQS) + if (ANTAG_FREQS_ASSOC[fstr]) return "syndradio" - // centcomm channels (deathsquid and ert) - if(frequency in CENT_FREQS) - return "centradio" - // command channel - if(frequency == COMM_FREQ) - return "comradio" - // AI private channel - if(frequency == AI_FREQ) - return "airadio" - // department radio formatting (poorly optimized, ugh) - if(frequency == SEC_FREQ) - return "secradio" - if (frequency == ENG_FREQ) - return "engradio" - if(frequency == SCI_FREQ) - return "sciradio" - if(frequency == MED_FREQ) - return "medradio" - if(frequency == SUP_FREQ) // cargo - return "supradio" - if(frequency == SRV_FREQ) // service - return "srvradio" - if(frequency == ENT_FREQ) //entertainment - return "entradio" - if(frequency in DEPT_FREQS) - return "deptradio" - return "radio" + // centcomm channels (deathsquid and ert) + if(CENT_FREQS_ASSOC[fstr]) + return "centradio" + + // department radio formatting + switch (frequency) + if (COMM_FREQ) // command + . = "comradio" + if (AI_FREQ) // AI Private + . = "airadio" + if (SEC_FREQ,SEC_I_FREQ) + . = "secradio" + if (ENG_FREQ) + . = "engradio" + if (SCI_FREQ) + . = "sciradio" + if (MED_FREQ,MED_I_FREQ) + . = "medradio" + if (SUP_FREQ) // cargo + . = "supradio" + if (SRV_FREQ) // service + . = "srvradio" + if (ENT_FREQ) //entertainment + . = "entradio" + else + if(DEPT_FREQS_ASSOC[fstr]) + . = "deptradio" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 5a3d567f44d..7bef4ecce71 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1415,6 +1415,7 @@ var/global/list/obj/item/device/pda/PDAs = list() PDAs -= src if (src.id && prob(90)) //IDs are kept in 90% of the cases src.id.loc = get_turf(src.loc) + QDEL_NULL(pen) return ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index f95d341577d..32595ebf2bc 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -33,6 +33,10 @@ var/message2 var/list/stored_data = list() +/obj/item/weapon/cartridge/Destroy() + QDEL_NULL(radio) + return ..() + /obj/item/weapon/cartridge/engineering name = "\improper Power-ON cartridge" icon_state = "cart-e" @@ -101,7 +105,6 @@ /obj/item/weapon/cartridge/signal name = "generic signaler cartridge" desc = "A data cartridge with an integrated radio signaler module." - var/qdeled = 0 /obj/item/weapon/cartridge/signal/science name = "\improper Signal Ace 2 cartridge" @@ -114,10 +117,6 @@ . = ..() radio = new /obj/item/radio/integrated/signal(src) -/obj/item/weapon/cartridge/signal/Destroy() - qdel(radio) - return ..() - /obj/item/weapon/cartridge/quartermaster name = "\improper Space Parts & Space Vendors cartridge" desc = "Perfect for the Quartermaster on the go!" diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 2d521db062a..67b4138cf4c 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -8,32 +8,36 @@ var/on = 0 //Are we currently active?? var/menu_message = "" - New() - ..() - if (istype(loc.loc, /obj/item/device/pda)) - hostpda = loc.loc +/obj/item/radio/integrated/Initialize() + . = ..() + if (istype(loc.loc, /obj/item/device/pda)) + hostpda = loc.loc - proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3, s_filter) +/obj/item/radio/integrated/Destroy() + hostpda = null + return ..() - //world << "Post: [freq]: [key]=[value], [key2]=[value2]" - var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) +/obj/item/radio/integrated/proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3, s_filter) - if(!frequency) return + //world << "Post: [freq]: [key]=[value], [key2]=[value2]" + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = 1 - signal.data[key] = value - if(key2) - signal.data[key2] = value2 - if(key3) - signal.data[key3] = value3 + if(!frequency) return - frequency.post_signal(src, signal, filter = s_filter) + var/datum/signal/signal = new() + signal.source = src + signal.transmission_method = 1 + signal.data[key] = value + if(key2) + signal.data[key2] = value2 + if(key3) + signal.data[key3] = value3 - return + frequency.post_signal(src, signal, filter = s_filter) - proc/generate_menu() + return + +/obj/item/radio/integrated/proc/generate_menu() /obj/item/radio/integrated/beepsky var/list/botlist = null // list of bots @@ -43,66 +47,63 @@ var/control_freq = BOT_FREQ // create a new QM cartridge, and register to receive bot control & beacon message - New() - ..() - spawn(5) - if(SSradio) - SSradio.add_object(src, control_freq, filter = RADIO_SECBOT) +/obj/item/radio/integrated/beepsky/Initialize() + . = ..() + SSradio.add_object(src, control_freq, filter = RADIO_SECBOT) // receive radio signals // can detect bot status signals // create/populate list as they are recvd - receive_signal(datum/signal/signal) +/obj/item/radio/integrated/beepsky/receive_signal(datum/signal/signal) // var/obj/item/device/pda/P = src.loc - /* - world << "recvd:[P] : [signal.source]" - for(var/d in signal.data) - world << "- [d] = [signal.data[d]]" - */ - if (signal.data["type"] == "secbot") - if(!botlist) - botlist = new() + /* + world << "recvd:[P] : [signal.source]" + for(var/d in signal.data) + world << "- [d] = [signal.data[d]]" + */ + if (signal.data["type"] == "secbot") + if(!botlist) + botlist = new() - if(!(signal.source in botlist)) - botlist += signal.source + if(!(signal.source in botlist)) + botlist += signal.source - if(active == signal.source) - var/list/b = signal.data - botstatus = b.Copy() + if(active == signal.source) + var/list/b = signal.data + botstatus = b.Copy() // if (istype(P)) P.updateSelfDialog() - Topic(href, href_list) - ..() - var/obj/item/device/pda/PDA = src.hostpda +/obj/item/radio/integrated/beepsky/Topic(href, href_list) + ..() + var/obj/item/device/pda/PDA = src.hostpda - switch(href_list["op"]) + switch(href_list["op"]) - if("control") - active = locate(href_list["bot"]) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) + if("control") + active = locate(href_list["bot"]) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) - if("scanbots") // find all bots - botlist = null - post_signal(control_freq, "command", "bot_status", s_filter = RADIO_SECBOT) + if("scanbots") // find all bots + botlist = null + post_signal(control_freq, "command", "bot_status", s_filter = RADIO_SECBOT) - if("botlist") - active = null + if("botlist") + active = null - if("stop", "go") - post_signal(control_freq, "command", href_list["op"], "active", active, s_filter = RADIO_SECBOT) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) + if("stop", "go") + post_signal(control_freq, "command", href_list["op"], "active", active, s_filter = RADIO_SECBOT) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) - if("summon") - post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(PDA) , s_filter = RADIO_SECBOT) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) + if("summon") + post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(PDA) , s_filter = RADIO_SECBOT) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) /obj/item/radio/integrated/beepsky/Destroy() - if(SSradio) - SSradio.remove_object(src, control_freq) + SSradio.remove_object(src, control_freq) return ..() /obj/item/radio/integrated/mule @@ -115,94 +116,99 @@ var/control_freq = BOT_FREQ // create a new QM cartridge, and register to receive bot control & beacon message - New() - ..() - spawn(5) - if(SSradio) - SSradio.add_object(src, control_freq, filter = RADIO_MULEBOT) - SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) - spawn(10) - post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS) +/obj/item/radio/integrated/mule/Initialize() + ..() + SSradio.add_object(src, control_freq, filter = RADIO_MULEBOT) + SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) + return INITIALIZE_HINT_LATELOAD + +/obj/item/radio/integrated/mule/LateInitialize() + post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS) + +/obj/item/radio/integrated/mule/Destroy() + SSradio.remove_object(src, control_freq) + SSradio.remove_object(src, beacon_freq) + return ..() // receive radio signals // can detect bot status signals // and beacon locations // create/populate lists as they are recvd - receive_signal(datum/signal/signal) +/obj/item/radio/integrated/mule/receive_signal(datum/signal/signal) // var/obj/item/device/pda/P = src.loc - /* - world << "recvd:[P] : [signal.source]" - for(var/d in signal.data) - world << "- [d] = [signal.data[d]]" - */ - if(signal.data["type"] == "mulebot") - if(!botlist) - botlist = new() + /* + world << "recvd:[P] : [signal.source]" + for(var/d in signal.data) + world << "- [d] = [signal.data[d]]" + */ + if(signal.data["type"] == "mulebot") + if(!botlist) + botlist = new() - if(!(signal.source in botlist)) - botlist += signal.source + if(!(signal.source in botlist)) + botlist += signal.source - if(active == signal.source) - var/list/b = signal.data - botstatus = b.Copy() + if(active == signal.source) + var/list/b = signal.data + botstatus = b.Copy() - else if(signal.data["beacon"]) - if(!beacons) - beacons = new() + else if(signal.data["beacon"]) + if(!beacons) + beacons = new() - beacons[signal.data["beacon"] ] = signal.source + beacons[signal.data["beacon"] ] = signal.source // if(istype(P)) P.updateSelfDialog() - Topic(href, href_list) - ..() - var/cmd = "command" - if(active) cmd = "command [active.suffix]" +/obj/item/radio/integrated/mule/Topic(href, href_list) + ..() + var/cmd = "command" + if(active) cmd = "command [active.suffix]" - switch(href_list["op"]) + switch(href_list["op"]) - if("control") - active = locate(href_list["bot"]) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("control") + active = locate(href_list["bot"]) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("scanbots") // find all bots - botlist = null - post_signal(control_freq, "command", "bot_status", s_filter = RADIO_MULEBOT) + if("scanbots") // find all bots + botlist = null + post_signal(control_freq, "command", "bot_status", s_filter = RADIO_MULEBOT) - if("botlist") - active = null + if("botlist") + active = null - if("unload") - post_signal(control_freq, cmd, "unload", s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("setdest") - if(beacons) - var/dest = input("Select Bot Destination", "Mulebot [active.suffix] Interlink", active.destination) as null|anything in beacons - if(dest) - post_signal(control_freq, cmd, "target", "destination", dest, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("unload") + post_signal(control_freq, cmd, "unload", s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("setdest") + if(beacons) + var/dest = input("Select Bot Destination", "Mulebot [active.suffix] Interlink", active.destination) as null|anything in beacons + if(dest) + post_signal(control_freq, cmd, "target", "destination", dest, s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("retoff") - post_signal(control_freq, cmd, "autoret", "value", 0, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("reton") - post_signal(control_freq, cmd, "autoret", "value", 1, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("retoff") + post_signal(control_freq, cmd, "autoret", "value", 0, s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("reton") + post_signal(control_freq, cmd, "autoret", "value", 1, s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("pickoff") - post_signal(control_freq, cmd, "autopick", "value", 0, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("pickon") - post_signal(control_freq, cmd, "autopick", "value", 1, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("pickoff") + post_signal(control_freq, cmd, "autopick", "value", 0, s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("pickon") + post_signal(control_freq, cmd, "autopick", "value", 1, s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("stop", "go", "home") - post_signal(control_freq, cmd, href_list["op"], s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + if("stop", "go", "home") + post_signal(control_freq, cmd, href_list["op"], s_filter = RADIO_MULEBOT) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) @@ -217,41 +223,37 @@ var/last_transmission var/datum/radio_frequency/radio_connection - Initialize() - . = ..() - if(!SSradio) - return - - if (src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) - src.frequency = sanitize_frequency(src.frequency) - - set_frequency(frequency) - - proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency) - - proc/send_signal(message="ACTIVATE") - - if(last_transmission && world.time < (last_transmission + 5)) - return - last_transmission = world.time - - var/time = time2text(world.realtime,"hh:mm:ss") - var/turf/T = get_turf(src) - lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") - - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = message - - radio_connection.post_signal(src, signal) - +/obj/item/radio/integrated/signal/Initialize() + . = ..() + if(!SSradio) return + if (src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) + src.frequency = sanitize_frequency(src.frequency) + + set_frequency(frequency) + +/obj/item/radio/integrated/signal/proc/set_frequency(new_frequency) + SSradio.remove_object(src, frequency) + frequency = new_frequency + radio_connection = SSradio.add_object(src, frequency) + +/obj/item/radio/integrated/signal/proc/send_signal(message="ACTIVATE") + if(last_transmission && world.time < (last_transmission + 5)) + return + last_transmission = world.time + + var/time = time2text(world.realtime,"hh:mm:ss") + var/turf/T = get_turf(src) + lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") + + var/datum/signal/signal = new + signal.source = src + signal.encryption = code + signal.data["message"] = message + + radio_connection.post_signal(src, signal) + /obj/item/radio/integrated/signal/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) + SSradio.remove_object(src, frequency) return ..() diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 5be20e10e09..87977b38461 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -159,6 +159,10 @@ return -1 //Transciever Disabled. return ..(freq, level, 1) +/obj/item/device/radio/headset/heads/ai_integrated/Destroy() + myAi = null + return ..() + /obj/item/device/radio/headset/heads/rd name = "research director's headset" desc = "Headset of the researching God." diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm index b8dc70f4e38..a330699fb2c 100644 --- a/code/modules/clothing/suits/hoodies.dm +++ b/code/modules/clothing/suits/hoodies.dm @@ -6,18 +6,17 @@ var/suittoggled = 0 var/hooded = 0 -/obj/item/clothing/suit/storage/hooded/New() +/obj/item/clothing/suit/storage/hooded/Initialize() + . = ..() MakeHood() - ..() /obj/item/clothing/suit/storage/hooded/Destroy() - qdel(hood) + QDEL_NULL(hood) return ..() /obj/item/clothing/suit/storage/hooded/proc/MakeHood() if(!hood) - var/obj/item/clothing/head/winterhood/W = new hoodtype(src) - hood = W + hood = new hoodtype(src) /obj/item/clothing/suit/storage/hooded/equipped(mob/user, slot) if(slot != slot_wear_suit) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 63ba78e7357..f29e84e9ea3 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -716,7 +716,6 @@ if(prob(25) && has_resources) var/list/ore = list() for(var/metal in resources) - switch(metal) if("silicates") ore += /obj/item/weapon/ore/glass @@ -753,9 +752,10 @@ ore += /obj/item/weapon/ore/glass else ore += /obj/item/weapon/ore/glass - var/ore_path = pick(ore) - if(ore) - new ore_path(src) + if (ore.len) + var/ore_path = pick(ore) + if(ore) + new ore_path(src) if(dug <= 10) dug += 1