Jump to content
killerklown

[help] Hello world maison

Recommended Posts

Bon, j'ai testé un hello world un  peu plus 'évolué' disons, et là je tombe sur un os, voici le code :
 

/*
 * Hello world MD
 *
 */
 
#include "genesis.h"

int main() {
    // Init VDP
    VDP_init();
    
    // Draw text
    VDP_setTextPalette(PAL0);                         // (vdp_bg.h)
    VDP_setPaletteColor(15, 0x0bf);                 // (vdp_pal.h)
    VDP_drawTextBG(PLAN_A, "Hello World", 10, 10);     // (vdp_bg.h)

    // draw another one
    VDP_setTextPalette(PAL1);
    VDP_setPaletteColor(31, 0xa0f);
    VDP_drawTextBG(PLAN_B, "Hello World", 11, 11);
    

    
    while(1) {
        /*
        // Fade out / in
        VDP_fadeOut(15, 15, 50, 0);     // (vdp_pal.h)
        VDP_waitFadeCompletion();         // (vdp_pal.h)        
        VDP_fadeIn(0, 15, PAL0, 50, 0); // (vdp_pal.h)        
        VDP_waitFadeCompletion();
        */
        // Fade colors
        VDP_fadeTo(15, 8, (u16 *) PAL1, 30, 0); // (vdp_pal.h)
        VDP_waitFadeCompletion();
    }
}

J'arrive à faire clignoter mon premier texte (en commentaire dans le code), par contre pour le deuxième, j'aimerais le faire changer de couleur, mais il semble que le paramètre 3 ne soit pas bon, mais d'après le fichier vdp_pal.h, ce paramètre et le 3 de fadein sont dans le même format. Si je le caste la compil passe mais le prog foire.

J'ai loupé un truc ?

J'ai remonté la chaine jusqu'au genisis.h, mais je ne vois rien qui pourrait me sortir de ce mauvais pas.

Si quelqu'un pouvait m'éclairer.

Je le remercie par avance.

Share this post


Link to post
Share on other sites

Pour faire changer ton texte de couleur tu peu changer la palette déclarée pour la couleur du texte avec   VDP_setTextPalette.

La couleur du texte est toujours la dernière , tu peut aussi la faire varier avec VDP_setPaletteColor comme ton code exemple.

 

 

VDP_setTextPalette(0);
VDP_drawText("Value of Bankswitch offset :  ",2,9);
VDP_drawText("Value of Bankswitch Mask   :  ",2,11);
VDP_setTextPalette(1);

Si tu as des questions spécifiques SGDK tu peut aussi venir sur le discord de SGDK --> https://discord.gg/3HXTPY

Share this post


Link to post
Share on other sites

Merci X-death,

En fait je souhaitais fait in fadeto type in / out mais avec une autre couleur, pour comprendre le fonctionnement, rien de particulier.

Et ma question est vraiment sur le type de donnée, je ne comprends pas comment le même type de valeur fonctionne dans une fonction et pas l'autre, sauf si la déclaration C est erronée par rapport à celle définie en ASM.

Ce n'est pas très grave, je vais laisser tomber ça pour le moment, je vais préparer ma première 'démo', voir si j'y arrive.

Merci pour le site, je vais voir ça.

A plus.

Share this post


Link to post
Share on other sites

Salut,

Je réponds sur ce topic pour ne pas mettre trop de trucs un peu partout, j'ai une question concernant les sprites, j'ai suivi les tutos de X-Death, ça fonctionne bien pas de souci, je dois juste retravailler un peu mes sprites parce que j'avais des trucs en 1280, du coup en 96 de large, il y a des petits gnons.

Ma question porte sur les répertoires, j'ai donc mes fichiers ASM pour les tiles et la palettes, mais ça ne fonctionne correctement que si ces fichiers sont dans le répertoire res, si je les déplace dans le sous répertoire SPRITES par exemple, ça ne fonctionne plus, du coup la question est, comment peux t on indiquer un sous répertoire spécifique pour ces fichiers ? J'aimerais les ranger proprement, même si pour la suite ce n'est pas utile.

