home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
PIXELTUN.ARJ
/
PIXTUN.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-02-08
|
3KB
|
119 lines
{░▒▓████████████████████████████████████████████████████████████████▓▒░
░▒▓█ █▓▒░
░▒▓█ PIXTUN.PAS - This source was coded by The Jerk of Hoaxers aka █▓▒░
░▒▓█ Stian S¢reng in February 1995. If you have any questions about █▓▒░
░▒▓█ this source, email to: stians@interlink.no, 100% answer. (Bug █▓▒░
░▒▓█ reports are welcome!) Boy, can this source be optimized !!! █▓▒░
░▒▓█ Feel free to use it at any time, as long as you give me the █▓▒░
░▒▓█ credits for it. Tested on 486SX/30: ok, 486DX2/66: fast and █▓▒░
░▒▓█ 386SX/25 slow. Conclusion: Requires mcga and a 486. █▓▒░
░▒▓█ stians █▓▒░
░▒▓████████████████████████████████████████████████████████████████▓▒░}
USES crt;
CONST Amount=30; { number of circles }
VAR circles:array[1..360,1..Amount] of word;
ypts,xpts:array[1..90,1..Amount] of integer;
xsinus,ysinus:array[1..720] of integer;
sinptr,
xx,yy,
x,y,a:integer;
r:real;
PROCEDURE pal(c,r,g,b:byte); { sets palette }
begin
port[$3c8]:=c;
port[$3c9]:=r;
port[$3c9]:=g;
port[$3c9]:=b;
end;
procedure sync;assembler;asm { synchronize routine, wait for vblank }
mov dx,03dah
@frame: in al,dx
test al,8
jz @frame
@besure: in al,dx
test al,8
jnz @besure
end;
{ ************************************************************************* }
BEGIN
{ ** Precalculate circles ** }
Writeln('Calculating, please wait..');
for a:=1 to Amount do
begin
r:=0;
for x:=1 to 360 do
begin
r:=r+(0.0175)*4;
circles[x,a]:=round(sin(r)*(5+(a shl 2)))+(5+(a shl 2));
end;
end;
{ ** Precalc x and y sinuses ** }
r:=0;
for x:=1 to 720 do
begin
r:=r+0.0175;
xsinus[x]:=round(sin(r)*140)+140;
ysinus[x]:=round(cos(r)*90)+90;
end;
{ ** Initialize 320x200x256 chunky mode ** }
asm
mov ax,13h { Using bitplanes, this routine would be MUCH }
int 10h { faster, but a 256 colour pixtunnel is cooler }
end;
{ ** Set grayscale palette ** }
for a:=63 downto 0 do pal(a,a,a,a);
sinptr:=0;
{ ** Main loop ** }
repeat
sync;
if sinptr>358 then sinptr:=0; { loop sinus }
inc(sinptr,2);
{ ** Draw and clear circles ** }
for a:=1 to Amount do
for x:=1 to 90 do
begin
xx:=xpts[x,a]; { store old pts }
yy:=ypts[x,a];
mem[$a000:xx+yy*320]:=0; { clear old }
xx:=(circles[x,a]+xsinus[(a shl 3)+sinptr])-a*4; { new pos }
yy:=(circles[x+23,a]+ysinus[sinptr+90+(a shl 2)])-(a*4);
if ((xx>0) AND (xx<319)) then { check if inside bounds }
if ((yy>0) AND (yy<199)) then
begin
mem[$a000:xx+yy*320]:=a+5; { put pixel }
xpts[x,a]:=xx;
ypts[x,a]:=yy;
end;
end;
until keypressed; { loop }
{ ** Back to text mode ** }
asm
mov ax,3h
int 10h
end;
end.