Andy's Super Great Park, libéré, arrive sur Android

Posté par  (site web personnel) . Édité par Xavier Teyssier, Benoît Sibaud, thomasv et Nÿco. Modéré par NeoX. Licence CC By‑SA.
28
25
oct.
2013
Jeu

Andy's Super Great Park est un jeu de tir en montagnes russes, développé par Stuffomatic, et sorti sous Windows et Linux en décembre 2012.

Le jeu a été libéré discrètement lors de la reprise du développement sur Plee the Bear (auquel vous avez bien contribué) et une version bêta pour Android est disponible depuis peu sur le Google Play Store.

La suite de la dépêche présente les nouveautés du projet.

Une capture du jeu

Sommaire

Les nouveautés

Depuis la première version sortie en décembre 2012, huit mises à jour ont été réalisées pour améliorer le jeu.

Une des principales correction concerne un problème d'invalidation des textures lors du redimensionnement de la fenêtre sous Windows. En effet, nous utilisons OpenGL pour l'affichage, couplé à la SDL, et il s'avère que cette dernière perd facilement le contexte GL lorsqu'il arrive quelque chose à la fenêtre (redimensionnement, passage plein-écran à fenêtré ou l'inverse, etc.) Ce problème n'apparaît plus dans la version 2 de la SDL mais pour les programmes utilisant encore l'ancienne version, il n'y avait qu'une solution : recharger les textures quand un changement problématique se produisait sur la fenêtre. Bonjour les lenteurs !

Alors vous allez me dire : « qui s'intéresse aux problèmes spécifiques à Windows ? ». Et bien la réponse est « plein de gens ». Plus sérieusement, comme d'autres ici, je compile ma version Windows sous Linux, puis je teste vite fais sous Windows pour constater que ça marche. Quelques fois je teste même seulement avec Wine. Et bien voilà, ce n'était pas suffisant. Je le saurai pour la prochaine fois : pas de machine virtuelle, pas de Wine, il faut tester à fond dans un environnement Windows classique.

Parmi les autres nouveautés, le record mondial de chaque niveau est maintenant affiché lors du décompte des points, afin que le joueur puisse situer sa performance sur l'ensemble des joueurs. Nous avons aussi mis en évidence les niveaux cachés dans l'interface de sélection de niveaux. Enfin, le jeu est maintenant traduit en français, en portugais et en espagnol ; l'anglais étant la langue par défaut.

Image du jeu en Portugais. Vous remarquerez qu'il manque des traductions !

La libération

D'autres bugs importants ont été corrigés ainsi que divers problèmes de compilation, mais la grande nouveauté est la libération du jeu. Vous trouverez ainsi le code source de la dernière version sur le site du jeu, ainsi que la version de développement du jeu et de son moteur sur GitHub. Le code est disponible sous les termes de la version 3 de la GPL et les ressources sous les termes du contrat Creative Commons dans sa variante paternité, partage à l'identique, en version 3.
Logo de la GPL 3
Logo de CC by-sa

L'avantage de passer en libre est que je peux maintenant déléguer la construction des paquets. Une des critiques entendue à la sortie du jeu était qu'il n'y avait pas de paquets autres que pour Ubuntu. Grande nouvelle, je ne fais plus de paquets Ubuntu ! Maintenant je fournis simplement une archive Linux générique qui passe presque partout. À côté de cela, un contributeur a créé le paquet pour OpenSUSE, une autre personne se penche sur un paquet pour Mageia et le paquet Debian est en attente (le sponsor est débordé).

La personne qui devait s'occuper du paquet Fedora n'a finalement pas eu le temps de s'en occuper. Je cherche donc d'autres personnes motivées pour s'occuper de Fedora et des autres distributions.

Le jeu PC reste payant, à un prix libre avec un minimum à 2 €. Ainsi, les paquets disponibles dans les distributions ne donnent accès qu'à la première partie du jeu, après quoi le joueur est invité à acheter le jeu. Lors de la validation de l'achat, une clé est donnée à l'acheteur afin de débloquer les autres niveaux.

Le port Android

Vous connaissez une application de nettoyage d'écran ?

La sortie de la version 2 de la SDL a attisé ma curiosité par son support officiel de la plate-forme Android. J'ai donc essayé de produire un paquet vite fait pour voir comment cela fonctionnait, puis devant la facilité de l'opération j'en suis venu à faire un port complet. Tout n'était pas automatique mais les problématiques se résolvaient assez simplement et j'ai pu publier le premier APK sur le Google Play Store assez rapidement. Le jeu est disponible uniquement sur les marchés français et belge pour l'instant, le temps d'avoir des retours d'utilisateurs et de s'assurer que ça tourne bien. L'APK est aussi disponible sur le site du jeu. Ces versions sont gratuites et contiennent le jeu complet ; nous réfléchissons actuellement aux différents moyens de les monétiser.

J'ai commencé à raconter les étapes de la conversion sur notre blog (en anglais, parties 1, 2 et 3). Il reste des choses à raconter, notamment la création proprement dite de l'application Android (sur une base Java), la gestion des traductions avec libintl-lite pour remplacer Gettext et la refonte de la procédure d'affichage pour la mettre dans un thread séparé.

J'envisage de convertir ces notes en HowTo par la suite mais devant la charge de travail que cela représente, j'aimerais bien un peu d'aide. Est-ce qu'un lecteur serait intéressé pour sortir un plan ou réaliser les traductions à partir du contenu du blog ? Il faut aussi choisir le support qui recevra ces HowTo. Je pense bien sûr à LinuxFr, mais aussi à Développez.com. Toutes les idées sont les bienvenues.

À propos du moteur du jeu

Andy's Super Great Park est construit sur le même moteur que Plee the Bear, qui nous a aussi servi à réaliser le prototype du jeu Tunnel. Il s'agit d'un moteur en C++, orienté jeux en 2D, qui vient accompagné d'un éditeur de niveaux, d'animations et de personnages. Nous l'avons utilisé principalement pour des jeux de plates-formes mais nous pensons qu'il peut très bien être utilisé pour d'autres types de jeux, par exemple pour des jeux vue de haut.

Nous recherchons des contributeurs pour réaliser des tutoriels, des démos et d'autres expérimentations à l'aide de notre moteur. L'idée est d'avoir des retours d'utilisateurs pour corriger les problèmes et aussi de gagner en visibilité. Nous avons quelques tutoriels sur l'ancien wiki de Plee the Bear, mais ils n'ont pas été mis à jour avec les évolutions depuis quelques années. Nous aurions aussi besoin d'une mise à jour technique de quelques parties peu accessibles du moteur (comme l'affreuse idée de l'héritage template). Si vous avez envie de faire du jeu et de l'algorithmique en C++, c'est l'occasion !

Que faire après cette dépêche

Nous allons progressivement procéder à la mise en place du jeu Android sur tous les marchés, et si le jeu trouve son public je pense que nous ferons quelques retouches graphiques et chercherons un moyen de le monétiser. À côté de cela, nous reprenons tranquillement le développement de Plee the Bear comme annoncé dans l'appel aux financements.

Si vous avez lu jusqu'ici, je vous invite à :

  • # Processus de conversion du jeu vers Android

    Posté par  . Évalué à 6.

    Merci beaucoup pour les blog posts sur le processus de conversion du jeu vers Android.
    C'est tres interessant.

  • # Cela à l'air pas mal !

    Posté par  . Évalué à 1.

    Pourquoi ne pas poster le jeu F-DROID qui un "magasin" opensource d'application opensource pour android tout à fait sympathique ?

    De plus j'ai lancer le jeu, mais je n'ai pas trouver comment en sortir, je veux dire par là mettre fin à l'application !
    Je sais c'est pas à la mode sur téléphone les menus "Quitter", mais moi j'aime bien terminer les taches dont j'ai plus besoin !

    • [^] # Re: Cela à l'air pas mal !

      Posté par  (site web personnel) . Évalué à 2.

      Le bouton quitter, ce n'est pas une question de mode. Dans les guidelines pour créer des applis Android, il est dit qu'il faut éviter.

      Je n'arrive pas à retrouver le lien qui le dit clairement donc si quelqu'un peut me compléter…

      • [^] # Re: Cela à l'air pas mal !

        Posté par  . Évalué à 3.

        C'est bien ce que je dis, c'est vraiment une idée à la c…
        Qui saiT mieux que moi, si je veux fermer une application pour le pas la ré-ouvrir dans les prochains 15 jours ?
        Je suis pour les bouton "Fermer" , pas "Quitter" …

        J'ai horreur des trucs qui essaye de réfléchir à ma place !
        C'est bien pour cela que j'ai pas un truc avec une pomme dessus … ok on est vendredi !

        • [^] # Re: Cela à l'air pas mal !

          Posté par  (site web personnel) . Évalué à 3. Dernière modification le 25 octobre 2013 à 16:18.

          Qui saiT mieux que moi, si je veux fermer une application pour le pas la ré-ouvrir dans les prochains 15 jours ?

          une machine peut mieux savoir que toi, même si ça te choque, par rapport à tes habitudes etc… Car toi tu es dans le subjectif, et peut-être que 5 minutes après tu auras changé d'avis et comme Android n'aura pas eu besoin de la RAM, hop c'est plus rapide que ton truc manuel.

          Va falloir arrêter un jour d'imaginer que la machine est plus bête que l'humain sur ce genre de tâches (même pour les echecs de nos jours les machines battent l'Homme).

          J'ai horreur des trucs qui essaye de réfléchir à ma place !

          Pas moi, ça m'évite d'une de réfléchir à des trucs inutiles, et de deux c'est encore mieux si ces trucs sont plus doués que moi.
          tu voudrais pas avoir à refléchir pour démarrer ta machine (par exemple, genre 100 questions au démarrage pour savoir quel partie de l'OS il faut lancer plutôt que de recourir à systemd pour "optimiser le démarrage") aussi pendant qu'on y est?
          Ou une voiture avec une manivelle aussi même si c'est plus utile, car tu as l'habitude d'en avoir une?

          C'est bien ce que je dis, c'est vraiment une idée à la c…

          Au contraire.
          Je dirai que c'est de la résistance au changement (aimer faire une tâche inutile qu'on avait l'habitude de faire) à partir du moment où c'est bien fait (et ayant un Android avec peu de RAM, je constate que c'est plutôt bien fait).

    • [^] # Re: Cela à l'air pas mal !

      Posté par  (site web personnel) . Évalué à 6.

      Pourquoi ne pas poster le jeu F-DROID qui un "magasin" opensource d'application opensource pour android tout à fait sympathique ?

      Je ne connaissais pas, je vais regarder !

      De plus j'ai lancer le jeu, mais je n'ai pas trouver comment en sortir, je veux dire par là mettre fin à l'application !
      Je sais c'est pas à la mode sur téléphone les menus "Quitter", mais moi j'aime bien terminer les taches dont j'ai plus besoin !

      J'avais implémenté le bouton pour quitter mais cela va clairement à l'encontre des directives de développement pour Android. La politique est que les applications ne doivent jamais quitter d'elles-mêmes. Du coup j'ai enlevé le bouton.

      Pour quitter il faut donc appuyer sur le bouton Home de l'appareil, par exemple. J'ai fait attention à réduire autant que possible la consommation du jeu en arrière plan (il ne devrait réagir qu'aux événements du genre « réactivation du jeu »).

      Éventuellement je pourrais implémenter un retour à l'écran principal en pressant le bouton Back quand on est dans le sélecteur de niveau, pour permettre de sortir sans quitter.

      • [^] # Re: Cela à l'air pas mal !

        Posté par  . Évalué à 1.

        Le soucis là c'est que même le bouton "retour arrière" ne permet pas de sortir (dans le sens mettre en tache de fond des fois que je revienne) du jeu et que je dois utiliser le bouton "menu général" pour sortir de l'application.
        Je ne développe pas pour android alors je connais pas les noms standard des boutons.

      • [^] # Re: Cela à l'air pas mal !

        Posté par  (site web personnel) . Évalué à 7.

        Pour moi une application où j’appuie intentionnellement sur un bouton pour dire que je veux la stopper, elle ne quitte pas d'elle-même. Une application qui quitte "d'elle même", c'est plutôt une application qui plante.

        Je fais partie des vieux cons qui font de la résistance aux changements (cf. un commentaire plus haut) et qui apprécient de pouvoir décider de sortir complètement d'une application s'ils en ont envie. Et ce même si le système a sa gestion de la mémoire qui est bien écrite. Même si au prochain lancement ça prendra un peu plus de temps - c'est mon problème.

        Qu'on prévoit qu'une application puisse se fermer proprement sur requête du système pour qu'il récupère la mémoire, c'est nickel. Qu'on n'autorise pas l'utilisateur à choisir de fermer explicitement une appli non.

        Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

        • [^] # Re: Cela à l'air pas mal !

          Posté par  . Évalué à 5.

          Qu'on n'autorise pas l'utilisateur à choisir de fermer explicitement une appli non.

          En l’occurrence, c'est possible sur Android, il faut afficher la liste des applications et faire glisser sur le côté celle qu'on veut fermer.

          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

          • [^] # Re: Cela à l'air pas mal !

            Posté par  . Évalué à -2.

            C'est sur que d'ouvrir une console pour faire un ps -a, puis un kill -KILL (je sais je suis un sauvage), c'est vachement plus pratique que de faire menu - quitter, ou encore crtl-Q ou alt-Q en mode console !
            Mon PC aussi il gère sa mémoire, quand il y en a plus, il reboote, et hop j'en ais a nouveau tout plein ! c'est vrais depuis windows 3.0 !

            • [^] # Re: Cela à l'air pas mal !

              Posté par  . Évalué à 3.

              Ce n'est pas tout comparable, la méthode que j'explique demande un clic et un déplacement du doigt, c'est aussi simple que menu → quitter, voir plus simple si le menu est fort peuplé.

              « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

        • [^] # Re: Cela à l'air pas mal !

          Posté par  . Évalué à 1.

          Tu peux "decider de sortir completement de l'appli si tu en as envie".
          Tu appuies sur le bouton Home pour revenir au bureau, puis sur le bouton "Liste des applis ouvertes" et tu fais glisser la derniere icone, qui sera le jeu. Ce n'est pas non plus sorcier.

          Il y a aussi des applis de gestion de la memoire qui ferment automatiquement les applis en arriere plan, au cas ou tu ne fasses pas confiance a Android.

          Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.

          • [^] # Re: Cela à l'air pas mal !

            Posté par  (site web personnel) . Évalué à 2.

            C'est ce que je fais, à défaut. Ça coûte quoi une entrée "Quitter" dans le menu de l'application?

            Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

            • [^] # Re: Cela à l'air pas mal !

              Posté par  (site web personnel) . Évalué à 5.

              Ça coûte rien dans l'implémentation mais ça fait tâche au niveau de l'unité du système. C'est comme si je faisais une application bureautique sans reprendre le thème système pour les icônes de couper-copier-coller, ou d'annulation, ou si les boîtes de dialogues avaient les boutons à gauche plutôt qu'en bas. Cela fonctionne mais ça fait tâche.

              Donc pas de bouton « quitter » car je respecte les règles du système hôte. Par contre je mettrai le passage en arrière plan avec le bouton « retour arrière »

            • [^] # Re: Cela à l'air pas mal !

              Posté par  (site web personnel) . Évalué à 4.

              Ça coûte quoi une entrée "Quitter" dans le menu de l'application?

              Un alourdissement du GUI pour complètement rien (en plus d'être à l'encontre des guidelines de l'OS, chos eque d'habitude les linuxiens n'aiment pas "bouh les boutons sont pas dans le bon ordre" bouh il a pas repris mon thème" etc).

            • [^] # Re: Cela à l'air pas mal !

              Posté par  . Évalué à -2.

              Cherche pas, on des vieux cons !
              C'est cela d'avoir débuter avec des pc, on commence à se durcir de la feuille, tu t'en fous de comment c'est fait, si l'application elle tourne ou pas en arrière fond, voyons, tu t'en fou de savoir ce que fait l'application en arrière fond, surtout quand elle a accès à ton GPS, ton carnet d'adresse, et ton appareil photo !
              De toute façon, tu n'a rien à cacher, et puis réfléchir à tout cela c'est tellement fatiguant, après on est trop fatigué pour voir ces jolies publicités !

              Pourquoi l'esprit libre, et les notions d'informatique loyale, s'arrenteraient-elles à la porte de mon téléphone, cela à un écran, un clavier et quand j'y tape dessus il me répond, c'est un ordinateur avec un fax voie-donnée, un gps et une webcam de bonne qualité pour faire des photos !

              Un menu "quitter" qui met fin à une application, c'est la b-a-ba de l'informatique loyale non ?

              • [^] # Re: Cela à l'air pas mal !

                Posté par  . Évalué à 2.

                Puisque l'on te dit qu'il est tout à fait possible sous Android de fermer explicitement une application ? On ne met pas de menu pour cela parce que c'est également un service que propose le système. Tu appuies sur le bouton du multitâche en bas, et tu glisse la fenêtre de ton application hors de l'écran.

                Perso, sur un écran tactile, je trouve ça mille fois plus efficace qu'une entrée de menu.

  • # "Cet article n'est pas disponible dans votre pays"

    Posté par  (site web personnel) . Évalué à 1.

    C'est intéressant, tout ça, mais les restrictions géographiques, elles ont une raison d'être là ?

    Je suis qu'à l'étranger, ils parlent étranger, mais pas toujours, en fait.

    En l’occurrence, je suis en France à un lac près : Lausanne (Suisse).

    • [^] # Re: "Cet article n'est pas disponible dans votre pays"

      Posté par  (site web personnel) . Évalué à 1.

      Oops, évidement, j'ai loupé la phrase qui explique tout.

      Le jeu est disponible uniquement sur les marchés français et belge pour l'instant, le temps d'avoir des retours d'utilisateurs et de s'assurer que ça tourne bien

      Mea cuelpa. La prochaine fois, je tournerai 7 fois autour de mon ordi avant de commenter…

  • # Rapport de bug

    Posté par  (site web personnel) . Évalué à 1.

    Je viens d'installer la version Androïd sur ma Tablette Tab 3 et le jeu refuse de se lancer. Comment je peux faire remonter le bug à par ici ou via réseau social ?

    \_o<

  • # libintl-lite

    Posté par  . Évalué à 3.

    • pourquoi ne pas utiliser gettext? C'est plus rapide pour la compilation?
    • concrètement, est-ce que les fonctionnalités qui manquent sont utilisées des fois où ce ne sont que des cas particuliers?

    Écrit en Bépo selon l’orthographe de 1990

    • [^] # Re: libintl-lite

      Posté par  (site web personnel) . Évalué à 3.

      pourquoi ne pas utiliser gettext? C'est plus rapide pour la compilation?

      Je me suis arrêté sur libintl-lite car c'était la première solution qui m'a permis de passer la compilation avec la chaîne d'outils du NDK. J'ai essayé de compiler gettext aussi mais cela s'est avéré beaucoup plus compliqué, principalement à cause de la dépendance à iconv. Je ne me souviens plus où je m'étais arrêté mais je crois que la compilation de libiconv bloquait à cause de fichiers d'entêtes manquants dans le NDK.

      Cependant j'ai quand même dû modifier quelques trucs dans libintl-lite : il manquait quelques méthodes à l'interface pour retrouver celle de gettext et l'implémentation était un peu buggée.

      concrètement, est-ce que les fonctionnalités qui manquent sont utilisées des fois où ce ne sont que des cas particuliers?

      Il manque la conversion entre locales du coup ! Ce que gettext fait avec iconv, libintl-lite ne le fait pas du tout. En pratique cela signifie que les fichiers de traductions .po doivent utiliser le même encodage que celui du système. Là aussi il y avait un piège puisque les appels à setlocale sont ignorés dans le code natif et renvoient toujours la locale C plutôt que celle de l'interface Android (i.e. la langue de l'utilisateur). J'ai dû patcher la SDL pour obtenir la langue de l'utilisateur depuis mon code C++.

      • [^] # Re: libintl-lite

        Posté par  (site web personnel) . Évalué à 1.

        Et boost locale avait quoi comme problème ?

        • [^] # Re: libintl-lite

          Posté par  (site web personnel) . Évalué à 2.

          Boost.locale a besoin d'iconv ou d'ICU à la compilation. Aucun des deux n'est disponible par défaut et quand j'ai compilé Boost il m'a bien dit qu'il ne pouvait pas construire cette bibliothèque.

          Là encore ça n'était pas utile d'insister car même si j'arrivais à compiler Boost.locale, ça n'aurait pas aidé gettext. Éventuellement j'aurais pu l'utiliser dans libintl-lite mais cela m'aurait demandé une bien plus grande implication dans son code (qui n'est déjà pas marrant).

          Bref, l'objectif était d'avoir le jeu qui tourne avec ses traductions actuelles et libintl-lite est le chemin le plus direct que j'ai trouvé. En plus il n'a pas d'impact pas le code existant. Dès que j'aurai des traductions qui nécessitent de l'unicode je me pencherai sur d'autres solutions :)

  • # Quelques questions

    Posté par  (Mastodon) . Évalué à 1.

    Le code est disponible sous les termes de la version 3 de la GPL et les ressources sous les termes du contrat Creative Commons dans sa variante paternité, partage à l'identique, en version 3.

    Pourquoi ne pas avoir tout mis sous GPLv3, code et données ?

    Nous l'avons utilisé principalement pour des jeux de plates-formes mais nous pensons qu'il peut très bien être utilisé pour d'autres types de jeux, par exemple pour des jeux vue de haut.

    Ce qui manque pour ce moteur de jeu, c'est de la documentation. Parce que, oui, c'est peut-être possible de faire d'autres types de jeu, mais si on veut se faire une idée plus précise, on peut difficilement. Sans compter qu'il y a des choix qu'on pourrait questionner comme le fait de ne pas avoir choisi Box2D pour le moteur physique (y a-t-il une raison particulière ou c'est juste un petit NIH ?)

    Après sur le papier, ça a l'air intéressant, ça offre tout un tas de fonctionnalités sympathiques. Et ça donnerait presque envie de plonger dedans et de contribuer. Je pense que quand j'aurai fini mon jeu, je jetterai un coup d'œil, j'aurai un peu plus de bouteille sur les problèmes et les solutions et je serai sans doute plus utile que maintenant.

    • [^] # Re: Quelques questions

      Posté par  (site web personnel) . Évalué à 4.

      Pourquoi ne pas avoir tout mis sous GPLv3, code et données ?

      Historiquement la GPL s'applique plutôt au code qu'aux données annexes, tandis que les Creative Commons s'appliquent plus aux médias qu'au code.

      Ce qui manque pour ce moteur de jeu, c'est de la documentation. Parce que, oui, c'est peut-être possible de faire d'autres types de jeu, mais si on veut se faire une idée plus précise, on peut difficilement. Sans compter qu'il y a des choix qu'on pourrait questionner comme le fait de ne pas avoir choisi Box2D pour le moteur physique (y a-t-il une raison particulière ou c'est juste un petit NIH ?)

      Les premières lignes du moteur ont été écrites en 2005, à une époque où il n'y avait pas de moteur physique 2D libre en C++. Comme notre moteur a bien répondu à nos besoins jusqu'ici, nous n'avons pas fait de migration.

      Pour la documentation, il y a bien le vieux wiki mais il est un peu obsolète. De mon point de vue il manque surtout des petits tutoriels du genre « mettre en place un jeu de plates-formes en 5 minutes », et surtout il manque du courage et des mains pour rédiger tout ça :) C'est clairement un point bloquant à la réutilisation par d'autres personnes.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.