Demo or Die #02
31 июля 1999 |
|
Demo-Building - The implementation of plasma sizes of 2x2.
__________________________________________ Wolf of eTc / Scene Implementation of the plasma size 2x2 (As in BooM trackmo) Write this article, I made interest of some people to the plasma size 2x2, in our FunTop'ovskoy demo - BooM trackmo. I hasten to add that this effect very easy to implement. Its size is about 150 bytes (excluding tables and data). In the demo itself, the data for implementation of the 2x2 plasma were established in advance and take in the form of neupakovanom about 26kb (!). In my opinion a lot, but I do not meant to make fans demomeykerstva long wait. So how does this all done? First we need to create normal plasma size 128x96 (256/2x192/2) - this is due to the fact that point we will have the size 2x2. At what plasma must be constructed in 256 color (ie bytes per point). For those who do not know how one normal plasma, read the rest can skip the next paragraph. The algorithm is very simple. First, create a grid of points in the buffer with some tasks step, where the color of a point will be random variable (0 to maximum color values, such as "chunks" - 16). Then in the middle of each square write the arithmetic mean one of the two numbers (color values) which are recorded at the vertices of square. In the center of the square write arithmetic mean of the four flowers in the four vertices of a square. And so continue recursively, until no fill the entire buffer, ie until reduced to the minimum squares size. As a result, we have plasma. There is another way to build a plasma but this plasma I call - a sine wave. In my opinion, this is a plazmochka BestView (by Ivan Roshchin) in screensaver'e (As custodian of the screen). I'm doing it this way: round (n) - rounded to the nearest whole number values. z1: = 0.25; z2: = 0.125; {all sorts of factors} for y: = 0 to 95 do {} elevation of plasma for x: = 0 to 127 do {width} of the plasma c: = round (32 * sin (x * z1/pi) * sin ((x) * z2/pi) +32 * cos (y * z1/pi)); {proper formula for the plasma} As you can see here, depending on the coordinates X and Y, the function will have a result that matches the color point with the same coordinates. Having such a plasma size 128x96 (Total length 12,288), create a data Our unpretentious effect. For clarity, we will do this by Pascal, but who knows, I think after such source quickly to it get used to it, especially with my comments. plasma [1 .. 128.1 .. 96] - an array of 128x96, which houses our plasma; data [1 .. 12 288 * 2] - an array which will stored the coordinates of the plasma; data_len [1 .. 256] - an array, where it will contains information about the number of dorisovuyuschihsya points per frame. A little bit about the syntax of Pascal: inc (n) - to increase the variable n to 1; dec (n) - to reduce the variable n to 1; plasma [x, y]: = C - Record the variable C, in a cell array with coordinates x, y; i: = 1; j: = 1; for phase: = 1 to 256 do begin len: = 0; for y: = 1 to 96 do for x: = 1 to 128 do begin if plasma [x, y] = 0 then begin data [i]: = x; inc (i); data [i]: = y; inc (i); inc (len); end; inc (plasma [x, y]); end; data_len [j]: = len; inc (j); end; This procedure examines each pixel plasma to zero color. Namely, writes the buffer coordinates (X and Y) each of the zero point and the second buffer number of points found in one passage. So do 256 times. This is due to the fact that the plasma is used for byte pixel. ; (C) CopyRight by Wolf / eTc / Scene 1998 ; From BooM trackmo ORG 25000 ; Throw the picture (black) LD HL, SCR LD DE, # 4000 LD BC, 6144 LDIR , Paint it some color LD HL, # 5800 INC DE LD BC, 767 LD (HL), 28 LDIR ; Create a table of addresses screen LD HL, TAB LD DE, # 4000 LD B, 96; (192 / 2) as 2x2 points CRUNCH1 LD (HL), E INC HL LD (HL), D INC HL ; Procedure for calculating the addresses of the screen through ; Two lines INC D INC D LD A, D AND 7 JR NZ, DONE LD A, E ADD A, 32 LD E, A JR C, DONE LD A, D SUB 8 LD D, A DONE DJNZ CRUNCH1 ; Actually very beginning EI START LD A, 4; show all OUT (# FE), A; how much it HALT; "eating" time XOR A OUT (# FE), A TIME LD A, 0; loop counter DEC A; initialization JR NZ, COOL LD HL, TABLEN; set options LD (F1 +1), HL; if the counter has gone LD HL, DATA; on the second circle LD (F2 +1), HL XOR A COOL LD (TIME +1), A F1 LD DE, TABLEN F2 LD HL, DATA LD A, (DE); how many points to draw LD B, A INC DE LD (F1 +1), DE OR A JR Z, NO_P PRN PUSH BC LD A, (HL); \ = x INC HL; |-coordinates LD E, (HL); / = y INC HL PUSH HL LD L, E CALL PLOT; Draw point POP HL POP BC DJNZ PRN; draw on NO_P LD (F2 +1), HL LD A, # 7F; poll gap IN A, (# FE) RRA JP C, START RET; Output:) ; Procedure for drawing points, size 2x2 ; When drawing, the point xor'itsya. ; A = x, L = y ; (C) By Wolf / eTc / Scene 1998 PLOT LD H, TAB [ PUSH AF LD A, L ADD A, A LD L, A POP AF LD E, (HL) INC HL LD D, (HL) LD L, A RRCA RRCA AND # 3F ADD A, E LD E, A LD H, D LD A, L LD L, E AND 3 LD D, (TAB +256) [ LD E, A LD A, (DE) LD E, A XOR (HL) LD (HL), A INC H LD A, E XOR (HL) LD (HL), A RET ; Table lengths TABLEN INCB "tablen" ; Address table screen ORG ($ -1) / 256 * 256 +256 TAB 4-points and options ORG TAB +256 DB 128 +64.32 +16.8 +4.1 +2 , "Slonyachie" data DATA INCB "data" ; Layback etc group SCR INCB "etcgroup" Alexandr Kulik (Wolf) 2:4635 / 8.18 @ FidoNet __________________________________________
Other articles:
Similar articles:
В этот день... 21 November