

Après les croquis, les pixels. Biokid, revu et corrigé. C'est sans doute les éléments les plus complexes qui sont sorti de mon SpriteEditor DS jusqu'ici. Je n'irai pas jusqu'à dire que ça a été facile, par contre, mais je suis plutôt fier du résultat même s'il a fallu un peu bricoler les détails avec The Gimp sur la fin.
Malheureusement, on dirait bien que je l'ai rapproché de Megaman (X) au lieu de l'en éloigner ... (soupir). La gemme sur le front, les poings blancs, même le look des bottes -- mais bon, je n'ai jamais été doué pour dessiner des pieds, donc le look "mega-man" des pieds masqués par ces énormes bottes était irrésistible pour moi.
Il est de toutes façon trop grand pour pouvoir servir dans un jeu DS (sauf peut-être un jeu de combat, et encore).
I cannot really say that "Biokid NT" is a real game project, but from times to times, i come with some gameplay ideas that would fit nicely there and i can't help but working "a little bit more" on it. Unfortunately, i'm no longer so happy with the former look of Biokid (as of '98) and after a little "brainstorming" on pixelation, i started with sketches of a newer, more dynamic, somewhat ninja-inspired Biokid that would make it clear that "this guy ain't megaman".
I then turned those sketches into pixels -- the largest sprite ever built with SEDS. And unfortunately, it seems that it's still too megaman-ish with his white gloves, barrel arms and big boots. Plus the sprite is simply too big to be of any use in a DS game (half the screen height :P)
Je devrais peut-être continuer dans l'optique "pas besoin d'une armure lourde" et remplacer les bottes par des jambières/genouillères et quelque-chose de similaire pour les avants-bras.
Saturday, December 13, 2008
Le nouveau Biokid pixelisé.
Monday, December 08, 2008
Seafox
Un chouette petit jeu qui trônait sur la même disquette que WarHawk de notre bon vieux commodore. L'illustration même du principe d'un jeu d'arcade : des contrôles simples, un écran unique et une difficulté progressive par un système de mission. Notre vaillant petit sous-marin (repeint en jaune pour la version "DS") s'attaque à des convois marins (la ligne la plus haute) et tente de les couler. Ces convois sont protégés par des croiseurs (la deuxième ligne de bateaux) sur lesquelles vos charge mer-mer iront rebondir et couleront (avec risque pour vous d'y laisser votre peau). Evidemment, vos activités de piraterie ne restent pas longtemps inaperçues, et la compagnie (l'armée ? va savoir ...) qui gère ces caravanes maritimes envoie à vos trousses ses chasseurs sous-marins.
On the same 5"1/4 floppy than WarHawk stood SeaFox. The ultimate example of a good ole' arcade shoot-m-up game : simple but efficient controls, a single screen and a progressively increasing difficulty. Our (yellow on the mockup) submarine try to sink sea fret of some kind (the top line) that are protected by armored ships (the bottom line). As that "shipping Guild" doesn't seem to like your piratery activities, it sends its own sub-fleet to kill you.
As being in the process of trying to revive the game on Nintendo DS (hence the mockup), i've been (of course) re-playing it extensively this week-end to pinpoint important gameplay elements. Ridiculous do i hear ? well, you do not want me to screw it up "à la Tetris DS", do you? Okay. As far as it goes, the relative speed of sprites (torpedos, ships, submarine, fleet) seems to be of high importance: you can escape a opponent sub only vertically : it is just too fast horizontally. You can shoot them with torpedos, but only left-to-right: your sub never turns back.
(PS: I started coding it this week-end and i'll translate more as code progress. It's time i take care of that coffee breach on deck 2. The bridge is yours.)
L'expérience du "tetris DS" et de Space Invaders Extreme m'a appris au moins une chose: quand vous reprenez un vieux jeu, faites-le bien ou ne le faites pas du tout. Donc, au niveau du gameplay, quelques petites contraintes supplémentaires viennent pimenter l'affaire:
• un seul missile et une seule torpille à la fois sur l'écran.
• les chasseurs 'suivent' votre sous-marin horizontalement et traversent l'écran, soit de gauche à droite, soit de droite à gauche.
• votre sous-marin se déplace plus rapidement de haut en bas que de gauche à droite, les chasseurs, à l'inverse, montent et descendent difficilement mais avancent deux fois plus vite que vous (la vitesse de vos torpilles).
• Le fuel (temps) ainsi que le nombre de torpilles est limité.
• Les croiseurs sont légèrement plus lents que le sous-marin, et les navires facilement deux fois plus lents que les croiseurs.
• Votre sous-marin est toujours pointé vers la droite et ne peut donc tirer des torpilles que dans cette direction.
En principe, la caravane passe en boucle jusqu'à son élimination complète. Ca par contre, ça ne me plait pas trop. Je ferai en sorte qu'elle ne défile qu'une seule fois, mais avec la possibilité pour notre petit sous-marin de passer en mode "turbo" pour aller la rattraper et lui tendre une deuxième embuscade . . . ensuite ... hmm ... pourquoi pas voir couler les navires dans l'écran du bas ... il faudra (peut-être?) les éviter et ils pourraient laisser s'échapper des bonus (ultra-missile pouvant couler un croiseur, torpilles plus puissantes, renfort de fuel, brouillage sonar (invisible aux chasseurs)) etc.
Oh, oui. Dans la version C64, tous les navires ont la même taille ... bin à défaut de les faire aussi variés que sur commodore, les miens ont des tailles assez variables ... on pourrait presque jouer au combat naval, tiens ;)
Enfin, faisons d'abord le code tout simple, on enjolivera ensuite ^_^
allez, let's go : je commencej'ai commencé la programmation ce week-end (par des ajouts à mon moteur de jeu et des petites classes pratique genre "Contrôleur-qui-suit-une-cible", etc.)
Note pour plus tard : dans le jeu C64, les "recharges" sont effectuées par un sous-marin qui lache un dauphin une fois arrivé dans le coin inférieur-droit de l'écran. Une sorte de poisson-pacman va tenter de gober les munitions du dauphin on a en gros qu'un demi-écran pour faire la recharge, et surtout, la destruction du dauphin déclenche immédiatement l'envoi d'une sorte de baleine vengeuse à laquelle vous ne pourrez pas échapper. Greenpeace veille ^_^. Ca me paraît un peu beaucoup pour une première implémentation, mais c'est à mon avis un des éléments du gameplay qui en faisait un jeu sympathique et attachant (au risque de distraire le jeune joueur de la mission de base -- couler les navires -- d'ailleurs).
PS: mon frère est sur la brèche pour le son, bien sûr ... Par contre je cherche un artiste pour me refaire les fonds (là, j'ai pris une image sur Internet -- et donc pas libre de droit -- juste pour avoir une idée de ce que ça donnerait ...)
Tags: C64, dualscreen, english, game, gameplay, mockup, mybrew, nostalgy, porting?, shoot-m-up
Monday, November 03, 2008
Hacking gspca for Logitech QuickCam E1000 support.
Hop, je fais le saut: j'achète une webcam. Pas chère (25 francs) avec oreillette inclue "für skype" ... Mon choix s'est arrêté sur la QuickCam E1000 de Logitech, dans un rayon qui semble comporter une douzaine d'autres webcam qui se ressemblent toutes, en ce qui me concerne, hormis peut-être leur prix.
Je branche ça sur mon portable linux ... et évidemment ça ne marche pas tout seul. Le CD ne comporte que des drivers pour windows, ce qui n'est pas une surprise non-plus. Haa... on a pas encore fini de changer le monde.
Bref. Un petit tour de google, et je tombe là-dessus : http://doc.kubuntu-fr.org/spca5xx "installer gspca sous ubuntu, la version facile" ... je prends. je suis les instructions à la lettre, le module (comprenez "le driveur" pour les windoziens) s'installe. c'est bien. Sauf que point de webcam.
I just blindly bought the Logitech QuickCam E1000 this week-end (since it was the cheapest webcam around) and of course realised that it did not came with any Linux driver (not that it's surprising in any way) nor does it seems to be supported by any "out-of-the-box" driver for Ubuntu gutsy (unless i'm proved wrong). Hacking around, checking lsusb and reading the sources of the gspca driver, i figured out that it was yet-another-generic-driver that has a "white list" of supported devices. I thus added the product-id to that white list and now proudly have a working webcam. See compiled driver (which might no longer work with Labtec Webcam Pro, because i've really been *hacking* instead of *patching*) and modified sources down the page.
Un petit "lsusb" me donne au moins la référence "technique" du produit : Bus 001 Device 012: ID 046d:08af Logitech, Inc.
Ces deux numéros magiques (vendor-id=046d et product-id=08af) me permettent de voir (dans les sources du driver, en bas à gauche de l'image) que si pas mal d'autres webcam logitech sont supportées, par contre, la mienne n'est visiblement pas là. Comme le "gspca" est un driver "générique" (à savoir qu'il est en fait valide avec toutes les webcams 'standard'), j'ai 9 chances sur 10 pour que le code puisse effectivement faire fonctionner la webcam si j'arrive à expliquer au driver que "si, si, je t'assure, tu la connais aussi, celle-là". Un peu comme si votre clé-télécommande devait reconnaître la plaque minéralogique de votre voiture pour pouvoir la faire démarrer.
Bref. Premier jeu, donc, ajouter dans gspca_core.c l'identité de notre caméra. Perso, je parasite n'importe quelle entrée dans device_table[], mais il serait plus propre d'y ajouter {USB_DEVICE(0x046d, 0x08af)}, /* Logitech QuickCam E1000*/ et d'éditer en conséquence clist[] et l'énumération des caméras.
Avec ça, le driver peut dire au noyau que la webcam est pour lui, mais ça ne suffit pas. La fonction spcaDetectCamera() est appelée chaque fois qu'une nouvelle webcam est branchée, histoire de lui souhaiter la bienvenue, de prendre un verre avec les autres périphériques USB ... euh ... ou pas. C'est là que l'on va retrouver un gros "switch" qui va règler les options de notre driver générique pour chaque modèle de caméra (peut-être pas si générique que ça, donc, en fait :P) Je fais bêtement le pari que ma caméra "8af" sera probablement juste une réédition de la "8ae" (QuickCam for Notebooks), et donc :
case 0x08ae:
case 0x08af: // uber-experimental.
spca50x->desc = QuickCamNB;
spca50x->bridge = BRIDGE_ZC3XX;
spca50x->sensor = SENSOR_HDCS2020;
break;
Et hop! ça marche!
J'adore linux!
le module recompilé pour gutsy : gspca_e1000.ko le fichier gspca_core modifié pour la QuickCam E1000 : gspca_core_e1000.c (soyons open-source jusqu'au bout ;)
Et pour ceux qui trouvent que "Aarhgh! Skype, c'est le mal", je propose la lecture de l'édifiant "Castle in the Skype" de Fabrice DESCLAUX, puis je leur dirai que MSN, c'est pas forcément mieux ;)
edit: cette manipulation est valable sur Gutsy uniquement. Sous Hardy Heron (et probablement les versions ultérieures), les drivers pré-compilés supportent directement la caméra.
Friday, October 24, 2008
:* idle mode *:
Le boulot en Suisse est plus trépidant que prévu ... peu de temps consacré à Bilou (entre-autres pour des bêtes détails de prise électriques non-compatibles qui rendent l'allumage de portable un peu lourd).
Mais bon, j'ai re-fini Zelda: Phantom Hourglass, et donc je vais sans doute passer plus de temps sur de la bidouille plutôt qu'à jouer en "pur consommateur" dans les prochains week-ends ...
My first weeks in Switzerland have left me much less spare time that i initially thought ... Partly due to the Generic Path idea that is drawing nearly all my attention ... and combined with the fact that i haven't set up a convenient place to code at "home" yet, nor a comfortable place to sit down and think (which should fix tonight).
Plus i could not resist the Phantom Hourglass box on the shelf and played the game once more (and confirming that it is damn too easy, way too short and stuff ... i'm going to let my nephew have it, i think)
Tags: english
Friday, October 10, 2008
mon routeur à un DNS qui rame ...
Bon, avec ces routeurs Wifi qui deviennent de plus en plus fréquents, j'imagine ne pas être le seul à avoir le problème : ce genre de routeur se renseigne généralement comme "serveur" DNS local (en gros, c'est lui qui se chargera de savoir qui est "google.com" et tous les autres sur le réseau), supplantant le serveur de votre ISP ... Ce qui ne serait pas bien grave si ce brave petit routeur WiFi avait la puissance et la mémoire nécessaire pour faire ce boulot ...
Résultat: une navigation ralentie par de longues attentes sur des noms par rapport à une connexion directe avec le modem de l'ISP. Que faire ?
Première chose, apprendre l'adresse du fameux serveur DNS (serveur de nom) de votre ISP. Jetez un coup d'oeil au fichier /etc/resolv.conf ... s'il renseigne "nameserver 192.168..." ou "nameserver 10.0..." (qui sont des adresses IP "locales", utilisées uniquement derrière ce genre de routeur-pare-feu), c'est qu'effectivement le routeur sert de serveur de noms. Réessayez alors sans le routeur, et vous aurez peut-être droit à quelque-chose comme "nameserver 123.56.1.1", que vous vous empresserez de copier sur un post-it (c'est le serveur de nom de votre ISP ... le vrai). (PS: vous pouvez sans doute aussi apprendre ça en interrogeant l'interface Web de votre routeur ou en retrouvant dans votre fouilli le contrat de l'ISP ;)
Rebranchons notre routeur, maintenant, et une fois le réseau prêt à fonctionner, éditons comme un grand sauvage le fichier /etc/resolv.conf (à coup de sudo, bien sûr) pour remplacer "nameserver 192.168.1.1" par "123.56.1.1", par exemple ... Est-ce que la connexion a l'air de se faire mieux ? Si oui, c'est qu'il y avait bien un soucis de DNS ...
Evidemment, ce serait trop simple que cela suffise. /etc/resolv.conf est un de ces fichiers qui est écrasé à chaque démarrage par le client DHCP (celui qui demande au routeur gentillement de lui donner une adresse et de s'ajuster au réseau et qui vous permet du coup de vous ballader du bureau à la maison sans vous poser trop de questions). On va donc devoir aller éditer cette fameuse config DHCP (dans /etc/dhcp3/dhclient.conf sur mon ubuntu), le truc étant d'utiliser la commande "prepend" pour forcer une configuration statique à prendre le pas sur la config automatique.
send host-name "";
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
prepend domain-name-servers 123.56.78.1;
prepend domain-name-servers 123.56.1.1;
et voilà. Les "sudo /etc/init.d/networking restart" n'auront plus raison de notre beau resolv.conf ...
PS: c'est geek, hein ;) oui, je sais, c'est plus simple quand il y a des cases à cocher, mais à défaut, on a un peu appris comment ça marchait ;)
PPS: oui, j'ai finalement moins bricolé ma DS pendant ma première semaine en Suisse que je ne l'aurais cru ... et je n'ai pas senti le besoin de blogger les petits progrès qui avaient quand-même été réalisés ... d'où un blog un peu plus calme, ne vous en déplaise.
Friday, September 26, 2008
Screwed up terminals: the solution
Anyone who has been doing C programming on Linux has encountered this at least one, or is a very rigourous programmer. A certain binary sequence (that you normally never encounter in ASCII text, but that might be present in that binary file you accidentally dumped on your terminal) will switch you to the "graphical and lines" character set where everything gets completely unreadable.
Si vous programmez sous Linux ce genre d'écran illisible ne vous est forcément pas inconnu. Tôt ou tard, vous (ou un de vos collègues) a forcément malencontreusement envoyé un fichier mp3 ou une image ou un programme sur la sortie du terminal et pas de chance: il contenait cette petite séquence ANSI qui force la console à passer sur le jeu de caractères graphiques, utilisé entre autres par ncurses pour dessiner ses boites et ses menus.
It was fairly easy to fix under SuSE and RedHat back in Y2K as a simple "reset" command typed on the terminal restored the display. Unfortunately, ubuntu Linux distributions do not seem to think a terminal reset should include reset the character set to its default value...
It occurred once again today. Once too much. I dug the ANSI commands set and wrote a small perl tool that let me toy with ANSI escape codes. Here it comes: ANSIHACK.PL (in uppercase so that you can recognize it even when your terminal is screwed :P)
Actually, the commands that trigger a charset switch are Esc(x and Esc)x. Charset A is our default, regular 'ascii' charset (used in --RESET form) but you can also toy with other charsets (B, 0, 1 and 2) with e.g. ANSIHACK.PL --SET0 (that screws things up) and ANSIHACK.PL --SETA (which restores things to normal).#!/usr/bin/perl print "\x1b($1\nMODE $1 ENABLED.\n" if $ARGV[0]=~/\-\-SET([0-9A-B])/; print "\x1bc\x1b(A" if $ARGV[0] eq '--RESET'; shift @ARGV if $ARGV[0]=~/^\-\-/; print "\x1b[$ARGV[0]\n"; print "done/DONE.\n"; exit(0);
C'était assez simple à résoudre du temps de SuSE et RedHat (tapez 'reset' en aveugle, puis appuyez sur ENTER les doigts croisés en sautant sur un pied un soir de pleine lune avec un baton de réglisse entre les dents). Mais sous ubuntu. Rien. reset efface le contenu du terminal, mais ne résoud pas le problème qui nous occupe. D'où ce petit script pour jouer avec les commandes ANSI. Les vieux de la vieille pourront se faire un alias reset='bin/ANSIHACK.PL --SETA' ;)
|-|oPe !7 |-|e|_p$ ;)
Tuesday, September 23, 2008
Biokid NT : countermeasures
Quelque part en 1996, mon frère Piet me pond une storyline un peu abracadabrante inspirée d'un vieux souvenir (le Stoner): votre PC est infecté par le terrible virus Terminator 007. Le seul moyen d'en venir à bout, c'est le nouvel anti-virus interactif de PPP Team Software: Biokid.
Back in 1996, my brother's mind give birth to a curious story: your PC is infected by a dangerous virus -- the Terminator 007 -- and the only thing that can get rid of it is the brand-new interactive antivirus from PPP Team Software: Biokid. To put it simpler, Biokid is a crossing over between Megaman character and Commander Keen level design where you hunt for keys and weapon upgrades in maze-like platformer. It turned into one of our best production on RSD Game Maker.
L'idée, c'était de tenter de s'approcher du gameplay d'un Megaman. Mais là, j'ai envie d'un petit jeu au principe plus simple (un shoot'm'up) que Bilou pour roder un peu mon Game Engine, et plutôt que de ressortir Bilou Sky Quest (C64) ou d'essayer un portage de Out'm'up (assembleur, Y2K), je me suis dit que j'allais ressortir Biokid dans un nouveau mode de jeu: "Counter Measures".
Plus question d'assurer passivement la défense de votre réseau: Biokid prend les devant et part vaillamment à l'assaut du plus grand Botnet qu'il vous a jamais été donné de combattre.
I was thinking of giving my game engine for DS a try in a different setup : a shoot-m-up. I could have reused "Out'm'Up", our brain-free shooter that won the 100K game competition at Inscene Y2K. Or I could have revived "Bilou Sky Quest", the test game I made on C64 with the "Shoot-Em-Up Construction Kit". For some reason I started dreaming of a shooter featuring Biokid who'd now have to protect your corporate network proactively and fight the largest and scariest Botnet ever fought. (hmm. I could have been "inspired" by the Bionet EU project a colleague of mine is working on, btw).
edit: bon, comme vous le voyez, côté graphique, il y aura du boulot ... je voudrais recréer une ambiance "newschool" inspirée de Matrix, Tron et autres Space Invaders Extreme ... on verra ce que ça donne ...
Tags: biokid, pppteam, shoot-m-up, y2k, y96


Vote for your favourite post

