AMOS Pro community 2020.1 / Exemples de code Amos

Forum Amiga Coding AMOS Pro community 2020.1 / Exemples de code Amos

  • Ce sujet contient 72 réponses, 9 participants et a été mis à jour pour la dernière fois par Alain.Treesong, le il y a 6 mois et 3 semaines.
  • Créateur
    Sujet
  • #75812
    Alain.Treesong
      • Level 5
      • Messages : 224

      Bonsoir,

      Sur AmigaImpact j’ai uploadé à la demande d’un membre du forum une version d’Amos qui peut servir de référence au développement sur Amiga 500 avec ce langage.

      https://www.dropbox.com/s/nch9p4fj59lw4k4/AMOSPro_Community_2020_1.adf?dl=0

      Je l’avais indiqué dans un thread déjà mais il est possible que cela soit passé inaperçu sur ce forum car ce n’était le sujet du thread (ou alors cela n’intéresse pas grand monde…)

      Donc je crée ce thread sur ce forum pour en parler plus en détail. J’ai par ailleurs dans l’idée d’ajouter de temps en temps quelques bouts de code qui serviront d’exemples pour les personnes éventuellement intéressées par du dev avec ce langage avec comme plateforme cible plutôt un Amiga ECS/OCS (généralement un A500 vanille).

      J’ai ajouté un progamme sur le thread d’Amiga Impact que je reporte ici également pour toucher le plus de personnes (si jamais il y en a :-)).

      Donc voici un petit programme qui après compilation fera tourner sur l’axe Y en 50 fps un triangle avec un effet d’ombre. Ce progamme est à utiliser avec la version 2020.1 d’Amos paramétrée avec les extensions incontournables selon moi.

      Ceux qui veulent en parler ou poster d’autres codes n’hésitent pas.

      https://www.dropbox.com/s/jna6hf1o8r981fu/AmosPro2_triangle.png

      Le code :

      ‘ Flat shadow rotating Y triangle by Aghnar/Agima in dec. 2019
      Screen Open 0,320,256,8,Lowres
      Flash Off : Curs Off : Hide : Degree
      Paper 0 : Cls : Palette $0,$666,$888,$BBB,$AAA,$BBB,$CCC,$EEE
      Pen 2
      Double Buffer : Autoback 0
      Blitter Copy Limit 0,48 To 320,208
      Dim C(359),S(359) : For I=0 To 359 : C(I)=256*Cos(I) : S(I)=256*Sin(I) : Next
      X1=64 : Y1=-32 : Z1=0 : X2=-64 : Y2=-32 : Z2=0 : X3=0 : Y3=74 : Z3=0
      XE1=0 : YE1=0 : XE2=0 : YE2=0 : XE3=0 : YE3=0
      X=0 : Y=0 : Z=0 : T=0 : Timer=0
      Do
      Blitter Copy 0,1 To 0,2
      Blitter Copy 0,0 To 0,1
      Add T,1 : If T=10 : Locate 1,26 : Print 500/Timer; » fps » : Timer=0 : T=0 : End If
      Add A,-2,0 To 359
      X=X1*C(A)+Z1*S(A) : Y=Y1*256 : Z=-X1*S(A)+Z1*C(A) : CZ=Z+256*256
      Blitter Clear 0,0
      XE1=160+(X*256)/CZ : YE1=100+(Y*256)/CZ
      X=X2*C(A)+Z2*S(A) : Y=Y2*256 : Z=-X2*S(A)+Z2*C(A) : CZ=Z+256*256
      XE2=160+(X*256)/CZ : YE2=100+(Y*256)/CZ
      X=X3*C(A)+Z3*S(A) : Y=Y3*256 : Z=-X3*S(A)+Z3*C(A) : CZ=Z+256*256
      XE3=160+(X*256)/CZ : YE3=100+(Y*256)/CZ
      Turbo Draw XE1,YE1 To XE2,YE2,1,-1
      Turbo Draw XE2,YE2 To XE3,YE3,1,-1
      Turbo Draw XE3,YE3 To XE1,YE1,1,-1
      Blitter Fill 0,0
      Screen Swap : Wait Vbl
      Loop

       

      Ciao

      Aghnar

       

    Affichage de 15 réponses de 16 à 30 (sur un total de 72)

    Partager sur vos réseaux sociaux préférés :
    Facebooktwitterredditpinterestlinkedintumblrmail

    • Auteur
      Réponses
    • #117468
      Alain.Treesong
        • Level 5
        • Messages : 224

        Voila un nouveau petit code source extrait de la démo : https://www.pouet.net/prod.php?which=87666

        Il s’agit de l’étoile violette. Simple : petite rotation petite ombre.

        Le code à copier dans Amos Community:

        ‘ Simple rotating flat star
        ‘ From the demo « Happy New Year 2021 » / Agima dec 2020
        ‘ A bit reworked to be standalone

        ‘ in 50fps on vanilla A500 of course
        ‘ Aghnar ; may 21

        Set Buffer 32

        Dim C(1024),S(1024)

        Global NDP,C(),S()
        Global CX,CY,ANG
        Global T
        Global X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5
        Global X6,Y6,X7,Y7,X8,Y8,X9,Y9,X0,Y0
        Global XE1,YE1,XE2,YE2,XE3,YE3,XE4,YE4,XE5,YE5
        Global XE6,YE6,XE7,YE7,XE8,YE8,XE9,YE9,XE0,YE0

        Degree

        For I=0 To 1023
        ANG=I : Rem ((1024*I)/360) avec i (0,359)
        C(I)=Qcos(ANG,256) : S(I)=Qsin(ANG,256)
        Next I

        Screen Open 0,320,256,4,Lowres
        Flash Off : Curs Off : Hide On
        Palette $214,$519,$103,$519
        Paper 0 : Cls 0 : Pen 1 : Ink 1

        Double Buffer : Autoback 0

        ANG=0
        CX=160 : CY=128

        ‘ Definition of the star
        NDP=10
        Palette $214,$519,$103,$519

        X0=170 : Y0=0
        X1=69 : Y1=49
        X2=52 : Y2=162
        X3=-26 : Y3=81
        X4=-138 : Y4=99
        X5=-85 : Y5=0
        X6=-137 : Y6=-100
        X7=-26 : Y7=-81
        X8=53 : Y8=-162
        X9=69 : Y9=-49

        CX=160
        CY=128

        Repeat

        Blitter Clear 0,0,64,30-128+CY To 256,224-128+CY
        Blitter Clear 0,1,64,30-128+CY To 256,224-128+CY

        Add ANG,1,0 To 1023
        CA=C(ANG)
        SA=S(ANG)

        XE0=X0*CA-Y0*SA
        YE0=X0*SA+Y0*CA
        XE0=CX+XE0/512
        YE0=CY+YE0/512

        XE1=X1*CA-Y1*SA
        YE1=X1*SA+Y1*CA
        XE1=CX+XE1/512
        YE1=CY+YE1/512

        XE2=X2*CA-Y2*SA
        YE2=X2*SA+Y2*CA
        XE2=CX+XE2/512
        YE2=CY+YE2/512

        XE3=X3*CA-Y3*SA
        YE3=X3*SA+Y3*CA
        XE3=CX+XE3/512
        YE3=CY+YE3/512

        XE4=X4*CA-Y4*SA
        YE4=X4*SA+Y4*CA
        XE4=CX+XE4/512
        YE4=CY+YE4/512

        XE5=X5*CA-Y5*SA
        YE5=X5*SA+Y5*CA
        XE5=CX+XE5/512
        YE5=CY+YE5/512

        XE6=X6*CA-Y6*SA
        YE6=X6*SA+Y6*CA
        XE6=CX+XE6/512
        YE6=CY+YE6/512

        XE7=X7*CA-Y7*SA
        YE7=X7*SA+Y7*CA
        XE7=CX+XE7/512
        YE7=CY+YE7/512

        XE8=X8*CA-Y8*SA
        YE8=X8*SA+Y8*CA
        XE8=CX+XE8/512
        YE8=CY+YE8/512

        XE9=X9*CA-Y9*SA
        YE9=X9*SA+Y9*CA
        XE9=CX+XE9/512
        YE9=CY+YE9/512

        Turbo Draw XE0,YE0 To XE1,YE1,1,-1
        Turbo Draw XE1,YE1 To XE2,YE2,1,-1
        Turbo Draw XE2,YE2 To XE3,YE3,1,-1
        Turbo Draw XE3,YE3 To XE4,YE4,1,-1
        Turbo Draw XE4,YE4 To XE5,YE5,1,-1
        Turbo Draw XE5,YE5 To XE6,YE6,1,-1
        Turbo Draw XE6,YE6 To XE7,YE7,1,-1
        Turbo Draw XE7,YE7 To XE8,YE8,1,-1
        Turbo Draw XE8,YE8 To XE9,YE9,1,-1
        Turbo Draw XE9,YE9 To XE0,YE0,1,-1

        Blitter Fill 0,0,64,30-128+CY,256,220-128+CY

        ‘ Simple shadow by translation and redraw on the
        ‘ second bitplane. Other implem are possible…

        XE0=XE0+8 : YE0=YE0+8
        XE1=XE1+8 : YE1=YE1+8
        XE2=XE2+8 : YE2=YE2+8
        XE3=XE3+8 : YE3=YE3+8
        XE4=XE4+8 : YE4=YE4+8
        XE5=XE5+8 : YE5=YE5+8
        XE6=XE6+8 : YE6=YE6+8
        XE7=XE7+8 : YE7=YE7+8
        XE8=XE8+8 : YE8=YE8+8
        XE9=XE9+8 : YE9=YE9+8

        Turbo Draw XE0,YE0 To XE1,YE1,2,-2
        Turbo Draw XE1,YE1 To XE2,YE2,2,-2
        Turbo Draw XE2,YE2 To XE3,YE3,2,-2
        Turbo Draw XE3,YE3 To XE4,YE4,2,-2
        Turbo Draw XE4,YE4 To XE5,YE5,2,-2
        Turbo Draw XE5,YE5 To XE6,YE6,2,-2
        Turbo Draw XE6,YE6 To XE7,YE7,2,-2
        Turbo Draw XE7,YE7 To XE8,YE8,2,-2
        Turbo Draw XE8,YE8 To XE9,YE9,2,-2
        Turbo Draw XE9,YE9 To XE0,YE0,2,-2

        Blitter Fill 0,1,64,30-128+CY,256,220-128+CY

        Screen Swap
        Wait Vbl

        Until Mouse Key=1

         

        A la prochaine.

         



        #120403
        Alain.Treesong
          • Level 5
          • Messages : 224

          Salut,

          Pour que cela soit plus simple, j’ai mis les deux sources postés dans un repo git :

          https://github.com/alain-treesong/amiga_coding_in_amos

          Donc dans chaque répertoire snippet_xxx, les sources sont dispos en .amos (format binaire) et en .amo (texte).

          A+

          #120898
          Alain.Treesong
            • Level 5
            • Messages : 224

            Nouveau petit exemple d’un scrolling dual playfield : https://github.com/alain-treesong/amiga_coding_in_amos/tree/main/snippet-003_simpleDualPlayfield

            Les graphismes sont de Ansimuz  : https://ansimuz.itch.io/

            Il est très simple de faire un dual playfield, technique très utilisée dans les jeux (Chuck Rock, Shadow of the beast…).

            Dans le prochain exemple, je repartirai de ce code et ajouterai un troisième plan animé.

            Ciao

            #121278
            Alain.Treesong
              • Level 5
              • Messages : 224

              Salut,

              Comme prévu, nouvel exemple de code avec 3 plans en parallèle, le plus éloigné étant fixe mais animé. Pour voir ce que cela donne :

              Source et explication ici :

              https://github.com/alain-treesong/amiga_coding_in_amos/tree/main/snippet-004_threePlayfield

              #121281
              demether
                • Level 10
                • Messages : 1168

                trés impressionnant !

                #121347
                Staff
                Jim Neray
                  • Level 22
                  • Messages : 7235

                  Nickel ! Ca c’est le genre de sujet qui n’a pas l’air très actif mais qui est une mine d’or en devenir pour celui qui va passer par là et qui souhaite se mettre à Amos :good:

                  A500 - A500 Plus - A600 HD - A1200 - A2000 - A3000 - A4000T - CD32 - C=64 - 1040STE - ...
                  Mon Amiga 500 Plus : A590, 2MB Chip, 2MB Fast, HD 1,2GB, Floppy ext.
                  Mon Amiga 1200 : Blizzard 1260, 2MB Chip, 256MB Fast, HD 80GB, Overdrive CD

                  #124346
                  DarkN3m0
                    • Level 4
                    • Messages : 127

                    hello

                     

                    ou puit-je trouver la table des scan codes completes ?

                    Amiga coder (AMOS PRO, 68k)

                    Cthulhu project WIP : (retro Dungeon crawler )
                    https://www.youtube.com/channel/UCDfyk0tscuVFcC7xo6tdhyA

                    PATREON : https://www.patreon.com/DarkN3mo

                    #131245
                    Alain.Treesong
                      • Level 5
                      • Messages : 224

                      Après une petite pause Amiga de quelques mois, voici un nouvel exemple d’un code sur Amiga en Amos : cette fois des vector balls :

                      Les sources sont disponibles ici :

                      https://github.com/alain-treesong/amiga_coding_in_amos/tree/main/snippet-005_vectorBalls

                      A la prochaine

                      #131429
                      nuts-amande
                        • Level 1
                        • Messages : 18

                        Je me suis mis à l’Amos il y a peu de temps et c’est toujours agréable de trouver des exemples.

                        Je suis sur l’ancienne version pour le moment, existe-t-il des instructions équivalentes aux « blitter _action_ »  que je peux voir dans ce code ?

                        <script src= »moz-extension://bdbe4cd6-c171-4511-950c-e5e4fde79f5e/inject-scripts/searchvideos.js » async= » »></script>

                        #131479
                        Alain.Treesong
                          • Level 5
                          • Messages : 224

                          Tiens, il y a des personnes qui lisent ce thread. Etonnant ;-)

                          L’ancienne version d’amos est à peu près la même chose (en moins bien) qu’amos pro. Il existe donc la même extension (amcaf) qui ajoute les instructions blitter xxx.

                          Vous devriez quand même passer à amos pro car amos pro compiler apporte par contre de vrais améliorations sur le code. Par exemple quand vous multipliez ou divisez par une puissance de 2, le compilateur effectue une décalage logique plutot qu’une vraie multiplication. C’est pour cela que dans les exemples donnés, généralement quand c’est possible je mul / div par 256, 16 etc

                          Par ailleurs j’ai fait une version contenant amos pro, un patch qui enlève un bug sur le dual playfield (qui n’existe pas dans votre version) et les deux extensions importantes du langage. C’est disponible en première page du github (voir le lien dans la description) : https://github.com/alain-treesong/amiga_coding_in_amos

                           

                           



                          #131490
                          DarkN3m0
                            • Level 4
                            • Messages : 127

                            yes je lis ce thread !  car je me suis remis a Amospro y’a quelques moi :)  Quel bohneur !   Merci pour tes infos

                            Amiga coder (AMOS PRO, 68k)

                            Cthulhu project WIP : (retro Dungeon crawler )
                            https://www.youtube.com/channel/UCDfyk0tscuVFcC7xo6tdhyA

                            PATREON : https://www.patreon.com/DarkN3mo

                            #131601
                            nuts-amande
                              • Level 1
                              • Messages : 18

                              Impecc’, j’ai trouvé et installé Amcaf, je pensais que c’était lié à la version AmosPro Community. Du coup j’ai testé le triangle et ça fonctionne bien :)
                              Bon pour le moment, les fonctions blitter restent obscures et mon AmosPro n’a rien dans l’aide à leur propos.

                              J’ai trouvé Amcaf à cette Url:
                              https://www.exotica.org.uk/wiki/AMOS_extensions
                              Il y aurait d’autres extensions must-have à installer/tester ?

                              Je m’attaquerai aux dualplayfield sous peu :)
                              Pour l’instant je me bats avec l’initialisation de la souris dans un pong que j’ai codé, j’ai une raquette qui ne parcourt pas l’intégralité de l’écran :(

                              Bon en tout cas je suis preneur de ces petits posts sur l’Amos :)

                              #131787
                              nuts-amande
                                • Level 1
                                • Messages : 18

                                Bon, je vais faire mon chiant :)
                                je viens de coder l’étoile…on est bien d’accord que la déclaration des variables est inutile ? (en global en plus alors qu’il n’y a pas de procédure utilisée).
                                La variable T ne sert pas.
                                Il y a double déclaration de la palette et du centre de l’écran :)
                                Le cls 0 est suffisant, pas besoin du paper, ink, pen.
                                C’est là qu’on voit les limites de l’éditeur, un IDE actuel mettrait des warnings là-dessus. (Ça le fait d’ailleurs dans AOZ ?)
                                Si je note tout ça, c’est de façon pédagogique, ça me permet de comprendre ce qui est utile ou pas, ça aide à comprendre ce que font les commandes, ce n’est absolument pas pour critiquer le code, ça me fait au contraire des petits TP :)

                                #131811
                                Alain.Treesong
                                  • Level 5
                                  • Messages : 224

                                  C’est bien d’utiliser le code et de le critiquer d’ailleurs.

                                  L’ensemble du code proposé est fait à titre d’exemples et n’a pas la prétention d’être parfait, juste très bon ;-)

                                  L’étoile est extraite d’une démo, c’est pourquoi tout n’est pas utile comme la déclaration de T qui servait à mesure les FPS, code que j’ai enlevé pour réduire la taille de l’exemple. C’est similaire pour tes autres remarques.

                                  Puisque tu parles détection d’erreur à la sonar et bonne pratique, c’est mieux de déclarer les variables et encore mieux de les mettre en global quand c’est possible pour des raisons de perf et de réutilisation (éco mémoire). Le code de tracé de l’étoile est dans une procédure dans la démo.

                                  Enfin je t’invite à utiliser Amos pro comunity (que tu pourras étendre avec d’autres extensions) car le dual playfield horizontal déconne avec ta version (que je suppose non patchée) dans certains cas (position horizontal de l’écran non multiple de 16 il me semble).

                                  Cool que quelqu’un teste ces trucs !

                                   

                                  #131951
                                  nuts-amande
                                    • Level 1
                                    • Messages : 18

                                    Effectivement je suis pour aussi la déclaration des variables, c’était pour pinailler :)

                                    Je me suis amusé avec la vitesse de rotation, ça donne des effets assez cool à une certaine vitesse, j’incrémente la vitesse à chaque tour…

                                    J’ai récupéré la dernière version d’AmosUnity, ça tourne bien seul, j’ai la souris qui disparaît dans certains menus…mais surtout je n’arrive pas à ajouter d’extension.
                                    Dans le menu Set Interpreteur j’ai une erreur de disque sur le Load Default Configuration : Disk Error : cannnot load configuration file
                                    Du coup je ne peux pas ajouter d’extension. Je bloque car je ne sais pas ce qu’est le fichier par défaut et si je mets le mien d’AmosPro (ou une copie) cela ne va pas non plus. Mystère…

                                  Partager sur vos réseaux sociaux préférés :
                                  Facebooktwitterredditpinterestlinkedintumblrmail
                                  Affichage de 15 réponses de 16 à 30 (sur un total de 72)
                                  • Vous devez être connecté pour répondre à ce sujet.