'-----------------------------------------------------, ' Sneech Started 14-9-94 By Paul Burkey | '-----------------------------------------------------' Set Buffer 120 ' Dim GRID(75,63),TAIL(9,1,302),X(9),Y(9),DX(9),DY(9),SIZ(9),LTH(9),TL(9),SLOPE(7,2,2) Dim SPEED(9),SPC(9),DEAD(9),CUL(9),CONTR(9),NAME$(9),KEYS(1,3),CTYP(3),SPENDS(9) Dim SCORE(9),WININ(9),OUT(9),PTS(9),BIGBON(9),SPEEDBON(9),DEST(9),SLIP(75,63) Dim BITS(20,1),PARTX(9),PARTY(9),_FLASHCOL(20),KILBON(9),MONEY(9),STACK(9) Dim CORNER(5),CPOS(3,1),CWAIT(3),SCOOPCO(3,1),DAM(9,9),LOAN(9),COUNTER(9),STARS(3,5) Dim STUCK(9),HI$(40),HI(40),RATE(9),SHADE(75,63),OLDM(9),OLDP(9),TMP(3),ITEM(20,14) Dim _INTEREST(9),PLACED(9),HUMAN$(9),COMP$(19),KILPTS(19),MOVE(4),CPREF(19,2) Dim KIL(9),FINISH(9),_DOOR(75,63),KILS(9,12),L(9),BOOSTER(9),AHEAD(19),BOO(9),MSPEED(19) ' Global GRID(),TAIL(),X(),Y(),DX(),DY(),SIZ(),TL(),LTH(),SPEED(),SPC(),DEAD(),BOOSTER() Global CUL(),CONTR(),NAME$(),KEYS(),SCORE(),WININ(),OUT(),PTS(),KILBON(),L(),SPENDS() Global BIGBON(),SPEEDBON(),DEST(),BITS(),PARTX(),PARTY(),_FLASHCOL(),MONEY(),LOAN(),OLDP() Global CWAIT(),SCOOPCO(),STUCK(),MOVE(),CTYP(),STACK(),CORNER(),CPOS(),OLDM(),COUNTER(),STARS() Global HI(),HI$(),RATE(),SHADE(),SLIP(),_INTEREST(),_DOOR(),KILS(),TMP(),ITEM(),SLOPE() Global PLACED(),HUMAN$(),COMP$(),KILPTS(),KIL(),FINISH(),DAM(),CPREF(),AHEAD(),BOO(),MSPEED() Global BIG,BIGX,BIGY,MAN,CH,MEN,SPEED,PART,BLOCK,PASS,PASS$,EXL,CHANL,MEGAX,MEGAY,MEGA,FRBOMB,FRDEF,PLA Global FON,HUMANS,OUT,CONTESTANTS,GAMES,LOWEST,TIME,GAMETIME,_KEYS,OKX,_BGRAB,_SGRAB Global SECS,MKEY,GAMEOVER,MZ,GAME,GOLD,_MEMORY,PARTS,SLOW,MONEY,KILBY,CONTEND,DEM Global DEMO,IT,KEY,OPEN,BW,TM,SP0ON,HOLE,STRAWB,STRON,_EXIT,VIRUS,LASTV,_MINE,_SCORE,_STAT,_VIR Global _EXITX,_EXITY,OVER,_STUN,_SCOOP,_RF,_PT,_NOM,_CON,_SLSC,_SREV,_VIRUS,DEF$ Global _STSIZ,_STSPEED,_REV,_BOMB,_BOMBB,_EXTRA,_SUV1,_BOOST,VCOUNT,OKY,_SH1,_SH2,_ATURN ' 'DEM=0 : MEN=9 DEM=5-4 : MEN=9-2 ' SETUP TITLES ' BIG=301 : BIGX=75 : BIGY=63 ' Do MENU NEWLEAGUE[PASS] Do Inc GAME : If GAME<=GAMES Then SHOLEAGUE Else GAMEOVER=1 If GAMEOVER Then FINALSCORES : Exit MAIN : RESULTS If DEMO Then Exit Loop Loop ' Procedure MAIN ' NEWGAME ' PL=0 : OUT=0 SP0ON=-1 : STRON=0 HUMSIN=1 ' Do MAN=0 Do If CONTR(MAN)=7 Then Goto PAA BOO(MAN)=SPEED(MAN)-(BOOSTER(MAN)/20) SLIP=SLIP(X(MAN),Y(MAN)) If SLIP<>0 If SLIP=-1 Add BOO(MAN),4 Else If SLIP=1 Add BOO(MAN),-2 Else If SLIP=-2 Inc BOO(MAN) Else Add BOO(MAN),SLOPE(SLIP-6,DX(MAN)+1,DY(MAN)+1) If SLOPE(SLIP-6,DX(MAN)+1,DY(MAN)+1)<0 BOOSTER(MAN)=Min(BOOSTER(MAN)+5,150) End If If SLOPE(SLIP-6,DX(MAN)+1,DY(MAN)+1)>0 Dec BOOSTER(MAN) End If End If End If End If End If Add SPC(MAN),1,0 To Max(BOO(MAN),0) If STUCK(MAN)>0 If SP0ON=-1 or SP0ON=MAN Dec STUCK(MAN) End If If STUCK(MAN)>95 Goto LAA Else If STUCK(MAN)=8 _SAM[14,25000] : _SAM[14,25010] : Amal Off 12 : Amal Off 14 : Sprite Off 0 : SP0ON=-1 Goto LAA Else If STUCK(MAN)>8 If SP0ON=-1 Wait Vbl : Sprite 0,0,0,20 : Wait Vbl SP0ON=MAN Channel 14 To Screen Offset 0 : Amal 14,"L: L RA=X; L RB=Y; J L" : Amal On 14 Channel 12 To Sprite 0 Amreg(2)=X Hard(X(MAN)*4+31) : Amreg(3)=Y Hard(Y(MAN)*4+31) Amal 12,"L: L X=RC-RA; L Y=RD-RB; J L" : Amal On 12 SP0ON=MAN Else SPP=11+Min(9,(STUCK(MAN)-7)/9) : Sprite 0,,,SPP End If End If Goto LAA End If End If End If If SPC(MAN)>0 or DEAD(MAN)>0 Then Goto SKIP If DX(MAN)=0 and DY(MAN)=0 Then STACK(MAN)=ITEM(_STSIZ,MAN+1) : SIZ(MAN)=10 : Goto KO '-------------- Start of Speed Loop ----------------------' ST: If X(MAN)+DX(MAN)>-1 and X(MAN)+DX(MAN)<(BIGX+1) Then Add X(MAN),DX(MAN) Else Gosub WALL : If CR=1 Then Goto LAA If Y(MAN)+DY(MAN)>-1 and Y(MAN)+DY(MAN)<(BIGY+1) Then Add Y(MAN),DY(MAN) Else Gosub WALL : If CR=1 Then Goto LAA If ITEM(_SCOOP,MAN+1) or ITEM(_SLSC,MAN+1) Then Gosub SSCOOPER If GRID(X(MAN),Y(MAN))=0 Then Goto KO Else GR=GRID(X(MAN),Y(MAN)) If GR=PART Then BITS[X(MAN),Y(MAN),0] : Add STACK(MAN),8+Rnd(4) : _SAM[12,12000] : Goto KO If GR=SPEED Then BITS[X(MAN),Y(MAN),0] : SPEED(MAN)=Max(0,SPEED(MAN)-1) : _SAM[6,14000] : Goto KO If GR=MONEY Then BITS[X(MAN),Y(MAN),0] : Gosub GMONEY : _SAM[MON,14000+Rnd(1000)] : Goto KO If GR=BLOCK Then Gosub CRASHED : Add Y(MAN),-DY(MAN) : Add X(MAN),-DX(MAN) : If ITEM(_ATURN,MAN+1) : ITEM(_ATURN,MAN+1)=1 : FACE[MAN,DX(MAN),DY(MAN)] : End If : Goto LAA If GR=HOLE Then Gosub HOLE : Add Y(MAN),-DY(MAN) : Add X(MAN),-DX(MAN) : Goto LAA If GR=_EXIT Then Gosub _EXIT : Goto LAA If GR=SLOW Then SPEED(MAN)=Min(6-LOWEST,SPEED(MAN)+1) : _SAM[6,6000] : Goto KO If GR=GOLD Then BITS[X(MAN),Y(MAN),0] : KILMONEY[X(MAN),Y(MAN),1] : _SAM[15,7000] : FAD[$660,0] : Fade 3 To 1 : Goto KO If MEGAX=-1 Then Goto X If GR=KEY Then CLBIG[KEY] : OPENUP[X(MAN),Y(MAN),1] : Goto KO If GR=FRBOMB Then CLBIG[FRBOMB] : Inc ITEM(_BOMB,MAN+1) : MADCRY[12,2000,50] : Goto KO If GR=FRDEF Then CLBIG[FRDEF] : Inc ITEM(_BOMBB,MAN+1) : MADCRY[12,3000,20] : Goto KO If GR=EXL Then CLBIG[EXL] : ITEM(_EXTRA,MAN+1)=1 : MADCRY[13,8000,1000] : Goto KO If GR=BW Then CLBIG[BW] : MADCRY[8,3000,1000] : BW[0] : Goto KO If GR=_VIRUS Then CLBIG[_VIRUS] : VIRUS=MAN : LASTV=MAN : VCOUNT=0 : _SAM[7,2500] : _CHECKIT[1] : Goto KO If GR=STRAWB Then CLBIG[STRAWB] : BW[STRAWB] : Goto KO If GR=MEGA Then CLBIG[MEGA] : Add STACK(MAN),200 : MADCRY[14,10000,1000] : Goto KO X: If GR>0 Then Gosub _COLIDE KO: If _DONT=1 Then Gosub MOVEIT Else _DONT=1 ' LAA: ' SAM=DX(MAN) If(SLIP(X(MAN),Y(MAN))<>-2 or Rnd(5)=0) Then If CONTR(MAN)=6 Then COMPUTER Else HUMANCONTR If STUCK(MAN)>0 Then Goto PAA If SAM<>DX(MAN) If SIZ(MAN)=1 PL=15000 If SIZ(MAN)=1 and Rnd(4)=0 ITEM(_SUV1,MAN+1)=1 End If Else If Rnd(1) PL=6000+((12-BOO(MAN))*600) End If End If End If SKIP: ' If Rnd(4)=0 If STACK(MAN)>0 and Rnd(2)>0 and(SIZ(MAN)<(BIG-10)) : Inc SIZ(MAN) : Dec STACK(MAN) : End If If PARTS=6 and GAMETIME<113 and(Rnd(180-(SIZ(MAN)/3))=0) and(SIZ(MAN)+STACK(MAN)>1) and VIRUS<>MAN : Add STACK(MAN),4 : End If If Rnd(260+(SPEED(MAN)*5))=0 and ITEM(_CON,MAN+1)=0 : SPEED(MAN)=Min(6-LOWEST,SPEED(MAN)+1) : End If If VIRUS=MAN and Rnd(26)=0 : Gosub VIRI : Dec VCOUNT : End If End If If BOOSTER(MAN)>0 Then Dec BOOSTER(MAN) Else Inc BOOSTER(MAN) PAA: If MAN=MEN Then Exit Inc MAN Loop ' '----- End Of Players Loop ' If HUMANS>0 or SECS=24 or DEMO=1 Wait Vbl End If If PL>0 Then _SAM[11,Min(25000,Max(600,PL))] : PL=0 ' If Rnd(5)=0 SCROL If Key State(69) and(GAMETIME>59 or DEMO=1) If IT<4 IT=-5 : Exit Else Exit End If End If Else Gosub TIME_KEEPING If Rnd(10)=0 and GAMETIME>10 and GAMETIME<115 and OVER<2 Gosub RANDOM End If End If If CONTESTANTS=0 Then Exit If Key State(25) Then PAUSE Loop ' Fade 5 : _SAM[1,2200] : Wait 8 : _SAM[1,2200] : Wait 72 Sprite Off Pop Proc ' ' _COLIDE: _DONT=1 HITED=GRID(X(MAN),Y(MAN)) If HITED=MAN+1 and ITEM(_PT,MAN+1) ITEM(_PT,MAN+1)=1 NOOX=Min(BIGX,Max(0,X(MAN)+DX(MAN))) NOOY=Min(BIGY,Max(0,Y(MAN)+DY(MAN))) If GRID(NOOX,NOOY)=0 _SAM[13,25000] TEX=X(MAN) : TEY=Y(MAN) CX=(TEX*4)+32 : CY=(TEY*4)+32 Screen Copy 1,CX,CY,CX+4,CY+4 To 0,CX,CY GRID(TEX,TEY)=0 Add X(MAN),DX(MAN) : Add Y(MAN),DY(MAN) Goto OK End If End If If L(HITED-1)=L(MAN) and L(MAN)>1 Then BOOB=1 Else BOOB=0 SIZ=((SIZ(MAN)+8)/8)+Rnd(1) _CHECKREV[MAN] If PASS=2 or(PASS=1 and ITEM(_REV,MAN+1)>0) _REVERSE[MAN] If PASS=1 Dec ITEM(_REV,MAN+1) End If Goto OK Else Add Y(MAN),DY(MAN) : Add X(MAN),DX(MAN) End If If HITED<>MAN+1 and HITED<25 If VIRUS=MAN If VCOUNT<1 or LASTV<>HITED-1 VIRUS=HITED-1 LASTV=MAN VCOUNT=5 _CHECKIT[1] End If Dec VCOUNT Else If VIRUS=HITED-1 If VCOUNT<1 or LASTV<>MAN VIRUS=MAN LASTV=HITED-1 VCOUNT=5 _CHECKIT[1] End If Dec VCOUNT End If End If If ITEM(_STUN,HITED)=2 and BOOB=0 If ITEM(_SGRAB,MAN+1) ITEM(_SGRAB,MAN+1)=1 ITEM(_STUN,MAN+1)=2 ITEM(_STUN,HITED)=1 _SAM[14,20000] : _SAM[15,3500] Else STUCK(MAN)=900 Dec ITEM(_STUN,HITED) _SAM[14,20000] : _SAM[14,20010] Add Y(MAN),-DY(MAN) Add X(MAN),-DX(MAN) If ITEM(_BOMB,MAN+1)=0 Goto OK End If End If End If If ITEM(_BOMB,MAN+1) and BOOB=0 If ITEM(_BGRAB,HITED)>0 and ITEM(_BOMBB,HITED)=0 _SAM[10,18000] : _SAM[8,4500] ITEM(_BGRAB,HITED)=1 Dec ITEM(_BOMB,MAN+1) Inc ITEM(_BOMB,HITED) Else Gosub BOMB Goto OK End If End If Add STACK(HITED-1),SIZ/2 Inc DAM(HITED-1,MAN) End If Add Y(MAN),-DY(MAN) : Add X(MAN),-DX(MAN) : KILBY=HITED If Rnd(8)>(-1+(ITEM(_SH1,MAN+1)*2)+(ITEM(_SH2,MAN+1)*4)) For SZZ=1 To SIZ : SHRINK[MAN,1] : Next SZZ If DX(MAN)<>0 or DY(MAN)<>0 _SAM[10,10500] End If End If If ITEM(_ATURN,MAN+1) FACE[MAN,DX(MAN),DY(MAN)] ITEM(_ATURN,MAN+1)=1 End If _DONT=0 OK: If DEAD(MAN)>0 _DONT=0 End If Return ' VIRI: _SAM[10,20000] If _MEMORY=0 Then _SAM[7,12000] Else _SAM[19,7500] Add DAM(LVIRUS,MAN),5 CN=Max(2,SIZ(MAN)/6) Do KILBY=LVIRUS+1 SHRINK[MAN,0] If DEAD(MAN)>0 Then Exit Dec CN If CN<1 Then FACE[MAN,DX(MAN),DY(MAN)] : Exit Loop Return ' BOMB: FAD[$FFF,0] If ITEM(_BOMBB,HITED) Dec ITEM(_BOMBB,HITED) Add DAM(HITED-1,MAN),5 Add STACK(HITED-1),5 _SAM[10,32000] If _MEMORY=0 _SAM[16,30000] _SAM[10,25000] Else _SAM[17,6100] _SAM[17,6200] End If COWNT=0 Do SHRINK[MAN,0] : Inc COWNT If COWNT=5 Exit End If Loop FACE[MAN,DX(MAN),DY(MAN)] Else _SAM[10,25000] For Y0=0 To 4 For X0=0 To 4 TEX=Min(BIGX,Max(0,(X(MAN)-2)+X0)) TEY=Min(BIGY,Max(0,(Y(MAN)-2)+Y0)) PO=GRID(TEX,TEY) If PO>0 and PO<25 and PO<>MAN+1 CX=(TEX*4)+32 CY=(TEY*4)+32 Screen Copy 1,CX,CY,CX+4,CY+4 To 0,CX,CY GRID(TEX,TEY)=0 Inc DAM(MAN,PO-1) : Inc STACK(MAN) KILBY=MAN+1 SHRINK[PO-1,0] CHE=GRID(X(PO-1),Y(PO-1)) If CHE<>PO SHRINK[PO-1,0] End If FACE[PO-1,DX(PO-1),DY(PO-1)] If SIZ(PO-1)<5 and STUCK(PO-1)>20 STUCK(PO-1)=20 End If End If Next X0 Next Y0 End If Dec ITEM(_BOMB,MAN+1) If ITEM(_BOMB,MAN+1)=0 MADCRY[12,4000,1] End If Fade 3 To 1 Return ' ' TIME_KEEPING: If GAMETIME>0 If GAMETIME=10 If _MEMORY=0 MADCRY[12,4080,4] Else MADCRY[20,5000,4] End If _EXIT BW[1] GAMETIME=9 End If If Timer>SECS*TIME If(HUMANS=0 and DEMO=0) SECS=9 End If If CONTESTANTS<2 or OVER=2 SECS=2 End If If GAMETIME<10 SECS=35 End If Timer=0 : Dec GAMETIME : SHOTIME For A=0 To MEN If DEAD(A)=0 and SECS>8 Add BIGBON(A),SIZ(A) Add SPEEDBON(A),(13-BOO(A))*8 Inc COUNTER(A) End If Next A End If If GAMETIME=115 GG=0 Repeat If DEAD(GG)=0 and CONTR(GG)<>7 and DX(GG)=0 and DY(GG)=0 FACE[GG,(Rnd(1)*2)-1,0] End If Inc GG Until GG>MEN Dec GAMETIME End If Else If GAMETIME=0 If _MEMORY=1 MADCRY[20,5000,3] Else MADCRY[5,6000,3] End If Dec GAMETIME BW[1] Else If Timer>4 For MAN=0 To MEN If DEAD(MAN)=0 and CONTR(MAN)<>7 KILBY=0 : STACK(MAN)=0 : SHRINK[MAN,1] : Timer=0 End If Next MAN End If End If End If Return ' ' RANDOM: BITSEMPTY If TMP(1)<3 and Rnd(50-CONTESTANTS*4)=0 Then SPEED[SPEED,9] : Goto ER If TMP(0)<2 If PARTS=5 If Rnd(44-CONTESTANTS*4)=0 SPEED[PART,7] Goto ER End If Else If Rnd(250)=0 SPEED[PART,7] Goto ER End If End If End If ' If Rnd(220-(CONTESTANTS*8))=0 Then SPEED[MONEY,38] : Goto ER If Rnd(250)=0 and MEGAX=-1 Then _FREEBOMB : Goto ER 'If GAMETIME>15 and GAMETIME<120 and Rnd(5)=0 Then _FREE[62,_MINE,12,2] : Goto ER If _VIR>0 and GAMETIME>50 and GAMETIME<90 and Rnd(1000)=0 and VIRUS=-1 and MEGAX=-1 Then _FREE[56,_VIRUS,7,10] : Goto ER If _VIR=2 and GAMETIME>45 and GAMETIME<100 and HUMANS>0 and Rnd(1500)=0 and VIRUS=-1 and MEGAX=-1 Then _FREE[56,_VIRUS,7,10] : Goto ER If DEM=0 and GAMETIME>45 and GAMETIME<60 and Rnd(650)=0 and MEGAX=-1 Then _FREE[52,MEGA,9,20] : Goto ER If DEM=0 and GAMETIME>20 and GAMETIME<35 and CONTESTANTS>4 and Rnd(500)=0 and MEGAX=-1 Then _FREE[70,BW,8,3] : Goto ER If DEM=0 and STRON=0 and GAMETIME>25 and GAMETIME<45 and CONTESTANTS>4 and Rnd(500)=0 and MEGAX=-1 Then _FREE[68,STRAWB,15,1] : Goto ER If DEM=0 and STRON=1 Then If Rnd(200)=0 and MEGAX=-1 Then _FREE[68,STRAWB,8,3] : Goto ER If(_KEYS=1 or(Rnd(4)=0 and DEM=1)) and Rnd(550)=0 and OPEN=0 and MEGAX=-1 Then _FREE[69,KEY,5,3] : Goto ER If Rnd(130)=0 Then SPEED[SLOW,36] If DEM=0 and Rnd(120)=0 Then If Rnd(2)>0 Then SLIP Else SLOPE If Rnd(52)=0 Then BLOCK ER: Return ' MOVEIT: If VIRUS=MAN Paste Icon(X(MAN)*4)+32,(Y(MAN)*4)+32,110+SHADE(X(MAN),Y(MAN)) Else Paste Icon(X(MAN)*4)+32,(Y(MAN)*4)+32,50+(CUL(MAN)*3)+SHADE(X(MAN),Y(MAN)) End If GRID(X(MAN),Y(MAN))=MAN+1 TAIL(MAN,0,TL(MAN))=X(MAN) TAIL(MAN,1,TL(MAN))=Y(MAN) ' Add TL(MAN),1,0 To BIG ' Inc LTH(MAN) : BIT=-1 If LTH(MAN)>SIZ(MAN) BIT=TL(MAN)-(SIZ(MAN)+1) If BIT<0 BIT=(BIG+1)+BIT End If End If If BIT>-1 TX=TAIL(MAN,0,BIT) TY=TAIL(MAN,1,BIT) If TX<>X(MAN) or TY<>Y(MAN) If GRID(TX,TY)=MAN+1 or GRID(TX,TY)=0 CX=(TX*4)+32 CY=(TY*4)+32 Screen Copy 1,CX,CY,CX+4,CY+4 To 0,CX,CY GRID(TX,TY)=0 End If End If End If Return ' ' BLANKOFF: CX=(SCOOX*4)+32 CY=(SCOOY*4)+32 Screen Copy 1,CX,CY,CX+4,CY+4 To 0,CX,CY GRID(SCOOX,SCOOY)=0 Return ' ' SSCOOPER: SCOOP=0 Do SCOOX=Min(BIGX,Max(0,X(MAN)+SCOOPCO(SCOOP,0))) SCOOY=Min(BIGY,Max(0,Y(MAN)+SCOOPCO(SCOOP,1))) GR=GRID(SCOOX,SCOOY) If GR<>MAN+1 and GR<>0 CHK=0 If ITEM(_SCOOP,MAN+1) If GR=PART Add STACK(MAN),8+Rnd(4) : _SAM[12,12000] : Inc CHK End If If GR=GOLD KILMONEY[SCOOX,SCOOY,1] : _SAM[15,7000] : FAD[$660,0] : Fade 3 To 1 : Inc CHK End If If GR=MONEY Gosub GMONEY : _SAM[MON,14500] : Inc CHK End If If GR=SPEED SPEED(MAN)=Max(0,SPEED(MAN)-1) : _SAM[6,14000] : Inc CHK End If End If If ITEM(_SLSC,MAN+1) If GR=SLOW SPEED(MAN)=Min(6-LOWEST,SPEED(MAN)+1) : _SAM[6,6000] : Inc CHK End If End If If CHK If GR=SLOW ITEM(_SLSC,MAN+1)=1 Else ITEM(_SCOOP,MAN+1)=1 End If BITS[SCOOX,SCOOY,0] : Gosub BLANKOFF End If End If Inc SCOOP : If SCOOP=4 Then Exit Loop Return ' ' CRASHED: KILBY=0 SIZ=Max((SIZ(MAN)+8)/8,1) If Rnd(8)>(-1+(ITEM(_SH1,MAN+1)*2)+(ITEM(_SH2,MAN+1)*4)) For SZZ=1 To SIZ : SHRINK[MAN,1] : Next SZZ _SAM[10,10500] End If Return ' HOLE: KILBY=-1 SIZ=(SIZ(MAN)+16)/10 SIZ=Max(2,SIZ) If SIZ(MAN)-SIZ>1 Then _SAM[13,8000+(SIZ(MAN)*100)] For SZZ=1 To SIZ SHRINK[MAN,1] Next SZZ Return ' _EXIT: KILBY=-2 If _MEMORY=1 _SAM[18,10000] : _SAM[18,10010] Else _SAM[6,1100] : _SAM[6,1110] End If Repeat Wait Vbl SHRINK[MAN,1] SHRINK[MAN,1] Until DEAD(MAN) _SAM[21,11000] _SAM[21,11000+Rnd(10)] Return ' ' WALL: OK[X(MAN)+DX(MAN),Y(MAN)+DY(MAN)] If Param X(MAN)=OKX : Y(MAN)=OKY SCROL : _SAM[Rnd(3)+1,4000] PARTX(MAN)=-1 PARTY(MAN)=-1 CR=0 Else CR=1 : Gosub CRASHED If ITEM(_ATURN,MAN+1) FACE[MAN,DX(MAN),DY(MAN)] ITEM(_ATURN,MAN+1)=1 End If End If Return ' GMONEY: If MONEY(MAN)-LOAN(MAN)<1000 MON=Rnd(2)+2 Else If MONEY(MAN)-LOAN(MAN)<1500 MON=Rnd(2)+1 Else MON=Rnd(1)+1 End If End If Add MONEY(MAN),MON*100 Return ' End Proc ' Procedure MENU ' _DOSCR[13,7] _DOSCR[13,1] _DOSCR[13,0] Screen 0 ' FAD[0,0] Screen Show 0 FAD[$F00,3] ' Gosub SHMEN ' OM=X Mouse+Y Mouse Do MOVEMOUSE If Timer>1600 Then Proc HISCORES[Rnd(5)] : Gosub SHMEN : MZ=0 If MKEY and Mouse Zone=147 Then Proc HISCORES[0] : Gosub SHMEN : MZ=0 If X Mouse+Y Mouse<>OM Then Timer=0 : OM=X Mouse+Y Mouse If MKEY=0 Then Goto NOKEY If(MKEY=1 or Key State(68)) and Mouse Zone=149 Then DEMO=0 : Gosub CHEC : If CHEC=1 Then Exit Else MADCRY[6,9000,5] : Goto NOKEY If(MKEY=1 or Key State(68)) and Mouse Zone=145 Then DEMO=1 : Gosub CHEC : If CHEC=1 Then Exit Else MADCRY[6,9000,5] : DEMO=0 : Goto NOKEY If(MKEY=1 and Mouse Zone=201) or Key State(69) Then ALLERT[1,"Do You Want","To Quit?","Yes","No!"] : If Param=0 Then Wait 70 : MADCRY[6,1000,1] : FAD[$F0F,10] : Wait 160 : Fade 1 : Wait 20 : End If MKEY=1 and Mouse Zone=150 Then OPTIONS : Gosub SHMEN If MKEY=1 and Mouse Zone=148 Then ABOUT : Gosub SHMEN If MKEY=1 and Mouse Zone=143 Then MERGE : Gosub SHMEN If MKEY=1 and Mouse Zone=146 Then _SAM[15,2200] : _SAVEOPS[0] : WAT0 : MZ=0 If MKEY=1 and Mouse Zone=144 Then Gosub _LOADIN : If PASS=1 Then _LOADSAVE[1] : Wait 20 : Exit Else WAT0 : MZ=0 If MZ>=21 and MZ<=26 Then _SAM[8,30000] : If MKEY=1 Then Add CONTR(MZ-21),1,0 To 7 : PASS=MZ-21 : Gosub SHO : WAT0 Else Add CONTR(MZ-21),-1,0 To 7 : PASS=MZ-21 : Gosub SHO : WAT0 If MZ>=27 and MZ<=30 Then _SAM[8,30000] : Add CONTR(MZ-21),1,6 To 7 : PASS=MZ-21 : Gosub SHO : WAT0 If MZ>=61 and MZ<=70 Then If CONTR(MZ-61)<6 Then _SAM[9,30000] : PASS=MZ-61 : Gosub NAME If MZ>=160 and MZ<=169 Then If CONTR(MZ-160)<7 Then _SAM[5,20000] : PASS=MZ-160 : If MKEY=1 Then Add L(MZ-160),1,0 To 8 : Gosub SHO : WAT0 Else Add L(MZ-160),-1,0 To 8 : Gosub SHO : WAT0 If MZ>=1 and MZ<=10 Then PASS=MZ-1 : CULMENU : Gosub SHO : Gosub SHMEN Timer=0 NOKEY: Loop ' MADCRY[7,4080,4] Fade 1 Wait 16 Pop Proc ' CHEC: CHEC=1 OF=0 For PE=0 To 5 For A=0 To MEN If CONTR(A)<6 and A<>PE and CONTR(A)=CONTR(PE) Then CHEC=-1 Next A If DEM and(CONTR(PE)=4 or CONTR(PE)=5) Then CHEC=-2 If DEM and L(PE)>1 and CONTR(PE)<6 Then CHEC=-3 Next PE HUM=0 For A=0 To MEN If CONTR(A)=7 Then Inc OF : L(A)=0 If CONTR(A)<6 Then Inc HUM Next A If CHEC=-1 Then ALLERT[1,"Controls","Setup Error","Ok","Ok"] : CHEC=0 If CHEC=-2 Then ALLERT[1,"No Adaptors in","Demo!","Ok","Ok"] : CHEC=0 If CHEC=-3 Then ALLERT[1,"No Humans in","Teams (Demo)","Ok","Ok"] : CHEC=0 If OF>8 Then CHEC=0 PASS=0 If HUM=0 and CHEC=1 and DEMO=0 Then ALLERT[1,"No Humans!","Start A Demo?","Yes","No!"] : If Param=0 Then DEMO=1 : PASS=0 Else CHEC=0 Return ' SHO: Rem Update Menu Screen TRX=X Mouse TRY=Y Mouse If CONTR(PASS)<6 NA$=HUMAN$(PASS) Else If CONTR(PASS)=6 NA$=COMP$(CUL(PASS)) Else NA$="Off" End If End If MX=0 : MY=PASS : If MY>4 Then Add MY,-5 : Inc MX If NA$<>NAME$(PASS) Then NAME$(PASS)=NA$ : LE=15 : Gosub SHONAM Ink 1,0 MX=0 : MY=0 For MAN=0 To 9 Paste Icon 12+(MX*154),136+(MY*22),50+(CUL(MAN)*3) Paste Icon 110+(MX*154),135+(MY*22),CONTR(MAN)+1 If CONTR(MAN)<7 L=L(MAN)+15 Else L=15 End If Paste Icon 144+(MX*154),138+(MY*22),L If DEM=0 or MAN<8 SHTEX[20+(MX*154),137+(MY*22),NAME$(MAN),7] Set Zone MAN+1,6+(MX*154),133+(MY*22) To 22+(MX*154),151+(MY*22) Set Zone MAN+21,110+(MX*154),135+(MY*22) To 142+(MX*154),150+(MY*22) Set Zone MAN+160,144+(MX*154),138+(MY*22) To 154+(MX*154),146+(MY*22) Set Zone MAN+61,26+(MX*154),133+(MY*22) To 108+(MX*154),150+(MY*22) Else SHTEX[173,137+(MY*22),"Unavailable.",7] End If Inc MY : If MY=5 Then MY=0 : Inc MX Next MAN X Mouse=TRX Y Mouse=TRY Return ' ' Show Menu Screen ' SHMEN: WAT0 Screen Copy 7 To 0 : Screen 0 MX=0 : MY=1 For MAN=1 To 9 Screen Copy 0,8,132,158,154 To 0,8+(MX*154),132+(MY*22) Inc MY : If MY=5 Then MY=0 : Inc MX Next MAN Limit Mouse 128,37 To 442,289 Reserve Zone 201 Set Zone 145,280,110 To 305,125 Set Zone 146,10,110 To 23,128 Set Zone 144,24,110 To 36,128 Set Zone 143,37,110 To 50,128 Set Zone 147,75,108 To 100,128 Set Zone 148,225,108 To 245,128 Set Zone 149,101,108 To 205,128 Set Zone 150,205,108 To 225,128 Set Zone 201,10,5 To 25,20 PASS=0 : Gosub SHO MADCRY[6,1000,1] Fade 5 To 7 Timer=0 MZ=0 Return ' _LOADIN: If DEM Then ALLERT[1,"No loading","in Demo","Ok","Ok"] : Goto LODD If Exist("Sneechfiles/Sav_Options.dat") and Exist("Sneechfiles/Old_Game.dat") ALLERT[1,"Load An Old","League?","Yes","No!"] If Param=0 PASS=1 Goto LODD End If End If PASS=0 ALLERT[1,"No Old Game","Load Disk Ops?","Yes","No!"] If Param=0 Then _LOADOPS[0] : Goto LOOO ALLERT[1,"Want To Load","Default Ops?","Yes","No!"] If Param=0 Then _LOADOPS[1] Else Goto LODD LOOO: FAD[$F00,1] Gosub SHMEN LODD: Return ' NAME: Sprite Off 0 MX=0 : MY=PASS : If MY>4 Then Add MY,-5 : Inc MX LE=Len(NAME$(PASS)) ' Gosub SHONAM Clear Key WAT0 Do MOVEMOUSE A$=Inkey$ If Mouse Key<>0 or Fire(1)<>0 Then If LE>0 Then LE=100 : Gosub SHONAM : Exit If A$="" Then Goto NOLET If Asc(A$)=8 Then If LE>0 Then NAME$(PASS)=Left$(NAME$(PASS),LE-1) : Dec LE : Wait 3 If Asc(A$)=13 Then If LE>0 Then LE=100 : Gosub SHONAM : Exit If LE=10 Then _SAM[10,10000] : Goto NOLET ' If Asc(A$)>31 and Asc(A$)<127 Then NAME$(PASS)=NAME$(PASS)+A$ : Inc LE ' SH: Gosub SHONAM NOLET: Loop Do If Right$(NAME$(PASS),1)=" " and Len(NAME$(PASS))>1 NAME$(PASS)=Left$(NAME$(PASS),Len(NAME$(PASS))-1) Else Exit End If Loop HUMAN$(PASS)=NAME$(PASS) Return ' SHONAM: _SAM[9,30000] Ink 0 : Vbl Wait 190 Bar 23+(MX*154),137+(MY*22) To 109+(MX*154),147+(MY*22) If LE<11 SHTEX[20+(MX*154),137+(MY*22),NAME$(PASS)+"_",7] Else SHTEX[20+(MX*154),137+(MY*22),NAME$(PASS),7] End If Return ' End Proc ' Procedure SHOLEAGUE ' If DEMO=1 Then Goto DEM _DOSCR[14,0] : CUL[$F00,0] _DOSCR[14,1] Screen 0 Ink 12 : Bar 60,175 To 191,182 _SORT[GAME] If GAMES>GAME Then SH[76,176,"Play Match"+Str$(GAME)+" Of"+Str$(GAMES)] Else SH[83,176,"Play Last Match"] SH[85,53,"Current League Table"] SH[63,65,"Name $ Rate Pts"] ' For A=0 To MEN POS=WININ(A) If CONTR(POS)<>7 SHTEX[58,74+A*9,NAME$(POS),7] If A>0 If L(POS)>1 and L(POS)=L(WININ(A-1)) Goto LX End If End If If L(POS) Paste Icon 48,75+A*9,15+L(POS) End If SHTEX[172,74+A*9,Str$(RATE(POS)),7] SHTEX[207,74+A*9,Str$(SCORE(POS)),7] LX: PAY=-Min(LOAN(POS),MONEY(POS)) Add LOAN(POS),PAY : Add MONEY(POS),PAY If MONEY(POS)>9999 SHTEX[131,74+A*9,Str$(MONEY(POS)/1000)+"k",7] Else SHTEX[131,74+A*9,Str$(MONEY(POS)),7] End If End If Next A LAAA: Reserve Zone 5 Set Zone 1,50,166 To 223,190 Set Zone 3,225,169 To 244,188 Set Zone 2,249,169 To 270,185 Screen Show 0 Sprite Off Fade 5 To 1 X Mouse=280 : Y Mouse=230 MADCRY[4,5000,1] Wait 82 ' ' RET: Repeat MOVEMOUSE Until(MKEY or Key State(68) or Key State(49)) and MZ<>0 If MZ=2 If GAME=1 GAMEOVER=1 Else ALLERT[1,"Quit League!","Are You Sure?","Yes","No!"] If Param=1 Goto RET Else GAMEOVER=1 GAME=1 End If End If End If If MZ=3 Then ALLERT[1,"Save League &","Exit To Menu?","Yes","No!"] : If Param=0 Then _LOADSAVE[0] : GAME=1 : GAMEOVER=1 Else Goto RET SKP: ' MADCRY[4,5000,1] Fade 3 Wait 24 ' If GAMEOVER=1 Then Pop Proc ' _LOADSAVE[0] ' DEM: TEST=0 For A=0 To MEN ITEM(_STSPEED,A+1)=LOWEST If CONTR(A)<6 If L(A)<>1 Inc TEST Else ITEM(_SH1,A+1)=1 ITEM(_SH2,A+1)=1 ITEM(_SCOOP,A+1)=1 ITEM(_ATURN,A+1)=1 ITEM(_CON,A+1)=1 ITEM(_SLSC,A+1)=1 ITEM(_SUV1,A+1)=1 ITEM(_STSIZ,A+1)=40 ITEM(_STSPEED,A+1)=2 ITEM(_SREV,A+1)=1 ITEM(_REV,A+1)=3 ITEM(_BOMBB,A+1)=5 MONEY(A)=0 End If End If If CONTR(A)<>6 Then Goto L Timer=0 GG=CPREF(CUL(A),0) : If ITEM(GG,A+1)ITEM(GG,0) and ITEM(GG,A+1)ITEM(GG,0) and ITEM(GG,A+1)ITEM(GG,0) and ITEM(GG,A+1)150 Then Exit Loop L: Next A If TEST>0 Then SHOP For A=0 To MEN LOAN(A)=LOAN(A)*1.2 _INTEREST(A)=Min(2500,(MONEY(A)*50)/100) MONEY(A)=MONEY(A)+_INTEREST(A) OLDM(A)=MONEY(A) OLDP(A)=SCORE(A) Next A ' End Proc Procedure RESULTS ' If OUT<>CONTEND Then Pop Proc ' _DOSCR[15,0] : CUL[$F,0] FF$="Sneechfiles/Sav_Options.dat" : If Exist(FF$) Then Kill FF$ FF$="Sneechfiles/Old_Game.dat" : If Exist(FF$) Then Kill FF$ If _SCORE=0 Then Goto SK1 _DOSCR[15,1] : Screen 0 If DEMO=1 TEX[105,30,"End Of Demo"] Else TEX[99,30,"End Of Game"+Str$(GAME)] End If TEX[52,50,"Pos Name Bonus Total"] SK1: For A=0 To CONTEND-1 POS=OUT((CONTEND-1)-A) If CONTR(POS)<>7 'PTS(POS)=BON BON=FINISH(POS) PTS(POS)=BON If _SCORE>0 If L(POS) Paste Icon 50,63+A*13,15+L(POS) End If TEX[59,65+A*13,Right$(" "+Str$(A+1),2)+" "+NAME$(POS)] TEX[167,65+A*13,Str$(BON)] TEX[215,65+A*13,Str$(BON)] End If End If Next A ' If _SCORE=0 Then Goto SK2 TEX[104,219,"Finish BONUS"] Sprite Off : Screen Show 0 : Fade 4 To 1 : MADCRY[4,5000,4] Wait 40 SK2: ' For A=0 To MEN If CONTR(A)<>7 C=Max(COUNTER(A),75) : B#=C/100.0 BIGBON(A)=(BIGBON(A)/Max(1,COUNTER(A)))*B# SPEEDBON(A)=(SPEEDBON(A)/Max(1,COUNTER(A)))*B# End If Next A Gosub CLR DIS["Size & Speed Bonus"] For A=0 To CONTEND-1 POS=OUT((CONTEND-1)-A) If CONTR(POS)<>7 BON=BIGBON(POS)+SPEEDBON(POS) Add PTS(POS),BON Gosub SHO End If Next A If _SCORE Then Wait 65 ' For DAM=0 To MEN RM=-1 : MX=0 For A=0 To MEN If L(A)=L(DAM) and L(A)>1 Then DAM(A,DAM)=0 : Else : DAM(A,DAM)=(10+DAM(A,DAM))/12 If DAM(A,DAM)>MX Then MX=DAM(A,DAM) : RM=A Next A For A=0 To MEN If DAM(A,DAM)0 PASS=1 If KILS(A,0)>0 For KIL=1 To KILS(A,0) If KILS(A,KIL)=PIT PASS=0 DAM(A,PIT)=0 End If Next KIL End If If PASS=1 Add DEST(A),(KIL(PIT)/2) End If End If Next PIT Next A ' Gosub CLR DIS["Kill & Damage Bonus"] For A=0 To CONTEND-1 POS=OUT((CONTEND-1)-A) If CONTR(POS)<>7 BON=KILBON(POS)+DEST(POS) Add PTS(POS),BON Gosub SHO End If Next A If _SCORE Then Wait 70 ' ' Gosub CLR DIS["Random Factor"] For A=0 To CONTEND-1 POS=OUT((CONTEND-1)-A) If CONTR(POS)<>7 RF=ITEM(_RF,POS+1)*90 BON=Rnd(Max(5,RF+30-OUT(POS)))+(ITEM(_RF,POS+1)*30) Add PTS(POS),BON Gosub SHO End If Next A ' ' If _SCORE Then Wait 120 : MADCRY[6,5000,20] : Fade 1 : Wait 12 For A=0 To CONTEND-1 POS=OUT((CONTEND-1)-A) If CONTR(POS)<>7 For ITS=0 To 20 If ITEM(ITS,12)=1 and ITEM(ITS,POS+1)>0 Dec ITEM(ITS,POS+1) End If If ITEM(ITS,12)=0 ITEM(ITS,POS+1)=0 End If Next ITS End If Next A ' If _STAT>0 _DOSCR[16,0] For A=1 To 31 : Colour(A),4095-A : Next A For A=0 To CONTEND-1 Screen Copy 0,0,36,320,57 To 0,0,36+A*21 Next A End If ' For A=0 To CONTEND-1 POS=OUT((CONTEND-1)-A) If CONTR(POS)<>7 BM=0 : BP=0 : B$="" If MONEY(POS)+_INTEREST(POS)=0 and SPEEDBON(POS)<43 and BIGBON(POS)<40 and KILBON(POS)+DEST(POS)=0 : B$="Foolish Bonus" : BP=100 : BM=300 : End If If MONEY(POS)-OLDM(POS)>4499 : B$="Money Bonus" : BP=100 : BM=10 : End If If SPEEDBON(POS)>94 : B$="Speed Bonus" : BP=100 : BM=400 : End If If BIGBON(POS)>79 : B$="Size Bonus" : BP=150 : BM=400 : End If If KILBON(POS)>(CONTEND*55)+150 : B$="Kill Bonus" : BP=150 : BM=500 : End If If IT=POS : B$="Survive Bonus" : BM=Min(999,300+CONTEND*70) : BP=KIL(POS) : End If If _STAT>0 : Paste Icon 3,40+A*21,50+(CUL(POS)*3) : End If T=1 AA=0 : BB=0 Do If KILS(POS,0)0 : Paste Icon 190+AA,BB+40+A*21,50+(CUL(KILS(POS,T))*3) : End If Add AA,5 If AA>10 AA=0 Add BB,5 End If Inc T Loop ' AA=0 : BB=0 For T=0 To MEN If DAM(POS,T)>0 If _STAT>0 : Paste Icon 232+AA,BB+40+A*21,50+(CUL(T))*3 : End If Add AA,5 If AA>10 AA=0 Add BB,5 End If End If Next T ' If _STAT>0 : SHTEX[197,41+A*21,Str$(KILBON(POS)),7] : SHTEX[239,41+A*21,Str$(DEST(POS)),7] : SHTEX[148,37+A*21,Str$(SPEEDBON(POS)),7] : SHTEX[148,46+A*21,Str$(BIGBON(POS)),7] : End If ' If BM>0 or BP>0 If _STAT>0 Ink 10 : Paint 50,47+A*21 SHTEX[98,37+A*21," $"+Right$(Str$(BM),Len(Str$(BM))-1),7] SHTEX[98,46+A*21,Str$(BP)+"Pts",7] SHTEX[7,37+A*21,B$,7] End If Add MONEY(POS),BM Add PTS(POS),BP End If ' OLDM(POS)=(MONEY(POS)-OLDM(POS)) ' If _STAT>0 SHTEX[-1,45+A*21,NAME$(POS),7] SHTEX[265,37+A*21," $"+Right$(Str$(_INTEREST(POS)),Len(Str$(_INTEREST(POS)))-1),7] SHTEX[265,46+A*21," $"+Right$(Str$(OLDM(POS)),Len(Str$(OLDM(POS)))-1),7] End If ' Add SPENDS(POS),(_INTEREST(POS)+OLDM(POS)) Add SCORE(POS),PTS(POS) OLDP(POS)=(SCORE(POS)-OLDP(POS)) End If Next A ' If _STAT>0 : MADCRY[6,8000,5] : Screen Show 0 : Fade 3 To 1 : Wait 48 : End If ' For GGG=1 To 5 : _SAVE[GGG] : Next GGG ' If _STAT=0 Then Goto SK4 Repeat MOVEMOUSE Until MKEY or Key State(68) or Key State(49) ' EN: MADCRY[4,5000,4] Fade 3 Wait 30 ' SK4: For A=2 To 8 MON=0 SCO=0 CNT=0 For B=0 To MEN If L(B)=A Add MON,MONEY(B) Add SCO,SCORE(B) Inc CNT End If Next B For B=0 To MEN If L(B)=A MONEY(B)=MON/CNT SCORE(B)=SCO/CNT End If Next B Next A ' Pop Proc ' SHO: If _SCORE<>0 If BON>0 TEX[167,65+A*13,Str$(BON)] : Wait Vbl Screen Copy 1,222,65+(A*13),260,73+(A*13) To 0,222,65+(A*13) TEX[215,65+A*13,Str$(PTS(POS))] _SAM[12,6700+(A*20)] Wait 15-A End If End If Return ' CLR: If _SCORE>0 For A=0 To CONTEND-1 Screen Copy 1,172,65+(A*13),223,73+(A*13) To 0,172,65+(A*13) Next A End If Return ' End Proc Procedure SHOP ' _DOSCR[11,0] : CUL[$F0,0] : Paste Bob 4,68,312 _DOSCR[11,1] : Paste Bob 4,68,312 Screen 0 Ink 0 : Bar 0,250 To 319,255 Screen Copy 0,0,0,160,128 To 0,160,0 : Screen Copy 0,0,0,320,128 To 0,0,127 Sprite Off DEEND=0 Reserve Zone 100 ' CORNER(0)=-1 : CORNER(1)=-1 CORNER(2)=-1 : CORNER(3)=-1 CORNER(4)=-1 : CORNER(5)=-1 ' C=0 For A=0 To MEN If CONTR(A)<6 and L(A)<>1 CORNER(C)=A Inc C End If Next A ' CORN=0 Do OX=CPOS(CORN,0)*160 OY=CPOS(CORN,1)*127 If CORNER(CORN)>-1 Gosub SHOIM Set Zone 1+(CORN*25),113+OX,103+OY To 155+OX,120+OY For G=0 To 4 Set Zone 2+(G*2)+(CORN*25),110+OX,23+OY+(G*9) To 128+OX,32+OY+(G*9) Set Zone 3+(G*2)+(CORN*25),140+OX,23+OY+(G*9) To 155+OX,32+OY+(G*9) Next G For G=0 To 3 Set Zone 12+G+(CORN*25),(G*12)+6+OX,69+OY To(G*12)+18+OX,76+OY Next G Set Zone 19+(CORN*25),113+OX,75+OY To 155+OX,100+OY Else Gosub SHADE End If CWAIT(CORN)=0 Inc CORN : If CORN=4 Then Exit Loop ' Screen Show 0 Fade 3 To 1 MADCRY[2,2500+Rnd(500),2] Timer=0 ' Do Gosub MOVM Vbl Wait 200 Exit If DEEND=4 'Exit If Key State(69) If Rnd(220)=0 Then _SAM[14,1500+Rnd(1500)] Loop ' Wait 26 MADCRY[2,2700,2] Fade 3 : Wait 24 Sprite Off Pop Proc ' ' SHOIM: DIS=0 PERS=CORNER(CORN) If MONEY(PERS)<20 and DEM=0 CTYP(CORN)=3 Else CTYP(CORN)=0 End If DIS=0 : Gosub SHO Sprite CORN*2,128+70+OX,42+70+OY,23 Return ' ' BEEPSHO: If DIS<6 Then CWAIT(A)=Timer+4 Else CWAIT(A)=Timer+12 _SAM[9,40000] CORN=A Gosub SHO Return ' SHO: CTYP=CTYP(CORN) OX=CPOS(CORN,0)*160 OY=CPOS(CORN,1)*127 SHTEX[14+OX,8+OY,NAME$(PERS),7] Paste Icon 145+OX,78+OY,50+(CUL(PERS)*3) Paste Icon 5+OX,11+OY,50+(CUL(PERS)*3) Ink 0 Bar 110+OX,10+OY To 153+OX,17+OY If MONEY(PERS)>99999 TEX[103+OX,10+OY,Str$(MONEY(PERS)/1000)+"k"] Else TEX[103+OX,10+OY,Str$(MONEY(PERS))] End If If DIS=-1 Goto SKIPE End If ' If DIS=0 Paste Bob 4+OX,68+OY,312+CTYP If CTYP=3 Gosub SHOLOAN End If For ITEM=0 To 4 Bar 78+OX,23+OY+(ITEM*9) To 107+OX,31+OY+(ITEM*9) TEX[72+OX,24+OY+(ITEM*9),Str$(ITEM(ITEM+10,PERS+1))] Next ITEM End If If DIS>0 and DIS<6 ITEM=DIS-1 Bar 78+OX,23+OY+(ITEM*9) To 107+OX,31+OY+(ITEM*9) TEX[72+OX,24+OY+(ITEM*9),Str$(ITEM(ITEM+10,PERS+1))] End If ' If CTYP=0 or CTYP=1 or CTYP=2 PLUSS=CTYP*5 If CTYP=2 PLUSS=16 End If For G=0 To 4 If ITEM(G+PLUSS,PERS+1)=0 Paste Bob 79+OX,77+OY+(G*9),310 Else Paste Bob 79+OX,77+OY+(G*9),311 End If Set Zone(24-G)+(CORN*25),76+OX,(113+OY)-(G*9) To 90+OX,(122+OY)-(G*9) Next G Else Set Zone 20+(CORN*25),46+OX,90+OY To 63+OX,98+OY Set Zone 21+(CORN*25),46+OX,100+OY To 63+OX,110+OY End If ' If DIS>5 and DIS<11 ITEM=DIS-6 If ITEM(ITEM+PLUSS,PERS+1)=0 Paste Bob 79+OX,77+OY+(ITEM*9),310 Else Paste Bob 79+OX,77+OY+(ITEM*9),311 End If End If ' Paste Bob 142+OX,87+OY,310+ITEM(_EXTRA,PERS+1) SKIPE: Return ' ' SHADE: Inc DEEND SPR=CORNER(CORN) If SPR>-1 If LOAN(SPR)>0 and MONEY(SPR)>0 BIGG=Min(MONEY(SPR),LOAN(SPR)) Add LOAN(SPR),-BIGG Add MONEY(SPR),-BIGG DIS=0 : Gosub SHO : Wait 10 End If End If CORNER(CORN)=-1 If CORN=0 Then Paste Bob 0,0,320 If CORN=1 Then Paste Bob 160,0,Hrev(320) If CORN=2 Then Paste Bob 0,127,Vrev(320) If CORN=3 Then Paste Bob 160,127,Hrev(Vrev(320)) If CORNER(4)>-1 Swap CORNER(CORN),CORNER(4) : Gosub NEWONE : Gosub SHOIM : Dec DEEND Else If CORNER(5)>-1 Swap CORNER(CORN),CORNER(5) : Gosub NEWONE : Gosub SHOIM : Dec DEEND End If End If Return ' ' NEWONE: OX=CPOS(CORN,0)*160 OY=CPOS(CORN,1)*127 _SAM[12,3000] For A=1 To 60 : Screen Copy 1,80-(A*1.25),64-A,80+(A*1.25),64+A To 0,OX+80-(A*1.25),OY+64-A : Next A Screen Copy 1,0,0,160,128 To 0,OX,OY Return ' ' MOVM: CORN=0 Repeat If CORNER(CORN)=-1 Then Goto DEEND PERS=CORNER(CORN) A=CORN*2 WHICHCONT[CONTR(PERS)] If MOVE(1) Then Sprite A,,Max(CPOS(A/2,1)*127+68,Y Sprite(A)-2), If MOVE(2) Then Sprite A,,Min((CPOS(A/2,1)+1)*127+32,Y Sprite(A)+2), If MOVE(3) Then Sprite A,Min((CPOS(A/2,0)+1)*160+116,X Sprite(A)+2),, If MOVE(4) Then Sprite A,Max(CPOS(A/2,0)*160+138,X Sprite(A)-2),, If MOVE(0) Then MZ=Hzone(X Sprite(A),Y Sprite(A)) : Gosub ZON : Goto DEEND DEEND: Inc CORN Until CORN>3 Return ' ZON: A=A/2 If Timer11 and MZ<15 or MZ=15 DIS=0 If CTYP(A)=MZ-12 Add CTYP(A),1,0 To 2 Else CTYP(A)=MZ-12 End If _SAM[6,4000] CORN=A : Gosub SHO CWAIT(A)=Timer+16 Goto DEND End If ' If MZ>1 and MZ<12 ITEM=MZ/2 ITEM#=MZ/2.0 If ITEM#=ITEM If MONEY(PERS)=>ITEM(ITEM+9,0) and ITEM(ITEM+9,PERS+1)0 and(ITEM+9<>_STSPEED or ITEM(_STSPEED,PERS+1)>LOWEST) Add MONEY(PERS),ITEM(ITEM+9,0) : Dec ITEM(ITEM+9,PERS+1) : DIS=ITEM : Gosub BEEPSHO End If End If End If ' ' If MZ>18 and MZ<25 If MZ=19 ITEM=_EXTRA : DIS=11 Else If CTYP(A)>0 and DEM _SAM[2,5000] Goto DEND Else If CTYP(A)=0 : ITEM=MZ-20 : End If If CTYP(A)=1 : ITEM=MZ-15 : End If If CTYP(A)=2 : ITEM=MZ-4 : End If If CTYP(A)=3 If MZ=20 AM=1000+(GAMES-GAME)*200+Min(3000,SPENDS(PERS)/GAME) If GAME=1 or L(PERS)=1 AM=0 End If MOUNT=Max(0,Min(AM-LOAN(PERS),20)) End If If MZ=21 MOUNT=-Min(MONEY(PERS),Min(LOAN(PERS),20)) End If If MOUNT<>0 Add LOAN(PERS),MOUNT Add MONEY(PERS),MOUNT _SAM[4,21000+(LOAN(PERS)*2)] CORN=A DIS=-1 : Gosub SHO : Gosub SHOLOAN CWAIT(A)=Timer+4 End If Goto DEND End If DIS=MZ-14 End If End If If ITEM(ITEM,PERS+1)=0 If MONEY(PERS)=>ITEM(ITEM,0) : Add MONEY(PERS),-ITEM(ITEM,0) : ITEM(ITEM,PERS+1)=1 : Gosub BEEPSHO : End If Else Add MONEY(PERS),ITEM(ITEM,0) : ITEM(ITEM,PERS+1)=0 : Gosub BEEPSHO End If End If DEND: Return ' ' SHOLOAN: PERS=CORNER(CORN) Ink 0 Bar 64+OX,80+OY To 105+OX,88+OY If GAME=1 or L(PERS)=1 LUN=0 Else LUN=1000+(GAMES-GAME)*200+Min(3000,SPENDS(PERS)/GAME) End If TEX[57+OX,81+OY,Str$(LUN)] Bar 61+OX,95+OY To 105+OX,103+OY : TEX[57+OX,96+OY,Str$(LOAN(PERS))] Bar 64+OX,110+OY To 105+OX,118+OY : P=LOAN(PERS)*1.2 : TEX[57+OX,111+OY,Str$(P)] Return ' End Proc Procedure OPTIONS ' MAKEIT[62,84] ' TEX[104,30,"Game Options"] TEX[80,136,"Press Here To EXIT"] Reserve Zone 30 : ZON=1 ' For PASS=0 To 6 Paste Bob 20,40+(PASS*13),34 : Paste Bob 36,40+(PASS*13),35 : Paste Bob 127,40+(PASS*13),35 : Paste Bob 167,40+(PASS*13),35 : Gosub SHO If(PASS>1 and PASS<6) or DEM=0 Set Zone ZON,262,40+(PASS*13) To 274,51+(PASS*13) Set Zone ZON+1,274,40+(PASS*13) To 286,51+(PASS*13) Paste Bob 265,42+(PASS*13),31 : Paste Bob 275,42+(PASS*13),32 Else TEX[270,42+(PASS*13),"N/A"] End If Add ZON,2 Next PASS Set Zone 30,60,135 To 240,150 ' WAT0 Do MOVEMOUSE If MKEY=0 Then Goto NOKEY If MZ=30 Then Exit If MZ=1 or MZ=2 Then Add GAMES,(1-(MZ-1))*2-1,3 To 30 : PASS=0 : Gosub UPDAT If MZ=3 or MZ=4 Then Add TIME,(1-(MZ-3))*2-1,4 To 15 : PASS=1 : Gosub UPDAT If MZ=5 or MZ=6 Then Add PARTS,(1-(MZ-5))*2-1,5 To 6 : PASS=2 : Gosub UPDAT If MZ=7 or MZ=8 Then Add _KEYS,(1-(MZ-7))*2-1,0 To 2 : PASS=3 : Gosub UPDAT If MZ=9 or MZ=10 Then Add _SCORE,(1-(MZ-9))*2-1,0 To 1 : PASS=4 : Gosub UPDAT If MZ=11 or MZ=12 Then Add _STAT,(1-(MZ-11))*2-1,0 To 1 : PASS=5 : Gosub UPDAT If MZ=13 or MZ=14 Then Add _VIR,(1-(MZ-13))*2-1,0 To 2 : PASS=6 : Gosub UPDAT NOKEY: Loop ' _SAM[11,23000] FAD[$F,0] Pop Proc ' SHO: Ink 12 Wait Vbl If PASS<2 Then Bar 142,42+(PASS*13) To 256,49+(PASS*13) If PASS=0 Then TEX[22,42+(PASS*13),"Amount Of Games "+Str$(GAMES)] If PASS=1 Then TEX[22,42+(PASS*13),"Minutes Per Game "+Str$(TIME)] If PASS=2 Then TEX[22,42+(PASS*13),"Growth Type"] : Paste Bob 230,41+(PASS*13),45-PARTS If PASS=3 Then TEX[22,42+(PASS*13),"Door Opening Type"] : Paste Bob 230,41+(PASS*13),41+_KEYS If PASS=4 Then TEX[22,42+(PASS*13),"Points awarding Screens"] : Paste Bob 230,41+(PASS*13),43+_SCORE If PASS=5 Then TEX[22,42+(PASS*13),"Statistics Screen"] : Paste Bob 230,41+(PASS*13),43+_STAT If PASS=6 Then TEX[22,42+(PASS*13),"Viruses"] : Paste Bob 230,41+(PASS*13),43+_VIR Return ' UPDAT: Gosub SHO : _SAM[8,30000] : Wait 3 Return ' End Proc Procedure FINALSCORES ' If GAME7 SHTEX[58,68+A*13,NAME$(POS),7] If A>0 If L(POS)>1 and L(POS)=L(WININ(A-1)) Goto LX End If End If If L(POS) Paste Icon 49,69+A*13,15+L(POS) End If If MONEY(POS)>99999 SHTEX[123,68+A*13,Str$(MONEY(POS)/1000)+"k",7] Else SHTEX[123,68+A*13,Str$(MONEY(POS)),7] End If SHTEX[172,68+A*13,Str$(RATE(POS)),7] SHTEX[207,68+A*13,Str$(SCORE(POS)),7] LX: End If Next A Reserve Zone 30 ' Set Zone 30,60,210 To 240,235 ' _DOSCR[15,1] : Screen Copy 0 To 1 _DOSCR[15,2] : Cls 0 Screen 0 : Cls 0 Screen Show 0 ' Sprite Off Wait Vbl A=1 Repeat Inc A _SAM[6,4080+A*30] Timer=0 Zoom 1,20,0,300,255 To 2,160-A,Max(0,128-A),159+A,Min(255,127+A) Screen Copy 2 To 0 Repeat Until Timer>3 Until A>39 ' Wait 40 MADCRY[7,4080,4] Wait 120 ' FAD[4095,0] Screen Copy 1 To 0 MADCRY[5,4000,1] Wait 10 Fade 3 To 1 Screen Close 2 ' Do MOVEMOUSE If MKEY=0 and Key State(68)=0 Then Goto NOKEY If MZ=30 Then Exit NOKEY: Loop ' MADCRY[11,999,1] Sprite Off Screen Copy 0 To 1 For A=5 To 230 C=1 : B=A-1 Repeat Screen Copy 1,0,A-C,319,A To 1,0,B-C Add B,-C : C=C*2 Until B<1 Screen Copy 1 To 0 If A=130 Then FAD[$F00,20] Next A 'Multi Yes Fade 2 Wait 30 ' End Proc Procedure HISCORES[TYP] ' Sam Play %1,16,1000 : Wait 2 : Sam Play %10,16,1001 : FAD[$367,3] : Wait 15 _DOSCR[17,1] Screen 0 : Reserve Zone 6 For A=1 To 6 Set Zone A,199,10+A*20 To 260,28+A*20 Screen Copy 1,199,6,260,27 To 1,199,10+A*20 Next A Screen 1 SH[210,13,"Top's"] ' SH[214,37,"Rate"] SH[210,57,"Speed"] SH[214,77,"Size"] SH[210,97,"Money"] SH[210,117,"Kills"] SH[206,137,"Points"] ' For A=0 To 19 If A<9 Then SH[31,31+A*11," "+Str$(A+1)] Else SH[31,31+A*11,Str$(A+1)] Next A Screen 0 Gosub SHO ' Fade 5 To 1 ' Timer=0 OM=X Mouse+Y Mouse Do MOVEMOUSE If Timer>2200 Then Exit If X Mouse+Y Mouse<>OM Then Timer=0 : OM=X Mouse+Y Mouse If MKEY>0 If MZ=0 Exit Else If MZ-1<>TYP TYP=MZ-1 _SAM[21,3000] Gosub SHO Timer=0 End If End If End If Loop Repeat MOVEMOUSE Until MKEY=0 ' FAD[$F00,1] Wait 14 Pop Proc ' SHO: _LOAD[TYP] Screen Copy 1 To 0 If TYP=0 : SH[70,13,"Best Ratings"] : End If If TYP=1 : SH[75,13,"Best Speeds"] : End If If TYP=2 : SH[78,13,"Best Sizes"] : End If If TYP=3 : SH[53,13,"Best $ Collectors"] : End If If TYP=4 : SH[56,13,"Best Kill Points"] : End If If TYP=5 : SH[56,13,"Best Game Points"] : End If For A=0 To 19 SH[58,31+A*11,HI$(A)] EX$=" " If TYP=3 : EX$="$" : End If SH[140,30+A*11,EX$+Str$(HI(A))-" "] Next A Return ' End Proc ' Setup Procs Procedure NEWLEAGUE[TP] ' If TP=1 Then _LOADOPS[2] CONTEND=0 For A=0 To MEN For B=0 To 20 ITEM(B,A+1)=0 Next B SCORE(A)=0 : MONEY(A)=1000 LOAN(A)=0 : SPENDS(A)=0 If CONTR(A)<>7 Then Inc CONTEND WININ(A)=A Next A GAMEOVER=0 : GAME=0 If TP=1 Then _LOADSAVE[1] Screen Close 7 ' End Proc Procedure NEWGAME ' _DOSCR[12,1] _SORT[GAME] ' If GAME=GAMES and DEMO=0 _DOSCR[14,0] : FAD[0,0] Ink 12 : Bar 48,160 To 268,190 SH[124,55,"Last Game"] SH[55,68,"Name"] : SH[130,68," Rate"] : SH[180,68," Odds"] TP=-1 : FAV=0 For A=0 To MEN POS=WININ(A) If CONTR(POS)<>7 and TP7 TEX[55,80+A*10,NAME$(POS)] If A>0 If L(POS)>1 and L(POS)=L(WININ(A-1)) Goto LX End If End If TEX[130,80+A*10,Str$(RATE(POS))] If FAV=POS TEX[180,80+A*10," Favourite"] Else RT=2+((TP-RATE(POS))/(40-GAME)) If RT>12 TEX[180,80+A*10," Bubbled!"] Else TEX[180,80+A*10,Str$(RT)+"-1"] End If End If End If LX: Next A ' Sprite Off Screen Show 0 MADCRY[15,600,1] FAD[$606,7] Wait 50 Fade 8 To 1 : Wait 350 FAD[$606,10] MADCRY[16,4000,50] Wait 150 Fade 4 : Wait 64 End If ' JJJJ=0 If GAME>(1+DEM) and Rnd(3+DEM)=0 JJJJ=Rnd(26)+1 FF$=Str$(JJJJ)-" " Load "sneechfiles/screens/screen"+FF$+".dat",6 _DOSCR[20,0] : FAD[$FFF,0] PASS=160 CEN[60,"Random Factors Arena"] CEN[80,"Arena No."+FF$] PZ=1 : N$="" Do A$=Chr$(Peek(Start(6)+198+PZ)) If A$="*" Exit End If N$=N$+A$ Inc PZ Loop CEN[100,N$] Wait 100 Screen Show 0 MADCRY[21,10600,10] Fade 3 To 1 Wait 280 Fade 9 MADCRY[16,4000,50] Wait 140 End If ' Screen Close 1 _DOSCR[12,0] Screen Open 1,336,304,32,Lowres : Screen Hide 1 : Flash Off : Get Palette 0 : Screen Copy 0 To 1 Paste Bob 0,0,37 Screen 0 : FAD[0,0] Screen Display 0,128,40,320,266 Screen Offset 0,20,27 Hide On ' X(0)=10 : Y(0)=12 X(1)=BIGX-10 : Y(1)=12 X(2)=10 : Y(2)=BIGY-12 X(3)=BIGX-10 : Y(3)=BIGY-12 X(4)=10 : Y(4)=BIGY/2 X(5)=BIGX-10 : Y(5)=BIGY/2 X(6)=BIGX-25 : Y(6)=BIGY-12 X(7)=BIGX-25 : Y(7)=12 X(8)=25 : Y(8)=BIGY-12 X(9)=25 : Y(9)=12 ' For A=0 To BIGY : For B=0 To BIGX : GRID(B,A)=0 : SHADE(B,A)=0 : SLIP(B,A)=0 : Next B : Next A For A=0 To BIGX : SHADE(A,0)=2 : SHADE(A,1)=1 : SHADE(A,BIGY-1)=1 : SHADE(A,BIGY)=2 : Next A For A=1 To BIGY-1 : SHADE(0,A)=2 : SHADE(1,A)=1 : SHADE(BIGX-1,A)=1 : SHADE(BIGX,A)=2 : Next A For A=0 To 2 : For B=0 To 2 : SHADE(A,B)=0 : SHADE(BIGX-A,B)=0 : SHADE(BIGX-A,BIGY-B)=0 : SHADE(A,BIGY-B)=0 : Next B : Next A ' Channel 10 To Screen Offset 0 ' _EXITX=-1 : _EXITY=-1 : VIRUS=-1 ' If JJJJ=0 Then Goto NOLAST ' NSH=33 PLC=0 Do X=Peek(Start(6)+PLC)-10 : Inc PLC Y=Peek(Start(6)+PLC)-10 : Inc PLC If X=-2 Then NSH=Y : Goto LLL If X=-1 Then Exit If NSH>99 and NSH<300 Then Add NSH,220 If NSH>319 Then _PUTSLOPE[X,Y,NSH] If NSH=48 or NSH=33 Then _PUTBLOCK[X,Y,8,8,NSH] If NSH=8 Then _PUTBLOCK[X,Y,6,6,NSH] If NSH=74 or NSH=75 Then _PUTHOLE[X,Y,NSH] If NSH=49 Then _PUTSLIP[X,Y,1,NSH] LLL: Loop ' NOLAST: ' HUMANS=0 : CONTESTANTS=0 : OVER=0 For A=0 To MEN If CONTR(A)<>7 DX(A)=0 : DY(A)=0 : TL(A)=1 : LTH(A)=1 STACK(A)=ITEM(_STSIZ,A+1) SIZ(A)=10 SPC(A)=0 : SPEED(A)=(6-LOWEST)-ITEM(_STSPEED,A+1) DEAD(A)=0 : BOOSTER(A)=-50 OUT(A)=-1 : KILBON(A)=0 : BIGBON(A)=0 SPEEDBON(A)=0 : COUNTER(A)=0 STUCK(A)=0 : FINISH(A)=0 : KILS(A,0)=0 PARTX(A)=BIGX/2 : PARTY(A)=BIGY/2 For PIP=0 To BIG+1 TAIL(A,0,PIP)=X(A) TAIL(A,1,PIP)=Y(A) Next PIP Paste Bob((X(A)-1)*4)+32,((Y(A)-1)*4)+32,10 Paste Icon(X(A)*4)+32,(Y(A)*4)+32,50+(CUL(A)*3) For PIP=0 To MEN DAM(A,PIP)=0 Next PIP For ITS=0 To 20 If ITEM(ITS,12)=1 and ITEM(ITS,A+1)=1 ITEM(ITS,A+1)=2 End If BITS(ITS,0)=-1 : BITS(ITS,1)=-1 Next ITS If CONTR(A)<6 : Inc HUMANS : End If If CONTR(A)<7 : Inc CONTESTANTS : End If End If Next A ' ' BID=0 : IT=-5 ' For A=0 To MEN If CONTR(A)<7 If CONTR(A)=6 KIL(A)=KILPTS(CUL(A))+(RATE(A)/15)+((10-CONTESTANTS)*5) Else KIL(A)=45+(RATE(A)/12) End If If BID=0 and GAME>1 and GAME3 KIL(A)=110+(CONTESTANTS*10) : Inc BID : IT=A End If 'Every TIME IT 'If BID<1 : KIL(A)=150 : Inc BID : IT=A : End If ' If Len(NAME$(A))<9 SPICE=7 Else If Len(NAME$(A))<10 SPICE=6 Else SPICE=5 End If End If Gosub XY Paste Bob PLX,PLY,50 SHTEX[PLX,PLY,NAME$(A),SPICE] TEX[PLX+27,PLY+12,Str$(KIL(A))] End If Next A ' OPEN=0 If _KEYS=0 Then OPENUP[0,0,0] MADCRY[1,2300,4] Screen Show 0 : Fade 4 To 1 ' Gosub PUS : Gosub PUS : Gosub PUS : Gosub PUS : Gosub PUS SECS=24 Sam Play %1100,4,10000 : Gosub PUS : Sam Play %11,3,10000 : Gosub PUS : Sam Play %1100,2,9200 : Gosub PUS : Sam Play %11,1,10000 : Wait 20 Bob Off Wait Vbl For MAN=0 To MEN If CONTR(MAN)<>7 Screen Copy 1,(X(MAN)-1)*4+32,(Y(MAN)-1)*4+32,(X(MAN)-1)*4+44,(Y(MAN)-1)*4+44 To 0,(X(MAN)-1)*4+32,(Y(MAN)-1)*4+32 Paste Icon(X(MAN)*4)+32,(Y(MAN)*4)+32,50+(CUL(MAN)*3) End If Next MAN For _DO=0 To 10 For A=0 To MEN If CONTR(A)<>7 Gosub XY Screen Copy 1,PLX,PLY+_DO,PLX+65,PLY+1+_DO To 0,PLX,PLY+_DO Screen Copy 1,PLX,(PLY+21)-_DO,PLX+65,(PLY+22)-_DO To 0,PLX,(PLY+21)-_DO Screen Copy 1,PLX+_DO,PLY,PLX+_DO+1,PLY+22 To 0,PLX+_DO,PLY Screen Copy 1,PLX+63-_DO,PLY,PLX+64-_DO,PLY+22 To 0,PLX+63-_DO,PLY End If Next A Wait Vbl Next _DO Wait 10 ' MEGAX=-1 : MEGAY=-1 ' Pop Proc ' XY: PLX=Min(258,Max(15,(X(A)*4)+4)) If A<4 PLY=Min(205,Max(94,(Y(A)*4+32))) Else If Y(A)>46 : PLY=250 : Else : PLY=49 : End If If A=4 : PLX=84 : PLY=147 : End If If A=5 : PLX=220 : PLY=147 : End If End If Return ' PUS: Timer=0 Do For A=0 To MEN If IT=A Bob 1,X(A)*4+23+Rnd(3),Y(A)*4+23+Rnd(3),51 End If Next A Wait Vbl GAMETIME=Min(120,GAMETIME+1) : SHOTIME If Timer>38 Then Exit If Key State(25) Then PAUSE : Timer=0 Loop Return ' End Proc Procedure ABOUT ' MAKEIT[124,125] PASS=160 If DEM Then Restore DEMO Else Restore STUF J=8 Do Read A$ If A$="*" Then Exit CEN[J,A$] If A$=" " Then Add J,5 Else Add J,9 Loop ' WAT0 ' Repeat MOVEMOUSE Until MKEY ' _SAM[5,15000] _SAM[5,15002] FAD[$F00,0] ' STUF: Data "Sneech V1.51 (25.4.97)" Data " ","Graphics, Sound and Code By Paul Burkey." Data "With Help From Bazza, Maxi, Jase, Kathy."," " Data "Big Thanks also to Fool et Magilac, G Wood" Data "P Oliver, I Croucher, E Cousins, B Seaton," Data "S Peck, P Branney, R Hanson, D Campbell," Data "Hatstand, R.K Withers, A+L Atkins, P Bevan" Data "I Ashby, N Hutchison, R Nolan, P Sydell," Data "J Rowe, D Schoolwerth and Marco Antonio."," " Data "And all the other Registered Users from" Data "all over the world...."," " Data " ","Contact Me at:-"," " Data "Email: paul@sneech.demon.co.uk" Data "WWW: http://www.sneech.demon.co.uk/" Data "IRC: shoecake"," " Data "Snail Mail to :-"," " Data "Paul Burkey" Data "32 Cottage Close" Data "Little Neston" Data "South Wirral" Data "L64 9RB, England","*" DEMO: Data "Sneech Demo V1.51 (25.4.97)" Data " ","Graphics, Sound and Code By Paul Burkey."," " Data "The Full version has all 10 players!" Data "Full team options and 3-30 game leagues!" Data "A full Shop, Extra Joysticks and more Sound!" Data "Loan feature! Even Better Computer Opponents!" Data "Load & Save Options and Guru Security!" Data "Read the Docs supplied for Full details!"," " Data "If your a real Sneecher then register for" Data "the full game by sending 5 UK Pounds to."," " Data "Paul Burkey" Data "32 Cottage Close" Data "Little Neston" Data "South Wirral" Data "L64 9RB, ENGLAND"," " Data "You will receive the latest Full Version," Data "By Mail or Email"," " Data "Email me at : paulb@sneech.demon.co.uk" Data "WWW: http://www.sneech.demon.co.uk/" Data "IRC as : shoecake "," " Data "*" ' End Proc Procedure MERGE ' If DEM Then ALLERT[1,"No Score Merge","in Demo","Ok","Ok"] : Pop Proc MAKEIT[124,125] ' PASS=160 CEN[20,"* Sneech HiScores Merge *"] CEN[30,"Please wait, Loading Scores..."] ' Gosub LD ' PASS=160 CEN[60,"Insert other Sneech disk into DF0:"] CEN[70,"..Then Press Button or Esc To Exit.."] ' Do MOVEMOUSE If MKEY Then PASS=0 : Exit If Key State(69) Then PASS=1 : Exit Loop If PASS=1 Then Goto LAA ' PASS=160 CEN[100,"Please Wait, Reading 2nd Disk..."] Repeat Until Exist("df0:sneech") ' '------------------------------- Load And Merge ------------- For TYP=0 To 5 For A=0 To 39 : HI$(A)=" " : HI(A)=0 : Next A Dir$="df0:" _LOAD[TYP] _LOADCPT["ram:scores"+Right$(Str$(TYP),1)+".dat"] ' For PEE=0 To 19 _GETNAME[PEE] NAME$=PASS$ RATE=PASS For G=0 To 39 If Upper$(HI$(G))=Upper$(NAME$) If RATE>HI(G) HI(G)=RATE End If Exit End If If HI$(G)=" " HI(G)=RATE HI$(G)=NAME$ Exit End If Next G Next PEE _SAVE_HIDATA[TYP] Next TYP ' Gosub LD ' PASS=160 CEN[130,"If you booted from Floppy then you should"] CEN[140,"Swap back to your Boot disk now."] CEN[150,"If you Booted from HD, Remove Disk from DF0:"] CEN[160,"..Press Button or Esc To Exit.."] ' Do MOVEMOUSE If MKEY Then PASS=0 : Exit If Key State(69) Then PASS=1 : Exit Loop If PASS=1 Then Goto LAA ' PASS=160 CEN[190,"Please Wait, Saving To 1st Disk..."] ' Dir$=DEF$ ' Repeat Until Exist("sneech") ' For A=0 To 5 F$="ram:scores"+Right$(Str$(A),1)+".dat" If Exist(F$) Load F$,10 : Kill F$ Save "Sneechfiles/scores"+Right$(Str$(A),1)+".dat",10 End If Next A ' CEN[230,"Click To Exit!"] Do MOVEMOUSE If MKEY Then Exit Loop ' LAA: ' WAT0 ' _SAM[5,15000] _SAM[5,15002] FAD[$F00,0] ' Pop Proc ' LD: For A=0 To 5 Load "Sneechfiles/scores"+Right$(Str$(A),1)+".dat",10 Save "ram:scores"+Right$(Str$(A),1)+".dat",10 Next A Return ' End Proc Procedure CULMENU ' MAKEIT[36,91] ' For A=0 To 3 SHTEX[16+A*72,60,Right$("****Star",5+A),7] For B=0 To 5 PERS=STARS(A,B) If PERS>=0 Paste Icon 10+A*72,75+B*9,50+(PERS*3) SHTEX[20+A*72,71+B*9,Right$(COMP$(PERS),Len(COMP$(PERS))-3),7] End If Next B Next A ' Sprite 4,X Sprite(0),Y Sprite(0),23 Limit Mouse 138,117 To 420,165 ' WAT0 ' Repeat OY=(Y Mouse-113)/9 If DEM If OY=0 or OY=2 OX=Min(2,(X Mouse-135)/72) Else OX=Min(1,(X Mouse-135)/72) End If Else OX=(X Mouse-135)/72 End If MOVEMOUSE If STARS(OX,OY)<0 Then Add OY,STARS(OX,OY) CUL(PASS)=STARS(OX,OY) Sprite 2,133+(OX*72),111+(OY*9),46 Until MKEY Limit Mouse _SAM[5,15000] : _SAM[5,15002] FAD[_FLASHCOL(CUL(PASS)),0] Sprite Off 2 X Mouse=X Sprite(4) : Y Mouse=Y Sprite(4) Sprite Off 4 ' End Proc Procedure MAKEIT[HIT,MID] Screen Copy 0 To 1 ' _SAM[3,2100] _SAM[3,2102] ' For A=2 To HIT Screen Copy 1,0,0,320,6 To 0,0,MID-A Screen Copy 1,0,250,320,255 To 0,0,MID+A Next A End Proc Procedure SETUP ' If Chip Free<500000 or DEM Then _MEMORY=0 Else _MEMORY=1 DEF$=Dir$ ' ' Erase All ' Load Iff "SneechIff/mainscreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/MainScreen.abk",16 ' Load Iff "SneechIff/Random.iff",0 : Spack 0 To 16 : Save "sneechfiles/Random.abk",16 ' Load Iff "SneechIff/DaliHide.iff",0 : Spack 0 To 16 : Save "sneechfiles/DaliHide.abk",16 ' Load Iff "SneechIff/menuscreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/MenuScreen.abk",16 ' Load Iff "SneechIff/blankscreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/BlankScreen.abk",16 ' Load Iff "SneechIff/leaguescreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/LeagueScreen.abk",16 ' Load Iff "SneechIff/StatsScreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/StatsScreen.abk",16 ' Load Iff "SneechIff/ShopScreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/ShopScreen.abk",16 ' Load Iff "SneechIff/HiScreen.iff",0 : Spack 0 To 16 : Save "sneechfiles/HiScreen.abk",16 ' Load Iff "SneechIff/Icons.iff",0 : Spack 0 To 16 : Save "sneechfiles/Icons.abk",16 ' End ' Restore COMP For A=0 To 19 : Read COMP$(A),KILPTS(A),A$,CPREF(A,0),CPREF(A,1),CPREF(A,2),A$,AHEAD(A),MSPEED(A) : Next A ' COMP: Data "Mr.Red",50," ",12,14,11,"",4,2 Data "Mr.Blue",50," ",14,12,7," ",4,2 Data "Mr.Green",50," ",14,7,11," ",4,1 Data "Mr.Blonde",60,"",7,12,11," ",9,0 Data "Mr.Black",60," ",13,14,7," ",9,0 Data "Mr.White",50," ",11,12,11,"",4,2 Data "Mr.Pink",58," ",11,7,11," ",6,0 Data "Mr.Orange",60,"",7,11,0," ",9,0 Data "Mr.Grey",50," ",14,7,11," ",4,2 Data "Mr.Chrome",60,"",11,13,14,"",9,0 Data "Mr.Gold",54," ",14,12,11,"",6,1 Data "Mr.Bogey",54," ",7,11,2," ",6,1 Data "Mr.Dark",54," ",13,7,11," ",8,1 Data "Mr.Deep",60," ",13,7,13," ",9,0 Data "Mr.Sky",54," ",11,12,11,"",8,1 Data "Mr.Check",58," ",7,11,2," ",8,1 Data "Mr.Banana",58,"",7,2,11," ",8,1 Data "Mr.Purple",58,"",11,7,14," ",8,0 Data "Mr.Ball",45," ",7,11,2," ",8,3 Data "Mr.Sheen",60," ",11,13,14,"",9,0 ' Restore ITEMS Repeat Read A Read ITEM(A,0),ITEM(A,13),ITEM(A,14),ITEM(A,12) Until A=20 ' ITEMS: Data 0,350,1,1,1 Data 1,230,0,0,1 Data 2,300,1,4,0 Data 3,500,0,0,1 Data 4,150,1,5,1 Data 5,800,0,0,0 Data 6,150,0,0,1 Data 7,300,1,1,1 Data 8,400,1,3,1 Data 9,600,0,0,1 Data 10,10,100,0,0 Data 11,400,4,2,0 Data 12,250,10,2,2 Data 13,200,10,2,2 Data 14,200,10,1,2 Data 15,600,1,4,2 Data 16,500,1,10,0 Data 17,250,1,5,0 Data 18,300,1,0,1 Data 19,600,1,15,1 Data 20,250,1,10,1 ' Restore STARS For A=0 To 3 : For B=0 To 5 : Read STARS(A,B) : Next B : Next A ' STARS: Data 0,1,2,-1,5,8 Data 6,-1,11,10,-1,-2 Data 17,14,15,16,18,12 Data 7,13,19,3,9,4 ' _STUN=0 : _SCOOP=1 : _RF=2 : _PT=3 : _NOM=4 : _CON=5 : _SLSC=6 _SREV=7 : _SUV1=8 : _BOOST=9 : _STSIZ=10 _STSPEED=11 : _REV=12 : _BOMB=13 : _BOMBB=14 : _EXTRA=15 _SH1=16 : _SH2=17 : _ATURN=18 : _BGRAB=19 : _SGRAB=20 ' SPEED=31 : PART=30 : SLOW=32 : MONEY=33 : BLOCK=40 : HOLE=41 : _EXIT=43 GOLD=34 : MEGA=35 : FRBOMB=36 : EXL=37 : _VIRUS=44 : _MINE=45 : FRDEF=46 KEY=38 : BW=39 : STRAWB=42 ' CPOS(0,0)=0 : CPOS(0,1)=0 : CPOS(1,0)=1 : CPOS(1,1)=0 : CPOS(2,0)=0 : CPOS(2,1)=1 : CPOS(3,0)=1 : CPOS(3,1)=1 ' SCOOPCO(0,0)=-1 : SCOOPCO(0,1)=0 : SCOOPCO(1,0)=0 : SCOOPCO(1,1)=-1 : SCOOPCO(2,0)=1 : SCOOPCO(2,1)=0 : SCOOPCO(3,0)=0 : SCOOPCO(3,1)=1 ' KEYS(0,0)=99 : KEYS(0,1)=96 : KEYS(0,2)=102 : KEYS(0,3)=100 KEYS(1,0)=76 : KEYS(1,1)=77 : KEYS(1,2)=78 : KEYS(1,3)=79 ' For XXX=0 To 75 : For YYY=0 To 25 : _DOOR(XXX,YYY)=2 : _DOOR(XXX,63-YYY)=3 : Next YYY : Next XXX For XXX=0 To 25 : For YYY=0 To 63 : _DOOR(XXX,YYY)=1 : _DOOR(75-XXX,YYY)=4 : Next YYY : Next XXX ' Restore SLOPES For SL=0 To 7 Read SLOPE(SL,1,0),SLOPE(SL,1,2),SLOPE(SL,0,1),SLOPE(SL,2,1) Next SL ' SLOPES: Data -1,1,-1,1 Data -1,1,1,-1 Data 1,-1,-1,1 Data 1,-1,1,-1 Data -1,1,0,0 Data 0,0,-1,1 Data 0,0,1,-1 Data 1,-1,0,0 ' ' For GG=1 To 5 ' For X=0 To 39 ' HI$(X)=" " ' HI(X)=0 ' Next X ' _SAVE_HIDATA[GG] ' Next GG ' End Proc ' Game Procs Procedure SCROL ' If OPEN Then CHEKDOORS ' CN=0 : MIDX=0 : MIDY=0 SMX=100 : SMY=100 : BIX=0 : BIY=0 For A=0 To MEN If DEAD(A)=0 and CONTR(A)<7 If CONTR(A)=6 Inc CN : Add MIDX,X(A) : Add MIDY,Y(A) Else Add CN,4 : Add MIDX,(X(A)*4) : Add MIDY,(Y(A)*4) SMX=Min(SMX,X(A)) : SMY=Min(SMY,Y(A)) BIX=Max(BIX,X(A)) : BIY=Max(BIY,Y(A)) End If End If Next A ' If CN>0 MIDX=MIDX/CN : MIDY=MIDY/CN Else Amal 10,"M 24-X,27-Y,16" : Amal On 10 Pop Proc End If ' MIDX=(MIDX*4)+38 MIDY=(MIDY*4)+41 MIDX=Max(0,Min(48,MIDX-164)) MIDY=Max(0,Min(54,MIDY-137)) ' If BIX>BIGX-8 Then MIDX=Max(MIDX,24) If SMX<8 Then MIDX=Min(MIDX,24) If BIY>BIGY-8 Then MIDY=Max(MIDY,27) If SMY<8 Then MIDY=Min(MIDY,27) ' Amal 10,"M "+Str$(MIDX)+"-X,"+Str$(MIDY)+"-Y,16" : Amal On 10 End Proc Procedure COMPUTER ' OLDDX=DX(MAN) : OLDDY=DY(MAN) SUGEST=-1 OK[X(MAN)+DX(MAN),Y(MAN)+DY(MAN)] If Param=False If VIRUS=MAN PS=GRID(OKX,OKY) If PS>0 and PS<11 and PS-1<>MAN If L(MAN)<2 or L(MAN)<>L(PS-1) Pop Proc End If End If End If If DX(MAN)=0 SUGEST=1 Else SUGEST=0 End If Else If Rnd(100)=0 or(MAN=VIRUS and Rnd(10)=0) FINDPART[X(MAN),Y(MAN),MAN] End If End If ' If PARTX(MAN)<-1 and PARTX(MAN)>-12 TM=(-(PARTX(MAN)+2)) If VIRUS=MAN CHASEX=X(TM) CHASEY=Y(TM) Else CHASEX=X(TM)+(DX(TM)*3) CHASEY=Y(TM)+(DY(TM)*3) End If Else CHASEX=PARTX(MAN) CHASEY=PARTY(MAN) End If ' If SUGEST=-1 If CHASEY=Y(MAN) If X(MAN)>CHASEX and DX(MAN)=0 DX(MAN)=-1 : DY(MAN)=0 : Goto DUN End If If X(MAN)CHASEY and DY(MAN)=0 DX(MAN)=0 : DY(MAN)=-1 : Goto DUN End If If Y(MAN)X(MAN) and DX(MAN)=-1) or(CHASEXY(MAN)) SUGEST=0 End If If(CHASEY>Y(MAN) and DY(MAN)=-1) or(CHASEYX(MAN)) SUGEST=1 End If End If ' If SUGEST=-1 and Rnd(6-(SPEED(MAN)/2))=0 AHEAD=AHEAD(CUL(MAN)) AWAY=3 Repeat OK[X(MAN)+(DX(MAN)*AWAY),Y(MAN)+(DY(MAN)*AWAY)] If Param=False Dec AWAY If DX(MAN)=0 OK[X(MAN)-1,Y(MAN)+(DY(MAN)*AWAY)] If Param=False OK[X(MAN)+1,Y(MAN)+(DY(MAN)*AWAY)] If Param=False or Rnd(5)=0 SUGEST=1 End If End If Else OK[X(MAN)+(DX(MAN)*AWAY),Y(MAN)+1] If Param=False OK[X(MAN)+(DX(MAN)*AWAY),Y(MAN)-1] If Param=False or Rnd(5)=0 SUGEST=0 End If End If End If Exit End If Inc AWAY Until AWAY>AHEAD End If ' If SUGEST=-1 Then Pop Proc If SUGEST=0 Then Gosub UPDOWN Else Gosub LEFTRIGHT ' DUN: FACE[MAN,OLDDX,OLDDY] Pop Proc ' ' ' UPDOWN: U=1 : D=1 Do OK[X(MAN),Y(MAN)-U] : If Param=0 or U>7 Then Exit Else Inc U Loop Do OK[X(MAN),Y(MAN)+D] : If Param=0 or D>7 Then Exit Else Inc D Loop ' If VIRUS=MAN Then Add U,3 : Add D,3 If CHASEY7 or U=>D Then DY(MAN)=-1 : Goto OKE If CHASEY>Y(MAN) Then If(Y(MAN)+D>=CHASEY) or D>7 or D=>U Then DY(MAN)=1 : Goto OKE If U>D Then DY(MAN)=-1 Else DY(MAN)=1 OKE: DX(MAN)=0 Return ' ' ' LEFTRIGHT: L=1 : R=1 Do OK[X(MAN)-L,Y(MAN)] : If Param=0 or L>7 Then Exit Else Inc L Loop Do OK[X(MAN)+R,Y(MAN)] : If Param=0 or R>7 Then Exit Else Inc R Loop ' If VIRUS=MAN Then Add L,3 : Add R,3 If CHASEX7 or L>=R Then DX(MAN)=-1 : Goto OK2 If CHASEX>X(MAN) Then If(X(MAN)+R>=CHASEX) or R>7 or R>=L Then DX(MAN)=1 : Goto OK2 If L>R Then DX(MAN)=-1 Else DX(MAN)=1 OK2: DY(MAN)=0 Return ' ' End Proc Procedure FINDPART[FX,FY,M] ' B=0 If _EXITX=-1 PARTX(M)=-1 : PARTY(M)=-1 If VIRUS=M DISTANCE=16 Else DISTANCE=180 End If Else PARTX(M)=_EXITX+3 : PARTY(M)=_EXITY+3 DISTANCE=Abs(_EXITX-FX)+Abs(_EXITY-FY) If GAMETIME<4 or VIRUS=M Pop Proc End If End If Repeat If BITS(B,0)<>-1 BITX=BITS(B,0) : BITY=BITS(B,1) ITIS=GRID(BITX,BITY) If(ITIS<>SPEED or SPEED(M)>MSPEED(CUL(M))) and(ITIS<>_VIRUS or SIZ(M)>50) If OPEN=1 If _DOOR(FX,FY)=1 and _DOOR(BITX,BITY)=4 Add BITX,-81 : BITY=Max(Min(BITY,31),24) : Goto LL End If If _DOOR(FX,FY)=4 and _DOOR(BITX,BITY)=1 Add BITX,81 : BITY=Max(Min(BITY,31),24) : Goto LL End If If _DOOR(FX,FY)=2 and _DOOR(BITX,BITY)=3 Add BITY,-65 : BITX=Max(Min(BITX,32),39) : Goto LL End If If _DOOR(FX,FY)=3 and _DOOR(BITX,BITY)=2 Add BITY,65 : BITX=Max(Min(BITX,32),39) : Goto LL End If End If LL: D=Abs(BITX-FX)+Abs(BITY-FY) If D-12 PARTX(M)=-13 Else PARTX(M)=BITX End If PARTY(M)=BITY DISTANCE=D End If End If End If Inc B Until B>20 BO=((10-SPEED(M))*5)+(SIZ(M)/2)+(KIL(M)/15)+100 If VIRUS=M Then BO=1000 P=-1 If PARTX(M)=-1 and(SIZ(M)>12 or VIRUS=M) and GAMETIME<112 For A=0 To MEN If CONTR(A)<7 and VIRUS<>A and DEAD(A)=0 and(L(M)=0 or(L(A)<>L(M))) and A<>M If VIRUS=M THIS=(Abs(X(A)-FX)+Abs(Y(A)-FY))-(SPEED(A)*8) Else THIS=(((KIL(A)/15)+(SIZ(A)/2))-(SPEED(A)*8))+Abs(X(A)-FX)+Abs(Y(A)-FY) End If If THIS-1 and P<=MEN Then If M<>P and(L(M)=0 or(L(P)<>L(M))) Then PARTX(M)=(-P)-2 If PARTX(M)=-1 Then PARTX(M)=BIGX/3+(M*5) : PARTY(M)=BIGY/3+(M*5) ' End Proc Procedure WHICHCONT[CONT] If CONT=0 Then HUMANJOY[0] If CONT=1 Then HUMANJOY[1] If CONT=2 Then HUMANKEY[0] If CONT=3 Then HUMANKEY[1] If CONT=4 Then HUMANADAP[0] If CONT=5 Then HUMANADAP[1] End Proc Procedure HUMANCONTR WHICHCONT[CONTR(MAN)] If DY(MAN)<>-1 Then If MOVE(1) and(GRID(X(MAN),Max(0,Y(MAN)-1))<>MAN+1 or Y(MAN)=0) Then DX(MAN)=0 : DY(MAN)=-1 : Goto F If DY(MAN)<>1 Then If MOVE(2) and(GRID(X(MAN),Min(BIGY,Y(MAN)+1))<>MAN+1 or Y(MAN)=BIGY) Then DX(MAN)=0 : DY(MAN)=1 : Goto F If DX(MAN)<>1 Then If MOVE(3) and(GRID(Min(BIGX,X(MAN)+1),Y(MAN))<>MAN+1 or X(MAN)=BIGX) Then DX(MAN)=1 : DY(MAN)=0 : Goto F If DX(MAN)<>-1 Then If MOVE(4) and(GRID(Max(0,X(MAN)-1),Y(MAN))<>MAN+1 or X(MAN)=0) Then DX(MAN)=-1 : DY(MAN)=0 F: If MOVE(0)=1 and ITEM(_BOOST,MAN+1)>0 ITEM(_BOOST,MAN+1)=1 BOOSTER(MAN)=Max(45,BOOSTER(MAN)) End If End Proc Procedure HUMANJOY[_JOY] If Jup(_JOY) Then MOVE(1)=1 Else MOVE(1)=0 If Jdown(_JOY) Then MOVE(2)=1 Else MOVE(2)=0 If Jright(_JOY) Then MOVE(3)=1 Else MOVE(3)=0 If Jleft(_JOY) Then MOVE(4)=1 Else MOVE(4)=0 If Fire(_JOY) Then MOVE(0)=1 Else MOVE(0)=0 End Proc Procedure HUMANADAP[T] JJJ=Peek($BFE101) If Btst(0+(T*4),JJJ)=0 Then MOVE(1)=1 Else MOVE(1)=0 If Btst(1+(T*4),JJJ)=0 Then MOVE(2)=1 Else MOVE(2)=0 If Btst(3+(T*4),JJJ)=0 Then MOVE(3)=1 Else MOVE(3)=0 If Btst(2+(T*4),JJJ)=0 Then MOVE(4)=1 Else MOVE(4)=0 If Btst(1+(T*3),Peek($BFD014))=0 MOVE(0)=1 Else MOVE(0)=0 End If End Proc ' Procedure HUMANKEY[K] For TY=1 To 4 If Key State(KEYS(K,TY-1)) Then MOVE(TY)=1 Else MOVE(TY)=0 Next TY If K=0 If Key State(49) : MOVE(0)=1 : Else : MOVE(0)=0 : End If Else If Key State(68) : MOVE(0)=1 : Else : MOVE(0)=0 : End If End If End Proc Procedure CLBIG[TY] CX=(MEGAX*4)+32 CY=(MEGAY*4)+32 If TY=_VIRUS PIP=2 Else PIP=1 End If Screen Copy 1,CX,CY,CX+4+(PIP*4),CY+4+(PIP*4) To 0,CX,CY For MEGX=MEGAX To MEGAX+PIP For MEGY=MEGAY To MEGAY+PIP If GRID(MEGX,MEGY)=TY Then GRID(MEGX,MEGY)=0 Next MEGY Next MEGX BITS[MEGAX,MEGAY,0] MEGAX=-1 End Proc Procedure _FREE[SPR,VA,SAM,SPE] If VA=_VIRUS Then TIP=2 Else TIP=1 PX=Rnd(BIGX-TIP) : PY=Rnd(BIGY-TIP) SPA=0 For T1=0 To TIP : For T0=0 To TIP If GRID(PX+T0,PY+T1)>0 : Inc SPA : End If Next T0 : Next T1 If SPA=0 Paste Bob(PX*4)+32,(PY*4)+32,SPR For T1=0 To TIP : For T0=0 To TIP : GRID(PX+T0,PY+T1)=VA : Next T0 : Next T1 If VA<>_MINE BITS[PX,PY,1] MEGAX=PX : MEGAY=PY End If _SAM[SAM,SPE*1000] End If If VA=_VIRUS Then SPEED[SPEED,9] : SPEED[SPEED,9] ' End Proc Procedure _FREEBOMB PX=Rnd(BIGX-1) PY=Rnd(BIGY-1) If GRID(PX,PY)=0 and GRID(PX+1,PY)=0 and GRID(PX,PY+1)=0 and GRID(PX+1,PY+1)=0 EXX=0 For GE=0 To MEN : If ITEM(_EXTRA,GE+1) : Inc EXX : GE=MEN : End If : Next GE ' If EXX>0 or Rnd(8)>0 or GAMETIME<40 If Rnd(3)=0 Paste Bob(PX*4)+32,(PY*4)+32,61 GRID(PX,PY)=FRDEF : GRID(PX+1,PY)=FRDEF : GRID(PX,PY+1)=FRDEF : GRID(PX+1,PY+1)=FRDEF _SAM[9,25000] Else Paste Bob(PX*4)+32,(PY*4)+32,27 GRID(PX,PY)=FRBOMB : GRID(PX+1,PY)=FRBOMB : GRID(PX,PY+1)=FRBOMB : GRID(PX+1,PY+1)=FRBOMB _SAM[9,20000] End If Else Paste Bob(PX*4)+32,(PY*4)+32,66 GRID(PX,PY)=EXL : GRID(PX+1,PY)=EXL : GRID(PX,PY+1)=EXL : GRID(PX+1,PY+1)=EXL _SAM[9,20000] End If MEGAX=PX : MEGAY=PY BITS[PX,PY,1] End If End Proc Procedure SPEED[TY,SH] ' SP=1 : PL=-1 : SI=100 : MN=3500 For A=0 To MEN If DEAD(A)=0 and CONTR(A)<7 and L(A)<>1 and Rnd(1)=0 If TY=MONEY and MONEY(A)SP SP=SPEED(A) : PL=A End If End If Next A If PL>-1 PX=Max(0,Min(BIGX,X(PL)+(DX(PL)*7)+(Rnd(28)-14))) PY=Max(0,Min(BIGY,Y(PL)+(DY(PL)*7)+(Rnd(28)-14))) Else PX=Rnd(BIGX) PY=Rnd(BIGY) End If ' If GRID(PX,PY)=0 If TY<>SLOW BITS[PX,PY,1] If TY=MONEY and Rnd(30)=0 SH=53 : TY=GOLD End If End If GRID(PX,PY)=TY Paste Bob(PX*4)+32,(PY*4)+32,SH _SAM[9,20000] End If End Proc Procedure KILMONEY[KX,KY,TYP] GT=0 Timer=0 Do PX=Min(BIGX,Max(0,KX+(Rnd(12)-6))) PY=Min(BIGY,Max(0,KY+(Rnd(12)-6))) If GRID(PX,PY)=0 Then Paste Bob(PX*4)+32,(PY*4)+32,38 : GRID(PX,PY)=MONEY : BITS[PX,PY,1] : Inc GT Exit If GT=4-TYP or Timer>12 Loop End Proc Procedure LASTBONUS[KX,KY] GT=0 Timer=0 Do PX=Min(BIGX,Max(0,KX+(Rnd(10)-5))) PY=Min(BIGY,Max(0,KY+(Rnd(10)-5))) If GRID(PX,PY)=0 Then Paste Bob(PX*4)+32,(PY*4)+32,53 : GRID(PX,PY)=GOLD : BITS[PX,PY,1] : Inc GT Exit If GT=3 or Timer>20 Exit If GT=2 and OVER>0 Loop End Proc Procedure SLIP AC=7 : DN=7 : SH=49 : SL=1 PX=(Rnd(7)*8)+6 : PY=(Rnd(5)*8)+8 NU=0 For TT=0 To AC For TTT=0 To DN If GRID(PX+TT,PY+TTT)<>0 or SLIP(PX+TT,PY+TTT)<>0 or SHADE(PX+TT,PY+TTT)<>0 Then Inc NU : TT=AC : TTT=DN Next TTT Next TT If NU=0 If Rnd(2)=0 If Rnd(4)>0 If Rnd(2)=0 SH=63 Else SH=74+Rnd(1) End If SL=0 : _SAM[16,12999] : _SAM[16,13001] Else SH=64 : SL=-1 : _SAM[16,12999] : _SAM[16,13001] End If Else _SAM[16,19999] : _SAM[16,20001] End If If SH=74 or SH=75 or SH=63 _PUTHOLE[PX,PY,SH] Else If Rnd(25)>0 _PUTSLIP[PX,PY,SL,SH] Else _PUTSLIP[PX,PY,-2,22] End If End If End If End Proc Procedure SLOPE ' J=Rnd(6) Restore Mid$("SMAL WIDE TALL BIGG VWID VTAL BGIN",(J*5)+1,4) Read AC,DN ' PX=(Rnd(8-AC)*8)+6 PY=(Rnd(6-DN)*8)+8 NU=0 For TT=0 To 8*AC For TTT=0 To 8*DN If GRID(PX+TT,PY+TTT)<>0 or SLIP(PX+TT,PY+TTT)>1 or SHADE(PX+TT,PY+TTT)<>0 Then Inc NU : TT=AC*8 : TTT=DN*8 Next TTT Next TT ' If NU=0 For TTT=0 To DN-1 For TT=0 To AC-1 Read TYP If TYP<>0 _PUTSLOPE[PX+TT*8,PY+TTT*8,TYP] End If Next TT _SAM[9,11000] Next TTT End If ' SMAL: Data 2,2,320,322,326,328 WIDE: Data 3,2,320,321,322,326,327,328 VWID: Data 4,2,320,321,321,322,326,327,327,328 VTAL: Data 2,4,320,322,323,325,323,325,326,328 TALL: Data 2,3,320,322,323,325,326,328 BIGG: Data 3,3,320,321,322,323,0,325,326,327,328 BGIN: Data 2,2,329,330,331,324 ' End Proc Procedure _PUTSLIP[PX,PY,SL,SH] Paste Bob(PX*4)+33,(PY*4)+33,SH : Screen 1 Paste Bob(PX*4)+33,(PY*4)+33,SH : Screen 0 For TT=0 To 7 For TTT=0 To 7 SLIP(PX+TT,PY+TTT)=SL Next TTT : Next TT End Proc Procedure _PUTHOLE[KX,KY,TYP] Paste Bob(KX*4)+33,(KY*4)+33,TYP : Screen 1 Paste Bob(KX*4)+33,(KY*4)+33,TYP : Screen 0 If TYP=74 For TTT=0 To 1 For TT=0 To 1 GRID(1+KX+TT,1+KY+TTT)=HOLE GRID(5+KX+TT,1+KY+TTT)=HOLE GRID(1+KX+TT,5+KY+TTT)=HOLE GRID(5+KX+TT,5+KY+TTT)=HOLE Next TT Next TTT Else If TYP=75 AD=0 Else AD=1 End If For TTT=1-AD To 6+AD For TT=1-AD To 6+AD GRID(KX+TT,KY+TTT)=HOLE Next TT Next TTT End If End Proc Procedure _PUTSLOPE[KX,KY,TYP] ' Paste Bob(KX*4)+33,(KY*4)+33,TYP : Screen 1 Paste Bob(KX*4)+33,(KY*4)+33,TYP : Screen 0 ' TYP$=Str$(TYP)-" " If TYP<>321 and TYP<>323 and TYP<>325 and TYP<>327 Then Restore TYP$ ' For A=0 To 7 For B=0 To 7 SL=0 If TYP=321 Then SL=10 If TYP=323 Then SL=11 If TYP=325 Then SL=12 If TYP=327 Then SL=13 If SL=0 Then Read SL SLIP(KX+B,KY+A)=SL Next B Next A ' 320 Data 0,0,0,0,0,0,0,6 Data 0,0,0,0,0,0,6,6 Data 0,0,0,0,0,6,6,6 Data 0,0,0,0,6,6,6,6 Data 0,0,0,6,6,6,6,6 Data 0,0,6,6,6,6,6,6 Data 0,6,6,6,6,6,6,6 Data 6,6,6,6,6,6,6,6 ' 322 Data 7,0,0,0,0,0,0,0 Data 7,7,0,0,0,0,0,0 Data 7,7,7,0,0,0,0,0 Data 7,7,7,7,0,0,0,0 Data 7,7,7,7,7,0,0,0 Data 7,7,7,7,7,7,0,0 Data 7,7,7,7,7,7,7,0 Data 7,7,7,7,7,7,7,7 ' 324 Data 6,6,6,6,6,6,6,6 Data 6,6,6,6,6,6,6,0 Data 6,6,6,6,6,6,0,0 Data 6,6,6,6,6,0,0,0 Data 6,6,6,6,0,0,0,0 Data 6,6,6,0,0,0,0,0 Data 6,6,0,0,0,0,0,0 Data 6,0,0,0,0,0,0,0 ' 326 Data 8,8,8,8,8,8,8,8 Data 0,8,8,8,8,8,8,8 Data 0,0,8,8,8,8,8,8 Data 0,0,0,8,8,8,8,8 Data 0,0,0,0,8,8,8,8 Data 0,0,0,0,0,8,8,8 Data 0,0,0,0,0,0,8,8 Data 0,0,0,0,0,0,0,8 ' 328 Data 9,9,9,9,9,9,9,9 Data 9,9,9,9,9,9,9,0 Data 9,9,9,9,9,9,0,0 Data 9,9,9,9,9,0,0,0 Data 9,9,9,9,0,0,0,0 Data 9,9,9,0,0,0,0,0 Data 9,9,0,0,0,0,0,0 Data 9,0,0,0,0,0,0,0 ' 329 Data 0,0,0,0,0,0,0,9 Data 0,0,0,0,0,0,9,9 Data 0,0,0,0,0,9,9,9 Data 0,0,0,0,9,9,9,9 Data 0,0,0,9,9,9,9,9 Data 0,0,9,9,9,9,9,9 Data 0,9,9,9,9,9,9,9 Data 9,9,9,9,9,9,9,9 ' 330 Data 8,0,0,0,0,0,0,0 Data 8,8,0,0,0,0,0,0 Data 8,8,8,0,0,0,0,0 Data 8,8,8,8,0,0,0,0 Data 8,8,8,8,8,0,0,0 Data 8,8,8,8,8,8,0,0 Data 8,8,8,8,8,8,8,0 Data 8,8,8,8,8,8,8,8 ' 331 Data 7,7,7,7,7,7,7,7 Data 0,7,7,7,7,7,7,7 Data 0,0,7,7,7,7,7,7 Data 0,0,0,7,7,7,7,7 Data 0,0,0,0,7,7,7,7 Data 0,0,0,0,0,7,7,7 Data 0,0,0,0,0,0,7,7 Data 0,0,0,0,0,0,0,7 ' End Proc Procedure _PUTBLOCK[PX,PY,AC,DN,SH] Paste Bob(PX*4)+32,(PY*4)+32,SH : Screen 1 Paste Bob(PX*4)+32,(PY*4)+32,SH : Screen 0 For TT=0 To AC-1 : For TTT=0 To DN-1 GRID(PX+TT,PY+TTT)=BLOCK SHADE(PX+AC,PY+TTT)=2 SHADE(PX+TT,Min(BIGY,PY+DN))=2 Next TTT : Next TT If SH=91 For TT=0 To AC-1 GRID(PX+TT,PY+6)=0 'SHADE(PX+TT,PY+6),2 Next TT End If SHADE(PX+AC,PY)=1 SHADE(PX,Min(BIGY,PY+DN))=1 SHADE(PX+AC,Min(BIGY,PY+DN))=2 End Proc ' Procedure _EXIT SH=301 TRY=0 AG: PX=(Rnd(7)*8)+6 : PY=(Rnd(5)*8)+8 NU=0 For TT=0 To 7 For TTT=0 To 7 If GRID(PX+TT,PY+TTT)<>0 or SHADE(PX+TT,PY+TTT)<>0 Then Inc NU : TT=7 : TTT=7 Next TTT Next TT If NU<>0 Then Inc TRY : If TRY>50 Then Pop Proc Else Goto AG Paste Bob(PX*4)+33,(PY*4)+33,SH : Screen 1 Paste Bob(PX*4)+33,(PY*4)+33,SH : Screen 0 _EXITX=PX+1 : _EXITY=PY+1 For TT=1 To 6 : For TTT=1 To 6 GRID(PX+TT,PY+TTT)=_EXIT SHADE(PX+7,PY+TTT)=2 SHADE(PX+TT,PY+7)=2 Next TTT : Next TT SHADE(PX+1,PY+7)=1 SHADE(PX+7,PY+1)=1 SHADE(PX+7,PY+7)=2 End Proc Procedure BLOCK AG: If Rnd(2)=0 Then BL=4 Else BL=Rnd(3) AC=6 : DN=6 : SH=8 If BL=4 Then PX=(Rnd(7)*8)+6 : PY=(Rnd(7)*8) : AC=8 : DN=8 : If PY<56 Then SH=33 : Goto G Else SH=48 : Goto G If BL=3 Then PX=(Rnd(7)*8)+8 : PY=(Rnd(7)*8)+2 : AC=4 : DN=4 : SH=24 : Goto G If BL=1 Then PX=(Rnd(6)*8)+7 : AC=14 : SH=29 Else PX=(Rnd(7)*8)+7 If BL=2 Then PY=(Rnd(6)*8)+1 : DN=14 : SH=28 Else PY=(Rnd(7)*8)+1 If BL=1 and PY>56 Then Goto AG If BL=2 and PY>48 Then Goto AG If BL=0 and PY>56 Then SH=25 G: ' If SH=33 Then SH=91 NU=0 TAK=-1 If BL=4 Then TAK=0 For TT=TAK To AC For TTT=TAK To DN If GRID(PX+TT,Max(0,Min(BIGY,PY+TTT)))<>0 Then Inc NU : TT=AC : TTT=DN Next TTT Next TT If NU=0 If BL<3 _SAM[7,4500] Else _SAM[7,4999] End If _PUTBLOCK[PX,PY,AC,DN,SH] _SAM[7,5000] End If End Proc Procedure SHOTIME Screen 1 Sprite Off 2 If GAMETIME>0 Get Bob 30,0,120-GAMETIME To 8,120 Sprite 2,130,165-(GAMETIME/2),30 Else Sprite 2,135,55,71 End If Screen 0 End Proc Procedure SHRINK[PERS,_D] ' If DEAD(PERS)>0 Then Pop Proc Gosub SHRINK If(SIZ(PERS)<2 and(ITEM(_SUV1,PERS+1)=0 or GAMETIME<11 or VIRUS=PERS)) or(SIZ(PERS)<1 and ITEM(_SUV1,PERS+1)) or(SIZ(PERS)<3 and CONTR(PERS)=6 and(ITEM(_SUV1,PERS+1)=0 or GAMETIME<11)) Repeat Gosub SHRINK Until DEAD(PERS)>0 Move Off 15 BOOB=0 If KILBY>0 If(L(KILBY-1)=L(PERS) and L(PERS)>1) or KILBY-1=PERS or VIRUS=PERS BOOB=1 Else BOOB=0 End If End If If KILBY>-1 If(GAMETIME<10 or BOOB) and _MEMORY=1 MADCRY[19,3000,1000] Else MADCRY[5,8000,1] End If Else If KILBY=-1 If _MEMORY=1 MADCRY[19,3000,1000] Else MADCRY[7,6000,100] End If End If End If If KILBY>0 and KILBY<25 and(KILBY-1<>PERS) If BOOB=0 Add KILBON(KILBY-1),KIL(PERS) KILS(KILBY-1,0)=Min(12,KILS(KILBY-1,0)+1) KILS(KILBY-1,KILS(KILBY-1,0))=PERS End If If IT=PERS MADCRY[7,3000,3] : IT=-10 End If Else If IT=PERS and GAMETIME>10 IT=-10 End If End If If KILBY>-1 or VIRUS=PERS Gosub BIGFLASH End If ' If ITEM(_EXTRA,PERS+1) and SECS>5 and HUMANS>0 and GAMETIME>10 and CONTESTANTS>1 RESURECT[PERS] If PASS=1 Dec ITEM(_EXTRA,PERS+1) Pop Proc End If MADCRY[5,8000,1] Gosub BIGFLASH End If ' Dec CONTESTANTS If CONTR(PERS)<6 Dec HUMANS End If FINISH(PERS)=Max(0,100-Max(0,GAMETIME-10))/2 Add FINISH(PERS),OUT*5 If KILBY=-2 Add FINISH(PERS),100 End If OUT(OUT)=PERS : Inc OUT ' A=0 : MY=-1 Do If DEAD(A)=0 and CONTR(A)<>7 MY=A : Exit End If Inc A If A>MEN Exit End If Loop If MY=-1 or MY=MEN Goto SK Else If L(MY)<2 Goto SK End If End If ' If OVER>1 or OUT=CONTEND-1 Goto SK End If OVER=1 For A=MY+1 To MEN If CONTR(A)<>7 and DEAD(A)=0 and L(A)<>L(MY) OVER=0 End If Next A ' SK: If OVER<2 and GAMETIME>9 If OUT=CONTEND-1 or OVER=1 For TT=0 To MEN If DEAD(TT)=0 and CONTR(TT)<>7 LASTBONUS[X(TT),Y(TT)] End If Next TT OVER=2 Else If ITEM(_NOM,PERS+1) ITEM(_NOM,PERS+1)=1 Else KILMONEY[X(PERS),Y(PERS),0] End If End If End If Timer=0 If STRON=1 : BW[STRAWB] : End If End If ' If SIZ(PERS)+STACK(PERS)=1 If SPEED(PERS)>0 Dec SPEED(PERS) End If MADCRY[1,8500,1] STACK(PERS)=0 End If ' Pop Proc ' SHRINK: If STACK(PERS)>0 Then STACK(PERS)=0 : Goto OUT Dec SIZ(PERS) If SIZ(PERS)<1 Then Inc DEAD(PERS) : STUCK(PERS)=0 If DEAD(PERS) and VIRUS=PERS Then VIRUS=-1 If _D<>1 Then CNT=0 : Goto BOUNCE BIT=-1 If LTH(PERS)>SIZ(PERS) Then BIT=TL(PERS)-(SIZ(PERS)+1) : If BIT<0 Then BIT=(BIG+1)+BIT If BIT>-1 TX=TAIL(PERS,0,BIT) TY=TAIL(PERS,1,BIT) If GRID(TX,TY)=PERS+1 CX=(TX*4)+32 CY=(TY*4)+32 Screen Copy 1,CX,CY,CX+4,CY+4 To 0,CX,CY GRID(TX,TY)=0 End If End If Goto OUT ' BOUNCE: Inc CNT BACK=0 TX=TAIL(PERS,0,TL(PERS)) TY=TAIL(PERS,1,TL(PERS)) If GRID(TX,TY)=PERS+1 CX=(TX*4)+32 CY=(TY*4)+32 Screen Copy 1,CX,CY,CX+4,CY+4 To 0,CX,CY GRID(TX,TY)=0 Else GRID(TX,TY)=0 Inc BACK End If Add TL(PERS),-1,0 To BIG X(PERS)=TAIL(PERS,0,TL(PERS)) Y(PERS)=TAIL(PERS,1,TL(PERS)) If BACK>0 and CNT0 and GR<11 GR=GRID(OKX,OKY)-1 If GR<>PERS and(L(PERS)<>L(GR) or L(PERS)<2) PASS=1 End If End If End If Return ' End Proc Procedure _CHECKREV[MAN] ' Add Y(MAN),-DY(MAN) Add X(MAN),-DX(MAN) A=0 : SELF=0 Do OK[X(MAN)+SCOOPCO(A,0),Y(MAN)+SCOOPCO(A,1)] If Param=1 PASS=0 Pop Proc Else TMP=GRID(OKX,OKY) If TMP=BLOCK or TMP=HOLE or TMP=MAN+1 Inc SELF End If End If Inc A If A=4 Then Exit Loop If ITEM(_SREV,MAN+1) and SELF=4 ITEM(_SREV,MAN+1)=1 PASS=2 Else PASS=1 End If ' End Proc Procedure _REVERSE[PERS] ' BIT=(TL(PERS)-SIZ(PERS)) : If BIT<0 Then BIT=(BIG+BIT)+1 ' X(PERS)=TAIL(PERS,0,BIT) Y(PERS)=TAIL(PERS,1,BIT) DX(PERS)=-DX(PERS) : DY(PERS)=-DY(PERS) ' If _MEMORY=1 _SAM[22,9400] _SAM[22,9100+Rnd(2)] Else _SAM[8,1000] _SAM[8,1001] End If For A=0 To BIG/2 Swap TAIL(PERS,0,A),TAIL(PERS,0,BIG-A) Swap TAIL(PERS,1,A),TAIL(PERS,1,BIG-A) Next A ' TL(PERS)=(BIG-TL(PERS))+SIZ(PERS)+1 If TL(PERS)>BIG Then TL(PERS)=(TL(PERS)-BIG)-1 ' FACE[PERS,DX(PERS),DY(PERS)] ' End Proc Procedure RESURECT[PERS] ' If CONTR(PERS)=6 and GAME-1 and XA-1 and YA28-(TIM*2) Then Exit Loop Inc TIM : If TIM>12 Then Exit Loop Screen Close 3 ' Screen 0 ' PASS=0 If XA>-1 and YA>-1 and XA0 Gosub PLACE End If PASS=1 X(PERS)=XA : Y(PERS)=YA DX(PERS)=-1 : DY(PERS)=0 : TL(PERS)=1 : LTH(PERS)=1 STACK(PERS)=10 : SIZ(PERS)=20 SPC(PERS)=0 : DEAD(PERS)=0 : SPEED(PERS)=4 : OUT(OUT)=-1 : STUCK(PERS)=0 For A=0 To BIG+1 TAIL(PERS,0,A)=X(PERS) : TAIL(PERS,1,A)=Y(PERS) Next A ' Paste Icon(X(PERS)*4)+32,(Y(PERS)*4)+32,50+(CUL(PERS)*3) ' End If CH=1 _SAM[16,5500] : Wait 2 : _SAM[16,5501] GG=_REMEM Sprite Off 0 For GAMETIME=1 To GG : Wait Vbl : SHOTIME : Next GAMETIME Wait Max(1,100-GAMETIME) If PASS=0 Then Goto L For V=4 To 1 Step -1 _SAM[V,9000] : Wait 16 Next V L: Fade 25 To 1 Pop Proc ' ' PLACE: OU=1 Do P=0 For SY=Max(0,YA-OU) To Min(BIGY,YA+OU) For SX=Max(0,XA-OU) To Min(BIGX,XA+OU) If GRID(SX,SY)=0 Then YA=SY : XA=SX : SX=1000 : SY=1000 : Inc P Next SX Next SY If P>0 Then Exit Inc OU Loop Return ' ' ' COMPRES: ' If NEWXA>XA Then Inc XA If NEWYA>YA Then Inc YA If NEWXA0 If G=SPEED or G=MONEY or G=PART Add S,50 Else If G=GOLD Add S,100 Else Add S,-10 End If End If End If Next SX Next SY Add OU,5 : If OU>8 Then Exit Loop If S>BIGOUT BIGOUT=S NEWXA=PLX : NEWYA=PLY End If ' SK: ' Return ' ' MOVARROW: WHICHCONT[CONTR(PERS)] ' If MOVE(1) Then Dec YA If MOVE(2) Then Inc YA If MOVE(3) Then Inc XA If MOVE(4) Then Dec XA ' XA=Min(BIGX+3,Max(-3,XA)) YA=Min(BIGY+3,Max(-3,YA)) ' Return ' End Proc Procedure WORTH[PERS] WORTH=MONEY(PERS)-LOAN(PERS) For A=0 To 20 Add WORTH,ITEM(A,0)*ITEM(A,PERS+1) Next A End Proc[WORTH] Procedure OPENUP[MMX,MMY,OT] ' Paste Bob 160,19,72 Paste Bob 160,289,Vrev(72) Paste Bob 21,128,73 Paste Bob 332,128,Hrev(73) OPEN=1 If OT KILMONEY[MMX,MMY,1] If _MEMORY=1 _SAM[18,6000] _SAM[18,6000] Else _SAM[5,12000] _SAM[5,12000] End If End If ' End Proc Procedure OK[OKX,OKY] ' If OKY<0 Then If OKX>31 and OKX<44 and OPEN=1 Then OKY=BIGY Else OKY=0 If OKY>BIGY Then If OKX>31 and OKX<44 and OPEN=1 Then OKY=0 Else OKY=BIGY If OKX<0 Then If OKY>23 and OKY<40 and OPEN=1 Then OKX=BIGX Else OKX=0 If OKX>BIGX Then If OKY>23 and OKY<40 and OPEN=1 Then OKX=0 Else OKX=BIGX ' POZ=GRID(OKX,OKY) If(POZ>0 and POZ<11) or POZ=BLOCK or POZ=HOLE or POZ=SLOW OK=0 Else OK=1 End If ' End Proc[OK] ' Misc Procs Procedure _SORT[GA] RATING[GA] For A=0 To MEN WININ(A)=A Next A For A=0 To MEN For B=0 To MEN-1 If CONTR(WININ(B+1))=7 Then Goto DUN If CONTR(WININ(B))=7 Then Swap WININ(B),WININ(B+1) : Goto DUN If RATE(WININ(B))RATE(WININ(B+1)) Then Goto DUN If SCORE(WININ(B))SCORE(WININ(B+1)) Then Goto DUN If MONEY(WININ(B))MONEY(WININ(B+1)) Then Goto DUN If L(WININ(B))0 PER=GRID(CHX,CHY)-1 If PER=8 Then CH=1 If CH<8 Then CHANL=CH/2 Else CHANL=3 End Proc Procedure WAT0 Repeat MOVEMOUSE Until MKEY=0 End Proc Procedure FONTDO FON=Length(1)+1 _DOSCR[19,6] G=FON For Y=0 To 3 For X=0 To 23 Get Bob G,X*9,Y*9 To(X*9)+8,(Y*9)+9 : Inc G Next X Next Y _DOSCR[18,6] For X=0 To 7 : Get Icon X+1,X*32,0 To(X*32)+32,15 : Next X For X=0 To 8 : Get Icon X+15,X*10,15 To(X*10)+10,25 : Next X For A=0 To 20 For B=0 To 2 _FLASHCOL(A)=Colour(Point(1+A*4,26+B*4)) Get Icon 50+(A*3)+B,A*4,25+B*4 To A*4+4,29+B*4 Next B Next A Make Icon Mask Screen Close 6 End Proc Procedure TEX[XT,YT,TEX$] ' For A=0 To Len(TEX$)-1 A$=Mid$(TEX$,A+1,1) If A$<>" " Then Paste Bob XT+A*8,YT,FON+(Asc(A$)-32) Next A ' End Proc Procedure SHTEX[XT,YT,TEX$,SPICE] For A=Len(TEX$) To 1 Step -1 TEX[XT+3+((A-1)*SPICE),YT+2,Mid$(TEX$,A,1)] Next A End Proc Procedure SH[XT,YT,TEX$] ' SHTEX[XT-2,YT-2,TEX$,7] SHTEX[XT-3,YT-3,TEX$,7] ' End Proc Procedure DIS[TEX$] ' If _SCORE=0 Then Pop Proc Ink 11 Bar 72,219 To 230,227 XT=152-Len(TEX$)*4 ' For A=0 To Len(TEX$)-1 Paste Bob XT+A*8,219,FON+(Asc(Mid$(TEX$,A+1,1))-32) _SAM[12,23000] Wait 3 Next A ' Wait 30 ' End Proc Procedure CEN[WY,TEX$] ' XT=PASS-Len(TEX$)*3.5 ' For A=0 To Len(TEX$)-1 Paste Bob XT+A*7,WY,FON+(Asc(Mid$(TEX$,A+1,1))-32) Next A ' End Proc Procedure BITS[PX,PY,INOUT] B=0 Do If INOUT If BITS(B,0)=-1 BITS(B,0)=PX BITS(B,1)=PY Exit End If Else If BITS(B,0)=PX and BITS(B,1)=PY BITS(B,0)=-1 Exit End If End If Inc B : If B>20 Then Exit Loop For A=0 To MEN If CONTR(A)=6 and DEAD(A)=0 FINDPART[X(A),Y(A),A] End If Next A End Proc Procedure BITSEMPTY B=0 TMP(0)=0 : TMP(1)=0 Do If BITS(B,0)<>-1 TYP=GRID(BITS(B,0),BITS(B,1)) If TYP=SPEED : Inc TMP(1) : End If If TYP=PART : Inc TMP(0) : End If End If Inc B : If B>20 Then Exit Loop End Proc ' Procedure PAUSE Gosub SAM Repeat : Until Key State(25)=0 Wait 5 C=0 : Timer=490 Repeat If C=1 and Timer>500 Then Fade 25 To 1 : C=0 : Timer=0 If C=0 and Timer>500 Then For A=1 To 31 : Colour(A),4095-Colour(A) : Next A : C=1 : Timer=0 Until Key State(25) Gosub SAM Repeat : Until Key State(25)=0 Fade 8 To 1 Wait 200 Pop Proc ' SAM: MADCRY[5,4000,4] Return ' End Proc Procedure MOVEMOUSE Wait Vbl Sprite 0,X Mouse,Y Mouse,23 MZ=Mouse Zone MKEY=Mouse Key ' For A=1 To 3 WHICHCONT[A] If MOVE(1) Then Y Mouse=Y Mouse-2 If MOVE(2) Then Y Mouse=Y Mouse+2 If MOVE(3) Then X Mouse=X Mouse+2 If MOVE(4) Then X Mouse=X Mouse-2 If MOVE(0) Then MKEY=1 Next A ' End Proc Procedure MADCRY[S,P,AD] _SAM[S,P] _SAM[S,P+AD] _SAM[S,P+AD*2] End Proc Procedure FAD[C,S] If S=0 Palette C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C Else Fade S,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C End If End Proc Procedure CUL[C,S] If S=0 Palette 0,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C Else Fade S,0,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C End If End Proc ' Procedure _SAVE[TYP] ' _LOAD[TYP] ' For A=20 To 39 HI$(A)=" " HI(A)=0 Next A ' If TYP=0 Then RATING[GAMES] If TYP<>0 For A=0 To MEN If TYP=1 : RATE(A)=SPEEDBON(A) : End If If TYP=2 : RATE(A)=BIGBON(A) : End If If TYP=3 : RATE(A)=OLDM(A) : End If If TYP=4 : RATE(A)=KILBON(A)+DEST(A) : End If If TYP=5 : RATE(A)=OLDP(A) : End If Next A End If ' For A=0 To MEN If CONTR(A)<7 G=0 Repeat If Upper$(HI$(G))=Upper$(NAME$(A)) If RATE(A)>HI(G) HI(G)=RATE(A) End If Exit End If If HI$(G)=" " HI(G)=RATE(A) HI$(G)=NAME$(A) Exit End If Inc G Until G>29 End If Next A ' _SAVE_HIDATA[TYP] ' Erase 10 ' End Proc Procedure _LOAD[TYP] ' _LOADCPT["Sneechfiles/scores"+Right$(Str$(TYP),1)+".dat"] ' For A=0 To 19 _GETNAME[A] HI$(A)=PASS$ HI(A)=PASS Next A ' Erase 10 ' End Proc Procedure _GETNAME[OFFS] PASS$="" For A=0 To 19 : PASS$=PASS$+Chr$(Peek(Start(10)+(OFFS*26)+A)) : Next A PASS=Deek(Start(10)+(OFFS*26)+20) Do If Right$(PASS$,1)=" " and Len(PASS$)>1 PASS$=Left$(PASS$,Len(PASS$)-1) Else Exit End If Loop End Proc Procedure RATING[GMS] ' For A=0 To MEN If CONTR(A)<7 C#=3 For OTH=0 To MEN If CONTR(OTH)<7 If L(OTH)<>L(A) or L(A)<2 If CONTR(OTH)=6 C#=C#-0.2 Else C#=C#-0.13 End If End If End If Next OTH If MONEY(A)<0 R=SCORE(A)+(MONEY(A)/10) Else R=SCORE(A)+(MONEY(A)/300) End If R=(R/GMS)+(GAMES*8) R#=R*C# If L(A)=1 R#=R#*0.75 End If If(R#<0.0) or(GAME=1) RATE(A)=0 Else RATE(A)=R# End If End If Next A ' End Proc Procedure _LOADCPT[F$] Load F$,10 ' RE=1 For A=0 To Length(10)-1 GG=Peek(Start(10)+A) Add GG,-RE RE=RE+RE : If RE>250 Then RE=1 If GG<0 Then Add GG,256 Poke Start(10)+A,GG Next A ' End Proc Procedure _SAVECPT[F$] RE=1 For A=0 To Length(10)-1 GG=Peek(Start(10)+A) Add GG,RE RE=RE+RE : If RE>250 Then RE=1 If GG>255 Then Add GG,-256 Poke Start(10)+A,GG Next A ' Save F$,10 ' End Proc Procedure _LOADSAVE[TY] ' If DEM Then Pop Proc ' If TY=0 Erase 6 : AGA=Free : Reserve As Data 6,200 Else Load "Sneechfiles/Old_Game.dat",6 End If ' For A=0 To MEN If TY=0 Doke Start(6)+(A*2),SCORE(A) Doke Start(6)+20+(A*2),MONEY(A) Doke Start(6)+40+(A*2),SPENDS(A) Doke Start(6)+60+(A*2),LOAN(A) Else SCORE(A)=Deek(Start(6)+(A*2)) MONEY(A)=Deek(Start(6)+20+(A*2)) SPENDS(A)=Deek(Start(6)+40+(A*2)) LOAN(A)=Deek(Start(6)+60+(A*2)) End If Restore LOD For Z=0 To 10 Read B If TY=0 Poke Start(6)+80+A+(Z*10),ITEM(B,A+1) Else ITEM(B,A+1)=Peek(Start(6)+80+A+(Z*10)) End If Next Z Next A ' LOD: Data 13,4,12,15,0,14,9,8,7,3,6,1 ' If TY=0 Poke Start(6)+149,GAME Save "sneechfiles/Old_Game.dat",6 _SAVEOPS[1] Else GAME=Peek(Start(6)+149)-1 : Erase 6 End If ' End Proc Procedure _SAVEOPS[OP] ' If DEM Then ALLERT[1,"No saving","in Demo","Ok","Ok"] : Pop Proc Erase 6 : AGA=Free : Reserve As Data 6,400 For A=0 To MEN : LE=Len(NAME$(A)) : For LET=1 To LE : Poke Start(6)+(A*12)+(LET-1),Asc(Mid$(NAME$(A),LET,1)) : Next LET : Poke Start(6)+(A*12)+LE,42 : Next A For A=0 To MEN : LE=Len(HUMAN$(A)) : For LET=1 To LE : Poke Start(6)+150+(A*12)+(LET-1),Asc(Mid$(HUMAN$(A),LET,1)) : Next LET : Poke Start(6)+150+(A*12)+LE,42 : Next A For A=0 To MEN Poke Start(6)+300+A,CUL(A) Poke Start(6)+310+A,L(A) Poke Start(6)+320+A,CONTR(A) Next A ' PLL=Start(6)+350 ' Poke PLL,GAMES : Poke PLL+1,TIME Poke PLL+3,PARTS Poke PLL+6,_KEYS Poke PLL+2,_STAT Poke PLL+8,_SCORE Poke PLL+5,_VIR ' Poke PLL+9,PLL+13,PLL+7,pll+4,pll+12,pll+10 ' If DEM=0 If OP=0 ' Save "sneechfiles/Def_Options.dat",6 Save "sneechfiles/Options.dat",6 Else Save "sneechfiles/Sav_Options.dat",6 End If End If ' End Proc Procedure _LOADOPS[OP] ' If OP=0 Load "sneechfiles/options.dat",6 Else If OP=1 Load "sneechfiles/Def_Options.dat",6 Else Load "sneechfiles/Sav_Options.dat",6 End If End If For A=0 To MEN NAME$(A)="" : LET=0 Do A$=Chr$(Peek(Start(6)+(A*12)+LET)) If A$="*" Then Exit NAME$(A)=NAME$(A)+A$ : Inc LET Loop HUMAN$(A)="" : LET=0 Do A$=Chr$(Peek(Start(6)+150+(A*12)+LET)) If A$="*" Then Exit HUMAN$(A)=HUMAN$(A)+A$ : Inc LET Loop Next A For A=0 To 9 CUL(A)=Peek(Start(6)+300+A) L(A)=Peek(Start(6)+310+A) CONTR(A)=Peek(Start(6)+320+A) Next A ' PLL=Start(6)+350 ' GAMES=Peek(PLL) : TIME=Peek(PLL+1) : PARTS=Peek(PLL+3) _KEYS=Peek(PLL+6) : _STAT=Peek(PLL+2) _SCORE=Peek(PLL+8) : _VIR=Peek(PLL+5) If DEM Then GAMES=2+1 : TIME=6-1 : _VIR=3-3 : _SCORE=2-1 : _STAT=6-5 : _KEYS=4-2 : PARTS=9-3 ' Rem=Peek(PLL+9),(PLL+13),(PLL+7),(PLL+4),(pll+12),(pll+10) ' End Proc Procedure _SAVE_HIDATA[TYP] ' Erase 10 : Reserve As Data 10,600 ' Home Paper 0 For A=0 To 38 G$=Upper$(HI$(A)) For B=A+1 To 39 If Upper$(HI$(B))=G$ Then If HI(A)>HI(B) Then HI(B)=0 : HI$(B)=" " Else HI(A)=0 : HI$(A)=" " Next B Next A ' Do SW=0 For A=0 To 38 If HI(A)0 Colour(A),((15-R)*256)+((15-G)*16)+(15-B) End If Else Colour(A),(Min(15,R+1)*256)+(G*16)+Max(0,B-1) End If End If Next A ' Screen 0 Fade 80 To 1 If TY=STRAWB : STRON=1-STRON : If STRON=1 : Channel 15 To Screen Display 0 : Move Y 15,"(1,3,1)(1,2,1)(1,-2,1)(1,-3,1)(1,-2,1)(1,2,1)L" : Move On 15 : Else : Move Off 15 : Screen Display 0,,42,, : End If : End If ' ' End Proc Procedure CHEKDOORS ' G=Rnd(3)+1 : On G Gosub D1,D2,D3,D4 Pop Proc ' D1: Rem Bottom CT=0 : CB=0 For A=0 To 5 GR=GRID(32+A,0) : G2=GRID(32+A,BIGY) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CT GR=GRID(38+A,0) : G2=GRID(38+A,BIGY) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CB Next A Paste Bob 154,310,77-Min(1,CT) Paste Bob 212,310,77-Min(1,CB) Return ' D2: Rem Top CT=0 : CB=0 For A=0 To 5 GR=GRID(32+A,BIGY) : G2=GRID(32+A,0) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CT GR=GRID(38+A,BIGY) : G2=GRID(38+A,0) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CB Next A Paste Bob 154,8,77-Min(1,CT) Paste Bob 212,8,77-Min(1,CB) Return ' D3: Rem Right CT=0 : CB=0 For A=0 To 7 GR=GRID(0,24+A) : G2=GRID(BIGX,24+A) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CT GR=GRID(0,32+A) : G2=GRID(BIGX,32+A) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CB Next A Paste Bob 357,123,77-Min(1,CT) Paste Bob 357,195,77-Min(1,CB) Return ' D4: Rem Left CT=0 : CB=0 For A=0 To 7 GR=GRID(BIGX,24+A) : G2=GRID(0,24+A) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CT GR=GRID(BIGX,32+A) : G2=GRID(0,32+A) If GR=BLOCK or(GR>0 and GR<=MEN+1) Then If G2<>BLOCK and(G2>8 or G2=0) Then Inc CB Next A Paste Bob 8,123,77-Min(1,CT) Paste Bob 8,195,77-Min(1,CB) Return ' ' End Proc Procedure ALLERT[SCRR,T1$,T11$,T2$,T3$] ' Get Bob 298,156-56,30 To 156+56,90 Screen SCRR Paste Bob 0,0,299 PASS=56 CEN[9,T1$] : CEN[18,T11$] PASS=34 : CEN[34,T2$] PASS=80 : CEN[34,T3$] MADCRY[9,2100,4] For A=7 To 43 Zoom SCRR,0,0,112,59 To SCRR,0,60,Min(112,A),60+A/2 Vbl Wait 200 Screen Copy SCRR,0,60,A,60+A/2 To PRES,156-A/2,60-A/4 MOVEMOUSE Next A Screen 0 FAD[$FFF,0] Screen Copy SCRR,0,0,112,59 To PRES,156-56,30 Fade 1 To 1 Wait 16 ' Do MOVEMOUSE If MKEY=1 Then If X Mouse>242 and X Mouse<326 Then If Y Mouse>100 and Y Mouse<115 Then If X Mouse>284 Then RET=1 : Exit Else RET=0 : Exit Loop ' MADCRY[5,15000,1] FAD[$F95,0] Wait Vbl Ink 0 : Bar 156-56,30 To 155+56,89 Paste Bob 156-56,30,298 Fade 4 To 1 Wait 16 Repeat MOVEMOUSE Until MKEY=0 ' End Proc[RET]