Démocratiser l'horreur : Comment Mega Cat Studios a rendu Five Nights at Freddy's accessible

Ce billet de blog a été écrit par Madison Petrick, la directrice UX et Accessibilité chez Mega Cat Studios.
Depuis 10 ans, la franchise de jeux vidéo Five Nights at Freddy’s se vante de sa difficulté élevée. Des défis parmi les plus impitoyables dans Ultimate Custom Night, au Five Nights at Freddy’s original : Mode 20/20/20/20, les fans de FNAF de tous horizons ont osé au fil des ans se battre pour battre ces modes et finalement réussir après de nombreuses, nombreuses tentatives.
Mais alors que la nature difficile de ces titres peut apporter une grande satisfaction pour beaucoup, pour d'autres, la faisabilité de les jouer peut être un défi tout à fait différent de l'évitement de la terreur dans le "Mode Cauchemar" chez Freddy.
L'accessibilité dans les jeux vidéo a connu une croissance exponentielle ces dernières années. Ce qui était autrefois limité à simplement pouvoir changer les paramètres de volume s'est finalement transformé en ajustement de la luminosité, contrôles remappables et améliorations de la qualité de vie, comme pouvoir accéder au menu des paramètres dès le premier démarrage d'un jeu. Avançons jusqu'à la sortie en 2020 de Naughty Dog’s The Last of Us Part II, où une nouvelle norme a été établie. Ce jeu de l'année 2020 avait plus de 60 paramètres d'accessibilité parmi lesquels choisir, avec des centaines d'heures consacrées à la recherche et au développement.
Tout en travaillant sur notre dernière sortie, FNAF : Into the Pit, nous avons été approchés avec l'idée d'ajouter des fonctionnalités d'accessibilité au jeu. Notre petite équipe n'avait pas des centaines d'heures à consacrer à la recherche, sans parler de l'"énergie féline" supplémentaire. Mais tous nos développeurs ont relevé le défi et ont pris sur eux d'être chacun responsables du développement d'un aspect de l'accessibilité. Que ce soit de la recherche, des tests de bogues ou l'apprentissage de nouvelles techniques de codage sur le tas et le partage avec nos collègues de bureau, notre motivation à donner à tout le mondeune chance de jouer FNAF : Dans le Pit (et des quantités copieuses de café) nous a poussés en avant.
Ce qui est devenu l'objectif d'intégrer quelquesfonctionnalités dans la version finale s'est transformé en plus de 20 à la fin. Bien qu'il y ait eu des fonctionnalités qui, malheureusement, n'ont pas été retenues, nous sommes fiers des nouvelles ressources que nous avons apportées à la franchise FNAF de longue date.
Fonctionnalités d'accessibilité dans FNAF
Les fonctionnalités d'accessibilité suivantes sont disponibles dans Five Nights at Freddy’s : Dans le Pit. Remarque : Certaines de ces fonctionnalités ne sont pas montrées pour éviter les spoilers !
Paramètres de couleur
Les joueurs peuvent changer le contraste des couleurs et la luminosité générale du jeu.
Nous n'avons pas pu publier un plan complet d'ajustement de Daltonisation (contraste des couleurs) à temps pour le lancement du jeu, cependant, nous avons mis en œuvre la luminosité et le contraste globaux. Beaucoup de simulations ont été réalisées avec les échelles noir et blanc afin que le contraste visuel ou le chevauchement soit limité autant que possible.


Changer les valeurs des volumes de post-traitement d'Unity nécessite juste quelques lignes de code, ce qui permet aux joueurs de personnaliser facilement les niveaux de luminosité et de contraste.

if (mainCameraVolume.TryGet(out ColorAdjustments colorAdjustments))
colorAdjustments.contrast.value =
contrastValueCurve.Evaluate(value);
(ContrastHandler.cs)
La Créature, Chica et la Vignette de Bruit Mondial
Chaque PNJ traversant le monde a sa propre vignette colorée pour indiquer sa proximité avec le joueur, par exemple, jaune pour « La Créature » et violet pour « Chica ». Les bruits généraux autour du monde, c'est-à-dire les générateurs de bruit, ont également une visualisation audio, avec une vignette de couleur grise.
Lors de la réception de retours sur l'accessibilité, les développeurs ont voulu s'assurer que Into the Pit ne reposait pas uniquement sur le son pour alerter les joueurs des menaces. Bien que des vignettes de bruit aient été ajoutées pour accommoder l'accessibilité audio, cette fonctionnalité bénéficie également à ceux qui préfèrent avoir un style de jeu plus visuel. De plus, les vignettes sont conçues pour être plus que simplement dépendantes de la couleur, grâce à l'intégration d'effets de pulsation comme indicateur de proximité secondaire pour accommoder les réglages de contraste et de luminosité.



