Adventure Novel Framework (ANF)

ANF est un framework sur lequel je travaille depuis 2020, et qui a été utilisé pour de nombreux projets.

C'est à la base un framework pour visual novel / point & clicks. Il a cependant été décliné pour d'autres types de projets.

MainLogo

Langage

C#

Unity

Type

Framework

Temps de dev

2021-2026

Histoire du framework

ANF est un framework servant au départ à créer des Visual Novel 2D. Il a évolué au fil du temps et est maintenant un framework plutôt centrée sur la création de point & click / visual novel 3D non linéaires. De ce fait, il a eu plusieurs formes au cours des années, voir noms. On peut distinguer 4 phases dans son évolution :

- La phase pré-framework fut la première phase du framework. Elle regroupe les premiers jeux Harold's Quest fait à l'époque sur Python et Javascript. Au départ, il consistait simplement en des fonctions permettant d'afficher des dialogues et d'effectuer des actions. Il fallait tout de même coder en python le jeu, même si les fonctions prémachaient le travail. La première réelle version du framework vu le jour avec Harold's Quest 2. Le jeu utilisait un moteur de jeu fait à la main et permettant de créer un visual novel quasiment sans avoir à toucher de code python. Bien que cette version était fonctionnelle, elle possédait certaines failles (mauvaise gestion mémoire, représentation interne des dialogues pas assez efficace, ...) qui ne la rendait pas viable à long terme.

- La phase du début du framework fut la deuxième phase du framework. Elle regroupe certains jeux Harold's Quest, mais aussi d'autres jeux n'ayant rien à voir avec la série. Ces derniers réutilisent en général le système de localisation du framework, ainsi que le processeur de script. Cette phase marque le début du framework sur Unity, avec un changement drastique dans la façon dont il fonctionne. Le processeur de script fut crée pour contrôler plus simplement les évenement en jeu, et une première version d'ANSL (Adventure Novel Scripting Language) fut conceptualisé.

- La phase moderne du framework fut la troisème phase du framework. Elle regroupe les remakes des jeux Harold's Quest, mais aussi des projets étudiants. Ces derniers réutilisent le système de localisation du framework, ainsi que le processeur de script. Le twist est que les systèmes utilisés par ces projets étudiants ont été modifiés par rapport à ceux d'Harold's Quest. Le système de localisation a été ammélioré (performances et accessibilités), et une version nodale de ANSL, plus accessible pour des non-programmeurs, a été crée. De coté des jeux Harold's Quest, cette phase marque la transition vers de la 3D point & click. ANSL, le language de script du framework a été retravaillé pour être plus accessible et simple à utiliser. Le framework en lui-même a été retravaillé pour être plus agréable à regarder et plus simple à modifier par la suite. Dans le cas du remake du Joyau du Nord, une version alternative du framework a été crée afin de supporter les différentes mécaniques de RPG du jeu.

- La phase finale du framework sera la quatrième phase du framework. Elle représentera la création d'une version standalone du framework, utilisant différentes parties des jeux précédents. Le système de localisation utilisera la version de My Herbarium, et le reste sera hérité du remake du Joyau du Nord. Des modifications de stabilité seront effectués sur le framework pour le rendre plus accessible à une plus grande audience, et des features d'accessibiltiés seront ajoutées.

screenShot

Schéma de l'évolution de ANF. Les jeux en verts héritent de l'intégralité du framework. Les jeux en jaune héritent seulement d'une partie.

Bases du framework

Le framework est décomposé en plusieurs modules, qui sont responsables de différentes parties du framework.

- Le manager est responsable de gérer les autres modules et de s'assurer qu'ils soient bien synchronisés. Il gère aussi les variables joueurs (nom du joueur, quêtes en cours, ...)

- Le monde est responsable des personnages à l'écran et du décor.

- Intéractions est responsable de la mécanique d'intéraction du framework.

- Le processeur de script est responsable de la traduction du language de script ANSL en commandes interprétables par le framework.

- Le GUI est responsable des différents élements de UI du framework (menu pause, dialogues, ...).

- La localisation est gérée par le framework avec un systême fait à la main.

- La carte permet au joueur de se déplacer dans une ou plusieurs cartes. Cela permet d'avoir une expérience de jeu moins linéaire et plus ouverte.



ANSL (Adventure Novel Scripting Langguage) est le language de script permettant de créer des jeux sans avoir à trop toucher le framework.

screenShot

Schéma des différents modules de ANF

ANSL

ANSL est le language de script du framework. Il est similaire en synthaxe et en fonctionnement à du C# afin de minimiser le temps de prise en main. Lors de l'interpretation du script, le processeur lira le code ligne par ligne, et déclenchera les comportements voulu. Il y a deux types de "commandes" : les fonctions et des mots clés de contrôles.

