|
Post by alchemist on Apr 8, 2024 18:54:20 GMT
I see one cross sprite but when I move, the background changes to black .... There is only 1 sprite on the screen. If you are using asm routines, I also need this code to get the game running. Or can you upload a video? linkThis is the ASM routine. The first game will end in a few seconds to test the start of next game, i set some parameters to allow it Remember that the problem appears if the spawning sprite spawns more than six sprites (it must spawn 20) I tried to upload the ASM file but it was encrypted (visualize the following text using BBCode) LD A,(varp) CP 2 JP Z,IMMNAV CP 3 JP Z,CELLE CP 4 JP Z,NAVE ; solo lettura CP 5 JP Z,NAVE ; solo aggiornamento CP 6 JP Z,NAVE ; cerca NAVE nemica ( per il giocatore) e poi elabora CP 7 JP Z,NAVE CP 8 JP Z,RADAR3 CP 9 JP Z,FINALE RET ; *** CARICAMENTO DATI INIZIALI *** CELLE LD DE,56000 ; carica dati iniziali LD HL,MM LD BC,100 LDIR LD DE,57000 LD HL,PCF LD BC,80 LDIR LD DE,55000 LD HL,TPN LD BC,20 LDIR LD DE,55500 LD HL,TPNV4 LD BC,20 LDIR LD A,0 RET MM DEFB 73,3,73,3,10 DEFB 74,2,74,2,10 DEFB 73,30,73,30,10 DEFB 10,8,10,8,10 DEFB 73,12,73,12,10 DEFB 10,13,10,13,10 DEFB 73,20,73,20,10 DEFB 10,20,10,20,10 DEFB 76,10,76,10,10 DEFB 7,16,7,16,10 DEFB 76,22,76,22,10 DEFB 10,16,10,16,10 DEFB 73,8,73,8,10 DEFB 7,23,7,23,10 DEFB 73,24,73,24,10 DEFB 7,10,7,10,10 DEFB 73,16,73,16,10 DEFB 7,4,7,4,10 DEFB 77,16,77,16,10 DEFB 7,29,7,29,10 PCF DEFB 1,3,73,74 DEFB 2,2,74,75 DEFB 3,30,73,74 DEFB 4,8,10,11 DEFB 5,12,73,74 DEFB 6,13,10,11 DEFB 7,20,73,74 DEFB 8,20,10,11 DEFB 9,10,76,77 DEFB 10,16,7,8 DEFB 11,22,76,77 DEFB 12,16,10,11 DEFB 13,8,73,74 DEFB 14,23,7,8 DEFB 15,24,73,74 DEFB 16,10,7,8 DEFB 17,16,73,74 DEFB 18,4,7,8 DEFB 19,16,77,78 DEFB 20,29,7,8 TPN DEFB 1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5 TPNV4 DEFB 1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5 ; *** POSIZIONAMENTO SUI DATI DELLA NAVE *** NAVE LD A,(varr) ; legge il codice NAVE (R) e si piazza sulla relativa prima cella LD DE,56000 CP 1 JP Z,POSIZ DEC A LD B,A LD A,0 MOLT ADD A,5 DJNZ MOLT LD B,A LOOPPOS INC DE DJNZ LOOPPOS ; *** DETERMINAZIONE DELLA OPERAZIONE DA COMPIERE *** POSIZ LD A,(varp) ; legge il codice operazione (P) ; 4 = lettura dati ; 5 = aggiornamento CP 4 JP Z,LEGGI CP 5 JP Z,AGGIOR CP 6 JP Z,RADAR CP 7 JP Z,RADAR2 RET ; *** RICERCA CONTATTO E AGGIORNAMENTO *** RADAR PUSH DE CALL CERCAC POP DE CALL AGGIOR CALL IMMNAV FINETR RET RADAR2 PUSH DE CALL CERCAC2 POP DE CALL AGGIOR CALL IMMNAV FINETR2 RET ; *** LETTURA DATI *** LEGGI LD B,5 LD HL,varf CALL CARICA LD A,0 RET CARICA LD A,(DE) LD (HL),A INC HL INC DE DJNZ CARICA RET ; *** AGGIORNAMENTO DATI *** AGGIOR LD BC,5 LD HL,varf LDIR LD A,(varr) ; piazzamento sulla prima cella supplementare (R codice nave) LD DE,57000 CP 1 JP Z,POSIZ2 DEC A LD B,A LD A,0 MOLT2 ADD A,4 DJNZ MOLT2 LD B,A LOOPOS2 INC DE DJNZ LOOPOS2 ; ora � posizionato sulla prima cella supplementare della nave POSIZ2 INC DE ; nelle successive vanno G e F LD BC,1 LD HL,varg LDIR LD BC,1 LD HL,varf LDIR LD A,(varf) INC A LD (DE),A ; nell'ultima va F+1 LD A,0 RET ; *** IMMAGINE NAVE *** IMMNAV LD A,(varc) SUB 1 LD D,A LD A,(varf) CP D JP M,NV LD D,A LD A,(varc) ADD A,19 CP D JP M,NV LD A,(vard) SUB 1 LD D,A LD A,(varg) CP D JP M,NV LD D,A LD A,(vard) ADD A,11 CP D JP M,NV ; � visibile, vediamo dove va, proviamo il bordo sinistro BS LD A,(varc) SUB 1 LD D,A LD A,(varf) CP D JP Z,BS ; non � al bordo sinistro, vediamo se � sul destro BD LD A,(varf) LD D,A LD A,(varc) ADD A,19 CP D JP Z,BD ; n� bordo sinistro n� destro, vediamo se � sul bordo alto nel mezzo BAM LD A,(vard) SUB 1 LD D,A LD A,(varg) CP D JP Z,BAM ; vediamo se � sul bordo basso nel mezzo BBM LD A,(vard) ADD A,11 LD D,A LD A,(varg) CP D JP Z,BBM ; � totalmente visibile LD A,1 JP FINE BBM LD A,1 JP FINE BAM JP NV BD LD A,(varg) LD D,A LD A,(vard) SUB 1 CP D JP Z,BDA ADD A,12 CP D JP Z,BDB LD A,2 JP FINE BDA JP NV BDB LD A,2 JP FINE BS LD A,(varg) LD D,A LD A,(vard) SUB 1 CP D JP Z,BSA ADD A,12 CP D JP Z,BSB LD A,3 JP FINE BSA JP NV BSB LD A,3 JP FINE NV LD A,0 FINE LD (varb),A LD A,0 RET ; *** ROUTINE CACCIA AL NEMICO *** CERCAC LD A,(varf) LD (62010),A ; valore attuale di F in 62010 LD A,(varg) LD (62011),A ; valore attuale di G in 62011 LD A,(varh) LD B,A ; H nel registro B LD A,(varf) ; F nel registro A CP B JP Z,CCL JP M,ADDF JP SOTF SOTF DEC A ; F diminuito LD (varf),A JP CCL ADDF INC A ; F aumentato LD (varf),A CCL LD A,(vari) LD B,A ; I nel registro B LD A,(varg) ; G nel registro A CP B JP Z,VERIFI JP M,ADDG JP SOTG SOTG DEC A ; G diminuito LD (varg),A JP VERIFI ADDG INC A ; G aumentato LD (varg),A VERIFI LD HL,57004 LD A,1 LD D,A CICVER LD C,(HL); codice nave nemica nel registro C INC HL ; posiziona su G2 LD A,50 CP C ; � affondata? JP Z,PRX ; � affondata, salta questa nave nemica LD A,(varg) ; prossima G nel registro A LD B,(HL) ; riga nave nemica nel registro B CP B ; prossima riga di destinazione = riga nave nemica? JP Z,CFCOL ; vai al confronto colonne LD A,D ; nessun contatto con questa nave nemica CP 10 ; era l'ultima nave nemica? JP Z,NOCONT ; nessun contatto con navi nemiche PRX LD A,D CP 10 JP Z, NOCONT LD B,7 INC D PNNR INC HL DJNZ PNNR ; va sulla prossima nave nemica JP CICVER CFCOL LD A,(varf) ; prossima F nel registro A INC HL ; sposta HL su F2 LD B,(HL); F2 nel registro B CP B ; Fa=F2? JP Z,SCONTRO ; contatto INC B ; F2+1 nel registro B CP B ; Fa=(F2+1)? JP Z,SCONTRO ; contatto INC A ; Fa+1 nel registro A DEC B ; F2 nel registro B CP B ; (Fa+1)=F2? JP Z,SCONTRO ; contatto INC B ; F2+1 nel registro B CP B ; (Fa+1)=(F2+1)? JP Z,SCONTRO ; contatto RDS LD A,D ; nessun contatto con questa nave nemica CP 10 ; era l'ultima nave nemica? JP Z,NOCONT LD B,6 INC D PNNC INC HL DJNZ PNNC ; va sulla prossima nave nemica JP CICVER NOCONT JP VERIFI2 RET ; *** ROUTINE VERIFICA CONTATTO CON NAVI DELLA PROPRIA FLOTTA *** VERIFI2 LD HL,57000 LD A,1 LD D,A CICVER2 LD C,(HL); codice nave nel registro C LD A,(varr) CP C ; � la stessa nave? JP Z,CASOSN ; � la stessa nave INC HL ; posiziona su G2 LD A,C LD A,50 CP C ; � affondata? JP Z,PRX2; � affondata, saltala LD A,(varg) ; prossima G nel registro A LD B,(HL) ; riga nave nel registro B CP B ; prossima riga di destinazione = riga nave? JP Z,CFCOL2 ; vai al confronto colonne LD A,D ; nessun contatto con questa nave CP 10 ; era l'ultima nave? JP Z,NOCONT2 ; nessun contatto con navi stessa flotta PRX2 LD A,D CP 10 JP Z,NOCONT2 LD B,7 INC D PNNR2 INC HL DJNZ PNNR2 ; va sulla prossima nave JP CICVER2 CFCOL2 LD A,(varf) ; prossima F nel registro A INC HL ; sposta HL su F2 LD B,(HL); F2 nel registro B CP B ; Fa=F2? JP Z,FERMA ; contatto INC B ; F2+1 nel registro B CP B ; Fa=(F2+1)? JP Z,FERMA ; contatto INC A ; Fa+1 nel registro A DEC B ; F2 nel registro B CP B ; (Fa+1)=F2? JP Z,FERMA ; contatto INC B ; F2+1 nel registro B CP B ; (Fa+1)=(F2+1)? JP Z,FERMA ; contatto JP ULTNAV CASOSN INC HL INC HL ULTNAV LD A,D ; nessun contatto con questa nave CP 10 ; era l'ultima nave? JP Z,NOCONT2 LD B,6 INC D PNNC2 INC HL DJNZ PNNC2 ; va sulla prossima nave JP CICVER2 NOCONT2 RET ; nessun contatto con navi della stessa flotta FERMA LD A,(62010) ; ripristina F e G precedenti e le copia in H e I LD (varf),A LD (varh),A LD A,(62011) LD (varg),A LD (vari),A RET SCONTRO LD A,(varf) ; "ferma" la nave, in H e I vanno le prossime F e G LD (varh),A LD A,(varg) LD (vari),A ; ora legge i due codici di tipo nave ; variabile agd R codice nave attaccante (1-10), registro C codice nave nemica (1-10) ; i due codici di tipo nave vanno nelle celle 62000 (var. agd R) e 62001 (reg. C) LD HL,55000 LD A,(varr) ; verifica il tipo della nave attaccante (1,2,3,4,5) DEC A CP 0 JP Z,TROV1 LD B,A LOOPT1 INC HL DJNZ LOOPT1 TROV1 LD A,(HL) LD (62000),A ; cella 62000 contiene il tipo della nave attaccante LD HL,55000 LD A,C ; verifica il tipo della nave nemica (1,2,3,4,5) DEC A CP 0 JP Z,TROV2 LD B,A LOOPT2 INC HL DJNZ LOOPT2 TROV2 LD A,(HL) LD (62001),A ; cella 62001 contiene il tipo della nave nemica LD A,(62010) LD (varf),A ; rimette in F il valore attuale LD A,(62011) LD (varg),A ; rimette in G il valore attuale ; determina il tipo di scontro (riga att., colonna dif.) LD HL,TABSC LD A,(62000) DEC A CP 0 JP Z,COLDIF LD B,A LPRGATT LD D,B LD B,5 LPRGAT2 INC HL DJNZ LPRGAT2 LD B,D DJNZ LPRGATT COLDIF LD A,(62001) DEC A CP 0 JP Z,PROSCON LD B,A LOOP3 INC HL DJNZ LOOP3 PROSCON LD A,(HL) ; registro A contiene il tipo scontro CP 1 JP Z,ST ; navi stesso tipo CP 2 JP Z,AIDC ; incrociatore attacca corazzata CP 3 JP Z,AIDCT CP 4 JP Z,AIDS CP 5 JP Z,AIDP CP 6 JP Z,ACDI CP 7 JP Z,ACDCT CP 8 JP Z,ACDS CP 9 JP Z,ACDP CP 10 JP Z,ACTDI CP 11 JP Z,ACTDC CP 12 JP Z,ACTDS CP 13 JP Z,ACTDP CP 14 JP Z,ASDI CP 15 JP Z,ASDC CP 16 JP Z,ASDCT CP 17 JP Z,ASDP CP 18 JP Z,APDI CP 19 JP Z,APDC CP 20 JP Z,APDCT CP 21 JP Z,APDS ST LD A,R AND 1 CP 0 ; levare un punto a FC nave DIF? JP Z,TNB1 ; vai a togliere 1 a FC nave DIF JP TPUAT ; togli un punto a nave ATT AIDC LD A,R AND 3 CP 0 ; levare un punto a nave DIF? JP Z,TNB1 JP TPUAT AIDCT LD A,R AND 7 CP 5 ; levare un punto a nave DIF? JP M,TNB1 JP TPUAT AIDS LD A,R AND 3 CP 0 ; levare un punto a nave DIF? JP Z,TNB1 JP TPUAT AIDP LD A,R AND 3 CP 0 ; levare un punto a nave DIF? JP Z,TNB1 JP TPUAT ACDI LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 ACDCT LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 ACDS LD A,R AND 3 CP 0 JP Z,TNB1 JP TPUAT ACDP LD A,R AND 7 CP 3 JP M,TNB1 JP TPUAT ACTDI LD A,R AND 7 CP 3 JP M,TNB1 JP TPUAT ACTDC LD A,R AND 3 CP 0 JP Z,TNB1 JP TPUAT ACTDS LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 ACTDP LD A,R AND 3 CP 0 JP Z,TNB1 JP TPUAT ASDI LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 ASDC LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 ASDCT LD A,R AND 3 CP 0 JP Z,TNB1 JP TPUAT ASDP LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 APDI LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 APDC LD A,R AND 7 CP 5 JP M,TNB1 JP TPUAT APDCT LD A,R AND 3 CP 3 JP Z,TPUAT JP TNB1 APDS LD A,R AND 3 CP 0 JP Z,TNB1 JP TPUAT TPUAT LD A,(varj); togli un punto alla nave attaccante DEC A CP 0 ; la nave deve affondare? JP Z,AFF1 LD (varj),A; J-1 JP VERIFI2 AFF1 LD A,(varr) LD B,A ; nel registro B il codice nave che affonda per mettere 50 al suo posto LD A,0 LD (varj),A ; J nave attaccante = 0 CALL AFATT JP FINETR TNB1 LD A,C ; ; va a posizionarsi sulla cella che contiene FC della nave nemica LD HL,56000 CP 1 JP Z, VASUJ DEC A LD B,A LD A,0 MOLT3 ADD A,5 DJNZ MOLT3 LD B,A LOOPOS3 INC HL DJNZ LOOPOS3 ; ora HL punta la prima cella della nave, ora deve andare su J VASUJ INC HL INC HL INC HL INC HL ; HL su J LD A,(HL) DEC A CP 0 ; la nave deve affondare? JP Z, AFF2 LD (HL),A; J-1 JP VERIFI2 AFF2 LD B,C ; nel registro B il codice nave che affonda per mettere 50 al suo posto LD A,0 LD (HL),A ; J nave attaccata = 0 CALL AFDIF FSC1 JP VERIFI2 AFATT LD HL,57000 ; vado a mettere nella prima cella sup. della nave il valore 50 (aff.) VRFNV LD A,(HL) CP B ; � il codice nave cercato quello nella cella supplementare? JP Z,AFFOND1 INC HL INC HL INC HL INC HL JP VRFNV ; verifica il prossimo codice nave AFFOND1 LD A,50 LD (HL),A ; affondata LD A,B LD (vark),A ; nella variabila agd K va il codice della nave affondata per il remove RET AFDIF LD HL,57000 ; vado a mettere nella prima cella sup. della nave il valore 50 (aff.) VRFNV2 LD A,(HL) CP B ; � il codice nave cercato quello nella cella supplementare? JP Z, AFFOND2 INC HL INC HL INC HL INC HL JP VRFNV2 ; verifica il prossimo codice nave AFFOND2 LD A,50 LD (HL),A ; affondata LD A,B LD (vark),A ; nella variabile agd K va il codice della nave affondata per il remove RET ; identificativi tipo nave: 1-INC 2-COR 3-CT 4-SOT 5-POR ; tabella tipo scontro TABSC DEFB 1,2,3,4,5 DEFB 6,1,7,8,9 DEFB 10,11,1,12,13 DEFB 14,15,16,1,17 DEFB 18,19,20,21,1 ; ***** NAVI NEMICHE ***** CERCAC2 LD A,(varf) LD (62010),A ; valore attuale di F in 62010 LD A,(varg) LD (62011),A ; valore attuale di G in 62011 LD A,(varh) INC A LD (varh),A ; H aumenta di 1, vediamo I LD A,(varr) ; R codice nave in A CP 2 JP Z,MNAV2 CP 4 JP Z,MNAV4 CP 6 JP Z,MNAV6 CP 8 JP Z,MNAV8 CP 10 JP Z,MNAV10 CP 12 JP Z,MNAV12 CP 14 JP Z,MNAV14 CP 16 JP Z,MNAV16 CP 18 JP Z,MNAV18 CP 20 JP Z,MNAV20 MNAV2 LD HL,57000 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV4 LD HL,57008 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV6 LD HL,57032 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV8 LD HL,57040 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV10 LD HL,57048 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV12 LD HL,57056 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV14 LD HL,57064 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV16 LD HL,57072 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV18 LD HL,57016 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV MNAV20 LD HL,57024 INC HL LD A,(HL) LD (vari),A ; in I la nuova destinazione JP CONTMOV CONTMOV LD A,(varh) LD B,A ; H nel registro B LD A,(varf) ; F nel registro A CP B JP Z,CCL2 JP M,ADDF2 JP SOTF2 SOTF2 DEC A ; F diminuito LD (varf),A JP CCL2 ADDF2 INC A ; F aumentato LD (varf),A CCL2 LD A,(vari) LD B,A ; I nel registro B LD A,(varg) ; G nel registro A CP B JP Z,VERIF3 JP M,ADDG2 JP SOTG2 SOTG2 DEC A ; G diminuito LD (varg),A JP VERIF3 ADDG2 INC A ; G aumentato LD (varg),A VERIF3 LD HL,57000 LD A,1 LD D,A CICVER3 LD C,(HL); codice nave nemica nel registro C INC HL ; posiziona su G2 LD A,50 CP C ; � affondata? JP Z,PRX3 ; � affondata, salta questa nave nemica LD A,(varg) ; prossima G nel registro A LD B,(HL) ; riga nave nemica nel registro B CP B ; prossima riga di destinazione = riga nave nemica? JP Z,CFCOL3 ; vai al confronto colonne LD A,D ; nessun contatto con questa nave nemica CP 10 ; era l'ultima nave nemica? JP Z,NOCONT3 ; nessun contatto con navi nemiche PRX3 LD A,D CP 10 JP Z, NOCONT3 LD B,7 INC D PNNR3 INC HL DJNZ PNNR3 ; va sulla prossima nave nemica JP CICVER3 CFCOL3 LD A,(varf) ; prossima F nel registro A INC HL ; sposta HL su F2 LD B,(HL); F2 nel registro B CP B ; Fa=F2? JP Z, SCONTR3 ; contatto INC B ; F2+1 nel registro B CP B ; Fa=(F2+1)? JP Z,SCONTR3 ; contatto INC A ; Fa+1 nel registro A DEC B ; F2 nel registro B CP B ; (Fa+1)=F2? JP Z, SCONTR3 ; contatto INC B ; F2+1 nel registro B CP B ; (Fa+1)=(F2+1)? JP Z,SCONTR3 ; contatto RDS3 LD A,D ; nessun contatto con questa nave nemica CP 10 ; era l'ultima nave nemica? JP Z,NOCONT3 LD B,6 INC D PNNC3 INC HL DJNZ PNNC3 ; va sulla prossima nave nemica JP CICVER3 NOCONT3 JP VERIF4 RET ; *** ROUTINE VERIFICA CONTATTO CON NAVI DELLA PROPRIA FLOTTA *** VERIF4 LD HL,57004 LD A,1 LD D,A CICVER4 LD C,(HL); codice nave nel registro C LD A,(varr) CP C ; � la stessa nave? JP Z,CASOSN4 ; � la stessa nave INC HL ; posiziona su G2 LD A,50 CP C ; � affondata? JP Z,PRX4; � affondata, saltala LD A,(varg) ; prossima G nel registro A LD B,(HL) ; riga nave nel registro B CP B ; prossima riga di destinazione = riga nave? JP Z,CFCOL4 ; vai al confronto colonne LD A,D ; nessun contatto con questa nave CP 10 ; era l'ultima nave? JP Z,NOCONT4 ; nessun contatto con navi stessa flotta PRX4 LD A,D CP 10 JP Z,NOCONT4 LD B,7 INC D PNNR4 INC HL DJNZ PNNR4 ; va sulla prossima nave JP CICVER4 CFCOL4 LD A,(varf) ; prossima F nel registro A INC HL ; sposta HL su F2 LD B,(HL); F2 nel registro B CP B ; Fa=F2? JP Z,FERMA4 ; contatto INC B ; F2+1 nel registro B CP B ; Fa=(F2+1)? JP Z,FERMA4 ; contatto INC A ; Fa+1 nel registro A DEC B ; F2 nel registro B CP B ; (Fa+1)=F2? JP Z,FERMA4 ; contatto INC B ; F2+1 nel registro B CP B ; (Fa+1)=(F2+1)? JP Z,FERMA4 ; contatto JP ULTNAV4 CASOSN4 INC HL INC HL ULTNAV4 LD A,D ; nessun contatto con questa nave CP 10 ; era l'ultima nave? JP Z,NOCONT4 LD B,6 INC D PNNC4 INC HL DJNZ PNNC4 ; va sulla prossima nave JP CICVER4 NOCONT4 RET ; nessun contatto con navi della stessa flotta FERMA4 LD A,(62010) ; ripristina F e G precedenti e le copia in H e I LD (varf),A LD (varh),A LD A,(62011) LD (varg),A LD (vari),A RET SCONTR3 LD A,(varf) ; "ferma" la nave, in H e I vanno le prossime F e G LD (varh),A LD A,(varg) LD (vari),A ; ora legge i due codici di tipo nave ; variabile agd R codice nave attaccante (1-10), registro C codice nave nemica (1-10) ; i due codici di tipo nave vanno nelle celle 62000 (var. agd R) e 62001 (reg. C) LD HL,55500 LD A,(varr) ; verifica il tipo della nave attaccante DEC A CP 0 JP Z,TROV4 LD B,A LOOPT4 INC HL DJNZ LOOPT4 TROV4 LD A,(HL) LD (62000),A ; cella 62000 contiene il tipo della nave attaccante LD HL,55500 LD A,C ; verifica il tipo della nave nemica (1,2,3,4,5) DEC A CP 0 JP Z,TROV5 LD B,A LOOPT5 INC HL DJNZ LOOPT5 TROV5 LD A,(HL) LD (62001),A ; cella 62001 contiene il tipo della nave nemica LD A,(62010) LD (varf),A ; rimette in F il valore attuale LD A,(62011) LD (varg),A ; rimette in G il valore attuale ; determina il tipo di scontro (riga att., colonna dif.) LD HL,TABSC4 LD A,(62000) DEC A CP 0 JP Z,COLDIF4 LD B,A LOOP10 LD D,B LD B,5 LOOP11 INC HL DJNZ LOOP11 LD B,D DJNZ LOOP10 COLDIF4 LD A,(62001) DEC A CP 0 JP Z,PSSN4 LD B,A LOOP4 INC HL DJNZ LOOP4 PSSN4 LD A,(HL) ; registro A contiene il tipo scontro JP CTSC4 ; identificativi tipo nave: 1-INC 2-COR 3-CT 4-SOT 5-POR ; tabella tipo scontro TABSC4 DEFB 1,2,3,4,5 DEFB 6,1,7,8,9 DEFB 10,11,1,12,13 DEFB 14,15,16,1,17 DEFB 18,19,20,21,1 CTSC4 CP 1 JP Z,ST4 ; navi stesso tipo CP 2 JP Z,AIDC4 ; incrociatore attacca corazzata CP 3 JP Z,AIDCT4 CP 4 JP Z,AIDS4 CP 5 JP Z,AIDP4 CP 6 JP Z,ACDI4 CP 7 JP Z,ACDCT4 CP 8 JP Z,ACDS4 CP 9 JP Z,ACDP4 CP 10 JP Z,ACTDI4 CP 11 JP Z,ACTDC4 CP 12 JP Z,ACTDS4 CP 13 JP Z,ACTDP4 CP 14 JP Z,ASDI4 CP 15 JP Z,ASDC4 CP 16 JP Z,ASDCT4 CP 17 JP Z,ASDP4 CP 18 JP Z,APDI4 CP 19 JP Z,APDC4 CP 20 JP Z,APDCT4 CP 21 JP Z,APDS4 ST4 LD A,R AND 1 CP 0 ; levare un punto a FC nave DIF? JP Z,TNB4 ; vai a togliere 1 a FC nave DIF JP TPUAT4 ; togli un punto a nave ATT AIDC4 LD A,R AND 3 CP 0 ; levare un punto a nave DIF? JP Z,TNB4 JP TPUAT4 AIDCT4 LD A,R AND 7 CP 5 ; levare un punto a nave DIF? JP M,TNB4 JP TPUAT4 AIDS4 LD A,R AND 3 CP 0 ; levare un punto a nave DIF? JP Z,TNB4 JP TPUAT4 AIDP4 LD A,R AND 3 CP 0 ; levare un punto a nave DIF? JP Z,TNB4 JP TPUAT4 ACDI4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 ACDCT4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 ACDS4 LD A,R AND 3 CP 0 JP Z,TNB4 JP TPUAT4 ACDP4 LD A,R AND 7 CP 3 JP M,TNB4 JP TPUAT4 ACTDI4 LD A,R AND 7 CP 3 JP M,TNB4 JP TPUAT4 ACTDC4 LD A,R AND 3 CP 0 JP Z,TNB4 JP TPUAT4 ACTDS4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 ACTDP4 LD A,R AND 3 CP 0 JP Z,TNB4 JP TPUAT4 ASDI4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 ASDC4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 ASDCT4 LD A,R AND 3 CP 0 JP Z,TNB4 JP TPUAT4 ASDP4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 APDI4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 APDC4 LD A,R AND 7 CP 5 JP M,TNB4 JP TPUAT4 APDCT4 LD A,R AND 3 CP 3 JP Z,TPUAT4 JP TNB4 APDS4 LD A,R AND 3 CP 0 JP Z,TNB4 JP TPUAT4 TPUAT4 LD A,(varj); togli un punto alla nave attaccante DEC A CP 0 ; la nave deve affondare? JP Z, AFF4 LD (varj),A; J-1 JP VERIF4 AFF4 LD A,(varr) LD B,A ; nel registro B il codice nave che affonda per mettere 50 al suo posto LD A,0 LD (varj),A ; J nave attaccante = 0 CALL AFAT4 JP FINETR2 TNB4 LD A,C ; ; va a posizionarsi sulla cella che contiene FC della nave nemica LD HL,56000 CP 1 JP Z,VASUJ4 DEC A LD B,A LD A,0 MOLT4 ADD A,5 DJNZ MOLT4 LD B,A LOOP30 INC HL DJNZ LOOP30 ; ora HL punta la prima cella della nave, ora deve andare su J VASUJ4 INC HL INC HL INC HL INC HL ; HL su J LD A,(HL) DEC A CP 0 ; la nave deve affondare? JP Z, AFF5 LD (HL),A; J-1 JP VERIF4 AFF5 LD B,C ; nel registro B il codice nave che affonda per mettere 50 al suo posto LD A,0 LD (HL),A ; J nave attaccata = 0 CALL AFDIF4 FSC4 JP VERIF4 AFAT4 LD HL,57000 ; vado a mettere nella prima cella sup. della nave il valore 50 (aff.) VRFNV4 LD A,(HL) CP B ; � il codice nave cercato quello nella cella supplementare? JP Z,AFFOND4 INC HL INC HL INC HL INC HL JP VRFNV4 ; verifica il prossimo codice nave AFFOND4 LD A,50 LD (HL),A ; affondata LD A,B LD (vark),A ; nella variabile agd K va il codice della nave affondata per il remove RET AFDIF4 LD HL,57000 ; vado a mettere nella prima cella sup. della nave il valore 50 (aff.) VRFNV5 LD A,(HL) CP B ; � il codice nave cercato quello nella cella supplementare? JP Z, AFFOND5 INC HL INC HL INC HL INC HL JP VRFNV5 ; verifica il prossimo codice nave AFFOND5 LD A,50 LD (HL),A ; affondata LD A,B LD (vark),A ; nella variabile agd K va il codice della nave affondata per il remove RET RADAR3 LD HL,57004 LD B,10 LPLOT5 LD C,176 LD D,63 PUSH BC LD A,(HL) CP 50 JP Z,AUM INC HL INC HL INC HL LD A,(HL) LD B,A LPLOT6 INC C DJNZ LPLOT6 LD A,C LD (62020),A DEC HL DEC HL LD A,(HL) LD (62021),A CP 1 JP Z,PPLOT2 DEC A LD B,A LPLOT7 DEC D DJNZ LPLOT7 PUSH HL LD A,D LD (62021),A PPLOT2 LD A,57 LD (23693),A LD A,2 CALL 5633 LD A,(62021) LD B,A LD A,(62020) LD C,A CALL 8933 LD B,7 POP HL LPLOT8 INC HL DJNZ LPLOT8 POP BC DJNZ LPLOT5 LD A,0 LD (23693),A JP RADAR4 AUM LD B,8 JP LPLOT8 RADAR4 LD HL,57000 LD B,10 LPLOT10 LD C,176 LD D,31 PUSH BC LD A,(HL) CP 50 JP Z,AUM2 INC HL INC HL LD A,(HL) LD B,A LPLOT11 INC C DJNZ LPLOT11 LD A,C DEC A DEC A LD (62020),A DEC HL LD A,(HL) LD (62021),A CP 1 JP Z,PPLOT3 DEC A LD B,A LPLOT12 DEC D DJNZ LPLOT12 PUSH HL LD A,D LD (62021),A PPLOT3 LD A,58 LD (23693),A LD A,2 CALL 5633 LD A,(62021) LD B,A LD A,(62020) LD C,A CALL 8933 LD B,7 POP HL LPLOT13 INC HL DJNZ LPLOT13 POP BC DJNZ LPLOT10 LD A,0 LD (23693),A RET AUM2 LD B,8 JP LPLOT13 FINALE LD HL,700 ; pitch. LD DE,1300 ; duration. CALL 949 ; ROM beeper routine. RET
|
|