1

80
logoRGC.gif


Si vous êtes codeur, graphiste, musicien, que ce soit sur des micro-ordinateurs ou des consoles des années 80-90 (8, 16 et 32 bits), au sein d'un groupe ou pour simplement vous lancer dans un défi, alors le challenge de la Speed Coding de l’AC (réaliser un jeu avec des directives fixées le temps d’une journée et demi de folie) ne peut que vous intéresser !


L'AC 2021 se déroulera les 27 et 28 novembre 2021 à Congis (77440).

Pour ce qui est de l’AC, il s'agit d'une convention liée aux ordinateurs ludiques et grand public de la génération 8-16-32 bits qui se déroule à l'est de l’Île-de-France, à Congis (77440) non loin de Meaux. Elle a pour but de rassembler des utilisateurs éclairés comme des amateurs passionnés. On peut y voir des présentations de projets software/hardware ainsi que des expos, participer au tournoi Gaming ou à la Speed Coding, jouer en freeplay, effectuer des achats/ventes. Chaque personne est libre de ramener son matériel en lien avec l'esprit de la convention et pour cela, l'électricité et les tables sont mises à disposition sur place. Les participants gèrent leur "stand" de l'ouverture à la fermeture de la convention (possibilité de dormir sur place ou de faire nuit blanche). La participation à l'AC est payante et on s'enregistre via un formulaire en ligne. Les boissons sont à volontés et les repas à la carte à renseigner lors de votre inscription.

Depuis 2009, la convention "AC" accueille un concours Speed-coding et vous pouvez voir ici des résultat de l'AC 2019.
Bien sur, de jolis lots sont prévus pour les gagnants (les trois premiers), n’hésitez pas à vous surpasser !



SPEED CODING 2021 :

Voici les instructions de cette année:
"Gargouille Quest", ou comment un personnage doit gérer sa barre de vie correspondant à son état intestinal pour sortir d'un niveau.
- Un personnage qui évolue dans une Map.
- Le personnage a une "barre de vie/d'énergie" qui diminue avec le temps qui passe.
- Il doit trouver une issue avant que la barre ne soit arrivée à son terme.
- Le personnage peut ramasser sur la carte des bonus ou des malus qui vont faire diminuer ou augmenter la barre, ralentir ou accélérer sa décrue, etc.
- Il peut y avoir des obstacles , des ennemies, des pièges, etc.
- Différent éléments ou actions peuvent influer sur la barre de vie (courir, se battre, etc.).



Comme à chaque fois un dernier élément imposé ne sera dévoilé qu'au début de la compétition le samedi 27 novembre 2021.

En effet la Speed coding de l'AC a pour volonté que les réalisations se fassent sur place pendant la convention. Certaines directives imposées sont données en avance afin que les participants puissent se préparer un minimum (bibliothèques d'images, de sprites, de sons, et aussi réfléchir à quelques idées..) afin de gagner du temps lors du déroulement du concours. Nous vous conseillons donc ne pas trop avancer votre projet à l'avance car la contrainte donnée sur place pourrait vous faire tout recommencer !

Si vous avez la moindre question, n'hésitez pas à contacter Odie_one directement par MP (sur le forum Yaronet) ou par le biais de l'association RGC qui fera suivre.


Règlement de la speed-coding :

- Le principe de cette coding est la création d'un jeu sur la plateforme de votre choix avec des directives imposées.
- Vous avez une journée et demie (samedi 9h jusqu'à dimanche 15h) avant de présenter votre travail.
- Aucune restriction technique n'est donnée si ce n'est que le jeu doit être dans l'esprit rétro (16 bits max), il est possible de faire un jeu en 4Ko ou en 16Mo voir plus (sans limite). Le tout, sur la machine de votre choix (console ou ordinateur). Il n'y aura qu'un seul podium.
- La diffusion de votre travail sur vidéoprojecteur, ainsi que sa présentation sur l'estrade pourra vous être demandé.
- Tous les éléments du jeu - le code, les graphismes, les sons, etc. - doivent avoir été créés par le(s) participant(s) de l'équipe ou être sous une licence permettant la réutilisation légalement (domaine public, Creative Commons...).
- Toutes les productions pourront être diffusées sur différents médiums après l'AC via un DVD Vidéo de rétrospective de la party, via scene.org et pouet.net, etc.
- Une seule production par personne ou par groupe doit être présentée.
- Toute production doit être présentée pour la première fois, on ne réutilise pas le même programme que lors d'une précédente convention.

** Nouveauté depuis 2017 **
Nous permettons aux personnes qui le souhaitent de participer à distance hors concours.
Vous pouvez vous manifester sur le forum à la suite de ce sujet. Les compos seront relevées à la deadline par email (email_asso_rgc.gif) mais aucun classement ne sera fait.
Vous serez néanmoins mentionné et votre travail pourra être diffusé sous émulateur.




Le Jury sera composé de six personnes et inclura au moins deux membres de l'association RGC. Le restant sera choisi parmi les participants sur place (non inscrits au concours) en fonction de leurs appartenances et approches diverses (en ce qui concerne la passion du retro-coding, de la retro-informatique, du retro-gaming et des diverses communautés liées). Les six membres du jury devront avoir la possibilité de voir, d’essayer les œuvres proposées et de poser des questions à leur(s) créateur(s).
Viendra ensuite une délibération à huis clos où au final chacun des membres du jury établira un classement propre des œuvres (de celui qu'il préfère à celui qu'il aime le moins) l'ensemble des classements sera mis dans un tableau et les points de chacun seront additionnés pour établir un classement général avec un top trois pour le podium et la remise des prix.


Sachez tout de même qu'au delà des contraintes données, ce qui est attendu au final est plus un jeu qu’une démo technique et que l’œuvre sera jugée sur son ensemble. Voici un exemple des critères qui peuvent être pris en compte (non exhaustifs et non dans l’ordre d'importance) : L'idée / le concept du jeu (si il est original ou non), la jouabilité, les prouesses techniques, le taux de finalisation (une œuvre terminée sera un plus indéniable, mais si ce n'est pas le cas le coté "prometteur" du jeu pourra influer), la qualité de réalisation, le plaisir d'utilisation ...


Plus qu’un concours et au delà des lots que vous pourrez gagner avec vos réalisations, cette coding à toujours eu la vocation d’être un "tremplin" et si vous le souhaitez (aucune obligation cependant) l'asso RGC pourra ensuite vous accompagner pour finaliser votre œuvre si besoin et même à l’éditer au final (selon ses possibilités et vos conditions).





Toute l’équipe de l’association RGC vous souhaite bonne chance et à bientôt !




Pour poser vos questions, le forum (ici) ou email_asso_rgc.gif

2

odie_one (./1) :
"Gargouille Quest", ou comment un personnage doit gérer sa barre de vie correspondant à son état intestinal pour sortir d'un niveau.
C'est un exemple ou ça fait partie du thème ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

Sympa le concept smile

Ouais vaut mieux parler de faim que d'état intestinal, ça sonne un peu trop médical grin
avatar
MK !
Collectionneur, retrogamer.
Enfin, un peu moins maintenant.

4

Hmm j'ai quelques idée, reste a voir si j'aurais du temps a y passer
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

MetalKnuckles (./3) :
Sympa le concept smile

Ouais vaut mieux parler de faim que d'état intestinal, ça sonne un peu trop médical grin


Le theme c'est "Gargouille Quest"

Ca gargouille, pas parcequ'il a faim, mais parcequ'il faut qu'il trouve vite un toilette (et du PQ, un dévboucheur etc ...) grin
avatar
la passion du jeux vidéo retro et alternatif, du retrogaming, , des pratiques retro videoludique etc...

6