Voici comment Matthew Wojtechko, développeur principal chez Mega Cat Studio, explique la fonctionnalité de visualisation audio :
« J'ai fait un gros effort pour m'assurer que nous visualisions tous les sons importants dans le jeu. Nous avons parcouru le jeu et avons identifié trois sources de bruit : Les pas du lapin jaune, les pas de Chica et le bruit mondial divers.
Nous avions une vignette pulsante sur le côté de l'écran pour indiquer de quel côté se trouve le lapin jaune, mais maintenant, nous devions incorporer deux autres catégories. Nous avons décidé de faire pulser ces éléments dans un rythme ; un pouls jaune pour le lapin, un pouls rose pour Chica, et un pouls blanc pour tout le reste. Si cet élément ne faisait aucun bruit, ce « rythme » serait simplement vide.
Le plus grand défi dans la mise en œuvre de cette fonctionnalité était de déterminer de quel côté se trouvait la cible par rapport à Oswald. Cela semble être un problème simple, sauf pour le fait que la façon dont le jeu a été implémenté dans l'espace 3D dans Unity ne correspond pas à la réalité que nous essayons de transmettre aux joueurs.
Considérons l'exemple d'Oswald se tenant dans la salle de sécurité pendant que le lapin jaune est dans la salle de stockage. Bien que la salle de stockage soit censée être à gauche de la salle de sécurité, dans la vue de la scène, nous pouvons voir que ces pièces sont en réalité implémentées dans la direction inverse. Dans ce cas, une comparaison directe entre les positions d'Oswald et du lapin jaune n'est pas fiable, car la compréhension du joueur de la carte ne correspond pas à la réalité dans le moteur de jeu.
C'est pourquoi, si Oswald et la cible sonore se trouvent dans des pièces différentes, le jeu détermine le chemin valide le plus proche en utilisant le système NavMesh de Unity (que nous utilisons déjà pour l'IA des ennemis), et utilise la porte qui mènerait le mieux à Oswald comme direction du son.


En savoir plus sur le système de navigation AI de Unity avec ces tutoriels :
- Navigation AI 2.0 : Notions de base sur NavMesh
- Navigation AI 2.0 : Surfaces NavMesh à l'exécution
- Navigation AI 2.0 : Liens et obstacles NavMesh
OpenDyslexic
Les joueurs peuvent sélectionner non seulement la taille et l'espacement de la police, mais aussi une police créée spécifiquement pour les lecteurs dyslexiques connue sous le nom de OpenDyslexic.
En utilisant OpenDyslexic, nous espérions augmenter la lisibilité de presque tout le texte dans Into the Pit pour les joueurs dyslexiques. Bien que notre texte par défaut soit entièrement personnalisable en taille, nous voulions ajouter un peu plus à cette option pour une lisibilité accrue en raison du genre très textuel du jeu.
Police OpenDyslexic :

Police par défaut :

