Skip to content

fix: stop infinite 404 retry loop for emote asset bundles#8504

Merged
dalkia merged 8 commits into
shape/webgl_mainfrom
fix/emote-loading-infinite-404-loop
Apr 28, 2026
Merged

fix: stop infinite 404 retry loop for emote asset bundles#8504
dalkia merged 8 commits into
shape/webgl_mainfrom
fix/emote-loading-infinite-404-loop

Conversation

@dalkia

@dalkia dalkia commented Apr 28, 2026

Copy link
Copy Markdown
Collaborator

Pull Request Description

What does this PR change?

1. Fix infinite 404 retry loop for emote asset bundles

When emote asset bundles fail to load (e.g. 404 from StreamingAssets), FinalizeEmoteLoadingSystem was only logging a warning but leaving AssetResults[bodyShape] as null. This caused CreateAssetBundlePromiseIfRequired to create a new promise every frame, producing an infinite loop of 404 requests.

Now stores a failed StreamableLoadingResult on the failure branch in FinalizeAssetBundleLoading, matching what we already do for wearables in FinalizeWearableLoadingSystemBase.SetAsFailed. This ensures the null check in CreateAssetBundlePromiseIfRequired stops re-creating promises.

2. Fix world scenes failing to load asset bundles (manifest 404)

World scenes don't query the asset-bundle-registry (unlike catalyst scenes), so they fall back to fetching manifests directly from ab-cdn.decentraland.org. The manifest URL in LoadAssetBundleManifestSystem was incorrectly appending a platform suffix (e.g. _webgl) that the CDN doesn't use for manifests, causing the manifest request to 404. This cascaded into all individual asset bundle loads failing: the failed manifest marked assetBundleManifestRequestFailed = true, which blocked the WEB source in PrepareAssetBundleLoadingParametersSystemBase, leaving only the EMBEDDED source (which also 404s for assets not bundled in the build).

Removed the platform suffix from the manifest URL. This is a temporary fix — once multi-scene-worlds is merged, worlds will query the registry like catalyst scenes and this fallback path won't be needed.

3. Shader variant updates

Updates the scene shader to include missing variants following this PR, and adds missing TMP shader variants (OUTLINE_ON for TMP Mobile, SOFTMASK_SIMPLE UNDERLAY_ON for Soft Mask TMP) to the shader variant collection for WebGL builds.

Test Instructions

Test Steps

  1. Open a world scene (e.g. franfranfran.dcl.eth) on WebGL
  2. Verify the world loads successfully — avatars should render with wearables and emotes
  3. Check the browser console: there should be no repeated 404 requests for the same asset bundle hashes

Additional Testing Notes

  • The emote fix mirrors the wearable failure handling pattern (SetAsFailed in FinalizeWearableLoadingSystemBase)
  • Emotes that fail will not play, but the system will not spin indefinitely
  • Catalyst scenes (non-worlds) should be unaffected since they get manifest versions from the asset-bundle-registry

Quality Checklist

  • Changes have been tested locally
  • Documentation has been updated (if required)
  • Performance impact has been considered
  • For SDK features: Test scene is included

Code Review Reference

Please review our Code Review Standards before submitting.

When emote asset bundles fail to load (404), AssetResults[bodyShape]
was left as null, causing CreateAssetBundlePromiseIfRequired to
create a new promise every frame — looping indefinitely.
Store a failed StreamableLoadingResult on failure, matching the
pattern already used by wearables (SetAsFailed).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@dalkia
dalkia requested review from a team as code owners April 28, 2026 02:41
@github-actions

github-actions Bot commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

dalkia and others added 7 commits April 28, 2026 00:18
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
World scenes don't query the asset-bundle-registry yet, so they fall
back to fetching manifests directly from ab-cdn. The URL was incorrectly
appending a platform suffix (_webgl) that the CDN doesn't use for
manifests, causing all world asset bundle loads to fail.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@dalkia
dalkia merged commit 25ed9aa into shape/webgl_main Apr 28, 2026
4 of 6 checks passed
@dalkia
dalkia deleted the fix/emote-loading-infinite-404-loop branch April 28, 2026 20:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant