Logicielsmoto.com

Nous sommes le 18 Nov 2018, 08:50

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 53 messages ]  Aller à la page 1, 2, 3, 4  Suivante
Auteur Message
MessagePosté: 01 Oct 2018, 08:15 
Hors ligne

Inscription: 12 Fév 2014, 23:34
Messages: 44
Localisation: Londres / Orléans
Bonjour à tous,

Nous sommes heureux d'annoncer la sortie d'un nouveau jeu pour Thomson TO8, TO8D et TO9+ : Mission: Liftoff.

Image

Prehisto et moi-même travaillons sur ce projet depuis plus de quatre ans et nous pensons qu'il repousse de beaucoup ce qui était considéré comme les limites du TO8, mais nous vous laissons juger :

  • Animations fluides avec un rafraîchissement constant de 25 images par seconde
  • Mode Bitmap 16 plein écran avec double buffering
  • Sons et musiques digitalisés
  • Introduction animée en plein écran (nécessite 512 ko de RAM)
  • Musique de qualité CD dans le menu principal (nécessite 512 ko de RAM)


Mission: Liftoff est librement inspiré par Jetpac, un classique des jeux 8 bits. Le jeu est compatible avec les émulateurs DCMOTO et Teo et l'image disque est disponible ici : http://www.seize-color.net/liftoff/

Trailer : https://www.youtube.com/watch?v=WZnewEG5ZAA
Vidéo de gameplay: https://www.youtube.com/watch?v=47ZuQm4XWew

  • Programmation et game design : Préhisto
  • Graphisme et game design : Exocet
  • Musique : ​Maf
  • Sons : freesfx.co.uk


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 12:45 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1004
Localisation: Brest
G E N I A L!

4ans de boulot. Ca c'est du taf!!! :good: :good: Les animations sont superbes et les bruitages tip-top...
Hats off messieurs! :jap: (oui j'ai pas trouvé le smiley pour ca, mais bon... c'est pareil)

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 01 Oct 2018, 12:50, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 12:48 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 591
Localisation: Provence (France)
Quand ils découvrirons Mission Liftoff, beaucoup de joueurs vont devoir réviser leur opinion sur les machines Thomson. Quant aux thomsonistes convaincus, ils savent que la qualité du jeu est la manifestation du talent des auteurs. Une fois de plus ils m'impressionnent, et je les félicite :bien:


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 16:47 
Hors ligne

Inscription: 04 Jan 2013, 13:18
Messages: 69
Congratulations to all involved in this project for the fantastic game, awesome gfx, music/sfx and playability.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 17:38 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 332
Une tuerie cette prod !! On a l'illusion d'être sur une console de jeu. Le nombre de sprites est incroyable et le son en fond me bluffe totalement !

J'ai toujours dit que sur Thomson, les machines étaient pas si mal et le soft complètement pourri. En voici encore une preuve.

:love: :love: :up: :good: :good: :good:


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 17:46 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 332
Oh noooooon, y'a même l'étiquette pour la disquette ! Génial ! :coolfuck:


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 18:07 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1004
Localisation: Brest
Oui, et il y a même un crack intégré :eek: : Si tu appuis sur le bouton Action du joystick pendant le chargement tu es invulnérable :)

(dommage que je n'ai pas de joystick sur mes TO8 d'ailleurs)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 18:19 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 332
Je viens de tester sur mon TO9+, c'est même mieux que dans la vidéo :love: :love: Incroyable ! Ce jeu est nickel dans les moindres détails.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 18:20 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 991
Localisation: France (24)
Samuel Devulder a écrit:
Oui, et il y a même un crack intégré :eek: : Si tu appuis sur le bouton Action du joystick pendant le chargement tu es invulnérable :)

(dommage que je n'ai pas de joystick sur mes TO8 d'ailleurs)

Sauf que ce mode ne compte pas les points ;)

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo
"Hmm... Il y a un bogue dans le débogueur. Il me faudrait un débogueur pour déboguer le débogueur..." 04/06/2015
"Je ne peux pas amputer, c'est du code." 09/10/2018


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 19:07 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 991
Localisation: France (24)
Quelque précisions techniques, puisque c'est ma partie.

Oui, ça a mis 4 ans, d'abord parce que je n'ai bien évidemment pas occupé mon temps seulement à travailler sur le jeu, mais aussi et surtout, parce que le challenge a été de faire un jeu d'une rapidité maximum, ce qui a nécessité un pétrissage assidu du code et des optimisations sans fin. Il a fallu aussi mettre au point des techniques de travail assez inédites.


La structure des graphismes

Par exemple, vous pourrez toujours chercher les graphismes des sprites en mémoire, vous ne les y trouverez pas. Parce que tous ces graphismes ont été convertis en code. Chaque point de couleur est appliqué "à la main" sans passer par une matrice. Par exemple, une partie du code de l'affichage du jetpack (X contient le pointeur écran, B contient #$F0 (soit 240, pour passer les lignes)):

