Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Tutoriels d'utilisation de gint (commentaires)
Lephenixnoir Hors ligne Administrateur Points: 20112 Défis: 143 Message

Tutoriels d'utilisation de gint (commentaires)

Posté le 15/07/2017 13:54

Les tutoriels d'utilisation de gint sont sur ce topic.

Pour garder les tutoriels ensemble dans les posts du topic d'origine (et surtout pas créer un topic par tuto...), je vous propose de poster vos questions/commentaires/etc ici. Merci !


Précédente 1, 2, 3 ··· 10 ··· 13, 14, 15, 16
Dark storm Hors ligne Labélisateur Points: 11468 Défis: 176 Message

Citer : Posté le 27/05/2021 00:39 | #


Done, y'a plus qu'à update

Pour info, gint 3.5.0 nécessitant fxlibc, normalement tu n'as même pas besoin d'installer cette dépendance explicitement : elle va être directement cherchée et installée via la mise à jour de gint.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Shadow15510 Hors ligne Administrateur Points: 4817 Défis: 16 Message

Citer : Posté le 27/05/2021 17:17 | #


Ouaip, c'est ce qu'il s'est passé, merci !

J'ai encore un problème, mais je pense que ça vient de mon de code xD j'ai le convertisseur Python :
def convert_mt(input_name, output, params, target):
    with open(input_name, "r") as file:
        # Extract informations
        lines = file.read().splitlines()
        mutation_matrix = [i.split(" | ") for i in lines]
        
        # Encode information into bytes
        data = bytes()
        for i in mutation_matrix:
            for j in i:
                data += fxconv.u32(int(j))

    fxconv.elf(data, output, "_" + params["name"], **target)

L'idée est de stocker les octets dans des tableaux C de 4 cases par 8 (4 cases en ordonnée et 8 en abscisse)
Quand je vais dans le menu qui est sensé être généré par les données encodées par le script la calto… s'éteint

J'ai essayé de remplacer data = fxconv.ObjectData() mais le compilo ne passe pas… De même quand je remplace data += fxconv.u32(int(j)) par data += bytes(int(j)) ça compile, mais le menu est blanc (pas affiché)

Faut-il faire subir aux données un traitement spécial du fait qu'elles seront stockées dans un tableau ? (y a une partie du tuto sur les conversions avec des pointeurs, mais j'ai pas trop compris ^^')
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20112 Défis: 143 Message

Citer : Posté le 27/05/2021 17:24 | #


Ça a l'air bon. Tu peux toujours afficher len(data) dans ton script pour vérifier que ça fait bien (4×8)×4 = 128 octets.

Dans le code C, tu dois bien récupérer une structure de ce genre :

struct mutation_table {
    int table[4][8];
};

extern struct mutation_table la_variable;

Ici, tous les octets de la structure (c'est-à-dire la valeur des entiers) sont connus à la compilation, donc il n'y a pas besoin de ObjectData(). Ce n'est nécessaire que si tu as des pointeurs, et là il n'y a que des int. Il n'y a pas de traitement spécial ; en C, un tableau c'est juste des éléments mis bout à bout (et alignés), donc ici il n'y a rien à faire.

Pour information bytes(int(j)) ça ne fait pas du tout ce que tu penses. bytes(10) ça crée une séquence de 10 octets vides. Autrement dit, si les valeurs dans ton tableau sont 12, 37 et 54, utiliser bytes(int(j)) créerait une structure de 12+37+54=103 octets, ce qui n'a rien à voir avec ce que tu veux (32 int).

Par contre, le fait que ça marche avec l'autre taille suggère que soit data n'est pas de la bonne taille dans la version que tu as postée, soit le code C s'en sert mal. Le redémarrage de la calculatrice est un crash, vérifie que ton code côté C est correct aussi.
Shadow15510 Hors ligne Administrateur Points: 4817 Défis: 16 Message

Citer : Posté le 27/05/2021 17:55 | #


Ok !

Côté code python, toutes les tables converties sont de la bonne tailles !

Côté code C, j'ai bien une structure de cette forme… Et je m'en sert normalement : extern struct mutation_table mt_symptoms_1; (c'est une déclaration parmi les 9, mais elles sont toutes pareilles)

Ensuite que j'ai déclaré toute mes tables, je déclare un tableau (qui correspondra à la table à afficher)
    int table[4][8];
    if (mutation_menu == 1)
    {  
        if (current_game->symptoms < 4) init_mat(8, 4, table, mt_symptoms_1.data);
        else if (current_game->symptoms < 8) init_mat(8, 4, table, mt_symptoms_2.data);
        else init_mat(8, 4, table, mt_symptoms_3.data);
    }

La fonction init_mat change la valeur d'un tableau en copiant les case une à une :
void init_mat(int x, int y, int dest[][x], int src[][x])
{
    for (int i = 0 ; i < x ; i++)
    {
        for (int j = 0 ; j < y ; j++)
        {
            dest[j][i] = src[j][i];
        }
    }
}


En dernière source d'erreur possible, il reste la partie affichage :
    dclear(C_WHITE);
    for (int i = 0 ; i < 4 ; i++)
    {
        for (int j = 0 ; j < 8; j++)
        {
            if (table[i][j]) dsubimage(i*16, j*16, &img_mutations, 16 * (mutation_menu - 1), 0, 16 * (table[i][j] - 1), 15, 15);
        }
    }

Dans le doute, j'ai essayé en faisant aller i de 0 à 8 et j de 0 à 4, mais même problème : la calto crash…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20112 Défis: 143 Message

Citer : Posté le 27/05/2021 18:26 | # | Fichier joint


Pas de problème en vue ; ci-joint une archive qui démontre un exemple très similaire.

Ajouté le 27/05/2021 à 18:38 :
Dis donc ton dsubimage() il a des paramètres un peu douteux sur la fin, tu as un 15 en double à la place d'avoir les paramètres (DIMAGE_NONE en général)
Shadow15510 Hors ligne Administrateur Points: 4817 Défis: 16 Message

Citer : Posté le 27/05/2021 20:50 | #


Ah oui tient, bien vu ! Ça marche bien maintenant

'fin bien, ça n'affiche rien comme prévu, mais ça affiche des trucs et ça ne crash plus !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20112 Défis: 143 Message

Citer : Posté le 27/05/2021 20:53 | #


Le 15 activait DIMAGE_NOCLIP qui contient des optimisations pour les cas où les images ne dépassent pas de l'écran ; je suppose que 16 * (table[i][j] - 1) était assez grand dans certains cas pour dépasser de l'écran par la droite et poser des problèmes.
Shadow15510 Hors ligne Administrateur Points: 4817 Défis: 16 Message

Citer : Posté le 27/05/2021 20:54 | #


Normalement non, il s'agit en fait d'une spritesheet le 16 * (table[i][j] - 1) correspond juste à un sprite c'est le 0 un peu avant sur la ligne qui n'a rien à faire là
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20112 Défis: 143 Message

Citer : Posté le 27/05/2021 20:57 | #


Oui, je comprends bien. C'est juste qu'à cause du 0 tous les arguments étaient décalés et du coup cette quantité était la largeur au lieu de la position verticale, donc tu affichais une sous-image de largeur variable.
Shadow15510 Hors ligne Administrateur Points: 4817 Défis: 16 Message

Citer : Posté le 27/05/2021 21:02 | #


Ouaip !
Bon ben il ne reste plus qu'à peaufiner tout ça pour avoir ce que je veux et c'est bien partit !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Précédente 1, 2, 3 ··· 10 ··· 13, 14, 15, 16

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 45 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd