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
The Daring Rescue of Pacuvia the Sheep
A sentimental research project for C64, Amiga, MS-Dos, Windows and Tandy Model 100!
Status | Released |
Author | Diduz |
Genre | Interactive Fiction, Adventure |
Tags | 8-Bit, Amiga, Commodore 64, MS-DOS, Narrative, olivetti-m10, Parody, Singleplayer, tandy-model-100 |
Languages | English, Italian |
More posts
- Happy birthday Pacuvia! / Buon compleanno, Pacuvia!Dec 15, 2023
- How to get 1000 extra points! / Come ottenere 1000 punti extra!Sep 26, 2023
- Squeezing Pacuvia into Tandy Model 100 / Come ho spremuto Pacuvia nell'Olivetti...Jul 02, 2023
- Zzap review! / Recensione su Zzap!May 21, 2023
- Bumps on the QB64 road / Cunette sulla strada del QB64Apr 08, 2023
- The MS-DOS scalability mayhemFeb 21, 2023
- The C64 status bar challengeJan 18, 2023
- Walkthrough! / Soluzione!Jan 08, 2023
- Pacuvia gets her first Let's Play :-) / Pacuvia riceve il suo primo Let's PlayDec 30, 2022
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
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.