From 4ed29022da549a8fc8842b0092b060045b3083a1 Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Wed, 9 Sep 2026 21:13:49 +0900 Subject: [PATCH 1/4] update ss-sdk submodule --- ss_player/SpriteStudio-SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ss_player/SpriteStudio-SDK b/ss_player/SpriteStudio-SDK index eab6336..d8338cf 160000 --- a/ss_player/SpriteStudio-SDK +++ b/ss_player/SpriteStudio-SDK @@ -1 +1 @@ -Subproject commit eab6336ceec88fad43265d9b352b358bf302f330 +Subproject commit d8338cfc3e7b58b276cf7b4f5cf79ffa9068bc47 From ebb64f20c88b5cc4693e8db8c5cdc0c6d3c529df Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Wed, 9 Sep 2026 21:54:06 +0900 Subject: [PATCH 2/4] fix(player): drive Instance children nested inside Instance parts `_update_instance_children` is the sim phase, and it ran only from `_seek_and_redraw`, which a parent-driven child never enters. Instance parts below the first level therefore held the frame the setup pass left them at. `_drive_instance_slot` now recurses into the child ahead of its draw, so the whole reference graph steps and the clipping carry-over (`visible_this_frame`) is settled before the child builds. Hiding an Instance child moves with it, out of the sim phase and into `_drawAnimation`, alongside the Effect emitter canvas items: the draw is what re-shows them, and a player holding a frame does not redraw, so hiding in the sim phase left the children of every held frame with nothing to switch them back on. That surfaced as a sub-animation blanking out whenever a seek landed on a fractional frame with sub-frames off. --- ss_player/ss_internal_player.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ss_player/ss_internal_player.cpp b/ss_player/ss_internal_player.cpp index 6c79ab1..2ec044c 100644 --- a/ss_player/ss_internal_player.cpp +++ b/ss_player/ss_internal_player.cpp @@ -1684,6 +1684,10 @@ void SsInternalPlayer::_drawAnimation(float frame_no, float delta_seconds, bool } } + for (uint32_t i = 0; i < _instance_children.size(); i++) { + if (_instance_children[i].player) _instance_children[i].player->setRootVisible(false); + } + // Per-frame draw-order counter: batch CIs and per-part CIs draw in the // order they are emitted (rank order), not in CI-pool allocation order. _draw_seq = 0; @@ -2034,11 +2038,12 @@ void SsInternalPlayer::_drive_instance_slot(InstanceChildState& state, child->play(); } - child->setRootVisible(false); if (!r.visible) { return; } + child->_update_instance_children(r.child_frame_no, delta_seconds, r.child_looped); + _redraw_child_if_frame_changed(child, r.child_frame_no, delta_seconds, r.child_looped); } From a7b87d77f73410aa136ca8c187a3433430ed7ec4 Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Wed, 9 Sep 2026 22:47:51 +0900 Subject: [PATCH 3/4] update ss-sdk submodule --- ss_player/SpriteStudio-SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ss_player/SpriteStudio-SDK b/ss_player/SpriteStudio-SDK index d8338cf..3ce9be9 160000 --- a/ss_player/SpriteStudio-SDK +++ b/ss_player/SpriteStudio-SDK @@ -1 +1 @@ -Subproject commit d8338cfc3e7b58b276cf7b4f5cf79ffa9068bc47 +Subproject commit 3ce9be945cef2784d724dedadd417d0f2788bf76 From 7e17530db636b5c20b26af2caed61c7c51cd0807 Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Wed, 9 Sep 2026 22:53:32 +0900 Subject: [PATCH 4/4] chore: bump SDK to the landed instance-section fix --- ss_player/SpriteStudio-SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ss_player/SpriteStudio-SDK b/ss_player/SpriteStudio-SDK index 3ce9be9..c5ba33b 160000 --- a/ss_player/SpriteStudio-SDK +++ b/ss_player/SpriteStudio-SDK @@ -1 +1 @@ -Subproject commit 3ce9be945cef2784d724dedadd417d0f2788bf76 +Subproject commit c5ba33b9b30be542c7f22ba16f15e3223d0a038b