diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 193306b057..cd481ef19f 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_EMPTY(ear_styles_list) // Stores /datum/sprite_accessory/ears indexe GLOBAL_LIST_EMPTY(tail_styles_list) // Stores /datum/sprite_accessory/tail indexed by type GLOBAL_LIST_EMPTY(wing_styles_list) // Stores /datum/sprite_accessory/wing indexed by type -GLOBAL_LIST_INIT(custom_species_bases, new) // Species that can be used for a Custom Species icon base +GLOBAL_LIST_EMPTY(custom_species_bases) // Species that can be used for a Custom Species icon base //Customizables GLOBAL_LIST_INIT(headsetlist, list("Standard","Bowman","Earbud")) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index b32708f45d..fef15310ac 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -20,13 +20,13 @@ /obj/item/borg/upgrade/proc/generic_error(var/mob/living/silicon/robot/R, var/obj/item/borg/type) type = lowertext(initial(type.name)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint for \the \"[type]\" detected!") - to_chat(usr, "There's no mounting point for \the \"[type]\" module!") + to_chat(R, span_warning("Upgrade mounting error! No suitable hardpoint for \the \"[type]\" detected!")) + to_chat(usr, span_warning("There's no mounting point for \the \"[type]\" module!")) /obj/item/borg/upgrade/proc/software_error(var/mob/living/silicon/robot/R, var/obj/item/borg/type) type = lowertext(initial(type.name)) - to_chat(R, "Upgrade installation error! Incompatibility with \the \"[type]\" detected!") - to_chat(usr, "\The \"[type]\" upgrade is not compatibile!") + to_chat(R, span_warning("Upgrade installation error! Incompatibility with \the \"[type]\" detected!")) + to_chat(usr, span_warning("\The \"[type]\" upgrade is not compatibile!")) /* ###################################################################################################### # Utility section. All reusable upgrades without lasting effects, like renaming, reset, etc. go here.# @@ -85,7 +85,7 @@ return 0 if(R.health < 0) - to_chat(usr, "You have to repair the robot before using this module!") + to_chat(usr, span_warning("You have to repair the robot before using this module!")) return 0 if(!R.key) @@ -118,13 +118,14 @@ if(..()) return 0 if(R.has_basic_upgrade(type)) - to_chat(R, "Actuator already running on overdrive mode!") - to_chat(usr, "It'd be unwise to plug another vtec module in!") + to_chat(R,span_warning("Actuator already running on overdrive mode!")) + to_chat(usr, span_warning("It'd be unwise to plug another vtec module in!")) return 0 add_verb(R, /mob/living/silicon/robot/proc/toggle_vtec) R.vtec_active = TRUE R.hud_used.toggle_vtec_control() + to_chat(R, span_notice("Actuator overdrive enabled!")) return 1 /obj/item/borg/upgrade/basic/sizeshift @@ -138,11 +139,12 @@ if(..()) return 0 if(R.has_basic_upgrade(type)) - to_chat(R, "Size alteration module already applied!") - to_chat(usr, "There's no space for another size alteration module!") + to_chat(R, span_warning("Size alteration module already applied!")) + to_chat(usr, span_warning("There's no space for another size alteration module!")) return 0 add_verb(R, /mob/living/proc/set_size) + to_chat(R, span_notice("Size adjustments active!")) return 1 /obj/item/borg/upgrade/basic/syndicate @@ -156,8 +158,8 @@ if(..()) return 0 if(R.has_basic_upgrade(type)) - to_chat(R, "Secret modules already unlocked!") - to_chat(usr, "Plugging another scambled module would be useless!") + to_chat(R, span_warning("Secret modules already unlocked!")) + to_chat(usr, span_warning("Plugging another scambled module would be useless!")) return 0 R.emag_items = 1 @@ -174,8 +176,8 @@ if(..()) return 0 if(R.has_basic_upgrade(type)) - to_chat(R, "All possible languages already uploaded!") - to_chat(usr, "The language database is up to date!") + to_chat(R, span_warning("All possible languages already uploaded!")) + to_chat(usr, span_warning("The language database is up to date!")) return 0 R.add_language(LANGUAGE_SOL_COMMON, 1) @@ -219,6 +221,7 @@ R.add_language(LANGUAGE_SHADEKIN, 1) */ + to_chat(R, span_notice("Language database updated!")) return 1 /* ########################################################################### @@ -244,15 +247,15 @@ return 0 if(R.has_advanced_upgrade(type)) - to_chat(R, "Maximum capacity achieved for this hardpoint!") - to_chat(usr, "There's no room for another capacity upgrade!") + to_chat(R, span_warning("Maximum capacity achieved for this hardpoint!")) + to_chat(usr, span_warning("There's no room for another capacity upgrade!")) return 0 var/obj/item/dogborg/sleeper/B = T var/X = B.max_item_count*2 B.max_item_count = X //I couldn't do T = maxitem*2 for some reason. - to_chat(R, "Internal capacity doubled.") - to_chat(usr, "Internal capacity doubled.") + to_chat(R, span_notice("Internal capacity doubled.")) + to_chat(usr, span_notice("Internal capacity doubled.")) B.upgraded_capacity = TRUE return 1 @@ -290,6 +293,7 @@ return 0 R.module.modules += new/obj/item/healthanalyzer/advanced(R.module) + to_chat(R, span_notice("Advanced health analyzer initialized!")) return 1 //Robot size gun @@ -336,15 +340,15 @@ return 0 if(R.has_restricted_upgrade(type)) - to_chat(R, "Maximum capability achieved for this hardpoint!") - to_chat(usr, "There's no room for another capability upgrade!") + to_chat(R, span_warning("Maximum capability achieved for this hardpoint!")) + to_chat(usr, span_warning("There's no room for another capability upgrade!")) return 0 var/obj/item/dogborg/sleeper/B = T var/X = B.max_item_count*2 //double the capacity from 1 to 2 to allow sleepers to store some items, at most 4 with both upgrades B.max_item_count = X //I couldn't do T = maxitem*2 for some reason. - to_chat(R, "Internal capability upgraded.") - to_chat(usr, "Internal capability upgraded.") + to_chat(R, span_notice("Internal capability upgraded.")) + to_chat(usr, span_notice("Internal capability upgraded.")) B.compactor = TRUE return 1 @@ -370,12 +374,13 @@ return 0 if(R.has_restricted_upgrade(type)) - to_chat(R, "Maximum cooling achieved for this hardpoint!") - to_chat(usr, "There's no room for another cooling unit!") + to_chat(R, span_warning("Maximum cooling achieved for this hardpoint!")) + to_chat(usr, span_warning("There's no room for another cooling unit!")) return 0 var/obj/item/gun/energy/robotic/taser/B = T B.recharge_time = max(2 , B.recharge_time - 4) + to_chat(R, span_notice("Taser cooling upgraded!")) return 1 //Advanced RPED @@ -447,6 +452,36 @@ R.module.modules += new/obj/item/gun/energy/kinetic_accelerator/cyborg(R.module) return 1 +/obj/item/borg/upgrade/restricted/adv_scanner + name = "robotic Ore Scanning Upgrade Module" + desc = "Used to improve the integrated robot scanning module, allowing for larger more fine-tuned scan ranges." + icon_state = "cyborg_upgrade3" + item_state = "cyborg_upgrade" + module_flags = BORG_MODULE_MINER + require_module = 1 + +/obj/item/borg/upgrade/restricted/adv_scanner/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(!R.supports_upgrade(type)) + generic_error(R, type) + return 0 + + var/obj/target_module = R.has_upgrade_module(/obj/item/mining_scanner/robot) + if(!target_module) + to_chat(usr, span_warning("This robot has had its scanner removed!")) + return 0 + + if(R.has_restricted_upgrade(type)) + to_chat(R, span_warning("Scanner was already upgraded!")) + to_chat(usr, span_warning("There's no room for another scanning upgrade!")) + return 0 + + var/obj/item/mining_scanner/robot/robot_scanner = target_module + robot_scanner.upgrade() + to_chat(R, span_notice("Mining scanner upgraded!")) + return 1 + /* ############################################### # Unsorted section. All cargo modules go here.# ###############################################*/ diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 9463ed73ba..7d10a0784f 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -27,7 +27,7 @@ ..() /datum/gear_tweak/color/get_contents(var/metadata) - return "Color: " + return "Color: " /datum/gear_tweak/color/get_default() return valid_colors ? valid_colors[1] : COLOR_GRAY diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm index 268fbdde19..2f90ce85b6 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm @@ -440,27 +440,13 @@ /obj/item/mining_scanner/robot name = "integrated deep scan device" - description_info = "This scanner can be upgraded for mining points." - var/upgrade_cost = 2500 - -/obj/item/mining_scanner/robot/attackby(obj/item/O, mob/user) - if(exact) - return - if(!istype(O, /obj/item/card/id/cargo/miner/borg)) - return - if(!(user == loc || user == loc.loc)) - return - var/obj/item/card/id/cargo/miner/borg/id = O - if(!id.adjust_mining_points(-upgrade_cost)) - return - upgrade(user) + description_info = "A basic, integrated ore scanning device which can be upgraded." /obj/item/mining_scanner/robot/proc/upgrade(mob/user) desc = "An advanced device used to locate ore deep underground." description_info = "This scanner has variable range, you can use the Set Scanner Range verb, or alt+click the device. Drills dig in 5x5." scan_time = 0.5 SECONDS exact = TRUE - to_chat(user, span_notice("You've upgraded the mining scanner for [upgrade_cost] points.")) /obj/item/mining_scanner/robot/click_alt(mob/user) change_size(user) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index f2d01df56e..998196797d 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1570,6 +1570,14 @@ return "" // Return this to have the analyzer show an error if the module is missing. FALSE / NULL are used for missing upgrades themselves else return FALSE + if(given_type == /obj/item/borg/upgrade/restricted/adv_scanner) + var/obj/item/mining_scanner/robot/robot_scanner = has_upgrade_module(/obj/item/mining_scanner/robot) + if(robot_scanner && robot_scanner.exact) + return robot_scanner + else if(!robot_scanner) + return "" // Return this to have the analyzer show an error if the module is missing. FALSE / NULL are used for missing upgrades themselves + else + return FALSE if(given_type == /obj/item/borg/upgrade/restricted/advrped) return has_upgrade_module(/obj/item/storage/part_replacer/adv) if(given_type == /obj/item/borg/upgrade/restricted/diamonddrill) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 85cb519cd3..907e180e0d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -622,7 +622,7 @@ name = "miner robot module" channels = list(CHANNEL_SUPPLY = 1) networks = list(NETWORK_MINE) - supported_upgrades = list(/obj/item/borg/upgrade/restricted/pka, /obj/item/borg/upgrade/restricted/diamonddrill) + supported_upgrades = list(/obj/item/borg/upgrade/restricted/pka, /obj/item/borg/upgrade/restricted/diamonddrill, /obj/item/borg/upgrade/restricted/adv_scanner) pto_type = PTO_CARGO /obj/item/robot_module/robot/miner/create_equipment(var/mob/living/silicon/robot/robot) diff --git a/code/modules/research/tg/designs/prosfab_designs.dm b/code/modules/research/tg/designs/prosfab_designs.dm index 72c1c9d843..679dcf6248 100644 --- a/code/modules/research/tg/designs/prosfab_designs.dm +++ b/code/modules/research/tg/designs/prosfab_designs.dm @@ -477,6 +477,17 @@ materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 500, MAT_PLATINUM = 350) build_path = /obj/item/borg/upgrade/restricted/pka +/datum/design_techweb/prosfab/robot_upgrade/restricted/adv_scanner + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_RESTRICTED + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING + ) + name = "Ore Scanning Upgrade" + desc = "An upgrade module to improve the potency of the integrated ore scanner." + id = "borg_adv_scanner_module" + // req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5, TECH_POWER = 4) + materials = list(MAT_STEEL = 6000, MAT_GLASS = 4000, MAT_GOLD = 2000, MAT_VERDANTIUM = 1500, MAT_DIAMOND = 350) + build_path = /obj/item/borg/upgrade/restricted/adv_scanner + /datum/design_techweb/prosfab/robot_upgrade/restricted/tasercooler category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_RESTRICTED + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SECURITY diff --git a/code/modules/research/tg/techwebs/nodes/mining_nodes.dm b/code/modules/research/tg/techwebs/nodes/mining_nodes.dm index 5091f8b86d..d6c9abab28 100644 --- a/code/modules/research/tg/techwebs/nodes/mining_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/mining_nodes.dm @@ -65,6 +65,7 @@ design_ids = list( "borg_pka_module", "pka_mineaoe", + "borg_adv_scanner_module", // "damagemod", // "cooldownmod", // "triggermod", diff --git a/tgui/packages/tgui/interfaces/Changelog/index.tsx b/tgui/packages/tgui/interfaces/Changelog/index.tsx index 302e656fe0..88ea607c76 100644 --- a/tgui/packages/tgui/interfaces/Changelog/index.tsx +++ b/tgui/packages/tgui/interfaces/Changelog/index.tsx @@ -5,6 +5,7 @@ import { resolveAsset } from 'tgui/assets'; import { useBackend } from 'tgui/backend'; import { Window } from 'tgui/layouts'; import { Stack } from 'tgui-core/components'; +import { fetchRetry } from 'tgui-core/http'; import { Changes } from './Changes'; import { DateDropdown } from './DateDropdown'; import { Footer } from './Resources/Footer'; @@ -38,7 +39,7 @@ export const Changelog = (props) => { act('get_month', { date }); - fetch(resolveAsset(`${date}.yml`)).then(async (changelogData) => { + fetchRetry(resolveAsset(`${date}.yml`)).then(async (changelogData) => { const result = await changelogData.text(); const errorRegex = /^Cannot find/;