Thursday, September 30, 2010

How's the BerryBat doing ?

I'm back at Paris for Yet Another Project Meeting ... A friend and colleague of mine -- who's tracking my homebrew development since he seen a concept sketch at our kick-off meeting in June '09 -- then enquired about the status of the BerryBat. Bad thing is, there is no appearance of BerryBat in Apple Assault so far.

In "Bilou's Adventure" (the long-term full platformer), BerryBat's goal is to put some stress on Bilou's "functional blind spot" ... After some chat, I think it could find a place in Apple Assault where it would fit: something similar to the fireballs of Mario Bros. The player that runs into action in Apple Assault shouldn't be bothered by BerryBats: they would only come to tease the player who thinks he's found a "safe spot" to wait for Apples to lose their strategical advantage. Somehow, they'd be organic "Timed Out" feature.

Sunday, September 26, 2010

Better scrolling

DAns un épisode précédent, Morukutsu pointait du doigt le scrolling vertical sub-optimal de mon moteur de jeu. Je n'ai pas encore eu l'occasion de m'y atteler, et le problème est sans doute moins visible dans Apple Assault, mais je garde à l'esprit qu'il faudra que j'y retourne. J'ai d'ailleurs scanné mes cogitations (à savoir les différents cas de figure possibles et comment on souhaite que la caméra réagisse) ... je reviendrai dessus prochainement.

Previously on this blog, Morukutsu was pointing out sub-optimal management of vertical scrolling in my game engine, that makes some hazard hard to avoid. I haven't really developed that aspect of gameplay, but here are some thouhgts I scanned a while ago ... I hope I'll get some time to discuss them in more detail later on.

edit (18/8/2011): enfin, c'est fait!

Monday, September 20, 2010

Bxx : jump to order xx (dec).

A MODule (or .S3M, .XM or .IT) is made of individual patterns, short musical sentences (or loops) composed by the author. These are latter arranged into a song through the order table that indicates in which sequence patterns must be played.
A musician can decide to break the current pattern (Cxx) to skip to the next order (that is the pattern that comes next in the order table) but also to branch (Bxx) to any order (including a previous one). For apple assault (and most likely a lot of game music), this is especially interesting because it allows my brother to pack several musical themes into one file and have them self-looping until my program decide to switch (externally) to another theme. Well, just have an ear to his mp3 preview ... you'll know what I mean.


Un petit répit de quelques heures (tardives) entre un déliverable qui se prolonge et des répétitions à donner 1 ou 2 semaines plus tôt que je ne le pensais ... Je reprends mes petites notes sur la gestion de l'effet "pattern break" (Cxx) dans NTXM et je tente l'ajout de l'effet Bxx (order jump) qui permet à mon frangin CyborgJeff de me mettre plusieurs thèmes musicaux dans un seul fichier (menu, jeu, shuriken-rush, game over, etc. ... ah. Je sens que ça vous intéresse ;) J'ai un peu tâtonner (forcément, à écrire 4 lignes de code par semaine :P) mais dans un flash, j'ai trouvé juste avant de me mettre au lit ce qui manquait pour que ça marche. Permettez que je laisse la documentation dans la seule lange de Shakespeare (prononcez "Chakèspéare") et que je rattaque le boulot.

Now, programmatically speaking, both are global commands, that is they are not affecting a single channel (although they are present on a specific channel) but the song as a whole. Plus, they have deferred effect: they are read with other effects when the new row is parsed with parsing at Player::handleEffects, but only executed at Player::calcNextPos. There could be alternatives, such as pushing fake values in State::potpos and State::row and just have State::nextpos and State::nextrow altered by handleEffects ... I'm not sure that would be a good idea.

It will still need a few more lunchtime before it works properly, I'm afraid.
edit:
BonSangMaisCestBienSur if I never reset the newly introduced pattern_jump_requested state variable, I will end up doing weird things such as repeatedly playing the 1st row of the new pattern rather than letting the song flow. >_< * >_<* >_< *

done, and I also fixed the "zombie samples" problems that occured when switching to one tune to the other ^_^

Tuesday, September 14, 2010

on pattern(%%) do { ... } as x

One of the next challenge to handle for the GEDS engine will be the support for timed sequence. Such as "close the door, shake the ground, and now the boss can enter". Or more simply, "play the 'dead' animation, fade out, reload the level". As mentioned earlier, I could simply associate each of these individual actions to a row in a pattern of the soundtrack. That makes timing implicit, and it should ease the synchronisation between the two.

Beyond the syntax, the idea is to have TrackSequence as an external action that stores its own list of external actions and associate each of them with a row number. The TrackSequenceReader would then be an Animator that launches the individual actions appropriately. Well, my brother has partly "recovered" the improved soundtrack, and I have modified the NTXM player so that I could look at the current pattern/row position... things are getting in place for some tests.


S'il reste un aspect encore fort "amateur" de AppleAssault, c'est sans aucun doute la gestion des évènements genre "oups. t'es mort", "level clear" et autres "game over man". Didier les comparait même à des "crash windows" ... Avec mon système axé sur les machines d'état et tout ça, j'ai longtemps galéré pour trouver une approche, puis je me suis rendu compte que je pouvais tout simplement associer ça au suivi d'un pattern dans la musique. Il y a même moyen de procéder assez simplement en réutilisant les "iGun" déjà en place dans la machine d'état pour capturer les actions à effectuer dans un TrackSequenceGun qui lance leur exécution dans un Animator supplémentaire (lesquels me servent plus ou moins d'activités parallèles sur la DS).

Surprisingly, it seems that the most complicated part doesn't lie there, but in the management of the "shuriken rush" sub-tune that needs to be activated and de-activated depending on your "punch bar". "Surprising" in that the HUD logic -- and not the game logic -- is the place where it fits the best. Troublesome, isn't it ? And untidy, too.

edit: It's getting in place, but still buggy on many aspects.

todo: add Bxx support to NTXM so that we can loop sub-sections of the module.

Friday, September 10, 2010

External Actions

using sound(16,56) as 0 Bilou shoot
using sound(0,60) as 1 Bilou hit
using shgob(state28:= 0 :1 1 :0) as 2 Bilou, right punch
using shgob(state29:= 0 :1 1 ~ :0) as 3 Bilou, left punch
using shgob(state19:=$100 :0 $100 ~ :1) as 4 Bilou, stomped star
using shgob(state19:=$100 ~ :0 $100 ~ :1) as 5 Bilou, other stomped star
using shgob(state0:=D) as 6 throw a fake appleman (?)
using sound(17,64) as 7 Bilou bop
using shgob(state18:= 0 :1 v6 :0) as 8 Bilou, shuriken
using shgob(state0 is e:=D) as 9 throw an appleman



ça fait un peu peur, hein ? C'est ainsi que je définis en "gobscript" les différentes classes C++ qui peuvent être appelées et quels paramètres leur donner. Il ne me restera plus qu'à dire "x4x5x1" lors d'une transition pour qu'on voit deux petites étoiles jaillir de bilou avec un son "ouch". Et si je vous mets ça en ligne, c'est parce que je vous concocte un "mégapunch" à placer entre le "coup de poing de base" et le shuriken dans apple assault ... wait'n'see.

Did I scared you ? This is how you bind external C++ code to transitions in gobscript ... well, you'd still have to specify "x4x5x1" to have small stars shots while you hear an "aouch" sound. Why do I put *that* online, will you ask ? because I needed to have a better overview of those actions so that I pick the proper numbers for the "big punch" action I'm testing right now. Yeah. Big punch. Larger collision box, more apples dispatched, more fun. Wait"n"see :)

edit: Oh Yeah! The "Big Punch" definitely roxx! I still have to fine-tune it, so that e.g. the master player can use it mid-air to knock-out applemen below him; but ... Man! It let me score 10005000 at the hardest difficulty level, and it makes me play less cowardly! I can't wait to have those additional tunes and share a next apple assault release with you!

todo: add a "state%%->self on ... [condition] (action)" mechanism so that we can easily encode the rules for punching while walking, idle, jumping and falling ... and a prio % command in animtions to select the plane on which things are.

Thursday, September 09, 2010

Soy alérgico a las manzanas

Héhé, après "gbatemp.net" hier, c'est ce soir au tour des Espagnols de nds.scenebeta.com de "découvrir" Apple Assault ... Avec une présentation bien sympathique de magickblack:

"El juego cuenta con una música que es muy pegadiza, y que acierta de pleno con el tipo del juego, haciendo que nos enganchemos a él sin remedio alguno."

(...)
que buenos gráficos tiene D:


Il y est notamment question de "musique très accrochante qui colle bien au type de jeu" et de "plaisir qui ne s'arrête pas là car on recommence avec encore plus de pommes". Réjouissez-vous donc, amis du Sud: mon frangin "Cyborg Jeff" a repris son synthé pour nous composer des thèmes encore plus variés. Musique speedée lorsqu'on obtient les shuriken, jingle pour les changement de niveaux ... Venga Baila!

Par contre, dans la section contrôles du jeu: "START : nettoyer l'écran du bas" ... là, je dois encore avoir quelques règlages à faire.

