diff --git a/public/assets/models/orange_half.glb b/public/assets/models/orange_half.glb new file mode 100644 index 0000000..3336c24 Binary files /dev/null and b/public/assets/models/orange_half.glb differ diff --git a/src/sim/grating.ts b/src/sim/grating.ts index fa1dd53..f3fe39f 100644 --- a/src/sim/grating.ts +++ b/src/sim/grating.ts @@ -272,7 +272,9 @@ export function grateStroke( ? clamp01((KNUCKLE_SAFE_BLOCK - s.blockMass) / KNUCKLE_SAFE_BLOCK) : 0; if (proximity > 0) { - const risk = p * (0.4 + 0.6 * len) * proximity; + // Below ~0.4 pressure you're deliberately careful — no roll at all. + // Easing off must be a real defense, not a smaller lottery ticket. + const risk = Math.max(0, p - 0.4) * 1.6 * (0.4 + 0.6 * len) * proximity; if (rand() < risk * KNUCKLE_GAIN) { out.knuckle = true; s.knuckleHits++;