[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.
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.
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
Citer : Posté le 30/11/2019 16:39 | #
Oooh mais j'y avais jamais pensé ça. Réduire le framerate pour limiter l'effet de la rémanence. Habile :o
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.
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
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.
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)# 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
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.
hexa+= str(sy)
code += "{EARTH," + hexa + "}, "
//avec format
code += f"{{EATH, {str(sy)}}},"
//ou
code += "{{EATH, {}}},".format(str(sy))
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
Citer : Posté le 12/01/2020 14:48 | #
Pas délirant ! Il y a des trucs bizarres comme ça :
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 :
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à.
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
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.
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
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 ?
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
Citer : Posté le 13/01/2020 12:49 | #
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.
Citer : Posté le 13/01/2020 18:14 | # | Fichier joint
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
Citer : Posté le 13/01/2020 18:29 | #
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".
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
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 ).
Citer : Posté le 28/01/2020 18:25 | #
Et voici le nouveau splashscreen
Je m'attaque aux koopas rouges et aux plantes piranha
Citer : Posté le 28/01/2020 18:26 | #
Bon courage pour le rouge
Ça en jette un max; j'ai hâte d'essayer !!
Citer : Posté le 28/01/2020 18:26 | #
Nayce ! Les koopas rouges, hmm ?