Outils pour utilisateurs

Outils du site


back2root:archives:denthor:part-17

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
back2root:archives:denthor:part-17 [2021/09/02 16:38] – créée fraterback2root:archives:denthor:part-17 [2021/09/04 22:29] (Version actuelle) frater
Ligne 128: Ligne 128:
 The sample program uses fixed point math in order to achieve high speeds, but it is basically the above algorithm. The sample program uses fixed point math in order to achieve high speeds, but it is basically the above algorithm.
  
-=== Static ===+==== Static ====
  
 A static screen was one of the first effects Asphyxia ever did. We never actually released it because we couldn't find anywhere it would fit. Maybe you can. A static screen was one of the first effects Asphyxia ever did. We never actually released it because we couldn't find anywhere it would fit. Maybe you can.
Ligne 148: Ligne 148:
 A nice thing about a static screen is that it is just pallette rotations... you can do lots of things in the foreground at the same time (such as ascroller). A nice thing about a static screen is that it is just pallette rotations... you can do lots of things in the foreground at the same time (such as ascroller).
  
-=== In closing ===+==== Code Source ==== 
 + 
 +<code pascal> 
 +{$X+} 
 +USES crt,gfx3; 
 + 
 +Const jump = 64;       { Number of pixels active at once } 
 +      sjump = 6;       { 1 shl 6 = 64 } 
 + 
 +TYPE 
 +        FontDat = Array [' '..'Z',1..16,1..16] of byte; {Our main font } 
 +        target = record 
 +                 herex,herey : integer; 
 +                 targx,targy : integer; 
 +                 dy,dx : integer; 
 +                 active : boolean; 
 +                 col : byte; 
 +                 num:integer; 
 +             END; 
 +        PixelDat = Array [1..4095] of target; { This is the maximum number 
 +                                                of points we canb fit in a 
 +                                                segment... } 
 + 
 +VAR Font : ^FontDat;                          { Our nice font } 
 +    nextrow : ^PixelDat; 
 +    scr : array [' '..'Z',1..8,1..8] of byte; { The basic bios font } 
 +    Vir2 : VirtPtr; 
 +    Vaddr2 : Word;                            { Spare virtual screen } 
 +    counter:integer; 
 +    PosLoop:integer; 
 +    dir : boolean; 
 +    pathx,pathy:array [1..314] of integer;    { Path of origination } 
 +    arbpal : array [1..8,1..3] of byte;       { Used to remember certain 
 +                                                colors } 
 + 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Bigmsg (x,y:integer;msg:string); 
 +  { This draws string msg to screen in the bios font, but bigger } 
 +VAR loop1,loop2,loop3,loop4,loop5:integer; 
 +BEGIN 
 +  for loop1:=1 to length (msg) do 
 +    for loop2:=1 to 8 do 
 +      for loop3:=1 to 8 do 
 +        if (scr[msg[loop1],loop3,loop2]<>0) then BEGIN 
 +          for loop4:=1 to 4 do 
 +            for loop5:=1 to 8 do 
 +              putpixel (x+(loop1*32)+(loop2*4)+loop4,y+(loop3*8)+loop5, 
 +                getpixel (x+(loop1*32)+(loop2*4)+loop4,y+(loop3*8)+loop5,vaddr2)+51,vaddr); 
 +        END; 
 +END; 
 + 
 + 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Static; 
 +  { This moves the static and tunes in to our background logo } 
 +VAR loop1,loop2,count,count2,count3:integer; 
 +BEGIN 
 +  flip (vaddr2,vaddr); 
 +  Bigmsg (0,60,'ASPHYXIA'); 
 +  flip (vaddr,vga); 
 +  count:=0; 
 +  count2:=0; 
 +  for loop2:=1 to 100 do BEGIN 
 +    waitretrace; 
 +    for loop1:=99 to 150 do BEGIN 
 +      count:=random (64); 
 +      pal (loop1,count,count,count); 
 +    END; 
 +    for loop1:=150 to 201 do BEGIN 
 +      count:=random (64); 
 +      pal (loop1,count,count,count); 
 +    END; 
 +  END;   { Do the static for a while } 
 + 
 +  repeat 
 +    inc (count); 
 +    if count>10 then BEGIN 
 +      count:=0; 
 +      inc (count2); 
 +    END; 
 +    waitretrace; 
 +    for loop1:=99 to 150 do BEGIN 
 +      count3:=random (64-count2); 
 +      if count3<0 then count3:=0; 
 +      pal (loop1,count3,count3,count3); 
 +    END; 
 +    for loop1:=150 to 201 do BEGIN 
 +      count3:=random (64); 
 +      count3:=count3+count2; 
 +      if count3>63 then count3:=63; 
 +      pal (loop1,count3,count3,count3); 
 +    END; 
 +  until count2>63; { Static fade in Asphyxia logo } 
 + 
 +  delay (500); 
 +  for loop1:=30 to 62 do BEGIN 
 +    line (0,loop1*2,319,loop1*2,0,vga); 
 +    delay (5); 
 +  END; 
 +  for loop1:=62 downto 30 do BEGIN 
 +    line (0,loop1*2+1,319,loop1*2+1,0,vga); 
 +    delay (5); 
 +  END;  { Erase logo with lines } 
 +  delay (1000); 
 +  while keypressed do readkey; 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Fadeup; 
 +  { This fades up the pallette to white } 
 +VAR loop1,loop2:integer; 
 +    Tmp : Array [1..3] of byte; 
 +BEGIN 
 +  For loop1:=1 to 64 do BEGIN 
 +    WaitRetrace; 
 +    For loop2:=0 to 255 do BEGIN 
 +      Getpal (loop2,Tmp[1],Tmp[2],Tmp[3]); 
 +      If Tmp[1]<63 then inc (Tmp[1]); 
 +      If Tmp[2]<63 then inc (Tmp[2]); 
 +      If Tmp[3]<63 then inc (Tmp[3]); 
 +      Pal (loop2,Tmp[1],Tmp[2],Tmp[3]); 
 +    END; 
 +  END; 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure FadeTo (name:string); 
 +  { This procedure fades the screen to name ... if you use this for yourself, 
 +    you will need to cut out the extra stuff I do in here specific to this 
 +    program } 
 +VAR loop1,loop2:integer; 
 +    tmp,pall2:array[0..255,1..3] of byte; 
 +    f:file; 
 +BEGIN 
 +  assign (f,name); 
 +  reset (f,1); 
 +  blockread (f,pall2,768); 
 +  close (f); 
 +  for loop1:=100 to 150 do BEGIN 
 +    pall2[loop1,1]:=loop1-100; 
 +    pall2[loop1,2]:=loop1-100; 
 +    pall2[loop1,3]:=loop1-100; 
 +  END;  { Set the background colors } 
 +  waitretrace; 
 +  for loop1:=0 to 255 do 
 +    getpal (loop1,tmp[loop1,1],tmp[loop1,2],tmp[loop1,3]); 
 + 
 +  For loop1:=1 to 64 do BEGIN 
 +    For loop2:=0 to 255 do BEGIN 
 +      If Tmp[loop2,1]<Pall2[loop2,1] then inc (Tmp[loop2,1]); 
 +      If Tmp[loop2,2]<Pall2[loop2,2] then inc (Tmp[loop2,2]); 
 +      If Tmp[loop2,3]<Pall2[loop2,3] then inc (Tmp[loop2,3]); 
 +      If Tmp[loop2,1]>Pall2[loop2,1] then dec (Tmp[loop2,1]); 
 +      If Tmp[loop2,2]>Pall2[loop2,2] then dec (Tmp[loop2,2]); 
 +      If Tmp[loop2,3]>Pall2[loop2,3] then dec (Tmp[loop2,3]); 
 +    END; 
 +    WaitRetrace; 
 +    for loop2:=0 to 255 do 
 +      pal (loop2,tmp[loop2,1],tmp[loop2,2],tmp[loop2,3]); 
 +  END; 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Show (x,y:integer;ch:string); 
 +  { This dumps string ch to screen at x,y in our main font } 
 +VAR loop1,loop2,loop3:integer; 
 +BEGIN 
 +  for loop3:=1 to length (ch) do 
 +    For loop1:=1 to 16 do 
 +      for loop2:=1 to 16 do 
 +        if Font^[ch[loop3],loop2,loop1]<>0 then 
 +          putpixel (x+loop1+(loop3*17),y+loop2,getpixel (x+loop1+(loop3*17),y+loop2,vaddr2)+51,VGA); 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Eye_Popper; 
 +  { This fades up the colors used in our main font } 
 +VAR Loop1,loop2:integer; 
 +    tmp : array [1..3] of byte; 
 +BEGIN 
 +  if keypressed then exit; 
 +  for loop1:=1 to 63 do 
 +    for loop2:=1 to 8 do BEGIN 
 +      Waitretrace; 
 +      Getpal (loop2,tmp[1],tmp[2],tmp[3]); 
 +      if tmp[1]<63 then inc (tmp[1]); 
 +      if tmp[2]<63 then inc (tmp[2]); 
 +      if tmp[3]<63 then inc (tmp[3]); 
 +      pal (loop2,tmp[1],tmp[2],tmp[3]); 
 +    END; 
 +  for loop1:=151 to 200 do 
 +    pal (loop1,63,63,63); 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure FadeOutText; 
 +  { This fades out the colors of our main font to the colors of the background 
 +    static } 
 +VAR Loop1,loop2:integer; 
 +    tmp : array [1..3] of byte; 
 +BEGIN 
 +  if keypressed then exit; 
 +  for loop1:=1 to 63 do BEGIN 
 +    Waitretrace; 
 +    for loop2:=151 to 200 do BEGIN 
 +      Getpal (loop2,tmp[1],tmp[2],tmp[3]); 
 +      if tmp[1]>loop2-151 then dec (tmp[1]); 
 +      if tmp[2]>loop2-151 then dec (tmp[2]); 
 +      if tmp[3]>loop2-151 then dec (tmp[3]); 
 +      pal (loop2,tmp[1],tmp[2],tmp[3]); 
 +    END; 
 +  END; 
 +  delay (100); 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Move_Em_Out (num:integer;del:byte); 
 +  { This procedure runs through each pixel that is active and moves it closer 
 +    to its destination } 
 +VAR loop2:integer; 
 +BEGIN 
 +  if del<>0 then delay (del); 
 +  for loop2:=1 to num do 
 +    if nextrow^[loop2].active then with nextrow^[loop2] do BEGIN 
 +      putpixel (herex shr sjump,herey shr sjump, 
 +                getpixel (herex shr sjump,herey shr sjump,vaddr),vga); 
 +        { Restore old bacground } 
 +      herex:=herex-dx; 
 +      herey:=herey-dy;  { Move pixel one step closer } 
 +      putpixel (herex shr sjump,herey shr sjump,col,vga); { Put down pixel } 
 +      dec (num); 
 +      if num=0 then BEGIN 
 +        active:=false; 
 +        putpixel (herex shr sjump,herey shr sjump,col,vaddr); 
 +      END;  { If destination reached, deactivate } 
 +    END; 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Doletter (msg : char; dx,dy : integer); 
 +  { This procedure activates the pixels necessary to draw a letter } 
 +VAR loop1,loop2:integer; 
 +    x,y : Integer; 
 +BEGIN 
 +  if keypressed then exit; 
 +  for loop2:=1 to 16 do BEGIN 
 +    for loop1:=1 to 16 do     { Our font is 16x16 } 
 +      if Font^[msg,loop1,loop2]<>0 then BEGIN { Don't do black pixels } 
 +        if dir then PosLoop:=PosLoop+1 
 +          else PosLoop:=PosLoop-1; 
 +        if PosLoop=315 then PosLoop:=1; 
 +        if PosLoop=0 then PosLoop:=314; 
 +        X:=pathx[PosLoop]+160; 
 +        y:=pathy[PosLoop]+100;     { Find point of origination } 
 + 
 +        nextrow^ [counter].herex:=x shl sjump; 
 +        nextrow^ [counter].herey:=y shl sjump; 
 +          { This is where I am } 
 +        nextrow^ [counter].targx:=(dx+loop2) shl sjump; 
 +        nextrow^ [counter].targy:=(dy+loop1) shl sjump; 
 +          { This is where I want to be } 
 +        nextrow^ [counter].dx:=(nextrow^[counter].herex-nextrow^[counter].targx) div jump; 
 +        nextrow^ [counter].dy:=(nextrow^[counter].herey-nextrow^[counter].targy) div jump; 
 +          { This is how I get there } 
 +        nextrow^ [counter].col:=Font^[msg,loop1,loop2]; 
 +        nextrow^ [counter].active:=TRUE; 
 +        nextrow^ [counter].num:=jump; 
 +        move_em_out(jump,6); 
 + 
 +        inc (counter); 
 +        if counter=jump+1 then counter:=1; 
 +      END; 
 +  END; 
 +END; 
 + 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure DoPic; 
 +  { This procedure morphs in the tank } 
 +VAR f:file; 
 +    ch:byte; 
 +    count,loop1,loop2:integer; 
 +    ourpal : array [0..255,1..3] of byte; 
 +BEGIN 
 +  cls (vaddr,0); 
 +  getmem (nextrow,sizeof(nextrow^)); 
 +  GetMem(Vir2,64000); 
 +  Vaddr2 := Seg(Vir2^); 
 +  for loop2:=1 to 4095 do 
 +    nextrow^[loop2].active:=false; 
 + 
 +  assign (f,'tut17.cel'); 
 +  reset (f,1); 
 +  seek (f,32); 
 +  blockread (f,ourpal,768); 
 +  for loop1:=0 to 255 do 
 +    pal (loop1,ourpal[loop1,1],ourpal[loop1,2],ourpal[loop1,3]); 
 +  count:=1; 
 +  for loop2:=1 to 60 do 
 +    for loop1:=1 to 160 do BEGIN 
 +      blockread (f,ch,1);     { Go through the pic, and activate non-black 
 +                                pixels } 
 +      if ch<>0 then BEGIN 
 +        nextrow^ [count].herex:=random (320) shl sjump; 
 +        nextrow^ [count].herey:=random (200) shl sjump; 
 +          { This is where I am } 
 +        nextrow^ [count].targx:=(loop1+80) shl sjump; 
 +        nextrow^ [count].targy:=(loop2+70) shl sjump; 
 +          { This is where I want to be } 
 +        nextrow^ [count].dx:=(nextrow^[count].herex-nextrow^[count].targx) div jump; 
 +        nextrow^ [count].dy:=(nextrow^[count].herey-nextrow^[count].targy) div jump; 
 +          { This is how I get there } 
 +        nextrow^ [count].col:=ch; 
 +        nextrow^ [count].active:=TRUE; 
 +        nextrow^ [count].num:=jump; 
 +        inc (count); 
 +      END; 
 +  END; 
 +  close (f); 
 +  for loop1:=0 to 64 do 
 +    move_em_out (count,0);  { Move pixels to targets } 
 +  delay (2000); 
 +  fadeup; 
 +END; 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Init; 
 +VAR f:file; 
 +    loop1,loop2:integer; 
 +    loopie:real; 
 +BEGIN 
 +  getmem (Font,sizeof(Font^)); 
 + 
 +  for loop2:=1 to jump do 
 +    nextrow^[loop2].active:=false; 
 + 
 +  Assign(f,'gods.Fnt'); 
 +  Reset(f,1); 
 +  Blockread(F,Font^,SizeOf(Font^)); 
 +  Close(f); 
 + 
 +  assign (f,'biostext.dat'); 
 +  reset (f,1); 
 +  Blockread (f,scr,sizeof (scr)); 
 +  close (f); 
 + 
 +  counter:=1; 
 +  PosLoop:=1; 
 +  dir:=true; 
 +  loopie:=0; 
 +  for loop1:=1 to 314 do BEGIN 
 +    loopie:=loopie+0.02; 
 +    pathX[loop1]:=round(150*cos (loopie)); 
 +    pathy[loop1]:=round(90*sin (loopie)); 
 +  END;    { Generate our path of origination } 
 +  cls (vga,0); 
 +  cls (vaddr,0); 
 +  cls (vaddr2,0); 
 +  for loop1:=0 to 319 do 
 +    for loop2:=0 to 199 do 
 +      putpixel (loop1,loop2,random (50)+100,vaddr2); { Fill the screen with static } 
 +  flip (vaddr2,vaddr); 
 +  flip (vaddr,vga); 
 +  fadeto ('game01.col'); 
 +  for loop1:=1 to 8 do 
 +    getpal (loop1,arbpal[loop1,1],arbpal[loop1,2],arbpal[loop1,3]); 
 +END; 
 + 
 + 
 +{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} 
 +Procedure Play; 
 +VAR loop1,loop2:integer; 
 +    message : Array [1..10] of string; 
 +BEGIN 
 +  DoPic; 
 +  init; 
 +  while keypressed do readkey; 
 +             {[                 ]} 
 +  message[1]:=''; 
 +  message[2]:=''; 
 +  message[3]:='   PIXEL TEXT   '; 
 +  message[4]:=''; 
 +  message[5]:='    ROUTINE'; 
 +  message[6]:=''; 
 +  message[7]:='      BY...'; 
 +  message[9]:=''; 
 + message[10]:=''; 
 +  for loop2:=1 to 7 do BEGIN 
 +    For loop1:=1 to length (message[loop2]) do BEGIN 
 +      doletter (message[loop2][loop1],loop1*17,loop2*17); 
 +      dir:=not(dir); 
 +    END; 
 +    for loop1:=1 to jump do move_em_out(jump,6); 
 +  END; 
 + 
 +  eye_popper; 
 +  For loop1:=1 to 7 do 
 +    show (0,loop1*17,message[loop1]); 
 +  fadeouttext; 
 +  flip (vaddr2,vaddr); 
 +  flip (vaddr,vga); 
 + 
 +  for loop1:=1 to 8 do 
 +    pal (loop1,arbpal[loop1,1],arbpal[loop1,2],arbpal[loop1,3]); 
 +  message[1]:='   TUNING...'; 
 +  For loop1:=1 to length (message[1]) do BEGIN 
 +    if message[1][loop1]='.' then for loop2:=1 to 20 do 
 +      move_em_out(jump,6); 
 +    doletter (message[1][loop1],loop1*17,100); 
 +    dir:=not(dir); 
 +  END; 
 +  for loop1:=1 to jump do move_em_out(jump,6); 
 + 
 +  eye_popper; 
 +  show (0,100,message[1]); 
 +  fadeouttext; 
 + 
 +  static; 
 + 
 +  freemem (vir2,sizeof (vir2^)); 
 +END; 
 + 
 + 
 +BEGIN 
 +  clrscr; 
 +  writeln ('Hi there ... welcome to the seventeenth Asphyxia VGA Trainer ... and'); 
 +  writeln ('the last one on demo effects for a while ... I am going to be doing'); 
 +  writeln ('more work on the theory aspect in future trainers.'); 
 +  writeln; 
 +  writeln ('This is an effect I first saw in an Extreme demo, and features ''Pixel'); 
 +  writeln ('Text'', with various dots forming letters. Also included are some crossfades'); 
 +  writeln ('and a static routine.'); 
 +  writeln; 
 +  writeln ('Check out the GFX3 unit for a faster putpixel...'); 
 +  writeln; 
 +  writeln ('The tank was drawn by Fubar a while ago when he was starting to learn'); 
 +  writeln ('3D Studio. The font I found somewhere on my hard drive.'); 
 +  writeln; 
 +  writeln; 
 +  writeln ('Hit any key to continue ...'); 
 +  readkey; 
 +  setmcga; 
 +  setupvirtual; 
 +  play; 
 +  settext; 
 +  shutdown; 
 +  Writeln ('All done. This concludes the seventeenth sample program in the ASPHYXIA'); 
 +  Writeln ('Training series. You may reach DENTHOR under the names of GRANT'); 
 +  Writeln ('SMITH/DENTHOR/ASPHYXIA on the ASPHYXIA BBS.I also occasinally read'); 
 +  Writeln ('RSAProg, comp.lang.pascal and comp.sys.ibm.pc.demos. E-mail me at :'); 
 +  Writeln ('    denthor@beastie.cs.und.ac.za'); 
 +  Writeln ('The numbers are available in the main text. You may also write to me at:'); 
 +  Writeln ('             Grant Smith'); 
 +  Writeln ('             P.O. Box 270'); 
 +  Writeln ('             Kloof'); 
 +  Writeln ('             3640'); 
 +  Writeln ('             Natal'); 
 +  Writeln ('             South Africa'); 
 +  Writeln ('I hope to hear from you soon!'); 
 +  Writeln; Writeln; 
 +  Write   ('Hit any key to exit ...'); 
 +  readkey; 
 +END. 
 +</code> 
 + 
 +==== In closing ====
  
 Well, that is about it ... as I say, I will be doing more theory stuff in future, as individual demo effects can be thought up if you know the base stuff. Well, that is about it ... as I say, I will be doing more theory stuff in future, as individual demo effects can be thought up if you know the base stuff.
back2root/archives/denthor/part-17.1630593530.txt.gz · Dernière modification : 2021/09/02 16:38 de frater