Merci par avance.

Share this post


Link to post
Share on other sites

pour commencer de quel tuto tu parles car je n'ai rien écris pour les sprite depuis un très long moment et j'ai peur que tu sois parti sur une solution très obsolète.

tu peu t'inspirer de l'excellente démo sample sprite pour regarder comment fonctionne rescomp le gestionnaire de ressources de SGDK.

Share this post


Link to post
Share on other sites
Il y a 13 heures, X-death a dit :

pour commencer de quel tuto tu parles car je n'ai rien écris pour les sprite depuis un très long moment et j'ai peur que tu sois parti sur une solution très obsolète.

tu peu t'inspirer de l'excellente démo sample sprite pour regarder comment fonctionne rescomp le gestionnaire de ressources de SGDK.

Ah oui désolé, je parlais des tutos pour transformer les images en tiles + pal, donc les tutos pedit, psp et genitile. Les 3 fonctionnent, j'ai du un peu chercher car mes images BMP de GIMP posaient souci, mais maintenant je gère.

La question que je posais est la suivante, voici la structure que j'aimerais avoir pour mes sprites (fichiers totot.s et totop.s) :

image.thumb.png.ba629d1ec82815013cfc1c5fbd2cc126.png

Mais ça ne fonctionne pas avec le code suivant :

extern u16 logo_pal[];
extern u32 logo_tiles[];

A noter j'ai bien mis le global dans les fichiers s.

Ca ne fonctionne que si mes fichiers s sont un cran au dessus dans le répertoire res, donc je cherche un moyen dans le code de lui donner le répertoire des ressources, donc le sous-répertoire sprites du répertoire res.

Est ce que je m'exprime mieux ?

Sinon j'ai testé hier de bruler la rom et tester sur ma MD et ça fonctionne pour l'affichage basique, ça c'est déjà pas mal même si ce n'est qu'un tout petit début.

Merci à toi en tout cas pour tout le boulot et l'aide.

image.png

Share this post


Link to post
Share on other sites

Oui tu t'exprime mieux :p

Le problème comme dis dans mon précédent post c'est que mon tutos est largement obsolète.

Depuis quelques années maintenant SGDK intègre un gestionnaire de ressources : Rescomp

regarde la démo sprite dans le dossier sample tu va comprendre assez rapidement.

Regarde également le readme de rescomp dans le dossier tools de SGDK

Le dossier /res corresponds aux ressources de ta démo.

Tu peu ensuite définir un fichier.res par type de ressources et déclarer tes ressources

exemple pour un type IMAGE de background sur la plane A et B

Citation

IMAGE bgb_image "gfx/bgb.png" -1
IMAGE bga_image "gfx/bga.png" -1

et pour les appels dans le code :

 

Citation

#include "gfx.h"

[...]   

// load background
    ind = TILE_USERINDEX;
    VDP_drawImageEx(PLAN_B, &bgb_image, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, ind), 0, 0, FALSE, TRUE);
    ind += bgb_image.tileset->numTile;
    VDP_drawImageEx(PLAN_A, &bga_image, TILE_ATTR_FULL(PAL1, FALSE, FALSE, FALSE, ind), 0, 0, FALSE, TRUE);
    ind += bga_image.tileset->numTile;

exemple pour music.res avec une musique au format VGM

Citation

VGM sonic_music "sonic1.vgm"

Citation

#include "sound.h"   

// start music
    SND_startPlay_XGM(sonic_music);

 

l'avantage c'est que tu peu travailler directement en png 16 couleurs rescomp fera les conversions à la volée lors de la compilation.

et comme tu le souhaite tu peu organiser sa en sous dossier.

Quand tu va faire des maps avec Tiled par exemple tu à juste à exporter ton png qui corresponds à ta map , remplacer ton fichier et recompiler ;)

 

  • Upvote 1

