Virtual Worlds #01
31 декабря 1999

Assembler - Circles on the water: The algorithms simulate the effect of a well-known on other platforms, called "ripples."

<b>Assembler</b> - Circles on the water: The algorithms simulate the effect of a well-known on other platforms, called
            RIPPLES



          (C) Reaper / ZX-MANIACS



  In this article I decided to describe
effect, known in other
platforms, like rain on the water. He
represents a divergent concentric circles
(As a consequence, the water droplets from
rain). This effect is particularly
like water, if a community
have any picture.
However, this modification
effect on the Spectrum do
nice quite difficult (although
For example, in the demo this Emergency
the effect is and he looks very
not bad). Be that as it may, I will describe the usual effect, 
no background image. In the end, I think I'll say a couple of

words about the algorithm works with a background image, but 
the example will not lead. 


  Bitmapovsky effect, so
make it possible to attribute or
a chunk.


  So, to create the effect you
need two buffers are equal
the size of the screen. For example, the example uses chunks. 
They are displayed on the 2 / 3 screen so that the size of both 
buffers should be 64 * 32. But there is a

one subtlety. It is advisable to leave untouched (permanently 
equal to zero) strip thickness of 1 chunk along the perimeter 
of the buffer. Therefore, in my example uses a buffer size of 
66 * 34, but displayed only the inner portion of 64 * 32.

You can leave the buffer size
64 * 32, but then the process
should only be the internal area of ​​62 * 30 (this, 
incidentally, gives increase in the rate of the decrease in 
cultivated area and because of the simplicity of conversion in

Format 2 chunk in bytes (or acceleration of output chunks, if 
you use the procedure output

chunks in the format of a chunk in
B)).


  One of the buffers is current (ie, it is constructed
image), and the second - the previous one (that was on the 
screen after the previous pass effect). The main effect of 
meaning lies in the following sequence of actions:




  1) Put up signs in
upper-left cell of the current and
previous buffers (preferably in
cell at 1 bar below and at 1
column to the right of the top-left, etc.
since this will enable not affect the extreme row and column);


  2) Take the values ​​of the four cells around the current in 
the 'previous' buffer and add them;



  3) The resulting number is divided by 2
and subtracted from the value of the current cell in the 
'current' buffer; 


  4) If the resulting value
less than zero, equating it to
zero. Chop him also to
maximum (in my example, the maximum value that
perceive chunks - 31, so
the resulting number dub
simply AND 31);


  5) So now what we got, we put into the current cell in
'Current' buffer;


  6) Physically move pointers
these cells in both buffers
and completes the cycle (first by
columns, and then by rows);


  7) Swap the current and
the previous buffer. More precisely, we simply swap the 
pointers, and now the current buffer will be the previous and 
vice versa. 


  That is, in general, and the entire inner loop effect it. Now 
you can get stuck on step 1. If the

'Previous' buffer supply
point, then it gets going in circles.


  For clarity, we present an algorithm in a sort of pseudocode
basically looks like a Spekovsky BASIC.


  Assume that we have
two buffers: COLD (M, N) and
NEW (M, N). So it will look like
procedure 'run circles' in them
(To simplify the verification is omitted
values ​​at the output of range).

DO
X = INT (RND * (N - 1)) + 1
Y = INT (RND * (M - 1)) + 1
OLD (Y, X) = 15
FOR I = 2 TO M - 1
FOR J = 2 TO N - 1
A = OLD (I-1, J) + OLD (I +1, J) +
+ OLD (I, J-1) + OLD (I, J +1)
A = A / 2 - NEW (I, J)
NEW (I, J) = A
NEXT J, I
NEW (M, N) -> SCREEN
SWAP OLD (M, N), NEW (M, N)
LOOP WHILE NOT KEYPRESSED


Here NEW (M, N) -> SCREEN - conclusion
on the screen (in this case refers to chunks, taking
values ​​from 0 to 15. It
so the 'previous' buffer
as a 'source' circles put the point with a value of 15). In
this example, a new source community put into the buffer before 
each inner loops. This gives a very large number of laps

on the screen and turns melteshenie ... but it's still pretty
entertaining.


  You might ask,
why source code works with cell values ​​equal to 0 .. 31,
if chunks only accept
the values ​​0 .. 15 and have further to convert. All
The fact that the size of the circles
depends on the chislaistochnika. If you put the source number 
15, then circles are obtained small and ugly. Shown to be 63

(Because, IMHO, made a demo
BlAME), but most of all I
like the version with source
equal to 31.


  That's, like, that's all. Finally,
as promised, will discuss how to start up community over the 
picture. For this, you naturally need to buffer the picture. 
For simplicity, we assume that it equals the size of 'current' 
and 'Previous' buffer (to

well, that's usually the case).

The algorithm is as follows:


  1) doing all the usual
steps to create a community, but
do not output 'current' buffer on
screen;


  2) Now we are considered 'current' buffer and buffer image.
For each element, the following buferakartinki
steps:


  3) Take the value from the corresponding cell of 'current'
buffer and subtracted from it the value of the cell to the 
right of this (Still in the 'current'

buffer). Obtained by the displacement of
X;


  4) now takes the value
corresponding point of the 'current' buffer, and subtracted a 
point on the line below. Obtained by the displacement of Y; 


  5) Both the bias can be divided into any number. On the PC in 
256tsvetnom effect is best to divide by 8. At Speke in chunks 
probably fit the division into 4 though it is selected an 
experienced infections;



  6) Take a point in buferekartinke, located on the current
distance calculated displacements, and put the current position.


  7) And so the cycle at all points.

  It bears mention that in
calculating the position of the new point, which should be put 
in place the current, you should check coordinates on moving 
beyond buffer.



  And now the algorithm in pseudocode. In this algorithm, for
simplification, not above
checking out the coordinates for
outside the buffer. So, NEW (M, N) -
'Current' buffer, SCR (M, N) - buffer-image, OUT (M, N) - buffer
which will be displayed on the screen.

FOR I = 2 TO M - 1
FOR J = 2 TO N - 1
XS = NEW (I, J) - NEW (I, J + 1)
YS = NEW (I, J) - NEW (I + 1, J)
XS = XS / 4
YS = YS / 4
X = J + XS
Y = I + YS
OUT (I, J) = SCR (Y, X)
NEXT J, I
OUT (M, N) -> SCREEN


  It is not hard to see the calculation
displacements are very smacks of calculation of the 
pseudo-normal at bumpmapping'e. So, here

we are in a sense, doing
bampopodobnoe light pictures.


  Algorithm for the full effect circles
over the picture in general terms
looks like this:


  1) puts an end to 'previous' buffer;

  2) On the basis of 'previous' and
'Current' image buffers is calculated in the 'current' buffer;

  3) On the basis of 'current' buffer
and buffer-image is calculated
image in the output buffer;

  4) The output buffer is displayed on the
screen;

  5) And again at point 1 (or claim 2,
if you do not need to put a new source community).


  Now it all. I hope you
anything learned from my
paranoid delusions. In the Appendix you can find the source
this effect on ACME. It
You can control the cursor
6/7/8/9 keys and let community 0 key. In the source file is
explanations so that you do
have a chance to sort out in practice, if you're still not all
understood.


PS: The above source is very slow. How to make
faster, and it can be done
you have to think for yourself!







Other articles:

From the Editor - the story of creating a magazine.

Guide - the detailed contents of rooms.

Description shells - a description of the shell and methods for its proper operation.

Authors - the authors.

Assembler - Z80 Flags: undocumented command processor Z80.

Assembler - Overlays for JC: Description of methods for creating utilities running Jemmini_Commander 4.0T.

Assembler - Secrets of the TR-DOS: the methods of distribution presence drives.

Assembler - Circles on the water: The algorithms simulate the effect of a well-known on other platforms, called "ripples."

Assembler - search path. Solution to the problem of "static" find the shortest route between two points.

Spending - The mechanical effect. This story is about what happens using condoms dubious origin.

Iron - Bugs keyboard: why in the game for two players, when playing together, the computer does not listen to your management, and information on how to avoid it.

Iron - Interrupts: Something strange about the interruptions of the second kind.

Technical assistance - the thought aloud. It is interesting letter from fido7.zx.spectrum conference on the theme "On the question of standardization."

Technical assistance - File FAQ. A complete analysis of file formats, most often vstechayuschihsya the Internet, and not only, as well as methods for their conversion into a "normal" form.

Technical assistance - Dos Review: material on the format of the disk operating system IS-DOS.

Technical assistance - Dos Review 2: The material on the format of disk operating systems, PC "Agat", Radio-86RK, SP-DOS, BK-0011M.

Technical assistance - Dos Review 3: The material on the format of the disk operating system CP / M, ASC SOUND MASTER, RT11, SM computers RAFOS.

Technical assistance - Dos Review 4: The material on the format of the disk operating system from an unknown author.

DI: HALT: 99 - An analysis of DH: 99. Finally, the whole truth about the past summer, in Dzerzhinsk party, from the organizers themselves.

DI: HALT: 99 - Hidden Parts. Dzerzhinsky life (not only) in the period spektrumistov of DI: HALT: 99.

DI: HALT: 99 - The results. Having walked DH: 99, almost every other newspaper, considered it their duty to come up with a new version of the results. This article is the direction on the fact that finally put the record straight "I".

Programs - Alien: description and walkthrough of the film "Alien."

Programs - description of the Universal AntiProtector 0.01 (a program for automatically splitting a number of popular defense systems).

Programs - Editor-game screens, "White Spot".

Programs - Exhumator: a program to "drive the exhumation."

Programs - chankovy graphics editor: Hard Core ver 3.01

Programs - Eye of crying: the files of allowing to watch pictures, sprites, while listening to etommuzyku.

Spending - Verse of Sysop'e. Poetry, but ...

Spending - Sex and Fido. Humorous raskaz about What about actually making love inveterate fidoshniki.

Spending - Anecdotes. A selection of jokes with a computer theme.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Letters - a letter of Azerbaijan National Fund for the Spectrum.
Beatles - Today we stapaya but very kho.posho song SOH-TPAVA.

В этот день...   1 May