Mr ToutLeMonde et la programmation NES...
+13
tetsuro
uran
ichigobankai
lincruste
drfloyd
Sour
philip
Stef
Tryphon
brokestudio
vincent2105
TotOOntHeMooN
upsilandre
17 participants
Page 1 sur 15
Page 1 sur 15 • 1, 2, 3 ... 8 ... 15
Mr ToutLeMonde et la programmation NES...
Moi je trouve ca moche d'avoir une grille sur un jeu de snake, je pensais que c'etait juste pour le développement. par contre c'est vrai qu'avec des tuile tramé (genre checkerboard) tu peux en gros avoir 6 couleurs de serpent (voir 9)
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Après, tramer avec le noir est à éviter quand même.
Et il vaut mieux éviter d'utiliser le vert... C'est une couleur qui se marie mal pour nos yeux.
Et il vaut mieux éviter d'utiliser le vert... C'est une couleur qui se marie mal pour nos yeux.
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18145
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Mr ToutLeMonde et la programmation NES...
bon apres c'est sure que la taille de pixel d'un jeu NES c'est pas la meme que nos ecrans HD donc le tramage aura pas la meme gueuleTotOOntHeMooN a écrit:vincent2105 a écrit:C'est l'idée que j'avais au départ, mais avec 4 serpents, ca devient compliqué de les rendre "différentiables", surtout si on veux conserver un quadrillage. La faute à l'attribute table qui ne nous permet de disposer que de 3 couleurs par zone de 16x16 pixels (sans compter celle commune aux 4 palettes).
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Ca a fait pourtant mouche sur notre Pac-Man CPC !upsilandre a écrit:bon apres c'est sure que la taille de pixel d'un jeu NES c'est pas la meme que nos ecrans HD donc le tramage aura pas la meme gueule
Pour le snake, sans tramage tu peux avoir 3 couleurs pleines pour 3 joueurs. C'est bien vu l'aire de jeu.
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18145
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Mr ToutLeMonde et la programmation NES...
Disont que ca depend surtout si tu joue en emulation sans filtre sur un moniteur (en 1080p ca donne des pixels x4) ou sur une vrai machine et un CRT ou la le tramage passe bien.
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Voilà. Après, quand on est pris dans le jeu ça ne se remarque pas.
Il faut voir ça comme une texture ! ^^
Il faut voir ça comme une texture ! ^^
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18145
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Mr ToutLeMonde et la programmation NES...
oui dans tout les cas d'un point de vue simplement fonctionnel ca marche, on va les differencier.
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Ma foi, la solution du tramage est pas mal. Reste à trouver les couleurs que l'on peut associer parmi celles disponibles dans la palette NES afin d'avoir des contrastes bien tranchés comme sur le post de TotOOntHeMooN
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Sur la même base, 11, 16, 38 devrait bien s'en tirer.
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18145
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Mr ToutLeMonde et la programmation NES...
Bon, j'ai essayé (tile tramée), mais c'était pas la joie :/
Par contre, je vais garder les couleurs $11, $16, et $38 comme me l'a suggéré TotO.
Et je ne garderai en jeu que 4 serpents maxi.
Vraiment pas évident de sortir quelque chose de correct sur NES
Pour l'instant, je ferai avec ça :
Par contre, je vais garder les couleurs $11, $16, et $38 comme me l'a suggéré TotO.
Et je ne garderai en jeu que 4 serpents maxi.
Vraiment pas évident de sortir quelque chose de correct sur NES
Pour l'instant, je ferai avec ça :
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
philip a écrit:Ou alors, s'inspirer de la nature, avec 3 serpents pour une grenouille : un des joueurs dirige la proie
C'est un mécanisme intéressant aussi... merci pour la suggestion
D'ailleurs si vous avez d'autres idées, c'est le moment ! Mieux vaut anticiper.
Et si vous avez des remarques ou avis, idem, parce que j'ai souvent la tête dans le guidon.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Si tu pars sur un mode de jeu avec la proie comme suggéré, elle pourrait récupérer des items à la mario kart,et s'en servir pour essayer de ralentir/perturber les serpents qui les touches .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Ah oui, c'est pas mal ça ! La proie pourrait déposer des obstacles fixes, persistants ou non...
Le mode de jeu avec la proie serait un mode supplémentaire.
Par contre, je le vois bien comme un mode solo, dans lequel on est la proie et le score monte tant qu'on survit. Avec des bonus quand on élimine un serpent. Coté code, ca semble intéressant de programmer les serpents.
Sinon, j'ai ma routine d'effacement de serpent lorsqu'il meurt. Je dois faire un peu de nettoyage, et je pourrai attaquer le mode multi-serpents
Le mode de jeu avec la proie serait un mode supplémentaire.
Par contre, je le vois bien comme un mode solo, dans lequel on est la proie et le score monte tant qu'on survit. Avec des bonus quand on élimine un serpent. Coté code, ca semble intéressant de programmer les serpents.
Sinon, j'ai ma routine d'effacement de serpent lorsqu'il meurt. Je dois faire un peu de nettoyage, et je pourrai attaquer le mode multi-serpents
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Aujourd'hui, j'ai reçu le multitap, du coup ça m'a motivé un peu, et c'est bien parti. On peut contrôler chacun des 4 serpents (avec un seul pad pour le moment). J'aurais pu optimiser certaines routines, mais j'ai préféré garder le code simple pour tout mettre en place ; on verra plus tard.
Maintenant, je vais m'occuper des 4 controllers.
Maintenant, je vais m'occuper des 4 controllers.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Merci Antoine
Là, ca devrait le faire, encore un p'tit tour sur le wiki et quelque tests sur emu... Par contre pas possible de tester sur ma NES ce soir
Là, ca devrait le faire, encore un p'tit tour sur le wiki et quelque tests sur emu... Par contre pas possible de tester sur ma NES ce soir
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
C'est sure que c'est plus rigolo de faire tout ca sur du vrai matos
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Oui, c'est la que je retrouve mon ame de gosse.
Je suis justement en train de parcourir le wiki, et je découvre un truc : la "signature"... Bon ça m'a pas l'air méchant, mais je me méfie quand même, j'ai eu des surprises avec le zapper une fois sur le vrai matos
https://wiki.nesdev.com/w/index.php/Four_Score
Je suis justement en train de parcourir le wiki, et je découvre un truc : la "signature"... Bon ça m'a pas l'air méchant, mais je me méfie quand même, j'ai eu des surprises avec le zapper une fois sur le vrai matos
https://wiki.nesdev.com/w/index.php/Four_Score
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Je sèche... mais j'ai la tête dure
J'ai bien compris que les controllers 1 et 3 étaient lus tous les deux via $4016.
Le souci a lieu pour le pad 3, je n'arrive à le lire correctement qu'avec la routine suivante.
En fait, je saute le premier pad en lisant 6 fois $4016 (alors qu'on s'attendrait à 8). Or, je souhaite bien évidemment remplacer ces 6 lectures par une boucle identique à celle qui se trouve juste après pour traiter le pad 1).
Je continue
J'ai bien compris que les controllers 1 et 3 étaient lus tous les deux via $4016.
Le souci a lieu pour le pad 3, je n'arrive à le lire correctement qu'avec la routine suivante.
En fait, je saute le premier pad en lisant 6 fois $4016 (alors qu'on s'attendrait à 8). Or, je souhaite bien évidemment remplacer ces 6 lectures par une boucle identique à celle qui se trouve juste après pour traiter le pad 1).
- Code:
;======================================================================================================
ReadController_C:
;======================================================================================================
LDA #$01
STA $4016
LDA #$00
STA $4016
;------------------
LDA $4016
LDA $4016
LDA $4016
LDA $4016
LDA $4016
LDA $4016
;------------------
LDX #$08
ReadControllerLoop_C:
LDA $4016
LSR A ; bit0 -> Carry
ROL bouton_j3 ; bit0 <- Carry
DEX
BNE ReadControllerLoop_C
RTS
Je continue
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Bon, une lueur d'espoir, en passant sur fceux 2.2.2 au lieu de fceux 2.2.3, et lisant 8 fois $4016, ça passe
Cette fois, j'y crois !
EDIT : Ca MARCHE !! J'ai 2 serpents indépendants
Edit 2 : et des soucis de collision
Cette fois, j'y crois !
EDIT : Ca MARCHE !! J'ai 2 serpents indépendants
Edit 2 : et des soucis de collision
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
C'est bon pour les 4 pads sur NES ! C'etait bien un souci d'émulation :/
Les tests sont pas évidents tout seul, je vais réflechir a une routine pour que les serpents soient autonomes.
Les tests sont pas évidents tout seul, je vais réflechir a une routine pour que les serpents soient autonomes.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Cool bravo !
Maintenant obligé d'inviter 3 potes à chaque fois que tu veux debugger haha :)
Maintenant obligé d'inviter 3 potes à chaque fois que tu veux debugger haha :)
Re: Mr ToutLeMonde et la programmation NES...
Ou tou tester avec un seul serpent et une fois nickel, ajouter les autres ! ^^
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18145
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Mr ToutLeMonde et la programmation NES...
Merci
Pour les tests, le plus sensible est passé, dorénavant, c'est plus une question d'ajustements je pense :)
Ah, et faudra que je rajoute quelques "bips" par ci par la, j'ai encore jamais touché au son.
Pour l'instant tout roule, et puis ca me dit bien de me lancer dans une routine pour rendre les serpents autonomes.
Mais c'est sur, après, on va étoffer tout ça :) Au passage, le p'tit souci de collision a lieu quand 2 serpents se croisent au niveau de la tête, ils se chevauchent. Ca empeche pas de jouer, mais ca peut surprendre, parce que visuellement, on voit qu'ils se croisent surtout lorsqu'ils sont longs (ils se croisent pendant un laps de temps plus long)
Pour les tests, le plus sensible est passé, dorénavant, c'est plus une question d'ajustements je pense :)
Ah, et faudra que je rajoute quelques "bips" par ci par la, j'ai encore jamais touché au son.
Ou tou tester avec un seul serpent et une fois nickel, ajouter les autres ! ^^
Pour l'instant tout roule, et puis ca me dit bien de me lancer dans une routine pour rendre les serpents autonomes.
Mais c'est sur, après, on va étoffer tout ça :) Au passage, le p'tit souci de collision a lieu quand 2 serpents se croisent au niveau de la tête, ils se chevauchent. Ca empeche pas de jouer, mais ca peut surprendre, parce que visuellement, on voit qu'ils se croisent surtout lorsqu'ils sont longs (ils se croisent pendant un laps de temps plus long)
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Pour le son, si tu veux pas te prendre la tête, utilises famitone2 (https://shiru.untergrund.net/code.shtml).
Re: Mr ToutLeMonde et la programmation NES...
Merci pour le tuyau. Le son, c'est un peu comme si j'étais devant l'Everest J'avais reperé un tuto, dans lequel on pouvait faire bip - bip, je reviendrai dessus dans un premier temps pour me faire la main. :)
En tout cas, je suis content d'avoir choisi ce projet de snake, je vais pouvoir toucher un peu à tout.
En tout cas, je suis content d'avoir choisi ce projet de snake, je vais pouvoir toucher un peu à tout.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
J'ai un debut d'IA pour mon serpent, il est capable de se diriger vers l'item... sans tenir compte de l'environnement.
Il change instantanément de direction pour atteindre l'item, et se mord régulièrement la queue. (en fonction du repositionnement de l'item, le serpent en avale jusqu'à 7 ou 8, c'est deja sympa à voir)
Pour savoir si une case est libre ou non, faut que je le verifie pendant le vblank . Je ne peux pas le faire dans ma routine de "déplacement automatique", ca aurait été plus pratique pourtant. Du coup, il me semble que je suis obligé de verifier l'etat de chacune des 4 cases autour de la tête du serpent, puis hors vblank, le serpent prend la décision de changer de direction pour se rendre vers l'item si la voie est libre ou conserve sa direction precedente ( afin d'éviter la collision).
Dans tous les cas, je vois mal comment mes serpents pourraient avancer autrement que comme des myopes :/ Mais bon ca sera déjà pas mal si j'y arrive.
Il change instantanément de direction pour atteindre l'item, et se mord régulièrement la queue. (en fonction du repositionnement de l'item, le serpent en avale jusqu'à 7 ou 8, c'est deja sympa à voir)
Pour savoir si une case est libre ou non, faut que je le verifie pendant le vblank . Je ne peux pas le faire dans ma routine de "déplacement automatique", ca aurait été plus pratique pourtant. Du coup, il me semble que je suis obligé de verifier l'etat de chacune des 4 cases autour de la tête du serpent, puis hors vblank, le serpent prend la décision de changer de direction pour se rendre vers l'item si la voie est libre ou conserve sa direction precedente ( afin d'éviter la collision).
Dans tous les cas, je vois mal comment mes serpents pourraient avancer autrement que comme des myopes :/ Mais bon ca sera déjà pas mal si j'y arrive.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Toujours plaisant à lire tes posts !
Courage !
Courage !
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
upsilandre a écrit:nan faut pas l'enlever. Quand tu lis $2007 tu ne charge pas le contenu de l'adresse que tu viens de mettre mais un buffer interne au PPU qui contient une precedente data mais en meme temps le PPU va mettre a jour ce buffer interne avec le contenu de l'adresse que tu as donné pour la prochaine lecture. Y a un décalage a cause de cette etape intermediaire qui passe par ce buffer (car le CPU n'accede pas directement a la VRAM, faut passer par le PPU, c'est pas un acces immediat)vincent2105 a écrit:Par curiosité, j'ai supprimé un "LDA $2007", et je me suis retrouvé avec un comportement du programme en apparence identique (suite à tes explications, je JMP sur RESET si la valeur est égale à 1).upsilandre a écrit:Sauf que la tu vas chercher dans la mémoire CPU (et un endroit ou y a pas de RAM donc effectivement ca va etre random) et pas dans la mémoire GPU ou se trouve tes tuiles.
En remplacant ton bout de code par celui la ca devrait beaucoup mieux marcher
- Code:
LDA $0001
STA $2006
LDA $0000
STA $2006
LDA $2007
LDA $2007
Tu déconseilles ou non ?
Donc apres avoir initialisé une nouvelle adresse faut toujours lire une fois pour rien. Si tu veux charger 10 octets alors faut enchainer 11 LDA $2007 et ne pas garder le premier. Si tu veux lire juste 1 octet alors faut mettre 2 LDA $2007.
Dans ton cas c'est normale que t'es l'impression que ca marche car pour l'instant tu n'utilise probablement pas la lecture $2007 pour autre chose du coup quand tu fais ton LDA $2007 tu va pas acceder a l'adresse que tu viens de mettre mais a celle que t'as mis la frame précédente qui est maintenant dans le buffer donc ca va juste te faire un retard d'une frame dans ton test de collision ce qui est pas grave sauf que dès que tu utilisera la lecture $2007 pour autre chose que ce test de collision ca va buger et tu saura pas pourquoi et rebelote .
J'ai justement plusieurs cas a traiter maintenant.
Par exemple, dans la routine suivante, j'initialise 4 adresses, puis je souhaite recuperer les valeurs. Pour la première, si j'ai bien compris, 2 "LDA $2007" sont nécessaires, mais pour les suivantes ? J'aurais tendance à dire qu'il faut un "LDA $2007" (à la place de mes ???). Tu confirmes ? ( En espérant être clair, je patauge un peu)
- Code:
LDA $2002
;------------------------------
LDA serpent_B_tile_haut_PPU_HIGH (A)
STA $2006
LDA serpent_B_tile_haut_PPU_LOW (A)
STA $2006
;-----
LDA serpent_B_tile_bas_PPU_HIGH (B)
STA $2006
LDA serpent_B_tile_bas_PPU_LOW (B)
STA $2006
;-----
LDA serpent_B_tile_droite_PPU_HIGH (C)
STA $2006
LDA serpent_B_tile_droite_PPU_LOW (C)
STA $2006
;-----
LDA serpent_B_tile_gauche_PPU_HIGH (D)
STA $2006
LDA serpent_B_tile_gauche_PPU_LOW (D)
STA $2006
;------------------------------
LDA $2007
LDA $2007
STA serpent_B_tile_haut (A)
;-----
???
STA serpent_B_tile_bas (B)
;-----
???
STA serpent_B_tile_droite (C)
;-----
???
STA serpent_B_tile_gauche (D)
RTS
Vetea a écrit:Toujours plaisant à lire tes posts !
Courage !
Merci @Vetea
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
De mémoire, après chargé une adresse avec $2006, il faut lire 2 fois $2007 pour la première lecture, mais une seule fois pour les autres. Sauf si tu change d'adresse avec $2006.
En espérant être clair, c'est visiblement pas mon fort ce soir :)
En espérant être clair, c'est visiblement pas mon fort ce soir :)
Page 1 sur 15 • 1, 2, 3 ... 8 ... 15
Sujets similaires
» Programmation CPS-1
» Initiation à Programmation
» Programmation sur Saturn
» La programmation Megadrive
» Programmation sous Unity3D ?
» Initiation à Programmation
» Programmation sur Saturn
» La programmation Megadrive
» Programmation sous Unity3D ?
Page 1 sur 15
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum