ZX Forum #04
19 ноября 1997

Экранные эффекты - сложный многоступенчатый эффект из игры Bubbler.

<b>Экранные эффекты</b> - сложный  многоступенчатый эффект из игры Bubbler.

            BUBBLER

   В этой программе  табличка  с
фирменным названием игры и атри-
бутами фирмы-изготовителя внача-
ле  плавно  опускается   сверху,
прорисовываясь  на  черном  фоне
экрана.  Затем   эта   табличка-
спрайт начинает "вращаться"  во-
круг  горизонтальной   оси,  при
этом цвет его меняется с  белого
на желтый (при  повороте  обрат-
ной стороной). Вращение происхо-
дит до нажатия на любую клавишу,
после чего  табличка-спрайт "за-
мирает" в том состоянии, в каком
его застало нажатие на  клавишу,
перестав  вращаться,  и   плавно
"улетает" вверх, исчезая с экра-
на.
   Предлагаемая  процедура  вос-
производит сложный  многоступен-
чатый эффект, поэтому она доста-
точно объемна. Вот ее листинг:
1420.
E283  F5       PUSH AF
E284  FDE5     PUSH IY
E286  DDE5     PUSH IX
E288  D9       EXX
E289  E5       PUSH HL
E28A  D5       PUSH DE
E28B  C5       PUSH BC
E28C  D9       EXX
E28D  E5       PUSH HL
E28E  D5       PUSH DE
E28F  C5       PUSH BC
E290  ED73A9E2 LD   (#E2A9),SP
E294  CD66E3   CALL #E366
E297  ED7BA9E2 LD   SP,(#E2A9)
E29B  C1       POP  BC
E29C  D1       POP  DE
E29D  E1       POP  HL
E29E  D9       EXX
E29F  C1       POP  BC
E2A0  D1       POP  DE
E2A1  E1       POP  HL
E2A2  D9       EXX
E2A3  DDE1     POP  IX
E2A5  FDE1     POP  IY
E2A7  F1       POP  AF
E2A8  C9       RET
------------------------------
E2A9  00 00
E2AB  17 8E 00 80
------------------------------
E2AF  ED5BABE2 LD   DE,(#E2AB)
E2B3  2AADE2   LD   HL,(#E2AD)
E2B6  7E       LD   A,(HL)
E2B7  C605     ADD  A,#05
E2B9  47       LD   B,A
E2BA  3ADE5C   LD   A,(#5CDE)
E2BD  80       ADD  A,B
E2BE  83       ADD  A,E
E2BF  5F       LD   E,A
E2C0  7E       LD   A,(HL)
E2C1  2F       CPL
E2C2  C616     ADD  A,#16
E2C4  82       ADD  A,D
E2C5  85       ADD  A,L
E2C6  57       LD   D,A
E2C7  ED53ABE2 LD   (#E2AB),DE
E2CB  23       INC  HL
E2CC  7C       LD   A,H
E2CD  E69F     AND  #9F
E2CF  67       LD   H,A
E2D0  22ADE2   LD   (#E2AD),HL
E2D3  C9       RET
------------------------------
E2D4  00 00 00
------------------------------
E2D7  3600     LD   (HL),#00
E2D9  23       INC  HL
E2DA  10FB     DJNZ #E2D7
E2DC  C9       RET
------------------------------
E2DD  DBFE     IN   A,(#FE)
E2DF  2F       CPL
E2E0  E61F     AND  #1F
E2E2  C9       RET
------------------------------
E2E3  ED73D85C LD   (#5CD8),SP
E2E7  31005B   LD   SP,#5B00
E2EA  010280   LD   BC,#8002
E2ED  114747   LD   DE,#4747
E2F0  C300E3   JP   #E300
------------------------------
E2F3  ED73D85C LD   (#5CD8),SP
E2F7  310058   LD   SP,#5800
E2FA  010C00   LD   BC,#000C
E2FD  110000   LD   DE,#0000
E300  D5       PUSH DE
E301  10FD     DJNZ #E300
E303  0D       DEC  C
E304  20FA     JR   NZ,#E300
E306  ED7BD85C LD   SP,(#5CD8)
E30A  C9       RET
------------------------------
E30B  CB3C     SRL  H
E30D  CB3C     SRL  H
E30F  CB3C     SRL  H
E311  CB3C     SRL  H
E313  CB1D     RR   L
E315  CB3C     SRL  H
E317  CB1D     RR   L
E319  CB3C     SRL  H
E31B  CB1D     RR   L
E31D  7C       LD   A,H
E31E  C658     ADD  A,#58
E320  67       LD   H,A
E321  C9       RET
------------------------------
E322  85       ADD  A,L
E323  6F       LD   L,A
E324  D0       RET  NC
E325  24       INC  H
E326  C9       RET
------------------------------
E327  00 00 00
------------------------------
E32A  1127E3   LD   DE,#E327
E32D  E5       PUSH HL
E32E  CD0BE3   CALL #E30B
E331  1A       LD   A,(DE)
E332  3244E3   LD   (#E344),A
E335  C61E     ADD  A,#1E
E337  2F       CPL
E338  324CE3   LD   (#E34C),A
E33B  13       INC  DE
1420.E33C  1A       LD   A,(DE)
E33D  4F       LD   C,A
E33E  13       INC  DE
E33F  1A       LD   A,(DE)
E340  3246E3   LD   (#E346),A
E343  0600     LD   B,#00
E345  3600     LD   (HL),#00
E347  2C       INC  L
E348  10FB     DJNZ #E345
E34A  2D       DEC  L
E34B  1100FF   LD   DE,#FF00
E34E  19       ADD  HL,DE
E34F  0D       DEC  C
E350  20F1     JR   NZ,#E343
E352  E1       POP  HL
E353  C9       RET
------------------------------
E354   30 FF 2F F7
E358   2D ED 28 D3
E35C   22 B2 1B 8E
E360   13 63 0A 33
E364   00 00
------------------------------
E366  21140E   LD   HL,#0E14
E369  2227E3   LD   (#E327),HL
E36C  CDF3E2   CALL #E2F3
E36F  CDE3E2   CALL #E2E3
E372  AF       XOR  A
E373  32DC5C   LD   (#5CDC),A
E376  32DD5C   LD   (#5CDD),A
E379  3C       INC  A
E37A  32FEFF   LD   (#FFFE),A
E37D  CD7FE5   CALL #E57F
E380  3ADC5C   LD   A,(#5CDC)
E383  47       LD   B,A
E384  FE09     CP   #09
E386  380A     JR   C,#E392
E388  FE11     CP   #11
E38A  3804     JR   C,#E390
E38C  FE18     CP   #18
E38E  3802     JR   C,#E392
E390  ED44     NEG
E392  E60F     AND  #0F
E394  87       ADD  A,A
E395  2154E3   LD   HL,#E354
E398  CD22E3   CALL #E322
E39B  4E       LD   C,(HL)
E39C  23       INC  HL
E39D  5E       LD   E,(HL)
E39E  79       LD   A,C
E39F  B3       OR   E
E3A0  201A     JR   NZ,#E3BC
E3A2  D9       EXX
E3A3  3AFEFF   LD   A,(#FFFE)
E3A6  3C       INC  A
E3A7  E601     AND  #01
E3A9  32FEFF   LD   (#FFFE),A
E3AC  C646     ADD  A,#46
E3AE  3229E3   LD   (#E329),A
E3B1  213077   LD   HL,#7730
E3B4  CD2AE3   CALL #E32A
E3B7  D9       EXX
E3B8  1802     JR   #E3BC
------------------------------
E3BA  18C1     JR   #E37D
------------------------------
E3BC  21E8FF   LD   HL,#FFE8
E3BF  22FCFF   LD   (#FFFC),HL
E3C2  78       LD   A,B
E3C3  FE09     CP   #09
E3C5  380E     JR   C,#E3D5
E3C7  FE19     CP   #19
E3C9  300A     JR   NC,#E3D5
E3CB  211800   LD   HL,#0018
E3CE  22FCFF   LD   (#FFFC),HL
E3D1  79       LD   A,C
E3D2  ED44     NEG
E3D4  4F       LD   C,A
E3D5  3E47     LD   A,#47
E3D7  81       ADD  A,C
E3D8  67       LD   H,A
E3D9  2E10     LD   L,#10
E3DB  7B       LD   A,E
E3DC  D9       EXX
E3DD  5F       LD   E,A
E3DE  1600     LD   D,#00
E3E0  6A       LD   L,D
E3E1  62       LD   H,D
E3E2  D9       EXX
E3E3  CD9EE5   CALL #E59E
E3E6  1100F7   LD   DE,#F700
E3E9  1824     JR   #E40F
------------------------------
E3EB  3ADD5C   LD   A,(#5CDD)
E3EE  A7       AND  A
E3EF  2007     JR   NZ,#E3F8
E3F1  3D       DEC  A
E3F2  32DD5C   LD   (#5CDD),A
E3F5  CD61E4   CALL #E461
E3F8  CDCCE4   CALL #E4CC
E3FB  AF       XOR  A
E3FC  CDDDE2   CALL #E2DD
E3FF  C22FE4   JP   NZ,#E42F
E402  18B6     JR   #E3BA
------------------------------
E404  3ADC5C   LD   A,(#5CDC)
E407  3C       INC  A
E408  E61F     AND  #1F
E40A  32DC5C   LD   (#5CDC),A
E40D  18DC     JR   #E3EB
------------------------------
E40F  0E60     LD   C,#60
E411  0614     LD   B,#14
E413  E5       PUSH HL
E414  1A       LD   A,(DE)
E415  B6       OR   (HL)
E416  77       LD   (HL),A
E417  13       INC  DE
E418  23       INC  HL
E419  10F9     DJNZ #E414
E41B  E1       POP  HL
E41C  0D       DEC  C
E41D  28E5     JR   Z,#E404
E41F  D9       EXX
E420  7C       LD   A,H
E421  19       ADD  HL,DE
E422  BC       CP   H
E423  D9       EXX
E424  28EB     JR   Z,#E411
E426  79       LD   A,C
E427  ED4BFCFF LD   BC,(#FFFC)
E42B  09       ADD  HL,BC
E42C  4F       LD   C,A
E42D  18E2     JR   #E411
------------------------------
E42F  21C64F   LD   HL,#4FC6
E432  0614     LD   B,#14
E434  CDD7E2   CALL #E2D7
E437  21CDF0   LD   HL,#F0CD
E43A  062C     LD   B,#2C
E43C  CDD7E2   CALL #E2D7
E43F  3E07     LD   A,#07
E441  32D85C   LD   (#5CD8),A
E444  FD2AF15C LD   IY,(#5CF1)
E448  FB       EI
E449  76       HALT
E44A  3AD85C   LD   A,(#5CD8)
E44D  FE77     CP   #77
E44F  F3       DI
E450  C8       RET  Z
E451  FD2AF15C LD   IY,(#5CF1)
E455  FB       EI
E456  3C       INC  A
E457  3C       INC  A
E458  32D85C   LD   (#5CD8),A
E45B  CD87E4   CALL #E487
E45E  C34AE4   JP   #E44A
------------------------------
E461  3E10     LD   A,#10
E463  32E95C   LD   (#5CE9),A
E466  3E78     LD   A,#78
E468  32D85C   LD   (#5CD8),A
E46B  FD2AF15C LD   IY,(#5CF1)
E46F  FB       EI
E470  3AD85C   LD   A,(#5CD8)
E473  F3       DI
E474  FE08     CP   #08
E476  C8       RET  Z
E477  FD2AF15C LD   IY,(#5CF1)
E47B  FB       EI
E47C  3D       DEC  A
E47D  3D       DEC  A
E47E  32D85C   LD   (#5CD8),A
E481  CD87E4   CALL #E487
E484  C370E4   JP   #E470
------------------------------
E487  67       LD   H,A
E488  2E10     LD   L,#10
E48A  ED73DA5C LD   (#5CDA),SP
E48E  CD9EE5   CALL #E59E
E491  76       HALT
E492  F3       DI
E493  F9       LD   SP,HL
E494  114802   LD   DE,#0248
E497  1B       DEC  DE
E498  7A       LD   A,D
E499  B3       OR   E
E49A  20FB     JR   NZ,#E497
E49C  3AD85C   LD   A,(#5CD8)
E49F  C687     ADD  A,#87
E4A1  2F       CPL
E4A2  47       LD   B,A
E4A3  C32BE5   JP   #E52B
------------------------------
E4A6   BD E5 D5 E5
E4AA   ED E5 05 E6
E4AE   1D E6 35 E6
E4B2   4D E6 65 E6
E4B6   7D E6 95 E6
E4BA   AD E6 C5 E6
E4BE   DD E6 F5 E6
E4C2   0D E7 25 E7
E4C6   00 00 00 00
E4CA   00 00
------------------------------
E4CC  3AD4E2   LD   A,(#E2D4)
E4CF  E607     AND  #07
E4D1  203A     JR   NZ,#E50D
E4D3  3A01FF   LD   A,(#FF01)
E4D6  E680     AND  #80
E4D8  2830     JR   Z,#E50A
E4DA  3AC7E4   LD   A,(#E4C7)
E4DD  A7       AND  A
E4DE  282D     JR   Z,#E50D
E4E0  3A00FF   LD   A,(#FF00)
E4E3  3D       DEC  A
E4E4  3E00     LD   A,#00
E4E6  2022     JR   NZ,#E50A
E4E8  3AC6E4   LD   A,(#E4C6)
E4EB  3203FF   LD   (#FF03),A
E4EE  3AC7E4   LD   A,(#E4C7)
E4F1  D620     SUB  #20
E4F3  47       LD   B,A
E4F4  3ACBE4   LD   A,(#E4CB)
E4F7  E6F0     AND  #F0
E4F9  B0       OR   B
E4FA  3202FF   LD   (#FF02),A
E4FD  3AC9E4   LD   A,(#E4C9)
E500  3204FF   LD   (#FF04),A
E503  3AC8E4   LD   A,(#E4C8)
E506  3205FF   LD   (#FF05),A
E509  AF       XOR  A
E50A  32C7E4   LD   (#E4C7),A
E50D  2AD4E2   LD   HL,(#E2D4)
E510  23       INC  HL
E511  22D4E2   LD   (#E2D4),HL
E514  CDAFE2   CALL #E2AF
E517  ED73DA5C LD   (#5CDA),SP
E51B  3AE95C   LD   A,(#5CE9)
E51E  21A6E4   LD   HL,#E4A6
E521  CD22E3   CALL #E322
E524  5E       LD   E,(HL)
E525  23       INC  HL
E526  56       LD   D,(HL)
E527  0670     LD   B,#70
E529  EB       EX   DE,HL
E52A  F9       LD   SP,HL
E52B  212640   LD   HL,#4026
E52E  C344E5   JP   #E544
------------------------------
E531  69       LD   L,C
E532  24       INC  H
E533  7C       LD   A,H
E534  E607     AND  #07
E536  C244E5   JP   NZ,#E544
E539  7D       LD   A,L
E53A  C620     ADD  A,#20
E53C  6F       LD   L,A
E53D  DA44E5   JP   C,#E544
E540  7C       LD   A,H
E541  D608     SUB  #08
E543  67       LD   H,A
E544  4D       LD   C,L
E545  D1       POP  DE
E546  73       LD   (HL),E
E547  2C       INC  L
E548  72       LD   (HL),D
E549  2C       INC  L
E54A  D1       POP  DE
E54B  73       LD   (HL),E
E54C  2C       INC  L
E54D  72       LD   (HL),D
E54E  2C       INC  L
E54F  D1       POP  DE
E550  73       LD   (HL),E
E551  2C       INC  L
E552  72       LD   (HL),D
E553  2C       INC  L
E554  D1       POP  DE
E555  73       LD   (HL),E
E556  2C       INC  L
E557  72       LD   (HL),D
E558  2C       INC  L
E559  D1       POP  DE
E55A  73       LD   (HL),E
E55B  2C       INC  L
E55C  72       LD   (HL),D
E55D  2C       INC  L
E55E  D1       POP  DE
E55F  73       LD   (HL),E
E560  2C       INC  L
E561  72       LD   (HL),D
E562  2C       INC  L
E563  D1       POP  DE
E564  73       LD   (HL),E
E565  2C       INC  L
E566  72       LD   (HL),D
E567  2C       INC  L
E568  D1       POP  DE
E569  73       LD   (HL),E
E56A  2C       INC  L
E56B  72       LD   (HL),D
E56C  2C       INC  L
E56D  D1       POP  DE
E56E  73       LD   (HL),E
E56F  2C       INC  L
E570  72       LD   (HL),D
E571  2C       INC  L
E572  D1       POP  DE
E573  73       LD   (HL),E
E574  2C       INC  L
E575  72       LD   (HL),D
E576  D1       POP  DE
E577  D1       POP  DE
E578  10B7     DJNZ #E531
E57A  ED7BDA5C LD   SP,(#5CDA)
E57E  C9       RET
------------------------------
E57F  ED73DA5C LD   (#5CDA),SP
E583  31BBF1   LD   SP,#F1BB
E586  0680     LD   B,#80
E588  110000   LD   DE,#0000
E58B  D5       PUSH DE
E58C  D5       PUSH DE
E58D  D5       PUSH DE
E58E  D5       PUSH DE
E58F  D5       PUSH DE
E590  D5       PUSH DE
E591  D5       PUSH DE
E592  D5       PUSH DE
E593  D5       PUSH DE
E594  D5       PUSH DE
E595  D5       PUSH DE
E596  D5       PUSH DE
E597  10F2     DJNZ #E58B
E599  ED7BDA5C LD   SP,(#5CDA)
E59D  C9       RET
------------------------------
E59E  D5       PUSH DE
E59F  7D       LD   A,L
E5A0  1F       RRA
E5A1  1F       RRA
E5A2  1F       RRA
E5A3  E61F     AND  #1F
E5A5  F5       PUSH AF
E5A6  6C       LD   L,H
E5A7  2600     LD   H,#00
E5A9  29       ADD  HL,HL
E5AA  29       ADD  HL,HL
E5AB  29       ADD  HL,HL
E5AC  5D       LD   E,L
E5AD  54       LD   D,H
E5AE  29       ADD  HL,HL
E5AF  19       ADD  HL,DE
E5B0  F1       POP  AF
E5B1  5F       LD   E,A
E5B2  1600     LD   D,#00
E5B4  19       ADD  HL,DE
E5B5  11BBE5   LD   DE,#E5BB
E5B8  19       ADD  HL,DE
E5B9  D1       POP  DE
E5BA  C9       RET
2
   Процедура, выполняющая в  иг-
ре BUBBLER эффект, о котором го-
ворилось  выше, была  разбросана
по всей памяти, поэтому  кодовые
фрагменты  несколько изменены, с
целью объединения  в  компактный
блок. Кроме того, для корректно-
го возврата  в  Бейсик  пришлось
перед вызовом собственно  проце-
дуры, сохранить на стеке  значе-
ния всех регистров процессора, а
также значение  самого  стека  в
специальной    ячейке     памяти
(E2A9H). Все  это  происходит  в
вызывающей  процедуре  с  адреса
E283H.
   При работе процедуры (во вре-
мя модификации спрайта)  исполь-
зуется практически вся область с
адреса  E5BBH до FFFFH, так  что
нежелательно располагать в  этом
месте  какие-либо  другие  блоки
кодов.
   Сама картинка-спрайт располо-
жена с адреса F700H. Спрайт  за-
писан в специальном формате.  Он
имеет размеры:  20  знакомест  в
ширину и 12 знакомест в  высоту.
Как Вы  видите,  он  перекрывает
сегмент (1/3) экрана по высоте и
не полностью использует экран по
ширине. С целью экономии  памяти
и дополнительной защиты  от  не-
санкционированного доступа  (за-
труднения  внесения   изменений)
спрайт  записан  в   специальном
"непрерывном" формате,  отличаю-
щемся от сегментированной струк-
туры экрана. При 8 байтах на ка-
ждое знакоместо получается 20*12
*8=1920 байт.
   Вызов процедуры  производится
командой RANDOMIZE USR 57987.
   Для  набора  кодового   блока
(файл  "bub1"  CODE)  Вы  можете
воспользоваться  Бейсик-програм-
мой:

   1 READ ram: CLEAR ram: READ f
$: READ st: READ len: FOR a=st T
O st+len-1: READ b: POKE a,b: NE
XT a: SAVE f$CODE st,len
  10 DATA 57986,"bub1",57987,824
 100 DATA
245,253,229,221,229,217,229,213,
197,217,229,213,197,237,115,169,
226,205,102,227,237,123,169,226,
193,209,225,217,193,209,225,217
 110 DATA
221,225,253,225,241,201,000,000,
023,142,000,128,237,091,171,226,
042,173,226,126,198,005,071,058,
222,092,128,131,095,126,047,198
 120 DATA
022,130,133,087,237,083,171,226,
035,124,230,159,103,034,173,226,
201,000,000,000,054,000,035,016,
251,201,219,254,047,230,031,201
 130 DATA
237,115,216,092,049,000,091,001,
002,128,017,071,071,195,000,227,
237,115,216,092,049,000,088,001,
012,000,017,000,000,213,016,253
 140 DATA
013,032,250,237,123,216,092,201,
203,060,203,060,203,060,203,060,
203,029,203,060,203,029,203,060,
203,029,124,198,088,103,201,133
 150 DATA
111,208,036,201,000,000,000,017,
039,227,229,205,011,227,026,050,
068,227,198,030,047,050,076,227,
019,026,079,019,026,050,070,227
 160 DATA
006,000,054,000,044,016,251,045,
017,000,255,025,013,032,241,225,
201,048,255,047,247,045,237,040,
211,034,178,027,142,019,099,010
 170 DATA
051,000,000,033,020,014,034,039,
227,205,243,226,205,227,226,175,
050,220,092,050,221,092,060,050,
254,255,205,127,229,058,220,092
 180 DATA
071,254,009,056,010,254,017,056,
004,254,024,056,002,237,068,230,
015,135,033,084,227,205,034,227,
078,035,094,121,179,032,026,217
 190 DATA
058,254,255,060,230,001,050,254,
255,198,070,050,041,227,033,048,
119,205,042,227,217,024,002,024,
193,033,232,255,034,252,255,120
 200 DATA
254,009,056,014,254,025,048,010,
033,024,000,034,252,255,121,237,
068,079,062,071,129,103,046,016,
123,217,095,022,000,106,098,217
 210 DATA
205,158,229,017,000,247,024,036,
058,221,092,167,032,007,061,050,
221,092,205,097,228,205,204,228,
175,205,221,226,194,047,228,024
 220 DATA
182,058,220,092,060,230,031,050,
220,092,024,220,014,096,006,020,
229,026,182,119,019,035,016,249,
225,013,040,229,217,124,025,188
 230 DATA
217,040,235,121,237,075,252,255,
009,079,024,226,033,198,079,006,
020,205,215,226,033,205,240,006,
044,205,215,226,062,007,050,216
 240 DATA
092,253,042,241,092,251,118,058,
216,092,254,119,243,200,253,042,
241,092,251,060,060,050,216,092,
205,135,228,195,074,228,062,016
 250 DATA
050,233,092,062,120,050,216,092,
253,042,241,092,251,058,216,092,
243,254,008,200,253,042,241,092,
251,061,061,050,216,092,205,135
 260 DATA
228,195,112,228,103,046,016,237,
115,218,092,205,158,229,118,243,
249,017,072,002,027,122,179,032,
251,058,216,092,198,135,047,071
 270 DATA
195,043,229,189,229,213,229,237,
229,005,230,029,230,053,230,077,
230,101,230,125,230,149,230,173,
230,197,230,221,230,245,230,013
 280 DATA
231,037,231,000,000,000,000,000,
000,058,212,226,230,007,032,058,
058,001,255,230,128,040,048,058,
199,228,167,040,045,058,000,255
 290 DATA
061,062,000,032,034,058,198,228,
050,003,255,058,199,228,214,032,
071,058,203,228,230,240,176,050,
002,255,058,201,228,050,004,255
 300 DATA
058,200,228,050,005,255,175,050,
199,228,042,212,226,035,034,212,
226,205,175,226,237,115,218,092,
058,233,092,033,166,228,205,034
 310 DATA
227,094,035,086,006,112,235,249,
033,038,064,195,068,229,105,036,
124,230,007,194,068,229,125,198,
032,111,218,068,229,124,214,008
 320 DATA
103,077,209,115,044,114,044,209,
115,044,114,044,209,115,044,114,
044,209,115,044,114,044,209,115,
044,114,044,209,115,044,114,044
 330 DATA
209,115,044,114,044,209,115,044,
114,044,209,115,044,114,044,209,
115,044,114,209,209,016,183,237,
123,218,092,201,237,115,218,092
 340 DATA
049,187,241,006,128,017,000,000,
213,213,213,213,213,213,213,213,
213,213,213,213,016,242,237,123,
218,092,201,213,125,031,031,031
 350 DATA
230,031,245,108,038,000,041,041,
041,093,084,041,025,241,095,022,
000,025,017,187,229,025,209,201

   Теперь  о   картинке-спрайте.
Спрайт из игры BUBBLER  занимает
около 2К, поэтому не имеет смыс-
ла приводить его  в  виде  дампа
для набора, тем более, что инте-
рес  представляет  использование
собственного  материала.  Однако
Вы   можете   "вытащить"  спрайт
"BUBBLER" из игры, выполнив:

   SAVE "bub2"CODE 63232,1920.

   Вы  можете  подготовить  свою
картинку при помощи любого  гра-
фического  редактора  (например,
ARTSTUDIO). Надо  только  распо-
лагать изображение не по центру,
как оно  будет  в  программе,  а
сдвинутым в левый  верхний  угол
экрана.  Кроме  того, надо  пом-
нить, что его размер должен быть
12 строк по вертикали и 20  зна-
комест по горизонтали. Если  Ва-
ша картинка меньше по  размерам,
то надо учесть симметрию относи-
тельно области 12х20. При  рабо-
те желательно пользоваться  чер-
ным фоном и белыми  чернилами  -
так изображение будет  выглядеть
на экране, однако значение имеет
только включенные или  выключен-
ные пикселы, информации о  цвете
в будущем спрайте не будет.
   После того,  как  изображение
готово, надо закодировать спрайт
в "непрерывный" формат. Для  об-
работки  спрайта  (двунаправлен-
ного конвертирования, демонстра-
ции  эффекта  и  записи-загрузки
спрайта  и экрана)  была  созда-
на специальная  Бейсик-программа
"BUB" (приведенная ниже).  После
автостарта со строки 2  грузятся
файлы "bub1"CODE 57987,824 - это
кодовая  процедура,  приведенная
выше, и "bub2" CODE 63232,1920 -
спрайт, заимствованный из  прог-
раммы BUBBLER.

  1 GO TO 100
  2 BORDER 1: CLEAR 57986: LOAD
"bub1"CODE
  3 LOAD "bub2"CODE
  4 RUN
  5 CLEAR : SAVE "BUB" LINE 2 :
STOP
100 GO SUB 2000: INPUT ;: PRINT
AT 14,1;"0 - DEMONSTRATION";
AT 15,1;"1 - CODING SPRITE";
AT 16,1;"2 - DECODING SPRITE";
AT 17,1;"3 - LOAD SCREEN$";
AT 18,1;"4 - SAVE SCREEN$";
AT 19,1;"5 - LOAD SPRITE";
AT 20,1;"6 - SAVE SPRITE": BEEP
.1,20
120 PAUSE 0: LET I$=INKEY$: IF
INKEY$<"0" OR INKEY$>"6" THEN  G
O TO 120
 130 IF INKEY$="0" THEN  BORDER
0: RANDOMIZE USR 57987: BORDER 1
: CLS : GO TO 100
 140 IF INKEY$="1" OR INKEY$="2"
 THEN  GO TO 500
 150 IF i$="3" THEN LOAD ""CODE
16384,6912
 160 IF i$="4" THEN  INPUT "FILE
NAME: ";f$: SAVE f$CODE 16384,69
12
 170 IF i$="5" THEN LOAD ""CODE
63232,1920
 180 IF i$="6" THEN  INPUT "FILE
NAME: ";f$: SAVE f$CODE 63232,19
20
 190 GO TO 100
 500 LET r=65132: LET c=0
 510 PRINT #0; FLASH 1;        "
        Please, wait...
"
 520 FOR m=0 TO 7
 530 GO SUB 1000
 540 NEXT m
 550 LET r=63852: LET c=1
 560 FOR m=0 TO 3
 570 GO SUB 1000
 580 NEXT m
 599 GO TO 100
1000 FOR l=0 TO 7
1010 LET s=16384+256*l+32*m+2048
*c
1020 FOR i=0 TO 19
1030 IF I$="2" THEN  POKE (s+i),
PEEK (r+i)
1040 IF I$="1" THEN  POKE (r+i),
PEEK (s+i)
1050 NEXT i
1060 LET r=r-20
1070 NEXT l
1080 RETURN
2000 FOR a=0 TO 11: PRINT AT a,0
; PAPER 6; OVER 1;"
       ": NEXT a
2010 FOR a=13 TO 21: PRINT AT a,
0;"
   ": NEXT a
2020 RETURN

   После запуска программы "BUB"
Вы видите титульное меню.
   Нажав "3", Вы  можете  загру-
зить заготовленную  картинку-эк-
ран с  будущим  спрайтом.  Нажав
"1", выполните кодирование  кар-
тинки в спрайт.  Нажав  "6",  Вы
сохраните полученный спрайт  для
последующего встраивания в  свою
программу. При нажатии  "0"  Вам
будет продемонстрирован весь эф-
фект так, как это будет в  Вашей
будущей программе.  При  нажатии
"2", а затем "4", Вы имеете воз-
можность декодировать  спрайт  и
затем сохранить его  для  после-
дующего редактирования  его  при
помощи ARTSTUDIO.

           *   *   *




Другие статьи номера:

Help - Описание оболочки электронного издания "ZX-FORUM 4".

Секреты успешного дизайна - глава для книги "Дизайн Ваших программ"

Экранные эффекты - Бегущая строка из R-Type.

Экранные эффекты - гашения экрана из Zynaps.

Экранные эффекты - "сворачивание" экрана из Comando Tracer.

Экранные эффекты - плавное "затухание" экрана из Сommando Tracer.

Экранные эффекты - модификация символьного набора для получения оригинального стилизованного шрифта из игры Rockstar.

Экранные эффекты - "выбегающая строка" из игры Rockstar.

Экранные эффекты - "наливающийся" экран из игры Rockstar.

Экранные эффекты - сложный многоступенчатый эффект из игры Bubbler.

Новые 40 лучших процедур - скроллинг экрана, слияние двух картинок, инвертирование экрана, поворот символов, замена атрибутов, заливка замкнутого контура, вычисление адресов в экране, копирование части экрана и т.д.

Технология спрайтов - часть 1: введение.

Технология спрайтов - часть 2: охота на спрайты (поиск и выдирание).

Технология спрайтов - часть 3: форматы спрайтов.

Технология спрайтов - часть 4: форматы спрайтов с маской.

Технология спрайтов - часть 5: структура спрайтовых блоков (как уживаются в памяти спрайт и маска, какие данные помогают нам оперативно находить адрес спрайта в памяти и многое другое.)

Технология спрайтов - часть 6: подготовка данных к печати.

Технология спрайтов - часть 8: печать спрайтов (координаты заданы в знакоместах).

Технология спрайтов - часть 9: печать спрайтов (координаты заданы в пикселях).

Технология спрайтов - часть 10: обзор программ для работы со спрайтами и графикой.

Мир звуков Спектрума - глава 1: Физика звука.

Мир звуков Спектрума - глава 2: Оператор BEEP, Создание эффектов на BEEPе, Создание музыки на BEEPе.

Мир звуков Спектрума - глава 3: Как получается звук (устройство BEEP'ра и способы звукоизвлечения).

Мир звуков Спектрума - глава 4: Программирование звука на ассемблере.

Мир звуков Спектрума - глава 4.1: Программирование звуковых эффектов - Тон, Шум, Комплексы эффектов.

Мир звуков Спектрума - глава 4.2: Программирование звуковых эффектов - Управление громкостью.

Мир звуков Спектрума - глава 4.3: Программирование звуковых эффектов - Управление тембром.

Мир звуков Спектрума - глава 4.4: Программирование звуковых эффектов - Программирование музыки.

Мир звуков Спектрума - глава 4.5: Программирование звуковых эффектов - Многоголосые мелодии (полифония).

Мир звуков Спектрума - глава 4.6: Обработка внешних сигналов - оцифровка.

Мир звуков Спектрума - глава 4.7: Обработка внешних сигналов - Реверберация.

Мир звуков Спектрума - глава 4.8: Синтезирование речи.

Мир звуков Спектрума - глава 4.9: воспроизведение звука на прерываниях.

Мир звуков Спектрума - глава 5: Оператор PLAY для музыкального сопроцессора AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 5.1: Создание эффектов оператором PLAY.

Мир звуков Спектрума - глава 5.2: Создание музыки на PLAYе.

Мир звуков Спектрума - глава 6.1: описание регистров музыкального сопроцессора AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 6.2: Программирование эффектов и музыки под музыкальный сопроцессор AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 7: Обзор программного обеспечения ZX-Spectrum для создания звуков и музыки.

Мир звуков Спектрума - глава 7.1: Редактор звуковых эффектов SUPER SOUND.

Мир звуков Спектрума - глава 7.2: Музыкальный редактор Wham the Music Box.

Мир звуков Спектрума - приложения 1, 2: листинги звуковых эффектов SUPER SOUND'а, советы по использованию ассемблера.


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

Похожие статьи:
Номер 17 - Егор ЕЛАТОМЦЕВ (часть 1).
Creator - Hаша группа называется ZER0 GUYS...
Планета шелезяка - схема RS-232 интерфейса.

В этот день...   23 октября