Article original : How I won a scholarship to Apple’s yearly event for the second time
Par Renan Magagnin
Introduction
Cet article décrit le processus derrière Mindblower, un jeu qui a été l'une des soumissions sélectionnées pour la Bourse WWDC19. Il est maintenant disponible sur l'AppStore et GitHub.
Les Bourses WWDC récompensent des étudiants du monde entier avec l'opportunité d'assister à l'événement annuel d'Apple. Les développeurs sélectionnés pour une bourse reçoivent un billet pour la WWDC, un hébergement pour la conférence et une année d'adhésion au Programme Apple Developer gratuitement.
J'étais étudiant à l'Apple Developer Academy et c'était la deuxième fois que je remportais la bourse — mon projet de l'année dernière peut être trouvé ici. J'étais incroyablement excité par la nouvelle et j'ai pensé partager le processus derrière le jeu qui m'a permis de recevoir cette opportunité une fois de plus.
Dans Mindblower, l'objectif est de souffler les esprits. Pour y parvenir, le joueur tire des grenades collantes qui sont affectées par des champs vectoriels. La boucle principale consiste à analyser chaque niveau, à élaborer un plan et à tirer avec précision.
L'Idée
L'inspiration est venue de la combinaison d'être intrigué par les optimisations dans Frost, l'un des gagnants des Apple Design Awards 2018, et des vidéos sur les champs vectoriels par 3Blue1Brown.
L'idée était d'optimiser le mouvement d'un grand nombre d'entités en utilisant des équations de champs vectoriels pour déterminer leur vitesse.
Un prototype précoce simulant un champ vectoriel vortex affectant de petites entités
Concept du Jeu
Le prototype montré ci-dessus a prouvé que cela pouvait, en effet, être la mécanique de base du jeu. Maintenant, il était temps de trouver les éléments principaux qui permettraient un gameplay intéressant :
- Catapulte : Permet au joueur de tirer des balles en déterminant leur vitesse initiale, étant donné la position fixe de la catapulte.
- Objectif : Au contact avec au moins une balle, enregistre que l'étape est complète.
- Champs vectoriels obstacles : Ceux-ci existent dans une tentative d'empêcher le joueur d'atteindre l'objectif.
- Inverseurs : Au contact avec une balle, font tourner l'orientation de chaque champ vectoriel dans l'étape de 180°.
- Portails : Existent en paires et toute balle qui entre par un portail, sort par l'autre.
Une version précoce du jeu avec une catapulte fonctionnelle, quelques champs vectoriels différents et l'objectif
Design des Niveaux
L'étape suivante était de créer des étapes qui, de manière intéressante, introduiraient progressivement les éléments du jeu et deviendraient de plus en plus difficiles.
Pour y parvenir, il y a eu beaucoup d'expérimentations avec les équations de champs vectoriels pour trouver celles qui conviendraient au jeu. Ensuite, des combinaisons de ces champs vectoriels et des autres éléments du jeu ont donné forme aux étapes dans la version finale du jeu.
Maquettes des étapes, qui introduisent progressivement tous les éléments du jeu avant de les combiner tous dans l'étape finale
Implémentation
À ce stade, l'idée était bien définie et les étapes étaient déjà planifiées, il était donc facile d'identifier les systèmes qui seraient nécessaires et ce qu'ils devraient supporter. Il est également devenu clair que la partie clé serait de faciliter la construction des étapes.
Avec cela en tête, les champs vectoriels ont été conçus pour supporter la personnalisation de leur équation d'accélération, de leur forme, de leur force, de leur couleur et de leur transparence.
Cela a permis de créer différentes étapes de manière plutôt élégante et facile — supportant même plusieurs catapultes ou objectifs. Cela a également évité la répétition de code et a atteint toutes les compositions présentes dans les étapes planifiées pour le jeu final.
Design
Les graphismes ont été créés avec Sketch et des particules SpriteKit. L'intention était de suivre le thème néon de WWDC19 et de prendre littéralement la phrase d'Apple :
"Écrivez du code. Soufflez les esprits."
La boucle principale composée d'une catapulte tirant des balles sur une plus grande balle représentant l'objectif a été améliorée. Maintenant, un arc néon tirait des grenades collantes sur un esprit à souffler. Cela n'était pas seulement plus visuellement attrayant, mais aussi plus intuitif.
Et, afin de rendre le succès plus satisfaisant, il était important de se concentrer sur sa partie centrale : l'explosion.
Ce résultat a été obtenu en utilisant quatre particules différentes et plusieurs SKActions pour créer programmatiquement le rebond au contact et les morceaux de la tête volant partout (qui ont été exportés en 9 actifs différents).
En tant que touche finale, il était également important — avec des animations — de rendre les lumières néon réelles. Pour y parvenir, il a fallu beaucoup d'observation de références sur Internet et BEAUCOUP de fadeTo(alpha) et wait(forDuration) SKActions dans le code.
Audio
L'audio a été réalisé à partir d'un mélange de sources en ligne et de certains effets sonores créés sur Garageband. Pour l'implémentation, des actions SpriteKit et le framework AVFoundation ont été utilisés.
La musique de fond utilisée est Paradise by Juno Dreams et a été trouvée dans l'awesome mixtape by NewRetroWave sur YouTube. Elle correspondait simplement si bien au thème et au jeu.
Adaptation au Format PlaygroundBook
Puisque le jeu a été entièrement réalisé avec SpriteKit, la transition a été presque sans stress, ne nécessitant que l'exigence classique de marquer presque tout dans le code comme public.
La dernière étape consistait à fournir une page d'instructions dans le livre de terrain de jeu. L'objectif était de n'y inclure que les instructions nécessaires, tout en la gardant aussi concise que possible, afin de garder l'accent sur le jeu.
Conclusion
En rétrospective, je crois que ce qui a le plus contribué à la qualité du résultat final a été ce qui suit :
- Être curieux : Les idées intéressantes peuvent venir de n'importe quoi. Pour moi, c'était lorsque je me suis demandé : "Comment les gens de Frost ont-ils fait cela ? Comment est-ce que je le ferais ?"
- Élaborer un plan : Valider l'idée avant même de penser à l'implémentation était crucial. Avoir une idée claire de l'objectif final a rendu l'identification des meilleures approches beaucoup plus facile.
- Créer pour les gens : Faire de l'expérience du joueur/utilisateur votre priorité numéro un. Faites tourner chaque décision autour de cela.
Merci beaucoup d'avoir lu. Si vous avez des questions, des suggestions ou des commentaires, n'hésitez pas à les écrire dans la section des commentaires ci-dessous ou à me les envoyer directement, je serai ravi de répondre.