diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index e1fcefdd97f..70a8c331a68 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -70,12 +70,19 @@
#define ui_movi "EAST-2:26,SOUTH:5"
#define ui_acti "EAST-3:24,SOUTH:5"
#define ui_combat_toggle "EAST-3:24,SOUTH:5"
+#define ui_floor_change "BOTTOM+1:8,RIGHT-1:28"
#define ui_zonesel "EAST-1:28,SOUTH:5"
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
#define ui_crafting "EAST-4:22,SOUTH:5"
#define ui_building "EAST-4:22,SOUTH:21"
#define ui_language_menu "EAST-4:6,SOUTH:21"
#define ui_navigate_menu "EAST-4:6,SOUTH:5"
+#define ui_memories_menu "EAST-4:6,SOUTH:5"
+
+//basic mob-unique ui
+#define ui_basic_combat_toggle "EAST-1:28,SOUTH:6"
+#define ui_basic_language_menu "BOTTOM+1:26,RIGHT-1:28"
+#define ui_basic_memories_menu "BOTTOM+1:26,RIGHT-1:12"
//Upper left (action buttons)
#define ui_action_palette "WEST+0:23,NORTH-1:5"
@@ -114,6 +121,7 @@
#define ui_human_navigate "EAST-3:7,SOUTH+1:7"
#define ui_human_language "EAST-3:7,SOUTH+1:24"
#define ui_human_area "EAST-3:24,SOUTH+1:24"
+#define ui_human_memories_area "EAST-4:22,SOUTH+1:7"
//Drones
#define ui_drone_drop "CENTER+1:18,SOUTH:5"
@@ -123,7 +131,7 @@
//Cyborgs
#define ui_borg_health "EAST-1:28,CENTER-1:15"
-#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
+#define ui_borg_pull "EAST-3:26,SOUTH:5"
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
#define ui_borg_intents "EAST-2:26,SOUTH:5"
#define ui_borg_lamp "CENTER-3:16, SOUTH:5"
@@ -132,11 +140,11 @@
#define ui_inv2 "CENTER-1 :16,SOUTH:5"
#define ui_inv3 "CENTER :16,SOUTH:5"
#define ui_borg_module "CENTER+1:16,SOUTH:5"
-#define ui_borg_store "CENTER+2:16,SOUTH:5"
-#define ui_borg_camera "CENTER+3:21,SOUTH:5"
-#define ui_borg_alerts "CENTER+4:21,SOUTH:5"
-#define ui_borg_language_menu "CENTER+4:19,SOUTH+1:6"
-#define ui_borg_navigate_menu "CENTER+4:3,SOUTH+1:6"
+#define ui_borg_camera "CENTER+2:16,SOUTH:5"
+#define ui_borg_alerts "CENTER+3:16,SOUTH:5"
+#define ui_borg_language_menu "EAST-2:26,SOUTH+1:8"
+#define ui_borg_navigate_menu "EAST-2:10,SOUTH+1:8"
+#define ui_borg_memories_menu "EAST-2:26,SOUTH+1:24"
#define ui_borg_floor_changer "EAST-1:28,SOUTH+1:39"
//Aliens
@@ -144,9 +152,10 @@
#define ui_alienplasmadisplay "EAST,CENTER-2:15"
#define ui_alien_queen_finder "EAST,CENTER-3:15"
#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"
-#define ui_alien_language_menu "EAST-4:20,SOUTH:5"
-#define ui_alien_navigate_menu "EAST-4:4,SOUTH:5"
-#define ui_alien_floor_change "EAST-3:24, SOUTH:24"
+#define ui_alien_language_menu "EAST-4:22,SOUTH:5"
+#define ui_alien_navigate_menu "EAST-4:6,SOUTH:5"
+#define ui_alien_memories_menu "EAST-4:22,SOUTH:1:20"
+#define ui_alien_floor_change "EAST-3:24,SOUTH:20"
//AI
#define ui_ai_core "BOTTOM:6,RIGHT-4"
@@ -154,7 +163,8 @@
#define ui_ai_announcement "BOTTOM:6,RIGHT-2"
#define ui_ai_state_laws "BOTTOM:6,RIGHT-1"
#define ui_ai_mod_int "BOTTOM:6,RIGHT"
-#define ui_ai_language_menu "BOTTOM+1:8,RIGHT-1:30"
+#define ui_ai_language_menu "BOTTOM+1:6,RIGHT-1:30"
+#define ui_ai_memories_menu "BOTTOM+1:22,RIGHT-1:30"
#define ui_ai_crew_monitor "BOTTOM:6,CENTER-1"
#define ui_ai_crew_manifest "BOTTOM:6,CENTER"
@@ -188,6 +198,7 @@
#define ui_pai_radio "SOUTH:5,EAST-1:28"
#define ui_pai_language_menu "SOUTH:1:37,EAST-1:12"
#define ui_pai_navigate_menu "SOUTH:1:37,EAST-1:28"
+#define ui_pai_memories_menu "SOUTH:5:50,EAST-1:28"
//Ghosts
#define ui_ghost_spawners_menu "SOUTH:6,CENTER-3:24"
diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm
index 1e50b838289..728439e5fad 100644
--- a/code/_onclick/hud/ai.dm
+++ b/code/_onclick/hud/ai.dm
@@ -244,9 +244,16 @@
// Language menu
using = new /atom/movable/screen/language_menu(null, src)
+ using.icon = ui_style
using.screen_loc = ui_ai_language_menu
static_inventory += using
+// Memories
+ using = new /atom/movable/screen/memories(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_ai_memories_menu
+ static_inventory += using
+
// Z-level floor change
using = new /atom/movable/screen/ai/floor_indicator(null, src) //These come with their own predefined screen locs
static_inventory += using
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 9609ff4977f..822fe712850 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -65,13 +65,20 @@
static_inventory += floor_change
using = new/atom/movable/screen/language_menu(null, src)
+ using.icon = ui_style
using.screen_loc = ui_alien_language_menu
static_inventory += using
using = new /atom/movable/screen/navigate(null, src)
+ using.icon = ui_style
using.screen_loc = ui_alien_navigate_menu
static_inventory += using
+ using = new /atom/movable/screen/memories(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_alien_memories_menu
+ static_inventory += using
+
using = new /atom/movable/screen/drop(null, src)
using.icon = ui_style
using.screen_loc = ui_drop_throw
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index c49c97e5ec4..3331ac8c790 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -45,6 +45,10 @@
using.screen_loc = ui_alien_navigate_menu
static_inventory += using
+ using = new /atom/movable/screen/memories(null, src)
+ using.screen_loc = ui_alien_memories_menu
+ static_inventory += using
+
zone_select = new /atom/movable/screen/zone_sel/alien(null, src)
zone_select.update_appearance()
static_inventory += zone_select
diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm
index b6d2d439c06..14b332d0c3c 100644
--- a/code/_onclick/hud/ghost.dm
+++ b/code/_onclick/hud/ghost.dm
@@ -141,6 +141,9 @@
hud_icon_state = "darkness_vision"
relevant_flag = GHOST_DARKNESS_LEVEL
+/datum/hud/ghost
+ ui_style = 'icons/hud/screen_ghost.dmi'
+
/datum/hud/ghost/New(mob/owner)
..()
var/atom/movable/screen/using
@@ -173,11 +176,13 @@
using.screen_loc = ui_ghost_minigames
static_inventory += using
- using = new /atom/movable/screen/language_menu/ghost(null, src)
+ using = new /atom/movable/screen/language_menu(null, src)
+ using.icon = ui_style
using.screen_loc = ui_ghost_language_menu
static_inventory += using
- floor_change = new /atom/movable/screen/floor_changer/vertical/ghost(null, src)
+ floor_change = new /atom/movable/screen/floor_changer/vertical(null, src)
+ floor_change.icon = ui_style
floor_change.screen_loc = ui_ghost_floor_changer
static_inventory += floor_change
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 41367d95d81..b4b4bc0af17 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -349,9 +349,6 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
screenmob.client.screen += open_containers
screenmob.client.screen += toggle_palette
- if(action_intent)
- action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position
-
if(HUD_STYLE_REDUCED) //Reduced HUD
hud_shown = FALSE //Governs behavior of other procs
if(static_inventory.len)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 3ccab614996..b156a01eeb2 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -71,6 +71,11 @@
using.screen_loc = ui_human_area
static_inventory += using
+ using = new /atom/movable/screen/memories(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_human_memories_area
+ static_inventory += using
+
action_intent = new /atom/movable/screen/combattoggle/flashy(null, src)
action_intent.icon = ui_style
action_intent.screen_loc = ui_combat_toggle
diff --git a/code/_onclick/hud/living.dm b/code/_onclick/hud/living.dm
index e0d684a4bd5..e9237d6dbb5 100644
--- a/code/_onclick/hud/living.dm
+++ b/code/_onclick/hud/living.dm
@@ -1,6 +1,3 @@
-/datum/hud/living
- ui_style = 'icons/hud/screen_gen.dmi'
-
/datum/hud/living/New(mob/living/owner)
..()
@@ -11,15 +8,28 @@
static_inventory += pull_icon
action_intent = new /atom/movable/screen/combattoggle/flashy(null, src)
- action_intent.icon = 'icons/hud/screen_midnight.dmi'
- action_intent.screen_loc = ui_combat_toggle
+ action_intent.icon = ui_style
+ action_intent.screen_loc = ui_basic_combat_toggle
static_inventory += action_intent
floor_change = new /atom/movable/screen/floor_changer(null, src)
- floor_change.icon = 'icons/hud/screen_midnight.dmi'
+ floor_change.icon = ui_style
+ floor_change.screen_loc = ui_floor_change
static_inventory += floor_change
- //mob health doll! assumes whatever sprite the mob is
+ var/atom/movable/screen/using
+
+ using = new /atom/movable/screen/language_menu(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_basic_language_menu
+ static_inventory += using
+
+ using = new /atom/movable/screen/memories(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_basic_memories_menu
+ static_inventory += using
+
+ //mob health doll assumes whatever sprite the mob is
healthdoll = new /atom/movable/screen/healthdoll/living(null, src)
infodisplay += healthdoll
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index cfdd235a503..498d58dccb2 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -6,23 +6,29 @@
name = "cyborg module"
icon_state = "nomod"
-/atom/movable/screen/robot/Click()
+/atom/movable/screen/robot/Click(location, control, params)
if(isobserver(usr))
return TRUE
-/atom/movable/screen/robot/module/Click()
- //observers can look at borg's inventories
- var/mob/living/silicon/robot/robot_owner = hud.mymob
- if(robot_owner.model.type != /obj/item/robot_model)
- if(usr.active_storage == robot_owner.model.atom_storage)
- robot_owner.model.atom_storage.hide_contents(usr)
- else
- robot_owner.model.atom_storage.open_storage(usr)
- return TRUE
+/atom/movable/screen/robot/module/Click(location, control, params)
. = ..()
- if(.)
+ var/mob/living/silicon/robot/robot_owner = hud.mymob
+ if(robot_owner.model.type == /obj/item/robot_model)
+ if(.)
+ return
+ robot_owner.pick_model()
return
- robot_owner.pick_model()
+ var/list/modifiers = params2list(params)
+ if(robot_owner.module_active && !LAZYACCESS(modifiers, RIGHT_CLICK) && !.)
+ robot_owner.uneq_active()
+ return
+
+ //observers can look at borg's inventories, so we ignore parent return value here, unlike everywhere else.
+ if(usr.active_storage == robot_owner.model.atom_storage)
+ robot_owner.model.atom_storage.hide_contents(usr)
+ else
+ robot_owner.model.atom_storage.open_storage(usr)
+ return TRUE
/atom/movable/screen/robot/module1
name = "module1"
@@ -64,17 +70,6 @@
var/mob/living/silicon/robot/R = usr
R.radio.interact(R)
-/atom/movable/screen/robot/store
- name = "store"
- icon_state = "store"
- screen_loc = ui_borg_store
-
-/atom/movable/screen/robot/store/Click()
- if(..())
- return
- var/mob/living/silicon/robot/R = usr
- R.uneq_active()
-
/datum/hud/robot
ui_style = 'icons/hud/screen_cyborg.dmi'
@@ -86,14 +81,22 @@
// Language
using = new/atom/movable/screen/language_menu(null, src)
+ using.icon = ui_style
using.screen_loc = ui_borg_language_menu
static_inventory += using
// Navigation
using = new /atom/movable/screen/navigate(null, src)
+ using.icon = ui_style
using.screen_loc = ui_borg_navigate_menu
static_inventory += using
+// Memories
+ using = new /atom/movable/screen/memories(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_borg_memories_menu
+ static_inventory += using
+
//Radio
using = new /atom/movable/screen/robot/radio(null, src)
using.screen_loc = ui_borg_radio
@@ -148,7 +151,7 @@
//Combat Mode
action_intent = new /atom/movable/screen/combattoggle/robot(null, src)
action_intent.icon = ui_style
- action_intent.screen_loc = ui_combat_toggle
+ action_intent.screen_loc = ui_borg_intents
static_inventory += action_intent
floor_change = new /atom/movable/screen/floor_changer(null, src)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 42a9e4f5c68..533099c3918 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -165,8 +165,18 @@
/atom/movable/screen/language_menu/Click()
usr.get_language_holder().open_language_menu(usr)
-/atom/movable/screen/language_menu/ghost
- icon = 'icons/hud/screen_ghost.dmi'
+/atom/movable/screen/memories
+ name = "Memories"
+ icon = 'icons/hud/screen_midnight.dmi'
+ icon_state = "memories"
+ screen_loc = ui_memories_menu
+ mouse_over_pointer = MOUSE_HAND_POINTER
+
+/atom/movable/screen/memories/Click()
+ if(!isliving(usr))
+ return TRUE
+ var/mob/living/daydreamer = usr
+ daydreamer.open_memory_panel()
/atom/movable/screen/inventory
/// The identifier for the slot. It has nothing to do with ID cards.
@@ -393,9 +403,6 @@
icon_state = "floor_change_v"
vertical = TRUE
-/atom/movable/screen/floor_changer/vertical/ghost
- icon = 'icons/hud/screen_ghost.dmi'
-
/atom/movable/screen/spacesuit
name = "Space suit cell status"
icon_state = "spacesuit_0"
diff --git a/code/datums/storage/storage_interface.dm b/code/datums/storage/storage_interface.dm
index 3f3c6c56e0c..1f358af00ef 100644
--- a/code/datums/storage/storage_interface.dm
+++ b/code/datums/storage/storage_interface.dm
@@ -127,24 +127,11 @@
///Silicon subtype of storage interface used by their model storage.
/datum/storage_interface/silicon
- var/atom/movable/screen/robot/store/store
var/obj/item/robot_model/robot_model
/datum/storage_interface/silicon/New(ui_style, datum/storage/parent_storage, mob/user)
. = ..()
robot_model = parent_storage.real_location
- if(iscyborg(user))
- store = new(null, user.hud_used)
-
-/datum/storage_interface/silicon/Destroy(force)
- QDEL_NULL(store)
- return ..()
-
-/datum/storage_interface/silicon/list_ui_elements(initializing = FALSE)
- if(initializing || isnull(store))
- return ..()
- //we're purposely excluding 'store' from having its icon changed from initialization.
- return ..() + store
/datum/storage_interface/silicon/add_items(
screen_start_x,
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 9cbaeb0dd45..11f5de5190b 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -110,7 +110,7 @@
/obj/item/stack/update_name(updates)
. = ..()
- maptext = (ismob(loc) || loc?.atom_storage) ? MAPTEXT("[amount]") : ""
+ maptext = (ismob(loc) || loc?.atom_storage) ? MAPTEXT("[get_amount()]") : ""
/obj/item/stack/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
. = ..()
@@ -571,7 +571,10 @@
if(check && is_zero_amount(delete_if_zero = TRUE))
return FALSE
if(is_cyborg)
- return source.use_charge(used * cost)
+ if(source.use_charge(used * cost))
+ update_appearance(UPDATE_NAME)
+ return TRUE
+ return FALSE
if (amount < used)
return FALSE
amount -= used
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index 8349c159488..d7a320c6e67 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -71,7 +71,7 @@
//this is the cyborg equivalent of dropped(), though we call that too in doUnEquip.
item_dropping.cyborg_unequip(src)
deselect_module(module_num)
-
+ playsound_local(src, SFX_RUSTLE, 40, TRUE)
/mob/living/silicon/robot/update_held_items()
. = ..()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index a29d7b07969..4a690abbf16 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1607,6 +1607,18 @@
mind.memory_panel = new(usr, mind)
mind.memory_panel.ui_interact(usr)
+///Shows a tgui window with memories
+/mob/proc/open_memory_panel()
+ if(!mind)
+ var/fail_message = "You have no mind!"
+ if(isobserver(src))
+ fail_message += " You have to be in the current round at some point to have one."
+ to_chat(src, span_warning(fail_message))
+ return
+ if(!mind.memory_panel)
+ mind.memory_panel = new(usr, mind)
+ mind.memory_panel.ui_interact(usr)
+
/datum/memory_panel
var/datum/mind/mind_reference
var/client/holder //client of whoever is using this datum
diff --git a/code/modules/pai/hud.dm b/code/modules/pai/hud.dm
index cb7a5c9df39..fb1fd483116 100644
--- a/code/modules/pai/hud.dm
+++ b/code/modules/pai/hud.dm
@@ -177,6 +177,9 @@
var/mob/living/silicon/pai/pAI = usr
pAI.radio.interact(usr)
+/datum/hud/pai
+ ui_style = 'icons/hud/screen_pai.dmi'
+
/datum/hud/pai/New(mob/living/silicon/pai/owner)
..()
var/atom/movable/screen/using
@@ -213,11 +216,19 @@
// Language menu
using = new /atom/movable/screen/language_menu(null, src)
+ using.icon = ui_style
using.screen_loc = ui_pai_language_menu
static_inventory += using
+// Memories
+ using = new /atom/movable/screen/memories(null, src)
+ using.icon = ui_style
+ using.screen_loc = ui_pai_memories_menu
+ static_inventory += using
+
// Navigation
using = new /atom/movable/screen/navigate(null, src)
+ using.icon = ui_style
using.screen_loc = ui_pai_navigate_menu
static_inventory += using
diff --git a/icons/hud/screen_ai.dmi b/icons/hud/screen_ai.dmi
index ea456ca3947..683db60b419 100644
Binary files a/icons/hud/screen_ai.dmi and b/icons/hud/screen_ai.dmi differ
diff --git a/icons/hud/screen_alien.dmi b/icons/hud/screen_alien.dmi
index 43a3f9e6dcb..4331616facd 100644
Binary files a/icons/hud/screen_alien.dmi and b/icons/hud/screen_alien.dmi differ
diff --git a/icons/hud/screen_clockwork.dmi b/icons/hud/screen_clockwork.dmi
index 7af6be4602f..1f8d7a1f165 100644
Binary files a/icons/hud/screen_clockwork.dmi and b/icons/hud/screen_clockwork.dmi differ
diff --git a/icons/hud/screen_cyborg.dmi b/icons/hud/screen_cyborg.dmi
index d9ed854db12..5cad689a235 100644
Binary files a/icons/hud/screen_cyborg.dmi and b/icons/hud/screen_cyborg.dmi differ
diff --git a/icons/hud/screen_detective.dmi b/icons/hud/screen_detective.dmi
index 5188b3b8fd9..5ac768712bf 100644
Binary files a/icons/hud/screen_detective.dmi and b/icons/hud/screen_detective.dmi differ
diff --git a/icons/hud/screen_glass.dmi b/icons/hud/screen_glass.dmi
index c0ac804fc8b..80fc95c2d7d 100644
Binary files a/icons/hud/screen_glass.dmi and b/icons/hud/screen_glass.dmi differ
diff --git a/icons/hud/screen_midnight.dmi b/icons/hud/screen_midnight.dmi
index e382bbca0d6..b932aa1ed93 100644
Binary files a/icons/hud/screen_midnight.dmi and b/icons/hud/screen_midnight.dmi differ
diff --git a/icons/hud/screen_operative.dmi b/icons/hud/screen_operative.dmi
index 7b472e907e5..2d2192e6423 100644
Binary files a/icons/hud/screen_operative.dmi and b/icons/hud/screen_operative.dmi differ
diff --git a/icons/hud/screen_pai.dmi b/icons/hud/screen_pai.dmi
index 3af44930e0a..87863739160 100644
Binary files a/icons/hud/screen_pai.dmi and b/icons/hud/screen_pai.dmi differ
diff --git a/icons/hud/screen_plasmafire.dmi b/icons/hud/screen_plasmafire.dmi
index e6602b9e42b..8ab8f2e4e54 100644
Binary files a/icons/hud/screen_plasmafire.dmi and b/icons/hud/screen_plasmafire.dmi differ
diff --git a/icons/hud/screen_retro.dmi b/icons/hud/screen_retro.dmi
index 8273eb5e963..de495e8a408 100644
Binary files a/icons/hud/screen_retro.dmi and b/icons/hud/screen_retro.dmi differ
diff --git a/icons/hud/screen_slimecore.dmi b/icons/hud/screen_slimecore.dmi
index 9f25a0ea510..561b8151342 100644
Binary files a/icons/hud/screen_slimecore.dmi and b/icons/hud/screen_slimecore.dmi differ
diff --git a/icons/hud/screen_trasenknox.dmi b/icons/hud/screen_trasenknox.dmi
index 93ad3c08ce8..b8dfed363b7 100644
Binary files a/icons/hud/screen_trasenknox.dmi and b/icons/hud/screen_trasenknox.dmi differ