La Place des Développeurs Do The Same - MSX
@Guillaume, Je vais bosser sur le nombre de coups (rotation) et le timer + une petite histoire d'étoiles hein Gfx
@Igal, Merci
@Gfx, yes Sir
Comme je le disais sur Msx.org, pour la version précédente, ce 'trick' était invisible parce que les items-tiles et les items-sprites étaient de la même couleurs. Dans cette version, il y a plusieurs couleurs pour les tiles. Donc quand ca 'rotationne' hihihi, les fruits sont en une seule couleur puisqu'ils passent en sprites. Dès que la rotation s'arrête, on voit le passage du sprite au tile.
C'est à peine visible, c'est fluide et ca rend super bien avec tes gfx, Gfx Edité par Ricco59 Le 12/05/2021 à 17h45
@Igal, Merci
@Gfx, yes Sir
Comme je le disais sur Msx.org, pour la version précédente, ce 'trick' était invisible parce que les items-tiles et les items-sprites étaient de la même couleurs. Dans cette version, il y a plusieurs couleurs pour les tiles. Donc quand ca 'rotationne' hihihi, les fruits sont en une seule couleur puisqu'ils passent en sprites. Dès que la rotation s'arrête, on voit le passage du sprite au tile.
C'est à peine visible, c'est fluide et ca rend super bien avec tes gfx, Gfx Edité par Ricco59 Le 12/05/2021 à 17h45
Merci pour vos retours les zamis
La route, bien que plus courte vers Msxdev'21, reste sinueuse
Il me reste encore des trucs à faire et à voir avec Gfx (quel talent ! )
A+ Edité par Ricco59 Le 19/05/2021 à 23h44
La route, bien que plus courte vers Msxdev'21, reste sinueuse
Il me reste encore des trucs à faire et à voir avec Gfx (quel talent ! )
A+ Edité par Ricco59 Le 19/05/2021 à 23h44
Salut les Potos
Il me reste encore un peu de travail (graphs, + 2,3 trucs à ajouter, corriger)
En attendant la version finale, voici quelques screens. N'hésitez pas à me faire un retour.
Excellent week-end de Pentecôte à tous
Il me reste encore un peu de travail (graphs, + 2,3 trucs à ajouter, corriger)
En attendant la version finale, voici quelques screens. N'hésitez pas à me faire un retour.
Excellent week-end de Pentecôte à tous
Ce que j'ai fait depuis...
- pouvoir saisir moins de 5 caractères
- le password a été supprimé
- la rotation n'est plus continue si le joueur laisse une touche appuyée. Il faut relâcher celle-ci pour pouvoir effectuer la rotation des 'fruits'. J'ai peur que le jeu perde un peu de son rythme. Il faut essayer
ce qu'il reste à faire :
- ajouter les gfx de Gfx (Fioles et animations correspondantes)
- corriger un bug
- gerer le 50/60hz
- reorganiser certains niveaux
- les sfx
- cryptage du nb de coups/time dans le jeu
et la gestion du webscore
Voili, voilou
A+ les potos Edité par Ricco59 Le 30/05/2021 à 23h41
aoineko
Membre non connecté
Conseiller Municipal
Ricco59 :
- la rotation n'est plus continue si le joueur laisse une touche appuyée. Il faut relâcher celle-ci pour pouvoir effectuer la rotation des 'fruits'. J'ai peur que le jeu perde un peu de son rythme. Il faut essayer
Pour le clavier et les manettes 2 boutons, tu as au pire 2 rotations à faire pour atteindre n'importe quel combinaison. Avec une manette 1 bouton (rotation dans un sens seulement) tu auras au pire 3 rotations.
Ca me semble pas grand chose par rapport au gain de plus tourner sans le vouloir.
Après, tu peux pousser plus loin :
Quand le joueur appuis sur un bouton, tu déclenches un timer et tu invalides les inputs pendant un temps donné (tu reset le timer à chaque validation).
Comme ça tu autorises à laisser le bouton appuyé mais tu maitrises la fréquence de validation des inputs.
Ce qui sera d'autant plus important quand tu t'occuperas du 60 Hz (la version actuelle doit être beaucoup trop sensible vu que je galère déjà parfois en 50 Hz).
On est toujours ignorant avant de savoir.
Salut les potos
Bon, j'ai corrigé quelques bricoles et implémenté le cryptage (je vais m'attaquer à sa gestion sur le net un peu plus tard).
J'ai essayé sur mon msx2 et ... buggg fallait s'en douter mais le plus embattant pour moi reste la couleur et l'impression que le balayage est devient visible en haut du tableau des items et dans le menu lors du scroll du background (Pour ce dernier point ça se voit plus sur emu - meisei en 60hz- que sur MSX2). Ma synchro est un simple HALT, ca vient surement de là... et/ou que ma routine d'affichage des tiles et effacement est trop lente...
En ce qui concerne la couleur, sur un MSX1 (idem sur emu), les couleurs ont l'air plus 'pastel' alors que sur un MSX2, les couleurs sont plus vives. De ce fait, la transition au niveau des couleurs tiles>sprites est plus visible, par moment on a l'impression que ca flash même...
Je pensais que le mode screen2 ainsi que ses couleurs étaient identiques du MSX1 vers MSX2, que l'on avait pas besoin de changer la palette
Il faut donc changer la palette ??
A bientôt les zamis
Eric
Bon, j'ai corrigé quelques bricoles et implémenté le cryptage (je vais m'attaquer à sa gestion sur le net un peu plus tard).
J'ai essayé sur mon msx2 et ... buggg fallait s'en douter mais le plus embattant pour moi reste la couleur et l'impression que le balayage est devient visible en haut du tableau des items et dans le menu lors du scroll du background (Pour ce dernier point ça se voit plus sur emu - meisei en 60hz- que sur MSX2). Ma synchro est un simple HALT, ca vient surement de là... et/ou que ma routine d'affichage des tiles et effacement est trop lente...
En ce qui concerne la couleur, sur un MSX1 (idem sur emu), les couleurs ont l'air plus 'pastel' alors que sur un MSX2, les couleurs sont plus vives. De ce fait, la transition au niveau des couleurs tiles>sprites est plus visible, par moment on a l'impression que ca flash même...
Je pensais que le mode screen2 ainsi que ses couleurs étaient identiques du MSX1 vers MSX2, que l'on avait pas besoin de changer la palette
Il faut donc changer la palette ??
A bientôt les zamis
Eric
aoineko
Membre non connecté
Conseiller Municipal
Pour la synchronisation, le problème du
halt
, c'est qu'il est interrompu par n'importe quel interruption, pas forcement celle venant du processeur graphique (VDP).
Ce n'est donc vraiment pas une méthode viable pour un vrai jeu (pour des tests, pourquoi pas).
La méthode "propre" pour la synchronisation avec le VDP, c'est de créer une fonction de hook, de l'enregistrer sur le hook H.TIMI qui est appelé à la fin de l'affichage de chaque image.
Dans cette fonction, tu set une variable qui te permet de synchroniser ton code.
Voici un exemple utilisant ma lib CMSX.
Il me semble que je t'avais déjà passé la fonction pour enregistrer un hook, mais si tu l'as plus, elle est dispo ici : https://github.com/aoineko-fr/CMSX/blob/master/cmsx/src/bios_hook.h
Ce n'est donc vraiment pas une méthode viable pour un vrai jeu (pour des tests, pourquoi pas).
La méthode "propre" pour la synchronisation avec le VDP, c'est de créer une fonction de hook, de l'enregistrer sur le hook H.TIMI qui est appelé à la fin de l'affichage de chaque image.
Dans cette fonction, tu set une variable qui te permet de synchroniser ton code.
Voici un exemple utilisant ma lib CMSX.
Code C :
bool g_VSync = false; u8 g_Frame = 0; // Vertical-synchronization hook handler void VSyncHook() { g_VSync = true; } // Wait for vertical-synchronization void WaitVSync() { while(g_VSync == false) {} // le programme attends ici que le hook H.TIMI soit appelé g_VSync = false; g_Frame++; } // Main loop void main() { // ... code d'init ... Bios_SetHookDirectCallback(H_TIMI, VSyncHook); // enregistrer la fonction de synchro sur le hook H.TIMI while(1) { WaitVSync(); // attendre la fin du balayage de l'écran // ... code gameplay ... } }
Il me semble que je t'avais déjà passé la fonction pour enregistrer un hook, mais si tu l'as plus, elle est dispo ici : https://github.com/aoineko-fr/CMSX/blob/master/cmsx/src/bios_hook.h
On est toujours ignorant avant de savoir.
Merci
oui, tu m'avais passé un ensemble de procédures permettant d'utiliser des routines sous interruption :
typedef void (*callback)(void); ///< Callback default signature
/// Set a Hook to jump to given function
inline void Bios_SetHookDirectCallback(unsigned short hook, callback cb)
{
*((unsigned char*)hook) = 0xC3; // JUMP
*((callback*)++hook) = cb; // Callback address
}
/// Clear a Hook (set RET asm code)
inline void Bios_ClearHook(unsigned short hook)
{
*((unsigned char*)hook) = 0xC9; // RET
}
#define H_TIMI 0xFD9F
activer les interr
Bios_SetHookDirectCallback(H_TIMI, MonHook);
...
...
...
void MonHook(void)
{
Ze_X_Temps++;
}
Je vais étudier ce que tu as mis plus haut. Merci encore
Edité par Ricco59 Le 01/07/2021 à 22h56
oui, tu m'avais passé un ensemble de procédures permettant d'utiliser des routines sous interruption :
typedef void (*callback)(void); ///< Callback default signature
/// Set a Hook to jump to given function
inline void Bios_SetHookDirectCallback(unsigned short hook, callback cb)
{
*((unsigned char*)hook) = 0xC3; // JUMP
*((callback*)++hook) = cb; // Callback address
}
/// Clear a Hook (set RET asm code)
inline void Bios_ClearHook(unsigned short hook)
{
*((unsigned char*)hook) = 0xC9; // RET
}
#define H_TIMI 0xFD9F
activer les interr
Bios_SetHookDirectCallback(H_TIMI, MonHook);
...
...
...
void MonHook(void)
{
Ze_X_Temps++;
}
Je vais étudier ce que tu as mis plus haut. Merci encore
Edité par Ricco59 Le 01/07/2021 à 22h56
aoineko
Membre non connecté
Conseiller Municipal
Pour la palette, chaque puce graphique (VDP) a ses propres réglages de couleur.
La plupart des ordinateurs MSX1 sont équipés de la puce Texas Instruments TMS9918, mais certains utilisent des clones avec des réglages de couleurs légèrement différents (comme le Toshiba T6950 ou le Yamaha YM2220). Sur MSX1 on ne peut rien y faire.
Les MSX2 sont eux généralement équipés d'un Yamaha V9938 qui a effectivement des réglages de bases assez différent du TMS9918. Mais là, on y peut quelque chose puisqu'à partir du MSX2, la palette de 16 couleurs peut être redéfinie. Il est donc tout à fait possible pour un programme de détecter au démarrage si l'ordinateur est équipé d'un VDP MSX2 (ou plus) et si c'est le cas, de redéfinir les 16 couleurs pour les faire correspondre à des réglages proches de ceux des MSX1. Ce n'est pas trivial à faire, mais si ça t'intéresse, j'ai tout le code qu'il faut pour faire ça dans ma lib.
Les couleurs de la palette du MSX2 sont définies sur 9-bits (3-bits par canal rouge-vert-bleu) et stocker sur 16-bits dans le VDP.
On doit pouvoir trouver les valeurs à mettre pour s'approcher au plus près des couleurs du MSX1.
EDIT: Pour visualiser la différence...
EDIT2: Voici les valeurs de la palette MSX2 d'origine et les valeurs pour s'approcher des couleurs du MSX1
La plupart des ordinateurs MSX1 sont équipés de la puce Texas Instruments TMS9918, mais certains utilisent des clones avec des réglages de couleurs légèrement différents (comme le Toshiba T6950 ou le Yamaha YM2220). Sur MSX1 on ne peut rien y faire.
Les MSX2 sont eux généralement équipés d'un Yamaha V9938 qui a effectivement des réglages de bases assez différent du TMS9918. Mais là, on y peut quelque chose puisqu'à partir du MSX2, la palette de 16 couleurs peut être redéfinie. Il est donc tout à fait possible pour un programme de détecter au démarrage si l'ordinateur est équipé d'un VDP MSX2 (ou plus) et si c'est le cas, de redéfinir les 16 couleurs pour les faire correspondre à des réglages proches de ceux des MSX1. Ce n'est pas trivial à faire, mais si ça t'intéresse, j'ai tout le code qu'il faut pour faire ça dans ma lib.
Les couleurs de la palette du MSX2 sont définies sur 9-bits (3-bits par canal rouge-vert-bleu) et stocker sur 16-bits dans le VDP.
On doit pouvoir trouver les valeurs à mettre pour s'approcher au plus près des couleurs du MSX1.
EDIT: Pour visualiser la différence...
TMS9918 | V9938 |
EDIT2: Voici les valeurs de la palette MSX2 d'origine et les valeurs pour s'approcher des couleurs du MSX1
Palette MSX2 d'origine | Palette MSX2 style MSX1 |
Code TEXT : + R + G + B 0 | 0 | 0 | 0 1 | 0 | 0 | 0 2 | 1 | 6 | 1 3 | 3 | 7 | 3 4 | 1 | 1 | 7 5 | 2 | 3 | 7 6 | 5 | 1 | 1 7 | 2 | 6 | 7 8 | 7 | 1 | 1 9 | 7 | 3 | 3 10 | 6 | 6 | 1 11 | 6 | 6 | 4 12 | 1 | 4 | 1 13 | 6 | 2 | 5 14 | 5 | 5 | 5 15 | 7 | 7 | 7 |
Code TEXT : + R + G + B 0 | 0 | 0 | 0 1 | 0 | 0 | 0 2 | 1 | 5 | 1 3 | 3 | 6 | 3 4 | 2 | 2 | 6 5 | 3 | 3 | 7 6 | 5 | 2 | 2 7 | 2 | 6 | 7 8 | 6 | 2 | 2 9 | 6 | 3 | 3 10 | 5 | 5 | 2 11 | 6 | 6 | 3 12 | 1 | 4 | 1 13 | 5 | 2 | 5 14 | 5 | 5 | 5 15 | 7 | 7 | 7 |
On est toujours ignorant avant de savoir.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie