; CELLS.ACT››; Cells by Bill Kendrick›; New Breed Software 10/10/1994››; INCLUDE "D:RUNTIME.ACT"››Byte REDUCTION,POWERSUPPLIES,BLINK››Card Ch=756,Scrn=88›Byte RAMTop=106,Key=764,Time=20,Con=53279›Byte Col0=708,Col1=709,Col2=710,Col3=711›Card SC›Byte X,Y,C,C2,D,X2,Y2,Tries,K›Int Array DX(4),DY(4)››Proc SetUp()› Graphics(17) ; 20 X 24 X 5 COLORS OF TEXT›› Ch=RAMTop-16 ; FONT'LL GO HERE› SC=(RAMTop-32)*256 ; ACTIVE SCREEN'LL GO HERE› ; (VIEWED SCREEN IS 'Scrn')›› MoveBlock(Ch*256,224*256,1024) ; FONT!:› MoveBlock(Ch*256+1*8,"=1 And Chr<=4) Then ; CELL› CC=CC+64› ElseIf Chr=6 Then ; BRICK› CC=CC+128+64› ElseIf Chr=7 Or Chr=8 Then ; MITOSIZING› CC=CC+128› Fi› Poke(SC+Row*20+Col,CC) ; PLACE IT›Return››Proc Draw()› For Y=0 To 23 Do ; TOP/BOTTOM BOUNDARY› Place(0,Y,6)› Place(19,Y,6)› Od› For X=1 To 18 Do ; LEFT/RIGHT BOUNDARY› Place(X,0,6)› Place(X,23,6)› Od› For Y=1 To 22 Do ; PLACE RANDOM CELLS AND BRICKS› For X=1 to 18 Do› C=Rand(5)+1› If C=1 Then C=0 Fi› If C=4 Then C=3 Fi› If C=5 Then C=6 Fi› Place(X,Y,C)› Sound(0,120-Y*5,10,9-X/2)› Od› Od› For C=1 To POWERSUPPLIES Do ; PLACE RANDOM POWER SUPPLIES› Do› X=Rand(18)+1› Y=Rand(22)+1› Until (Peek(SC+Y*20+X)&63)<>5 Od› Place(X,Y,5)› Od› Sound(0,0,0,0)›Return›››Proc Title()› Byte LMar=82,RMar=83,Cur=752›› Graphics(0)› Col1=0 ; SCREEN BLACK...› Col2=0›› LMar=0 ; WIDEST MARGINS› RMar=39› Cur=1 ; INVISIBLE CURSOR›› Put(125) ; CLS›› Print("ü” Ãåììó ” ü Âù Âéìì Ëåîäòéãë           ")› Print("š’’’’’’’’’’ƒ Îå÷ Âòååä Óïæô÷áòå ±¹¹´    ")› PrintE("This is a cellular reproduction demo.")› PrintE("The laws of life are as follows:")› PutE()› PrintE(" Û±Ý Cells need energy to survive")› PrintE(" Û²Ý Cells can reproduce when they have")› PrintE(" 100% energy and there's a place to")› PrintE(" reproduce onto")› PrintE(" Û³Ý Cells suck energy from each other")› PrintE(" and power supplies")› PrintE(" Û´Ý Power supplies have unlimited")› PrintE(" energy")› PrintE(" ÛµÝ Cells lose energy by living")› PrintE(" Û¶Ý Neither cells nor energy can")› PrintE(" pass through bricks")› PrintE(" Û·Ý The plane in which the cells,")› PrintE(" power supplies and bricks exist is")› PrintE(" two-dimensional and right-angled")› PutE()› PrintE("Press ÛÅÓÃÝ to quit the demo.")› PrintE("Press ÛÓÐÁÃÅÝ to reselect options.")› PutE()› Print(" Press any key to continue...")›› For C=0 To 150 Do› Col1=C/10 ; EVENTUALLY WHITE TEXT› Col2=C/20 ; EVENTUALLY GREY BACKGROUND› Od›› Key=255› Do› Until Key<>255 Od ; WAIT FOR KEYPRESS› Key=255›Return››Proc Options()› Byte LMar=82,RMar=83,Cur=752›› Graphics(0)› Col1=15 ; TEXT LIGHT BLUE› Col2=128 ; BACKGROUND DARK BLUE›› LMar=0 ; WIDEST MARGINS› RMar=39› Cur=1 ; INVISIBLE CURSOR›› Put(125) ; CLS›› PutE()› PutE()› PutE()› PrintE(" Press ÛÅÝ to change energy loss,")› PrintE(" ÛÓÝ to change supplies,")› PrintE(" or ÛÒÅÔÕÒÎÝ to begin...")› PutE()› PutE()› PrintE("  Òáôå ïæ åîåòçù ìïóó éî ãåììóº  ")› PutE()› PutE()› PrintE("       Ðï÷åò óõððìéåó ïî ðìáî庠 ")›› Key=255› Do› K=Key› If K=42 Then› REDUCTION=REDUCTION+5› If REDUCTION>200 Then› REDUCTION=0› Fi› Key=255› ElseIf K=62 Then› POWERSUPPLIES=POWERSUPPLIES+2› If POWERSUPPLIES>30 Then› POWERSUPPLIES=2› Fi› Key=255› Fi›› Position(33,8)› PrintB(REDUCTION)› Print(" ")›› Position(33,11)› PrintB(POWERSUPPLIES)› Print(" ")› Until K=12 Od› Key=255›Return››; ÍÁÉΛ›Proc Main()›› Title() ; INTRO,CREDITS›› REDUCTION=10 ; DEFAULTS› POWERSUPPLIES=10› BLINK=1›› Do› Options() ; OPTIONS› SetUp() ; SCREEN,FONT,COLORS› Draw() ; DRAW A SCREEN›› Key=255›› Do›› If Con=6 Then ; TOGGLE POWER BLINKING› BLINK=1-BLINK› Col0=30› Fi›› For Y=1 To 22 Do›› If BLINK=1 Then› Col0=16+(Time&15) ; MAKE POWERS FLASH› Fi›› For X=1 to 18 Do› C=Peek(SC+Y*20+X)&63 ; WHAT'S HERE? (&63 IGNORES COLOR)›› If Rand(250)=1 And C<=4 Then› C=C-1› Place(X,Y,C) ; REDUCE LEVEL SOMETIMES› Fi›› D=Rand(4) ; LOOK SOMEWHERE› X2=X+DX(D)› Y2=Y+DY(D)› C2=Peek(SC+Y2*20+X2)&63; WHAT'S THERE?›› If C2=0 And C=4 Then ; IF LEVEL 4 AND THERE'S A BLANK,› If D=0 Or D=2 Then ; MITOSIZE THAT WAY..› Place(X,Y,7) ; VERTICALLY› Else› Place(X,Y,8) ; HORIZONTALLY› Fi› Else› If (C>=1 And C<=3) Or C2=0 Then ; IF LOW ON POWER OR› If C2>=1 And C2<=4 Then ; GOING TO MITOSIZE. › Place(X,Y,C+1) ; PUT IN YOU› Place(X2,Y2,C2-1) ; OUT OF THEM› ElseIf C2=5 Then ; UNLESS A POWER..› Place(X,Y,C+1) ; IT IS INFINITELY POWERED..› Fi› ElseIf C=7 Then ; IF MITOSIZING VERT,› Tries=0› Do› D=Rand(2)*2 ; FIND A VERT PLACE TO ADD TO› X2=X+DX(D)› Y2=Y+DY(D)› C2=Peek(SC+Y2*20+X2)&63› If C2=0 Then› Place(X,Y,3) ; YOU BACK TO NORMAL› Place(X2,Y2,3) ; NEW BABY› Fi› Tries=Tries+1› Until C2=0 Or Tries=20 Od ; NO LUCK? KEEP TRYING› If Tries>=10 Then ; I GIVE UP!› Place(X,Y,3) ; BACK TO NORMAL› Fi› ElseIf C=8 Then ; IF MITOSIZING HORZ,› Tries=0› Do› D=Rand(2)*2+1 ; FIND A HORZ PLACE TO ADD TO› X2=X+DX(D)› Y2=Y+DY(D)› C2=Peek(SC+Y2*20+X2)&63› If C2=0 Then› Place(X,Y,3) ; YOU BACK TO NORMAL› Place(X2,Y2,3) ; NEW BABY› Fi› Tries=Tries+1› Until C2=0 Or Tries=20 Od ; NO LUCK? KEEP TRYING› If Tries>=10 Then ; I GIVE UP!› Place(X,Y,3) ; BACK TO NORMAL› Fi› Fi› Fi › Od› Sound(0,0,0,0)› Od›› MoveBlock(Scrn,SC,512) ; UPDATE SCREEN IN ONE QUICK PASS›› K=Key›› Until K=28 Or K=33 Od ; WAIT FOR ESC OR SPACE TO QUIT›› Until K=28 Od›› Key=255› Graphics(0)›Return››