'ProgramMode:RUN ' SPACE AILEN GAME ' for MachiKania type Z ' Programmed by KENKEN ' port to C.Basic for CG ' by sentaro21 ' ' START:[EXE] ' LEFT :_#E690_ ' RIGHT:_->_ ' '#CBINT '#_Mat _0 58->d Alias Lbl A=_CLCHAR Alias Lbl B=_BUTTON Alias Lbl C=_FIRE Alias Lbl D=_MVCANN Alias Lbl E=_MVALIN Alias Lbl F=_MVUFO Alias Lbl G=_MVMISL Alias Lbl H=_CKCLSN Alias Lbl I=_PTMISL Alias Lbl J=_PTALIN Alias Lbl K=_PTUFO Alias Lbl L=_PTCANN Alias Lbl M=_PTSCOR Alias Lbl N=_GAMEOV Alias Lbl O=_CKHIT Alias Lbl P=_CKGAME Alias Lbl Q=_CLRAL Alias Lbl R=_PALIEN Alias Lbl S=_SETPCG Alias Lbl T=_ADDSCR Alias Lbl U=_INIT1S Alias Lbl X=_INIT1 Alias Lbl Y=_INITGM Alias Lbl Z=_NXTSTG {15,1}->Dim Mat z 0->m Ticks->k Gosub _INIT1 While 1 Gosub _INITGM Do Gosub _NXTSTG Do Gosub _CLCHAR Gosub _BUTTON Gosub _FIRE Gosub _MVCANN Gosub _MVALIN Gosub _MVUFO Gosub _MVMISL Gosub _CKCLSN Gosub _PTMISL Gosub _PTALIN Gosub _PTUFO Gosub _PTCANN Gosub _PTSCOR Gosub _CKGAME->S Isz m If Ticks-k>=128:Then m->l:Ticks->k Blue Text 180,0,l,,M: BatteryStatus 0->m IfEnd _DispVram TicksWait (-)1 LpWhile S=0 LpWhile S=1 Gosub _GAMEOV WhileEnd Stop ' FIRST TIME INIT Lbl _INIT1 Back-Color Black Back-Color @Black Plot/Line-Color White Cls Screen.G _ClrVram Gosub _SETPCG ' DIM V(10,4),X1,Y1 {11,5}->Dim Mat V {2,1}->Dim Mat X {2,1}->Dim Mat Y '0_->_H Return ' INIT For EVERY GAME Lbl _INITGM Screen.G _ClrVram _DispVram '_White __Text _40-24,40+d,"SPACE ALIEN" '_White __Text _76-24,30+d,"FIRE:[SHIFT] _#E690__#E691_" '_White __Text _104-24,6+d,"PUSH BUTTON" Plot/Line-Color Green "PLAY"->Str 1:Gosub _INIT1S,0,98+d,1 "SPACE ALIENS"->Str 1:Gosub _INIT1S,20,60+d,10 Plot/Line-Color Cyan "**SCORE ADVANCE TABLE**"->Str 1:Gosub _INIT1S,50,20+d,0 Plot/Line-Color Magenta _Bmp &Mat g,50+d,72,24,8 "=? MYSTERY"->Str 1:Gosub _INIT1S,70,70+d,10 _Bmp &Mat I,54+d,92,16,8 "=30 POINTS"->Str 1:Gosub _INIT1S,90,70+d,10 Plot/Line-Color Yellow _Bmp &Mat G,54+d,112,16,8 "=20 POINTS"->Str 1:Gosub _INIT1S,110,70+d,10 _Bmp &Mat A,54+d,132,16,8 "=10 POINTS"->Str 1:Gosub _INIT1S,130,70+d,10 Plot/Line-Color Cyan "FIRE:[SHIFT] _#E690__#E691_"->Str 1:Gosub _INIT1S,154,30+d,1 "PUSH BUTTON"->Str 1:Gosub _INIT1S,170,30+d,1 While Getkey2<>31:RanInt#(1,9)->P:WhileEnd 0->P:0->R:3->L _ClrVram Return ' Table Display Lbl _INIT1S Local e,f,n StrLen(Str 1)->j For 1->i To j Text e,f+i*10,StrMid(Str 1,i,1),,mb Getkey=0=>TicksWait (-)n Next Return ' INIT For Next STAGE Lbl _NXTSTG 'VAR i,x,s$ P+1->P If P>=2:Then Yellow Text 60-24,10+d,"CONGRATULATIONS!" TicksWait 128 Yellow Text 85-24,50+d,"Next STAGE":TicksWait 128*2 IfEnd _ClrVram ToStr(P)->Str 1 Plot/Line-Color Yellow Text -2,224+d,"SPACE",,MB: Text 10,224+d,"ALIEN",,MB: Plot/Line-Color White Text 36,224+d,"HIGH-",,MB: Text 48,224+d,"SCORE",,MB: Text 88,224+d,"SCORE",,MB: Text 128,224+d,"STAGE",,MB: Text 142,(32-StrLen(Str 1))*8+d,Str 1,,MB: Gosub _PTSCOR Cyan _Bmp &Mat a,224+d,200-24,16,8 White Text 200-24-4,248+d,L,,MB: For 0->I To 10:3->V[I,0]:Next For 0->I To 10:2->V[I,1]:Next For 0->I To 10:2->V[I,2]:Next For 0->I To 10:1->V[I,3]:Next For 0->I To 10:1->V[I,4]:Next Red _Rectangle 0+d,206-24,215+d,207-24,0,1,1 21->X For 1->I To 4 Red _Bmp8 &Mat n,X+d,160-24 Red _Bmp8 &Mat o,X+8+d,160-24 Red _Bmp8 &Mat p,X+16+d,160-24 Red _Bmp8 &Mat q,X+d,168-24 Red _Bmp8 &Mat r,X+8+d,168-24 Red _Bmp8 &Mat s,X+16+d,168-24 X+48->X Next Green Text 100-24,60+d,"STAGE "+Str 1 TicksWait 128 _Rectangle 60+d,100-24,160+d,118-24,0,0,0 16->E:(MOD(P-1,8)*8+32->F:2->D 8->W:-1->A:0->Q:1->N:0->M:0->B:0->T 0->G:55->U:0->Y0:0->Y1:50->Z Getkey->K Return ' GAMEOVER Lbl _GAMEOV Green Text 130-24,50+d,"GAME OVER" TicksWait 128*3 Return ' ERASE CHARACTERS Lbl _CLCHAR If B>0:Then _Bmp &Mat x,C+d,B-24,2,4,,C ElseIf B=-1:Then _Bmp &Mat x,(C-3)+d,-24,8,8,,C IfEnd If Y0>0:Then _Bmp &Mat x,X0+d,Y0-24,2,4,,C ElseIf Y0=-1:Then _Bmp &Mat x,(X0-2)+d,198-24,6,8,,C IfEnd If Y1>0:Then _Bmp &Mat x,X1+d,Y1-24,2,4,,C ElseIf Y1=-1:Then _Bmp &Mat x,(X1-2)+d,198-24,6,8,,C IfEnd Return ' READ BUTTONS Lbl _BUTTON K->J KeyRow(8)->K KeyRow(7)->I Return ' FIRE MISSILE Lbl _FIRE 'VAR p,q M>0=>Return If (B=0) And (K&0x40):Then RanInt#(0,32767)->p 180->B:W+8->C IfEnd Z>0=>Z-1->Z If (Z=0) And ((Y0=0) Or (Y1=0)):Then RanInt#(0,10)->p 4->q While q>=0 V[p,q]>0=>Break q-1->q WhileEnd (q<0) Or ((F+(q*16))>=176)=>Return If Y0=0:Then (E+(p*16))+7->X0 (F+(q*16))+8->Y0 Else (E+(p*16))+7->X1 (F+(q*16))+8->Y1 IfEnd 50->Z IfEnd Return ' MOVE CANNON Lbl _MVCANN If M>0:Then M-1->M If M=0:Then White Text 200-24-4,248+d,L,,MB: _Bmp &Mat x,W+d,184-24,16,8,,C 8->W IfEnd Return IfEnd (W>0) And (K&4)=>W-1->W (W<192) And (I&2)=>W+1->W Return ' MOVE ALIEN Lbl _MVALIN 'VAR a,i,s M>0=>Return G+1->G (((((U>=20) And (G<20))) Or (((U>=12) And (G<10)))) Or ((((U>=6) And (G<6))) Or (((U>=3) And (G<2))))) Or (G<1)=>Return 0->G E+D->E:0->s:1-T->T If (D>0) And (E>32):Then 12-(E/16)->a For 0->i To 4:s+V[a,i]->s:Next If s>0:Then E-D->E:F+8->F:-D->D:IfEnd ElseIf E<0:Then -E/16->a For 0->i To 4:s+V[a,i]->s:Next If s>0:Then E-D->E:F+8->F:-D->D:IfEnd IfEnd If s>0:Then Gosub _CLRAL,E,F-8 IfEnd Return ' MOVE UFO Lbl _MVUFO Q+1->Q If A>=0:Then (Q>0) And ((Q and 1)=0)=>A+N->A Q=6=>0->Q If ((A<0) Or (A>184)) Or (Q=-1):Then _Rectangle (A-4)+d,-24,(A+36)+d,-6,0,0,0 -1->A -N->N 0->Q IfEnd Else If (Q>=1500) And (U>7):Then 0->Q If N>0:Then 0->A:Else 184->A:IfEnd IfEnd IfEnd Return ' MOVE MISSILE Lbl _MVMISL If B>0:Then B-4->B B<=0=>-3->B ElseIf B<0:Then B+1->B IfEnd If Y0:Then Y0+1->Y0 Y0>=200=>-3->Y0 IfEnd If Y1:Then Y1+1->Y1 Y1>=200=>-3->Y1 IfEnd Return ' COLISION CHECK Lbl _CKCLSN 'VAR s,i,j ' CHECK MISSILE And ALIENS B>0=>Gosub _CKHIT ' CHECK MISSILE And UFO If ((B>=8) And (B<16)) And ((A>=0) And (Q>=0)):Then If (C>=(A+4)) And (C<(A+19)):Then 0->B -25->Q (RanInt#(0,3)+2)*50->O O=250=>300->O Gosub _ADDSCR,O IfEnd IfEnd ' CHECK MISSILE And MISSILE If B>0:Then If ((C=X0) And (B>=Y0)) And (B<(Y0+4)):Then 0->B:0->Y0:IfEnd If ((C=X1) And (B>=Y1)) And (B<(Y1+4)):Then 0->B:0->Y1:IfEnd IfEnd ' CHECK CANNON And MISSILE If M=0:Then If ((Y0>181) And (Y0<192)) And ((X0>=(W+2)) And (X0<=(W+14))):Then 120->M ElseIf ((Y1>181) And (Y1<192)) And ((X1>=(W+2)) And (X1<=(W+14))):Then 120->M IfEnd IfEnd ' CHECK MISSILE And SHIELD C+d->i:B-24->j If B>=160:Then (_PixelTest(i,j)+_PixelTest(i,j+1))+(_PixelTest(i,j+2)+_PixelTest(i,j+3))->s If s:Then _Bmp &Mat x,i-1,j,2,4,,C:0->B:IfEnd IfEnd If Y0>=160:Then X0+d->i:Y0-24->j (_PixelTest(i,j)+_PixelTest(i,j+1))+(_PixelTest(i,j+2)+_PixelTest(i,j+3))->s If s:Then 0->Y0:_Bmp &Mat x,i-1,j-1,4,6,,C:IfEnd IfEnd If Y1>=160:Then X1+d->i:Y1-24->j (_PixelTest(i,j)+_PixelTest(i,j+1))+(_PixelTest(i,j+2)+_PixelTest(i,j+3))->s If s:Then 0->Y1:_Bmp &Mat x,i-1,j-1,4,6,,C:IfEnd IfEnd Return ' CHECK MISSILE HIT ALIEN 'VAR x,y Lbl _CKHIT CReturn C>=(E+176)=>Return BReturn B>=(F+72)=>Return (C-E)/16->x:(B-F)/16->y ((E+(x*16))+2)>C=>Return ((E+(x*16))+13)Return (F+(y*16))>B=>Return ((F+(y*16))+15)Return V[x,y]<=0=>Return Gosub _ADDSCR,V[x,y]*10 -4->V[x,y]:U-1->U:-3->G:0->B Return ' DRAW ALIENS 'VAR x,y,i,j,w,n 'n=>Gosub PALIEN,w,y,n Lbl _PTALIN E->x:F->y For 0->j To 4 x+d->w For 0->i To 10 V[i,j]->n y-24->f n=0=>Goto n n<>-1=>Goto a _Bmp &Mat x,w,f,16,8,,CGoto n Lbl a G>0=>Goto n n>=0=>Goto b 0x0C+1->p:Goto c Lbl b:0x01+(((n-1)*4)+(T*2))->p Lbl c y<8=>Red Goto d y<32=>Magenta Goto d y<64=>Green Goto d y<96=>Cyan Goto d y<128=>Magenta Goto d y<160=>Yellow Goto d Red Lbl d _Bmp &Mat @p,w,f,16,8,,C Lbl n n<0=>n+1->V[i,j] w+16->w Next y+16->y Next Return ' DRAW UFO Lbl _PTUFO A<0=>Return If Q>=0:Then Magenta _Bmp &Mat g,A+d,-16,24,8,,C ElseIf Q=-24:Then Magenta _Bmp &Mat k,A+d,-16,24,8,,C ElseIf Q=-18:Then Magenta Text 8-24,(A-4)+d,O,,M: IfEnd Return ' DRAW CANNON Lbl _PTCANN If M=0:Then Cyan _Bmp &Mat a,W+d,184-24,16,8,,C Else If (M and 2):Then Red _Bmp &Mat c,W+d,184-24,16,8,,C Else Red _Bmp &Mat e,W+d,184-24,16,8,,C IfEnd IfEnd Return ' DRAW MISSILE Lbl _PTMISL If B>0:Then Yellow _Line C+d,B-24,C+d,B-21,1 ElseIf B<=-2:Then Red _Bmp8 &Mat O,(C-3)+d,-24 IfEnd Y0>0=>_Bmp &Mat t,X0+d,Y0-24,2,4 Y1>0=>_Bmp &Mat t,X1+d,Y1-24,2,4 Y0<0=>Red _Bmp8 &Mat P,(X0-2)+d,198-24 Y1<0=>Red _Bmp8 &Mat P,(X1-2)+d,198-24 Return ' DRAW SCORE Lbl _PTSCOR m and 3=>Return White Text 102,224+d,Sprintf("%5d",%R),,MB: White Text 62,224+d,Sprintf("%5d",%H),,MB: Return 'VAR s$ ToStr(R)->Str 2 White Text 102,(32-StrLen(Str 2))*8+d+8,Str 2,,MB: ToStr(H)->Str 2 White Text 62,(32-StrLen(Str 2))*8+d+8,Str 2,,MB: Return ' CHECK GAME STATUS Lbl _CKGAME 'VAR a,i,s If M=120:Then L=0=>Return 2 L-1->L IfEnd U=0=>Return 1 If F>=120:Then 0->s:11-((F-8)/16)->a For 0->i To 10:s+V[i,a]->s:Next s>0=>Return 2 IfEnd Return 0 ' ERASE ALIEN Lbl _CLRAL 'VAR x,y,i,j,w Local e,f,n 'X=ARGS(1):Y=ARGS(2) f-24->f For 0->j To 4 e+d->w For 0->i To 10 V[i,j]=>_Bmp &Mat x,w,f,16,8,,C w+16->w Next f+16->f Next Return ' DRAW AN ALIEN Lbl _PALIEN Local e,f,n 'VAR x,y,c,n,p 'X=ARGS(1):Y=ARGS(2):N=ARGS(3) e+d->e If n=-1:Then _Rectangle e,f-24,e+15,(f+7)-24,0,0,0:Return :IfEnd G>0=>Return If n<0:Then 0x0C+1->p Else 0x01+(((n-1)*4)+(T*2))->p IfEnd If f<8:Then Plot/Line-Color Red ElseIf f<32:Then Magenta ElseIf f<64:Then Plot/Line-Color Green ElseIf f<96:Then Plot/Line-Color Cyan ElseIf f<128:Then Plot/Line-Color Magenta ElseIf f<160:Then Plot/Line-Color Yellow Else Plot/Line-Color Red IfEnd _Bmp &Mat @p,e,f-24,16,8,,C Return ' ADD SCORES Lbl _ADDSCR 'R=R+ARGS(1) R+e->R R>=99999=>R=99999->R R>H=>R->H Return ' SET CHARACTERS FONTS Lbl _SETPCG ' ALIEN1 'DATA $80,$031F3F39,$3F060D30 'DATA $81,$C0F8FC9C,$FC60B00C 'DATA $82,$031F3F39,$3F0E190C 'DATA $83,$C0F8FC9C,$FC709830 [[0x03C0,0x1FF8,0x3FFC,0x399C,0x3FFC,0x0660,0x0DB0,0x300C]]->Mat A.W:{16,8}->Dim Dim Mat A.P [[0x03C0,0x1FF8,0x3FFC,0x399C,0x3FFC,0x0E70,0x1998,0x0C30]]->Mat C.W:{16,8}->Dim Dim Mat C.P ' ALIEN2 'DATA $84,$0812171D,$1F0F0408 'DATA $85,$1024F4DC,$FCF81008 'DATA $86,$0402070D,$1F171403 'DATA $87,$1020F0D8,$FCF41460 [[0x0808,0x1224,0x17F4,0x1DDC,0x1FFC,0x0FF8,0x0410,0x0808]]->Mat E.W:{16,8}->Dim Dim Mat E.P [[0x0410,0x0220,0x07F0,0x0DD8,0x1FFC,0x17F4,0x1414,0x0360]]->Mat G.W:{16,8}->Dim Dim Mat G.P ' ALIEN3 'DATA $88,$0103070D,$0F02050A 'DATA $89,$80C0E0B0,$F040A050 'DATA $8A,$0103070D,$0F050804 'DATA $8B,$80C0E0B0,$F0A01020 [[0x0180,0x03C0,0x07E0,0x0DB0,0x0FF0,0x0240,0x05A0,0x0A50]]->Mat I.W:{16,8}->Dim Dim Mat I.P [[0x0180,0x03C0,0x07E0,0x0DB0,0x0FF0,0x05A0,0x0810,0x0420]]->Mat K.W:{16,8}->Dim Dim Mat K.P ' ALIEN EXPLODE 'DATA $8C,$04221008,$60081224 'DATA $8D,$40881020,$0C209048 [[0x0440,0x2288,0x1010,0x0820,0x600C,0x0820,0x1290,0x2448]]->Mat M.W:{16,8}->Dim Dim Mat M.P ' SHOT EXPLODE 'DATA $90,$89227EFF,$FF7E2491 [[0x89227EFF,0xFF7E2491]]->Mat O.L:{8,8}->Dim Dim Mat O.P ' ALIEN SHOT EXPLODE 'DATA $91,$20883478,$BC7CBC54 [[0x20883478,0xBC7CBC54]]->Mat P.L:{8,8}->Dim Dim Mat P.P ' CANNON 'DATA $A0,$0001011F,$3F3F3F3F 'DATA $A1,$80C0C0FC,$FEFEFEFE [[0x0080,0x01C0,0x01C0,0x1FFC,0x3FFE,0x3FFE,0x3FFE,0x3FFE]]->Mat a.W:{16,8}->Dim Dim Mat a.P ' CANNON EXPLODE 'DATA $A2,$02000212,$01451F3F 'DATA $A3,$0010A000,$B0A8E4F5 'DATA $A4,$10821002,$4B211F37 'DATA $A5,$0419C002,$31C4F0F2 [[0x0200,0x0010,0x02A0,0x1200,0x01B0,0x45A8,0x1FE4,0x3FF5]]->Mat c.W:{16,8}->Dim Dim Mat c.P [[0x1040,0x8219,0x10C0,0x0202,0x4B31,0x21C4,0x1FF0,0x37F2]]->Mat e.W:{16,8}->Dim Dim Mat e.P ' UFO 'DATA $B0,$00000103,$060F0302 'DATA $B1,$007EFFFF,$DBFF9900 'DATA $B2,$000080C0,$60F0C080 [[0x00,0x00,0x00,0x00,0x7E,0x00,0x01,0xFF,0x80,0x03,0xFF,0xC0,0x06,0xDB,0x60,0x0F,0xFF,0xF0,0x03,0x99,0xC0,0x02,0x00,0x80]]->Mat g.B:{24,8}->Dim Dim Mat g.P ' UFO EXPLODE 'DATA $B3,$12085103,$07114011 'DATA $B4,$8106E3F9,$54F1A310 'DATA $B5,$48100088,$E4801080 [[0x12,0x81,0x48,0x08,0x06,0x10,0x51,0xE9,0x00,0x03,0xF9,0x88,0x07,0x54,0xE4,0x11,0xF1,0x80,0x14,0xA3,0x10,0x11,0x10,0x80]]->Mat k.B:{24,8}->Dim Dim Mat k.P ' SHIELD 'DATA $F0,$0F1F3F7F,$FFFFFFFF 'DATA $F1,$FFFFFFFF,$FFFFFFFF 'DATA $F2,$C0E0F0F8,$FCFCFCFC 'DATA $F3,$FFFFFFFF,$FEFCF8F8 'DATA $F4,$FFFFFFFF,$03010000 'DATA $F5,$FCFCFCFC,$FCFCFCFC [[0x0F1F3F7F,0xFFFFFFFF]]->Mat n.L:{8,8}->Dim Dim Mat n.P [[0xFFFFFFFF,0xFFFFFFFF]]->Mat o.L:{8,8}->Dim Dim Mat o.P [[0xC0E0F0F8,0xFCFCFCFC]]->Mat p.L:{8,8}->Dim Dim Mat p.P [[0xFFFFFFFF,0xFEFCF8F8]]->Mat q.L:{8,8}->Dim Dim Mat q.P [[0xFFFFFFFF,0x03010000]]->Mat r.L:{8,8}->Dim Dim Mat r.P [[0xFCFCFCFC,0xFCFCFCFC]]->Mat s.L:{8,8}->Dim Dim Mat s.P [[0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000]]->Mat x.L:{24,8}->Dim Dim Mat x.P 'DATA $100 'Lbl BMPMSL 'CDATA 6,6,6,6 'Lbl BMPMS2 'CDATA 5,0,0,5,5,0,0,5 [[0x07FF,0,0,0x07FF,0x07FF,0,0,0x07FF]]->Mat t.w Return