Tonight, Bilou: Apple Assault reaches the spanish audience, with a very enthusiastic cover by magickblack, who point out an "addicting and well-suited soundtrack" while "don't worry as you beat the 4th level: the game goes on with even more apples!" ... So here's good news for you, sunny lads: my brother Cyborg Jeff is currently working on additional music themes to polish the game... A speed-up track that tells you you've got shurikens available, a menu theme to relax when you've been smashed down and additional jingles when you clear or fail a level. I can't wait to put that together in a new release !

Hola amigos del Sur: mi hermano "Cyborg Jeff" ha reanudado su sintetizador para nosotros componer música aún más diversas. Una música rápida cuando tienes la shuriken, un jingle a los efectos de los niveles ... Venga Baila!

Tuesday, September 07, 2010

Ce qu'on en dit...

Histoire de prendre un peu la température, j'avais soumis Apple Assault à la compo Neoflash de l'été. Je ne m'attendais pas à gagner -- il faut dire que la concurrence est rude, avec notamment un excellent DuyuMania et ChewingBoy (de Morukutsu) -- quoi que ce soit, mais certains aspects des reviews m'étonnent quand-même. Petit tour d'horizon pour me détendre les neurones avant le rush mortel de demain.

If your dream wish is to have been turned into a blue Apple, this game makes that wish come true, but the red apples … well lets say they don’t like you and believe me, you don’t want to be next to the red apples, maybe if you grow up and jump from one tree to another you could be more delicious

Graphics: 4 -- Sound: 5 -- Control: 5 -- Fun: 7 -- Duration: 4

Bien sûr, le côté "graphisme" a souffert du look "damier-de-debugging", puisque c'est la version 1.1 qui a été soumise. Autre point récurrent et étonnant, c'est cette déclaration qu'il s'agit d'un "jeu bizarre"... Je note tout de même le côté "short range at attacks" que je dois effectivement ajuster (c'est déjà sur ma toudoulisse depuis les e-mails avec KirbyKid)

+Nice pixel art at the top screen
- weird game
- poor presentation on second screen

Graphics: great on the main screen. Lovely characters and backgrounds 2.5/2.5
Sound: Funny music but repetitive. 2/2.5
gameplay: good controls, odd style of game. Short range at attacks. A little bit difficult 2/5
Bugs found: No bugs were found, but has graphic corruption when changing levels
Will this stay on my memory stick? : Yes

Graphics: 15
Sound: 10
Controls: 10
Originality: 10
Fun: 10
Bonus: 5
Comments: An odd game, but the graphics are pretty decent. Bonus for open source.60/100

Tout juste une "satis'" donc, pour ce xam-ware de 2eme session ... De quoi alimenter la discussion avec les jeunes papas qui s'étonnent que je ne cherche pas à commercialiser la chose :P
Gfx: 10/20 -- Snd: 7/20 ( zik: 7/10, sfx: 0) -- fun: 10/20
idea: 10/20 -- Mi: 10 ( LT: 5/5, B:5/5, LO: 0/5) -- O: 5

I found this apple-game quite difficult to play. Graphics are OK and it’s nice to hear music, although it is repetitive and you can get sick of it. It's a pity that the bottom screen of the NDS is used to display the credits and some other ugly information, especially being a touchscreen.

Sunday, September 05, 2010

Vuoi una mela ?

EDIT: {{Oh, wait ... final version is one click away}}


Allez, un peu d'upload avant de retourner me concentrer sur le Distributed Interference Minimisation de Matt'. Eh oui ...

Voilà donc la version "à l'italienne" de Apple Assault, avec un vrai écran de statut dans le bas (voilà qui fera plaisir sur gbarl.it ;) et des p'tites pommes sur le menu pour choisir son niveau de difficulté. J'ai aussi ajouté les manoeuvre d'évasions et ajusté le gameplay des tableaux 1 et 2.

Presto ... a new release of Apple Assault, now featuring difficulty selection (the more apples you eat on the menu screen, the harder it will be), evasive moves, improved gameplay and a shiny bottom screen to show you your health and punch bars.

Ps: this is release "-it" because bottom screen update was initially requested on gbarl.it :)

E meglio cosi?

[.es] Personajes y Controles (nds.scenebeta.nds) [/.es]
mirror on FileTrip
backstory, instructions and tips
Do you really want to download an intermediate - work-in-progress version ? for the final one, move your eyes above!

Friday, September 03, 2010

What's Next, Charlie ?

Pas de panique, je n'ai pas oublié que je n'en ai pas fini avec Apple Assault. Je suis juste tellement overbooké que j'ai du mal à organiser mes loisirs ne serait-ce que pour finir les quelques pixels et les malheureuses lignes de codes de l'écran du bas :P