Tapotement unique
Les événements de temps rapide (QTE) dans le gameplay normal/coupures auront une option pour être gagnables avec un tapotement unique avec un temps infini.
Avec cette fonctionnalité, les événements de temps rapide peuvent être réussis avec juste une seule pression sur un bouton et ne dépendent pas du temps. Bien que le "button-mashing" soit une pratique courante dans l'industrie du jeu vidéo, cette option de contrôle moteur peut aider à réduire la fatigue des boutons pour les joueurs qui le souhaitent.
Minijeux masqués automatiquement
Les minijeux masqués peuvent être progressés automatiquement sans aucun besoin d'interaction du joueur.
Les joueurs n'ont pas à compter sur des contrôles de motricité fine pour réussir les actions des minijeux, car celles-ci peuvent être effectuées automatiquement.
Les exemples ci-dessous montrent pratiquement aucune différence entre l'expérience visuelle du joueur avec le paramètre Désactivé (à gauche) ou Activé (à droite), garantissant que cette fonctionnalité émule tout autant de suspense avec moins d'entrées.
Activer/désactiver la course
Notre option d'activation de la course permet au joueur de courir sans maintenir un bouton pour aider à réduire la fatigue des boutons.
Les joueurs peuvent choisir s'ils veulent maintenir leur bouton de course sélectionné ou activer/désactiver leur course en appuyant sur leur bouton de course Activé/Désactivé pendant le jeu. Oswald passe automatiquement par les portes s'il court assez près d'elles, permettant également des transitions fluides tout en courant (pour sa vie).
Le jeu gère l'entrée en utilisant le système d'entrée d'Unity, qui facilite l'entrée basée sur les événements. Notre logique pour déterminer si le joueur court ou non se trouve dans un rappel d'entrée, qui prend en compte le paramètre actuel de la fonctionnalité d'accessibilité :
public override bool OnRunInput(InputAction.CallbackContext ctx)
{
if (ctx.started)
{
if (IsToggleRunEnabled())
Oswald.isRunning = !Oswald.isRunning;
else
Oswald.isRunning = true;
}
else (ctx.canceled)
{
if (!IsToggleRunEnabled())
Oswald.isRunning = false;
}
return Oswald.isRunning;
}
Système d'indices automatique
Le système d'indices automatique donne aux joueurs la possibilité d'augmenter/diminuer le taux d'indices de dialogue jusqu'à la minute (c'est-à-dire 5 minutes, 10 minutes, 20 minutes, Désactivé).
Ne pas savoir où aller ensuite est un moment décourageant pour tout joueur, surtout après avoir cherché partout sur une carte ou dans une zone. Dans Into the Pit, les joueurs peuvent personnaliser le taux d'indices de dialogue qu'Oswald donnera pour les aider à atteindre leur prochain objectif. Ces indices sont automatiques et peuvent être changés ou activés/désactivés à tout moment.
À l'origine, le système d'indices était activé au même taux et ne pouvait pas être ajusté. Cependant, les développeurs de Into the Pit savaient que certains joueurs auraient une meilleure expérience s'ils recevaient cet indice plus tôt, tandis que d'autres pourraient ne pas en vouloir du tout.
Cela est mis en œuvre en attendant le temps spécifié par les paramètres d'accessibilité. Le minuteur est réinitialisé lorsque le joueur reçoit un nouvel objectif. L'important avec cette mise en œuvre était de s'assurer que les développeurs évitaient les bugs de cas limites. C'est pourquoi dans la fonction ShowHint, cela commence par quelques clauses de protection pour éviter qu'Oswald ne parle à lui-même à un moment inopportun.
protected void ShowHint()
{
if (GameManager.Instance == null ||
GameManager.Instance.Oswald == null ||
GameManager.Instance.Oswald.IsStumbling ||
InteractableDoor.isPlayerNearAnyDoor())
return;
if (AdventurePC.Instance && HintsManager.TryGetHint(out string hintText))
{
InvokeDelayed(new WaitUntil(() => TextBox.Instance), () =>
{
AdventurePC.Instance.Stop();
messageTemplate.speaker = AdventurePC.Instance;
messageTemplate.text = hintText;
TextBox.Instance.overrideBlockerDelay = .25f;
TextBox.Show(messageTemplate);
});
}
UpdateCurrentQuestObjectives();
ResetTimer();
}

Taille de l'icône
Les icônes peuvent être agrandies ou réduites en taille. Même la plus grande taille n'entrave aucune vue du jeu.

Basculer entre stéréo/mono
Les joueurs peuvent choisir de rendre le son stéréo (les deux côtés sont différents) ou mono (les deux côtés sont identiques). Le son dans tout jeu d'horreur est conçu pour être non seulement troublant, mais aussi utile lorsque l'environnement du jeu essaie de guider le joueur. Savoir où "La Créature" pourrait se cacher dans Into the Pit est assez important pour la survie, après tout.
Contrôles remappables
Les joueurs peuvent remapper les contrôles à leur goût. Les contrôles sont compatibles avec des dispositifs d'accessibilité tels que le contrôleur PlayStation®5 Access™ et le contrôleur adaptatif Xbox.
Nos développeurs ont utilisé le nouveau système d'entrée de Unity pour créer les mises en page personnalisables pour les contrôles de Into the Pit. Le système d'entrée, même avec quelques modifications de code personnalisées, était mieux adapté pour avoir plusieurs liaisons, qui ont été utilisées entre toutes les interfaces partagées et les menus UI. C'était plus facile à gérer que notre précédent système d'entrée grâce à l'intégration de Input Actions, qui a rendu l'entrée plus organisée et personnalisable pour les développeurs.
« Nous avons une action d'entrée pour tout ce que le joueur peut faire dans le jeu », dit Matthew Wojtechko, « comme une action pour la lampe de poche, pour courir, se déplacer, tirer dans les mini-jeux, etc. » Lorsque le joueur remappe quelque chose, cela change les liaisons sur l'action. Tout le reste du code qui répond aux actions d'entrée reste le même, peu importe ce que sont les liaisons, car les actions d'entrée gardent ces spécificités abstraites.
Dans le Pit a 37 actions d'entrée personnalisées. Chacune désigne une action spécifique que le joueur peut effectuer et énumère les entrées correspondantes utilisées pour la déclencher. Par exemple, utiliser la lampe de poche est par défaut lié à la touche F sur le clavier et au bouton face gauche sur les manettes.
La facilité d'ajuster les liaisons d'entrée est une amélioration majeure par rapport au gestionnaire d'entrée d'origine. Il est simple de les modifier dans l'éditeur, et le rebinding à l'exécution est plus efficace, bien que cela nécessite un peu de code. Notre solution de rebinding est basée sur l'exemple fourni dans le package Input System, qui repose sur la classe RebindingOperation de Unity.
Un cas particulier qui se présente lors de la mise en œuvre d'un menu de liaison d'entrée est la gestion des entrées conflictuelles. Cela se produit lorsqu'un joueur fournit une entrée à une action qui est déjà assignée à une autre action. Une approche pour résoudre cela est de laisser le joueur assigner une entrée conflictuelle, mais d'empêcher le joueur de sauvegarder les paramètres tant qu'il n'a pas résolu le problème (c'est-à-dire, changer l'une des deux instances de la même entrée en quelque chose d'autre). Bien que cela soit une approche raisonnable, nous avons choisi de simplement échanger les liaisons dans ce cas. Donc, si la lampe de poche est F et que courir est Shift, et que le joueur lie la lampe de poche à Shift, alors courir devient F.
Utiliser le système d'entrée garde les informations de liaison abstraites en ce qui concerne d'autres codes. Ainsi, ni le script qui écoute l'entrée du joueur ni le script qui ajuste les icônes d'entrée à l'écran ne traitent d'entrées spécifiques, ce qui aide à simplifier les choses.





Événements de temps rapide (QTE)
Dans le Pit a deux types de personnalisation de QTE : Une option pour des QTE faciles dans le gameplay standard et une option pour rendre les mini-jeux cachés automatiques. Matthew Wojtechko a beaucoup travaillé sur la mise en œuvre des mini-jeux de cachette au départ, et quand il a été temps de mettre en œuvre cette fonctionnalité d'accessibilité, il savait qu'il pouvait le faire de manière simple et directe.
Les mécaniques uniques de chaque mini-jeu de cachette héritent d'une classe de base partagée. Cela a un indicateur PlayAutomatic qui vérifie les données de sauvegarde pour voir si le joueur a cette option activée ou non. Le code suivant a été simplifié :
public abstract class MechanicHidingMinigame
{
public bool PlayAutomatic { get; protected set; }
protected override void Awake()
{
PlayAutomatic = PlayerPrefs.GetInt(AccessibilityHandler.AUTO_HIDING_MINIGAMES_KEY) == 1;
}
}
Ensuite, chaque script de mini-jeu de cachette peut vérifier cet indicateur pour « jouer » automatiquement le jeu.
Par exemple, dans le mini-jeu où vous devez retenir votre souffle, nous contrôlons le système de respiration aux moments appropriés :
public class BreathGameMechanics : MechanicHidingMinigame
{
public void OnBonniePrepareLook()
{
if (PlayAutomatic)
{
BreathingSystem.Instance?.HoldBreath();
}
OnGoldBonnieAlmostLook?.Invoke();
}
public void OnBonnieEndLook()
{
isBonnieLooking = false;
if (PlayAutomatic)
{
BreathingSystem.Instance?.ReleaseBreath();
}
OnGoldBonnieStopLooing?.Invoke();
}
// There rest of the code in this class was removed for clarity
}
Style de jeu personnalisable
Les personnalisations suivantes sont proposées dans le menu principal lors du premier démarrage du jeu. Bien que nous sachions que la plupart des personnalisateurs sont traditionnellement débloqués après avoir battu un Five Nights at Freddy’s jeu à la difficultéla plus difficile possible, nous voulions défier cette norme en donnant aux joueurs accès aux personnalisateurs après avoir battu le jeu une fois à n'importe quelledifficulté. Les joueurs peuvent personnaliser ce qui suit pour une expérience de style de jeu préféré :
- Personnaliser l'agressivité des personnages.
- Ajuster la difficulté des mini-jeux de cachette.
- Augmenter ou diminuer le nombre de points de contrôle dans le jeu en ajustant la fréquence des points de contrôle.
- Option d'augmenter la qualité des batteries qui prolonge la durée des batteries de la lampe de poche.
- Augmenter ou diminuer le nombre de cachettes dans le jeu.
- Augmenter ou diminuer le nombre de générateurs de bruit dans le jeu.
Chez Mega Cat Studios, nous croyons que tout le monde mérite de jouer à des jeux, tout comme tout le monde mérite d'être complètement effrayé dans Five Nights at Freddy’s : Dans le Pit (ou pas aussi effrayé – il y a un réglage pour ça). Nous nous efforçons d'apporter l'excellence à tous nos projets, ce qui signifie développer notre boîte à outils d'accessibilité pour notre communauté et nos fans solidaires. Et si cela signifie plonger dans une fosse à balles d'inconnues du développement de jeux, nous plongerons avec enthousiasme, à chaque fois.
Nous espérons juste que ce n'est pas hanté.
