Wednesday, June 09, 2010

Hop! Une arène ! Yeah !

Et voilà le futur niveau 1 de "Apple Assault". Cette fois, mon éditeur de niveau est de nouveau d'applomb (toujours sans les monstres, mais peu importe).

At last, the level editor is back on track, and I could sketch up the first level (single-screen) for Apple Assault. Stay tuned!

For more details, just check out the comments and stuff on the last todo list.

Tuesday, June 08, 2010

Animeds

As soon as I've got Apple Assault running and my level editor "repaired" so that we can toy with monsters despite the new "file-scope" state numbering, the next big thing I'd like to work on is the animation editor extension to SEDS.
So far, animation edition is pretty crude: you just push frames by clicking them on the sprite sheet, and you can't modify them afterwards. Plus, you can't save your work for later use in a game.


Le prochain "gros morceau" pour l'édition de jeux sur la DS, ce sera l'introduction d'un "véritable" éditeur d'animation. Enfin, dès que j'en ai fini avec Apple Assault et que LEDS est réparé, bien-sûr. Parce que si SEDS est déjà capable de donner un aperçu d'une animation, il faut bien avouer que devoir tout recommencer au moindre faux-pas est moyennement intéressant. Et qu'être incapable de sauver son travail le cantonne au rôle "d'outil de validation" pour les graphismes en cours.
Pourtant, le workflow de base restera le même: une fois qu'on s'est choisi la spritesheet avec laquelle on travaille, on ajoute des étapes à l'animation en cours en cliquant sur les sprites sur la droite de l'écran.

I've toyed with a lot of concepts around "animeds", which most likely explain why it's only 5% done so far. But this last one seems to work better. It keeps the basic of the current system (click a sprite to add it as a frame), but it builds a timeline representation where you can do additional manipulation. I used the animated apple bonus as an example:

  • click a frame on the timeline to select it
  • L-click somewhere on the time line to move it there
  • select another frame,
  • move it as well.
  • click the "time arrow" to adjust the whole animation duration (and scale delays of every frame accordingly).
And that's just for the basics. From then on, being able to store the animation list in the .spr file rather than being part of the .cmd file will be a major improvement in how I build new monsters.

Pour pouvoir gérer et retoucher tout ça, il faut que j'ajoute un widget "ligne du temps" sur lequel il serait possible de déplacer les étapes d'animation pour ajuster les délais. Accélerer et ralentir l'animation complète peut aussi s'avérer intéressant. "Historiquement", les animations sont stockées sous forme de commande texte parce que je n'ai pas voulu introduire de dépendance trop forte entre le moteur de jeu et l'éditeur. Sans doute une sage idée compte tenu des "condloop" et autre "move 2 *" qui sont venus se rajouter par la suite. Je ne vais donc certainement pas essayer de produire des GobAnims[] dans mes fichiers .spr, plutôt une version "lexèmisée" de l'animation avec une liste de constante et une liste d'instruction à traiter conjointement pour produire ces GobAnims.

I also need the opportunity to duplicate/kill a frame ([+ X] buttons depicted below as (3)); undo a deletion (the little x at (5) can be clicked to summon a frame back to life)

The most challenging aspect, I guess, will be to include engine-related features such as conditional loops (loop the animation only if testpoints are satisfied), the use of "spatial timeline" rather than "temporal timeline" (yeah, that's an odd concept, but I don't see how to phrase it differently :P)

And then, finally, I'll have to include that so-long-delayed composed -- à la Rayman --animation that was present in the BASIC version ^^"


J'ai quelques idées pour avoir une représentation graphique efficace des opérations telles que "copier une étape, supprimer ou récupérer une étape supprimée", etc. Ce qui sera plus complexe, ce sera justement de prendre en compte les boucles (conditionnelles ou non) et les déplacements (en ajout comme en remplacement des délais)... Je me demande dans quelle mesure il serait possible de garder cet aspect-là dans le .cmd, tiens.

Monday, June 07, 2010

Laissez tomber GCJ, les gars.

sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.17/bin/java /etc/alternatives/, c'est tout ce qu'il y a à dire. J'ai facilement perdu 2 heures vendredi dernier, à chercher dans le code de mes étudiants un problème qui se trouvait clairement dans les bibliothèques Java qui accompagnent la JVM "gnu", le "choix par défaut" d'Ubuntu Lucid Lynx. Et là, je regrette, les cocos, mais ce n'est absolument pas lucide.

