Archive for the 'coding' Category

Lapinou jumps ! - Version 1.2

Monday, July 21st, 2008

Je me suis enfin décidé à finaliser cette nouvelle version de Lapinou. Amusez-vous bien (ou pas), et n’hésitez pas à me rapporter tous les bugs que vous pourriez trouver, à me faire part de vos impressions, et à me proposer des améliorations. Vous pouvez dès maintenant télécharger Lapinou !

Site officiel de Lapinou:  http://thoduv.drunkencoders.com/lapinou

Nouveautés:

- 21 Juillet 2008:
[VERSION 1.2] Un gros gros paquet de nouveautés, de nettoyages de code, de correction de bugs ! Le nouveau Lapinou est là ! Maheureusement, il faudra surement attendre pas mal de temps la prochaine, si jamais il y en a une.
* Ajout d’un bloc aide, placé au début du jeu, pour expliquer un peu ce qu’il faut faire (pour les gens qui n’auraient pas envie de lire le LISEZMOI !)
* Ajout d’un bloc secret, qui coûte très cher, mais qui permet d’obtenir… un secret !
* Meilleure protection contre la triche !
* Petite musique (héhé) et animation pour ceux qui arrivent à finir le jeu !
* Menu permettant d’acheter des blocs. Début d’intégration d’un système “modulaire” pour la boucle principale.
* Modification du tri des polygones translucides pour corriger des bugs de transparence.
* Mode veille quand on ferme la DS.
* Passage à ASlib pour le son, ca m’évite tout plein d’ennuis avec mon propre lecteur MP3 qui n’en fait qu’à sa tête.
* Grosse modification du menu principal. Le code est toujours crade, mais c’est plus joli !
* Modification de la force de gravité (plus “réelle” et avec un “flottement” pour les objets très légers)… … En fait non, ca a l’air de casser le gameplay…
* Système de sauvegardes qui fonctionne (bloc “nds”). Fichier de scores/sauvegarde renommé en “lapinou.sav”.
* Envoi des scores sur internet direct de la DS.
* Ajout bloc “slide” et “nds”.
* Blocs qui tombent sont solides, et se brisent à l’atterissage.
* Ajout d’un petit système de particules (moches pour l’instant).
* Petites améliorations au système de vthreads: possibilité d’arrêter un thread gentiment, et de lancer des threads en cascade (à l’intérieur d’autres threads). Ajout de plein d’effets sur les menus.
* Support ADPCM, et passage de tous les sons en ADPCM = gain de place dans la ROM (200ko gagnés).
* Fond moins monotone (change selon la hauteur).
* Système plus solide d’IPC (InterProcessor Communication) “lapinou-ipc”.
* Système d’abstraction “lapinou-io” pour les fichiers.
* Collisions objets-objets.
* Nettoyage du code (particulièrement boucle principale).

Note to english peoples: The site and the game are in french only, but I think it’s playable even without understanding what is written. If you don’t understand how something works, you can contact me for an explanation.

Super Nintendo

Saturday, October 6th, 2007

Salut !

Après avoir essayé de programmer NES, j’ai trouvé que c’était pénible, principalement à cause du processeur 8 bits et du PPU (Processeur d’image) limité et difficile à manipuler.

Super Nintendo

La semaine dernière, j’ai donc voulu essayer de programmer sur cette console de légende qu’est la Super Nintendo. Les spécifications techniques (voir article Wikipedia) m’avaient toujours donné envie, mais j’avais été rebuté par le fait qu’il faille programmer en assembleur, et par la réputation qu’a la SNES d’une console difficile à programmer. Et quelle bonne surprise ! La Super Nintendo (SNES) est vraiment une console sympa à programmer:

  • Processeur 16bit 65816. C’est une évolution 16 bits du 6502 de la NES, avec quelques opcodes en plus. C’est donc très semblable, et quand on connait le 6502, c’est facile d’apprendre à maitriser les quelques nouvelles instruction et modes d’adressage, et c’est très agréable d’utiliser (enfin !) du 16 bit. En effet, le 16 bit permet de manipuler des nombres jusqu’à 65355, contre 255 pour le 8 bits: c’est une nette amélioration pour l’adressage de la mémoire, et les opérations arithmétiques.
  • 128k de mémoire vive.
  • Le PPU n’a rien à voir avec celui de la NES. On passe ici à une profondeur de 16 bits, avec au maximum 256 couleurs simultanément. Les sprites peuvent maintenant faire de 8×8 à 64×64 pixels, et utiliser 16 couleurs chacun. La taille de la VRAM a été aussi démultiplié, puisqu’on arrive à 128Ko (c’est même plus que la GBA!). On apprécie les différents modes proposés (plusieurs BG à différentes profondeur). De nombreuses possibilités sympathiques sont présentes, comme le HDMA ou la fusion de plans.
  • De nombreux programmes sonores disponibles sur internet.
  • Un style de gestion du hardware qui se rapproche de la GBA, et qui est bien plus “programmer-friendly” que la NES.

