AMOS dislikes "thens" but I still love it / L'AMOS non va matto per i then, ma gli voglio bene lo stesso


ENGLISH

Coding Pacuvia's Amiga version with AMOS Pro 2.0 has been a nice journey, but I stumbled in a couple of strange things that bugged me at first.

1) There are major differences in the way AMOS handles nested conditions (IF/THEN/ELSE/ENDIF), when compared to generic QuickBasic-like syntax. As you may see in this example, whenever you open a nested condition in Amos, you MUST omit "then", which is still accepted in a simple not-nested condition. But wait... there's more! Each condition inside a nested condition MUST be nested too, no matter how short the line is! These rules led me to a major "syntax error party", when I tried to feed Amos with my original C64 XC-Basic code. Converting all nested conditions in the Amos format took me some time... check this sample code:

QUICKBASIC-LIKE-SYNTAX

IF INSTR(i$, "gate") > 0 AND L = 1 THEN
   IF NDRO = 0 THEN
      PRINT "The bars weren't thick enough to prevent me to peek into the farmyard."
      IF PUNTI(0) = 0 THEN PUNTI(0) = 5
      RETURN
   END IF
   IF NDRO = 1 THEN GOSUB LIBERTA:RETURN
END IF

Now, look at the same code after the... "Amos treatment"! :-P

AMOS SYNTAX

If Instr(I$,"gate")>0 and L=1
   If NDRO=0
      Print "The bars weren't thick enough to preventme to peek into the farmyard."
      If PUNTI(0)=0
         PUNTI(0)=5
      End If 
      Return 
   End If 
   If NDRO=1
      Gosub LIBERTA
      Return 
   End If 
End If

2) I chose a bunch of digital freeware sound effects to play in the Amiga version. The whole conversion process was rather long but easy to execute... until the very last step! I converted the effects to 8bit mono wavs through Audacity. I downgraded them all to 11Khz quality, except "dog's growl", which I kept at 22Khz: the 11Khz growl sounded just like a muddy, confused noise. I converted all the 8bit wavs to Amiga's proprietary 8SVX format through a now-freeware editor called Octamed Sound Studio (for the record, it requires Kickstart 2.0).
In order to play the effects in an Amos program, the most comfortable solution is packing the sounds in a sample bank file, where samples can be identified (and called) by progressive numbers. The Amos package features a "Sample Bank Editor", but I ran in playback issues when working with the original AMOS 1.3. I had started my work on Pacuvia's Amiga port under AMOS 1.3 (mainly for stubborn "sentimental" reasons), and there's nothing in my simple game that would need AMOS Pro 2.0' extended features. Unfortunately, you cannot really trim and handle sound effects that well in Sample Bank Editor v.1.3. I couldn't understand why each effect presented an annoying "pop" sound when played in the game... and I couldn't get rid of it, no matter how hard I tried!
Long story short, only Sample Bank Editor 2.0 allowed me to micromanage "ins" and "outs" for each sound effect to avoid the issue, so - believe it or not - I moved the whole project to AMOS Pro 2.0 just for this reason!!!
:-DDDD
Of course I did not regret this decision at all, because AMOS Pro 2.0 is the final, official and most complete AMOS environment, and now it's even open source. So, there's no sensible reason to stick with older AMOS versions nowadays. Thank you, my dear "pop" noise, you opened my eyes... and ears!
:-P

**************************

ITALIANO

Programmare la versione Amiga di Pacuvia con l'AMOS Pro 2.0 è stato un bel viaggio, ma sono incappato in un paio di stranezze che mi hanno dato dei piccoli grattacapi.

1) C'è una grossa differenza tra il modo in cui l'AMOS gestisce le istruzioni condizionali annidate (IF/THEN/ELSE/ENDIF), se lo si paragona alla sintassi generica stile QuickBasic. Come potete vedere in questo esempio, ogni volta che sia apre un'istruzione condizionale annidata in Amos, BISOGNA omettere "then" (che rimane comunque accettato al di fuori di un'annidata). E non è finita! Ogni condizione all'interno di un'annidata DEV'ESSERE anche annidata, non importa quanto sia breve! Queste regole mi hanno invitato a un party epocale di "syntax error", quando ho provato a proporre all'Amos il mio codice originale XC-Basic per C64. Convertire tutte le istruzioni condizionali annidate nel formato Amos ha richiesto un bel po' di tempo... Guardate questo esempio immaginario:

