60

tobe :
Quand on confond le code generé et automodifié, on evite les declarations tel que :
"Je comprend simplement que les codeurs sur ST sont des porcs..."

Heureusement que GT est la pour vous instruire wink

Evidement je disais ça pour taquiner un peu la 'pouasquaille'. N'empèche la plupart des codeurs ST trouvent des 'super' optimisations de la mort (c'est bien), mais chialent ensuite que ça passe pas sur les autres configs genre Falcon030 (c'est moins bien) en accusant le vilain cache ou la vilaine pipeline (c'est carrément pas bien)...

Donc je RECTIFIE : Les codeurs ST sont TRES BONS, mais sur ST uniquement ! Dès qu'il sagit de prendre en compte des configs différentes, ils sont perdus, là où sur Amiga ils réussissent plutôt mieux (j'ai pas dit qu'ils réussissent à tous les coups) !

Pour le code généré, c'est qu'en fait je n'en ai quasiment jamais fait, et encore moins de l'automodifié smile Que ce soit en GFA, en ASM ou en C, je tache toujours de me démerder autrement, et tant pis pour la perte de vitesse, si au moins je garanti la portabilité...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

61

tobe :
J’avais lu un interview du codeur, si mes souvenirs sont bon.... il y’avait deux ou trois sprites dessinés ( technique du LOD en fait) avec un zoom entre chaque, les calculs d’expansions étaient sans doute précalculées, mais le sprite était bien dessiné en temps réel, c’est pour cela qu’ils zoom avec une fluidité parfaite !

Roule à deux km/h et tu veras que les sprites zoom au pixel. Maintenant réalise la même opération avec super burn-out sur jag et ses sprites non zoomé et tu verras qu’ils sont tres sacadés !
Qui a dit que le st était plus fort qu’une jag ? hein ? kiki ? grin

Maintenant la grande question du jour...pourras-tu tenir 1 mois sans dragibus ? sad


Il reste les Starmint smile Le sprite dessiné en temps réel d'accord mais il y a du code généré ou une astuce du style car c'est impossible sur un ST, je penses que Frost sera d'accord avec moi, car faire une extraction de bits, zooming et réecriture en ram, ca fait vite grimper la facture. Mais dans tous les cas de figure, Vroom est un monument de l'histoire du jeu sur Atari ST, ca c'est sur.

J'ai un peu de mal mon Tempi, je comprends pas trop l'histoire juste des coordonnées du Stos.

Templeton rabbit
avatar
je sais pas depuis que Fadest nous mets de la zik partout dans ses jeux l'univers a été ebranlé (LordKraken)

62

FADEST : En effet, d’ailleurs il y avait une option dans le STOS pour gérer ce genre de situation. En fait les arcs en ciels étaient géré comme des sprites seulement lorsqu’ils apparaissaient et qu’ils se brisaient (c’est pour cela que le jeu ramait lorsque bub en faisait tomber un max),seul les coordonnées étaient sauvées, bref une astuce d'une simplicité désarmante mais diablement efficace dans ce jeu.

KUK: je comprends pas trop l'histoire juste des coordonnées du Stos.


IL y 'a une option dans le STOS pour transformer les sprites en Background.
Exemple , pour une explosion au sol, tu joues l'anim et tu passes sa dernière frame dans le background, elle reste ainsi à vie dans le décor. Par consequent, tu peux laisser une tonne de dégats au sol sans que le jeu ne ralentisse puisque les sprites n'existe plus physiquement. top

Concernant les coordonnées, je parlais du hot spot ! Le sprite n'est plus affiché, mais son hot spot reste géré par le programme.
Lorsque l'arc en ciel doit tomber par exemple, il faut réafficher son sprite à l'endroit ou tu l'as laissé dans le decors, d'ou l'utilité de garder son hot spot.
Je suis plus explicite là ? hum


XERUS

63

Je pense que les codeurs ST ont poussé le 68000 beaucoup plus loin que les codeurs Amiga, pour la simple raison que nous n'avions pas de hardware dedié.
Et quand je vois des ecrans en fullscreen complet avec du scrolling parallax sur un ST, alors que sur Amiga ces deux techniques sont gérées par le hard, la je dis RESPECT MAN !
D'un point de vue personnel, que mon code ST ne fonctionne pas sur Falcon, je m'en tape smile
D'ailleurs mon code ne fonctionne que sur STE, et encore, j'ai meme fait un ecran qui ne fonctionne que sur les premiers STE equipés du TOS 1.06 arme
Mefiez vous du Dr H qui sommeil en moi !
Muhahahahahahahahaha !
Muuuuhahaha...kof...kof...hahaha !

