corpse: each way a grave can draw no plate now says which one it was

He hovered a grave for the instrumentation and the log has **no** corpse line at
all — which, as the earlier note said, means the question is now a different
one: either no corpse object arrived, or the pick never landed on it, or the
plate refused it silently.

Two of those were still silent. The bone-pile refusal now logs too, though it is
the reference's own answer (`0x5d76d0`: bones with `CORPSE_FIELD_DYNAMIC_FLAGS`
bit 0 clear shows no name) — from the player's chair it looks identical to a
miss, and it is the likeliest shape for a grave. A picked corpse with no fields
logs as well.

`log_new_corpses` is the third leg: one line per corpse object the server sends,
with its flags, owner and chosen model, on `Added<ObjectStore>` so it touches
only the frame's new arrivals. It answers whether the grave he hovered was a
body or a bone pile without asking him to hover anything, and separates "nothing
arrived" from the two plate-side misses.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
2026-10-17 18:14:17 -06:00
co-authored by Claude Opus 5
parent 13989fb09b
commit 4e92fcf1a1
4 changed files with 55 additions and 2 deletions
+14
View File
@@ -693,10 +693,24 @@ fn drive_mouseover_tooltip(
.filter(|_| go.is_none())
{
let Some(store) = stores.get(entity).ok() else {
note_corpse_miss(
&mut memo.corpse_miss,
guid,
"the picked corpse carries no fields",
);
return;
};
// A bone pile with nothing to take publishes no mouseover: no plate, no brighten.
if !crate::target::corpse_mouseover_eligible(store) {
// Logged too, though it is the reference's own answer (`0x5d76d0`: bones, and
// `CORPSE_FIELD_DYNAMIC_FLAGS` bit 0 clear, so nothing to take). "No tooltip on a
// grave" looks identical to the two misses below from the player's chair, and this
// line is what tells them apart.
note_corpse_miss(
&mut memo.corpse_miss,
guid,
"a bone pile with no loot, which the reference refuses too (`0x5d76d0`)",
);
if !matches!(*last, LastHover::None) {
script.world_tooltip_fade();
*last = LastHover::None;