@carbonenginejs/runtime-resource 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/NOTICE +32 -32
- package/README.md +129 -129
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3858
- package/dist/CjsResManFetchProvider.js +94 -94
- package/dist/CjsResManWorkQueue.js +301 -301
- package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
- package/dist/format/CjsBlueReader.js +358 -358
- package/dist/format/CjsByteReader.js +310 -310
- package/dist/format/CjsByteWriter.js +242 -242
- package/dist/format/CjsFormat.js +223 -223
- package/dist/format/CjsFormatError.js +41 -41
- package/dist/format/CjsReader.js +22 -22
- package/dist/format/CjsResourceProbe.js +279 -279
- package/dist/format/CjsStringTable.js +268 -268
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +265 -265
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -182
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -321
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -1147
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -197
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -146
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/sha256.js +114 -114
- package/dist/format/index.js +11 -11
- package/dist/format/payloadContract.js +193 -193
- package/dist/formats/black/CjsBlackFormat.js +310 -310
- package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
- package/dist/formats/black/core/CjsBlackReader.js +764 -764
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +199 -199
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +175 -175
- package/dist/formats/bnk/core/busNodes.js +252 -252
- package/dist/formats/bnk/core/effectNodes.js +147 -147
- package/dist/formats/bnk/core/eventAction.js +416 -416
- package/dist/formats/bnk/core/globalSettings.js +215 -215
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -512
- package/dist/formats/bnk/core/musicNodes.js +540 -540
- package/dist/formats/bnk/core/nodeBase.js +553 -553
- package/dist/formats/bnk/core/sfxNodes.js +632 -632
- package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +194 -194
- package/dist/formats/cmf/core/buffers.js +237 -237
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +318 -318
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +374 -374
- package/dist/formats/cmf/core/shared.js +277 -277
- package/dist/formats/cmf/core/writer.js +571 -571
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +200 -200
- package/dist/formats/dds/core/bc6h.js +298 -298
- package/dist/formats/dds/core/bc7.js +272 -272
- package/dist/formats/dds/core/helpers.js +901 -862
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +187 -142
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/dxbc/core/DxbcReader.js +266 -266
- package/dist/formats/dxbc/core/container.js +169 -169
- package/dist/formats/dxbc/core/decoder.js +789 -789
- package/dist/formats/dxbc/core/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -19
- package/dist/formats/dxbc/core/helpers.js +220 -220
- package/dist/formats/dxbc/core/opcodes.js +45 -45
- package/dist/formats/dxbc/core/program.js +91 -91
- package/dist/formats/dxbc/core/signature.js +172 -172
- package/dist/formats/dxbc/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3932 -3932
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +142 -142
- package/dist/formats/flac/core/helpers.js +315 -315
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +141 -141
- package/dist/formats/gif/core/helpers.js +380 -380
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +252 -290
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +287 -307
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +679 -679
- package/dist/formats/gltf/core/targets.js +173 -173
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +289 -289
- package/dist/formats/gr2/core/bitknit2.js +282 -282
- package/dist/formats/gr2/core/curves.js +1047 -1047
- package/dist/formats/gr2/core/gsf.js +72 -72
- package/dist/formats/gr2/core/helpers.js +352 -352
- package/dist/formats/gr2/core/json.js +622 -622
- package/dist/formats/gr2/core/oodle1.js +388 -388
- package/dist/formats/gr2/core/tangents.js +48 -48
- package/dist/formats/gr2/core/targets.js +361 -361
- package/dist/formats/gr2/index.js +2 -2
- package/dist/formats/hlsl/CjsHlslFormat.js +233 -254
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
- package/dist/formats/hlsl/core/analysis.js +51 -51
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -850
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -128
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -133
- package/dist/formats/hlsl/core/metadata.js +327 -327
- package/dist/formats/hlsl/core/render-states.js +280 -280
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -320
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +423 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -62
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
- package/dist/formats/hlsl/index.js +3 -3
- package/dist/formats/index.js +33 -33
- package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
- package/dist/formats/jpeg/core/helpers.js +402 -402
- package/dist/formats/jpeg/core/jpeg.js +480 -480
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +197 -197
- package/dist/formats/mp3/core/helpers.js +375 -375
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +197 -197
- package/dist/formats/mp4/core/helpers.js +484 -484
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +232 -253
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +553 -573
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +143 -143
- package/dist/formats/ogg/core/helpers.js +410 -410
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +1017 -1017
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/pickle/CjsPickleFormat.js +214 -214
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -551
- package/dist/formats/pickle/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +201 -201
- package/dist/formats/png/core/helpers.js +635 -635
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +263 -263
- package/dist/formats/red/core/CjsRedReader.js +246 -246
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +158 -158
- package/dist/formats/red/core/redGraph.js +71 -71
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +320 -365
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +241 -261
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +642 -642
- package/dist/formats/stl/core/targets.js +173 -173
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +197 -197
- package/dist/formats/tga/core/helpers.js +493 -493
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +198 -198
- package/dist/formats/wav/core/helpers.js +365 -365
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webgl/CjsWebglFormat.js +199 -199
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -70
- package/dist/formats/webgl/core/effectPackage.js +900 -900
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2820
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -486
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -98
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -552
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -243
- package/dist/formats/webgl/core/glslEffectCompleteness.js +85 -85
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -1
- package/dist/formats/webgl/core/helpers.js +167 -167
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -122
- package/dist/formats/webgl/core/readGlslEffectContainer.js +202 -256
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -89
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js +354 -354
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +306 -306
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
- package/dist/formats/webgpu/core/packageEffect.js +381 -381
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageMetadata.js +17 -17
- package/dist/formats/webgpu/core/schema.js +4 -4
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +325 -325
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
- package/dist/formats/webgpu/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +197 -197
- package/dist/formats/webm/core/helpers.js +572 -572
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +140 -140
- package/dist/formats/webp/core/helpers.js +237 -237
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +250 -250
- package/dist/formats/wem/core/bitStream.js +261 -261
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +437 -437
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +134 -134
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -400
- package/dist/formats/yaml/core/helpers.js +196 -196
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -64
- package/dist/resource/CjsLoadingObject.js +19 -19
- package/dist/resource/CjsResource.js +801 -801
- package/dist/resource/ResourceHandlerMode.js +14 -14
- package/dist/resource/Tr2LightProfileRes.js +32 -32
- package/dist/resource/audio/AudioGeometryResData.js +47 -47
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
- package/dist/resource/audio/CjsAudioRes.js +213 -213
- package/dist/resource/audio/index.js +4 -4
- package/dist/resource/geometry/MeshDecalData.js +37 -37
- package/dist/resource/geometry/MeshDecalLodData.js +34 -34
- package/dist/resource/geometry/TriGeometryRes.js +570 -467
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -54
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -336
- package/dist/resource/shader/Tr2MaterialArea.js +31 -31
- package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
- package/dist/resource/shader/Tr2MaterialRes.js +31 -31
- package/dist/resource/shader/Tr2Shader.js +283 -283
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -143
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -114
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -168
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -125
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -120
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -372
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -78
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -168
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -159
- package/dist/resource/shader/reflection/shaderStage.js +22 -22
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -135
- package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
- package/dist/resource/texture/Tr2ImageRes.js +120 -120
- package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
- package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
- package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resource/texture/TriTextureRes.js +359 -359
- package/dist/resource/texture/index.js +15 -15
- package/dist/resource/texture/texturePipelineBehavior.js +308 -308
- package/dist/worker/CjsResManMainThreadLoader.js +89 -89
- package/dist/worker/CjsResManWorker.js +218 -218
- package/dist/worker/CjsResManWorkerLoader.js +437 -437
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -118
- package/docs/concepts/resource-lifecycle.md +226 -226
- package/docs/concepts/shader-resource-model.md +111 -111
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -138
- package/docs/formats/carbon-effect-container.md +553 -553
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +105 -77
- package/docs/formats/dxbc/reference/classes/README.md +9 -9
- package/docs/formats/dxbc/reference/decoded-output.md +122 -122
- package/docs/formats/gr2.md +160 -160
- package/docs/formats/hlsl/README.md +54 -54
- package/docs/formats/hlsl/architecture.md +66 -65
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -60
- package/docs/formats/hlsl/guides/reading-effects.md +68 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -61
- package/docs/formats/hlsl/reference/api.md +91 -92
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -97
- package/docs/formats/pickle.md +82 -82
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -115
- package/docs/formats/webgl/architecture.md +69 -69
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
- package/docs/formats/webgl/decl-io.md +1234 -1234
- package/docs/formats/webgl/memory-structured.md +890 -890
- package/docs/formats/webgl/reference/classes/README.md +9 -9
- package/docs/formats/webgl/texture-sample.md +964 -964
- package/docs/formats/webgpu/README.md +84 -84
- package/docs/formats/webgpu/architecture.md +95 -95
- package/docs/formats/webgpu/formats/carbon-webgpu.md +215 -215
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -189
- package/docs/formats/webgpu/reference/api.md +196 -196
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1546
- package/docs/formats/wwise.md +146 -146
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -216
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -944
- package/docs/reference/classes/resources.md +456 -456
- package/docs/reference/classes/texture.md +26 -26
- package/docs/reference/events.md +117 -117
- package/docs/reference/motherlode-cache.md +275 -275
- package/docs/reference/queues.md +194 -194
- package/docs/reference/reload.md +107 -107
- package/docs/reference/texture-arrays.md +113 -113
- package/docs/reference/texture-pipeline.md +53 -53
- package/docs/reference/workers.md +142 -142
- package/docs/roadmap.md +150 -150
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +21 -21
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/dxbc/LICENSE +21 -21
- package/format-notices/dxbc/NOTICE +20 -20
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -21
- package/format-notices/gr2/NOTICE +60 -60
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
- package/format-notices/hlsl/LICENSE +21 -21
- package/format-notices/hlsl/NOTICE +25 -25
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webgl/LICENSE +21 -21
- package/format-notices/webgl/NOTICE +35 -35
- package/format-notices/webgpu/LICENSE +21 -21
- package/format-notices/webgpu/NOTICE +31 -31
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +63 -63
|
@@ -1,416 +1,416 @@
|
|
|
1
|
-
// Exact Wwise v150 HIRC 3 Event Action decoding. The container reader keeps
|
|
2
|
-
// the raw payload; this module adds typed action data only when a recognized
|
|
3
|
-
// layout consumes that payload exactly.
|
|
4
|
-
|
|
5
|
-
const WWISE_EVENT_ACTION_VERSION = 150;
|
|
6
|
-
const PROPERTY_NAMES = Object.freeze({
|
|
7
|
-
0x39: "delayTime",
|
|
8
|
-
0x3a: "transitionTime",
|
|
9
|
-
0x3b: "probability"
|
|
10
|
-
});
|
|
11
|
-
const ACTION_NAMES = Object.freeze({
|
|
12
|
-
0x0102: "stop",
|
|
13
|
-
0x0103: "stop",
|
|
14
|
-
0x0105: "stop",
|
|
15
|
-
0x0203: "pause",
|
|
16
|
-
0x0205: "pause",
|
|
17
|
-
0x0303: "resume",
|
|
18
|
-
0x0305: "resume",
|
|
19
|
-
0x0403: "play",
|
|
20
|
-
0x0503: "play-and-continue",
|
|
21
|
-
0x0802: "set-voice-pitch",
|
|
22
|
-
0x0803: "set-voice-pitch",
|
|
23
|
-
0x0902: "reset-voice-pitch",
|
|
24
|
-
0x0903: "reset-voice-pitch",
|
|
25
|
-
0x0904: "reset-voice-pitch",
|
|
26
|
-
0x0905: "reset-voice-pitch",
|
|
27
|
-
0x0908: "reset-voice-pitch",
|
|
28
|
-
0x0909: "reset-voice-pitch",
|
|
29
|
-
0x0a02: "set-voice-volume",
|
|
30
|
-
0x0a03: "set-voice-volume",
|
|
31
|
-
0x0b02: "reset-voice-volume",
|
|
32
|
-
0x0b03: "reset-voice-volume",
|
|
33
|
-
0x0b04: "reset-voice-volume",
|
|
34
|
-
0x0b05: "reset-voice-volume",
|
|
35
|
-
0x0b08: "reset-voice-volume",
|
|
36
|
-
0x0b09: "reset-voice-volume",
|
|
37
|
-
0x0c02: "set-bus-volume",
|
|
38
|
-
0x0c03: "set-bus-volume",
|
|
39
|
-
0x0d02: "reset-bus-volume",
|
|
40
|
-
0x0d03: "reset-bus-volume",
|
|
41
|
-
0x0d04: "reset-bus-volume",
|
|
42
|
-
0x0d08: "reset-bus-volume",
|
|
43
|
-
0x0e02: "set-voice-low-pass",
|
|
44
|
-
0x0e03: "set-voice-low-pass",
|
|
45
|
-
0x0f02: "reset-voice-low-pass",
|
|
46
|
-
0x0f03: "reset-voice-low-pass",
|
|
47
|
-
0x0f04: "reset-voice-low-pass",
|
|
48
|
-
0x0f05: "reset-voice-low-pass",
|
|
49
|
-
0x0f08: "reset-voice-low-pass",
|
|
50
|
-
0x0f09: "reset-voice-low-pass",
|
|
51
|
-
0x1204: "set-state",
|
|
52
|
-
0x1302: "set-game-parameter",
|
|
53
|
-
0x1303: "set-game-parameter",
|
|
54
|
-
0x1402: "reset-game-parameter",
|
|
55
|
-
0x1403: "reset-game-parameter",
|
|
56
|
-
0x1901: "set-switch",
|
|
57
|
-
0x2002: "set-voice-high-pass",
|
|
58
|
-
0x2003: "set-voice-high-pass",
|
|
59
|
-
0x2103: "post-event",
|
|
60
|
-
0x3002: "reset-voice-high-pass",
|
|
61
|
-
0x3003: "reset-voice-high-pass",
|
|
62
|
-
0x3004: "reset-voice-high-pass",
|
|
63
|
-
0x3005: "reset-voice-high-pass",
|
|
64
|
-
0x3008: "reset-voice-high-pass",
|
|
65
|
-
0x3009: "reset-voice-high-pass"
|
|
66
|
-
});
|
|
67
|
-
const ACTIVE_ACTION_TYPES = new Set([0x0102, 0x0103, 0x0105, 0x0203, 0x0205, 0x0303, 0x0305]);
|
|
68
|
-
const PLAY_ACTION_TYPES = new Set([0x0403, 0x0503]);
|
|
69
|
-
const VOICE_VOLUME_ACTION_TYPES = new Set([0x0a02, 0x0a03, 0x0b02, 0x0b03, 0x0b04, 0x0b05, 0x0b08, 0x0b09]);
|
|
70
|
-
const VOICE_PITCH_ACTION_TYPES = new Set([0x0802, 0x0803, 0x0902, 0x0903, 0x0904, 0x0905, 0x0908, 0x0909]);
|
|
71
|
-
const BUS_VOLUME_ACTION_TYPES = new Set([0x0c02, 0x0c03, 0x0d02, 0x0d03, 0x0d04, 0x0d08]);
|
|
72
|
-
const VOICE_LOW_PASS_ACTION_TYPES = new Set([0x0e02, 0x0e03, 0x0f02, 0x0f03, 0x0f04, 0x0f05, 0x0f08, 0x0f09]);
|
|
73
|
-
const VOICE_HIGH_PASS_ACTION_TYPES = new Set([0x2002, 0x2003, 0x3002, 0x3003, 0x3004, 0x3005, 0x3008, 0x3009]);
|
|
74
|
-
const GAME_SYNC_ACTION_TYPES = new Set([0x1204, 0x1901]);
|
|
75
|
-
const GAME_PARAMETER_ACTION_TYPES = new Set([0x1302, 0x1303, 0x1402, 0x1403]);
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Decodes one exact Wwise v150 HIRC Event Action body.
|
|
79
|
-
*
|
|
80
|
-
* The input begins after the HIRC object's leading u32 identity. Unknown
|
|
81
|
-
* action types, other bank versions, truncated bodies, and recognized bodies
|
|
82
|
-
* with trailing bytes return null so callers retain their shallow/raw view.
|
|
83
|
-
*
|
|
84
|
-
* @param {Uint8Array} payload Event Action body.
|
|
85
|
-
* @param {object} [options] Decode options.
|
|
86
|
-
* @param {number} [options.bankVersion=150] Wwise bank generator version.
|
|
87
|
-
* @returns {object|null} Typed action data, or null when not exact.
|
|
88
|
-
*/
|
|
89
|
-
function parseEventAction(payload, {
|
|
90
|
-
bankVersion = WWISE_EVENT_ACTION_VERSION
|
|
91
|
-
} = {}) {
|
|
92
|
-
if (!(payload instanceof Uint8Array) || Number(bankVersion) !== WWISE_EVENT_ACTION_VERSION) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
try {
|
|
96
|
-
const cursor = new ActionCursor(payload);
|
|
97
|
-
const actionType = cursor.u16();
|
|
98
|
-
const actionName = ACTION_NAMES[actionType];
|
|
99
|
-
if (!actionName) {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
const targetId = cursor.u32();
|
|
103
|
-
const targetFlags = cursor.u8();
|
|
104
|
-
const properties = ReadProperties(cursor);
|
|
105
|
-
const ranges = ReadRanges(cursor);
|
|
106
|
-
const result = {
|
|
107
|
-
actionType,
|
|
108
|
-
actionName,
|
|
109
|
-
actionFamily: actionType >> 8 & 0xff,
|
|
110
|
-
actionMode: ActionMode(actionType & 0xff),
|
|
111
|
-
actionScope: ActionScope(actionType & 0xff),
|
|
112
|
-
targetId,
|
|
113
|
-
targetIsBus: (targetFlags & 0x01) !== 0,
|
|
114
|
-
targetFlags,
|
|
115
|
-
properties,
|
|
116
|
-
ranges,
|
|
117
|
-
...ProjectKnownProperties(properties, ranges)
|
|
118
|
-
};
|
|
119
|
-
if (PLAY_ACTION_TYPES.has(actionType)) {
|
|
120
|
-
result.fadeCurve = cursor.u8();
|
|
121
|
-
result.bankId = cursor.u32();
|
|
122
|
-
result.bankType = cursor.u32();
|
|
123
|
-
} else if (ACTIVE_ACTION_TYPES.has(actionType)) {
|
|
124
|
-
result.fadeCurve = cursor.u8();
|
|
125
|
-
result.actionFlags = cursor.u8();
|
|
126
|
-
result.exceptions = ReadExceptions(cursor);
|
|
127
|
-
} else if (VOICE_PITCH_ACTION_TYPES.has(actionType) || VOICE_VOLUME_ACTION_TYPES.has(actionType) || BUS_VOLUME_ACTION_TYPES.has(actionType) || VOICE_LOW_PASS_ACTION_TYPES.has(actionType) || VOICE_HIGH_PASS_ACTION_TYPES.has(actionType)) {
|
|
128
|
-
if (!HasExactVoicePropertyActionProperties(properties) || !HasExactTimingProperties(ranges)) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
const fadeCurve = cursor.u8();
|
|
132
|
-
const rawValueMode = cursor.u8();
|
|
133
|
-
const value = cursor.f32();
|
|
134
|
-
const valueRange = {
|
|
135
|
-
min: cursor.f32(),
|
|
136
|
-
max: cursor.f32()
|
|
137
|
-
};
|
|
138
|
-
const resetting = actionName.startsWith("reset-");
|
|
139
|
-
if (targetFlags & ~0x01 || fadeCurve > 9 || (resetting ? rawValueMode !== 0 && rawValueMode !== 1 && rawValueMode !== 2 : rawValueMode !== 1 && rawValueMode !== 2) || !Number.isFinite(value) || !Number.isFinite(valueRange.min) || !Number.isFinite(valueRange.max) || resetting && (value !== 0 || valueRange.min !== 0 || valueRange.max !== 0)) {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
result.fadeCurve = fadeCurve;
|
|
143
|
-
if (!resetting) {
|
|
144
|
-
result.valueMode = rawValueMode === 1 ? "absolute" : "relative";
|
|
145
|
-
const fields = VoicePropertyFields(actionType);
|
|
146
|
-
result[fields.value] = value;
|
|
147
|
-
result[fields.range] = valueRange;
|
|
148
|
-
}
|
|
149
|
-
result.exceptions = ReadExceptions(cursor);
|
|
150
|
-
} else if (GAME_SYNC_ACTION_TYPES.has(actionType)) {
|
|
151
|
-
result.groupId = cursor.u32();
|
|
152
|
-
result.valueId = cursor.u32();
|
|
153
|
-
} else if (GAME_PARAMETER_ACTION_TYPES.has(actionType)) {
|
|
154
|
-
if (targetFlags & ~0x01 || !HasExactTimingProperties(properties) || !HasExactTimingProperties(ranges)) {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
const fadeCurve = cursor.u8();
|
|
158
|
-
const bypassTransition = cursor.u8();
|
|
159
|
-
const rawValueMode = cursor.u8();
|
|
160
|
-
const gameParameterValue = cursor.f32();
|
|
161
|
-
const gameParameterRange = {
|
|
162
|
-
min: cursor.f32(),
|
|
163
|
-
max: cursor.f32()
|
|
164
|
-
};
|
|
165
|
-
const resetting = actionName === "reset-game-parameter";
|
|
166
|
-
if (fadeCurve > 9 || (resetting ? rawValueMode !== 0 : rawValueMode !== 1 && rawValueMode !== 2) || !Number.isFinite(gameParameterValue) || !Number.isFinite(gameParameterRange.min) || !Number.isFinite(gameParameterRange.max) || resetting && (gameParameterValue !== 0 || gameParameterRange.min !== 0 || gameParameterRange.max !== 0)) {
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
result.fadeCurve = fadeCurve;
|
|
170
|
-
result.bypassTransition = bypassTransition !== 0;
|
|
171
|
-
if (!resetting) {
|
|
172
|
-
result.valueMode = rawValueMode === 1 ? "absolute" : "relative";
|
|
173
|
-
result.gameParameterValue = gameParameterValue;
|
|
174
|
-
result.gameParameterRange = gameParameterRange;
|
|
175
|
-
}
|
|
176
|
-
result.exceptions = ReadExceptions(cursor);
|
|
177
|
-
}
|
|
178
|
-
return cursor.at === payload.byteLength ? result : null;
|
|
179
|
-
} catch (error) {
|
|
180
|
-
if (error instanceof RangeError) {
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
throw error;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
function HasExactVoicePropertyActionProperties(properties) {
|
|
187
|
-
const ids = properties.map(property => property.id);
|
|
188
|
-
return ids.every(id => id === 0x39 || id === 0x3a) && new Set(ids).size === ids.length;
|
|
189
|
-
}
|
|
190
|
-
function VoicePropertyFields(actionType) {
|
|
191
|
-
if (VOICE_PITCH_ACTION_TYPES.has(actionType)) {
|
|
192
|
-
return {
|
|
193
|
-
value: "pitchCents",
|
|
194
|
-
range: "pitchRangeCents"
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
if (VOICE_VOLUME_ACTION_TYPES.has(actionType)) {
|
|
198
|
-
return {
|
|
199
|
-
value: "volumeDb",
|
|
200
|
-
range: "volumeRangeDb"
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
if (VOICE_LOW_PASS_ACTION_TYPES.has(actionType)) {
|
|
204
|
-
return {
|
|
205
|
-
value: "lowPass",
|
|
206
|
-
range: "lowPassRange"
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
if (BUS_VOLUME_ACTION_TYPES.has(actionType)) {
|
|
210
|
-
return {
|
|
211
|
-
value: "busVolumeDb",
|
|
212
|
-
range: "busVolumeRangeDb"
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
return {
|
|
216
|
-
value: "highPass",
|
|
217
|
-
range: "highPassRange"
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
function HasExactTimingProperties(values) {
|
|
221
|
-
const ids = values.map(value => value.id);
|
|
222
|
-
return ids.every(id => id === 0x39 || id === 0x3a) && new Set(ids).size === ids.length;
|
|
223
|
-
}
|
|
224
|
-
function ReadExceptions(cursor) {
|
|
225
|
-
const exceptionCount = cursor.varUint();
|
|
226
|
-
const exceptions = [];
|
|
227
|
-
if (exceptionCount > 65536) {
|
|
228
|
-
throw new RangeError("Event Action exception count is too large");
|
|
229
|
-
}
|
|
230
|
-
for (let index = 0; index < exceptionCount; index++) {
|
|
231
|
-
const targetId = cursor.u32();
|
|
232
|
-
const targetFlags = cursor.u8();
|
|
233
|
-
exceptions.push({
|
|
234
|
-
targetId,
|
|
235
|
-
targetIsBus: (targetFlags & 0x01) !== 0,
|
|
236
|
-
targetFlags
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
return exceptions;
|
|
240
|
-
}
|
|
241
|
-
function ReadProperties(cursor) {
|
|
242
|
-
const count = cursor.u8();
|
|
243
|
-
if (count > 255 || cursor.remaining < count + count * 4) {
|
|
244
|
-
throw new RangeError("Event Action property bundle is truncated");
|
|
245
|
-
}
|
|
246
|
-
const ids = [];
|
|
247
|
-
const values = [];
|
|
248
|
-
for (let index = 0; index < count; index++) {
|
|
249
|
-
ids.push(cursor.u8());
|
|
250
|
-
}
|
|
251
|
-
for (let index = 0; index < count; index++) {
|
|
252
|
-
values.push(cursor.u32());
|
|
253
|
-
}
|
|
254
|
-
return ids.map((id, index) => {
|
|
255
|
-
const rawValue = values[index];
|
|
256
|
-
return {
|
|
257
|
-
id,
|
|
258
|
-
name: PROPERTY_NAMES[id] ?? `property-${id}`,
|
|
259
|
-
value: PropertyValue(id, rawValue),
|
|
260
|
-
rawValue
|
|
261
|
-
};
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
function ReadRanges(cursor) {
|
|
265
|
-
const count = cursor.u8();
|
|
266
|
-
if (count > 255 || cursor.remaining < count + count * 8) {
|
|
267
|
-
throw new RangeError("Event Action range bundle is truncated");
|
|
268
|
-
}
|
|
269
|
-
const ids = [];
|
|
270
|
-
for (let index = 0; index < count; index++) {
|
|
271
|
-
ids.push(cursor.u8());
|
|
272
|
-
}
|
|
273
|
-
return ids.map(id => {
|
|
274
|
-
const rawMin = cursor.u32();
|
|
275
|
-
const rawMax = cursor.u32();
|
|
276
|
-
return {
|
|
277
|
-
id,
|
|
278
|
-
name: PROPERTY_NAMES[id] ?? `property-${id}`,
|
|
279
|
-
min: RangeValue(id, rawMin),
|
|
280
|
-
max: RangeValue(id, rawMax),
|
|
281
|
-
rawMin,
|
|
282
|
-
rawMax
|
|
283
|
-
};
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
function ProjectKnownProperties(properties, ranges) {
|
|
287
|
-
const result = {};
|
|
288
|
-
for (const property of properties) {
|
|
289
|
-
if (property.id === 0x39) result.delayTimeMs = property.value;else if (property.id === 0x3a) {
|
|
290
|
-
result.transitionTimeMs = property.value;
|
|
291
|
-
} else if (property.id === 0x3b) {
|
|
292
|
-
result.probability = property.value;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
for (const range of ranges) {
|
|
296
|
-
const value = {
|
|
297
|
-
min: range.min,
|
|
298
|
-
max: range.max
|
|
299
|
-
};
|
|
300
|
-
if (range.id === 0x39) result.delayRangeMs = value;else if (range.id === 0x3a) result.transitionRangeMs = value;
|
|
301
|
-
}
|
|
302
|
-
return result;
|
|
303
|
-
}
|
|
304
|
-
function PropertyValue(id, rawValue) {
|
|
305
|
-
if (id === 0x39 || id === 0x3a) {
|
|
306
|
-
return rawValue | 0;
|
|
307
|
-
}
|
|
308
|
-
if (id === 0x3b) {
|
|
309
|
-
const bytes = new ArrayBuffer(4);
|
|
310
|
-
const view = new DataView(bytes);
|
|
311
|
-
view.setUint32(0, rawValue, true);
|
|
312
|
-
return view.getFloat32(0, true);
|
|
313
|
-
}
|
|
314
|
-
return rawValue;
|
|
315
|
-
}
|
|
316
|
-
function RangeValue(id, rawValue) {
|
|
317
|
-
return id === 0x39 || id === 0x3a ? rawValue | 0 : rawValue;
|
|
318
|
-
}
|
|
319
|
-
function ActionMode(value) {
|
|
320
|
-
if (value === 0x02 || value === 0x03) return "element";
|
|
321
|
-
if (value === 0x04 || value === 0x05) return "all";
|
|
322
|
-
if (value === 0x08 || value === 0x09) return "all-except";
|
|
323
|
-
return "unknown";
|
|
324
|
-
}
|
|
325
|
-
function ActionScope(value) {
|
|
326
|
-
if (value === 0x02 || value === 0x04 || value === 0x08) {
|
|
327
|
-
return "global";
|
|
328
|
-
}
|
|
329
|
-
if (value === 0x03 || value === 0x05 || value === 0x09) {
|
|
330
|
-
return "game-object";
|
|
331
|
-
}
|
|
332
|
-
return "unknown";
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/** Bounds-aware cursor over one Wwise Event Action payload. */
|
|
336
|
-
class ActionCursor {
|
|
337
|
-
/**
|
|
338
|
-
* Creates a cursor at the start of an Event Action payload.
|
|
339
|
-
*
|
|
340
|
-
* @param {Uint8Array} bytes Event Action payload bytes.
|
|
341
|
-
*/
|
|
342
|
-
constructor(bytes) {
|
|
343
|
-
this.bytes = bytes;
|
|
344
|
-
this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
345
|
-
this.at = 0;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/** Gets the number of unread payload bytes. */
|
|
349
|
-
get remaining() {
|
|
350
|
-
return this.bytes.byteLength - this.at;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Verifies that a read fits within the payload.
|
|
355
|
-
*
|
|
356
|
-
* @param {number} size Number of bytes to read.
|
|
357
|
-
* @throws {RangeError} The payload is truncated.
|
|
358
|
-
*/
|
|
359
|
-
require(size) {
|
|
360
|
-
if (this.at + size > this.bytes.byteLength) {
|
|
361
|
-
throw new RangeError("Event Action payload is truncated");
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
/** Reads an unsigned 8-bit integer. */
|
|
366
|
-
u8() {
|
|
367
|
-
this.require(1);
|
|
368
|
-
return this.bytes[this.at++];
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
/** Reads a little-endian unsigned 16-bit integer. */
|
|
372
|
-
u16() {
|
|
373
|
-
this.require(2);
|
|
374
|
-
const value = this.view.getUint16(this.at, true);
|
|
375
|
-
this.at += 2;
|
|
376
|
-
return value;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
/** Reads a little-endian unsigned 32-bit integer. */
|
|
380
|
-
u32() {
|
|
381
|
-
this.require(4);
|
|
382
|
-
const value = this.view.getUint32(this.at, true);
|
|
383
|
-
this.at += 4;
|
|
384
|
-
return value;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
/** Reads a little-endian 32-bit floating-point number. */
|
|
388
|
-
f32() {
|
|
389
|
-
this.require(4);
|
|
390
|
-
const value = this.view.getFloat32(this.at, true);
|
|
391
|
-
this.at += 4;
|
|
392
|
-
return value;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/** Reads a canonical Wwise variable-length unsigned integer. */
|
|
396
|
-
varUint() {
|
|
397
|
-
let value = 0;
|
|
398
|
-
for (let count = 0; count < 5; count++) {
|
|
399
|
-
const byte = this.u8();
|
|
400
|
-
if (count === 0 && byte === 0x80) {
|
|
401
|
-
throw new RangeError("Event Action exception count is non-canonical");
|
|
402
|
-
}
|
|
403
|
-
if (value > 0x01ffffff) {
|
|
404
|
-
throw new RangeError("Event Action exception count overflows u32");
|
|
405
|
-
}
|
|
406
|
-
value = value * 128 + (byte & 0x7f);
|
|
407
|
-
if ((byte & 0x80) === 0) {
|
|
408
|
-
return value >>> 0;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
throw new RangeError("Event Action exception count is truncated");
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
export { WWISE_EVENT_ACTION_VERSION, parseEventAction };
|
|
416
|
-
//# sourceMappingURL=eventAction.js.map
|
|
1
|
+
// Exact Wwise v150 HIRC 3 Event Action decoding. The container reader keeps
|
|
2
|
+
// the raw payload; this module adds typed action data only when a recognized
|
|
3
|
+
// layout consumes that payload exactly.
|
|
4
|
+
|
|
5
|
+
const WWISE_EVENT_ACTION_VERSION = 150;
|
|
6
|
+
const PROPERTY_NAMES = Object.freeze({
|
|
7
|
+
0x39: "delayTime",
|
|
8
|
+
0x3a: "transitionTime",
|
|
9
|
+
0x3b: "probability"
|
|
10
|
+
});
|
|
11
|
+
const ACTION_NAMES = Object.freeze({
|
|
12
|
+
0x0102: "stop",
|
|
13
|
+
0x0103: "stop",
|
|
14
|
+
0x0105: "stop",
|
|
15
|
+
0x0203: "pause",
|
|
16
|
+
0x0205: "pause",
|
|
17
|
+
0x0303: "resume",
|
|
18
|
+
0x0305: "resume",
|
|
19
|
+
0x0403: "play",
|
|
20
|
+
0x0503: "play-and-continue",
|
|
21
|
+
0x0802: "set-voice-pitch",
|
|
22
|
+
0x0803: "set-voice-pitch",
|
|
23
|
+
0x0902: "reset-voice-pitch",
|
|
24
|
+
0x0903: "reset-voice-pitch",
|
|
25
|
+
0x0904: "reset-voice-pitch",
|
|
26
|
+
0x0905: "reset-voice-pitch",
|
|
27
|
+
0x0908: "reset-voice-pitch",
|
|
28
|
+
0x0909: "reset-voice-pitch",
|
|
29
|
+
0x0a02: "set-voice-volume",
|
|
30
|
+
0x0a03: "set-voice-volume",
|
|
31
|
+
0x0b02: "reset-voice-volume",
|
|
32
|
+
0x0b03: "reset-voice-volume",
|
|
33
|
+
0x0b04: "reset-voice-volume",
|
|
34
|
+
0x0b05: "reset-voice-volume",
|
|
35
|
+
0x0b08: "reset-voice-volume",
|
|
36
|
+
0x0b09: "reset-voice-volume",
|
|
37
|
+
0x0c02: "set-bus-volume",
|
|
38
|
+
0x0c03: "set-bus-volume",
|
|
39
|
+
0x0d02: "reset-bus-volume",
|
|
40
|
+
0x0d03: "reset-bus-volume",
|
|
41
|
+
0x0d04: "reset-bus-volume",
|
|
42
|
+
0x0d08: "reset-bus-volume",
|
|
43
|
+
0x0e02: "set-voice-low-pass",
|
|
44
|
+
0x0e03: "set-voice-low-pass",
|
|
45
|
+
0x0f02: "reset-voice-low-pass",
|
|
46
|
+
0x0f03: "reset-voice-low-pass",
|
|
47
|
+
0x0f04: "reset-voice-low-pass",
|
|
48
|
+
0x0f05: "reset-voice-low-pass",
|
|
49
|
+
0x0f08: "reset-voice-low-pass",
|
|
50
|
+
0x0f09: "reset-voice-low-pass",
|
|
51
|
+
0x1204: "set-state",
|
|
52
|
+
0x1302: "set-game-parameter",
|
|
53
|
+
0x1303: "set-game-parameter",
|
|
54
|
+
0x1402: "reset-game-parameter",
|
|
55
|
+
0x1403: "reset-game-parameter",
|
|
56
|
+
0x1901: "set-switch",
|
|
57
|
+
0x2002: "set-voice-high-pass",
|
|
58
|
+
0x2003: "set-voice-high-pass",
|
|
59
|
+
0x2103: "post-event",
|
|
60
|
+
0x3002: "reset-voice-high-pass",
|
|
61
|
+
0x3003: "reset-voice-high-pass",
|
|
62
|
+
0x3004: "reset-voice-high-pass",
|
|
63
|
+
0x3005: "reset-voice-high-pass",
|
|
64
|
+
0x3008: "reset-voice-high-pass",
|
|
65
|
+
0x3009: "reset-voice-high-pass"
|
|
66
|
+
});
|
|
67
|
+
const ACTIVE_ACTION_TYPES = new Set([0x0102, 0x0103, 0x0105, 0x0203, 0x0205, 0x0303, 0x0305]);
|
|
68
|
+
const PLAY_ACTION_TYPES = new Set([0x0403, 0x0503]);
|
|
69
|
+
const VOICE_VOLUME_ACTION_TYPES = new Set([0x0a02, 0x0a03, 0x0b02, 0x0b03, 0x0b04, 0x0b05, 0x0b08, 0x0b09]);
|
|
70
|
+
const VOICE_PITCH_ACTION_TYPES = new Set([0x0802, 0x0803, 0x0902, 0x0903, 0x0904, 0x0905, 0x0908, 0x0909]);
|
|
71
|
+
const BUS_VOLUME_ACTION_TYPES = new Set([0x0c02, 0x0c03, 0x0d02, 0x0d03, 0x0d04, 0x0d08]);
|
|
72
|
+
const VOICE_LOW_PASS_ACTION_TYPES = new Set([0x0e02, 0x0e03, 0x0f02, 0x0f03, 0x0f04, 0x0f05, 0x0f08, 0x0f09]);
|
|
73
|
+
const VOICE_HIGH_PASS_ACTION_TYPES = new Set([0x2002, 0x2003, 0x3002, 0x3003, 0x3004, 0x3005, 0x3008, 0x3009]);
|
|
74
|
+
const GAME_SYNC_ACTION_TYPES = new Set([0x1204, 0x1901]);
|
|
75
|
+
const GAME_PARAMETER_ACTION_TYPES = new Set([0x1302, 0x1303, 0x1402, 0x1403]);
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Decodes one exact Wwise v150 HIRC Event Action body.
|
|
79
|
+
*
|
|
80
|
+
* The input begins after the HIRC object's leading u32 identity. Unknown
|
|
81
|
+
* action types, other bank versions, truncated bodies, and recognized bodies
|
|
82
|
+
* with trailing bytes return null so callers retain their shallow/raw view.
|
|
83
|
+
*
|
|
84
|
+
* @param {Uint8Array} payload Event Action body.
|
|
85
|
+
* @param {object} [options] Decode options.
|
|
86
|
+
* @param {number} [options.bankVersion=150] Wwise bank generator version.
|
|
87
|
+
* @returns {object|null} Typed action data, or null when not exact.
|
|
88
|
+
*/
|
|
89
|
+
function parseEventAction(payload, {
|
|
90
|
+
bankVersion = WWISE_EVENT_ACTION_VERSION
|
|
91
|
+
} = {}) {
|
|
92
|
+
if (!(payload instanceof Uint8Array) || Number(bankVersion) !== WWISE_EVENT_ACTION_VERSION) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const cursor = new ActionCursor(payload);
|
|
97
|
+
const actionType = cursor.u16();
|
|
98
|
+
const actionName = ACTION_NAMES[actionType];
|
|
99
|
+
if (!actionName) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const targetId = cursor.u32();
|
|
103
|
+
const targetFlags = cursor.u8();
|
|
104
|
+
const properties = ReadProperties(cursor);
|
|
105
|
+
const ranges = ReadRanges(cursor);
|
|
106
|
+
const result = {
|
|
107
|
+
actionType,
|
|
108
|
+
actionName,
|
|
109
|
+
actionFamily: actionType >> 8 & 0xff,
|
|
110
|
+
actionMode: ActionMode(actionType & 0xff),
|
|
111
|
+
actionScope: ActionScope(actionType & 0xff),
|
|
112
|
+
targetId,
|
|
113
|
+
targetIsBus: (targetFlags & 0x01) !== 0,
|
|
114
|
+
targetFlags,
|
|
115
|
+
properties,
|
|
116
|
+
ranges,
|
|
117
|
+
...ProjectKnownProperties(properties, ranges)
|
|
118
|
+
};
|
|
119
|
+
if (PLAY_ACTION_TYPES.has(actionType)) {
|
|
120
|
+
result.fadeCurve = cursor.u8();
|
|
121
|
+
result.bankId = cursor.u32();
|
|
122
|
+
result.bankType = cursor.u32();
|
|
123
|
+
} else if (ACTIVE_ACTION_TYPES.has(actionType)) {
|
|
124
|
+
result.fadeCurve = cursor.u8();
|
|
125
|
+
result.actionFlags = cursor.u8();
|
|
126
|
+
result.exceptions = ReadExceptions(cursor);
|
|
127
|
+
} else if (VOICE_PITCH_ACTION_TYPES.has(actionType) || VOICE_VOLUME_ACTION_TYPES.has(actionType) || BUS_VOLUME_ACTION_TYPES.has(actionType) || VOICE_LOW_PASS_ACTION_TYPES.has(actionType) || VOICE_HIGH_PASS_ACTION_TYPES.has(actionType)) {
|
|
128
|
+
if (!HasExactVoicePropertyActionProperties(properties) || !HasExactTimingProperties(ranges)) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const fadeCurve = cursor.u8();
|
|
132
|
+
const rawValueMode = cursor.u8();
|
|
133
|
+
const value = cursor.f32();
|
|
134
|
+
const valueRange = {
|
|
135
|
+
min: cursor.f32(),
|
|
136
|
+
max: cursor.f32()
|
|
137
|
+
};
|
|
138
|
+
const resetting = actionName.startsWith("reset-");
|
|
139
|
+
if (targetFlags & ~0x01 || fadeCurve > 9 || (resetting ? rawValueMode !== 0 && rawValueMode !== 1 && rawValueMode !== 2 : rawValueMode !== 1 && rawValueMode !== 2) || !Number.isFinite(value) || !Number.isFinite(valueRange.min) || !Number.isFinite(valueRange.max) || resetting && (value !== 0 || valueRange.min !== 0 || valueRange.max !== 0)) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
result.fadeCurve = fadeCurve;
|
|
143
|
+
if (!resetting) {
|
|
144
|
+
result.valueMode = rawValueMode === 1 ? "absolute" : "relative";
|
|
145
|
+
const fields = VoicePropertyFields(actionType);
|
|
146
|
+
result[fields.value] = value;
|
|
147
|
+
result[fields.range] = valueRange;
|
|
148
|
+
}
|
|
149
|
+
result.exceptions = ReadExceptions(cursor);
|
|
150
|
+
} else if (GAME_SYNC_ACTION_TYPES.has(actionType)) {
|
|
151
|
+
result.groupId = cursor.u32();
|
|
152
|
+
result.valueId = cursor.u32();
|
|
153
|
+
} else if (GAME_PARAMETER_ACTION_TYPES.has(actionType)) {
|
|
154
|
+
if (targetFlags & ~0x01 || !HasExactTimingProperties(properties) || !HasExactTimingProperties(ranges)) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const fadeCurve = cursor.u8();
|
|
158
|
+
const bypassTransition = cursor.u8();
|
|
159
|
+
const rawValueMode = cursor.u8();
|
|
160
|
+
const gameParameterValue = cursor.f32();
|
|
161
|
+
const gameParameterRange = {
|
|
162
|
+
min: cursor.f32(),
|
|
163
|
+
max: cursor.f32()
|
|
164
|
+
};
|
|
165
|
+
const resetting = actionName === "reset-game-parameter";
|
|
166
|
+
if (fadeCurve > 9 || (resetting ? rawValueMode !== 0 : rawValueMode !== 1 && rawValueMode !== 2) || !Number.isFinite(gameParameterValue) || !Number.isFinite(gameParameterRange.min) || !Number.isFinite(gameParameterRange.max) || resetting && (gameParameterValue !== 0 || gameParameterRange.min !== 0 || gameParameterRange.max !== 0)) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
result.fadeCurve = fadeCurve;
|
|
170
|
+
result.bypassTransition = bypassTransition !== 0;
|
|
171
|
+
if (!resetting) {
|
|
172
|
+
result.valueMode = rawValueMode === 1 ? "absolute" : "relative";
|
|
173
|
+
result.gameParameterValue = gameParameterValue;
|
|
174
|
+
result.gameParameterRange = gameParameterRange;
|
|
175
|
+
}
|
|
176
|
+
result.exceptions = ReadExceptions(cursor);
|
|
177
|
+
}
|
|
178
|
+
return cursor.at === payload.byteLength ? result : null;
|
|
179
|
+
} catch (error) {
|
|
180
|
+
if (error instanceof RangeError) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function HasExactVoicePropertyActionProperties(properties) {
|
|
187
|
+
const ids = properties.map(property => property.id);
|
|
188
|
+
return ids.every(id => id === 0x39 || id === 0x3a) && new Set(ids).size === ids.length;
|
|
189
|
+
}
|
|
190
|
+
function VoicePropertyFields(actionType) {
|
|
191
|
+
if (VOICE_PITCH_ACTION_TYPES.has(actionType)) {
|
|
192
|
+
return {
|
|
193
|
+
value: "pitchCents",
|
|
194
|
+
range: "pitchRangeCents"
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (VOICE_VOLUME_ACTION_TYPES.has(actionType)) {
|
|
198
|
+
return {
|
|
199
|
+
value: "volumeDb",
|
|
200
|
+
range: "volumeRangeDb"
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
if (VOICE_LOW_PASS_ACTION_TYPES.has(actionType)) {
|
|
204
|
+
return {
|
|
205
|
+
value: "lowPass",
|
|
206
|
+
range: "lowPassRange"
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (BUS_VOLUME_ACTION_TYPES.has(actionType)) {
|
|
210
|
+
return {
|
|
211
|
+
value: "busVolumeDb",
|
|
212
|
+
range: "busVolumeRangeDb"
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
value: "highPass",
|
|
217
|
+
range: "highPassRange"
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function HasExactTimingProperties(values) {
|
|
221
|
+
const ids = values.map(value => value.id);
|
|
222
|
+
return ids.every(id => id === 0x39 || id === 0x3a) && new Set(ids).size === ids.length;
|
|
223
|
+
}
|
|
224
|
+
function ReadExceptions(cursor) {
|
|
225
|
+
const exceptionCount = cursor.varUint();
|
|
226
|
+
const exceptions = [];
|
|
227
|
+
if (exceptionCount > 65536) {
|
|
228
|
+
throw new RangeError("Event Action exception count is too large");
|
|
229
|
+
}
|
|
230
|
+
for (let index = 0; index < exceptionCount; index++) {
|
|
231
|
+
const targetId = cursor.u32();
|
|
232
|
+
const targetFlags = cursor.u8();
|
|
233
|
+
exceptions.push({
|
|
234
|
+
targetId,
|
|
235
|
+
targetIsBus: (targetFlags & 0x01) !== 0,
|
|
236
|
+
targetFlags
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return exceptions;
|
|
240
|
+
}
|
|
241
|
+
function ReadProperties(cursor) {
|
|
242
|
+
const count = cursor.u8();
|
|
243
|
+
if (count > 255 || cursor.remaining < count + count * 4) {
|
|
244
|
+
throw new RangeError("Event Action property bundle is truncated");
|
|
245
|
+
}
|
|
246
|
+
const ids = [];
|
|
247
|
+
const values = [];
|
|
248
|
+
for (let index = 0; index < count; index++) {
|
|
249
|
+
ids.push(cursor.u8());
|
|
250
|
+
}
|
|
251
|
+
for (let index = 0; index < count; index++) {
|
|
252
|
+
values.push(cursor.u32());
|
|
253
|
+
}
|
|
254
|
+
return ids.map((id, index) => {
|
|
255
|
+
const rawValue = values[index];
|
|
256
|
+
return {
|
|
257
|
+
id,
|
|
258
|
+
name: PROPERTY_NAMES[id] ?? `property-${id}`,
|
|
259
|
+
value: PropertyValue(id, rawValue),
|
|
260
|
+
rawValue
|
|
261
|
+
};
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
function ReadRanges(cursor) {
|
|
265
|
+
const count = cursor.u8();
|
|
266
|
+
if (count > 255 || cursor.remaining < count + count * 8) {
|
|
267
|
+
throw new RangeError("Event Action range bundle is truncated");
|
|
268
|
+
}
|
|
269
|
+
const ids = [];
|
|
270
|
+
for (let index = 0; index < count; index++) {
|
|
271
|
+
ids.push(cursor.u8());
|
|
272
|
+
}
|
|
273
|
+
return ids.map(id => {
|
|
274
|
+
const rawMin = cursor.u32();
|
|
275
|
+
const rawMax = cursor.u32();
|
|
276
|
+
return {
|
|
277
|
+
id,
|
|
278
|
+
name: PROPERTY_NAMES[id] ?? `property-${id}`,
|
|
279
|
+
min: RangeValue(id, rawMin),
|
|
280
|
+
max: RangeValue(id, rawMax),
|
|
281
|
+
rawMin,
|
|
282
|
+
rawMax
|
|
283
|
+
};
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
function ProjectKnownProperties(properties, ranges) {
|
|
287
|
+
const result = {};
|
|
288
|
+
for (const property of properties) {
|
|
289
|
+
if (property.id === 0x39) result.delayTimeMs = property.value;else if (property.id === 0x3a) {
|
|
290
|
+
result.transitionTimeMs = property.value;
|
|
291
|
+
} else if (property.id === 0x3b) {
|
|
292
|
+
result.probability = property.value;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
for (const range of ranges) {
|
|
296
|
+
const value = {
|
|
297
|
+
min: range.min,
|
|
298
|
+
max: range.max
|
|
299
|
+
};
|
|
300
|
+
if (range.id === 0x39) result.delayRangeMs = value;else if (range.id === 0x3a) result.transitionRangeMs = value;
|
|
301
|
+
}
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
function PropertyValue(id, rawValue) {
|
|
305
|
+
if (id === 0x39 || id === 0x3a) {
|
|
306
|
+
return rawValue | 0;
|
|
307
|
+
}
|
|
308
|
+
if (id === 0x3b) {
|
|
309
|
+
const bytes = new ArrayBuffer(4);
|
|
310
|
+
const view = new DataView(bytes);
|
|
311
|
+
view.setUint32(0, rawValue, true);
|
|
312
|
+
return view.getFloat32(0, true);
|
|
313
|
+
}
|
|
314
|
+
return rawValue;
|
|
315
|
+
}
|
|
316
|
+
function RangeValue(id, rawValue) {
|
|
317
|
+
return id === 0x39 || id === 0x3a ? rawValue | 0 : rawValue;
|
|
318
|
+
}
|
|
319
|
+
function ActionMode(value) {
|
|
320
|
+
if (value === 0x02 || value === 0x03) return "element";
|
|
321
|
+
if (value === 0x04 || value === 0x05) return "all";
|
|
322
|
+
if (value === 0x08 || value === 0x09) return "all-except";
|
|
323
|
+
return "unknown";
|
|
324
|
+
}
|
|
325
|
+
function ActionScope(value) {
|
|
326
|
+
if (value === 0x02 || value === 0x04 || value === 0x08) {
|
|
327
|
+
return "global";
|
|
328
|
+
}
|
|
329
|
+
if (value === 0x03 || value === 0x05 || value === 0x09) {
|
|
330
|
+
return "game-object";
|
|
331
|
+
}
|
|
332
|
+
return "unknown";
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/** Bounds-aware cursor over one Wwise Event Action payload. */
|
|
336
|
+
class ActionCursor {
|
|
337
|
+
/**
|
|
338
|
+
* Creates a cursor at the start of an Event Action payload.
|
|
339
|
+
*
|
|
340
|
+
* @param {Uint8Array} bytes Event Action payload bytes.
|
|
341
|
+
*/
|
|
342
|
+
constructor(bytes) {
|
|
343
|
+
this.bytes = bytes;
|
|
344
|
+
this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
345
|
+
this.at = 0;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/** Gets the number of unread payload bytes. */
|
|
349
|
+
get remaining() {
|
|
350
|
+
return this.bytes.byteLength - this.at;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Verifies that a read fits within the payload.
|
|
355
|
+
*
|
|
356
|
+
* @param {number} size Number of bytes to read.
|
|
357
|
+
* @throws {RangeError} The payload is truncated.
|
|
358
|
+
*/
|
|
359
|
+
require(size) {
|
|
360
|
+
if (this.at + size > this.bytes.byteLength) {
|
|
361
|
+
throw new RangeError("Event Action payload is truncated");
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/** Reads an unsigned 8-bit integer. */
|
|
366
|
+
u8() {
|
|
367
|
+
this.require(1);
|
|
368
|
+
return this.bytes[this.at++];
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Reads a little-endian unsigned 16-bit integer. */
|
|
372
|
+
u16() {
|
|
373
|
+
this.require(2);
|
|
374
|
+
const value = this.view.getUint16(this.at, true);
|
|
375
|
+
this.at += 2;
|
|
376
|
+
return value;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/** Reads a little-endian unsigned 32-bit integer. */
|
|
380
|
+
u32() {
|
|
381
|
+
this.require(4);
|
|
382
|
+
const value = this.view.getUint32(this.at, true);
|
|
383
|
+
this.at += 4;
|
|
384
|
+
return value;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/** Reads a little-endian 32-bit floating-point number. */
|
|
388
|
+
f32() {
|
|
389
|
+
this.require(4);
|
|
390
|
+
const value = this.view.getFloat32(this.at, true);
|
|
391
|
+
this.at += 4;
|
|
392
|
+
return value;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/** Reads a canonical Wwise variable-length unsigned integer. */
|
|
396
|
+
varUint() {
|
|
397
|
+
let value = 0;
|
|
398
|
+
for (let count = 0; count < 5; count++) {
|
|
399
|
+
const byte = this.u8();
|
|
400
|
+
if (count === 0 && byte === 0x80) {
|
|
401
|
+
throw new RangeError("Event Action exception count is non-canonical");
|
|
402
|
+
}
|
|
403
|
+
if (value > 0x01ffffff) {
|
|
404
|
+
throw new RangeError("Event Action exception count overflows u32");
|
|
405
|
+
}
|
|
406
|
+
value = value * 128 + (byte & 0x7f);
|
|
407
|
+
if ((byte & 0x80) === 0) {
|
|
408
|
+
return value >>> 0;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
throw new RangeError("Event Action exception count is truncated");
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
export { WWISE_EVENT_ACTION_VERSION, parseEventAction };
|
|
416
|
+
//# sourceMappingURL=eventAction.js.map
|