Client

A Blind Legend Desktop : Standalone et Steam

Bonjour à tous ! Cet article va couvrir ce que nous avons fait pour créer la version desktop d'A Blind Legend et sa sortie sur la boutique Steam. Vous pouvez accéder…

Bonjour à tous ! Cet article va couvrir ce que nous avons fait pour créer la version desktop d’A Blind Legend et sa sortie sur la boutique Steam. Vous pouvez accéder à la page de la boutique ici et peut-être essayer le jeu dans sa version desktop !

Si vous ne connaissez pas encore le jeu, il était d’abord destiné aux appareils mobiles et nous avons couvert son développement dans cet article précédent, que vous voudrez peut-être consulter en premier.

En raison des accords de licence liés à l’inscription en tant que développeur Steam/Steamworks, nous ne pouvons pas parler spécifiquement du processus de publication lui-même. Néanmoins, nous pouvons partager nos impressions et ce qui était spécifique à ce projet !

BL_artwork_SD_02

Publier sur Steam

Dans l’ensemble, publier sur Steam a demandé un peu de temps pour être bien compris, mais la documentation et les forums mis à disposition des développeurs sont très fournis.

Comme beaucoup de jeux sur Steam sont créés avec Unity, ne vous inquiétez pas de ne pas trouver les informations spécifiques au fonctionnement de Unity (par exemple, la synchronisation des fichiers de sauvegarde dans Application.persistentDataPath).

Bien qu’il ne soit absolument pas nécessaire que les jeux implémentent Steamworks pour être publiés sur la boutique (et ça n’était pas très clair pour nous au départ), nous l’avons quand même fait car nous avions besoin des succès (achievements). Nous avons utilisé un wrapper C# pour l’API Steamworks appelé Steamworks.NET, que vous pouvez trouver et soutenir ici.

Nous vous conseillons de vous familiariser d’abord avec la documentation Steamworks fournie par Valve (il faut d’abord devenir développeur Steam), Steamworks.NET vous paraîtra alors plus clair.

Steamworks.NET reste malgré tout assez simple à implémenter dans des projets Unity, à initialiser, et même à mettre en place un DRM simple qui, par exemple, ferme l’application si elle n’a pas été lancée depuis Steam.

Juste une remarque sur la publication : nous laissons de côté le processus de publication, mais à force de le maîtriser, on se rend compte que les choses prennent suffisamment de sens au fur et à mesure pour que ce soit facile — assurez-vous juste de bien lire la documentation !

Gestion des entrées : des contrôles tactiles à un système clavier/manette

Dès le départ, A Blind Legend a été codé avec un système de gestion des entrées personnalisé, basé sur des « actions », le même système que nous avions construit pour le Citrus Engine. Grâce à cela, nous avons pu unifier tous les « contrôleurs » sans avoir à changer le code qui « réagissait » à ces « actions ». Le code qui réagirait à une action de « saut » (il n’y a pas une telle action dans A Blind Legend d’ailleurs :p) ne se soucierait pas de savoir quel contrôleur (clavier, souris, manette, ou toute autre entrée personnalisée) a déclenché cette action. Cela signifie un meilleur contrôle des entrées, tout en pouvant quand même vérifier le « contrôleur d’origine » de l’action pour faire quelque chose de spécial si besoin.

Nous n’avions besoin que d’ajouter le support manette et clavier, de le brancher sur notre système de gestion des entrées, et tout continuait de fonctionner, en ne changeant qu’une seule classe. Nous avons bien sûr désactivé tout événement souris/tactile simplement via de la compilation conditionnelle.

Nous avons trouvé un excellent plugin appelé Rewired pour le support manette… et bien plus encore !

En gros, Rewired offre plus que ce qu’on attendait, puisqu’il permet aussi de gérer les entrées via un système d’actions. On avait donc l’impression d’avoir deux systèmes similaires, mais Rewired dispose aussi d’une jolie fenêtre de configuration visuelle, et il était facile de le brancher sur notre solution existante (qui aurait d’ailleurs pu être complètement retirée avec un peu plus de travail et de refactoring).

Rewired nous permettait aussi de faire vibrer les manettes pour un retour supplémentaire. On aurait aimé qu’Unity ait pensé à une telle solution, mais ils ne peuvent pas être sur tous les fronts en permanence, donc Rewired est un indispensable sur desktop selon nous. Et une partie de l’équipe Unity travaille d’ailleurs sur un nouveau système d’input qui implémenterait pour l’essentiel la plupart des concepts dont nous avions besoin. Bonne chance à l’équipe qui travaille dessus !

A Blind Legend possède quelques machines à états, dont une générale qui gère le passage de l’exploration au mode combat. Grâce à cela, il suffisait de changer les « controller maps » de Rewired pour que les actions correspondent à celles qu’on avait déjà mises en place, donc fusionner notre système avec le leur a été vraiment facile sans avoir à stocker nous-mêmes les schémas ou les maps de contrôleurs.

La version standalone

A Blind Legend est aussi distribué sur desktop dans une version standalone (sans Steam ni DRM). Un peu de compilation conditionnelle pour Steamworks.NET et quelques ajustements, et les builds Windows et Mac étaient prêts assez facilement.

Je pense qu’il n’y a rien de spécial à dire sur la version standalone puisqu’on obtient en gros ce que produit Unity, et qu’on crée des installeurs quand nécessaire. Par exemple, l’installeur scriptable de Nullsoft, NSIS.

Les boutiques d’apps desktop

Il n’y a pas de version officielle sur le Mac App Store, mais l’idée a été envisagée à un moment, et Aymeric a créé le dépôt suivant avec des détails et des scripts pour aider : https://github.com/DaVikingCode/FromUnityAppToMacAppStore

Plus d’informations sur notre site web : https://davikingcode.com/fr/projets/a-blind-legend

DVC
L'équipe DVC
Studio & R&D