vendredi 25 avril 2025

Fears to Fathom : Ironbark Lookout (PS5)

J’ai trouvé qu’Ironbark Lookout était une chouette petite aventure horrifique, originale par son ton (horreur douce), par son esthétique rétro et par sa dimension « simulation » très sympathique et immersive du métier de guetteur d’incendie en haut d’une tour au milieu des bois. Las, l’aventure est vraiment courte, peu développée, tandis que les contrôles à la manette et la finition technique de l’ensemble détériorent sérieusement l’expérience.

Lire la critique complète...

samedi 19 avril 2025

The Gold Standard for Thumbstick Aiming

This blog post is intended for developers ; it’s a way for me to describe what I think should be the gold, simple standard for any video game that expects the user to look around or aim using a thumbstick on a controller. I love indie FPSs and first person horror and adventure, and sadly, more often than not, they offer an implementation for the camera stick that I find severely lacking in precision, comfort and smoothness.

I’m writing this after having researched the subject extensively ; read veteran developer Josh Sutphin’s great blog post about deadzones ; watched many deadzone analysises on Eternal Dahaka’s YouTube video channel and read many of his numerous documented feedbacks on Steam and Reddit ; and of course after having myself experimented and tested a large number of games with various implementations of stick aiming.

Without further ado, here are the basic features I think we should have in any first person game where looking/aiming is involved :

  • a scaled radial deadzone for the look stick
  • a deadzone slider for the look stick (ranges from 0% to 40%, increments of 1%)
  • an acceleration exponant slider for the look stick (ranges from 0.1 to 5, increments of 0.1)
  • options to separately invert X and Y axises for the look stick
  • a sensitivity slider for the look stick

The last two items seem pretty popular or self-explanatory already – but important nonetheless. Let me instead elaborate on the first three items.

What is a scaled radial deadzone ? As Josh Sutphin defines it, it’s an implementation of thumbstick aiming that verifies two things. Let’s look at the picture below (credits Josh Sutphin) :

Where it’s pitch black near the center, game will nullify any input : that’s the deadzone. The gradient indicates the strength of the resulting input. As you move away from the center (as you push your stick in any direction), the input will smoothly ramp from 0 to +1 whatever the size of the deadzone. This is the result we want, this is what the scaled in scaled radial deadzone is about.

So the two things that are of extreme importance are these : 1) the deadzone should be radial and 2) the input should be scaled to ramp smoothly from 0 to +1 from the moment the stick escapes the deadzone and no matter the actual size of the deadzone. This is how you will provide gamers with precise, smooth, full diagonal camera movement that is both immersive and effective.

We also want the user to be able to freely set the deadzone size with a slider ; ranging from zero to 40%, in order to cover a wide range of potential wear for the thumbstick.

Finally, the acceleration exponant slider. A good scaled radial deadzone is mandatory, but it is not sufficient to provide ease of aiming for the user. You need to also implement a stick response curve, and you need to let the user adjust the curve to their liking. Basically, a response curve makes more or less stick input range for fine, slow controls.

With no response curve, if you push the stick at 50% of the available range of input (the « livezone »), the camera speed in-game will be 50% of its maximum speed. But this is not necessarily what we want. We may want to reach 50% speed only when the stick is near fully tilted. This is where the response curve finds its purpose.

See the examples below (credits Eternal Dahaka for his interactive demo where you can fiddle with deadzone size, acceleration exponant and stick position) :

first
Exponant = 1 (or no response curve)

 

second
Exponent = 3 (stick in the exact same position ; notice how the acceleration value is lowered)

 

third
Exponent = 0.3 (stick still in the same position ; now the acceleration value is much higher, camera speed will be fast as soon as you touch the stick)

 

Now that we explained all the items, let’s see how you can implement the scaled radial deadzone and the response curve in the code. Here’s an example where I borrow heavily from Josh Sutphin :

float deadzone = 0.20f;
float exponent = 3.00f;
Vector2 stickInput = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
if (stickInput.magnitude < deadzone)
    {
    stickInput = Vector2.zero;
    }
else
    {
    stickInput = stickInput.normalized * pow(((stickInput.magnitude - deadzone)/(1 - deadzone)), exponent);
    }

 

This last expression

pow(((stickInput.magnitude - deadzone)/(1 - deadzone)), exponent)

is a power function that can be written like this :

Where « x » is the stick input magnitude, « d » is the deadzone size and « a » is the acceleration exponant ; the latter two which you should provide sliders for in your game settings.

You can see this power function in action in another interactive demo made by Eternal Dahaka (that I’ve slighly modified to provide a wider range of values).

 

So this is it. I think we’ve covered everything you need to know to implement a great aiming system in your game. Let me know what you think in the comments.

One last thing though. Take the time to test camera movement at least once with your deadzone set to zero. This will let you check if another built-in-engine deadzone isn’t creeping up on your input – in which case please make sure to disable it.

jeudi 10 avril 2025

Asemblance (PC)

Je n’ai pas accroché à Asemblance : l’histoire tient sur un post-it, ne va nulle part ; le challenge interactif s’avère à 80% ultra simple et à 20% totalement impossible tout seul et sans soluce. Je tenterai quand même la suite Oversight (que je possède déjà) par acquis de conscience…

Lire la critique complète...

- page 1 de 160