Share this post


Link to post
Share on other sites

Comme d'hab, je te remercie, en fait je prenais le truc à l'envers, comme dis le but étant à terme de basculer en ASM, bon quoi qu'il en soit, j'ai remis l'ancien code qui est basé sur la démo sprite et ça fonctionne comme je le veux, en fait j'ai eu un peu de mal a appréhender le pourquoi le fade se passe sur les palettes uniquement, bref, j'ai donc fait des tests concluants avec les anims, qui sont, pour le coup, assez simple à gérer.

J'ai maintenant une autre question, je pense que la prochaine fois ce sera un topic avec ma tout petite démo de logo; Est ce qu'on peut donner un temps d’exécution aux anims ? j'ai eu beau faire le tour des librairies je n'ai pas trouvé, et idem dans l'exemple sprite, je n'ai pas trouver de 'timer', fichiers RES, idem.

A moins qu'il faille faire une surcharge de la fonction native du SGDK ?

A plus

Share this post


Link to post
Share on other sites

Je te conseil vraiment d'étudier la démo sprite.

Le gestionnaire Rescomp gère le type sprite et s'occupe de tout.

Exemple avec le fichier sonic dans le dossier sprite :

sonic.thumb.png.6ce6e91bea6b46f7856786072701b0f2.png

extrait du readme de rescomp :

Citation

SPRITE
------
Take an image as input and transform it in SGDK SpriteDefinition structure.
SpriteDefinition is used to draw, animate and manage sprites, it internally contains severals TileSet, Palette and Animation structures.

Syntax:
SPRITE name img_file width heigth [compression [time [collision]]]

    name          name of the output SpriteDefinition structure
    img_file      path of the input image file (should be 8bpp .bmp or .png)
    width         width of a single sprite frame in tile (should be <= 20)
    heigth        heigth of a single sprite frame in tile (should be <= 20)
    compression   compression type (use unpackSprite(..) to unpack)
                   -1 = AUTO (use best compression scheme)
                    0 = NONE (no compression)
                    1 = APLIB (aplib library)
                    2 = LZKN (Konami LZW compression, disable for legal reason)
                    3 = RLE (4bits RLE compression)
                    4 = RLE MAP (tilemap adapted RLE)
    time          display frame time in 1/60 of second (time between each animation frame)
    collision     collision type: CIRCLE, BOX or NONE (BOX by default)

Some informations about how SpriteDefinition is generated from the input image:
- input image dimension is aligned on tile (multiple of 8).
- input image is a grid where each cell represents a single sprite frame and where a row define a complete sprite animation.
- cell size (frame size) = width * height (in tile)
- a frame can be composed of several internal VDP sprites (max = 20) if width or height are > 4.
- rescomp detect flipped frame to avoid redundant sprite tiles.
- rescomp detect empty frame at end of animation row to not store empty frame data.
- rescomp detect frame copy inside an animation to generate the according animation sequence.
- collision bounds are calculated by using 75% of the original sprite frame.
- In future rescomp could detect empty tiles in a frame to optimize the internal VDP sprite usage (and also improve the collision box).
That may be a nice future addition :)

 

Du coup le fichier sprite.res avec les bon arguments :

Citation

SPRITE sonic_sprite "sprite/sonic.png" 6 6 FAST 5

Ensuite regarde les fonctions dans le code notamment static void updateAnim()

tu peut faire des test notamment l'argument time à ajuster en fonction de ton code et de ta fonction

 

  • Like 1

Share this post


Link to post
Share on other sites
il y a 34 minutes, X-death a dit :

time          display frame time in 1/60 of second (time between each animation frame)

Ma faute, j'ai pourtant ce fichier ouvert tout le temps idem pour la demo sprite, et je n'y avais pas fait gaffe.

Merci encore, RDV très bientôt pour ma toute petite première démo.

Share this post


Link to post
Share on other sites

×
×
  • Create New...