From a4427d91a7f932e0da1809ed1d5aa6226fefcf8e Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Mon, 27 Apr 2026 13:01:40 +0200 Subject: [PATCH] feat(04-00): minimal chain_spark particle assets for codec spike - Author chain_spark.particlesystem (Spawners[1] -> SpawnerId=chain_spark) - Author chain_spark.particlespawner (required co-asset, Sphere/BlendAdd, embedded Particle with Animation[0,100]) - Bundle 4x4 placeholder chain_spark.png in Particles/ to satisfy CommonAssetValidator.TEXTURE_PARTICLES - ShadowJar packages all three at exact case-sensitive path Server/Particles/ Deviation from plan: research assumed only one .particlesystem file needed. Decompiled codec shows ParticleSpawner is a SEPARATE asset (.particlespawner) referenced by SpawnerId, plus Particle.Texture is validated against CommonAssetRegistry (must exist as Particles/.png). Both required for the spike to validate end-to-end. Documented in SPIKE-FINDINGS. --- .../Particles/chain_spark.particlespawner | 32 ++++++++++++++++++ .../Particles/chain_spark.particlesystem | 10 ++++++ .../Server/Particles/chain_spark.png | Bin 0 -> 86 bytes 3 files changed, 42 insertions(+) create mode 100644 src/main/resources/Server/Particles/chain_spark.particlespawner create mode 100644 src/main/resources/Server/Particles/chain_spark.particlesystem create mode 100644 src/main/resources/Server/Particles/chain_spark.png diff --git a/src/main/resources/Server/Particles/chain_spark.particlespawner b/src/main/resources/Server/Particles/chain_spark.particlespawner new file mode 100644 index 0000000..6ca6bd8 --- /dev/null +++ b/src/main/resources/Server/Particles/chain_spark.particlespawner @@ -0,0 +1,32 @@ +{ + "Shape": "Sphere", + "ParticleRotationInfluence": "Billboard", + "RenderMode": "BlendAdd", + "TotalParticles": { "Min": 1, "Max": 1 }, + "LifeSpan": 0.5, + "MaxConcurrentParticles": 16, + "ParticleLifeSpan": { "Min": 0.3, "Max": 0.5 }, + "SpawnRate": { "Min": 50.0, "Max": 50.0 }, + "Particle": { + "Texture": "Particles/chain_spark.png", + "FrameSize": { "Width": 4, "Height": 4 }, + "SoftParticles": "Enable", + "SoftParticlesFadeFactor": 1.0, + "UVOption": "None", + "ScaleRatioConstraint": "OneToOne", + "Animation": { + "0": { + "FrameIndex": { "Min": 0, "Max": 0 }, + "Scale": { "X": { "Min": 0.3, "Max": 0.3 }, "Y": { "Min": 0.3, "Max": 0.3 } }, + "Color": "#B0DCFF", + "Opacity": 1.0 + }, + "100": { + "FrameIndex": { "Min": 0, "Max": 0 }, + "Scale": { "X": { "Min": 0.0, "Max": 0.0 }, "Y": { "Min": 0.0, "Max": 0.0 } }, + "Color": "#B0DCFF", + "Opacity": 0.0 + } + } + } +} diff --git a/src/main/resources/Server/Particles/chain_spark.particlesystem b/src/main/resources/Server/Particles/chain_spark.particlesystem new file mode 100644 index 0000000..8575c6f --- /dev/null +++ b/src/main/resources/Server/Particles/chain_spark.particlesystem @@ -0,0 +1,10 @@ +{ + "LifeSpan": 0.5, + "CullDistance": 64.0, + "BoundingRadius": 1.0, + "Spawners": [ + { + "SpawnerId": "chain_spark" + } + ] +} diff --git a/src/main/resources/Server/Particles/chain_spark.png b/src/main/resources/Server/Particles/chain_spark.png new file mode 100644 index 0000000000000000000000000000000000000000..28e5c8a0ecbdc7c7c1f95b94e5bce3c313039691 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{=WIbIRLn`JZ-za*%-%LQ=X`>nQ jl#Rk&!W+33WH2&>P15h2-Ya|%sF1