[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{ [ Simple lightning effect ]
By Nelson Chu, 1994
This is the lightning effect used in my action puzzle game Mixed World.
Feel free to change this program. If you have any improvement, please
send me a copy too. Internet e-mail: eg_cshaa@stu.ust.hk
Sorry that I just encode the .PAL file to be included here. I was too
lazy to write a set-pal routine to set it on the fly.}
{$A+,R-,S-,N-,L-,O-,D-,X+,G+}
uses graphic, crt;
{Unit GRAPHIC to be found in GRAPHICS.SWG }
var pal : paltype;
procedure Lightning; { a fractal effect }
var aa : integer;
a,x,y : byte;
procedure process( x, y, intensity, dx :integer);
var part_int, d : byte;
procedure add(x:word; y, int:byte);
begin if screen^[y,x]<int then screen^[y,x]:=int; end;
begin
while (intensity>0) and (y<200) and (x>1) and (x<319) do
begin
add( x+1, y, (intensity-3)*20+50);
add( x, y, (intensity)*20+50);
add( x-1, y, (intensity-2)*20+50);
if ((random(4)=0)and(y>170)) or
((random(4)=0)and(abs(dx)>5))or
(random(20)=0) then dec(intensity);
inc(y,1); {go next row every time}
if dx>0 then dec(x,random(dx)) else inc(x,random(-dx));
if (abs(dx)<2) then begin dec(x,random(5)+1); dx:=-2; end;
if (abs(dx)>5) then begin inc(x,random(5)+1); dx:=+2; end;
if ((y>33)and(random(3)=0)) or (intensity<4) then {split}
begin
part_int:=random(10);
repeat d:=random(10); until d<>0;
process( x, y, (intensity*part_int) div 10 - y div 20, -random(d));
process( x, y, (intensity*(10-part_int)) div 10 - y div 20, random(d));
end;
end;
end;
begin
blacken(0,255);
aa:=random(20);{this is for delay}
repeat
repeat delay(120); dec(aa); until (aa<=0); {do a variable delay}
repeat aa:=random(6)-3; until abs(aa)>1; {get a good starting direction}
process( random(100)+110, 0, 10, aa ); {get our discharge ready}
vsync; Setpal(pal,0,255);
vsync; setcolor(0,20,20,20); {sky suddenly brighten...}
vsync; setcolor(0,0,0,0);
{ repeat until keypressed;}
vsync; fadeout(pal,0,255,0);
clearscreen(screen);
until keypressed;
end;
procedure message;
begin
write(
'This is what you should do in order to enjoy this LIGHTNING demo :)'#13#13#10+
' 1. If it''s now daytime or somebody is with you, wait until it is not.'#13#10+
' Press Ctrl-C to quit.'#13#10);
write(
' 2. Close all curtains/doors so that no light can enter your room.'#13#10+
' 3. Sit back and press ENTER...');
readln;
end;
procedure message2;
begin
write('It should be with sounds too. But this is for SWAG... :P');
end;
begin
randomize;
message;
setcrtmode($13);
loadpal('light1.pal', pal, true);
lightning;
setcrtmode($3);
message2;
end.
{ Cut the following out and decode it with XX34. }
*XX3402-000768-220596--72--85-42191------LIGHT1.PAL--1-OF--1
+++++++++++++++++++++++-+++-+++-++2-++2-++20++20++20++20++21++21++21+E21
+E62+E62+E62+E62+E63+EA3+EA3+EA4+EA4+EA4+EA4+EA5+EE5+EE5+EE5+EE6+EE6+EE6
+UE6+UI7+UI7+UI7+UI8+UI8+UM8+UM8+UM9+UM9+UM9+UM9+kMA+kQA+kQA+kQA+kQB+kQB
+kQB+kUC+kUC+kUC+kUC+kUD-+UD-+YD-+YD-+YE-+YE-+YE-+YF-+cF-+cF-+cF-+cG-+cG
-+cG-EcG-EgH-EgH-EgH-EgH-EgI-EgI-EgI-EkJ-EkJ-EkJ-EkJ-UkK-UoK-UoK-UoK-UoL
-UoL-UoL-UoL-UsM-UsM-UsM-UsN-ksN-ksN-kwN-kwO-kwO-kwO-kwO-kwP-l+P-l+P-l+P
-l+Q-l+Q0-+Q0-2R0-2R0-2R0-2R0-2S0-2S0-2S0-6S0-6T0-6T0-6T0-6T0F6U0FAU0FAU
0FAV0FAV0FAV0FAV0FEW0FEW0FEW0FEW0FEX0VEX0VEX0VIX0VIY0VIY0VIY0VIZ0VMZ0VMZ
0VMZ0VMa0VMa0lMa0lMa0lQb0lQb0lQb0lQb0lQc0lQc0lUc0lUd0lUd0lUd0lUd1-Ue1-Ye
1-Ye1-Ye1-Yf1-Yf1-Yf1-Yf1-cg1-cg1-cg1-ch1Fch1Fch1Fgh1Fgi1Fgj1Fkj1Fkj1Foj
1Foj1Fsk1Fsk1Fsk1Vwk1Vwk1W+l1W+l1W+l1W2l1W2l1W6m1W6m1WAm1mAm1mAm1mEn1mEn
1mIn1mIn1mMn1mMn1mMo1mQo20Qo20Uo20Uo20Yp20Yp20Yp20Yp20cq20cq20cq20cq20cr
20gr20gr20gr20gs2Ggs2Gks2Gks2Gkt2Gkt2Gkt2Got2Gou2Gou2Gou2Gou2Gsv2Gsv2Wsv
2Wsw2Www2Www2Www2Wwx2Wwx2X+x2X+x2X+y2X+y2X+y2n2y2n2z3n6z51Ez6HIz7XQz8nUz
A1czBHgzCXozDnwz
***** END OF BLOCK 1 *****
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]