D: Enter/exit simulation. Entities can be taken out of the simulation for a moment and be under full design control. Since the entity is explicitly taken out for a reason, making it match the sim is less of a concern. However, re-entry can be difficult to setup in a transparent way.
C: Scale and bias simulation params to offset/strengthen/weaken responses. Push and pull the simulation towards fun with y=kx+m. k and m can be adjusted per entity and still remain part of the sim. Structured method of adjustment.
B: Segment the simulation into parts, and pass events between them. The emitted events are under designer control, and the receiving simulation can’t tell the difference. Clear design surface. Events must be reasonable, but side effects can be contained. Reduces combinatorial explosion of parameters.
A: Make the sim simply better. More fidelity, more realistic, capture more behaviours, use real-world experimental parameters. A bet that fidelity is fun. Trades design control for correctness. Changes can cause wide side effects.
Writing something about the tension between simulation and tech design in games. Simulation creates consistent and cohesive results, but not always the most fun results. Reaching into a simulation and tweaking it to make it more fun is difficult - it introduces tension, oscillation and unintended knock-on effects. Simulations aren’t always very readable to players.
Looking back through work diaries, I have found ~4 strategies. Are there others?
Stepped through my raycast code and was struck by how much work is needed to measure distances to geometry in games. And, this is just raycasting into a 2D polygon soup - no channel masks, capsules, raymaching, fat rays or perspective corrected cones.
UE’s deceptively simple LineTraceByChannel sure obscures a lot of complexity and cost.
Spent two full evenings toiling over a 3x3 Gaussian kernel. Thought tweaking the radius and the \sigma would give good design control over how much bite the force field would have. But, as I should have realised up front, a kernel like that won’t do much to soften the edges between cells, just smooth out neighboring values…