Code:
       ...
       SOUNDA
       abx   
       lda    #$f0
       anda   ,x
       adda   #$09
       sta    ,x
       lda    #$f0
       anda   40,x
       adda   #$04
       sta    40,x
       lda    #$44
       sta    -120,x
       sta    -80,x
       sta    -40,x
       abx   
       sta    80,x
       lda    #$a3
       ...

... ce qui est la façon la plus rapide d'afficher.


Les bruitages

Pour ce qui est du son 3 voies, il a bien évidemment fallu mixer les différents sons qui doivent être générés (2 banques de données, l'une apparaissant en espace cartouche, l'autre en espace RAM et le code traitant en espace non commutable) et écrire le résultat en mémoire de page directe pour un accès plus rapide. Voici la macro (X contient le pointeur sur le son 1, Y le pointeur sur le son 2, U le pointeur sur le son 3 et DP permet d'accéder au buffer de mixage):

Code:
SNDADD macro
       ldd    -SNDOFFS+\0,x Read voice 0
       addd   -SNDOFFS+\0,y Add voice 1
       addd   -SNDOFFS+\0,u Add voice 2
       std    <sndbuf+\0 Write buffer
       endm

Ainsi, les 156 octets nécessaires pour générer le son pendant une frame sont remplis en 2156x2 cycles.


La lecture du joystick

Un problème de taille s'est aussi posé : la lecture du joystick interférait avec la ligne du son, puisqu'utilisant les mêmes registres hardware. Il a fallu donc trouver une astuce pour lire le joystick sans provoquer de hoquet sonore. Je vous livre ici la routine utilisée :

Code:
*---------------------------------------
* Get joystick parameters
*---------------------------------------
       ldx    #$e7cf  Joystick register
       ldy    #$e7cd  Joystick register
       ldu    #joydir-5 Joystick table
       brn    *       - tempo -
(info)
       SNDSA  sndbuf+19 Generate sound
       ldd    #$fbfc  ! Mute by CRA to
       anda   ,x      ! avoid sound when
       sta    ,x      ! $e7cd is written
       andb   ,y       ! Activate
       stb    ,y       ! joystick port
       ora    #$04    ! Disable mute by
       sta    ,x      ! CRA + joystick
       ldd    #$400f  !
       andb   >$e7cc  Read position
       ldb    b,u     Read orientation
       stb    <astrol+GAORIE1 Orient.
       anda   ,y      ! Read button
       eora   #$40    ! status
       sta    <joybtn Joystick button
       ldd    #$fb3f  ! Mute by CRA to
       anda   ,x      ! avoid sound when
       sta    ,x      ! $e7cd written
       stb    ,y      Full sound line
       ora    #$04    ! Disable mute by
       sta    ,x      ! CRA and sound



La collision entre sprites

Pour les tests de collision entre sprites, j'utilise ce genre de routine (qui est très rapide et très efficace), ici la routine pour la collision entre la fusée et l'astronaute :

Code:
       ...
* Check if astronaut touched rocket
       ldd    <astrol+GYA  Read XY astronaut
AX0    set    3  Area right offset
AY0    set    3  Area top offset
AX1    set    3  Area left offset
AY1    set    3  Area bottom offset
AW     set    ASTW-AX0-AX1
AH     set    ASTH-AY0-AY1
BX0    set    4  Area right offset
BY0    set    14 Area top offset
BX1    set    4  Area left offset
BY1    set    4  Area bottom offset
BW     set    RKTW-BX0-BX1
BH     set    RKTH-BY0-BY1
       suba   #RKTY     -Y rocket
       subb   #RKTX     -X rocket
       adda   #AY0+AH-1-BY0  ! Compute
       addb   #AX0+AW-1-BX0  ! zones
       cmpa   #AH+BH-1  ! Skip if no
       bhs    clar3     ! vertical collision
       cmpb   #AW+BW-1   ! Skip if no
       bhs    clar4      ! horizontal collision
       ...

Évidemment, cette routine n'est qu'une routine de collision entre rectangles et varie selon la nature des sprites. Les suba/subb en immédiat sont généralement remplacés par des adressages indexés ou directs quand les deux sprites sont mouvants, et ici le "suba #RKTY" est intégré à l'adda consécutif, mais j'ai développé un peu le code pour plus de clarté.


La collision avec les plateaux et les bords d'écran

Pour les collisions avec les plateaux ou les bords d'écran, j'utilise une routine spéciale (puisque les plateaux et les bords d'écrans sont immobiles) qui repère la collision en fonction de la direction prise par le sprite. Ici la collision des monstres avec les plateaux et les bords d'écran (je n'ai conservé que la routine sans mouvement et la routine pour la direction Est, mais les routines pour les autres directions sont du même acabit) :
Code:
*---------------------------------------
* Check ennemy/bar+screen collision
*---------------------------------------
ebar   fdb    nmebar  $00 NOMOVE
       fdb    eeebar  $02 E
       fdb    wwebar  $04 W
       fdb    nmebar  $06 (E-W)
       fdb    ssebar  $08 S
       fdb    seebar  $0A S-E
       fdb    swebar  $0C S-W
       fdb    nmebar  $0E (E-W-S)
       fdb    nnebar  $10 N
       fdb    neebar  $12 N-E
       fdb    nwebar  $14 N-W
*---------------------------------------
* Enemy/Bar collision (no move)
* XXX 46
nmebar equ    *
       mul            - tempo -
       mul            - tempo -
       mul            - tempo -
       leax   0,u     - tempo -
       ldd    #(ALIVE<8)+NOMOVE
       rts
(info)
*---------------------------------------
* Enemy/Bar collision (east)
* XXX 38
eeebar equ    *
       exg    a,a     - tempo -
       ldd    ,u      Read coords
(info)
* bar 1 ----------------------
       cmpb   #X0BAR1-ENEW
eb0    equ    *-1
       bne    eeeb0
       exg    a,a     - tempo -
       nop            - tempo -
       cmpa   #Y0BAR1-ENEH
eb1    equ    *-1
       bls    eeeb3
       cmpa   #Y1BAR1+1
eb2    equ    *-1
       bhs    eeeb4
       ldd    #(TOUCHED<8)+WEST
       rts
(info)
* bar 2 ----------------------
eeeb0  cmpb   #X0BAR2-ENEW
eb3    equ    *-1
       bne    eeeb1
       leax   0,x     - tempo -
       cmpa   #Y0BAR2-ENEH
eb4    equ    *-1
       bls    eeeb3
       cmpa   #Y1BAR2+1
eb5    equ    *-1
       bhs    eeeb4
       ldd    #(TOUCHED<8)+WEST
       rts
(info)
* bar 3 ----------------------
eeeb1  cmpb   #X0BAR3-ENEW
eb6    equ    *-1
       bne    eeeb2
       cmpa   #Y0BAR3-ENEH
eb7    equ    *-1
       bls    eeeb3
       cmpa   #Y1BAR3+1
eb8    equ    *-1
       bhs    eeeb4
       ldd    #(TOUCHED<8)+WEST
       rts
(info)
*--- Continue
eeeb2  leax   0,x     - tempo -
eeeb3  leax   0,x     - tempo -
eeeb4  ldd    #(ALIVE<8)+EAST
       rts
(info)

Toutes les valeurs marquées par une étiquette eb? sont mises à jour pour chaque écran de niveau.


Conclusion

L'écran du jeu, comme vous le savez déjà, est rafraîchi tous les 25èmes de seconde, sans (trop de) temps morts. Chaque cycle, pour les 39936 cycles nécessaires à la création de l'écran, ont été quasiment utilisés. Bon, évidemment, tous les sprites ne seront pas forcément à l'écran tous ensembles, mais même s'il l'étaient, le jeu n'en serait pas ralenti pour autant.

Je tiens à remercier Exocet pour avoir mis à disposition ses impressionnants talents de graphiste et pour sa collaboration sans faille :jap: :good: Ainsi que tous ceux qui ont participé à la réalisation de ce jeu, et qui l'air de rien, vont se faire connaître dans le milieu de la communauté Thomson.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo
"Hmm... Il y a un bogue dans le débogueur. Il me faudrait un débogueur pour déboguer le débogueur..." 04/06/2015
"Je ne peux pas amputer, c'est du code." 09/10/2018


Dernière édition par Prehisto le 04 Oct 2018, 15:15, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 19:59 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1004
Localisation: Brest
Merci pour les explications. Le son 3 voix c'est pendant le jeu j'imagine? La musique du titre c'est de la décompression temps réel à 44khz depuis les 256ko je présume.

Avec toutes les macros SNDSA placées dans le code, ce dernier doit prendre une place énorme en ram. Peut-on avoir une idée de l'occupation des 512ko de ram ?

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 20:57 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 991
Localisation: France (24)
Samuel Devulder a écrit:
Merci pour les explications. Le son 3 voix c'est pendant le jeu j'imagine?

Absolument.

Samuel Devulder a écrit:
La musique du titre c'est de la décompression temps réel à 44khz depuis les 256ko je présume.

Ha ben oui j'en ai pas parlé! Effectivement, j'ai utilisé la routine d'intro pour Space Project que j'ai un peu retravaillée de telle façon qu'elle prenne en compte le bouton du joystick et qu'elle fasse les changements d'écran.

Samuel Devulder a écrit:
Avec toutes les macros SNDSA placées dans le code, ce dernier doit prendre une place énorme en ram. Peut-on avoir une idée de l'occupation des 512ko de ram ?

En fait, les macros comme SNDSA ne contiennent pas grand chose :
Code:
SOUNDA macro
       lda    ,y+     ! Generate
       sta    >PORTB  ! sound
       endm

Juste ce qu'il faut pour générer le son.

L'animation d'intro occupe les banques de 4 à 19, le code pour l'animation s'implantant en RAM non commutable.

Pour ce qui est du jeu lui même : les graphiques (+ les programmes de collision, de gestion des mouvements, etc...) vont de la banque 6 à 9, les sons occupent les banques 10 et 11, les fonds d'écran vont de la banque 12 à 14, les graphismes complémentaires en banque 15, et la musique de présentation à 44100Hz va de la banque 16 à 31, c'est-à-dire seulement quand l'extension mémoire est présente.

Les banques 0, 2 et 3 servent à l'affichage, et les banques 4 et 5 contiennent les sauvegardes d'écran pour le jeu (pour effacer les sprites + pour fixer les sprites désormais immobiles + pour les mouvements de fusée).

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo
"Hmm... Il y a un bogue dans le débogueur. Il me faudrait un débogueur pour déboguer le débogueur..." 04/06/2015
"Je ne peux pas amputer, c'est du code." 09/10/2018


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 21:36 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1004
Localisation: Brest
Citation:
Ainsi, les 156 octets nécessaires pour générer le son pendant une frame

Une frame étant 1/25s, ca veut dire que le son est joué durant le jeu à 25*156=3900hz. C'est ca ?

Prehisto a écrit:
Ha ben oui j'en ai pas parlé! Effectivement, j'ai utilisé la routine d'intro pour Space Project que j'ai un peu retravaillée de telle façon qu'elle prenne en compte le bouton du joystick et qu'elle fasse les changements d'écran.

Hum.. j'ai testé le jeu sur mon TO8D (256ko, sans joystick), donc le son ne se joue pas et je reste coincé sur la page titre du "HALL OF FAME" sans pouvoir sortir ni que ca change d'écran.

Sur émulateur je reproduis le même scenario en choissant la même config (TO8D 256k pas de joystick). Le débuggeur m'indique qu'on tourne sur cette boucle:
Code:
CFF0 BDCF1A     JSR    $CF1A             
CFF3 24FB       BCC    $CFF0             
(...)
CF1A 3416       PSHS   X,B,A             
CF1C 8EE7CF     LDX    #$E7CF             
CF1F CCFBFC     LDD    #$FBFC             
CF22 A484       ANDA   ,X                 
CF24 A784       STA    ,X                 
CF26 F4E7CD     ANDB   $E7CD             
CF29 F7E7CD     STB    $E7CD             
CF2C 8A04       ORA    #$04               
CF2E A784       STA    ,X                 
CF30 C60F       LDB    #$0F               
CF32 F4E7CC     ANDB   $E7CC             
CF35 B6E7CD     LDA    $E7CD       <== on lit $DC (sous émul.. chez moi $CC je pense (depuis basic))
CF38 8440       ANDA   #$40        <== A=$40
CF3A 8840       EORA   #$40        <== A=0
CF3C 8BC0       ADDA   #$C0        <== A=$C0 et pas de carry :(
CF3E A684       LDA    ,X                 
CF40 84FB       ANDA   #$FB               
CF42 A784       STA    ,X                 
CF44 863F       LDA    #$3F               
CF46 B7E7CD     STA    $E7CD             
CF49 A684       LDA    ,X                 
CF4B 8A04       ORA    #$04               
CF4D A784       STA    ,X                 
CF4F 3596       PULS   A,B,X,PC           
De ce que je comprends c'est l'init du son et je ne vois pas sous quelle condition la carry passerait à 1. Est-ce l'absence de joystick ou une protection contre les vilains pirates ?

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 01 Oct 2018, 21:49, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 21:46 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 991
Localisation: France (24)
Pour débloquer, peux-tu appuyer une fois sur le clavier (touche quelconque) puis sur le bouton du joystick, en alternant ?

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo
"Hmm... Il y a un bogue dans le débogueur. Il me faudrait un débogueur pour déboguer le débogueur..." 04/06/2015
"Je ne peux pas amputer, c'est du code." 09/10/2018


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Oct 2018, 22:05 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1004
Localisation: Brest
Sur mon TO8D je n'ai hélas pas de joystick (j'en ai sur le TO9 mais ce sont des prises DIN.)

Je viens de tester sur émul: avec le joystick émulé, l'appui sur action décoince l'écran. Donc oui c'était bien lié à l'absence de joystick sur la machine. Comme on dit ==> RTFM :p

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 01 Oct 2018, 22:25, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 53 messages ]  Aller à la page 1, 2, 3, 4  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com