LIGHTING.PAS 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. {$A-,B-,D+,E+,F+,G+,I-,L-,N+,O-,P-,Q-,R-,S+,T+,V+,X+}
  2. {$M 16384,0,655360}
  3. uses crt;
  4. type rgb = record
  5. r,g,b : byte;
  6. end;
  7. pal = array[byte] of rgb;
  8. arr = array[1..320*200] of byte;
  9. var
  10. vbuff: arr absolute $a000:0000;
  11. procedure setallrgbpalette(p:pal);assembler;
  12. asm
  13. mov ax,1012h
  14. mov bx,0
  15. mov cx,256
  16. les dx,dword ptr p
  17. int 10h
  18. end;
  19. procedure initpalette;
  20. Var i,k:integer;
  21. p:pal;
  22. begin
  23. for i := 0 to 127 do
  24. with p[i] do
  25. begin
  26. r:=i div 2;
  27. g:=0;
  28. b:=0;
  29. end;
  30. for i := 63 to 63+127 do
  31. with p[i] do
  32. begin
  33. g:=(i-63) div 2;
  34. b:=0;
  35. end;
  36. for i := 128 to 255 do
  37. with p[i] do
  38. begin
  39. b:=(i-128) div 2;
  40. r:=63;
  41. end;
  42. for i := 63+128 to 255 do
  43. with p[i] do
  44. g:=63;
  45. for i:=0 to 255 do
  46. with p[i] do
  47. begin
  48. k:=r;
  49. r:=b;
  50. b:=k;
  51. end;
  52. setallrgbpalette(p);
  53. end;
  54. procedure ingr;assembler;
  55. asm
  56. mov al,false
  57. mov directvideo,al;
  58. mov ax,13h
  59. int 10h
  60. end;
  61. const nc=150;
  62. procedure draw;
  63. var i,j:integer;
  64. offs,beg:word;
  65. begin
  66. repeat
  67. beg:=(random(100)+50)*320+random(160)+80;
  68. offs:=beg;
  69. for i:=1 to nc do
  70. begin
  71. offs:=offs+random(3)-1;
  72. vbuff[offs]:=255;
  73. { vbuff[320+200*320-offs]:=255;
  74. } offs:=offs+random(3)-1;
  75. vbuff[offs]:=255;
  76. { vbuff[320+200*320-offs]:=255;
  77. } offs:=offs+random(3)-1;
  78. vbuff[offs]:=255;
  79. { vbuff[320+200*320-offs]:=255;
  80. } offs:=offs+random(2)*320;
  81. end;
  82. asm
  83. mov ax,0a000h
  84. mov es,ax
  85. xor si,si
  86. mov cx,320*200
  87. xor ah,ah
  88. xor dl,dl
  89. @moe: inc si
  90. mov al,es:[si+1]
  91. mov dl,es:[si-1]
  92. add ax,dx
  93. mov dl,es:[si+320]
  94. add ax,dx
  95. mov dl,es:[si-320]
  96. add ax,dx
  97. cmp ax,100
  98. jb @e
  99. sub ax,5
  100. @e: shr ax,2
  101. mov es:[si],al
  102. loop @moe
  103. end;
  104. until keypressed;
  105. end;
  106. BEGIN
  107. ingr;
  108. initpalette;
  109. repeat
  110. draw;
  111. until false;
  112. END.