64

GT Turbo :
[...]Le sprite dessiné en temps réel d'accord mais il y a du code généré ou une astuce du style car c'est impossible sur un ST, je penses que Frost sera d'accord avec moi, car faire une extraction de bits, zooming et réecriture en ram, ca fait vite grimper la facture.[...]

Oui et non, j'avais fait une petite démo d'un concept en ASM sur mon Falcon, mais j'arrives plus à foutre la main dessus :/ Bon n'empèche je me souvient de la technique que j'avais employée...

Prenons le cas du mode ST 16 couleurs (4 bits/pixels, 2 pixels/byte). On part d'un sprite 16x16 (plus facile pour comprendre par la suite), et on commence quelques sprites précalculés. Mais ATTENTION, c'est direct là que ça commence à être rigolo :

On précalcul tous les sprites en multipliant simplement la largeur, *PAS* la hauteur, donc on obtien des sprites en 32x16, 48x16, 64x16, ... A toi de déterminer jusqu'à où tu veux aller. Ensuite tu fais une copie de chaque sprite que tu décale d'un pixel (avec le masque associé) -> 16x16 dans un 18x16 (un 20x16 en fait, à cause de l'alignement pour avoir une ligne sur 10 octets plutôt que 9), 32x16 dans un 34x16 (36x16 en fait, ligne de 18 octets), 64x16 dans un 66x16 (68x16 en fait), ...

Un fois que tu as ta collection de sprites, la routine de zoom est relativement simple, une double boucle X/Y, l'entrelacement de 4 sprites par ligne. J'explique :

On va commencer par ne s'occuper que de générer une ligne, les suivantes seront calquées sur la première. En fait plutôt que de faire une copie dès le départ, on va générer une liste d'offsets pour générer une ligne de sprite zoomé à partir de 4. On va travailler en virgule fixe avec une précision de (tiens ne je sais plus ducoup, j'avais calculé ça à l'époque) 4 bits il me semble. La boucle X sera elle même découpée en deux boucles à base de ADDX.

Bon imaginons que tu veux faire un zoom de 1.56 fois de ton sprite, tu sélectionnes les sprites 1x et 2x (ainsi que leurs version décalées). 1.56 en précision 4 bits, c'est 24.96 (donc 24). Il s'agit d'une faire une boucle qui va compter de 0 à 24 en tapant soit dans la version 1x, soit dans la version 2x et leurs versions décalées (je n'ai plus le détail en tête, mais je me rappelle que je faisait ça à coup de ADDX, le bit de retenu servant à choisir la version décalée ou pas, ou la version 1x ou 2x, je ne sais plus, ça date). Bref tu te compose une petite liste d'offset avec des WORD qui ont le format suivant :

bits
15 : Sprite 1x ou 2x
14 : Sprite décalé ou pas
13 à 0 : Offset du pixel dans la ligne (soit une ligne de 16 KiB max, 32768 pixels)

Une fois que tu as fini ça, tu passes à la copie proprement dites de la ligne. Tu gardes les 4 pointeurs sources dans A0-A3, et la destination dans A4. Il ne te restes plus qu'à lire ta liste d'offset, et en fonction des bits 15 et 14, choisir ta source. Il sagit de lire octet par octet (2 pixels à chaque fois, d'où l'intéret du prédécalage), aussi récupère directement WORD à WORD dans les registres D0-D3, et fait un simple ROR 8 si tu doit lire à une adresse impaire (bit 0 à 1).

Pour la boucle en Y, c'est super simple, c'est le même principe avec une virgule fixe de 0 à 24, mais là tu changes de ligne seulement sur la retenue (donc des fois tu refait exactement la même ligne, des fois tu passes à la suivante). Il te suffit pour ça de mettre ou non tes registres sources A0-A3 en les faisants pointer sur la ligne suivante dans tes sprites, puis de réappliquer ta liste d'offsets que tu avais calculé pour la première ligne. L'optimisation ultime consisterait à ne simplement que recopier la ligne que tu viens d'écrire tant que tu n'as pas à changer de ligne source dans tes sprites, par contre ça risque de compliquer les masques aux bordures de ton sprite. Donc le plus simple est de réappliquer simplement la routine de copie par offset.

