Thunderous
Devlog

Affixes you can hear and feel

All four weapon affixes now read in the headset: Biting and Crushing got sounds of their own, Mending a flash you can actually see, Staggering a real stun - and the crit floor I had only predicted wore as about right.

In short: All four weapon affixes now read in the headset: Biting and Crushing got sounds of their own, Mending a flash you can actually see, Staggering a real stun - and the crit floor I had only predicted wore as about right.

The last entry here ended on a word I try to use carefully: predicted. The crit had a new floor under its bad-luck protection. A replay of my own swings said it should lift the rate from about 15% to about 22%. Nobody had worn it yet.

The floor, worn

Pass 14 wore it on 25 September: 131 hits and 35 crits, 26.7%. The longest drought was nine swings, and the mean swing quality was 0.43. The floor fired live twice, taking the roll to 100% both times. One crit landed on a weak swing, quality 0.22 with a stated chance of 8%, which five misses of pressure had carried to 27%. The button I pressed read "Earned, and about right now."

It has held since. Pass 15 came in at 22.8% over 181 blows, with a longest drought of seven, and pass 16 at 30.7%. Pass 15 also touched the question I left open last time, whether I had just swung lighter than my pool. That day my median swing was 55.2 m/s against the pool's 55.4, so on that day I swung like my pool. It tells me nothing about a day when I don't.

With crits right, the next passes went on the affixes, each of which is meant to be felt in the hand, not read off a card.

Biting and Crushing, chosen by ear

Biting and Crushing each add a sound layer on top of the ordinary hit, and pass 13 said both were buried in it. Pass 14 auditioned five candidates for each, and I picked none of them. Biting wanted a blade going through flesh. Crushing wanted bones crunching.

So Claude cut six new stops from the sounds I downloaded on 25 September, three per affix, each trimmed to start 10 ms before its first strong transient. They went into an audition on the dev panel, with a choice of 0, 60 or 100 ms delay between the hit and the layer. One thing was measured before I heard any of them. slicedFlesh sits at 6-8 kHz, the same band as the flesh hit's own knife slice. That was exactly how the old layer got buried.

I picked slicedFlesh for Biting and wetBreak for Crushing, and afterwards chose no delay. The audition and the losing clips are gone. One thing is still open: five of the six sources are CC0, but slicedFlesh's second clip is a Pixabay slice whose licence is not confirmed on its page. It needs checking before anything ships.

Mending: the flash was outside my eyes

Mending heals on a crit, with a chime and a green flash at the edge of vision. Pass 14 said the chime was right and the flash "still too faint". I had said something like it the pass before, and that time the fix was to make it a third stronger and longer.

This time the cause turned out to be geometry. The flash borrowed its radii from the damage ward, which put its ring 42.7 to 57.4 degrees off centre. A Quest 3's edges are roughly 48 and 55 degrees, so most of the ring was drawn where I could not see it. The most of it that ever reached my eye was alpha 0.13 to 0.23. It now has its own ring at 26 to 42 degrees, at the same 0.6 peak. Pass 15: "great, perfect now."

Making something stronger does nothing when it's drawn where you can't see it, and more strength is exactly what I had asked for.

Staggering: from a wobble to a stun

Staggering has had the hardest time. It was a thud nobody heard (pass 11), then a wobble "too subtle" at 7 degrees (pass 13), then "odd" at 12 (pass 14). I asked for a body that looks stunned, and chose a real stun over a pose. A stunned melee body drops its swing, and a mage loses its charge.

Pass 15 over-corrected. The dev panel's affixed sword rolls the top of its band, so every stun was the maximum 1.5 s, and 40 of 46 Staggering hits stunned, about 87%. Far too much. I asked for rarer and shorter, with a long stun you earn: "maybe a crit makes it last longer".

After pass 15 it became a chance, 20-35% depending on the affix roll, with 0.4 s for a normal stun and 1.2 s on a crit, and pass 16 wore it. The chance held: 21 stuns from 75 hits, 28%. The look held too ("felt pretty good with how it looks"). But the normal stun was "too little time", and the crit's wanted "a bit longer ... to really show how awesome it is". I picked 0.7 s and 1.8 s from three options. Pass 17: 35 Staggering hits, 9 stuns (26%), 3 long, and "in a good place right now". It may turn out too strong later. The 1.5 s immunity against stun-lock is an agent's default and not a number I chose.

AffixTests now holds each of those verdicts as a limit, so a later retune can't quietly walk back into one I already rejected.

The card that was at my waist

The last piece isn't an affix, but it came out of the same passes: knowing something is in your hand when you lift it off the inventory grid. After pass 15 I added three signals, and pass 16 wore them: a card at the lifting hand, the hand's ray tinted in the item's rarity colour, and a haptic tick on lift and on placing. I gave it an "A+", "felt so good to use".

Pass 17, unprompted: the card was showing near my waist, not my hand. It rode on the ray interactor's own GameObject, which the code assumed sat on the controller. It doesn't. I had graded the whole cue A+ while one of its three channels was down at my waist instead of in my hand, so the tint and the tick had been carrying it.

The fix takes the controller's tracked pose and logs the card's average height below the eye. Pass 18 read 0.25 m and 0.24 m, which is hand height, and I said "works perfectly, the card hovers just above the hand." What I'm keeping from it: in the interaction SDK, an interactor's GameObject is not the hand. Only its posed values are.