fix: hide arms for bodies with baked-in sleeve geometry #213

Merged
sickday merged 1 commit from fix/body-sleeve-coverage into main 2026-07-22 22:51:10 +00:00
Owner

Ghostly robe top rendered with the player's bare arms poking through it.

Arm coverage read the cache's op24/26 full_body flag alone — a body that
covers the arms usually supplies its own sleeve geometry as a second worn
model. That holds for 271 of the 275 chest items shared with the reference
configs, but a few bodies bake their sleeves into the single op23/25 worn
model, so the flag reads clear while the arm kit still has to be hidden:
Ghostly robe 6107, Rock-shell plate 6129, Spined body 6133, Skeletal top
6139.

Adds Game.Item.BodyCoverage over a reference-derived, 468-identity-gated
priv/data/item_body_coverage.exs (275 chest items), mirroring the existing
head-coverage table. The cache flag stays as the fallback for ids the table
does not cover — of the 97 reference chest rows the identity gate drops, only
2661 exists in 468 (renamed to "Saradomin plate") and the flag already gets it
right.

The encoder tests can now assert arm coverage end to end: the table answers
without a running cache, so the client-parity round trip covers both a body
that collapses the arm slot to a zero byte and one that keeps the arm kit.

Ghostly robe top rendered with the player's bare arms poking through it. Arm coverage read the cache's op24/26 `full_body` flag alone — a body that covers the arms usually supplies its own sleeve geometry as a second worn model. That holds for 271 of the 275 chest items shared with the reference configs, but a few bodies bake their sleeves into the single op23/25 worn model, so the flag reads clear while the arm kit still has to be hidden: Ghostly robe 6107, Rock-shell plate 6129, Spined body 6133, Skeletal top 6139. Adds `Game.Item.BodyCoverage` over a reference-derived, 468-identity-gated `priv/data/item_body_coverage.exs` (275 chest items), mirroring the existing head-coverage table. The cache flag stays as the fallback for ids the table does not cover — of the 97 reference chest rows the identity gate drops, only 2661 exists in 468 (renamed to "Saradomin plate") and the flag already gets it right. The encoder tests can now assert arm coverage end to end: the table answers without a running cache, so the client-parity round trip covers both a body that collapses the arm slot to a zero byte and one that keeps the arm kit.
fix: hide arms for bodies with baked-in sleeve geometry
All checks were successful
ci / test (pull_request) Successful in 2m55s
7ed852fbe7
Ghostly robe top rendered with the player's bare arms poking through it.

Arm coverage read the cache's op24/26 `full_body` flag alone — a body that
covers the arms usually supplies its own sleeve geometry as a second worn
model. That holds for 271 of the 275 chest items shared with the reference
configs, but a few bodies bake their sleeves into the single op23/25 worn
model, so the flag reads clear while the arm kit still has to be hidden:
Ghostly robe 6107, Rock-shell plate 6129, Spined body 6133, Skeletal top
6139.

Adds `Game.Item.BodyCoverage` over a reference-derived, 468-identity-gated
`priv/data/item_body_coverage.exs` (275 chest items), mirroring the existing
head-coverage table. The cache flag stays as the fallback for ids the table
does not cover — of the 97 reference chest rows the identity gate drops, only
2661 exists in 468 (renamed to "Saradomin plate") and the flag already gets it
right.

The encoder tests can now assert arm coverage end to end: the table answers
without a running cache, so the client-parity round trip covers both a body
that collapses the arm slot to a zero byte and one that keeps the arm kit.
sickday force-pushed fix/body-sleeve-coverage from 7ed852fbe7
All checks were successful
ci / test (pull_request) Successful in 2m55s
to 69ceab1666
All checks were successful
ci / test (pull_request) Successful in 2m31s
2026-07-22 22:46:20 +00:00
Compare
Sign in to join this conversation.
No description provided.