                       A M O S   C A P A C I T I E S

================
= Introduzione =
================

Il programma AMOS CAPACITIES, versione 2.0, è stato scritto in linguaggio
AMOS Basic v1.4.
In questo file ci si propone di dare una spiegazione alle operazioni
effettuate ed alla logica seguita per arrivare a tale risultato.


=============================
= Parte I : Funzioni svolte =
=============================

AMOS Capacities effettua le seguenti operazioni:

1) Visualizza una pagina grafica con dimensioni 320x200x16 colori;
2) Esegue una musica in formato AMOS;
3) Visualizza uno sprite ad 8 colori;
4) Consente di muovere tale sprite tramite il joystick nelle 4
   direzioni base (destra-sinistra-alto-basso);
5) Anima il movimento dello sprite articolandolo secondo 4 frames
   (fotogrammi) per direzione ed 1 frame per posizione statica
   (quando non c'è movimento del joystick);
6) Limita il movimento dello sprite al rettangolo con vertici
   (162,52) (400,215), evitando che tale sprite fuoriesca dallo schermo;
7) Causa, alla pressione del tasto sinistro del mouse o di quello del
   joystick, la scomparsa in dissolvenza dello schermo;
8) Effettua, alla fine del programma, una sfumatura del sonoro dal
   volume massimo a quello minimo.


=============================
= Parte II : Moduli esterni =
=============================

Tutto il codice di tale programma è stato scritto utilizzando l'editor
dell'AMOS.
Tuttavia il programma ha la necessità di utilizzare dei moduli esterni,
in gran parte costituenti grafica e sonoro che verranno impiegati nel
programma.
Tali moduli sono costituiti da files registrati su di un disco che si
adattano al formato delle informazioni che l'AMOS può trattare.
Questi sono i moduli utilizzati per AMOS CAPACITIES:

a) Una schermata disegnata con il DELUXE PAINT IV della Electronic Arts,
   registrata su disco con il nome di "NavyFalcon.pic".
b) Una musica costituita da un "module" (spartito+strumenti) registrato
   con il SOUNDTRACKER, e successivamente convertito in formato AMOS
   tramite il programma "SOUND_TRACKER2_1.AMOS" sotto il nome di
   "Music.abk".
c) Un set di sprites in formato AMOS, 8 colori, ritagliati da una schermata
   in formato DPAINT grazie al programma "SPRITE_GRABBER.AMOS", e registrato
   sotto il nome di "Frog_Sprites.abk".


=========================
= Parte III : Il codice =
=========================

Per creare un programma in AMOS Basic, bisogna:
- caricare l'editor dell'AMOS;
- scrivere il codice in pseudo-linguaggio AMOS;
- testarlo;
- caricare il compilatore AMOS;
- compilare il programma e registrarlo in forma eseguibile.

Il nostro programma principale è stato suddiviso in procedure.
Una procedura è una routine che può essere richiamata più volte nell'ambito
del programma.
Si suole suddividere il programma in procedure innanzitutto per dare una
maggiore schematizzazione al programma stesso, ed inoltre per evitare di
dover riscrivere più volte una stessa parte di programma in quanto, magari,
essa deve essere utilizzata più volte nell'ambito del programma.
Nel nostro caso il programma è stato suddiviso in procedure soltanto per
schematizzare maggiormente le funzioni: non ce ne sarebbe bisogno in quanto
ognuna di queste procedure viene richiamata una sola volta nell'ambito del
programma.


===================================
= Parte IV : Variabili utilizzate =
===================================



================================
= Parte Va : La procedura APRI =
================================

Ecco un listato della routine:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Procedure APRI
'
Rem *****************************************************
Rem * Caricamento della musica, apertura dello schermo, *
Rem * caricamento della schermata nello schermo aperto, *
Rem * caricamento del blocco di sprites ed attivazione  *
Rem * della musica.                                     *
Rem *****************************************************
'
Screen Close 0
Load "AMOS-DATA:Music/Music.abk"
Screen Open 1,320,200,16,Lowres
Load Iff "AMOS_DATA2:Pictures/NavyFalcon.pic",1
Load "AMOS_DATA2:Sprites/Frog_Sprites.abk"
Music 1
End Proc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

======================================
= Parte Vb : La procedura VISUALIZZA =
======================================

Ecco un listato della routine:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Procedure VISUALIZZA
'
Rem ****************************************************** 
Rem * Scomparsa del puntatore del mouse, visualizzazione * 
Rem * dello schermo (1) ed attribuzione dei colori dello * 
Rem * sprite.                                            * 
Rem ****************************************************** 
'
Hide On 
Screen Display 1,128,52,320,200
Dim FROGCOL(8)
FROGCOL(1)=$80
FROGCOL(2)=$A0
FROGCOL(3)=$C0
FROGCOL(4)=$FFF
FROGCOL(5)=$0
FROGCOL(6)=$40
FROGCOL(7)=$60
For I=17 To 23
 Colour I,FROGCOL(I-16)
Next I
End Proc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

=====================================
= Parte Vc : La procedura MUOVIRANA =
=====================================

Ecco un listato della routine:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Procedure MUOVIRANA
'
Rem *******************************************************
Rem * Visualizzazione dello sprite al punto di coordinate *
Rem * (161,138), movimento dello sprite tramite joystick  *
Rem * nel rettangolo con vertici (162,52) (400,215) ed    *
Rem * animazione di tale sprite, articolata in 4 frames   *
Rem * per direzione ed 1 per posizione ferma, grazie alla *
Rem * routine AMAL (AMos Animation Language).             *
Rem *******************************************************
'
X=161
Y=138
A$="Anim 0,(1,2)(2,2)(3,2)(4,2)"
B$="Anim 0,(5,2)(6,2)(7,2)(8,2)"
C$="Anim 0,(9,2)(10,2)(11,2)(12,2)"
D$="Anim 0,(13,2)(14,2)(15,2)(16,2)"
SW=0
Amal 1,"Anim 0,(1,2)"
Repeat 
 Amal On 1
 Sprite 1,X,Y,
 If Jright(1)=True and X<401 : X=X+1 : If SW<>1 : Amal 1,A$ : SW=1 : End If 
 Else 
  If Jleft(1)=True and X>162 : X=X-1 : If SW<>2 : Amal 1,B$ : SW=2 : End If 
  Else 
   If Jup(1)=True and Y>52 : Y=Y-1 : If SW<>3 : Amal 1,C$ : SW=3 : End If 
   Else 
    If Jdown(1)=True and Y<216 : Y=Y+1 : If SW<>4 : Amal 1,D$ : SW=4 : End If 
    Else 
     If SW<>0
      If SW=1 : Amal 1,"Anim 0,(1,2)" Else 
       If SW=2 : Amal 1,"Anim 0,(5,2)" Else 
        If SW=3 : Amal 1,"Anim 0,(9,2)" Else Amal 1,"Anim 0,(13,2)" : End If 
       End If 
      End If 
     SW=0
     End If 
    End If 
   End If 
  End If 
 End If 
Until Fire(1)=True
Amal Off 1
End Proc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

=========================================
= Parte Vd : La procedura CHIUDISCHERMO =
=========================================

Ecco un listato della routine:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Procedure CHIUDISCHERMO
'
Rem *****************************************************
Rem * Scomparsa dello sprite, dissolvenza dello schermo *
Rem * e sua chiusura.                                   *
Rem *****************************************************
'
Sprite Off 0
Fade 3 : Wait 45
Screen Close 1
End Proc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

=======================================
= Parte Ve : La procedura SFUMAMUSICA =
=======================================

Ecco un listato della routine:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Procedure SFUMAMUSICA
'
Rem ************************************************** 
Rem * Sfumatura della musica dal volume massimo (63) * 
Rem * al volume 0 in passi di 7 (63,56,49,...,7,0) e * 
Rem * spegnimento finale.                            * 
Rem ************************************************** 
'
For I=0 To 63 Step 7
 Volume 63-I : Wait 5
Next I
Music Off 
End Proc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

======================================
= Parte VI : Il programma principale =
======================================

Il programma principale si limita a richiamare, in un certo ordine, le varie
procedure di cui sopra semplicemente indicandone il nome.
Un programma principale deve terminare con la clausola END, mentre una
procedura con END PROC.

Ecco il listato del programma principale:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Rem ************************ 
Rem * Programma Principale * 
Rem ************************ 
'
APRI
VISUALIZZA
MUOVIRANA
CHIUDISCHERMO
SFUMAMUSICA
End 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



                                                            - THE SPIDER 1992
