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

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [C/gint] SuperCasioBros v0.5
Milang Hors ligne Membre Points: 479 Défis: 2 Message

[C/gint] SuperCasioBros v0.5

Posté le 24/11/2019 17:47

Bonjour à tous
Voici mon nouveau projet de programmation : "Super Casio Bros"

Présentation
Cet addin est un remake de Super Mario Bros. pour les calculatrices monochromes. J'ai commencé à créer ce jeu en raison l'absence de ce titre mythique dans la liste des programmes et le voici, il est encore en beta, mais plus des trois quarts des mécaniques de base sont présentes.
Graphismes
   95%

Moteur de jeu
   80%

Fonctionnalités annexes
   60%

Level design
   4%


Timeline
Voici ci-joint des images et des explications concernant l'avancement du projet. N'hésitez pas a faire des remarques !
RdP 169
Cliquez pour recouvrir

RdP 169 (commentaires)
Cliquez pour recouvrir
Ici j'ai ajouté le fond des niveaux, la texture de la roche, et la possibilité de mettre en pause le jeu (mais ça vous ne le voyez pas )

image du 30 novembre 2019
Cliquez pour recouvrir

Ajout des compteurs(pièces, score, vies, temps) fonctionnels.

Image du 4 décembre 2019
Cliquez pour recouvrir
Ajout des goombas, cadeaux et des briques fonctionnelles.

Image du 12 janvier 2020
Cliquer pour enrouler
Image du 12 janvier 2020. (RdP 173)

J'ai également affiné les spécifications techniques :
Le jeu devrait comprendre 5 mondes, dont 4 de 8 niveaux et un de 5 niveaux. Il y aura un système de sauvegarde, et les mondes se débloqueront un par un : Pour déverrouiller le monde suivant il faudra réussir à finir le monde d'une traite. En plus de ce mode, vous pourrez explorer indépendamment chaque niveau afin de les "travailler" pour ensuite déverrouiller le monde suivant.


