Posté le 28/06/2020 22:33
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 247 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
Citer : Posté le 28/06/2020 22:35 | #
Bonne chance Tituya !
(ceci est un message du Comité de Soutien envers les développeurs courageux qui se lancent dans des projets sympas mais pas si simples. Attention le comité de soutien est totalement incompétent en programmation, sauf un peu en Basic mais c'est tout
Citer : Posté le 28/06/2020 22:38 | #
Autre suggestions rapide : pourquoi deux touches différentes pour changer la gravité ? Si une seule est acceptable compte tenu du gameplay, c'est probablement plus dynamique puisque ça évite au joueur de bouger son doigt sans cesse.
Citer : Posté le 28/06/2020 22:41 | # |
Fichier joint
C'est prévu mais pas encore implémenté dans le jeu
Pour l'instant j'ai fais ça pour mes tests, c'est vraiment le début du projet (ce qui explique les valeurs de tests à l'écran).
Ajouté le 28/06/2020 à 23:21 :
Bon du coup je commence avec mes questions : Le timer
Pour le moment je souhaite faire une version similaire à ce que KikooDX a fait. Cela me semble plus simple pour le moment. Si je ne suis pas satisfait après ça, je ferai l'autre version que Lephe' a énoncé dans un commentaire de la RdP.
Si j'ai bien compris il faut que j'actualise mon écran en fonction des FPS. C'est logique ça. Mais par contre je n'ai pas bien compris le principe du callback.
Il faut donc que je lance ce script en fonction des FPS.
draw_player(player_x,player_y);
dupdate();
Pour ça il faut donc que je déclare le timer avant, mais je ne sais absolument pas quoi mettre pour le délai et le callback... J'ai bien lu le header concernant les timers mais sans voir une application concrète je ne vois pas vraiment comment faire. J'ai essayé de comprendre le code de JTMM mais vu qu'il s'agit d'une autre version de gint, ça ne correspond pas vraiment.
Bref : Je sais pas utiliser les timers donc je vous demande comment faire.
Après ça je peux me débrouiller pour la vitesse du joueur. C'est juste de la physique ça
Merci !
[EDIT]
-J'ai rajouté la touche unique (SHIFT) pour changer la gravité, et je n'autorise cela que lorsque le joueur est sur un bloc solide.
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 29/06/2020 11:09 | #
Salut, je vais répondre au message de Lephé sur ce topic.
Il y a différents niveaux de ça. D'un côté tu as la méthode de KikooDX où il fixe juste 30 FPS (je crois) et applique une gravité dont l'unité est en gros en m·frame⁻². Je suis pas d'accord que "c'est le mieux dans cette situation" (encore moins de juste appliquer une vitesse constante) mais ça marche.
L'autre côté c'est de mesurer vraiment le temps qui s'écoule entre deux frames (ou de le fixer, par exemple à 1/30s) et ensuite de calculer l'évolution de la position/vitesse/etc des objets en fonction du temps écoulé et de leur vitesse/accélération/etc.
Avoir une vraie simulation est un peu plus cher à calculer, mais sur la Graph 90+E tu ne le sentiras même pas parce que c'est le dessin qui pompe tout le temps CPU. Tu peux pas contrôler non plus les choses au pixel près. Mais le rendu est beaucoup plus naturel.
60 UPS et 30 FPS. Ce n'est pas le mieux mais je tiens beaucoup à avoir des timings/vitesses consistantes. Pour le prochain jeu ce sera mieux fait, j'ai eu des problèmes avec ça.
La seconde méthode proposée a quelques avantages, comme le slowmo qui peut être intégré très facilement. Si le temps est fixe, c'est juste équivalent à ce que j'avais fait pour JTMM.
Je ne pense pas qu'un jeu se doit d'avoir une gravité réaliste, c'est rare que ce soit le cas. (Tiens je peux caser Celeste
Et dans cette situation spécifique, je pense vraiment que rester sur une vitesse constante est le bon choix.
VVVVVV, Gravity Duck et bien d'autres jeux ont une vitesse constante et à raison. Le ressenti est plus "naturel" que la méthode classique.
Sidenote : évitez de considérer que JTMM est mon standard en terme de platformer. J'ai fait énormément d'erreurs sur ce projet sur tous les plans (notamment le système de saut qui est hyper mal foutu).
Citer : Posté le 29/06/2020 11:19 | #
Donc un timer ça sert à exécuter du code de façon périodique. Le code qu'on exécute dans un timer est appelé "callback" ou "handler". Le but d'un callback c'est toujours d'être le plus court possible. Ici, on peut juste s'en servir pour compter chaque fois que 1/30s s'écoule (par exemple).
L'idée c'est d'avoir une variable par exemple frame_elapsed qui te dit quand 1/30s s'est écoulé. Toutes les 1/30s on met cette variable à 1 et quand on dessine un frame on la met à 0. Si au moment de dessiner un frame elle vaut toujours 0 on attend qu'elle vale 1.
Ça ressemble à ça.
/* La valeur va changer dans le callback, ce que le compilateur ne sait pas, donc
on met "volatile" pour lui dire "attention la valeur change dans ton dos" */
volatile int frame_elapsed = 1;
/* Du code pour lancer le timer ... */
while(game_loop)
{
/* On attend que la variable passe à 1 */
while(frame_elasped == 0) sleep();
read_inputs();
do_physics();
draw_frame();
dupdate();
frame_elapsed = 0;
}
/* Du code pour arrêter le timer... */
Et donc ensuite la question c'est comment on fait marcher un timer. Ici c'est pas bien difficile : on va écrire une fonction qui prend en argument l'adresse de la variable et la met à 1. Ce sera notre callback. Un callback de timer doit renvoyer TIMER_STOP ou TIMER_CONTINUE pour décider si le timer doit continuer de tourner. Ici on veut que le timer continue jusqu'à la fin du programme donc on renvoie TIMER_CONTINUE à chaque fois.
int callback(volatile int *frame_elasped)
{
*frame_elapsed = 1;
return TIMER_CONTINUE;
}
Ensuite, au début de la fonction principale, tu lances le timer. La fonction timer_setup() te demande quel timer tu veux mais ici on s'en fout un peu donc on va la laisser choisir. Le délai à indiquer est en µs, je vais mettre 33'000 pour avoir environ 30 FPS. Ensuite il y a le callback à appeler et son argument s'il y en a un (ici il y en a un).
timer_start(t);
La fonction renvoie un entier qui représente le timer qui t'as été attribué. Cet entier permet de manipuler le timer, ici je m'en sers pour le démarrer immédiatement. Tu ne dois surtout pas perdre l'entier sinon tu perds le contrôle du timer !
Bien sûr une fois que la boucle du jeu s'arrête il faut couper le timer puisqu'il ne se coupe jamais tout seul (il ne renvoie jamais TIMER_STOP). Et donc à la fin on appelle timer_stop().
/* Et là le timer est arrêté et libéré donc tu n'as plus besoin de l'entier t */
Voilà voilà pour une intro rapide aux timers.
Citer : Posté le 02/07/2020 01:11 | # |
Fichier joint
J'étais en train d'essayer mais visiblement ça ne semble pas marcher ici. J'obtiens une erreur :
incompatible type for argument 3 of 'timer_setup expected 'timer_callback_t' {aka 'union <anonymous>'} but argument is of type 'int (*)(volatile int *)'
Pourtant il ne me semble pas avoir fais d'erreur en prenant exemple sur ce que tu as marqué plus haut, voila mon script :
#include <gint/timer.h>
int callback(volatile int *frame_elapsed)
{
*frame_elapsed = 1;
return TIMER_CONTINUE;
}
int main(void)
{
volatile int frame_elapsed = 1;
int timer = timer_setup(TIMER_ANY, 100000/FPS, callback, &frame_elapsed);
timer_start(timer);
while(1)
{
while(!frame_elapsed) sleep();
frame_elapsed = 0;
}
}
timer_stop(timer);
return 0;
J'ai par ailleurs corrigé pas mal de chose notamment les collisions grâce à KikooDX ainsi que rajouté la mort dans le jeu. J'ai aussi rajouté un vrai niveau mettant bien en profit la physique actuelle. Si tu veux tester le moteur, le gitea est à jour
merci !
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 02/07/2020 08:54 | #
Ah oui, c'est exact. timer_callback_t est une liste de tous les prototypes autorisés pour le callback et pour une raison obscure j'avais oublié de mettre les pointeurs sur int dans les arguments autorisés. Désolé pour ça !
J'ai poussé un commit sur gint qui les autorise, AST3_C compile maintenant.
Attention, tu as poussé build-cg sur le dépôt ! Supprime-le au plus vite et mets-le entièrement dans ton .gitignore !
Citer : Posté le 02/07/2020 12:31 | # |
Fichier joint
OK très bien merci ! J'irais voir ça tout à l'heure.
J'ai remarqué que j'avais poussé build-cg. J'ai corrigé ça il y a 2 jours maintenant
Par contre si on regarde les anciens commit, il est présent
Ajouté le 02/07/2020 à 19:00 :
Bon, je sais pas vraiment si c'est comme ça que tu le pensais mais j'ai rajouté une pseudo gravité avec une accélération constante mais n'ayant aucun lien avec nos mesures physiques.
Cependant je n'ai pas utilisé la seconde loi de Newton pour faire ça en fonction du temps. Et à vrai dire je ne définie même pas une unité, mon code ressemble simplement à ça :
int main(void)
{
float vspd = 1.0;
if(!collide_solid(player_x, player_y+(ACCELERATION+vspd), level, gravity))
{
vspd+=ACCELERATION;
player_y+=vspd;
}
else if(!collide_solid(player_x, player_y+1, level, gravity))
{
vspd = 1;
player_y+=1;
}
}
Ça reste en effet plus agréable de jouer comme ça. Mais je doute fortement que c'est ce que tu voulais que je fasse
Au passage, j'ai bien réussi à faire fonctionner le timer
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 02/07/2020 19:32 | #
Oui voilà, c'est l'idée pour une simulation avec accélération. Ce que je proposais c'était d'introduire un delta temps dans le paquet. Si tu m'excuses les notations un peu plus à la physicienne, ça ressemble à ça :
float y, vy=0, ay=-9.81;
void udpate(float dt)
{
vy += ay * dt;
y += vy * dt;
if(collide_solid(player_x, player_y, level, gravity))
{
/* Appliquer une force dans l'autre sens ou annuler le mouvement */
}
}
L'avantage c'est que si tu modifies le nombre de FPS normal tu peux modifier le dt correspondant et le jeu ira toujours aussi vite. Avec ton exemple si t'augmente les FPS le jeu va plus vite.
Citer : Posté le 02/07/2020 19:46 | #
En effet j'ai remarqué qu'avec un FPS plus élevé le jeu tournait plus vite.
En soit ce n'est pas si dérangeant compte tenu du FPS constant pour la sortie du jeu, je peux très bien continuer à utiliser cette méthode si je définis dès maintenant un FPS qui ne changera plus avec le temps
Mais bon, ça c'est un peu faignant de faire ça comme ça. Je vais me pencher sur ta méthode plus orthodoxe. En attendant j'ai un petit bug à régler à cause de tout ça !
Ajouté le 06/08/2020 à 14:54 :
Mise à jour du sujet incluant les choses en cours.
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 13/08/2020 20:20 | #
Est-ce que tu as un objectif un peu plus détaillé niveau gameplay ? Est-ce que tu envisages d'ajouter des mécanique ? Une idée du nombre de niveaux à planifier ?
Citer : Posté le 13/08/2020 22:52 | # |
Fichier joint
Le développement continue petit à petit, je vais répondre aux questions sous cette forme :
- Un objectif détaillé niveau gameplay ?
Oui et non, je souhaite avant tout rester sur un gameplay simple avec assez peu d'éléments.
Mais je ne veux pas que les niveaux soient répétitifs, et c'est ça qui me pose le plus de problème en ce moment.
Je ne veux pas d'un jeu ennuyant sur le long terme. C'est pour ça que j'oriente de plus en plus le jeu vers du speedrunning
Est-ce que tu envisages d'ajouter des mécanique ?
Hehe, c'est ce que je suis en train de faire actuellement ! Je suis un peu à la recherche d'idées en ce moment.
Je pense qu'il faut que j'ajoute des éléments bougeant, ça apporterai de la vie dans les niveaux.
Mais bon, niveau speedrunning, c'est encore un élément qu'il faut que je gère correctement...
Pour le moment, je possède seulement 6 éléments de gameplay. Mais ça me permet quand même de faire des niveaux intéressants ! Et hop, transition vers la prochaine question
Une idée du nombre de niveaux à planifier ?
Ce qui est pratique, c'est que mon éditeur de niveau est assez pratique et facile pour créer des niveaux rapidement. Je pense donc partir vers 15 niveaux pour le premier pack de niveau
Voilà voilà
Ajouté le 15/08/2020 à 02:20 :
C'est bon, j'ai fini de faire les 10 premiers niveaux !
Entre temps, j'ai pu améliorer le système des temps, maintenant plus précis, ça réduit une marge d'erreur beaucoup trop importante dans les versions précédentes.
En effet à cause d'un modulo, les temps passaient d'un 7.69 à 8.00 par exemple. Ce qui n'est pas acceptable pour un jeu rapide jouant sur le chrono !
En tout cas c'est corrigé
Pour que vous puissiez savoir, les médailles sont calculées en fonction de mon temps qui sert de référence.
or : 20% de + que mon temps
argent : 50%
bronze : 100%
Les différents temps nécessaires sont bien évidemment renseignés dans le jeu.
Je vous invite à essayer l'éditeur de niveau ! Il fonctionne en utilisant python et pygame, vous ne pouvez pas compiler le jeu si vous n'avez pas gint.
Cependant, si vous voulez quand même m'envoyer vos niveaux, envoyez moi seulement le fichier [id_niveau].lvl situé dans editor/levels
Les instructions de l'éditeur sont dans le README dans le fichier editor lui même
Sous windows, le script ne fonctionne peut être pas, c'est possible qu'il ne trouve pas les images correspondantes. Si c'est le cas, enlevez simplement les editor/ du script AST3generator.py
Sous linux, un simple ./editor.sh dans le dossier principal du jeu devrai fonctionner.
Ajouté le 27/08/2020 à 11:56 :
Salut !
Au cours de ces 10 derniers jours, je n'ai pas arrêté de travailler sur AST3. Je vais résumer ce que j'ai réussi à faire.
- Sauvegarde du jeu ! Vous pouvez quitter le jeu et revenir plus tard, vos meilleurs temps sont sauvegardés !
- mise à jour des affichages, j'ai rajouté certaines textures pour embellir le jeu
- Le menu de sélection des niveaux est à présent complet et vous indique votre médaille et temps sur le niveau sélectionné.
- Un nouveau bloc ! Qui peut s'apparenter à une "one way door". Et bien sûr il a son niveau correspondant.
- Je suis à 13 niveaux sur les 15 promis
- Corrections de bugs sur divers trucs. Genre un problème de clipping ou un autre dans un cas précis.
Vu l'avancée du jeu, je compte le publier TRÈS bientôt. Avant la rentrée si possible
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 28/08/2020 17:38 | # |
Fichier joint
Cela fait à présent 2 mois que ce projet a été commencé en plein cœur de l'été. Par la fin de celui ci (et accessoirement des vacances scolaires), quoi de mieux que de finir cette adaptation ?
C'est ce que je vous annonce aujourd'hui !
2 mois de production en partant avec aucune connaissance en C, je ne pensais même pas venir au bout de ce projet... On va dire que ça avait mal commencé dans la première des versions publiée pour la RDP 185, il y avait pas mal de boulot à faire !
Et depuis, le projet a évolué, vous avez pu le voir au cours des différentes RDPs de cet été, et même de l'évolution de ce topic (pour ceux qui l'ont lu
On va dire que je suis passé de ça :
à ça :
en 2 mois et plein de changements !
J'ai rejoué il y a pas longtemps aux premières versions. Je remercie Lephé pour avoir proposé un moteur de gravité plus réaliste, franchement le jeu sans était vraiment injouable et très laid
Enfin bref, je suis vraiment content de ce que j'ai pu produire même si le code est pas très élégant, il s'agit de mon premier projet en C, et je suis content de ce que j'ai pu faire
Je ne peux que vous conseiller de tester gint et la programmation en C, c'est vraiment plaisant de voir la possibilité que les calculatrices nous offrent !
J'annonce donc une date dans ce dernier post ? (des packs de niveaux et/ou de textures à venir peut-être). Et la publication du jeu sera le.......
(bon courage aux autres projets genre Terrario/Evocalc ou même Odyssée
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 28/08/2020 18:00 | #
Terrario is going to take quite a while longer to complete... Well done on finishing AST3 C, it looks great!
Citer : Posté le 28/08/2020 18:03 | #
(bon courage aux autres projets genre Terrario/Evocalc ou même Odyssée
Merci beaucoup ! Ça fait plaisir de voir des projets se terminer, il faudrait que je vois si je ne peux pas adapter le monochrome pack de JTMM pour AST3
Citer : Posté le 28/08/2020 18:18 | # |
Fichier joint
Tu peux sûrement l'adapter, c'est du 16*16 et tu peux déjà faire une preview avec l'éditeur de niveau.
Voilà le jeu : https://www.planet-casio.com/Fr/programmes/programme4100-1-ast3-c-tituya-jeux-add-ins.html
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 13/10/2020 21:53 | #
Coucou,
Personne ne l'a demandé, je l'ai fait™ :
Voici le premier pack de texture d'AST3C !
Il est disponible sur mon dépôt gitea, je rajouterai une image dès que j'en aurais l'occasion.
Il est orienté mignon/sain d'esprit avec des couleurs issues de la palette PICO-8. J'ai retouché un peu l'UI et je suis fier du résultat. Enjoy !
Tituya : Je veux pas te voler des téléchargements alors j'ai temporairement mis le build sur le dépôt, si tu pouvais le mettre sur la page du jeu pour que je puisse uniquement laisser les sources ça serait bien ^^'
Citer : Posté le 13/10/2020 21:54 | #
Comment ?! Tu crées et publies un pack de texture mais y'a pas de screen ?!
Citer : Posté le 13/10/2020 21:56 | #
J'ai pas eu le temps, ma mère a déboulé en même temps et a fait une crise existentielle
Promis juré j'en fait un demain, c'est mignon tout plein vous z'allez voir.
Citer : Posté le 13/10/2020 21:58 | # |
Fichier joint
Oh ! En voila une surprise !
Ça me fait vraiment plaisir, je m'attendais pas à ça, franchement merci beaucoup !
Je suis sous linux, je poste un screen instant
Ajouté le 14/10/2020 à 00:46 :
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C