J'avais aussi intégré une valeur de rotation/déformation par shearing, mais alors chaque commande d'offset prenait 32 bits et nécessitait un autre jeu de tables de précalcul pour la sélection de la ligne (0 à 15). Mais le résultat était très moche (les sprites zoomés et rotationés ne ressemblaient pas à une grosse mosaique avec des carrés tournés, mais plutôt à un nuage de point).

Enfin voilà ce dont je me rappelle, j'avais quand même passé 3 semaines à peaufiner l'algo pendant mes études à l'IUT (le soir, plutôt que de faire mes devoirs). Mais bon, je faisait d'autres trucs à coté, et il devrait être possible de réimplémenter l'algo plus rapidement... En faisait gaffe de pas dépasser d'une ligne sur l'autre et en bas de l'écran. Pour ça il aurait fallu simplement modifier les valeurs de la boucle X/Y en clippant les valeurs par rapport à la proximité des bordures de l'écran :

Si dépasse en haut : compteur Y de 0 à 24 -> 5 à 24 par exemple (commence la copie plus bas, mettre à jour directement les registres source A0-A3)
Si dépasse en bas : compteur Y de 0 à 24 -> 0 à 13 par exemple (ne termine pas la copie)
Si dépasse à gauche : compteur X de 0 à 24 -> 8 à 24 par exemple (un peu compliqué, commence la copie de la ligne plus tard, il faut générer la liste d'offset en conséquence)
Si dépasse à droite : compteur X de 0 à 24 -> 0 à 18 par exemple (ne termine pas la copie de la ligne, générer une ligne d'offset plus courte)

Voilà voilà smile Et ça n'a ni besoin de code généré ou automodifié, ça passe aussi sur Falcon030 (puisque développé dessus à l'origine) et que je bougeait le sprite avec la souris en temps réel, et zoomait en temps réel avec le bouton gauche enfoncé (et en bougeant la souris de haut en bas). Pour la rotation, j'avais utilisé le bouton droit et un mouvement gauche-droite...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

65

j'ai meme fait un ecran qui ne fonctionne que sur les premiers STE equipés du TOS 1.06


GRUIK ! yel


GT Turbo octopus

66

Merci Kochise pour les explications, mais un précalcul est obligatoire, donc c'est pas du real time zooming, car une phase de précalcul est obligatoire. Tu vois Tempi je peux ressortir mes Dragibus de l'armoire, meme si la technique est très bonne surtout a connaitre (Merci encore Kochise wink ) ce n'est pas du vrai real time.

Meme si a l'écran, ce sont des merveilles, c'est toujours en coulisses que se déroule le plus gros du travail, mais comme on dit qu'importe les moyens, c'est le résultat qui compte.

Xerus coin


avatar
je sais pas depuis que Fadest nous mets de la zik partout dans ses jeux l'univers a été ebranlé (LordKraken)

67

tobe :
Je pense que les codeurs ST ont poussé le 68000 beaucoup plus loin que les codeurs Amiga, pour la simple raison que nous n'avions pas de hardware dedié.
Et quand je vois des ecrans en fullscreen complet avec du scrolling parallax sur un ST, alors que sur Amiga ces deux techniques sont gérées par le hard, la je dis RESPECT MAN !


Oui mais quand ducoup tu pompes toutes les resources hardware pour ça et que tu ne peut même plus utiliser les interruptions pour gèrer la souris ou le clavier pour un peu d'interactivité, histoire de faire un jeu par exemple, ou alors devoir abandonner le soundtracker au profit d'un soundchip (même très bon), on fini par sentir les limites de l'atari très très, mais alors très vite. D'où une plétore de jeu, des vrais, sur Amiga que l'on ne trouvera pas sur ST parce soit c'est du 16 couleurs sans véritable scrolling (exemple Cannon Fodder entre la version ST et Amiga/PC), soit on reste dans le domaine de la démo. Or se torcher le cerveau pour sortir de telles astuces pour pallier les défaut du ST, mais n'être en mesure de les utiliser correctement que dans une démo, je trouve ça carrément réducteur... Et particulièrement égoiste !
tobe :
D'un point de vue personnel, que mon code ST ne fonctionne pas sur Falcon, je m'en tape smile
D'ailleurs mon code ne fonctionne que sur STE, et encore, j'ai meme fait un ecran qui ne fonctionne que sur les premiers STE equipés du TOS 1.06 arme


Egoiste je disais ? Voilà pourquoi les entreprises (de jeu ou autre) ont abandonnés la plateforme Atari :

Si on n'utilisait pas d'astuce pour faire un jeu, on obtenait une version plus crade que sur les plateformes concurrentes

Si on utilisait des astuces, soit on ne pouvait pratiquement plus rien faire à coté, soit on était incompatible avec le reste du matos. Or développer des versions spécifiques est couteux, et souvent le marché ne se justifie pas (à part les philantropes de Silmarils) smile

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

68

GT Turbo :
Merci Kochise pour les explications, mais un précalcul est obligatoire, donc c'est pas du real time zooming, car une phase de précalcul est obligatoire. Tu vois Tempi je peux ressortir mes Dragibus de l'armoire, meme si la technique est très bonne surtout a connaitre (Merci encore Kochise wink ) ce n'est pas du vrai real time.

Meme si a l'écran, ce sont des merveilles, c'est toujours en coulisses que se déroule le plus gros du travail, mais comme on dit qu'importe les moyens, c'est le résultat qui compte.

Xerus coin

Oui et non :

Pas real-time : la préparation des sprites, vu qu'ils sont en plan sur Atari (c'est certainement possible de faire ça direct sur un Amiga en chunky)