java.util.Scanner[delimiters=\p{javaWhitespace}+][position=372][match valid=true][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\QNaN\E][infinity string=\Q?\E]
java.lang.NullPointerException
at java.util.regex.Matcher.toMatchResult(libgcj.so.10)
at java.util.Scanner.myCoreNext(libgcj.so.10)
at java.util.Scanner.myPrepareForNext(libgcj.so.10)
at java.util.Scanner.myNextLine(libgcj.so.10)
at java.util.Scanner.hasNextLine(libgcj.so.10)
at Flux2.getRadioMetaData(Flux2.java:237)
at Flux2.connect(Flux2.java:214)
at FluxFeeder.run(FluxFeeder.java:21)
au énième appel de hasNextLine sur un parseur a priori impeccable, mais qui est simplement arrivé au bout de la chaine sur laquelle il travaille. J'aurais volontiers fait un vrai "bug report" aux responsables de la maintenance de la libgcj.so.10, mais on dirait bien que la politique d'Ubuntu s'est encore dégradée à ce sujet. Non content de répondre régulièrement "ah oui, on arrangera ça dans la version suivante" lorsqu'ils ont choisi une version incomplète ou buggée d'un programme mais que des correctifs existent chez le développeur (j'en veux pour preuve ce problème dans desmume), même lorsque la distribution affectée est une Long Term Support.
Enfin ... on va essayer quand-même.

May the Source be with you

La saison des examens bat de nouveau son plein. Peut-être certains d'entre vous sont-ils encore étudiants ? Dans ce cas , bonne M. "may the Source be with you". Moi, ça va plutôt être lecture, correction, relecture, surveillance et re-correction. Peu de chances de voir les choses bouger sérieusement d'ici fin juin, mais au moins, tout une série de choses ont été réglées dans la VTJ. De plus, me voici arrivé dans mes lectures-hobby à l'endroit précis où j'avais laissé le roman Autremonde en attente... tous ceux qui ont bouffé du Harry Potter savent qu'il est difficile de poser un roman pour passer à autre-chose quand on ignore ce qui attend les héros pour la suite. Il me brûle presque dans la poche de mon falzar.

Allez, A+. Il est temps que j'attaque la journée de boulot.


Hello, English readers. I'm afraid it's a pretty busy time. Examinations time. I've got a pile of reports to review and some more that are yet to appear on the pile ... Probability of seeing translations or bilingual posts is pretty low, but it should rise again when July will come out. See you.

Thursday, June 03, 2010

Petite pause "LEDS"

I swear I tried. I really tried to come up with some arenas for Apple Assault despite I knew I'd have to "repair" the level editor anyway. It just didn't worked. For some odd reason that aren't even worth being named "a bug", it is impossible to draw or alter the behaviour of the two rightmost column of tiles in LEDS at the moment. I just worked around it in gedsdemo, but Apple Assault is likely to have levels that are just one screen wide... and then it really looks broken.

Je vous jure : j'ai vraiment essayé de dessiner quelques "arènes" pour Apple Assault sans commencer à corriger mon éditeur de niveau au préalable. Mais c'était compté sans une bête limitation, une "erreur de jeunesse" de ce programme. Impossible d'aller dessiner sur la colonne la plus à droite d'un niveau. Si ça n'a pas eu l'air trop gênant dans les démos précédentes, c'est quand-même très moche quand on essaie de faire un niveau dont la largeur est celle de l'écran, croyez-moi.

