Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Jeux >> fx-CG 10/20 (Prizm) >> Add-ins >> Gravityduck
Gravityduck
Version : 0.9 Taille : 244340 octets Ajouté le : 2012-02-03 18:40 Modifié le : 2018-04-08 16:43
Auteur et posteur :
PierrotllHors ligneAncien administrateurPoints: 5488 Défis: 41 Message
Planète Casio - Add-in Casio - Gravityduck - pierrotll - Calculatrices
Nombre de visites sur cette page : 49727
Score au progrank : 126
Note actuelle : 10/10 noté 10 fois
Vous devez être connecté(e) pour noter (inscription).
30662 téléchargements | Voir les Tests (3)


Ce programme a été récompensé pour sa qualité par le label Planète Casio.

Description :

Voici l'adaptation fidèle de Gravity Duck pour Prizm.

Votre Dieu vous a confié la tâche délicate de récupérer tous les oeufs en or. Votre unique atout est de pouvoir changer la gravité. 40 niveaux sont à résoudre. Ce jeu se joue à l'aide des touches fléchées pour se déplacer et de SHIFT pour changer la gravité.

Le jeu overclock la calculatrice à 94.3MHz pour gagner un peu de vitesse (aucun risque pour la calculatrice). En quittant le jeu la fréquence du processeur est remise telle qu'elle était avant de lancer le jeu.
Appuyez sur OPTN pour afficher le compteur d'images par seconde.
Pour coller parfaitement au jeu flash il ne manque que la transition entre les niveaux (fondue au noir et apparition/disparition du canard), mais je n'ai plus assez de mémoire disponible pour charger l'animation. Pour cette raison le jeu est en version 0.9 et passera en 1.0 si je trouve un moyen d'ajouter ça.

Aux développeurs : certains fichiers sources peuvent être utilisés tels quels dans vos projets, regardez le README et servez-vous.



Mis à jour (compatibilité avec les Graph 90+E)


Note sur 10 Commentaire Date de notation
10très bon jeu, beau, et funLe 03.09.2022 à 11:47
10Voir le testLe 06.03.2014 à 13:28
10epicLe 09.01.2013 à 15:20
10Voir le testLe 09.07.2022 à 12:01
10Fluide, beau et fidèle au jeu d'origine.Le 12.07.2019 à 17:09
10Voir le testLe 12.12.2012 à 09:41
10tout simplement bluffant 0_0Le 14.05.2013 à 22:33
10greatLe 18.07.2020 à 16:06
10Rien à reprocher, encore mieux que sur mono !Le 25.12.2022 à 15:20
10Vous connaissez Gravity Duck, l'original ? Voilà, tout est ditLe 31.03.2013 à 17:55

Commentaires :

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8 | Suivante

LephenixnoirHors ligneAdministrateurPoints: 24574 Défis: 170 Message
Posté le 10-03-2018 à 09:38 | #
Les quelques tests que j'ai faits avec mkg3a posent aussi problème. Dans tous les cas, je crois qu'on n'a pas encore réellement résolu le bug, et je soupçonne une optimisation du compilo qui traîne dans un coin.

T'as tenté de compiler avec -O0 ?
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1243 Défis: 54 Message
Posté le 10-03-2018 à 12:42 | #
L'addin compilé avec -O0 a le bon goût, outre le fait de peser 40ko de plus (ça c'est pas hyper étonnant ceci dit), de provoquer un System Error lorsqu'on essaie de le lancer… (De même d'ailleurs si on ne lui précise pas d'option d'optimisation ; je ne sais pas si c'est strictement équivalent à -O0 : vu la taille du fichier produit, on dirait)

L'addin refuse de compiler avec -O2 ou -O3, avec des erreurs au moment d'assembler, de type :

⋅⋅⋅
/tmp/ccJQrTTV.s:246: Error: symbol `syscall_adress' is already defined
/tmp/ccJQrTTV.s:247: Error: symbol `getVRAM' is already defined
/tmp/ccJQrTTV.s:142: Error: misaligned data
/tmp/ccJQrTTV.s:26: Error: negative offset
/tmp/ccJQrTTV.s:26: Error: pcrel too far
⋅⋅⋅

Ça doit pouvoir se régler en touchant au code. (Ça vient de l'assembleur inline que Pll utilise pour les syscalls, je suppose…)

En revanche avec -O1, l'addin compile bien, n'est pas beaucoup plus gros qu'avec -Os (de l'ordre de 4ko), et effectivement les problème de couleurs disparaissent… J'aurai dû essayer ça plus tôt !
Toujours est-il que je ne qualifierai pas le processus d'«entièrement maitrisé».
LephenixnoirHors ligneAdministrateurPoints: 24574 Défis: 170 Message
Posté le 10-03-2018 à 12:57 | #
On dirait bien que c'est du compilateur, donc. Je pourrai jeter un oeil aux sources des sycalls et du dessin si tu veux... j'ai déjà dû retoucher ML pour la faire marcher. (Aussi bon qu'était PLL, il y a quand même des trucs qu'il a faits un peu vite.)
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1243 Défis: 54 Message
Posté le 10-03-2018 à 13:15 | #
En fait vu que j'utilise la libfxcg maintenant, l'appel de syscall qu'il faisait n'avait plus beaucoup de sens vu que la bilbiothèque le rend d'emblée disponible : donc en enlevant l'assembleur inline pour le remplacer par l'utilisation de la bibliothèque, ça compile avec -O3 et -O2.

Donc pour résumer :
Avec -O0 ou aucune option : on a un System Error.
Avec -Os ou -O2 : on a le problèmes de couleur.
Avec -O1 ou -O3 : tout semble fonctionner normalement.

Et avec -Os ou -O2, le correctif qui consiste à faire un accès bidon à une couleur de chaque sprite avant de les charger en heap fonctionne, et on peut aussi avoir des couleurs correctes.

Voilà tout ce que je sais pour l'instant.
LephenixnoirHors ligneAdministrateurPoints: 24574 Défis: 170 Message
Posté le 10-03-2018 à 13:18 | #
C'est déjà pas mal. Et comme on sait que :

-O0-O1-Os-O2-O3 (⊆ -Ofast)

Ça te donne déjà quelques pistes : tu peux regarder quelles options de -Os sont ajoutées par rapport à -O1 (l'une d'elles doit introduire le bug), et quelles options de -O3 sont ajoutées par rapport à -O2 (l'une d'elles doit le corriger).

Ensuite, faudra chercher où est le pointeur volatile qui a été oublié ou truc de ce genre.
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1243 Défis: 54 Message
Posté le 10-03-2018 à 14:48 | #
Le truc c'est que les inclusions ne sont pas aussi propres que ça…
Typiquement, je viens de trouver que -O2 -finline-functions (-finline-functions est une des options ajoutées par -O3 par rapport à -O2) règle le problème des couleurs, là où avec juste -O2 ça ne fonctionne pas. Cependant l'option -finline-functions est aussi ajoutée par -Os, et avec -Os les couleurs ne fonctionnent pas. J'ai l'impression que c'est plus des combinaisons d'option qui rentrent en jeu…
LephenixnoirHors ligneAdministrateurPoints: 24574 Défis: 170 Message
Posté le 10-03-2018 à 14:55 | #
Cependant l'option -finline-functions est aussi ajoutée par -Os, et avec -Os les couleurs ne fonctionnent pas.

Le coup des combinaisons, c'est possible, mais là j'ai quand même un doute. Dans mon manuel :

-Os: Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.

-Os disables the following optimization flags: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-algorithm=stc
-freorder-blocks-and-partition -fprefetch-loop-arrays

Donc à mon avis pas de -finline-functions dans -Os. Je me trompe quelque part ?

Edit : Ça m'étonnerait aussi beaucoup sur le principe que cette fonction soit activée avec -Os, pour des raisons évidentes.
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1243 Défis: 54 Message
Posté le 10-03-2018 à 14:59 | #
J'ai aussi lu ça, mais :

sh3eb-elf-gcc -O2 -Q --help=optimizers | grep finline-functions
  -finline-functions                    [disabled]
  -finline-functions-called-once        [enabled]
sh3eb-elf-gcc -Os -Q --help=optimizers | grep finline-functions
  -finline-functions                    [enabled]
  -finline-functions-called-once        [enabled]


Et de plus, ajouter -finline-functions à -Os ne change pas la taille de l'exécutable produit, pas plus qu'il ne règle le problème des couleurs… Donc je tends à penser que l'option est bien ajoutée par -Os
LephenixnoirHors ligneAdministrateurPoints: 24574 Défis: 170 Message
Posté le 10-03-2018 à 15:07 | #
Hmm... j'ai fait un diff entre les options de -O2 et celles de -O3, l'inlining me paraît être le genre de truc à faire foirer le programme.

Visiblement le plus efficace est encore de regarder dans le code. Tu m'as dit que si tu observais la valeur de la couleur au cours des différents appels de fonctions, comme par magie elle se « fixait » et elle arrivait entière. C'est d'ailleurs ce en quoi consiste ton fix, il me semble.

Tu as regardé à partir de quel appel le fix fonctionne ? (En gros, à quel endroit la valeur est-elle perdue si on ne l'observe pas ?) Ça m'étonnerait que le fix marche juste après que la valeur ait été lue depuis la mémoire, si ?
LephenixnoirHors ligneAdministrateurPoints: 24574 Défis: 170 Message
Posté le 08-04-2018 à 16:24 | # | Fichier joint
Bon, en m'appuyant sur les recherches de Nemhardy, j'ai sorti deux-trois vers du code de PLL et j'ai réussi à débugger définitivement le machin !

Je joins à ce post une version g3a fonctionnelle de GravityDuck sur Ggraph 90+E. Je mets aussi les sources dans le suivant.

Le système de chargement de bitmaps pas particulièrement futé était à l'origine du bug. Si vous avez un G90, n'hésitez pas à tester pour nous confirmer si ça marche

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8 | Suivante

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 164 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