- Les mots clés de contrôles sont if, interact, choice, switch, ... . Ils déclenchent une modification de la lecture du fichier de script. If vérifie si une variable joueur a une certaine valeur. Si oui, des commandes sont effectués. Si non, d'autres commandes le seront. Choice déclenche l'apparation d'un choix, demandant une interaction du joueur avant de continuer. Interact permet de lancer le mode interaction du framework. (Il faut alors cliquer sur un objet du monde pour déclencher un nouveau script)

- Les fonctions sont les commandes les plus communes dans ANSL. Elles ont le format NOM_COMMANDE(PARAMETRE_1;PARAMETRE_2;...;PARAMETRE_N). Ces fonctions permettent d'accomplir un grand nombre d'actions, comme afficher un dialogue, modifier des variables joueurs, changer de décors, de météo ou de personnages, faire un fondu, change le script courant, ...



Une module de langue pour Visual Studio Code a aussi été développé pour permettre de visualiser plus facilement le code.

screenShot

Exemple d'un script ANSL. Celui-ci représente la fin d'un dialogue dans le remake du Joyau du Nord (2026)

La carte

Utiliser la fonction map dans ANSL permet d'ouvrir une carte spécifique. Cela a pour effet d'ouvrir une carte à l'écran, permettant au joueur de se déplacer dans le monde. C'est une façon de permettre des déplacements dans un contexte de jeu type Point & Click / Visual Novel.

Le framework peut supporter plusieurs cartes. Il suffit simplement de les setup correctement. Une carte est constitué de :

- Un visuel qui représente la région dant laquelle on va se déplacer.

- Des boutons qui représentent les différents points d'intérêt de la carte. Cliquer sur un bouton a pour effet de fermer la carte et de lancer un script prédéfini. Il est aussi possible de se déplacer de carte en carte avec une utilisation intéligente de scripts. Pour setup ou redirigent chaque points, il faut indiquer dans un fichier .txt les informations de chaques boutons. On peut aussi faire en sorte qu'un bouton ne s'affiche que si une condition avec une variable joueur est remplis. (Par exemple : Je ne peux me déplacer à la mairie que si la variable canTravel_CityHall est à 1)

Exemple de carte dans le remake du Joyau du Nord (2026)

Mode interaction

Le mode intéraction permet à l'utilisateur d'intéragir avec l'environnement. Il intéragir avec des objets du décor ainsi qu'avec les personnages présent. Cliquer sur un élement intéractible a pour effet de lancer un script ANSL spécifique. Pour setup le monde interaction, il suffit, dans le script ANSL, d'utiliser différentes fonctions pour spécifier les scripts lancés par les intéractions, ou pour éventuellement désactiver l'intéraction sur certains élements. Enfin, il suffit d'utiliser le mot clé interact afin de lancer le mode interaction.

Par défaut, il peut aussi intéragir avec le bas de l'écran pour ouvrir la carte de l'endroit ou il se trouve.

Exemple d'une série d'intéractions dans Harold's Quest 2 (2025)

Les variables joueurs

Les variables joueurs sont des variables accessibles et modifiables en runtime à partir d'ANSL. Elles peuvent représenter différentes choses, comme des quêtes ou des états de météo. De nombreux systèmes utilisent les variables joueurs, comme le système de carte ou le système de quête dans Le Joyau Du Nord.

screenShot

Extraits des variables joueurs de Le Joyau du Nord (2026)

Localisation

Le framework comporte un système préfait pour de la localisation et de la gestion de taille, tyopographie et couleurs de textes.

Chaque text localisé est affecté à un "channel". Il en existe 10. Par la suite, on peut modifier les informations d'un channel, ce qui aura pour effet de modifier la taille, typographie et couleur de toutes les zones de textes affectées au channel. L'implémentation se base sur l'utilisation de UnityEvents.

Pour les traductions, plusieurs fichiers sont crées pour contenir les différents textes du projet. Il en existe par défaut 2 :

- Le fichier system qui regroupe les textes liés aux différents menus. Ils sont en général "statique", ne devant pas être modifiés entre chaque projet.

- Le fichier common qui regroupe les fichiers textes "commun" du jeu. Ce sont dans le cas de visual novels les textes liés à l'histoire et qui sont affichés dans les boites de dialogues.

On peut créer d'autres fichiers de localisations et les charger au runtime. Cela permet de séquencer le fichier common et d'alléger le poids en mémoire du système.

screenShot

Extrait de fichiers de localisation dans le remake de Le Joyau Du Nord (2026)