Oh, pas de sushi: ça devrait être Je pensais que ce serait assez vite réglé, juste le temps que je me souvienne (et que je documente, tant qu'à faire) les mécanismes qui permettent de passer de l'édition de fond à l'édition de la zone de jeu et à l'édition des propriétés des blocs. Bin non. L'appel du menu "choix du plan affiché/édité" détruit la partie du niveau à l'écran, et je ne parviens plus à enregistrer un niveau nouvellement créé.

I initially thought it'd be a quick patch. I'm afraid I was wrong...

  • [done] while I was checking some fixes, an invocation of the "layer selection bar" suddenly destroyed the whole part of the level that was onscreen ...
  • [done] only allow edition of the editable area. (wow. that one was pending since Feb. 2009)
  • [wish] provide a way to change "type of tile" when editing the meta-layer, without requiring on-map display.
  • [done] And I couldn't write the level I was working on to disk make sure stored maps end up with .MAP ^^'.
I'm afraid you'll here a bit more of LEDS next week.

Wednesday, June 02, 2010

BRIX.TXT

Amusant, ce qu'on retrouve dans les fonds de tiroir ... voilà le fichier "readme" de mon premier jeu en Assembleur pour MS-DOS: Crazy Brix, qui (2 ans plus tard), remporta la compétion "100K games" à la Inscene'99 ... A défaut d'Internet, à cette époque, je tentais de voir mes jeux paraître sur le CD du magazine PC-Fun ... sans grand succès, malheureusement.

Well, I dug a README.TXT file for my first A86 game : Crazy Brix, as submitted to the French magazine Pc-Fun. It wouldn't make much sense to translate that to you, right ? it mostly has some nostalgic value. What I find amusing is how it built up : from a proof-of-concept QuickBas game (hardly playable, but conceptually correct), i retro-fitted the "algorithms" into my growing assembly-written .S3M player for the Sound Blaster Pro. Somehow, "importing" the S3M player into a fresh game project didn't work. Debugging such a program was a nightmare ...
I had no idea of the existence of GPL or free-software by that time (neither did I have any free software at hand, which more or less explain the use of assembly), so I was trying to trade my code against something else I could have a use for. Funny.


- - - 8< - - - 8< - - -

Salut à tous !
Bien le bonjour à vous, futurs joueurs de CrAzY BRIX.
Je me permets de me présenter: je suis Sylvain
( alias PYPEIN ), programmeur de BRIX. Vous allez sans tarder découvrir la version 1.9 du nouveau XAM-WARE de PPP TEAM SOFTWARE.

(XAM-WARE comme produit pendant les examens.)

Les Versions.
1.0: Développement de l'algorithme de jeu en BASIC ("appelle moi pour jouer",dit Vivien)
1.1: Première implémentation en Assembleur: MODPLAY+ chargement des images (ricanement de Piet)
1.2: Réalisation des routines graphiques
1.3: On peut commencer à jouer, mais c'est plein de bugs.
1.4: premiers essais de transparence ("C'est quoi, cette horreur?" dit Piet " C'était encore mieux en BASIC!")
1.5: décors de fond retravaillés
1.6: ajout des patterns "GAME OVER" et "NEXT LEVEL"
1.7: on peut changer la vitesse de la balle.
1.8: Ajout des samples pour les bruitages ("Je te laisse débugger, Pype, je reviens à 12h00")
1.9: image d'intro en POVRAY
1.A: "ajout d'animations"

Note aux programmeurs
Mon module player n'est pas encore au point, néanmoins, si l'un d'entre vous veut en faire un en assembleur, je lui conseille d'abord de lire 'Le SuperLivre de la SoundBlaster' paru chez Micro Application. Je peux aussi vous passer une partie des sources (les fonctions de la S.B.) mais ne me demandez pas les sources complètes du player: le code est pas encore optimisé (PENTIUM minimum). Je vous le passerai seulement contre d'autres trucs (un player pour un autre format, des truc de balaises sur le mode protégé, un jeu que vous avez fait et qui est mieux que le mien...)

- - - >8 - - - >8 - - -

(tout ça, c'était avant que je ne découvre la GPL, NDLR)
D'une certaine manière, Crazy Brix reflète assez bien ce qu'était PPP Team : en apparence un projet solo, ce jeu n'aurait jamais vu le jour sans le bouquin de Nowan sur la soundblaster ni sans l'assembleur A86 de Parmy. Il n'aurait pas été fun sans les Bilou/Badman de Pierrick, ni sans le personnage "tentacle bob" de Tbob, ni sans les mods de mon frère. Il n'aurait pas gagné la 100k sans les routines de compression de Kris, ni sans la voiture de Gino. Il n'aurait pas eu de sens si Pierrick n'avait pas lâché à Romu "tu te rends compte qu'il a fait ça en 100% assembleur !?"

download and play in DosBOX

Tuesday, June 01, 2010

AA : early gameplay draft

Vous vous souvenez de la présentation "onirique" d'Apple Assault la veille de mon aniversaire ? J'ai remis la main sur un petit croquis nocturne dans le carnet qui contient les précieuses mesures de ma cuisine. Je vous en dirais bien plus, mais ma fée m'attend pour descendre chez I<ea ... il faut vraiment qu'on change de cuisine.

Remember how the Apple Assault gameplay came to my dreams ? I eventually sketched up the idea that night, but then the sketchpad has been burried down, used to plan my new IRL-kitchen, moved to Sweden and back. Today, it's about time I make a decisive move towards that "new kitchen" thing before *deline gets a hand on frypans... So the sketch got dug up, just when I was using a scanner. Voilà. Here it is online. enjoy it.

PS: oh, btw, it looks like the sketch has later been used to help thinking about dyngobs and their management...