Real-time : La génération de la table d'offset (une seule par facteur de zoom), puis la copie du sprite zoomé.

En fait la technique consiste à entrelacer différents sprites de facteur de zoom différent. C'est une sorte de copie en "pixel resize" mais en prenant en compte la stupidité du mode plan des Atari smile

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

69

fou je vais etre malade... ca me donne le tourni tout ca !

smile

70

Garth Algar (tendant un petit sac papier de 10 cl max) : "Si tu dois vomir, vomit là dedans"

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

71

fou3 couic2
dehors

72

Par contre je suis de l'avis a Tobe, car les Amigaistes se reposaient sur le hard, et en on pris dans la gueule a cause de cela. Le Flexiscroll de Griff (Electronic Images), Decade Demo, celui commence par un 'Fuck You Wild Copper', pourquoi ? Car ce groupe avait dit c'est impossible sur un ST, eux il tournait a 25 images par secondes, Griff 50 images par secondes et il avait des anims en plus.

Réussir a faire des trucs que meme le concepteur de la machine pensait impossible, pour moi c'est de l'art ce genre de programmation. Par contre je voudrais revenir sur un point, tu as écris :

Oui mais quand ducoup tu pompes toutes les resources hardware pour ça et que tu ne peut même plus utiliser les interruptions pour gèrer la souris ou le clavier pour un peu d'interactivité, histoire de faire un jeu par exemple.