Il s’agit donc véritablement d’une bonne console, et après m’être amusé avec, je comprends mieux pourquoi on y trouve d’aussi nombreux jeux, et pourquoi certains se sont hissé au rang de légende.

Néanmoins, il reste des points négatifs, qui ralentissent nettement le développement:

  • Programmation uniquement en assembleur. Il n’existe pas de compilateur supportant toutes les possibilités du CPU de la SNES.
  • Système de switch 16bit/8bit plutôt pénible. En effet, il est souvent nécessaire d’accéder à des registres en mode 8 bits, tout en manipulant des données 16 bits, ce qui conduit à une utilisation assez intensive de la stack.
  • Toujours un seul registre supportant les opérations arithmétique (A).
  • Organisation de la mémoire compliquée, et assez mal gérée par l’assembleur (WLA DX).
  • VRAM/CGRAM/OAM non mappés au bus principal: on doit passer par des registres pour y écrire.

Si vous aimez programmer en assembleur, sur de “vieux” systèmes, je vous conseille vraiment la Super Nintendo.

Liens dont je me suis servi (tout est en anglais):

Voilà voilà ! :)

Lapinou jumps: classement et bugs

Wednesday, August 15th, 2007

Petite mise à jour de Lapinou, avec un système de codes permettant de s’enregistrer en ligne, et quelques corrections mineures de bug. Création d’un mini-site.

Par là: http://thoduv.drunkencoders.com/lapinou/ 
Lien direct pour télécharger la dernière version: http://thoduv.drunkencoders.com/lapinou/lapinou150807.zip

Lapinou jumps ! - Version 1

Wednesday, August 1st, 2007
Lapinou jumps !
Version “1″
(présentée à la compo Dev-Fr: sujet)

- Programmé par THODUV.
- Graphismes par NHUT.

Présentation:
Lapinou est un gentil petit lapin “carrotivore” qui se trouve, pour une raison que personne jusque là n’a pu expliquer, coincé dans une sorte de tour infernale, entre deux bords d’écran. Mais n’ayez crainte pour notre ami rongeur, qui bien qu’ayant une alimentation peu variée, est plutôt dégourdi et rusé. A force de réflexion, celui-ci a donc trouvé la solution à son emprisonnement: cette solution est simple, il s’agit de monter. Monter ? Eh oui, tiens justement, je vois d’étranges blocs de terres comme suspendus au milieu du vide par une force divine fort favorable à la survie de l’espèce des lapins, qui commme vous le savez, est nécessaire pour la bonne régulation de la quantité de carottes dans l’écosystème, mais bref. Plus étonnant encore, ces fameux blocs magiques semblent indiquer un chemin, former un escalier vers la liberté de notre cher Lapinou. Alors il prend son courage avec ses deux oreilles, s’échauffe les pattes, et commence à bondir de blocs en blocs. Mais horreur: il s’avère que ceux-ci sont plutôt du genre fragile et s’effritent rapidement sous le poids du rongeur dopé au jus de carotte… Votre mission (si vous l’acceptez): incarnez ce lapin en détresse, et rendez-lui sa liberté.

Images:

Screenshot Screenshot

Téléchargement:
http://thoduv.drunkencoders.com/lapinou/lapinou_devfr.zip

Vidage de poubelle 3: ndsim

Monday, June 18th, 2007

Je continue, et cette fois ci je sors de ma poubelle les sources d’un de mes plus gros projets…

C’est ndsim, mon projet de messagerie instantanée multi-protocole sur DS. Mon premier gros projet en fait. Je l’ai abandonné pour cause de perte de motivation dans l’idée. Ce programme ne m’intéressait plus, et je n’en voyait plus l’intéret.

Ce projet contient: un système de plugin, diverses fonctions d’affichage, diverses fonctions d’échange entre les CPU, des fonctions de lecture/écriture sur le firmware, un gui affreux, un gestionnaire de protocoles/sessions, …

Ces sources sont à priori incompréhensibles car très peu commentées et assez barbares par certains endroits. La dernière modification sur ce programme date de juillet 2006. Ces sources sont libérées sous license “demander-avant-d’utiliser/ask-before-using” (si jamais que quelqu’un trouve ça utilisable).

Sources: http://thoduv.drunkencoders.com/poubelle/ndsim.zip

Vidage de poubelle 2: tgba

Monday, June 18th, 2007

Je continue à vider ma poubelle…

Cette fois-ci, c’est tgba. Il s’agit d’un début (tout début) “d’émulateur” de GBA sur DS, que j’ai eu le temps d’écrire avant de me rendre compte de l’inutilité de la chose.

Il ne s’agit pas vraiment d’un émulateur, mais plutot d’un “virtualisateur”. Le programme GBA est lancé sur l’ARM9, comme s’il s’agissait d’une GBA, mais avec des options de protection de la mémoire spéciales, ce qui permet le lancement d’une exception à chaque accès -par exemple- aux registres IO. On émule alors l’instruction responsable de l’accès, afin de le rediriger vers les registres de la DS. L’émulation THUMB est fonctionnelle, l’émulation ARM n’émule qu’un seul opcode. L’exception handler écrit en assembleur fonctionne. Le point majeur de travail resant serait la gestion des interruptions (IRQ) et des SWIs.

La dernière modification sur ce programme date du 24 avril 2007. Ce programme est releasé sous license WTFPL.

Sources: http://thoduv.drunkencoders.com/poubelle/tgba.zip

Vidage de poubelle 1: libsimsn

Monday, June 18th, 2007

Voilà, j’ai décidé de vider un peu ma poubelle à projets pas finis et de mettre les sources à disposition, ca me donne moins l’impression que je les ai fait pour rien ! ^^

Je commence donc avec libsimsn qui est une lib multi-platforme permettant d’accéder au protocole MSN (dans sa version 9). Je l’aie testée sous Linux, Windows et Nintendo DS: elle était à la base prévue pour être le plugin MSN de Ndsim. Elle dépend de la lib MatrixSSL pour la connection sécurisée. Cette lib est elle aussi portable, et est sous license GPL. Par conséquent, les sources de libsimsn sont sous license GPL.

La dernière modification à ce programme date du 2 février 2006, le protocole MSN a évolué depuis, et il se peut que certains élements de la lib soient obsolètes.

Au niveau des fonctionnalités, cette lib n’est pas complètement terminée. La connexion fonctionne, mais le système Passport est très mal géré, le support du NS (Notification Server) est à peu près complet, celui de la liste de contacts également, mais la partie gérant le SB (Switch Board) n’est pas achevée.

Si vous êtes curieux, voilà donc la source (GPL).

Sources: http://thoduv.drunkencoders.com/poubelle/libsimsn.zip

Update on my Wiimote things…

Thursday, January 4th, 2007

Here: http://thoduv.drunkencoders.com/wii/wiimote_04012007.tar.gz (source, GPL)
It includes:

  • wiimote.c: Functions to communicate with the Wiimote. Supports buttons, leds, rumble, memory reading/writing, IR (broken, or works sometimes, weird…), accelerometter reading (just receiving x,y,z. I don’t have math skills for more), expansion port control and init (can’t do much as I don’t own any Nunchuk nor Classic controller), basic speaker init (limited to the status of knowledge about the speaker),…
  • ir_test: SDL display of IR dots (needs SDL)
  • motion_test: OpenGL display of accelerometers axes (needs OpenGL)
  • exp_test: Allows to detect the presence of an expansion device and to init the device.
  • mii_tool: Small tool for reading/writing Miis (write seems to be broken though).
  • speaker_test: Plays a annoying note through the speaker (sometimes it doesn’t work) (Based on Carl Kenner discoveries) (uses SDL for timing).

Playing with Wiimote / Bidouilles avec Wiimote

Sunday, December 17th, 2006

Even if I don’t own a Wii now, I bought a Wiimote, and I’m doing experimentation with Bluetooth. Here’s a small demo thats dumps and injects Miis of a Wiimote (Linux only):

mii_tools (source, GPL): http://thoduv.drunkencoders.com/wii/mii_tool_17122006.tar.gz (needs bluetooth headers).

You’ll need a Bluetooth adapter and bluetooth modules loaded.

WARNING: If the reading functionnality works well, I did less testing on writing (at worst, your Miis may be deleted from the Wiimote). Feedback may be appreciated.

Même si je n’ai pas encore de Wii, j’ai acheté une Wiimote, et je fais quelques bidouilles avec du Bluetooth. Voilà une petite démo qui permet de télécharger/injecter des Miis d’une Wiimote (sous Linux évidemment) :

mii_tools (source, GPL): http://thoduv.drunkencoders.com/wii/mii_tool_17122006.tar.gz (nécessite les headers bluetooth).

Vous aurez besoin d’un adaptateur bluetooth et des modules bluetooth chargés.

ATTENTION: Si la lecture fonctionne, l’écriture *peut* poser problème (rien de grave, au pire vos Miis effacés de la télécommande), des retours d’expériences seraient appréciés.

DSVNC

Monday, August 21st, 2006

VNC Logo Presented at Neoflash compo, more infos and description here : http://www.neoflash.com/forum/index.php/topic,3013.0.html

UPDATE: Quote from “Buck Dodgers” on October 19th, 2007:

For people trying to get it going with new wifilib, i did this a few months ago , look on page 5 of http://www.neoflash.com/forum/index.php/topic,3013.0.html , i attached the file there. You have to login to the site though to see the attachment. it works on my newer DS lite with RealVNC 4.12 (free version). And thanks thoduv for the great program!