diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index bef72ebbff..4f874dc29f 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -356,7 +356,7 @@ GLOBAL_LIST_EMPTY(text_tag_cache) if(!(C && C.prefs?.read_preference(/datum/preference/toggle/chat_tags))) return tagdesc if(!GLOB.text_tag_cache[tagname]) - var/datum/asset/spritesheet/chatassets = get_asset_datum(/datum/asset/spritesheet/chat) + var/datum/asset/spritesheet_batched/chatassets = get_asset_datum(/datum/asset/spritesheet_batched/chat) GLOB.text_tag_cache[tagname] = chatassets.icon_tag(tagname) if(!C.tgui_panel.is_ready() || C.tgui_panel.oldchat) return "[tagdesc]" diff --git a/code/modules/admin/modify_robot.dm b/code/modules/admin/modify_robot.dm index 608edda144..c80a1c96f1 100644 --- a/code/modules/admin/modify_robot.dm +++ b/code/modules/admin/modify_robot.dm @@ -45,13 +45,13 @@ /datum/eventkit/modify_robot/ui_assets(mob/user) return list( - get_asset_datum(/datum/asset/spritesheet/robot_icons) + get_asset_datum(/datum/asset/spritesheet_batched/robot_icons) ) /datum/eventkit/modify_robot/tgui_data(mob/user) . = list() // Target section for general data - var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) + var/datum/asset/spritesheet_batched/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/robot_icons) if(target) .["target"] = list() @@ -589,7 +589,7 @@ target_items += list(list("name" = item.name, "ref" = "\ref[item]", "icon" = icon2html(item, user, sourceonly=TRUE), "desc" = item.desc)) return target_items -/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user, var/datum/asset/spritesheet/robot_icons/spritesheet) +/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user, var/datum/asset/spritesheet_batched/robot_icons/spritesheet) var/list/source_list = list() source_list["model"] = source.module source_list["sprite"] = sanitize_css_class_name("[source.sprite_datum.type]") diff --git a/code/modules/asset_cache/assets/spritesheets/chat.dm b/code/modules/asset_cache/assets/spritesheets/chat.dm index cbaf4ac35b..7f3922e613 100644 --- a/code/modules/asset_cache/assets/spritesheets/chat.dm +++ b/code/modules/asset_cache/assets/spritesheets/chat.dm @@ -1,5 +1,5 @@ -/datum/asset/spritesheet/chat +/datum/asset/spritesheet_batched/chat name = "chat" -/datum/asset/spritesheet/chat/create_spritesheets() - InsertAll("", text_tag_icons) // OOC, LOOC ect icons +/datum/asset/spritesheet_batched/chat/create_spritesheets() + insert_all_icons("", text_tag_icons, prefix_with_dirs = FALSE) // OOC, LOOC ect icons diff --git a/code/modules/asset_cache/assets/spritesheets/robot_icons.dm b/code/modules/asset_cache/assets/spritesheets/robot_icons.dm index 7935c5af7e..bcba8ccfba 100644 --- a/code/modules/asset_cache/assets/spritesheets/robot_icons.dm +++ b/code/modules/asset_cache/assets/spritesheets/robot_icons.dm @@ -1,36 +1,52 @@ -/datum/asset/spritesheet/robot_icons +/datum/asset/spritesheet_batched/robot_icons name = "robot_icons" -/datum/asset/spritesheet/robot_icons/create_spritesheets() +/datum/asset/spritesheet_batched/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck continue - var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) - var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) - var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) - var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) + + var/datum/universal_icon/I_N = uni_icon(S.sprite_icon, S.sprite_icon_state, NORTH) + var/datum/universal_icon/I_S = uni_icon(S.sprite_icon, S.sprite_icon_state, SOUTH) + var/datum/universal_icon/I_W = uni_icon(S.sprite_icon, S.sprite_icon_state, WEST) + var/datum/universal_icon/I_E = uni_icon(S.sprite_icon, S.sprite_icon_state, EAST) + if(S.has_eye_sprites) - var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) + var/datum/universal_icon/I_NE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) if(I_NE) - I_N.Blend(I_NE, ICON_OVERLAY) + I_N.blend_icon(I_NE, ICON_OVERLAY) if(S.has_eye_sprites) - var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) + var/datum/universal_icon/I_SE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) if(I_SE) - I_S.Blend(I_SE, ICON_OVERLAY) + I_S.blend_icon(I_SE, ICON_OVERLAY) if(S.has_eye_sprites) - var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) + var/datum/universal_icon/I_WE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) if(I_WE) - I_W.Blend(I_WE, ICON_OVERLAY) + I_W.blend_icon(I_WE, ICON_OVERLAY) if(S.has_eye_sprites) - var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) + var/datum/universal_icon/I_EE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) if(I_EE) - I_E.Blend(I_EE, ICON_OVERLAY) + I_E.blend_icon(I_EE, ICON_OVERLAY) + var/imgid = sanitize_css_class_name("[S.type]") - I_N.Scale(120, 120) - I_S.Scale(120, 120) - I_W.Scale(120, 120) - I_E.Scale(120, 120) - Insert(imgid + "N", I_N) - Insert(imgid + "S", I_S) - Insert(imgid + "W", I_W) - Insert(imgid + "E", I_E) + if(S.icon_x > S.icon_y) + var/buffer = (S.icon_x - S.icon_y) / 2 + I_N.crop(0, -buffer, S.icon_x, S.icon_y + buffer) + I_S.crop(0, -buffer, S.icon_x, S.icon_y + buffer) + I_W.crop(0, -buffer, S.icon_x, S.icon_y + buffer) + I_E.crop(0, -buffer, S.icon_x, S.icon_y + buffer) + else if (S.icon_x < S.icon_y) + var/buffer = (S.icon_y - S.icon_x) / 2 + I_N.crop(-buffer, 0, S.icon_x + buffer, S.icon_y) + I_S.crop(-buffer, 0, S.icon_x + buffer, S.icon_y) + I_W.crop(-buffer, 0, S.icon_x + buffer, S.icon_y) + I_E.crop(-buffer, 0, S.icon_x + buffer, S.icon_y) + I_N.scale(120, 120) + I_S.scale(120, 120) + I_W.scale(120, 120) + I_E.scale(120, 120) + + insert_icon(imgid + "N", I_N) + insert_icon(imgid + "S", I_S) + insert_icon(imgid + "W", I_W) + insert_icon(imgid + "E", I_E) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 67d9de2f04..f66b451f66 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -357,6 +357,8 @@ sprite_datum = module_sprites[1] sprite_datum.do_equipment_glamour(module) return + if(mind) + sprite_name = mind.name if(!selecting_module) var/datum/tgui_module/robot_ui_module/ui = new(src) ui.tgui_interact(src) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index c671be6fef..353b4da946 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -23,7 +23,7 @@ /datum/tgui_module/robot_ui_module/ui_assets(mob/user) return list( - get_asset_datum(/datum/asset/spritesheet/robot_icons) + get_asset_datum(/datum/asset/spritesheet_batched/robot_icons) ) /datum/tgui_module/robot_ui_module/tgui_static_data() @@ -55,6 +55,7 @@ if(is_borg_whitelisted(R, module_name)) modules |= module_name data["possible_modules"] = modules + data["mind_name"] = R.mind.name if(R.emagged) data["theme"] = "syndicate" else if (R.ui_theme) @@ -66,7 +67,7 @@ var/list/data = ..() var/mob/living/silicon/robot/R = host - var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) + var/datum/asset/spritesheet_batched/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/robot_icons) data["currentName"] = new_name ? new_name : R.name data["isDefaultName"] = !new_name @@ -142,6 +143,7 @@ var/name = params["value"] if(name) new_name = sanitizeSafe(name, MAX_NAME_LEN) + R.sprite_name = new_name . = TRUE if("confirm") R.apply_name(new_name) diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index fc34c5cb25..2a1d544749 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -24,6 +24,8 @@ var/has_custom_equipment_sprites = FALSE var/vis_height = 32 var/pixel_x = 0 + var/icon_x = 32 + var/icon_y = 32 var/is_whitelisted = FALSE var/whitelist_ckey @@ -188,6 +190,8 @@ has_dead_sprite_overlay = TRUE has_custom_equipment_sprites = TRUE pixel_x = -16 + icon_x = 64 + icon_y = 32 /datum/robot_sprite/dogborg/do_equipment_glamour(var/obj/item/robot_module/module) if(!has_custom_equipment_sprites) @@ -207,7 +211,8 @@ has_dead_sprite_overlay = FALSE has_custom_equipment_sprites = FALSE vis_height = 64 - pixel_x = -16 + icon_x = 64 + icon_y = 64 // Default module sprite @@ -222,5 +227,6 @@ /datum/robot_sprite/dogborg/raptor has_dead_sprite_overlay = FALSE vis_height = 45 - pixel_x = -16 + icon_x = 64 + icon_y = 64 //CHOMPAdd End diff --git a/code/modules/mob/living/silicon/robot/sprites/fluff.dm b/code/modules/mob/living/silicon/robot/sprites/fluff.dm index 6312a73b03..b28bf461bf 100644 --- a/code/modules/mob/living/silicon/robot/sprites/fluff.dm +++ b/code/modules/mob/living/silicon/robot/sprites/fluff.dm @@ -19,6 +19,8 @@ has_dead_sprite = TRUE has_dead_sprite_overlay = TRUE pixel_x = -16 + icon_x = 64 + icon_y = 32 whitelist_ckey = "argonne" whitelist_charname = "RUSS" @@ -80,6 +82,8 @@ has_dead_sprite = TRUE has_dead_sprite_overlay = TRUE pixel_x = -16 + icon_x = 64 + icon_y = 32 whitelist_ckey = "jademanique" whitelist_charname = "B.A.U-Kingside" @@ -101,6 +105,8 @@ has_dead_sprite = TRUE has_dead_sprite_overlay = TRUE pixel_x = -16 + icon_x = 64 + icon_y = 32 whitelist_ckey = "lunarfleet" whitelist_charname = "Clea-Nor" diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index 7d9ce80c45..df9920ce65 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -50,7 +50,7 @@ )) window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome)) window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/tgfont)) - window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat)) + window.send_asset(get_asset_datum(/datum/asset/spritesheet_batched/chat)) // Other setup request_telemetry() addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS) diff --git a/librust_g.so b/librust_g.so index c7810fbf80..c438782a22 100755 Binary files a/librust_g.so and b/librust_g.so differ diff --git a/rust_g.dll b/rust_g.dll index 9b400774fa..13b7be9cf6 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 3fd39c36e1..cd1b1088b9 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react'; import { useBackend } from 'tgui/backend'; import { Box, Button, Flex, Input, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; @@ -6,12 +7,14 @@ import { Tooltip } from '../../components'; export const IconSection = (props: { currentName: string; + mindName: string; isDefaultName: boolean; sprite?: string | null; size?: string | null; }) => { const { act } = useBackend(); - const { currentName, isDefaultName, sprite, size } = props; + const { currentName, mindName, isDefaultName, sprite, size } = props; + const [robotName, setRobotName] = useState(currentName); return (
Name: - + act('rename', { value })} + value={robotName} + onChange={(e, value) => { + act('rename', { value }); + setRobotName(value); + }} maxLength={52} textColor={isDefaultName ? 'red' : undefined} /> + +