Art/Fix: A0 gate pass — death-pose lock, off-palette drift, lighting debris
Found by running the A0 style-proof against the SHIPPING scene instead of ArtStaging (which judges static glTF bakes on an import shader, with zero SkinnedMeshRenderers and no Animator — it cannot answer "does the game look like this"). Player-facing bugs fixed: - AC_PlayerTopDown/AC_EnemyTopDown "Death" had ZERO outgoing transitions. Any State enters on IsDead and nothing ever leaves. The player ghost is a persistent entity, so its Rukhanka animator never resets: once you died you rendered sprawled on the seabed permanently — sim fully respawned, moving and fighting, visually a corpse. Added Death -> Idle on (IsDead == false). - AmbientMotionSystem drift was still the deleted biome system: key 0 = "meadow", MeadowMoteColor (0.62, 0.85, 0.60) = GREEN motes, 600 of them in a 36x7x24 box following the camera — the most off-palette thing in the frame. Its x>500 region probe pointed at space now holding zero renderers. Collapsed to one cold marine particulate; dropped the 4 dead mote colours + AridWind. - FeedbackFx.MakeParticleMaterial built Sprites/Default with NO texture, so every procedural particle rendered as a hard SQUARE. Added a procedural soft dot (no Resources.Load — build-stripped; asset-free presentation is the rule). - Game.unity carried a stock Unity "Directional Light" (warm-WHITE, 1.05, Soft) outranking KeyWarm as a second competing shadow caster, plus 6 orphaned LandmarkLights — four at x=1030/1530 lighting a kilometre of empty water, two with no renderer within 12u, two of them purple. All 7 deleted. Added RimCold for silhouette separation; key:fill set to the tuned 3.9:1; WarmPool -> Soft. ArtStaging (kept as a lighting lab): KeyWarm 0.15 -> 0.85 — it was the only shadow-caster yet sat BELOW GloamFill 0.22, which destroys form by definition and is what read as "flat". StagingAmbiance was attached to nothing and its flora wiring searched for a Game.unity parent, which is what read as "static"; it also force-played the combat one-shot pool, now restricted to looping emitters. Flicker raised to a measured x2.11 cold swing vs x1.03 warm. 304/304 EditMode green; death-recovery, palette and particulate all verified live in Game.unity Play. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,38 @@ namespace ProjectM.Client
|
||||
return clip;
|
||||
}
|
||||
|
||||
static Texture2D s_softDot;
|
||||
|
||||
/// <summary>
|
||||
/// Sprites/Default with NO texture renders hard SQUARES — which is what the ambient drift was painting
|
||||
/// across the seabed (found at the 2026-08-07 A0 gate). Build the dot procedurally instead of referencing
|
||||
/// an asset: runtime Resources.Load is stripped from player builds, and asset-free presentation is the
|
||||
/// house rule. Self-healing across fast-enter-playmode — a destroyed texture compares == null and rebuilds.
|
||||
/// </summary>
|
||||
public static Texture2D SoftDot()
|
||||
{
|
||||
if (s_softDot != null) return s_softDot;
|
||||
const int N = 32;
|
||||
var t = new Texture2D(N, N, TextureFormat.RGBA32, false)
|
||||
{
|
||||
name = "T_SoftDotProc",
|
||||
wrapMode = TextureWrapMode.Clamp
|
||||
};
|
||||
for (int y = 0; y < N; y++)
|
||||
{
|
||||
for (int x = 0; x < N; x++)
|
||||
{
|
||||
float dx = (x + 0.5f) / N * 2f - 1f;
|
||||
float dy = (y + 0.5f) / N * 2f - 1f;
|
||||
float a = Mathf.Clamp01(1f - Mathf.Sqrt(dx * dx + dy * dy));
|
||||
t.SetPixel(x, y, new Color(1f, 1f, 1f, a * a)); // squared = softer falloff
|
||||
}
|
||||
}
|
||||
t.Apply();
|
||||
s_softDot = t;
|
||||
return t;
|
||||
}
|
||||
|
||||
public static Material MakeParticleMaterial(string name = "FeedbackParticle")
|
||||
{
|
||||
// Sprites/Default is an always-included transparent vertex-coloured shader (reliable billboarded sparks;
|
||||
@@ -40,7 +72,7 @@ namespace ProjectM.Client
|
||||
Shader sh = Shader.Find("Sprites/Default");
|
||||
if (sh == null) sh = Shader.Find("Universal Render Pipeline/Particles/Unlit");
|
||||
if (sh == null) sh = Shader.Find("Unlit/Color");
|
||||
return new Material(sh) { name = name };
|
||||
return new Material(sh) { name = name, mainTexture = SoftDot() };
|
||||
}
|
||||
|
||||
public static ParticleSystem MakeBurst(Transform parent, string name, Material mat, Color color,
|
||||
|
||||
Reference in New Issue
Block a user