Image du 15/02/2020 (J'utilise l'émulateur, c'est plus propre maintenant non ? )

+Changements mineurs dans la version temps réel :
scrolling de la caméra plus fluide,
ajout des plateformes a mouvement horizontal
correction du bug du "wall jump" découvert par Kikoodx (le grand mario pouvait grimper les murs)

Tester la bêta du jeu
N'hésitez pas à tester la bêta pour contribuer à l'avancement du gameplay Voici les différentes versions disponibles
versions fixées (la dernière de préférence)
version temps réel (repo git), mais cette version peut être instable

Crédits
Le script de conversion de niveaux (image->code) est écrit en python
Le moteur de jeu est codé en C sous atom et est compilé avec gcc
Les graphismes ont été réalisés sous gimp.

Merci à Lephenixnoir pour le travail énorme fait sur le fxsdk et gint
Merci également à GoldenKoble pour une partie des graphismes.


Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 30/11/2019 14:47 | # | Fichier joint


Merci

Je trouve le déplacement assez clair visuellement. je pense que c'est lié a trois facteurs :
les graphismes sont allez légers visuellement
le fond d'écran qui ne bouge pas par rapport à la map.
enfin, comme sur nes, la camera ne recule jamais, donc il n'y a pas d'ambiguïté

Pour limiter la fatigue visuelle, lorsque mario se deplace, le rafraîchissement est de 20 fps et il avance de deux pixels par frame. Etant donné la rémanence de l'écran, je trouve que c'est le juste milieu pour jouer.

Et d'ici peu je vais mettre un g1a disponible pour pouvoir faire explorer et tester le moteur physique et le rendre plus proche du jeu si besoin.

Ajouté le 30/11/2019 à 14:49 :
Enfin, je dois ajouter que l'encodage d'un niveau est actuellement hyper simple. Ça veut dire que dans le futur, si gint integre une gestion des fichiers meilleure que casio, je ne vois pas pourquoi je ne pourrais pas faire un éditeur de niveaux
Lephenixnoir En ligne Administrateur Points: 19811 Défis: 142 Message

Citer : Posté le 30/11/2019 16:39 | #


Pour limiter la fatigue visuelle, lorsque mario se deplace, le rafraîchissement est de 20 fps et il avance de deux pixels par frame. Etant donné la rémanence de l'écran, je trouve que c'est le juste milieu pour jouer.

Oooh mais j'y avais jamais pensé ça. Réduire le framerate pour limiter l'effet de la rémanence. Habile :o

Milang a écrit :
Enfin, je dois ajouter que l'encodage d'un niveau est actuellement hyper simple. Ça veut dire que dans le futur, si gint integre une gestion des fichiers meilleure que casio, je ne vois pas pourquoi je ne pourrais pas faire un éditeur de niveaux

Ah, intéressant. Si ça existe ce serait un FS en RAM qui est flushé dans Bfile à la fin. À étudier.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 03/12/2019 20:57 | # | Fichier joint


Voici du nouveau !
J'ai affiné les commandes de déplacements, et les goombas sont implémentés
Pour ça, les images ne suffisent pas, donc au lieu de mettre des photos floues, je vais mettre l'addin en test (cf fichierjoint)

En soit il n'y a pas de niveau, mais vous pouvez d'ores et déjà tester le moteur physique, et même éliminer le goomba. (Enfin vu là où il est, ce n'est pas forcément si facile)

N'hésitez pas à poster vos retours, afin de savoir si je dois améliorer le moteur physique, si le framerate est suffisant etc...

Ajouté le 03/12/2019 à 20:58 :
Je rapelle que grâce à gint, l'addin est compatible sur tous les modèles monochromes pouvant recevoir un addin

Ajouté le 04/12/2019 à 19:12 :

J'ai ajouté les goombas, et les cadeaux sont fonctionnels ! (Ils ne donnent que des pièces pour le moment)
Petit détail, quand on cogne un cadeau ou une brique avec le petit mario, on voit le bloc encaisser le choc
Et en plus on rebondit sur les goombas, donc pour l'instant le jeu est très fidèle à l'original

Le g1a est dans le topic principal, n'hésitez pas à le tester
Critor Hors ligne Administrateur Points: 2107 Défis: 18 Message

Citer : Posté le 04/12/2019 22:27 | #


C'est une évidence, je sais, mais j'éprouve une envie irrépressible de le dire... c'est tellement beau !
Hâte de pouvoir y jouer et annoncer ça à la Terre entière, en espérant que le gameplay soit à la hauteur de ce que je vois.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 12/01/2020 14:31 | #


J'ai commencé à coder un éditeur de niveaux en python pour que je puisse dessiner les niveaux plus rapidement :
Je fais un pixel art avec un code couleur, puis je l'envoie dans ce script qui génère le code source du niveau. Comme ça je peux faire du level design sur n'importe quel support, y compris en philo , et le rendu est plus visuel. Ceci devrait accélérer significativement la phase laborieuse de codage des niveaux

Mais comme je ne sais (presque) pas coder en python, j'ai la question suivante :
Est-ce que ce code est propre ? Evidemment que non , mais est-ce qu'il y a des choses qui paraissent aberrantes pour quelqu'un maîtrisant ce langage ? (histoire de ne pas partir sur de mauvaises bases)
from PIL import Image

# Palette de couleurs (incomplète)
pierre = (0, 0, 0, 255)
brique = (255, 0, 0, 255)
empty = (255, 255, 255, 255)

# Load image
filename = input("File name ?\n> ")
img = Image.open(filename)
print("Loaded", filename, "(size =", img.size, ")")

code = "w_current_x = " + str(img.size[0]) + ";\nw_current_y = " + str(img.size[1]) + ";\nworld_t lvl[]=\n{"
# largeur=img.size[0]
# hauteur=img.size[1]

# Balayage des pixels : passe pour dessiner les murs & éléments en dur comme les pièces
pixels = img.load()
for x in range(0,img.size[0]):
    code += "\n    "
    for i in range(0, img.size[1]):
        y=img.size[1]-i-1
        if pixels[x,y] == brique:
            code += "{BRICK,0}, "
        elif pixels[x,y] == pierre:
            hexa="0x"

            left=1
            right=1

            if x != 0:
                left = (pixels[x-1,y] == pierre)
            if x != img.size[0]-1:
                right = (pixels[x+1,y] == pierre)

            sx=0
            if left and right:
                sx=1
            elif left and right==0:
                sx=2
            elif left==0 and right:
                sx=0
            hexa+= str(sx)


            up=0 # vide par defaut
            down=1

            if y != 0:
                up = (pixels[x,y-1] == pierre)
            if y != img.size[1]-1:
                down = (pixels[x,y+1] == pierre)

            sy=0
            if up and down:
                sy=1
            elif up and down==0:
                sy=1
            elif up==0 and down:
                sy=0
            hexa+= str(sy)


            code += "{EARTH," + hexa + "}, "
        elif pixels[x,y]==empty:
            code += "{0,0}, "
        else:
            code += "{0,'?'}, " #tile non reconnue
            #code += str(pixels[x,y])

print (code)
# à remplacer par l'écriture dans un fichier

Kikoodx En ligne Labélisateur Points: 2503 Défis: 11 Message

Citer : Posté le 12/01/2020 14:35 | #


Tu peux tester si un nombre est non nul en le mettant en condition seul.
x != 0 est équivalent à x dans une condition.
J'utiliserai un format() pour l'écriture du code.

//ton code
hexa+= str(sy)
code += "{EARTH," + hexa + "}, "

//avec format
code += f"{{EATH, {str(sy)}}},"
//ou
code += "{{EATH, {}}},".format(str(sy))

Je devrais dormir, et pourtant me voilà.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 12/01/2020 14:46 | #


Le problème, c'est que hexa est déjà une chaîne de caractères avec un autre contenu dedans.
Mais en tout cas l'idée est bonne, je vais me pencher sur format, surtout que ça a l'air d'être la norme.

Merci de tes conseils
Lephenixnoir En ligne Administrateur Points: 19811 Défis: 142 Message

Citer : Posté le 12/01/2020 14:48 | #


Pas délirant ! Il y a des trucs bizarres comme ça :

             sy=0
            if up and down:
                sy=1
            elif up and down==0:
                sy=1
            elif up==0 and down:
                sy=0
            hexa+= str(sy)

Qui peuvent devenir plutôt comme ça :

sy = (up and down) or (up and down==0)

Au passage la condition est vraiment bizarre puisque down est le contraire de down==0 donc les deux premières clauses sont vraiment les mêmes. En fait ça fait sy = bool(up) ce code là.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 12/01/2020 15:11 | #


Effectivement, je n'avais pas vu que mon code était aussi stupide

Ajouté le 12/01/2020 à 15:14 :
Par contre, avec sy = bool(up), sy prend les valeurs True et False au lieu de 0 et 1
Lephenixnoir En ligne Administrateur Points: 19811 Défis: 142 Message

Citer : Posté le 12/01/2020 15:15 | #


Certes mais ce serait pareil une fois converti en entier. Tu peux reconvertir en int derrière où jouer du sy = 1 if up else 0.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 12/01/2020 15:16 | #


Finalement, j'ai fait sy = int((up and down) or (up and down==0)) et ça marche à merveille

Ajouté le 12/01/2020 à 15:18 :
On s'est croisés
je fais sy = int(bool(up)) du coup

Ajouté le 13/01/2020 à 12:35 :
Allez, je fais une update

Depuis la RdP d'hier, j'ai apporté quelques changements :
Je trouvais, avec kikoodx, que le déplacement de la camera assez brutal, surtout en vertical.

Depuis, j'ai recorrigé ça, donc maintenant, la caméra a volontairement un retard vertical, ce qui fonne un aspect plus fluide, et on peut revenir en arrière.

Du côté du python, le script gère actuellement la conversion
briques, pierres, beton, pieces, boites
tuyaux (pas encore actifs)
goombas
Lephenixnoir En ligne Administrateur Points: 19811 Défis: 142 Message

Citer : Posté le 13/01/2020 12:47 | #


Est-ce que le mouvement de la caméra passe bien même avec la rémanence de l'écran ?
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 13/01/2020 12:49 | #


Honnêtement, je n'ai pas eu de problème
Dans ces mouvements de toute façon le taux de rafraîchissement est de 20fps, et je l'ai fait tester ce matin en cours, cela ne posait pas problème
Kikoodx En ligne Labélisateur Points: 2503 Défis: 11 Message

Citer : Posté le 13/01/2020 12:49 | #


Milang a écrit :
Depuis la RdP d'hier, j'ai apporté quelques changements :
Je trouvais, avec KikooDX, que le déplacement de la camera assez brutal, surtout en vertical.

Depuis, j'ai recorrigé ça, donc maintenant, la caméra a volontairement un retard vertical, ce qui fonne un aspect plus fluide, et on peut revenir en arrière.

Du côté du python, le script gère actuellement la conversion
briques, pierres, beton, pieces, boites
tuyaux (pas encore actifs)
goombas

Tu as build ? Je voudrai bien retester.
Et pour l'éditeur, tu es en train de dire qu'on peut créer son propre niveau ? J'aimerai faire des tests, j'essaierai d'installer gint pour monochromes (je l'avais skip).

Ajouté le 13/01/2020 à 12:51 :
En course (Alpha) le jeu scrolle bien trop vite les objets sont quasiment invisibles à cause de l'écran.
Je devrais dormir, et pourtant me voilà.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 13/01/2020 18:14 | # | Fichier joint


Kikoodx a écrit :
Milang a écrit :
Depuis la RdP d'hier, j'ai apporté quelques changements :
Je trouvais, avec KikooDX, que le déplacement de la camera assez brutal, surtout en vertical.

Depuis, j'ai recorrigé ça, donc maintenant, la caméra a volontairement un retard vertical, ce qui fonne un aspect plus fluide, et on peut revenir en arrière.

Du côté du python, le script gère actuellement la conversion
briques, pierres, beton, pieces, boites
tuyaux (pas encore actifs)
goombas

Tu as build ? Je voudrai bien retester.
Et pour l'éditeur, tu es en train de dire qu'on peut créer son propre niveau ?

Entre autres oui, avec ca il serait possible de créer un Mario maker
Cependant il y a encore une chose que je ne vois pas comment faire avec mon script, c'est les tuyaux avec des teleporteurs Il faudra faire cette partie à la main.

Oui, j'ai fait un build, c'est la version actuelle du gitea

Enfin, je ne vois vraiment pas comment empêcher la rémanence plus que ca, je n'ose pas descendre en dessous de 20fps
Kikoodx En ligne Labélisateur Points: 2503 Défis: 11 Message

Citer : Posté le 13/01/2020 18:29 | #


Milang a écrit :
Entre autres oui, avec ca il serait possible de créer un Mario maker
Cependant il y a encore une chose que je ne vois pas comment faire avec mon script, c'est les tuyaux avec des teleporteurs Il faudra faire cette partie à la main.

Oui, j'ai fait un build, c'est la version actuelle du gitea

Enfin, je ne vois vraiment pas comment empêcher la rémanence plus que ca, je n'ose pas descendre en dessous de 20fps

Si ton programme charge les niveaux depuis un fichier, je peux te faire un éditeur simple pour PC qui charge/sauvegarde le niveau. Mais ça ne serait pas avant que le jeu ne soit sorti, ça reste un projet conséquent.
Pour les tuyaux, un moyen simple de s'en sortir serait de les assigner par pair correspondant à leur code couleur.
Exemple : tous les tuyaux sont R63G63 avec un B variable qui correspond à leur "pair".
Je devrais dormir, et pourtant me voilà.
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 13/01/2020 18:39 | # | Fichier joint


Actuellement, mon script python convertit des images qui ressemblent à ça :
Mais pour l'instant je ne fais que convertir en C, ce qui donne un code à copier dans le programme (oui, je sais ce n'est pas pratique )
Ce code généré est vraiment basique : https://gitea.planet-casio.com/Milang/supercasiobros/src/branch/master/levelconverter/1-2.png.c et il n'y a qu'un pas à générer directement un tableau de données binaires.
Après, si je mets ces informations codées dans le bon ordre, cela peut donner lieu à un format de fichier que je documenterai dans ce cas et ce sera facile de coder les niveaux depuis un éditeur PC, voire ? un éditeur oncalc

Pour les tuyaux, tu peux regarder mon script, c'est le programme qui fait la différence lui même : on ne lui donne que deux couleurs : un bout de tuyau ou un milieu de tuyau et il fait tout le job https://gitea.planet-casio.com/Milang/supercasiobros/src/branch/master/levelconverter/levelconv.py

Ajouté le 13/01/2020 à 20:32 :
J'ai ajouté la possibilité de choisir le niveau. Il y a un menu dédié pour ça :


Du coup, maintenant que c'est fait, le système de sauvegarde ne devrait pas tarder à venir

Ajouté le 28/01/2020 à 14:43 :
J'ai un peu avancé le level design !
Il y a donc maintenant deux niveaux complètement jouables (ou presque, il manque seulement les fragments d'étoile et éventuellement un ou deux ennemis)

J'ai vu que kikoodx avait proposé le jeu pour être testé dans le cadre du Second week-end de test «Confiance et confort», donc pour ceux qui testeront le jeu, voici les informations suivantes :
À priori au moins ces deux niveaux seront jouables, je verrai si je peux en rajouter entretemps
Si vous n'osez pas aller chercher sur master, vous pourrez aller directement télécharger une archive de la dernière version stable que je mettrai d'ici ce Week-end
Lephenixnoir En ligne Administrateur Points: 19811 Défis: 142 Message

Citer : Posté le 28/01/2020 15:01 | #


Merci ! J'ai ajouté ça au topic de l'événement (et corrigé l'énorme écorchage du nom de ton projet ).
Milang Hors ligne Membre Points: 479 Défis: 2 Message

Citer : Posté le 28/01/2020 18:25 | #


Et voici le nouveau splashscreen


Je m'attaque aux koopas rouges et aux plantes piranha
Shadow15510 Hors ligne Administrateur Points: 4695 Défis: 16 Message

Citer : Posté le 28/01/2020 18:26 | #


Bon courage pour le rouge

Ça en jette un max; j'ai hâte d'essayer !!
"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 En ligne Administrateur Points: 19811 Défis: 142 Message

Citer : Posté le 28/01/2020 18:26 | #


Nayce ! Les koopas rouges, hmm ?

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 91 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