Don't worry: the "fireworks-of-topics" of this week doesn't mean I'm dropping Apple Assault. I just need to wait a bit more so that my hobby time can get sufficiently "organised" again to allow homebrew dev'ing. Meanwhile, I'm musing, peeking and poking. And collecting ideas and todo list for longer term actions, like :

  • [LEDS, done] fix reversed logic on "pop up meta-tiles widgets"
  • [SEDS, done] allow flood fill in 16x16 mode as well
  • [done] implement mega-punch.
  • [done] game running on MAIN screen, hud on SUB screen.
  • [runme, wish] bring in 3D model viewing.
  • [ntxm, wish] investigate support for volume/panning envelopes.
  • [LEDS, done] ship biokid.spr and make a first public release
  • [SEDs, done] make a new release with the improved things.
  • [done] support control of music (jump-to-pattern, load new module, schedule-next-pattern) from GameScript and "external actions".
  • [GEDS] limit scope of external actions, recycle action numbers.
  • [GEDS] allow state initialisation expressions.
  • [done] inter-level effects.
  • [done] start a first prototype for the animation editor.
  • [thinking] Define new candidates for GEDS features (land-on-slope ? falling bridge ? ladders & ropes ? ...)
  • Investigate that *very* annoying turn-to-right bug

Thursday, September 02, 2010

Comment ça marche ...

Je suis un hacker. Voilà, c'est dit. Attention, pas cracker -- genre "je vais pirater votre ordi et voler votre numéro de carte bleue". Non. Hacker -- genre "passe moi un tournevis, on va regarder comment ça marche", au grand dam de mes copains d'enfance. Alors, voilà. Je code mon jeu sur la DS parce que j'adore la manière dont le hardware graphique se programme. Mais au fait, ça marche comment, le hardware graphique d'une DS? Si j'essayais de reproduire un chip graphique affichant 4 plans, des sprites et tout le tralala sur un FPGA, ça donnerait quoi ?

A friend of mine persistently repeats I've got a hacker's desktop. When hacker == "hand me the screwdriver and let's see how that thing works", I guess he's quite right. Need a proof ? Well, not only I'm coding homebrew games and apps on the nintendo DS (which is supposed to be a closed system), but I can't help thinking of "how could we reprogram an FPGA so that it mimmics the DS' (2D) graphic engine". I know that's pretty pointless: my experience of programmable chip is thin and obsolete (VHDL on PAL 22v10, anyone ?). But what if ...

Je n'aurai peut-être pas la réponse (je ne suis pas un dieu des FPGA, loin de là) mais la question est posée. En guise d'amuse-gueule voilà déjà le genre de schéma de timing à respecter en sortie (source sur http://www.sharpsma.com/) Quelques lignes de contrôle pour prévenir qu'on commence une image, un temps de réaction de l'écran et c'est parti.

Vous donnez une fréquence d'horloge, et sur chaque flanc montant, les lignes Rx Gx et Bx contiennent les composantes RVB d'un pixel. Point après point. ligne après ligne. Avec un temps de resynchronisation (HBLANK) de quelques pixels entre chaque ligne. Et en ayant laissé un temps t1 pour que les données se stabilisent avant lecture, et en les maintenant pendant un temps t2 pour que l'écran les exploite.

Pour une matrice de 256x256 à 60 images/secondes, il faut quand même cavaler à ~4MHz, et donc pomper les données graphiques correspondantes hors de la VRAM à temps ... Choisir quelle couleur donner en fonction des différents sprites présents, calculer les compositions de couleur genre "alpha-blending", et tout ça. Je sens déjà se dessiner le "pipe-lining" entre les différents stades, tiens.

Digging back in the refs of the Jumbotron project I found the specs of a DS-alike LCD screen ... let's study that a bit to figure out what the problem actually is.

Wednesday, September 01, 2010

Back to School

Coïncidence ? Manigance ? Fait du hasard ou du destin ? Toujours est-il que c'est aujourd'hui que réapparaissent des pixels de la school zone sur ma DS.

Eh oui. J'aimerais bien pouvoir bénéficier des idées de niveaux cogitées ces 5 dernières années... Et pouvoir un jour montrer à mon p'tit n'veu Rémi (qui n'est plus si p'tit) que j'ai pu exploiter le niveau qu'il avait dessiné.

Is it coïncidence ? Is it providence ? Is it fate or hasard ? Here comes some new School zone pixels for Bilou on the Nintendo DS...

The fact is that most of the level design efforts of last years are located in the school zone, and I'd like to give them a try. Not mentionning the fact that I still have to show my lil' n'phew that I'm indeed able to bring the level he drew to life.