SINTASSI TIPO QUICKBASIC

IF INSTR(i$, "muro") > 0 AND L = 1 THEN
     IF MASTINO = 1 THEN PRINT "Il mastino voleva mangiarmi crudo!"
     IF PUNTI(0) = 0 THEN PUNTI(0) = 5
     RETURN
     END IF
IF MASTINO = 0 THEN GOSUB LIBERTA:RETURN
END IF

Ora guardate lo stesso codice dopo il "trattamento Amos"! :-P

AMOS SYNTAX

If Instr(I$,"muro")>0 and L=1
   If MASTINO=1
     Print "Il mastino voleva mangiarmi crudo!"
           If PUNTI(0)=0
           PUNTI(0)=5
           End If
     Return
     End If
  If MASTINO=0
    Gosub LIBERTA
    Return
    End If
End If

2) Ho scelto un po' di effetti sonori digitali freeware da riprodurre nella versione Amiga. Il processo di conversione è stato piuttosto lungo ma facile da gestire... almeno fino all'ultimo passaggio! Ho prima convertito gli effetti a wav mono 8bit con Audacity. Li ho poi abbassati di qualità fino a 11Khz (con l'eccezione del ringhio del cane, che ho mantenuto a 22Khz perché a 11Khz era così confuso da risultare non intellegibile come tale). Dopo ho convertito tutti i wav a 8bit nel formato proprietario dell'Amiga, 8SVX, usando un editor Amiga ora freeware, Octamed Sound Studio (che richiede il Kickstart 2.0, per la cronaca).
Per riprodurre gli effetti in un programma Amos, la maniera più comoda è impacchettarli in un "sample bank file", dal quale i suoni campionati possono essere richiamati con un numero ordinale che li identifica. I pacchetti Amos comprendono un "Sample Bank Editor", ma mi sono imbattuto in disturbi lavorando con l'AMOS 1.3. Avevo infatti iniziato la mia versione Amiga di Pacuvia con l'AMOS 1.3 (principalmente per cocciute ragioni "sentimentali"), e non c'era nulla nel mio semplice gioco che avrebbe avuto bisogno delle funzioni estese dell'AMOS Pro 2.0. Il problema è che non puoi limare e gestire come si deve gli effetti sonori con il Sample Bank Editor 1.3. Non riuscivo a capire perché ogni effetto fosse riprodotto nel gioco con un fastidioso "pop" iniziale... e non riuscivo ad aggirarlo, per quanto ci provassi! Per farla breve, solo il Sound Bank Editor 2.0 mi permetteva di gestire gli "in" e "out" di ogni effetto sonoro per evitare il problema, quindi - ci crediate o no - ho trasferito l'intero progetto all'AMOS Pro 2.0 solo per questa ragione!!!
:-DDDDD
Naturalmente non mi sono affatto pentito di questa decisione, perché l'AMOS Pro 2.0 è l'ultima versione ufficiale dell'ambiente AMOS, ora persino open source. Insomma, non c'è oggi alcuna ragione sensata per rimanere ancorati a versioni più vecchie dell'AMOS. Grazie, caro il mio "pop", perché mi hai aperto gli occhi... e le orecchie!
:-P

Get The Daring Rescue of Pacuvia the Sheep

Comments

Log in with itch.io to leave a comment.

Wrote a little article about your devlog:

https://www.amiga-news.de/en/news/AN-2023-02-00015-EN.html

A comment of the German news item says: 'then' is possible. In case you are interested:

https://www.amiga-news.de/de/news/comments/thread/AN-2023-02-00015-DE.html

(2 edits)

Hi, thanks for your post! :-)
Of course AMOS allows "then" in a simple condition OUTSIDE a nested condition, but once you've opened a nested condition, "then" is doomed! :-DDDD
I'll edit my text to be more precise.