Ben il y a pas besoin d'interruptions pour gerer ceci, combien on reprogrammer le processeur clavier pour faire de la lecture joy ou souris en fullcreen ? Plus d'un (d'ailleurs Tobe connait notre bon 6301 wink ). Les sources étaient meme donnés dans un STMag.

Cela consomme pas autant de ressources que cela, ouvrir un overscan haut et bas (Cela nous fait une image de 270 lignes) consomme moins de 6% de la Vbl.

Et regarde bien, certaines démo ST marchent sur un plus grand de machines Atari différentes que certain programmes Gem prévu pour etre propre... Je n'ai trouvé aucun ST/STE qui n'accepte pas le fullscreen de la Sowatt. Enchanted land qui utilise un paquet de technique a faire pleurer plus d'un pros du code gén/auto fonctionne sur une gamme de ST a en pleurer.

Si on avait pas la démo, tous les jeux dont on parle aussi n'aurait jamais pu naitre comme ils sont.

GT Pour la démo.



avatar
je sais pas depuis que Fadest nous mets de la zik partout dans ses jeux l'univers a été ebranlé (LordKraken)

73

question happy
C quoi le VBL pour ceux qui vous lisent et qui depuis le debut comprennent rien sens oser le demander ???

et autres chose sur les demos. existe t'il un site qui les listes ou on puisses les DL ??? comme la SoWatt ou autre dont vous fetes references ici.

74

GT Turbo :
[...]Ben il y a pas besoin d'interruptions pour gerer ceci, combien on reprogrammer le processeur clavier pour faire de la lecture joy ou souris en fullcreen ? Plus d'un (d'ailleurs Tobe connait notre bon 6301 wink ). Les sources étaient meme donnés dans un STMag.[...]


Moui, ben alors vient pas me causer de programmation propre ensuite et de blamer ces torchons de codeux qui tapent direct dans le hard plutôt que d'utiliser les interfaces officielles :/ Les mauvaises habitudes, ça se prend, ça se garde et ça se perfectionne :/
GT Turbo :
[...]Et regarde bien, certaines démo ST marchent sur un plus grand de machines Atari différentes que certain programmes Gem prévu pour etre propre... Je n'ai trouvé aucun ST/STE qui n'accepte pas le fullscreen de la Sowatt. Enchanted land qui utilise un paquet de technique a faire pleurer plus d'un pros du code gén/auto fonctionne sur une gamme de ST a en pleurer.

Si on avait pas la démo, tous les jeux dont on parle aussi n'aurait jamais pu naitre comme ils sont.

GT Pour la démo.

Oui, dans une optique de production de démo peut être, techniquement le ST a pu faire très fort, voire plus que les Amiga. Maintenant on en a déjà discuté ensemble dans un autre thread, ça s'est fait au détriment de la créativité et du design (les Ataristes en sont restés au stade de "j'ai la plus grosse et je te le prouve"). Et au fait, tu as testé un Mega STE à 16 MHz avec cache ?

Mais toutes ces techniques n'ont pas suffit à combler les lacunes des applis pro (Spectrum 512 ne pouvait que se subvenir à lui même, et ne permet pass forcément des jeux en 512 couleurs). Pour ça le hardware et le mode HAM de l'Amiga nous à enfoncé, et permis des jeux comme Unreal (version ST absolument indigeste)...

Kochise

PS :

http://www.grospixels.com/site/unramiga.php
http://www.mobygames.com/game/unreal-/techinfo
http://www.amigachapterone.com/amiga/tests/unreal.htm
...
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

75

arklif :
question happy
C quoi le VBL pour ceux qui vous lisent et qui depuis le debut comprennent rien sens oser le demander ???

et autres chose sur les demos. existe t'il un site qui les listes ou on puisses les DL ??? comme la SoWatt ou autre dont vous fetes references ici.


La Vbl est le raccourci de Vertical Blanking, c'est un signal généré au début de chaque affichage d'image, on se synchronise dessus pour avoir une base de temps et du fait qu'il est généré a chaque début d'affichage on l'utilise pour etre sur que les animations seront joués au bon moment.

Quand on dit qu'un programme tourne en une Vbl cela signifie que chaque cycle du jeu tourne en moins de l'affichage d'une image soit en France, 50 images par secondes.

Donc un programme ultra fluide wink

Pour les démos va donc voir sur Pouet.net ( http://pouet.net ) tu peux y trouver les démos sur toutes les machines existantes, ils on un chouette moteur de recherche qui te permet de chercher par types de démos, par type de machines, etc...

Un site a connaitre.

GT En une Vbl top


avatar
je sais pas depuis que Fadest nous mets de la zik partout dans ses jeux l'univers a été ebranlé (LordKraken)

76

merci !
GT ravit
Euh...
je suis ravis

wink

77

coshise :Pas real-time : la préparation des sprites, vu qu'ils sont en plan sur Atari (c'est certainement possible de faire ça direct sur un Amiga en chunky)


Kochise.... L'AMIGA N'A PAS DE MODE CHUNKY !

Les codeurs amiga ont galerés pendant des années pour trouver une routine de c2p qui boufe le moin de temps machine possible ! La seule machine de commodore qui possède un mode chunky est la cd 32, grace à sa fameuse puce akiko, puce qui n'a jamais été integré sur une carte computer amiga !



TNLTN rabbit

78

Oui, enfin abus de langage, chunky, je veux dire pas le mode plan de l'Atari smile

GT fatigué...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

79

Kochise :
Ah oui, les sons digitalisés de IK+. Alors c'est pas lui le premier jeu avec sons digitalisés ? Je sait plus, mais IK+ avec une particularité technique...

Kochise

Salut,
Les sons de IK+ viennet d'un film, au depart je croyer que c'etait le gars qui c'etait amuser , mais non, quand j'ai le film j'ai compris grin

Je vous donne le lien vers le film, c'est a voir c'est un cult wink
http://www.allocine.fr/film/fichefilm_gen_cfilm=13264.html
Mort clinique 3!