Après le confinement covid, le sujet aurait pu être autre chose qu'une épidémie de diarrhée...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

7

Ouais j'espère qu'on verra des projets un peu plus subtils que des jeux de merde comme Toilet Kids grin
avatar
MK !
Collectionneur, retrogamer.
Enfin, un peu moins maintenant.

8

Moi je dis que le sujet de fond c'est l'emmagasinement de merde et qu'on va l'evacuer !
avatar
la passion du jeux vidéo retro et alternatif, du retrogaming, , des pratiques retro videoludique etc...

9

Tiens c'est marrant le thème m'a aussi inspiré un jeu de shoot, et je connaissais pas Toilet Kids. Par contre la mécanique serait très différente smile
Sinon pensez à Wonderboy, on peut faire des trucs pas forcément crados si on met un effort wink
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

10

Pas envie de faire un jeu de plate-formes alors que j'arrive au bout du tunnel Ynxa grin
(et pas envie de réutiliser le code pour juste changer les assets non plus)
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2022 ?
https://yastuna-games.com

11

Tu n'est pas oblige de le dire en meme temps wink
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

12

Fadest (./10) :
(et pas envie de réutiliser le code pour juste changer les assets non plus)
Ça tombe bien : tu fais ça, tu es disqualifié direct trioui

13

Ah bah non, parce que j'utiliserai le Yastuna Lynx Creation Tool Suite spécial Platforming grin (bref, le truc ou tu changes juste un BMP, tu déclares les niveaux et quelques paramètres dans Excel) et zou... le jeu est fini grin
Ca reviendrait à exclure d'office l'utilisation de GB Studio, NES Maker & autres outils (comme le générateur de shoot sur Saturn d'il y a 2 ou 3 ans), et je n'ai rien vu dans ce sens dans le règlement (le code n'est certes pas créé par le participant, mais la licence utilise ce cas de figure) embarrassed

D'ailleurs, cette année, le thème et les contraintes hurlent littéralement "Te fais pas chier (oui bon ça, c'est pour rester dans le thème), utilises GB Studio ou NES Maker et fais un jeu de plate-formes ou un mini-RPG", c'est ce qu'il y a de mieux pour répondre aux contraintes en 24h, non ?

Ah par contre, j'avais oublié ça

- Aucune restriction technique n'est donnée si ce n'est que le jeu doit être dans l'esprit rétro (16 bits max), il est possible de faire un jeu en 4Ko ou en 16Mo voir plus (sans limite). Le tout, sur la machine de votre choix (console ou ordinateur).

On ne peut pas coder un jeu 64bits sur une 64 bits ?
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2022 ?
https://yastuna-games.com

14

Si, mais tu devra rembourser les 48 bits de trop perçu.
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

15

Oui la Jag est disqualifiée directe smile
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

16

J'ai dit console 64 bits, je ne pensais pas à la Jag grin
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2022 ?
https://yastuna-games.com

17

Z'êtes tous méchants sad
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

18

J'avoue c'est dommage de disqualifier la Jag... faudrait lever cette contrainte embarrassed
avatar
MK !
Collectionneur, retrogamer.
Enfin, un peu moins maintenant.

19

La Jag n'est pas disqualifiée (il y a déjà eu des entrées Jaguar dans le passé, et même plus récent comme la PSP).
C'est le jeu qui doit être dans l'esprit rétro (16 bits max), mais la suite de la phrase indique que cela peut-être sur la machine de son choix (donc pas de limitation aux consoles 16 bits).
A la limite, on peut utiliser Unity ou Unreal sur PC/console moderne à condition de faire un jeu dans l'esprit rétro (il y a déjà eu des soumissions avec SDL je crois, qui ne fonctionne que sur machines modernes - PC/Mac/Amiga NG/...). Ce sera peut-être un peu moins valorisé par le jury, c'est tout.

La question est plus, faut il garder la contrainte "esprit rétro 16 bits", alors que les PS1/N64 & co sont bien rétro maintenant et qu'un jour un petit génie pourrait décider de faire un jeu 3D "look d'époque" dessus. Après, je ne pense pas que le jury disqualifierait un tel jeu, donc c'est plus sémantique qu'autre chose.
Et si je fais quelque chose sur N64 cette année (toujours pas décidé de la cible), ça ne sera certainement pas en 3D...
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2022 ?
https://yastuna-games.com

20

Effectivement notre formulation peut-être considérée comme un peu datée maintenant, mais tu as très bien résumé les choses Fadest. wink
Il y a déjà eu des compo sous Jag et sur PSP par exemple. On accepterait sans soucis aujourd’hui des compos sur PS1/N64.
Concernant le jury, on essaye toujours d'avoir un patchwork représentatif (codeurs, joueurs et orgas) et effectivement la manière de faire et la puissance de la machine sont en général pris en compte, mais ça dépend également de la sensibilité/connaissance du jury à ce sujet.
avatar
----- SNK Forever -----
Association Retro-gaming Connexion : http://www.retro-gc.fr/
http://www.consoles-portables.com

21

Iceman RGC (./20) :
Concernant le jury, on essaye toujours d'avoir un patchwork représentatif (codeurs, joueurs et orgas) et effectivement la manière de faire et la puissance de la machine sont en général pris en compte, mais ça dépend également de la sensibilité/connaissance du jury à ce sujet.
Vous pourriez me demander si j'étais là mais sinon zerosquare il pourra vous dire pour +- n'importe quelle machine je pense smile

Je lance mon intérêt de participer à distance d'ailleurs smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22

Pas de soucis Brunni. C'est sympa de participer ! wink
avatar
----- SNK Forever -----
Association Retro-gaming Connexion : http://www.retro-gc.fr/
http://www.consoles-portables.com

23

Ah mais Brunni participait déjà malgré lui au concours coding, vu que j'utilise toujours sa lib 2D pour PSP (et j'ai même codé un Wolf3D avec, c'est dire) grin

24

Règle sur place :
Le personnage devra effectuer plusieurs actions (ex : appuyer sur un bouton) et/ou récupérer des objets (clé, papier toilette ..) pour valider la "sortie".
avatar
@originalfei
Homebrews Connexion
In pixels we trust.
ORE WO DARE DA TO OMOTTE YAGARU !

25

Parfait ça colle dans mon pitch d’origine.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

26

top merci
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

27

Bon je n'arriverai pas à temps sad ma dernière version à peu près jouable :

tromb Fichier joint : banana-island.gb

RPTa

Ça devait en gros être un clone de Wonderboy avec des toilettes volantes que tu utilises comme bumpers, et la barre de vie ne descend qu'avec les actions (pendant que tu bouges), donc fallait calculer tes sauts, prendre les fruits pour remonter la barre, fruits qui seraient impitoyablement mal placés. Dans la démo là j'ai volontairement rendu vachement plus facile pour que ça soit jouable, et les sprites n'apparaissent pas -- les fruits étaient la prochaine étape mais j'ai pas fini. Dommage, je savais que j'aurais dû commencer à coder le moteur avant, mais j'étais trop pris cette semaine (examen JLPT la semaine prochaine… j'ai quand même pris le weekend à coder sans culpabiliser mais ça ne suffit pas). En tous cas c'était très sympa et merci de m'avoir permis de participer smile Bonne chance à tous !

Pour les difficultés techniques… euh un peu tout, la Game Boy Color (dont je n'utilise même pas le CPU en x2 d'ailleurs finalement) n'est pas très performante, et une addition 24 bits (oui j'ai fait ça, j'avais pas assez en faisant du fixed 8.8) prend genre 10 scanlines #erf# ça va très vite. Là y a une gestion de physique, des collisions, un scrolling "infini" avec chargement des tuiles à la volée. Ça a été un peu plus long que prévu mais ça va. Sauf que la GBC n'a que 4 couleurs (3 pour les sprites) et il faut jouer avec les palettes, les outils d'édition de maps/sprites sont antédiluviens (genre 1999, écrits en Delphi), et c'est là que j'ai perdu vraiment beaucoup de temps. J'ai finalement utilisé ma ConsoleGraphicsLibrary, un outil que j'avais développé à l'occase et qui permet de faire des conversions de sprites et maps, puis générer un fichier TileD. J'ai dû y rajouter le support pour charger plusieurs plans depuis le fichier TMX et écrire celui de collisions, histoire de pouvoir l'utiliser dans le jeu. Je ne sais pas pourquoi j'avais jamais codé ça.

iFVw

Ça donne un code comme ça pour convertir les graphiques pour la GBC (j'ai le même genre de projet pour la Mega Drive et la Master System, après tu fais du copier coller et t'adaptes à ton environnement) :

Code
#include "ConsoleGraphics.h" #define RGB(r, g, b) ((((uint16_t)(b) & 0x1f) << 10) | (((uint16_t)(g) & 0x1f) << 5) | (((uint16_t)(r) & 0x1f) << 0)) FILE *outData, *outHeader; void setConversionParams(TilesetConversionData& conversionParams, bool isBg, bool use8x16, unsigned maxPalettes = 1) { conversionParams.optimizeTileset = isBg; conversionParams.tileWidth = 8; conversionParams.tileHeight = use8x16 ? 16 : 8; conversionParams.pixelFormat.mapBitsPaletteOffset = 9; conversionParams.pixelFormat.firstColorTransparent = !isBg; conversionParams.pixelFormat.rmax = 31; conversionParams.pixelFormat.gmax = 31; conversionParams.pixelFormat.bmax = 31; conversionParams.pixelFormat.amax = 1; conversionParams.pixelFormat.maxColors = 4; conversionParams.pixelFormat.maxPalettes = maxPalettes; } unsigned smallestInMap(ref<Map> m) { unsigned smallest = ~0; for (unsigned j = 0; j < m->height; j++) { for (unsigned i = 0; i < m->width; i++) { MapBlock block = m->getBlock(i, j); if (block >= 0) smallest = MIN(smallest, block); } } return smallest; } void writeTilesetForGbc(const char* fileName, FILE* outData, FILE* outHeader, TilesetConversionData conversionParams, ref<Tileset> t) { fprintf(outData, "#define %s_chr_tiles %d\n", fileName, t->numberOfTiles()); fprintf(outData, "const uint16_t %s_chr[%d * 8] = {\n", fileName, t->numberOfTiles()); fprintf(outHeader, "extern const uint16_t %s_chr[%d * 8];\n", fileName, t->numberOfTiles()); for (unsigned i = 0; i < t->numberOfTiles(); i++) { Tile* tile = t->getTile(i); for (unsigned k = 0; k < tile->height; k++) { uint16_t data = 0; for (unsigned j = 0; j < tile->width; j++) { int pixel = tile->getPixel(tile->width - j - 1, k).index; data |= (pixel & 1) << j; data |= (pixel & 2) << (7 + j); } fprintf(outData, "0x%x, ", data); } fprintf(outData, "\n"); } fprintf(outData, "};\n\n"); } void writePaletteForGbc(const char *fileName, FILE *outData, FILE *outHeader, TilesetConversionData conversionParams, ref<Palette> p) { fprintf(outData, "#define %s_palette_count %d\n", fileName, (int)ceil(double(p->currentColors) / conversionParams.pixelFormat.maxColors)); fprintf(outData, "const uint16_t %s_palette[%d] = {\n", fileName, p->currentColors); fprintf(outHeader, "extern const uint16_t %s_palette[%d];\n", fileName, p->currentColors); for (unsigned i = 0; i < p->currentColors; i++) { Pixel pix = p->getColor(i); fprintf(outData, "0x%x, ", RGB(pix.r, pix.g, pix.b)); } fprintf(outData, "\n};\n\n"); } void convertLevelMap(const char *fileName, const char *outputImageForDebug = nullptr) { char imageName[256], tilesetName[256]; sprintf(imageName, "%s.png", fileName); sprintf(tilesetName, "%s.tmx", fileName); TilesetConversionData conversionParams(newref Image(imageName, Pixel(255, 0, 255, 255))); setConversionParams(conversionParams, true, false, 6); doTilesetConversion(conversionParams); ref<Palette> p = conversionParams.outPalette; ref<Tileset> t = conversionParams.outTileset; ref<Map> m = conversionParams.outMap; // Writing map ref<Map> existingMap = readMapFromTiledCsvProjectFile(tilesetName, "bg"); if (!existingMap) { createTiledProjectFile(tilesetName, conversionParams); } else { m = existingMap; } ref<Map> collisionMap = readMapFromTiledCsvProjectFile(tilesetName, "collisions"); if (collisionMap) { unsigned smallest = smallestInMap(collisionMap); fprintf(outData, "const uint8_t %s_collision[%d * %d] = {\n", fileName, collisionMap->width, collisionMap->height); fprintf(outHeader, "extern const uint8_t %s_collision[%d * %d];\n", fileName, collisionMap->width, collisionMap->height); for (unsigned j = 0; j < collisionMap->height; j++) { for (unsigned i = 0; i < collisionMap->width; i++) { MapBlock tiledBlock = MAX(0, collisionMap->getBlock(i, j) - smallest); fprintf(outData, "%d, ", tiledBlock & 0xff); } fprintf(outData, "\n"); } fprintf(outData, "};\n\n"); } fprintf(outData, "#define %s_map_width %d\n", fileName, m->width); fprintf(outData, "#define %s_map_height %d\n", fileName, m->height); fprintf(outData, "const uint8_t %s_tiles[%d * %d] = {\n", fileName, m->width, m->height); fprintf(outHeader, "extern const uint8_t %s_tiles[%d * %d];\n", fileName, m->width, m->height); for (unsigned j = 0; j < m->height; j++) { for (unsigned i = 0; i < m->width; i++) { MapBlock tiledBlock = m->getBlock(i, j); fprintf(outData, "%d, ", tiledBlock & 0xff); } fprintf(outData, "\n"); } fprintf(outData, "};\n\n"); fprintf(outData, "const uint8_t %s_attr[%d * %d] = {\n", fileName, m->width, m->height); fprintf(outHeader, "extern const uint8_t %s_attr[%d * %d];\n", fileName, m->width, m->height); for (unsigned j = 0; j < m->height; j++) { for (unsigned i = 0; i < m->width; i++) { MapBlock tiledBlock = m->getBlock(i, j); unsigned short write = (unsigned short)tiledBlock & 0xffff; fprintf(outData, "%d, ", write >> 9); } fprintf(outData, "\n"); } fprintf(outData, "};\n\n"); // Writing tileset writeTilesetForGbc(fileName, outData, outHeader, conversionParams, t); // Writing the palette writePaletteForGbc(fileName, outData, outHeader, conversionParams, p); if (outputImageForDebug) mapWithMultipaletteAsImage(m, t, p, conversionParams.pixelFormat)->writeToFile(outputImageForDebug); } class SpriteBuilder { ref<Tileset> tileset; public: SpriteBuilder() : tileset(null) {} SpriteBuilder& convertSprite(const char* imageName, unsigned tileHeight = 8) { TilesetConversionData conversionParams(newref Image(imageName, Pixel(255, 0, 255, 255))); conversionParams.outTileset = tileset; conversionParams.tileHeight = tileHeight; doTilesetConversion(conversionParams); tileset = conversionParams.outTileset; return *this; } void writeSprites(const char* destBinFilePrefix) { ref<Image> imageToConvert = tilesetAsImage(tileset, null, PixelFormat(), 8); TilesetConversionData conversionParams(imageToConvert); setConversionParams(conversionParams, false, false, 1); doTilesetConversion(conversionParams); // Do not write a map conversionParams.outMap = nullptr; writeTilesetForGbc(destBinFilePrefix, outData, outHeader, conversionParams, conversionParams.outTileset); writePaletteForGbc(destBinFilePrefix, outData, outHeader, conversionParams, conversionParams.outPalette); } }; int main(int argc, char* argv[]) { outData = fopen("out/gfx.c", "w"); outHeader = fopen("out/gfx.h", "w"); convertLevelMap("level1"); SpriteBuilder() .convertSprite("mainchar.png", 16) .writeSprites("sprites"); SpriteBuilder() .convertSprite("bar.png") .writeSprites("window"); fclose(outData); fclose(outHeader); return 0; }

Après la fenêtre (jauge en bas ; la GBC n'a qu'un arrière-plan et seulement 40 sprites de 8x8, donc il est exclus de faire une jauge qui à elle seule prend une 20aine de tuiles 8x8 avec des sprites) ​ça a été la galère de comprendre ce que je fais de faux, et il semblerait qu'il faille toujours que je réinitialise le scrolling, donc il me faut une IRQ sur la scanline de la fenêtre. J'aimerais aussi y laisser un peu d'espace donc il faudrait que je joue sur la position avec une seconde interruption. Je voulais aussi remplacer la palette (l'idée était de faire un dégradé Brunniesque ; il y aurait eu des endroits "chauds" dans la jauge et si tu bouffes un fruit à ce moment-là il compte double, donc fallait calculer les sauts, etc.).

Le débogage a été difficile, j'ai eu de la peine à déterminer par exemple pourquoi je ne pouvais pas re-sauter une fois que j'étais sur le sol dans de rares cas, et c'était une erreur assez bête, mais je ne m'en sortais pas avec le débogueur de BGB. Je m'en sortais pas mais il est excellent ! Les outils pour voir la VRAM et tout, c'est vraiment génial. Et au final j'ai fini par me prendre un espace inutilisé de la RAM (0xd000), faire pointer un tableau dessus et écrire là-dedans, et voir avec le débogueur. En effet, t'as pas assez de mémoire pour en plus afficher du texte (genre une console) et avoir un jeu qui tourne. Ou plutôt si, mais si tu fais ça faut prévoir le jeu et l'allocation pour, et c'était du boulot.

W5eg

L'édition des sprites m'a achevé, il fallait les découper en multiples palettes, les copier dans les bons emplacements et faire un système qui les spawn et puisse les bouger avec la bonne palette. Pas bien dur, surtout que j'ai déjà codé le système d'allocation de sprites dynamiques qui copie le résultat dans l'OAM à la fin du balayage vertical, ainsi qu'un truc pouvant former de gros sprites en combinant de petits de 8x8, incluant un support du miroir horizontal. Bref je sais plus tout, mais c'était assez fonky et aussi assez sympa à faire smile on pourrait vraiment en faire un vrai jeu de plate-forme ! Moi qui rêvais aussi de coder une intro à la con (vraiment déçu, vous auriez rigolé) et tenter un fade fonky, dommage pour le temps.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

28

Tu as essaye Mesen-S ? ( https://www.mesen.ca )

Je ne l'ai pas testé avec GB/GBC mais le debuggeur NES est un des meilleurs que je connaisse.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

29

Merci pour l’entrée Bruni, on va le présenter. wink
Godzil, tu aurais quelque chose ?
avatar
----- SNK Forever -----
Association Retro-gaming Connexion : http://www.retro-gc.fr/
http://www.consoles-portables.com

30

Brunni : Fei et moi avons présenté ton ébauche sur place. On t'encourage tous à continuer le développement smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo