Subversion Repositories Kolibri OS

Rev

Rev 5282 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5282 Rev 7670
1
;çàãîëîâîê ïðèëîæåíèÿ
1
;çàãîëîâîê ïðèëîæåíèÿ
2
 
2
 
3
SK_SPACE equ 0x39
3
SK_SPACE equ 0x39
4
SK_CTRL  equ 0x1D
4
SK_CTRL  equ 0x1D
5
SK_UP	 equ 0x48
5
SK_UP	 equ 0x48
6
SK_DOWN  equ 0x50
6
SK_DOWN  equ 0x50
7
SK_LEFT  equ 0x4B
7
SK_LEFT  equ 0x4B
8
SK_RIGHT equ 0x4D
8
SK_RIGHT equ 0x4D
9
SK_ESC	 equ 0x01
9
SK_ESC	 equ 0x01
10
 
10
 
11
 
11
 
12
INIT_PLANE_X equ 20
12
INIT_PLANE_X equ 20
13
INIT_PLANE_Y equ 20
13
INIT_PLANE_Y equ 20
14
BACK_COLOR equ 0x9bcdfa
14
BACK_COLOR equ 0x9bcdfa
15
GROUND_COLOR equ 0x808080
15
GROUND_COLOR equ 0x808080
16
BANG_COLOR equ 0xB0140E
16
BANG_COLOR equ 0xB0140E
17
ANIM_PLANE_BMP_PIXELS_COUNT equ 22*32*32
17
ANIM_PLANE_BMP_PIXELS_COUNT equ 22*32*32
18
WINDOW_WIDTH equ 800
18
WINDOW_WIDTH equ 800
19
WINDOW_HEIGHT equ 600
19
WINDOW_HEIGHT equ 600
20
GROUNG_HEIGHT equ 100
20
GROUNG_HEIGHT equ 100
21
CITY_OFFSET equ (WINDOW_WIDTH-32*20)/2
21
CITY_OFFSET equ (WINDOW_WIDTH-32*20)/2
22
MAX_BOMBS equ 8
22
MAX_BOMBS equ 8
23
GRAVY_ACCEL equ 1
23
GRAVY_ACCEL equ 1
24
BOMB_DELAY equ 12
24
BOMB_DELAY equ 12
25
MAX_LEVEL equ 5
25
MAX_LEVEL equ 5
26
ACKACK_BULLET_SPEED equ 17
26
ACKACK_BULLET_SPEED equ 17
27
BULLET_SIZE equ 7
27
BULLET_SIZE equ 7
28
MAX_SOUNDS equ 8
28
MAX_SOUNDS equ 8
29
 
29
 
30
VOLUME_BOMBFLY equ 16
30
VOLUME_BOMBFLY equ 16
31
VOLUME_BOMBBANG equ 28
31
VOLUME_BOMBBANG equ 28
32
VOLUME_ACKACK equ 24
32
VOLUME_ACKACK equ 24
33
VOLUME_PLANE equ 48
33
VOLUME_PLANE equ 48
34
VOLUME_ARW equ 16
34
VOLUME_ARW equ 16
35
 
35
 
36
 
36
 
37
use32			   ; òðàíñëÿòîð, èñïîëüçóþùèé 32 ðàçðÿäíûõ êîìàíäû
37
use32			   ; òðàíñëÿòîð, èñïîëüçóþùèé 32 ðàçðÿäíûõ êîìàíäû
38
    org 0x0		   ; áàçîâûé àäðåñ êîäà, âñåãäà 0x0
38
    org 0x0		   ; áàçîâûé àäðåñ êîäà, âñåãäà 0x0
39
    db 'MENUET01'	; èäåíòèôèêàòîð èñïîëíÿåìîãî ôàéëà (8 áàéò)
39
    db 'MENUET01'	; èäåíòèôèêàòîð èñïîëíÿåìîãî ôàéëà (8 áàéò)
40
    dd 0x1	     ; âåðñèÿ ôîðìàòà çàãîëîâêà èñïîëíÿåìîãî ôàéëà
40
    dd 0x1	     ; âåðñèÿ ôîðìàòà çàãîëîâêà èñïîëíÿåìîãî ôàéëà
41
    dd start	     ; àäðåñ, íà êîòîðûé ñèñòåìà ïåðåäà¸ò óïðàâëåíèå
41
    dd start	     ; àäðåñ, íà êîòîðûé ñèñòåìà ïåðåäà¸ò óïðàâëåíèå
42
		       ; ïîñëå çàãðóçêè ïðèëîæåíèÿ â ïàìÿòü
42
		       ; ïîñëå çàãðóçêè ïðèëîæåíèÿ â ïàìÿòü
43
    dd i_end	    ; ðàçìåð ïðèëîæåíèÿ
43
    dd i_end	    ; ðàçìåð ïðèëîæåíèÿ
44
    dd i_end  ; Îáúåì èñïîëüçóåìîé ïàìÿòè, äëÿ ñòåêà îòâåäåì 0õ100 áàéò
44
    dd i_end  ; Îáúåì èñïîëüçóåìîé ïàìÿòè, äëÿ ñòåêà îòâåäåì 0õ100 áàéò
45
    dd i_end  ; ðàñïîëîæèì ïîçèöèþ ñòåêà â îáëàñòè ïàìÿòè, ñðàçó çà òåëîì ïðîãðàììû. Âåðøèíà ñòåêà â äèàïàçîíå ïàìÿòè, óêàçàííîì âûøå
45
    dd i_end  ; ðàñïîëîæèì ïîçèöèþ ñòåêà â îáëàñòè ïàìÿòè, ñðàçó çà òåëîì ïðîãðàììû. Âåðøèíà ñòåêà â äèàïàçîíå ïàìÿòè, óêàçàííîì âûøå
46
    dd 0x0, _s_current_dir		  ; óêàçàòåëü íà ñòðîêó ñ ïàðàìåòðàìè.
46
    dd 0x0, _s_current_dir		  ; óêàçàòåëü íà ñòðîêó ñ ïàðàìåòðàìè.
47
		 ;    åñëè ïîñëå çàïóñêà íåðàâíî íóëþ, ïðèëîæåíèå áûëî
47
		 ;    åñëè ïîñëå çàïóñêà íåðàâíî íóëþ, ïðèëîæåíèå áûëî
48
		 ;    çàïóùåíî ñ ïàðàìåòðàìè èç êîìàíäíîé ñòðîêè
48
		 ;    çàïóùåíî ñ ïàðàìåòðàìè èç êîìàíäíîé ñòðîêè
49
 
49
 
50
		 ;    óêàçàòåëü íà ñòðîêó, â êîòîðóþ çàïèñàí ïóòü,
50
		 ;    óêàçàòåëü íà ñòðîêó, â êîòîðóþ çàïèñàí ïóòü,
51
		 ;    îòêóäà çàïóùåíî ïðèëîæåíèå
51
		 ;    îòêóäà çàïóùåíî ïðèëîæåíèå
52
;Îáëàñòü êîäà
52
;Îáëàñòü êîäà
53
 
53
 
54
;----------------- include -------------------------------------
54
;----------------- include -------------------------------------
55
include 'lang.inc'
55
include 'lang.inc'
56
include 'ssmix.inc'
56
include 'ssmix.inc'
57
 
57
 
58
;---------------------------------------------------------------------------
58
;---------------------------------------------------------------------------
59
;----------------------------- ãëàâíûé öèêë --------------------------------
59
;----------------------------- ãëàâíûé öèêë --------------------------------
60
;---------------------------------------------------------------------------
60
;---------------------------------------------------------------------------
61
 
61
 
62
align 4
62
align 4
63
start:		   ;Òî÷êà âõîäà â ïðîãðàììó
63
start:		   ;Òî÷êà âõîäà â ïðîãðàììó
64
 
64
 
65
     ; ðåæèì êëàâèàòóðû: ñêàí-êîäû
65
     ; ðåæèì êëàâèàòóðû: ñêàí-êîäû
66
     mov  eax, 66
66
     mov  eax, 66
67
     mov  ebx, 1
67
     mov  ebx, 1
68
     mov  ecx, 1
68
     mov  ecx, 1
69
     int  0x40
69
     int  0x40
70
 
70
 
71
     ; èíèöèàëèçàöèÿ êó÷è
71
     ; èíèöèàëèçàöèÿ êó÷è
72
     mov  eax, 68
72
     mov  eax, 68
73
     mov  ebx, 11
73
     mov  ebx, 11
74
     int  0x40
74
     int  0x40
75
     cmp  eax, 1000000	; êó÷à íóæíà ìèíèìóì íà ~1000êá (ýòî ñ çàïàñîì)
75
     cmp  eax, 1000000	; êó÷à íóæíà ìèíèìóì íà ~1000êá (ýòî ñ çàïàñîì)
76
     ja   heap_ok
76
     ja   heap_ok
77
     mov  eax, -1
77
     mov  eax, -1
78
     int  0x40	       ; èíà÷å çàêðûâàåì âñå
78
     int  0x40	       ; èíà÷å çàêðûâàåì âñå
79
   heap_ok:
79
   heap_ok:
80
 
80
 
81
     mov    eax, bmp_plane
81
     mov    eax, bmp_plane
82
     mov    ebx, 736*32*3
82
     mov    ebx, 736*32*3
83
     call   convert_bmp_backcolor
83
     call   convert_bmp_backcolor
84
     mov    eax, bmp_bomb
84
     mov    eax, bmp_bomb
85
     mov    ebx, 96*16*3
85
     mov    ebx, 96*16*3
86
     call   convert_bmp_backcolor
86
     call   convert_bmp_backcolor
87
     mov    eax, bmp_tile
87
     mov    eax, bmp_tile
88
     mov    ebx, 20*20*3
88
     mov    ebx, 20*20*3
89
     call   convert_bmp_backcolor
89
     call   convert_bmp_backcolor
90
     mov    eax, bmp_ackack
90
     mov    eax, bmp_ackack
91
     mov    ebx, 40*20*3
91
     mov    ebx, 40*20*3
92
     call   convert_bmp_backcolor
92
     call   convert_bmp_backcolor
93
 
93
 
94
     call  read_sounds_file
94
     call  read_sounds_file
95
     call  ssmix_init
95
     call  ssmix_init
96
 
96
 
97
     mov  [_game_state], 0
97
     mov  [_game_state], 0
98
 
98
 
99
redraw_window:
99
redraw_window:
100
     call draw_window
100
     call draw_window
101
     cmp  [_game_state], 0
101
     cmp  [_game_state], 0
102
     jne   still_no_intro
102
     jne   still_no_intro
103
     call draw_intro
103
     call draw_intro
104
  still_no_intro:
104
  still_no_intro:
105
 
105
 
106
still:
106
still:
107
     ; îáðàáîòêà ñîáûòèé
107
     ; îáðàáîòêà ñîáûòèé
108
     mov  eax,11
108
     mov  eax,11
109
     int  0x40
109
     int  0x40
110
     cmp  eax,1
110
     cmp  eax,1
111
     je   redraw_window
111
     je   redraw_window
112
     cmp  eax,2
112
     cmp  eax,2
113
     je   key
113
     je   key
114
     cmp  eax,3
114
     cmp  eax,3
115
     je   close_button
115
     je   close_button
116
 
116
 
117
     ; ïàóçà
117
     ; ïàóçà
118
     mov  eax,5
118
     mov  eax,5
119
     mov  ebx,1
119
     mov  ebx,1
120
     int  0x40
120
     int  0x40
121
 
121
 
122
     mov  eax, 26
122
     mov  eax, 26
123
     mov  ebx, 9
123
     mov  ebx, 9
124
     int  0x40
124
     int  0x40
125
     mov  ebx, eax
125
     mov  ebx, eax
126
     sub  eax, [_last_value_timecount]
126
     sub  eax, [_last_value_timecount]
127
     cmp  eax, [_delay]
127
     cmp  eax, [_delay]
128
     jbe  still
128
     jbe  still
129
     mov  [_last_value_timecount], ebx
129
     mov  [_last_value_timecount], ebx
130
 
130
 
131
     call timer_x2
131
     call timer_x2
132
     call timer_x4
132
     call timer_x4
133
 
133
 
134
     ; ïðîâåðêà íà èãðó
134
     ; ïðîâåðêà íà èãðó
135
     cmp  [_game_state], 1
135
     cmp  [_game_state], 1
136
     jne  still_no_game
136
     jne  still_no_game
137
     ; âûçîâ ïðîöåäóð èãðîâîãî ïðîöåññà
137
     ; âûçîâ ïðîöåäóð èãðîâîãî ïðîöåññà
138
     mov  eax, [_plane_health]
138
     mov  eax, [_plane_health]
139
     cmp  eax, 0
139
     cmp  eax, 0
140
     jle  still_no_plane
140
     jle  still_no_plane
141
     call flight_control_plane
141
     call flight_control_plane
142
     call plane_interaction
142
     call plane_interaction
143
     call draw_plane
143
     call draw_plane
144
   still_no_plane:
144
   still_no_plane:
145
     call draw_plane_health
145
     call draw_plane_health
146
     call bomb_proc
146
     call bomb_proc
147
     call bang_proc
147
     call bang_proc
148
     call ground_draw
148
     call ground_draw
149
     call city_draw
149
     call city_draw
150
     call ackack_draw
150
     call ackack_draw
151
     call ackack_bullet_proc
151
     call ackack_bullet_proc
152
     ; òàéìåð çàâåðøåíèÿ èãðû
152
     ; òàéìåð çàâåðøåíèÿ èãðû
153
     call  game_over_timer
153
     call  game_over_timer
154
   still_no_game:
154
   still_no_game:
155
 
155
 
156
     jmp  still
156
     jmp  still
157
 
157
 
158
 
158
 
159
key:			    ; îáðàáîòêà íàæàòèÿ êëàâèø
159
key:			    ; îáðàáîòêà íàæàòèÿ êëàâèø
160
    mov  eax,2
160
    mov  eax,2
161
    int  0x40
161
    int  0x40
162
 
162
 
163
    push eax
163
    push eax
164
  key_SPACE:
164
  key_SPACE:
165
    cmp  ah, SK_SPACE
165
    cmp  ah, SK_SPACE
166
    jne  key_SPACE_end
166
    jne  key_SPACE_end
167
    cmp  [_game_state], 1
167
    cmp  [_game_state], 1
168
    je	 key_SPACE_do_a_barrel_roll
168
    je	 key_SPACE_do_a_barrel_roll
169
  key_SPACE_start_game: 	      ; çàïóñê èãðû
169
  key_SPACE_start_game: 	      ; çàïóñê èãðû
170
    mov  [_game_state], 1
170
    mov  [_game_state], 1
171
    call init_game_state
171
    call init_game_state
172
    jmp  key_SPACE_end
172
    jmp  key_SPACE_end
173
  key_SPACE_do_a_barrel_roll:	      ; ñäåëàòü áî÷êó
173
  key_SPACE_do_a_barrel_roll:	      ; ñäåëàòü áî÷êó
174
    mov  eax, [_plane_state]
174
    mov  eax, [_plane_state]
175
    cmp  eax, 0
175
    cmp  eax, 0
176
    je	 key_SPACE_do_a_barrel_roll_r
176
    je	 key_SPACE_do_a_barrel_roll_r
177
    cmp  eax, 1
177
    cmp  eax, 1
178
    je	 key_SPACE_do_a_barrel_roll_l
178
    je	 key_SPACE_do_a_barrel_roll_l
179
    jmp  key_SPACE_end
179
    jmp  key_SPACE_end
180
  key_SPACE_do_a_barrel_roll_r:
180
  key_SPACE_do_a_barrel_roll_r:
181
    mov  eax,[_X_plane]
181
    mov  eax,[_X_plane]
182
    cmp  eax, WINDOW_WIDTH-130-32
182
    cmp  eax, WINDOW_WIDTH-130-32
183
    jg	 key_SPACE_end
183
    jg	 key_SPACE_end
184
    mov  [_plane_state], 4
184
    mov  [_plane_state], 4
185
    mov  [_plane_state_step], 0
185
    mov  [_plane_state_step], 0
186
    jmp  key_SPACE_end
186
    jmp  key_SPACE_end
187
  key_SPACE_do_a_barrel_roll_l:
187
  key_SPACE_do_a_barrel_roll_l:
188
    mov  eax,[_X_plane]
188
    mov  eax,[_X_plane]
189
    cmp  eax, 130
189
    cmp  eax, 130
190
    jl	 key_SPACE_end
190
    jl	 key_SPACE_end
191
    mov  [_plane_state], 5
191
    mov  [_plane_state], 5
192
    mov  [_plane_state_step], 0
192
    mov  [_plane_state_step], 0
193
  key_SPACE_end:
193
  key_SPACE_end:
194
    pop  eax
194
    pop  eax
195
 
195
 
196
  key_CTRL:
196
  key_CTRL:
197
    cmp  ah, SK_CTRL
197
    cmp  ah, SK_CTRL
198
    jne  key_CTRL_end
198
    jne  key_CTRL_end
199
    call bomb_drop
199
    call bomb_drop
200
  key_CTRL_end:
200
  key_CTRL_end:
201
 
201
 
202
  key_UP:
202
  key_UP:
203
    cmp  ah, SK_UP
203
    cmp  ah, SK_UP
204
    jne  key_UP_end
204
    jne  key_UP_end
205
    cmp  [_game_state], 0
205
    cmp  [_game_state], 0
206
    jne  key_UP_end
206
    jne  key_UP_end
207
    mov  ebx, [_level_num]
207
    mov  ebx, [_level_num]
208
    inc  ebx
208
    inc  ebx
209
    mov  [_level_num], ebx
209
    mov  [_level_num], ebx
210
    cmp  ebx, MAX_LEVEL
210
    cmp  ebx, MAX_LEVEL
211
    jbe  key_UP_no_max
211
    jbe  key_UP_no_max
212
    mov  [_level_num], MAX_LEVEL
212
    mov  [_level_num], MAX_LEVEL
213
  key_UP_no_max:
213
  key_UP_no_max:
214
    call draw_level_num
214
    call draw_level_num
215
  key_UP_end:
215
  key_UP_end:
216
 
216
 
217
  key_DOWN:
217
  key_DOWN:
218
    cmp  ah, SK_DOWN
218
    cmp  ah, SK_DOWN
219
    jne  key_DOWN_end
219
    jne  key_DOWN_end
220
    cmp  [_game_state], 0
220
    cmp  [_game_state], 0
221
    jne  key_DOWN_end
221
    jne  key_DOWN_end
222
    mov  ebx, [_level_num]
222
    mov  ebx, [_level_num]
223
    dec  ebx
223
    dec  ebx
224
    mov  [_level_num], ebx
224
    mov  [_level_num], ebx
225
    cmp  ebx, 1
225
    cmp  ebx, 1
226
    jae  key_DOWN_no_min
226
    jae  key_DOWN_no_min
227
    mov  [_level_num], 1
227
    mov  [_level_num], 1
228
  key_DOWN_no_min:
228
  key_DOWN_no_min:
229
    call draw_level_num
229
    call draw_level_num
230
  key_DOWN_end:
230
  key_DOWN_end:
231
 
231
 
232
 
232
 
233
  key_LEFT:
233
  key_LEFT:
234
    cmp  ah, SK_LEFT
234
    cmp  ah, SK_LEFT
235
    jne  key_LEFT_end
235
    jne  key_LEFT_end
236
    cmp  [_game_state], 0
236
    cmp  [_game_state], 0
237
    jne  key_LEFT_end
237
    jne  key_LEFT_end
238
    mov  ebx, [_set_volume]
238
    mov  ebx, [_set_volume]
239
    dec  ebx
239
    dec  ebx
240
    cmp  ebx, 0
240
    cmp  ebx, 0
241
    jge  @f
241
    jge  @f
242
    mov  ebx, 0
242
    mov  ebx, 0
243
  @@:
243
  @@:
244
    mov  [_set_volume], ebx
244
    mov  [_set_volume], ebx
245
    shl  ebx, 4
245
    shl  ebx, 4
246
    stdcall ssmix_setvolume, ebx, ebx
246
    stdcall ssmix_setvolume, ebx, ebx
247
    call draw_volume_num
247
    call draw_volume_num
248
  key_LEFT_end:
248
  key_LEFT_end:
249
 
249
 
250
 
250
 
251
  key_RIGHT:
251
  key_RIGHT:
252
    cmp  ah, SK_RIGHT
252
    cmp  ah, SK_RIGHT
253
    jne  key_RIGHT_end
253
    jne  key_RIGHT_end
254
    cmp  [_game_state], 0
254
    cmp  [_game_state], 0
255
    jne  key_RIGHT_end
255
    jne  key_RIGHT_end
256
    mov  ebx, [_set_volume]
256
    mov  ebx, [_set_volume]
257
    inc  ebx
257
    inc  ebx
258
    cmp  ebx, 8
258
    cmp  ebx, 8
259
    jle  @f
259
    jle  @f
260
    mov  ebx, 8
260
    mov  ebx, 8
261
  @@:
261
  @@:
262
    mov  [_set_volume], ebx
262
    mov  [_set_volume], ebx
263
    shl  ebx, 4
263
    shl  ebx, 4
264
    stdcall ssmix_setvolume, ebx, ebx
264
    stdcall ssmix_setvolume, ebx, ebx
265
    call draw_volume_num
265
    call draw_volume_num
266
  key_RIGHT_end:
266
  key_RIGHT_end:
267
 
267
 
268
 
268
 
269
  key_ESC:
269
  key_ESC:
270
    cmp  ah, SK_ESC
270
    cmp  ah, SK_ESC
271
    jne  key_ESC_end
271
    jne  key_ESC_end
272
    jmp  close_button
272
    jmp  close_button
273
  key_ESC_end:
273
  key_ESC_end:
274
 
274
 
275
    jmp  still
275
    jmp  still
276
 
276
 
277
 
277
 
278
 
278
 
279
 
279
 
280
close_button:		    ; çàâåðøåíèå ðàáîòû
280
close_button:		    ; çàâåðøåíèå ðàáîòû
281
 
281
 
282
     call  ssmix_release
282
     call  ssmix_release
283
     call  sounds_free_memory
283
     call  sounds_free_memory
284
     ; çàêðûòü ïðèëîæåíèå
284
     ; çàêðûòü ïðèëîæåíèå
285
     mov  eax, -1
285
     mov  eax, -1
286
     int  0x40
286
     int  0x40
287
 
287
 
288
 
288
 
289
;---------------------------------------------------------------------------
289
;---------------------------------------------------------------------------
290
;----------------------------- ïîäðîãðàììû ---------------------------------
290
;----------------------------- ïîäðîãðàììû ---------------------------------
291
;---------------------------------------------------------------------------
291
;---------------------------------------------------------------------------
292
 
292
 
293
 
293
 
294
convert_bmp_backcolor:	    ; eax - óêàçàòàëü íà íà÷àëî äàííûõ, ebx - ðàçìåð äàííûõ
294
convert_bmp_backcolor:	    ; eax - óêàçàòàëü íà íà÷àëî äàííûõ, ebx - ðàçìåð äàííûõ
295
 
295
 
296
     push  ecx
296
     push  ecx
297
   cbb_loop:
297
   cbb_loop:
298
     cmp   ebx, 0
298
     cmp   ebx, 0
299
     jle   cbb_loop_end
299
     jle   cbb_loop_end
300
     mov   ecx, [eax]
300
     mov   ecx, [eax]
301
     and   ecx, 0x00FFFFFF
301
     and   ecx, 0x00FFFFFF
302
     cmp   ecx, 0x00FFFFFF
302
     cmp   ecx, 0x00FFFFFF
303
     jne   @f
303
     jne   @f
304
     mov   ecx, BACK_COLOR
304
     mov   ecx, BACK_COLOR
305
     mov   [eax], cl
305
     mov   [eax], cl
306
     shr   ecx, 8
306
     shr   ecx, 8
307
     mov   [eax+1], cl
307
     mov   [eax+1], cl
308
     shr   ecx, 8
308
     shr   ecx, 8
309
     mov   [eax+2], cl
309
     mov   [eax+2], cl
310
   @@:
310
   @@:
311
     add   eax, 3
311
     add   eax, 3
312
     sub   ebx, 3
312
     sub   ebx, 3
313
     jmp   cbb_loop
313
     jmp   cbb_loop
314
   cbb_loop_end:
314
   cbb_loop_end:
315
     pop   ecx
315
     pop   ecx
316
 
316
 
317
     ret
317
     ret
318
 
318
 
319
; ÷òåíèå ôàéëà ñî çâóêàìè
319
; ÷òåíèå ôàéëà ñî çâóêàìè
320
read_sounds_file:
320
read_sounds_file:
321
 
321
 
322
     mov  edi, _s_current_dir
322
     mov  edi, _s_current_dir
323
     mov  al, 0
323
     mov  al, 0
324
     mov  ecx, 4096
324
     mov  ecx, 4096
325
     repne scasb
325
     repne scasb
326
     mov  dword[edi-1], 'data'
326
     mov  dword[edi-1], 'data'
327
     mov  dword[edi+3], '.bin'
327
     mov  dword[edi+3], '.bin'
328
     mov  [_flag_bomberdatabin_ok], 1
328
     mov  [_flag_bomberdatabin_ok], 1
329
     ; ïðî÷èòàòü èç ôàéëà äàííûõ êîëè÷åñòâî çâóêîâ
329
     ; ïðî÷èòàòü èç ôàéëà äàííûõ êîëè÷åñòâî çâóêîâ
330
     mov  [_fi_func], 0
330
     mov  [_fi_func], 0
331
     mov  [_fi_pos], 8
331
     mov  [_fi_pos], 8
332
     mov  [_fi_size], 4
332
     mov  [_fi_size], 4
333
     mov  [_fi_pbuff], _count_sounds
333
     mov  [_fi_pbuff], _count_sounds
334
     mov  [_fi_pfilename], _s_current_dir
334
     mov  [_fi_pfilename], _s_current_dir
335
     mov  eax, 70
335
     mov  eax, 70
336
     mov  ebx, file_info
336
     mov  ebx, file_info
337
     int  0x40
337
     int  0x40
338
     cmp  ebx, -1
338
     cmp  ebx, -1
339
     jne  @f
339
     jne  @f
340
     mov  [_flag_bomberdatabin_ok], 0
340
     mov  [_flag_bomberdatabin_ok], 0
341
     jmp  .end
341
     jmp  .end
342
   @@:
342
   @@:
343
     ; ïðî÷èòàòü äàííûå î ñìåùåíèè è ðàçìåðå çâóêîâ â ôàéëå, è çàïèñàòü èõ (âðåìåííî) â ìàññèâ çâóêîâ
343
     ; ïðî÷èòàòü äàííûå î ñìåùåíèè è ðàçìåðå çâóêîâ â ôàéëå, è çàïèñàòü èõ (âðåìåííî) â ìàññèâ çâóêîâ
344
     mov  ecx, [_count_sounds]
344
     mov  ecx, [_count_sounds]
345
     shl  ecx, 3
345
     shl  ecx, 3
346
     mov  [_fi_func], 0
346
     mov  [_fi_func], 0
347
     mov  [_fi_pos], 12
347
     mov  [_fi_pos], 12
348
     mov  [_fi_size], ecx
348
     mov  [_fi_size], ecx
349
     mov  [_fi_pbuff], _array_sounds
349
     mov  [_fi_pbuff], _array_sounds
350
     mov  [_fi_pfilename], _s_current_dir
350
     mov  [_fi_pfilename], _s_current_dir
351
     mov  eax, 70
351
     mov  eax, 70
352
     mov  ebx, file_info
352
     mov  ebx, file_info
353
     int  0x40
353
     int  0x40
354
     ; ïðî÷èòàòü çâóêè â ôàéëå è çàïèñàòü èõ â ïàìÿòü
354
     ; ïðî÷èòàòü çâóêè â ôàéëå è çàïèñàòü èõ â ïàìÿòü
355
     mov  ecx, [_count_sounds]
355
     mov  ecx, [_count_sounds]
356
     mov  esi, _array_sounds
356
     mov  esi, _array_sounds
357
   .loop:
357
   .loop:
358
     push  ecx
358
     push  ecx
359
     ; ïîäãîòîâèòü äàííûå èíôîðìàöèîííîé ñòðóêòóðû äëÿ ÷òåíèÿ èç ôàéëà
359
     ; ïîäãîòîâèòü äàííûå èíôîðìàöèîííîé ñòðóêòóðû äëÿ ÷òåíèÿ èç ôàéëà
360
     mov  [_fi_func], 0
360
     mov  [_fi_func], 0
361
     mov  eax, [esi]
361
     mov  eax, [esi]
362
     mov  [_fi_pos], eax
362
     mov  [_fi_pos], eax
363
     mov  eax, [esi+4]
363
     mov  eax, [esi+4]
364
     mov  [_fi_size], eax
364
     mov  [_fi_size], eax
365
     ; âûäåëèòü ïàìÿòü ïîä çâóê, ïîëó÷èòü óêàçàòåëü, è èçìåíèòü äàííûå â ìàññèâå çâóêîâ
365
     ; âûäåëèòü ïàìÿòü ïîä çâóê, ïîëó÷èòü óêàçàòåëü, è èçìåíèòü äàííûå â ìàññèâå çâóêîâ
366
     mov  ecx, [esi+4]
366
     mov  ecx, [esi+4]
367
     mov  eax, 68
367
     mov  eax, 68
368
     mov  ebx, 12
368
     mov  ebx, 12
369
     int  0x40
369
     int  0x40
370
     mov  [esi], eax
370
     mov  [esi], eax
371
     mov  ecx, [esi+4]
371
     mov  ecx, [esi+4]
372
     add  ecx, eax
372
     add  ecx, eax
373
     mov  [esi+4], ecx
373
     mov  [esi+4], ecx
374
     ; ïðî÷èòàòü ñýìïë èç ôàéëà
374
     ; ïðî÷èòàòü ñýìïë èç ôàéëà
375
     mov  [_fi_pbuff], eax
375
     mov  [_fi_pbuff], eax
376
     mov  [_fi_pfilename], _s_current_dir
376
     mov  [_fi_pfilename], _s_current_dir
377
     mov  eax, 70
377
     mov  eax, 70
378
     mov  ebx, file_info
378
     mov  ebx, file_info
379
     int  0x40
379
     int  0x40
380
     pop   ecx
380
     pop   ecx
381
     add  esi, 8
381
     add  esi, 8
382
     dec  ecx
382
     dec  ecx
383
     jnz  .loop
383
     jnz  .loop
384
   .end:
384
   .end:
385
 
385
 
386
     ret
386
     ret
387
 
387
 
388
 
388
 
389
sounds_free_memory:
389
sounds_free_memory:
390
 
390
 
391
     mov  ecx, [_count_sounds]
391
     mov  ecx, [_count_sounds]
392
     mov  esi, _array_sounds
392
     mov  esi, _array_sounds
393
   .loop:
393
   .loop:
394
     push  ecx
394
     push  ecx
395
     ; âûäåëèòü ïàìÿòü ïîä çâóê, ïîëó÷èòü óêàçàòåëü, è èçìåíèòü äàííûå â ìàññèâå çâóêîâ
395
     ; âûäåëèòü ïàìÿòü ïîä çâóê, ïîëó÷èòü óêàçàòåëü, è èçìåíèòü äàííûå â ìàññèâå çâóêîâ
396
     mov  eax, 68
396
     mov  eax, 68
397
     mov  ebx, 13
397
     mov  ebx, 13
398
     mov  ecx, [esi]
398
     mov  ecx, [esi]
399
     int  0x40
399
     int  0x40
400
     pop   ecx
400
     pop   ecx
401
     add  esi, 8
401
     add  esi, 8
402
     dec  ecx
402
     dec  ecx
403
     jnz  .loop
403
     jnz  .loop
404
 
404
 
405
 
405
 
406
     ret
406
     ret
407
 
407
 
408
 
408
 
409
init_game_state:		     ; èíèöèàëèçàöèÿ èãðîâûõ äàííûõ
409
init_game_state:		     ; èíèöèàëèçàöèÿ èãðîâûõ äàííûõ
410
    mov  [_game_over_time], 0
410
    mov  [_game_over_time], 0
411
    mov  [_X_plane], INIT_PLANE_X
411
    mov  [_X_plane], INIT_PLANE_X
412
    mov  [_Y_plane], INIT_PLANE_Y
412
    mov  [_Y_plane], INIT_PLANE_Y
413
    mov  [_VX_plane], 4
413
    mov  [_VX_plane], 4
414
    mov  [_plane_state], 0
414
    mov  [_plane_state], 0
415
    mov  [_anim_pos_plane], 0
415
    mov  [_anim_pos_plane], 0
416
    mov  [_plane_health], 100
416
    mov  [_plane_health], 100
417
    mov  [_timer_x2], 0
417
    mov  [_timer_x2], 0
418
    mov  [_timer_x4], 0
418
    mov  [_timer_x4], 0
419
    mov  [_bomb_count], 0
419
    mov  [_bomb_count], 0
420
    mov  [_bomb_delay_time], 0
420
    mov  [_bomb_delay_time], 0
421
    mov  [_addit_VY_plane], 0
421
    mov  [_addit_VY_plane], 0
422
    mov  [_flag_air_raid_warning], 0
422
    mov  [_flag_air_raid_warning], 0
423
 
423
 
424
    call load_level
424
    call load_level
425
 
425
 
426
    ; èíèöèàëèçàöèÿ ìàññèâà âçðûâîâ
426
    ; èíèöèàëèçàöèÿ ìàññèâà âçðûâîâ
427
    mov  ebx, _bang_array
427
    mov  ebx, _bang_array
428
    xor  ecx, ecx
428
    xor  ecx, ecx
429
  igs_bang_array_loop:
429
  igs_bang_array_loop:
430
    cmp  ecx, MAX_BOMBS
430
    cmp  ecx, MAX_BOMBS
431
    jae  igs_bang_array_loop_end
431
    jae  igs_bang_array_loop_end
432
    mov  eax, -1
432
    mov  eax, -1
433
    mov  [ebx], eax
433
    mov  [ebx], eax
434
    add  ebx, 8
434
    add  ebx, 8
435
    inc  ecx
435
    inc  ecx
436
    jmp  igs_bang_array_loop
436
    jmp  igs_bang_array_loop
437
 igs_bang_array_loop_end:
437
 igs_bang_array_loop_end:
438
    ; èíèöèàëèçàöèÿ ìàññèâà çåíèòíûõ ñíàðÿäîâ
438
    ; èíèöèàëèçàöèÿ ìàññèâà çåíèòíûõ ñíàðÿäîâ
439
    mov  ebx, _ackack_bullet
439
    mov  ebx, _ackack_bullet
440
    xor  ecx, ecx
440
    xor  ecx, ecx
441
  igs_bullet_array_loop:
441
  igs_bullet_array_loop:
442
    cmp  ecx, 32
442
    cmp  ecx, 32
443
    jae  igs_bullet_array_loop_end
443
    jae  igs_bullet_array_loop_end
444
    mov  eax, 0
444
    mov  eax, 0
445
    mov  [ebx], eax
445
    mov  [ebx], eax
446
    add  ebx, 4
446
    add  ebx, 4
447
    inc  ecx
447
    inc  ecx
448
    jmp  igs_bullet_array_loop
448
    jmp  igs_bullet_array_loop
449
 igs_bullet_array_loop_end:
449
 igs_bullet_array_loop_end:
450
 
450
 
451
    ; î÷èñòèòü ýêðàí
451
    ; î÷èñòèòü ýêðàí
452
    call draw_window
452
    call draw_window
453
 
453
 
454
    ;çàïóñòèòü çâóê ïðîïåëåðà
454
    ;çàïóñòèòü çâóê ïðîïåëåðà
455
    cmp  [_flag_bomberdatabin_ok], 1
455
    cmp  [_flag_bomberdatabin_ok], 1
456
    jne  @f
456
    jne  @f
457
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 4 ))-1)], [_array_sounds+8*((( 4 ))-1)+4], VOLUME_PLANE, VOLUME_PLANE, SSMIX_CHANMODE_REPEAT
457
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 4 ))-1)], [_array_sounds+8*((( 4 ))-1)+4], VOLUME_PLANE, VOLUME_PLANE, SSMIX_CHANMODE_REPEAT
458
  @@:
458
  @@:
459
    mov  [_channel_sound_plane], eax
459
    mov  [_channel_sound_plane], eax
460
 
460
 
461
    mov  [_channel_sound_arw], -1
461
    mov  [_channel_sound_arw], -1
462
 
462
 
463
    ret
463
    ret
464
 
464
 
465
 
465
 
466
 
466
 
467
game_over:
467
game_over:
468
 
468
 
469
    mov   [_game_over_time], 30   ; çàäàåì çàäåðæêó íà game over
469
    mov   [_game_over_time], 30   ; çàäàåì çàäåðæêó íà game over
470
    ;âûâîä òåêñòà GAME OVER
470
    ;âûâîä òåêñòà GAME OVER
471
    mov  eax,4
471
    mov  eax,4
472
    mov  ebx,(WINDOW_WIDTH/2 - 50)*65536 + 30
472
    mov  ebx,(WINDOW_WIDTH/2 - 50)*65536 + 30
473
    mov  ecx,0x80000000
473
    mov  ecx,0x80000000
474
    mov  edx,_text_game_over
474
    mov  edx,_text_game_over
475
    int  0x40
475
    int  0x40
476
 
476
 
477
    cmp  [_flag_bomberdatabin_ok], 1
477
    cmp  [_flag_bomberdatabin_ok], 1
478
    jne  @f
478
    jne  @f
479
    stdcall  ssmix_stoptrack, [_channel_sound_plane]
479
    stdcall  ssmix_stoptrack, [_channel_sound_plane]
480
  @@:
480
  @@:
481
 
481
 
482
    ret
482
    ret
483
 
483
 
484
 
484
 
485
game_over_timer:	       ; òàéìåð çàâåðøåíèÿ èãðû, ñîçäàåò íåáîëüøóþ ïàóçó ïåðåä îñòàíîâêîé èãðû
485
game_over_timer:	       ; òàéìåð çàâåðøåíèÿ èãðû, ñîçäàåò íåáîëüøóþ ïàóçó ïåðåä îñòàíîâêîé èãðû
486
 
486
 
487
    mov   ebx, [_game_over_time]
487
    mov   ebx, [_game_over_time]
488
    cmp   ebx, 0
488
    cmp   ebx, 0
489
    je	  got_end
489
    je	  got_end
490
    dec   ebx
490
    dec   ebx
491
    mov   [_game_over_time], ebx
491
    mov   [_game_over_time], ebx
492
    cmp   ebx, 0
492
    cmp   ebx, 0
493
    jg	  got_end
493
    jg	  got_end
494
    mov   [_game_state], 0
494
    mov   [_game_state], 0
495
    cmp  [_flag_bomberdatabin_ok], 1
495
    cmp  [_flag_bomberdatabin_ok], 1
496
    jne  @f
496
    jne  @f
497
    call  ssmix_stopalltracks
497
    call  ssmix_stopalltracks
498
  @@:
498
  @@:
499
    call  draw_window
499
    call  draw_window
500
    call  draw_intro
500
    call  draw_intro
501
  got_end:
501
  got_end:
502
 
502
 
503
    ret
503
    ret
504
 
504
 
505
 
505
 
506
next_level:		       ; ñëåäóþùèé óðîâåíü
506
next_level:		       ; ñëåäóþùèé óðîâåíü
507
 
507
 
508
    push  eax
508
    push  eax
509
    mov   [_game_over_time], 1	 ; áûñòðåíüêî çàâåðøèì èãðó
509
    mov   [_game_over_time], 1	 ; áûñòðåíüêî çàâåðøèì èãðó
510
    mov   eax, [_level_num]	 ; íà ñëåäóþùèé óðîâåíü
510
    mov   eax, [_level_num]	 ; íà ñëåäóþùèé óðîâåíü
511
    inc   eax
511
    inc   eax
512
    cmp   eax, MAX_LEVEL
512
    cmp   eax, MAX_LEVEL
513
    jbe   next_level_no_overmax
513
    jbe   next_level_no_overmax
514
    mov   eax, MAX_LEVEL
514
    mov   eax, MAX_LEVEL
515
  next_level_no_overmax:
515
  next_level_no_overmax:
516
    mov   [_level_num], eax
516
    mov   [_level_num], eax
517
    pop   eax
517
    pop   eax
518
 
518
 
519
    ret
519
    ret
520
 
520
 
521
 
521
 
522
 
522
 
523
check_level_complete:		; ïðîâåðêà íà çàâåðøåíèå óðîâíÿ
523
check_level_complete:		; ïðîâåðêà íà çàâåðøåíèå óðîâíÿ
524
 
524
 
525
    push  eax
525
    push  eax
526
    push  ebx
526
    push  ebx
527
    push  ecx
527
    push  ecx
528
    push  edx
528
    push  edx
529
 
529
 
530
    mov  edx, 0        ; ôëàã íàëè÷èÿ ñòðîåíèé â ãîðîäå: 0 - íåò ñòðîåíèé, 1 - åñòü ñòðîåíèÿ
530
    mov  edx, 0        ; ôëàã íàëè÷èÿ ñòðîåíèé â ãîðîäå: 0 - íåò ñòðîåíèé, 1 - åñòü ñòðîåíèÿ
531
    mov  ebx, _city
531
    mov  ebx, _city
532
    xor  ecx, ecx
532
    xor  ecx, ecx
533
  clc_loop:
533
  clc_loop:
534
    cmp  ecx, 32
534
    cmp  ecx, 32
535
    jae  clc_loop_end
535
    jae  clc_loop_end
536
    xor  eax, eax
536
    xor  eax, eax
537
    mov  ax, [ebx]
537
    mov  ax, [ebx]
538
    cmp  eax, 0
538
    cmp  eax, 0
539
    je	 clc_no_buildings
539
    je	 clc_no_buildings
540
    mov  edx, 1
540
    mov  edx, 1
541
    jmp  clc_loop_end
541
    jmp  clc_loop_end
542
  clc_no_buildings:
542
  clc_no_buildings:
543
    add  ebx, 2
543
    add  ebx, 2
544
    inc  ecx
544
    inc  ecx
545
    jmp  clc_loop
545
    jmp  clc_loop
546
  clc_loop_end :
546
  clc_loop_end :
547
    cmp  edx, 0
547
    cmp  edx, 0
548
    jne  clc_end
548
    jne  clc_end
549
    ; óðîâåíü çàâåðøåí - èäåì íà ïîñàäêó
549
    ; óðîâåíü çàâåðøåí - èäåì íà ïîñàäêó
550
    ;âûâîä òåêñòà LEVEL COMPLETE
550
    ;âûâîä òåêñòà LEVEL COMPLETE
551
    mov  eax,4
551
    mov  eax,4
552
    mov  ebx,(WINDOW_WIDTH/2 - 70)*65536 + 30
552
    mov  ebx,(WINDOW_WIDTH/2 - 70)*65536 + 30
553
    mov  ecx,0x80000000
553
    mov  ecx,0x80000000
554
    mov  edx,_text_level_complete
554
    mov  edx,_text_level_complete
555
    int  0x40
555
    int  0x40
556
    ; áûñòðîå ñíèæåíèå ñàìîëåòà
556
    ; áûñòðîå ñíèæåíèå ñàìîëåòà
557
    mov  [_addit_VY_plane], 3	   ; çàäàòü ñêîðîñòü áûñòðîãî ñíèæåíèÿ
557
    mov  [_addit_VY_plane], 3	   ; çàäàòü ñêîðîñòü áûñòðîãî ñíèæåíèÿ
558
    ; âûêëþ÷èòü ñèðåíó
558
    ; âûêëþ÷èòü ñèðåíó
559
    call air_raid_warning_off
559
    call air_raid_warning_off
560
  clc_end:
560
  clc_end:
561
 
561
 
562
    pop  edx
562
    pop  edx
563
    pop  ecx
563
    pop  ecx
564
    pop  ebx
564
    pop  ebx
565
    pop  eax
565
    pop  eax
566
 
566
 
567
    ret
567
    ret
568
 
568
 
569
 
569
 
570
draw_plane_health:
570
draw_plane_health:
571
 
571
 
572
   mov	ebx, 5*0x00010000 + 100
572
   mov	ebx, 5*0x00010000 + 100
573
   mov	ecx, 5*0x00010000 + 10
573
   mov	ecx, 5*0x00010000 + 10
574
   mov	edx, 0x00000000
574
   mov	edx, 0x00000000
575
   mov	eax, 13
575
   mov	eax, 13
576
   int	0x40
576
   int	0x40
577
 
577
 
578
   mov	ebx, [_plane_health]
578
   mov	ebx, [_plane_health]
579
   add	ebx, 5*0x00010000
579
   add	ebx, 5*0x00010000
580
   mov	edx, 0x00008000
580
   mov	edx, 0x00008000
581
   int	0x40
581
   int	0x40
582
 
582
 
583
   ret
583
   ret
584
 
584
 
585
 
585
 
586
air_raid_warning_on:
586
air_raid_warning_on:
587
   push eax
587
   push eax
588
   cmp	[_flag_air_raid_warning], 1
588
   cmp	[_flag_air_raid_warning], 1
589
   je	.end
589
   je	.end
590
   mov	[_flag_air_raid_warning], 1
590
   mov	[_flag_air_raid_warning], 1
591
   cmp	[_flag_bomberdatabin_ok], 1
591
   cmp	[_flag_bomberdatabin_ok], 1
592
   jne	@f
592
   jne	@f
593
   stdcall  ssmix_playtrack, [_array_sounds+8*((( 5 ))-1)], [_array_sounds+8*((( 5 ))-1)+4], VOLUME_ARW, VOLUME_ARW, SSMIX_CHANMODE_REPEAT
593
   stdcall  ssmix_playtrack, [_array_sounds+8*((( 5 ))-1)], [_array_sounds+8*((( 5 ))-1)+4], VOLUME_ARW, VOLUME_ARW, SSMIX_CHANMODE_REPEAT
594
 @@:
594
 @@:
595
   mov	[_channel_sound_arw], eax
595
   mov	[_channel_sound_arw], eax
596
 .end:
596
 .end:
597
   pop	eax
597
   pop	eax
598
   ret
598
   ret
599
 
599
 
600
 
600
 
601
air_raid_warning_off:
601
air_raid_warning_off:
602
   cmp	[_flag_air_raid_warning], 0
602
   cmp	[_flag_air_raid_warning], 0
603
   je	.end
603
   je	.end
604
   mov	[_flag_air_raid_warning], 0
604
   mov	[_flag_air_raid_warning], 0
605
   cmp	[_flag_bomberdatabin_ok], 1
605
   cmp	[_flag_bomberdatabin_ok], 1
606
   jne	.end
606
   jne	.end
607
   stdcall  ssmix_stoptrack, [_channel_sound_arw]
607
   stdcall  ssmix_stoptrack, [_channel_sound_arw]
608
 .end:
608
 .end:
609
   ret
609
   ret
610
 
610
 
611
 
611
 
612
;======================================= ÑÀÌÎËÅÒ ======================================
612
;======================================= ÑÀÌÎËÅÒ ======================================
613
 
613
 
614
 
614
 
615
flight_control_plane:  ; ïðîöåäóðà óïðàâëåíèÿ ïîëåòîì ñàìîëåòà
615
flight_control_plane:  ; ïðîöåäóðà óïðàâëåíèÿ ïîëåòîì ñàìîëåòà
616
 
616
 
617
    mov  eax,[_X_plane]
617
    mov  eax,[_X_plane]
618
    add  eax, [_VX_plane]
618
    add  eax, [_VX_plane]
619
    mov  [_X_plane], eax
619
    mov  [_X_plane], eax
620
 
620
 
621
    cmp  eax, WINDOW_WIDTH-60-32
621
    cmp  eax, WINDOW_WIDTH-60-32
622
    jl	 fcp_set_utunr_rl
622
    jl	 fcp_set_utunr_rl
623
    mov  ebx, [_plane_state]
623
    mov  ebx, [_plane_state]
624
    cmp  ebx, 0
624
    cmp  ebx, 0
625
    jne  fcp_set_utunr_rl
625
    jne  fcp_set_utunr_rl
626
    mov  [_plane_state],2
626
    mov  [_plane_state],2
627
    mov  [_plane_state_step], 0
627
    mov  [_plane_state_step], 0
628
  fcp_set_utunr_rl:
628
  fcp_set_utunr_rl:
629
 
629
 
630
    cmp  eax, 60
630
    cmp  eax, 60
631
    jg	 fcp_set_utunr_lr
631
    jg	 fcp_set_utunr_lr
632
    mov  ebx, [_plane_state]
632
    mov  ebx, [_plane_state]
633
    cmp  ebx, 1
633
    cmp  ebx, 1
634
    jne  fcp_set_utunr_lr
634
    jne  fcp_set_utunr_lr
635
    mov  [_plane_state],3
635
    mov  [_plane_state],3
636
    mov  [_plane_state_step], 0
636
    mov  [_plane_state_step], 0
637
  fcp_set_utunr_lr:
637
  fcp_set_utunr_lr:
638
 
638
 
639
  ; äàëåå êîä âûïîëíÿåòñÿ â 2 ðàçà ìåäëåííåé
639
  ; äàëåå êîä âûïîëíÿåòñÿ â 2 ðàçà ìåäëåííåé
640
    mov eax, [_timer_x2]
640
    mov eax, [_timer_x2]
641
    cmp eax, 0
641
    cmp eax, 0
642
    jne fcp_timex2_end
642
    jne fcp_timex2_end
643
 
643
 
644
    mov  eax, [_plane_state]
644
    mov  eax, [_plane_state]
645
    cmp  eax, 2 		   ; åñëè äåëàåì ðàçâîðîò íàëåâî
645
    cmp  eax, 2 		   ; åñëè äåëàåì ðàçâîðîò íàëåâî
646
    jne  fcp_uturn_rl_end
646
    jne  fcp_uturn_rl_end
647
    mov  eax, [_plane_state_step]
647
    mov  eax, [_plane_state_step]
648
    mov  ebx, 4
648
    mov  ebx, 4
649
    sub  ebx, eax
649
    sub  ebx, eax
650
    mov  [_VX_plane], ebx	    ; òî ðàñ÷èòûâàåì ñêîðîñòü èñõîäÿ èç òåêóùåãî øàãà ñîñòîÿíèÿ
650
    mov  [_VX_plane], ebx	    ; òî ðàñ÷èòûâàåì ñêîðîñòü èñõîäÿ èç òåêóùåãî øàãà ñîñòîÿíèÿ
651
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
651
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
652
    mov  [_plane_state_step], eax
652
    mov  [_plane_state_step], eax
653
    cmp  eax, 9 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
653
    cmp  eax, 9 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
654
    jne  fcp_uturn_rl_end
654
    jne  fcp_uturn_rl_end
655
    mov  [_plane_state], 1	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
655
    mov  [_plane_state], 1	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
656
  fcp_uturn_rl_end:
656
  fcp_uturn_rl_end:
657
 
657
 
658
 
658
 
659
    mov  eax, [_plane_state]
659
    mov  eax, [_plane_state]
660
    cmp  eax, 3 		   ; åñëè äåëàåì ðàçâîðîò íàïðàâî
660
    cmp  eax, 3 		   ; åñëè äåëàåì ðàçâîðîò íàïðàâî
661
    jne  fcp_uturn_lr_end
661
    jne  fcp_uturn_lr_end
662
    mov  eax, [_plane_state_step]
662
    mov  eax, [_plane_state_step]
663
    mov  ebx, -4
663
    mov  ebx, -4
664
    add  ebx, eax
664
    add  ebx, eax
665
    mov  [_VX_plane], ebx	    ; òî ðàñ÷èòûâàåì ñêîðîñòü èñõîäÿ èç òåêóùåãî øàãà ñîñòîÿíèÿ
665
    mov  [_VX_plane], ebx	    ; òî ðàñ÷èòûâàåì ñêîðîñòü èñõîäÿ èç òåêóùåãî øàãà ñîñòîÿíèÿ
666
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
666
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
667
    mov  [_plane_state_step], eax
667
    mov  [_plane_state_step], eax
668
    cmp  eax, 9 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
668
    cmp  eax, 9 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
669
    jne  fcp_uturn_lr_end
669
    jne  fcp_uturn_lr_end
670
    mov  [_plane_state], 0	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
670
    mov  [_plane_state], 0	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
671
  fcp_uturn_lr_end:
671
  fcp_uturn_lr_end:
672
 
672
 
673
    mov  eax, [_plane_state]
673
    mov  eax, [_plane_state]
674
    cmp  eax, 4 		    ; åñëè äåëàåì áî÷êó âïðàâî
674
    cmp  eax, 4 		    ; åñëè äåëàåì áî÷êó âïðàâî
675
    jne  fcp_barrel_r_end
675
    jne  fcp_barrel_r_end
676
    mov  eax, [_plane_state_step]
676
    mov  eax, [_plane_state_step]
677
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
677
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
678
    mov  [_plane_state_step], eax
678
    mov  [_plane_state_step], eax
679
    cmp  eax, 8 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
679
    cmp  eax, 8 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
680
    jne  fcp_barrel_r_end
680
    jne  fcp_barrel_r_end
681
    mov  [_plane_state], 0	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
681
    mov  [_plane_state], 0	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
682
  fcp_barrel_r_end :
682
  fcp_barrel_r_end :
683
 
683
 
684
    mov  eax, [_plane_state]
684
    mov  eax, [_plane_state]
685
    cmp  eax, 5 		    ; åñëè äåëàåì áî÷êó âëåâî
685
    cmp  eax, 5 		    ; åñëè äåëàåì áî÷êó âëåâî
686
    jne  fcp_barrel_l_end
686
    jne  fcp_barrel_l_end
687
    mov  eax, [_plane_state_step]
687
    mov  eax, [_plane_state_step]
688
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
688
    inc  eax			    ; ïåðåõîäèì íà ñëåäóþùèé øàã ñîñòîÿíèÿ
689
    mov  [_plane_state_step], eax
689
    mov  [_plane_state_step], eax
690
    cmp  eax, 8 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
690
    cmp  eax, 8 		    ; ïðîâåðÿåì, çàêîí÷èëèñü ëè øàãè
691
    jne  fcp_barrel_l_end
691
    jne  fcp_barrel_l_end
692
    mov  [_plane_state], 1	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
692
    mov  [_plane_state], 1	    ; åñëè äà òî ïåðåâîäèì ñîñòîÿíèå íà ïðÿìîé ïîëåò
693
  fcp_barrel_l_end:
693
  fcp_barrel_l_end:
694
 
694
 
695
    call animation_plane
695
    call animation_plane
696
 
696
 
697
  fcp_timex2_end:
697
  fcp_timex2_end:
698
 
698
 
699
    ; äàëåå êîä âûïîëíÿåòñÿ â 4 ðàçà ìåäëåííåé
699
    ; äàëåå êîä âûïîëíÿåòñÿ â 4 ðàçà ìåäëåííåé
700
    mov eax, [_timer_x4]
700
    mov eax, [_timer_x4]
701
    cmp eax, 0
701
    cmp eax, 0
702
    jne fcp_timex4_end
702
    jne fcp_timex4_end
703
 
703
 
704
    ; ìåäëåííîå ñíèæåíèå ñàìîëåòà
704
    ; ìåäëåííîå ñíèæåíèå ñàìîëåòà
705
    mov  eax,[_Y_plane]
705
    mov  eax,[_Y_plane]
706
    add  eax, 1
706
    add  eax, 1
707
    mov  [_Y_plane], eax
707
    mov  [_Y_plane], eax
708
 
708
 
709
  fcp_timex4_end:
709
  fcp_timex4_end:
710
 
710
 
711
    ; áûñòðîå ñíèæåíèå ñàìîëåòà
711
    ; áûñòðîå ñíèæåíèå ñàìîëåòà
712
 
712
 
713
    mov  eax,[_Y_plane]
713
    mov  eax,[_Y_plane]
714
    mov  ebx,[_addit_VY_plane]
714
    mov  ebx,[_addit_VY_plane]
715
    add  eax, ebx
715
    add  eax, ebx
716
    mov  [_Y_plane], eax
716
    mov  [_Y_plane], eax
717
 
717
 
718
    ; êîíòðîëü âûñîòû ñàìîëåòà, ïîñàäêà
718
    ; êîíòðîëü âûñîòû ñàìîëåòà, ïîñàäêà
719
    mov  eax,[_Y_plane]
719
    mov  eax,[_Y_plane]
720
    cmp  eax,  WINDOW_HEIGHT - GROUNG_HEIGHT - 32
720
    cmp  eax,  WINDOW_HEIGHT - GROUNG_HEIGHT - 32
721
    jl	 fcp_end_plane_landing
721
    jl	 fcp_end_plane_landing
722
    mov  [_addit_VY_plane], 0	  ; ïðåêðàòèòü áûñòðîå ñíèæåíèå
722
    mov  [_addit_VY_plane], 0	  ; ïðåêðàòèòü áûñòðîå ñíèæåíèå
723
    mov  ebx, [_plane_state]
723
    mov  ebx, [_plane_state]
724
    cmp  ebx, 6
724
    cmp  ebx, 6
725
    je	fcp_end_plane_landing
725
    je	fcp_end_plane_landing
726
    cmp  ebx, 0
726
    cmp  ebx, 0
727
    jne  fcp_horiz_fly
727
    jne  fcp_horiz_fly
728
    mov  [_plane_state], 6	  ; ðåæèì ïîñàäêè
728
    mov  [_plane_state], 6	  ; ðåæèì ïîñàäêè
729
    ;jmp  fcp_end_plane_landing
729
    ;jmp  fcp_end_plane_landing
730
  fcp_horiz_fly:
730
  fcp_horiz_fly:
731
    mov  eax,  WINDOW_HEIGHT - GROUNG_HEIGHT - 32
731
    mov  eax,  WINDOW_HEIGHT - GROUNG_HEIGHT - 32
732
  fcp_end_plane_landing:
732
  fcp_end_plane_landing:
733
    cmp  eax, WINDOW_HEIGHT - GROUNG_HEIGHT - 32 + 6
733
    cmp  eax, WINDOW_HEIGHT - GROUNG_HEIGHT - 32 + 6
734
    jle  fcp_no_plane_underground	  ; ïðîâåðêà íà òî, ÷òîáû ñàìîëåò íå óøåë "ïîä çåìëþ"
734
    jle  fcp_no_plane_underground	  ; ïðîâåðêà íà òî, ÷òîáû ñàìîëåò íå óøåë "ïîä çåìëþ"
735
    mov  eax, WINDOW_HEIGHT - GROUNG_HEIGHT - 32 + 6
735
    mov  eax, WINDOW_HEIGHT - GROUNG_HEIGHT - 32 + 6
736
    mov  ebx, [_X_plane]
736
    mov  ebx, [_X_plane]
737
    cmp  ebx, WINDOW_WIDTH - 60-32
737
    cmp  ebx, WINDOW_WIDTH - 60-32
738
    jl	 fcp_no_end_level		    ; ïðîâåðêà íà òî, ÷òî äîêàòèëñÿ äî êîíöà ïîñàäî÷íîé ïîëîñû
738
    jl	 fcp_no_end_level		    ; ïðîâåðêà íà òî, ÷òî äîêàòèëñÿ äî êîíöà ïîñàäî÷íîé ïîëîñû
739
    ; çàâåðøåíèå óðîâíÿ
739
    ; çàâåðøåíèå óðîâíÿ
740
    call  next_level			     ; ïåðåõîä íà ñëåäóþùèé óðîâåíü
740
    call  next_level			     ; ïåðåõîä íà ñëåäóþùèé óðîâåíü
741
  fcp_no_end_level:
741
  fcp_no_end_level:
742
  fcp_no_plane_underground:
742
  fcp_no_plane_underground:
743
    mov  [_Y_plane], eax
743
    mov  [_Y_plane], eax
744
 
744
 
745
    ret
745
    ret
746
 
746
 
747
 
747
 
748
 
748
 
749
animation_plane:
749
animation_plane:
750
 
750
 
751
    ; àíèìàöèÿ ñàìîëåòà
751
    ; àíèìàöèÿ ñàìîëåòà
752
 
752
 
753
    ; ïîëåò âïðàâî
753
    ; ïîëåò âïðàâî
754
    mov  eax, [_plane_state]
754
    mov  eax, [_plane_state]
755
    cmp  eax, 0
755
    cmp  eax, 0
756
    jne  ap_state0_end
756
    jne  ap_state0_end
757
    mov  [_anim_pos_plane], 0
757
    mov  [_anim_pos_plane], 0
758
  ap_state0_end:
758
  ap_state0_end:
759
 
759
 
760
    ; ïîëåò âëåâî
760
    ; ïîëåò âëåâî
761
    mov  eax, [_plane_state]
761
    mov  eax, [_plane_state]
762
    cmp  eax, 1
762
    cmp  eax, 1
763
    jne  ap_state1_end
763
    jne  ap_state1_end
764
    mov  [_anim_pos_plane], 8
764
    mov  [_anim_pos_plane], 8
765
  ap_state1_end:
765
  ap_state1_end:
766
 
766
 
767
    ; àíèìàöèÿ äëÿ ðàçâîðîòîâ è áî÷åê
767
    ; àíèìàöèÿ äëÿ ðàçâîðîòîâ è áî÷åê
768
    mov  eax, [_plane_state]
768
    mov  eax, [_plane_state]
769
    cmp  eax, 5
769
    cmp  eax, 5
770
    ja	 ap_state2345_end
770
    ja	 ap_state2345_end
771
    cmp  eax, 2
771
    cmp  eax, 2
772
    jb	 ap_state2345_end
772
    jb	 ap_state2345_end
773
    sub  eax, 2
773
    sub  eax, 2
774
    mov  ebx, eax	   ; óìíîæèòü eax íà 9
774
    mov  ebx, eax	   ; óìíîæèòü eax íà 9
775
    shl  eax, 3
775
    shl  eax, 3
776
    add  eax, ebx
776
    add  eax, ebx
777
    add  eax, [_plane_state_step]    ; ïðèáàâèòü íîìåð øàãà
777
    add  eax, [_plane_state_step]    ; ïðèáàâèòü íîìåð øàãà
778
    shl  eax, 2 		     ; óìíîæèòü íà 4
778
    shl  eax, 2 		     ; óìíîæèòü íà 4
779
    add  eax, _anim_array_uturn_rl   ; ïîëó÷àåòñÿ ñìåùåíèå äëÿ íîìåðà òðåáóåìîãî êàäðà
779
    add  eax, _anim_array_uturn_rl   ; ïîëó÷àåòñÿ ñìåùåíèå äëÿ íîìåðà òðåáóåìîãî êàäðà
780
    mov  ebx, [eax]
780
    mov  ebx, [eax]
781
    mov  [_anim_pos_plane], ebx      ; çäåñü âûòàñêèâàåì ñàì íîìåð
781
    mov  [_anim_pos_plane], ebx      ; çäåñü âûòàñêèâàåì ñàì íîìåð
782
  ap_state2345_end:
782
  ap_state2345_end:
783
 
783
 
784
    ; ïîñàäêà (òîëüêî âïðàâî)
784
    ; ïîñàäêà (òîëüêî âïðàâî)
785
    mov  eax, [_plane_state]
785
    mov  eax, [_plane_state]
786
    cmp  eax, 6
786
    cmp  eax, 6
787
    jne  ap_state6_end
787
    jne  ap_state6_end
788
    mov  [_anim_pos_plane], 22
788
    mov  [_anim_pos_plane], 22
789
  ap_state6_end:
789
  ap_state6_end:
790
 
790
 
791
     ret
791
     ret
792
 
792
 
793
 
793
 
794
 
794
 
795
draw_plane:
795
draw_plane:
796
 
796
 
797
    ; ñòåðåòü ïðåäûäóùåå èçîáðàæåíèå
797
    ; ñòåðåòü ïðåäûäóùåå èçîáðàæåíèå
798
    mov  eax, 13
798
    mov  eax, 13
799
    mov  ebx,[_last_XY_plane]
799
    mov  ebx,[_last_XY_plane]
800
    and  ebx, 0xffff0000
800
    and  ebx, 0xffff0000
801
    add  ebx, 32
801
    add  ebx, 32
802
    mov  ecx,[_last_XY_plane]
802
    mov  ecx,[_last_XY_plane]
803
    shl  ecx, 16
803
    shl  ecx, 16
804
    add  ecx, 32
804
    add  ecx, 32
805
    mov  edx, BACK_COLOR
805
    mov  edx, BACK_COLOR
806
    int  0x40
806
    int  0x40
807
 
807
 
808
    ; ðàñ÷åò àäðåñà êàðòèíêè èñõîäÿ èç íîìåðà êàäðà _anim_pos_plane
808
    ; ðàñ÷åò àäðåñà êàðòèíêè èñõîäÿ èç íîìåðà êàäðà _anim_pos_plane
809
    mov  ebx, [_anim_pos_plane]
809
    mov  ebx, [_anim_pos_plane]
810
    shl  ebx, 10
810
    shl  ebx, 10
811
    mov  eax, ebx
811
    mov  eax, ebx
812
    add  ebx, eax
812
    add  ebx, eax
813
    add  ebx, eax
813
    add  ebx, eax
814
    add  ebx, bmp_plane
814
    add  ebx, bmp_plane
815
 
815
 
816
    ; ïîäãîòîâêà êîîðäèíàò
816
    ; ïîäãîòîâêà êîîðäèíàò
817
    mov  edx,[_X_plane]
817
    mov  edx,[_X_plane]
818
    shl  edx, 16
818
    shl  edx, 16
819
    add  edx,[_Y_plane]
819
    add  edx,[_Y_plane]
820
    mov  [_last_XY_plane], edx
820
    mov  [_last_XY_plane], edx
821
 
821
 
822
    ; âûâîä êàðòèíêè
822
    ; âûâîä êàðòèíêè
823
    mov  eax,7
823
    mov  eax,7
824
    mov  ecx,32*65536+32
824
    mov  ecx,32*65536+32
825
    int  0x40
825
    int  0x40
826
 
826
 
827
    ret
827
    ret
828
 
828
 
829
 
829
 
830
plane_interaction:
830
plane_interaction:
831
 
831
 
832
    push  eax
832
    push  eax
833
    push  ebx
833
    push  ebx
834
    push  ecx
834
    push  ecx
835
    push  edx
835
    push  edx
836
 
836
 
837
    mov   eax, [_X_plane]
837
    mov   eax, [_X_plane]
838
    mov   ebx, [_Y_plane]
838
    mov   ebx, [_Y_plane]
839
    add   ebx, 16
839
    add   ebx, 16
840
    mov   ecx, [_VX_plane]
840
    mov   ecx, [_VX_plane]
841
    cmp   ecx, 0
841
    cmp   ecx, 0
842
    jl	  pi_no_positive_vx
842
    jl	  pi_no_positive_vx
843
    add   eax, 32		; çäåñü â çàâèñèìîñòè îò íàïðàâëåíèÿ ïîëåòà îïðåäåëÿåì òî÷êó âçàèìîäåéñòâèÿ ñ ãîðîäîì
843
    add   eax, 32		; çäåñü â çàâèñèìîñòè îò íàïðàâëåíèÿ ïîëåòà îïðåäåëÿåì òî÷êó âçàèìîäåéñòâèÿ ñ ãîðîäîì
844
   pi_no_positive_vx:
844
   pi_no_positive_vx:
845
    ; òåïåðü â eax è ebx êîîðäèíàòû X,Y  òî÷êè âçàèìîäåéñòâèÿ ñàìîëåòà ñ ãîðîäîì
845
    ; òåïåðü â eax è ebx êîîðäèíàòû X,Y  òî÷êè âçàèìîäåéñòâèÿ ñàìîëåòà ñ ãîðîäîì
846
    mov   edx, eax
846
    mov   edx, eax
847
    sub   eax, CITY_OFFSET
847
    sub   eax, CITY_OFFSET
848
    ; ïðîâåðêà íà âûëåò çà ïðåäåëû ãîðîäà
848
    ; ïðîâåðêà íà âûëåò çà ïðåäåëû ãîðîäà
849
    cmp   eax, 0
849
    cmp   eax, 0
850
    jl	  pi_out_of_city
850
    jl	  pi_out_of_city
851
    cmp   eax, 32*20
851
    cmp   eax, 32*20
852
    jg	  pi_out_of_city
852
    jg	  pi_out_of_city
853
    ; ïðîâåðêà íà âçàèìîäåéñòâèå ñ ãîðîäîì
853
    ; ïðîâåðêà íà âçàèìîäåéñòâèå ñ ãîðîäîì
854
    add   eax, 10	 ; äåëèì êîîðäèíàòó X íà 20
854
    add   eax, 10	 ; äåëèì êîîðäèíàòó X íà 20
855
    mov   ecx, eax
855
    mov   ecx, eax
856
    shr   eax, 4
856
    shr   eax, 4
857
    shr   ecx, 6
857
    shr   ecx, 6
858
    sub   eax, ecx
858
    sub   eax, ecx
859
    shr   ecx, 2
859
    shr   ecx, 2
860
    add   eax, ecx
860
    add   eax, ecx
861
    shr   ecx, 2
861
    shr   ecx, 2
862
    sub   eax, ecx
862
    sub   eax, ecx
863
    dec   eax	      ; â eax íîìåð ñòîëáöà ãîðîäà ïî êîòîðîìó ëåòèò áîìáà
863
    dec   eax	      ; â eax íîìåð ñòîëáöà ãîðîäà ïî êîòîðîìó ëåòèò áîìáà
864
    mov   esi, eax
864
    mov   esi, eax
865
    shl   esi, 1
865
    shl   esi, 1
866
    add   esi, _city	; â esi óêàçàòåëü íà âûñîòó ïîñòðîéêè â äàííîì ñòîëáöå
866
    add   esi, _city	; â esi óêàçàòåëü íà âûñîòó ïîñòðîéêè â äàííîì ñòîëáöå
867
    mov   eax, edx
867
    mov   eax, edx
868
    ; òåïåðü ñðàâíèì êîîðäèíàòó Y âåðøèíû ïîñòðîéêè ñ êîîðäèíàòîé Y òî÷êè âçàèìîäåéñòâèÿ ñàìîëåòà
868
    ; òåïåðü ñðàâíèì êîîðäèíàòó Y âåðøèíû ïîñòðîéêè ñ êîîðäèíàòîé Y òî÷êè âçàèìîäåéñòâèÿ ñàìîëåòà
869
    xor   ecx, ecx
869
    xor   ecx, ecx
870
    mov   cx, [esi]
870
    mov   cx, [esi]
871
    mov   edx, ecx
871
    mov   edx, ecx
872
    shl   ecx, 4
872
    shl   ecx, 4
873
    shl   edx, 2
873
    shl   edx, 2
874
    add   ecx, edx
874
    add   ecx, edx
875
    mov   edx, WINDOW_HEIGHT - GROUNG_HEIGHT
875
    mov   edx, WINDOW_HEIGHT - GROUNG_HEIGHT
876
    sub   edx, ecx	       ; â edx êîîðäèíàòà Y âåðøèíû ïîñòðîéêè
876
    sub   edx, ecx	       ; â edx êîîðäèíàòà Y âåðøèíû ïîñòðîéêè
877
    cmp   ebx, edx
877
    cmp   ebx, edx
878
    jl	  pi_no_crash
878
    jl	  pi_no_crash
879
    ; åñëè ñòîëêíîâåíèå ïðîèçîøëî
879
    ; åñëè ñòîëêíîâåíèå ïðîèçîøëî
880
    mov   [_plane_health], 0
880
    mov   [_plane_health], 0
881
    call  bang_add	    ; äåëàåì âçðûâ
881
    call  bang_add	    ; äåëàåì âçðûâ
882
    call  game_over	    ; çàâåðøåíèå èãðû
882
    call  game_over	    ; çàâåðøåíèå èãðû
883
  pi_no_crash:
883
  pi_no_crash:
884
 
884
 
885
  pi_out_of_city:
885
  pi_out_of_city:
886
 
886
 
887
    pop   edx
887
    pop   edx
888
    pop   ecx
888
    pop   ecx
889
    pop   ebx
889
    pop   ebx
890
    pop   eax
890
    pop   eax
891
 
891
 
892
    ret
892
    ret
893
 
893
 
894
 
894
 
895
; ================================== ÁÎÌÁÛ ===========================================
895
; ================================== ÁÎÌÁÛ ===========================================
896
 
896
 
897
bomb_drop:	    ; ïðîöåäóðà "áðîñàíèÿ áîìáû". ñîçäàåò íîâóþ áîìáó, çàäàåò äëÿ íåå íà÷àëüíûå ïàðàìåòðû.
897
bomb_drop:	    ; ïðîöåäóðà "áðîñàíèÿ áîìáû". ñîçäàåò íîâóþ áîìáó, çàäàåò äëÿ íåå íà÷àëüíûå ïàðàìåòðû.
898
    ; ïðîâåðêà íà çäîðîâüå ñàìîëåòà
898
    ; ïðîâåðêà íà çäîðîâüå ñàìîëåòà
899
    mov  eax, [_plane_health]
899
    mov  eax, [_plane_health]
900
    cmp  eax, 0
900
    cmp  eax, 0
901
    jle  bomb_drop_end
901
    jle  bomb_drop_end
902
    ; ïðîâåðèòü íà äîïóñòèìûå ñîñòîÿíèÿ ñàìîëåòà (íåëüçÿ âî âðåìÿ áî÷êè)
902
    ; ïðîâåðèòü íà äîïóñòèìûå ñîñòîÿíèÿ ñàìîëåòà (íåëüçÿ âî âðåìÿ áî÷êè)
903
    mov  eax, [_plane_state]
903
    mov  eax, [_plane_state]
904
    cmp  eax, 3
904
    cmp  eax, 3
905
    ja	 bomb_drop_end
905
    ja	 bomb_drop_end
906
    ; ïðîâåðèòü âûäåðæàí ëè èíòåðâàë âðåìåíè ìåæäó áðîñêàìè
906
    ; ïðîâåðèòü âûäåðæàí ëè èíòåðâàë âðåìåíè ìåæäó áðîñêàìè
907
    mov  eax, [_bomb_delay_time]
907
    mov  eax, [_bomb_delay_time]
908
    cmp  eax, 0
908
    cmp  eax, 0
909
    jne  bomb_drop_end
909
    jne  bomb_drop_end
910
    mov  [_bomb_delay_time], BOMB_DELAY
910
    mov  [_bomb_delay_time], BOMB_DELAY
911
    ; ñîáñòâåííî, áðîñàåì áîìáó
911
    ; ñîáñòâåííî, áðîñàåì áîìáó
912
    mov  eax, [_bomb_count]
912
    mov  eax, [_bomb_count]
913
    cmp  eax, MAX_BOMBS-1
913
    cmp  eax, MAX_BOMBS-1
914
    jae  bomb_drop_end
914
    jae  bomb_drop_end
915
    inc  eax
915
    inc  eax
916
    mov  [_bomb_count], eax
916
    mov  [_bomb_count], eax
917
    dec  eax
917
    dec  eax
918
    shl  eax, 4
918
    shl  eax, 4
919
    add  eax, _bomb_array    ; çäåñü â åàõ ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
919
    add  eax, _bomb_array    ; çäåñü â åàõ ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
920
 
920
 
921
    mov  ebx, [_X_plane]
921
    mov  ebx, [_X_plane]
922
    mov  [eax], ebx	       ; çàäàíèå êîîðäèíàòû X
922
    mov  [eax], ebx	       ; çàäàíèå êîîðäèíàòû X
923
    add  eax, 4
923
    add  eax, 4
924
    mov  ebx, [_Y_plane]
924
    mov  ebx, [_Y_plane]
925
    add  ebx, 30
925
    add  ebx, 30
926
    mov  [eax], ebx	       ; çàäàíèå êîîðäèíàòû Y
926
    mov  [eax], ebx	       ; çàäàíèå êîîðäèíàòû Y
927
 
927
 
928
    add  eax, 4
928
    add  eax, 4
929
    mov  ebx, [_VX_plane]
929
    mov  ebx, [_VX_plane]
930
    cmp  ebx, 0
930
    cmp  ebx, 0
931
    jge  bomb_drop_pos_dir_vx
931
    jge  bomb_drop_pos_dir_vx
932
  bomb_drop_neg_dir_vx:
932
  bomb_drop_neg_dir_vx:
933
    neg  ebx
933
    neg  ebx
934
    shr  ebx, 1
934
    shr  ebx, 1
935
    neg  ebx
935
    neg  ebx
936
    jmp  bomb_drop_dir_vx_end
936
    jmp  bomb_drop_dir_vx_end
937
  bomb_drop_pos_dir_vx:
937
  bomb_drop_pos_dir_vx:
938
    shr  ebx, 1
938
    shr  ebx, 1
939
  bomb_drop_dir_vx_end:
939
  bomb_drop_dir_vx_end:
940
    mov  [eax], ebx	       ; çàäàíèå âåêòîðà ñêîðîñòè ïî X
940
    mov  [eax], ebx	       ; çàäàíèå âåêòîðà ñêîðîñòè ïî X
941
 
941
 
942
    add  eax, 4
942
    add  eax, 4
943
    mov  ebx, 0
943
    mov  ebx, 0
944
    mov  [eax], ebx	       ; çàäàíèå âåêòîðà ñêîðîñòè ïî Y
944
    mov  [eax], ebx	       ; çàäàíèå âåêòîðà ñêîðîñòè ïî Y
945
 
945
 
946
    push  ecx
946
    push  ecx
947
    mov   ecx, [_bomb_count]
947
    mov   ecx, [_bomb_count]
948
    dec   ecx
948
    dec   ecx
949
    call  bombfly_sound_start
949
    call  bombfly_sound_start
950
    pop   ecx
950
    pop   ecx
951
 
951
 
952
  bomb_drop_end:
952
  bomb_drop_end:
953
 
953
 
954
    ret
954
    ret
955
 
955
 
956
 
956
 
957
bomb_proc:
957
bomb_proc:
958
    ; òàéìåð èíòåðâàëà ìåæäó áðîñàíèÿìè áîìá
958
    ; òàéìåð èíòåðâàëà ìåæäó áðîñàíèÿìè áîìá
959
    mov  eax, [_bomb_delay_time]
959
    mov  eax, [_bomb_delay_time]
960
    cmp  eax, 0
960
    cmp  eax, 0
961
    je	 bomb_proc_delay_timer_end
961
    je	 bomb_proc_delay_timer_end
962
    dec  eax
962
    dec  eax
963
    mov  [_bomb_delay_time], eax
963
    mov  [_bomb_delay_time], eax
964
  bomb_proc_delay_timer_end:
964
  bomb_proc_delay_timer_end:
965
    ; îáðàáîòêà äâèæåíèÿ áîìá
965
    ; îáðàáîòêà äâèæåíèÿ áîìá
966
    mov  eax, [_bomb_count]
966
    mov  eax, [_bomb_count]
967
    cmp  eax, 0
967
    cmp  eax, 0
968
    je	 bomb_proc_end
968
    je	 bomb_proc_end
969
    xor  ecx, ecx
969
    xor  ecx, ecx
970
  bomb_proc_loop:		 ; öèêë îáðàáîòêè ïàäåíèÿ áîìá
970
  bomb_proc_loop:		 ; öèêë îáðàáîòêè ïàäåíèÿ áîìá
971
    cmp  ecx, [_bomb_count]
971
    cmp  ecx, [_bomb_count]
972
    jae  bomb_proc_end
972
    jae  bomb_proc_end
973
    mov  ebx, ecx
973
    mov  ebx, ecx
974
    shl  ebx, 4
974
    shl  ebx, 4
975
    add  ebx,  _bomb_array	    ;  ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
975
    add  ebx,  _bomb_array	    ;  ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
976
 
976
 
977
    call bomb_hide   ; ñòåðåòü ïðåäûäóùåå çíà÷åíèå
977
    call bomb_hide   ; ñòåðåòü ïðåäûäóùåå çíà÷åíèå
978
 
978
 
979
    ; îáðàáîòêà
979
    ; îáðàáîòêà
980
 
980
 
981
    ; âûïîëíÿåòñÿ ïåðåñ÷åò äëÿ ñêîðîñòè VY òåêóùåé áîìáû
981
    ; âûïîëíÿåòñÿ ïåðåñ÷åò äëÿ ñêîðîñòè VY òåêóùåé áîìáû
982
 
982
 
983
    add  ebx, 4*3
983
    add  ebx, 4*3
984
    mov  eax, [_timer_x2]
984
    mov  eax, [_timer_x2]
985
    cmp  eax, 0
985
    cmp  eax, 0
986
    jne  bomb_proc_gravity_accel_end
986
    jne  bomb_proc_gravity_accel_end
987
    mov  eax, [ebx]
987
    mov  eax, [ebx]
988
    add  eax, GRAVY_ACCEL
988
    add  eax, GRAVY_ACCEL
989
    mov  [ebx], eax
989
    mov  [ebx], eax
990
  bomb_proc_gravity_accel_end:
990
  bomb_proc_gravity_accel_end:
991
    ; âûïîëíÿåòñÿ ïåðåñ÷åò äëÿ êîîðäèíàò X òåêóùåé áîìáû
991
    ; âûïîëíÿåòñÿ ïåðåñ÷åò äëÿ êîîðäèíàò X òåêóùåé áîìáû
992
    sub  ebx, 4*3
992
    sub  ebx, 4*3
993
    mov  eax, [ebx]
993
    mov  eax, [ebx]
994
    add  ebx, 4*2
994
    add  ebx, 4*2
995
    mov  edx, [ebx]
995
    mov  edx, [ebx]
996
    add  eax, edx
996
    add  eax, edx
997
    sub  ebx, 4*2
997
    sub  ebx, 4*2
998
    mov  [ebx], eax
998
    mov  [ebx], eax
999
    push eax
999
    push eax
1000
    ; âûïîëíÿåòñÿ ïåðåñ÷åò äëÿ êîîðäèíàò Y òåêóùåé áîìáû
1000
    ; âûïîëíÿåòñÿ ïåðåñ÷åò äëÿ êîîðäèíàò Y òåêóùåé áîìáû
1001
    add  ebx, 4
1001
    add  ebx, 4
1002
    mov  eax, [ebx]
1002
    mov  eax, [ebx]
1003
    add  ebx, 4*2
1003
    add  ebx, 4*2
1004
    mov  edx, [ebx]
1004
    mov  edx, [ebx]
1005
    add  eax, edx
1005
    add  eax, edx
1006
    sub  ebx, 4*2
1006
    sub  ebx, 4*2
1007
    mov  [ebx], eax
1007
    mov  [ebx], eax
1008
    push eax
1008
    push eax
1009
 
1009
 
1010
    ; âçàèìîäåéñòâèå áîìá ñ ìèðîì
1010
    ; âçàèìîäåéñòâèå áîìá ñ ìèðîì
1011
    sub  ebx, 4
1011
    sub  ebx, 4
1012
    pop  edx	  ; êîîðäèíàòà Y
1012
    pop  edx	  ; êîîðäèíàòà Y
1013
    pop  eax	  ; êîîðäèíàòà X
1013
    pop  eax	  ; êîîðäèíàòà X
1014
    ; ïðîâåðêà íà âûõîä áîìá çà ïðåäåëû èãðîâîé çîíû, áîìáû ïðîñòî óäàëÿþòñÿ ïðè âûëåòå çà ãðàíèöû
1014
    ; ïðîâåðêà íà âûõîä áîìá çà ïðåäåëû èãðîâîé çîíû, áîìáû ïðîñòî óäàëÿþòñÿ ïðè âûëåòå çà ãðàíèöû
1015
    cmp  eax, 10
1015
    cmp  eax, 10
1016
    jle   bomb_proc_delete_bomb
1016
    jle   bomb_proc_delete_bomb
1017
    cmp  eax, WINDOW_WIDTH - 36
1017
    cmp  eax, WINDOW_WIDTH - 36
1018
    jge   bomb_proc_delete_bomb
1018
    jge   bomb_proc_delete_bomb
1019
    ; ïðîâåðêà íà âçàèìîäåéòñâèå ñ ìèðîì
1019
    ; ïðîâåðêà íà âçàèìîäåéòñâèå ñ ìèðîì
1020
    push  eax
1020
    push  eax
1021
    push  ebx
1021
    push  ebx
1022
    mov  ebx, edx
1022
    mov  ebx, edx
1023
    call  bomb_check_detonation
1023
    call  bomb_check_detonation
1024
    cmp   eax, 1
1024
    cmp   eax, 1
1025
    pop   ebx
1025
    pop   ebx
1026
    pop   eax
1026
    pop   eax
1027
    je	bomb_proc_interaction_with_world
1027
    je	bomb_proc_interaction_with_world
1028
    cmp  edx, WINDOW_HEIGHT - GROUNG_HEIGHT
1028
    cmp  edx, WINDOW_HEIGHT - GROUNG_HEIGHT
1029
    jae  bomb_proc_interaction_with_world
1029
    jae  bomb_proc_interaction_with_world
1030
    jmp   bomb_proc_interaction_end
1030
    jmp   bomb_proc_interaction_end
1031
  bomb_proc_interaction_with_world:
1031
  bomb_proc_interaction_with_world:
1032
    push  eax
1032
    push  eax
1033
    push  ebx
1033
    push  ebx
1034
    mov  ebx, edx
1034
    mov  ebx, edx
1035
    call bang_add
1035
    call bang_add
1036
    call air_raid_warning_on   ; âêëþ÷åíèå âîçäóøíîé òðåâîãè
1036
    call air_raid_warning_on   ; âêëþ÷åíèå âîçäóøíîé òðåâîãè
1037
    pop   ebx
1037
    pop   ebx
1038
    pop   eax
1038
    pop   eax
1039
  bomb_proc_delete_bomb:
1039
  bomb_proc_delete_bomb:
1040
    call bomb_delete	      ; óäàëÿåì áîìáó
1040
    call bomb_delete	      ; óäàëÿåì áîìáó
1041
    dec  ecx		      ; ò.ê. áîìáû óäàëåíà - îñòàåìñÿ íà òîì æå íîìåðå áîìáû
1041
    dec  ecx		      ; ò.ê. áîìáû óäàëåíà - îñòàåìñÿ íà òîì æå íîìåðå áîìáû
1042
    mov  eax, [_bomb_count]
1042
    mov  eax, [_bomb_count]
1043
    dec  eax
1043
    dec  eax
1044
    mov  [_bomb_count], eax   ; óìåíüøàåì êîëè÷åñòâî áîìá
1044
    mov  [_bomb_count], eax   ; óìåíüøàåì êîëè÷åñòâî áîìá
1045
    jmp  bomb_proc_draw_end   ; íå ðèñóåì áîìáó åñëè óäàëèëè åå
1045
    jmp  bomb_proc_draw_end   ; íå ðèñóåì áîìáó åñëè óäàëèëè åå
1046
  bomb_proc_interaction_end:
1046
  bomb_proc_interaction_end:
1047
    call bomb_draw
1047
    call bomb_draw
1048
  bomb_proc_draw_end:
1048
  bomb_proc_draw_end:
1049
 
1049
 
1050
    inc  ecx
1050
    inc  ecx
1051
    jmp  bomb_proc_loop
1051
    jmp  bomb_proc_loop
1052
  bomb_proc_end:
1052
  bomb_proc_end:
1053
 
1053
 
1054
    ret
1054
    ret
1055
 
1055
 
1056
 
1056
 
1057
bomb_delete:	   ; óäàëåíèå äàííûõ î áîìáå, â åñõ íîìåð óäàëÿåìîé áîìáû
1057
bomb_delete:	   ; óäàëåíèå äàííûõ î áîìáå, â åñõ íîìåð óäàëÿåìîé áîìáû
1058
    push eax
1058
    push eax
1059
    push ebx
1059
    push ebx
1060
    push ecx
1060
    push ecx
1061
    push edx
1061
    push edx
1062
    call  bombfly_sound_stop
1062
    call  bombfly_sound_stop
1063
    inc  ecx
1063
    inc  ecx
1064
  bomb_delete_loop:
1064
  bomb_delete_loop:
1065
    cmp  ecx, [_bomb_count]
1065
    cmp  ecx, [_bomb_count]
1066
    jae  bomb_delete_loop_end
1066
    jae  bomb_delete_loop_end
1067
    mov  ebx, ecx
1067
    mov  ebx, ecx
1068
    shl  ebx, 4
1068
    shl  ebx, 4
1069
    add  ebx,  _bomb_array	    ;  ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
1069
    add  ebx,  _bomb_array	    ;  ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
1070
    dec  ecx
1070
    dec  ecx
1071
    mov  edx, ecx
1071
    mov  edx, ecx
1072
    shl  edx, 4
1072
    shl  edx, 4
1073
    add  edx,  _bomb_array	    ;  ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î ñëåäóþùåé áîìáå
1073
    add  edx,  _bomb_array	    ;  ïîëó÷èëè óêàçàòåëü íà íà÷àëî äàííûõ î ñëåäóþùåé áîìáå
1074
    inc  ecx
1074
    inc  ecx
1075
    ; ïåðåìåùåíèå äàííûõ î ñëåäóþùåé áîìáå íà ìåñòî ïðåäûäóùåé
1075
    ; ïåðåìåùåíèå äàííûõ î ñëåäóþùåé áîìáå íà ìåñòî ïðåäûäóùåé
1076
    mov  eax, [ebx]
1076
    mov  eax, [ebx]
1077
    mov  [edx], eax
1077
    mov  [edx], eax
1078
    add  ebx,4
1078
    add  ebx,4
1079
    add  edx,4
1079
    add  edx,4
1080
    mov  eax, [ebx]
1080
    mov  eax, [ebx]
1081
    mov  [edx], eax
1081
    mov  [edx], eax
1082
    add  ebx,4
1082
    add  ebx,4
1083
    add  edx,4
1083
    add  edx,4
1084
    mov  eax, [ebx]
1084
    mov  eax, [ebx]
1085
    mov  [edx], eax
1085
    mov  [edx], eax
1086
    add  ebx,4
1086
    add  ebx,4
1087
    add  edx,4
1087
    add  edx,4
1088
    mov  eax, [ebx]
1088
    mov  eax, [ebx]
1089
    mov  [edx], eax
1089
    mov  [edx], eax
1090
    ; ïåðåõîä ê ñëåäóþùåé áîìáå
1090
    ; ïåðåõîä ê ñëåäóþùåé áîìáå
1091
    inc  ecx
1091
    inc  ecx
1092
    jmp  bomb_delete_loop
1092
    jmp  bomb_delete_loop
1093
  bomb_delete_loop_end:
1093
  bomb_delete_loop_end:
1094
    pop  edx
1094
    pop  edx
1095
    pop  ecx
1095
    pop  ecx
1096
    pop  ebx
1096
    pop  ebx
1097
    pop  eax
1097
    pop  eax
1098
 
1098
 
1099
    ret
1099
    ret
1100
 
1100
 
1101
bomb_hide:  ; ñòåðåòü áîìáó ñ ýêðàíà, ebx - óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
1101
bomb_hide:  ; ñòåðåòü áîìáó ñ ýêðàíà, ebx - óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
1102
 
1102
 
1103
    push eax
1103
    push eax
1104
    push ebx
1104
    push ebx
1105
    push ecx
1105
    push ecx
1106
    push edx
1106
    push edx
1107
    mov  eax, 13
1107
    mov  eax, 13
1108
    mov  edx, ebx
1108
    mov  edx, ebx
1109
    mov  ebx, [edx]
1109
    mov  ebx, [edx]
1110
    shl  ebx, 16
1110
    shl  ebx, 16
1111
    add  ebx, 16
1111
    add  ebx, 16
1112
    add  edx, 4
1112
    add  edx, 4
1113
    mov  ecx, [edx]
1113
    mov  ecx, [edx]
1114
    shl  ecx, 16
1114
    shl  ecx, 16
1115
    add  ecx, 16
1115
    add  ecx, 16
1116
    mov  edx, BACK_COLOR
1116
    mov  edx, BACK_COLOR
1117
    int  0x40
1117
    int  0x40
1118
    pop  edx
1118
    pop  edx
1119
    pop  ecx
1119
    pop  ecx
1120
    pop  ebx
1120
    pop  ebx
1121
    pop  eax
1121
    pop  eax
1122
 
1122
 
1123
    ret
1123
    ret
1124
 
1124
 
1125
 
1125
 
1126
bomb_draw:	; îòðèñîâàòü áîìáó, ebx - óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
1126
bomb_draw:	; îòðèñîâàòü áîìáó, ebx - óêàçàòåëü íà íà÷àëî äàííûõ î áîìáå
1127
 
1127
 
1128
    push eax
1128
    push eax
1129
    push ebx
1129
    push ebx
1130
    push ecx
1130
    push ecx
1131
    push edx
1131
    push edx
1132
 
1132
 
1133
    ; ïîëó÷åíèå â edx êîîðäèíàò áîìáû
1133
    ; ïîëó÷åíèå â edx êîîðäèíàò áîìáû
1134
    mov  edx, [ebx]
1134
    mov  edx, [ebx]
1135
    shl  edx, 16
1135
    shl  edx, 16
1136
    add  ebx, 4
1136
    add  ebx, 4
1137
    mov  eax, [ebx]
1137
    mov  eax, [ebx]
1138
    add  edx, eax
1138
    add  edx, eax
1139
 
1139
 
1140
    ; ïîëó÷åíèå óêàçàòåëÿ íà êàðòèíêó áîìáû â ebx (ñðàçó ñ âûáîðîì íóæíîé êàðòèíêè)
1140
    ; ïîëó÷åíèå óêàçàòåëÿ íà êàðòèíêó áîìáû â ebx (ñðàçó ñ âûáîðîì íóæíîé êàðòèíêè)
1141
    add  ebx, 4
1141
    add  ebx, 4
1142
    mov  eax, [ebx]	  ; çäåñü â eax - ãîðèçîíòàëüíàÿ ñêîðîñòü áîìáû
1142
    mov  eax, [ebx]	  ; çäåñü â eax - ãîðèçîíòàëüíàÿ ñêîðîñòü áîìáû
1143
    add  ebx, 4
1143
    add  ebx, 4
1144
    mov  ecx, [ebx]	  ; çäåñü â ecx - âåðòèêàëüíàÿ ñêîðîñòü áîìáû
1144
    mov  ecx, [ebx]	  ; çäåñü â ecx - âåðòèêàëüíàÿ ñêîðîñòü áîìáû
1145
    xor  ebx, ebx
1145
    xor  ebx, ebx
1146
    cmp  ecx, 3
1146
    cmp  ecx, 3
1147
    jl	 bomb_draw_midspeed_end
1147
    jl	 bomb_draw_midspeed_end
1148
    inc  ebx
1148
    inc  ebx
1149
  bomb_draw_midspeed_end:
1149
  bomb_draw_midspeed_end:
1150
    cmp  ecx, 9
1150
    cmp  ecx, 9
1151
    jl	 bomb_draw_highspeed_end
1151
    jl	 bomb_draw_highspeed_end
1152
    inc  ebx
1152
    inc  ebx
1153
  bomb_draw_highspeed_end:
1153
  bomb_draw_highspeed_end:
1154
    cmp  eax, 0
1154
    cmp  eax, 0
1155
    jge  bomb_draw_left_dir_end
1155
    jge  bomb_draw_left_dir_end
1156
    add  ebx, 3
1156
    add  ebx, 3
1157
  bomb_draw_left_dir_end:
1157
  bomb_draw_left_dir_end:
1158
       ; òåïåðü â ebx íîìåð êàðòèíêè áîìáû
1158
       ; òåïåðü â ebx íîìåð êàðòèíêè áîìáû
1159
    shl  ebx, 8
1159
    shl  ebx, 8
1160
    mov  eax, ebx
1160
    mov  eax, ebx
1161
    add  ebx, eax
1161
    add  ebx, eax
1162
    add  ebx, eax
1162
    add  ebx, eax
1163
    add  ebx, bmp_bomb	 ; òåïåðü â ebx óêàçàòåëü íà êàðòèíêó áîìáû
1163
    add  ebx, bmp_bomb	 ; òåïåðü â ebx óêàçàòåëü íà êàðòèíêó áîìáû
1164
 
1164
 
1165
    ; âûâîä êàðòèíêè
1165
    ; âûâîä êàðòèíêè
1166
    mov  eax,7
1166
    mov  eax,7
1167
    mov  ecx,16*65536+16
1167
    mov  ecx,16*65536+16
1168
    int  0x40
1168
    int  0x40
1169
 
1169
 
1170
    pop  edx
1170
    pop  edx
1171
    pop  ecx
1171
    pop  ecx
1172
    pop  ebx
1172
    pop  ebx
1173
    pop  eax
1173
    pop  eax
1174
 
1174
 
1175
    ret
1175
    ret
1176
 
1176
 
1177
 
1177
 
1178
; âçàèìîäåéñòâèå áîìá ñ ìèðîì
1178
; âçàèìîäåéñòâèå áîìá ñ ìèðîì
1179
 
1179
 
1180
bomb_check_detonation:	       ; ïðîâåðèòü áîìáó ñ êîîðäèíàòàìè: eax - êîîðäèíàòà X, eab - êîîðäèíàòà Y
1180
bomb_check_detonation:	       ; ïðîâåðèòü áîìáó ñ êîîðäèíàòàìè: eax - êîîðäèíàòà X, eab - êîîðäèíàòà Y
1181
			       ; è ïðè íåîáõîäèìîñòè ïðîâåñòè íóæíûå ðàçðóøåíèÿ (èëè ïóñòîé âçðûâ)
1181
			       ; è ïðè íåîáõîäèìîñòè ïðîâåñòè íóæíûå ðàçðóøåíèÿ (èëè ïóñòîé âçðûâ)
1182
			       ; â eax âåðíóòü ðåçóëüòàò ñîáûòèÿ: 0 - íè÷åãî íå ïðîèçøëî, 1 - ïðîèçîøåë âçðûâ
1182
			       ; â eax âåðíóòü ðåçóëüòàò ñîáûòèÿ: 0 - íè÷åãî íå ïðîèçøëî, 1 - ïðîèçîøåë âçðûâ
1183
			       ; (êîðÿâàÿ ðåàëèçàöèÿ)
1183
			       ; (êîðÿâàÿ ðåàëèçàöèÿ)
1184
 
1184
 
1185
    push  ecx
1185
    push  ecx
1186
    push  edx
1186
    push  edx
1187
 
1187
 
1188
    add   eax, 8
1188
    add   eax, 8
1189
    add   ebx, 8
1189
    add   ebx, 8
1190
 
1190
 
1191
    sub   eax, CITY_OFFSET
1191
    sub   eax, CITY_OFFSET
1192
    ; ïðîâåðêà íà âûëåò çà ïðåäåëû ãîðîäà
1192
    ; ïðîâåðêà íà âûëåò çà ïðåäåëû ãîðîäà
1193
    cmp   eax, 0
1193
    cmp   eax, 0
1194
    jl	  bcd_out_of_city
1194
    jl	  bcd_out_of_city
1195
    cmp   eax, 32*20
1195
    cmp   eax, 32*20
1196
    jg	  bcd_out_of_city
1196
    jg	  bcd_out_of_city
1197
    ; ïðîâåðêà íà âçàèìîäåéñòâèå ñ ãîðîäîì
1197
    ; ïðîâåðêà íà âçàèìîäåéñòâèå ñ ãîðîäîì
1198
    add   eax, 10	 ; äåëèì êîîðäèíàòó X íà 20
1198
    add   eax, 10	 ; äåëèì êîîðäèíàòó X íà 20
1199
    mov   ecx, eax
1199
    mov   ecx, eax
1200
    shr   eax, 4
1200
    shr   eax, 4
1201
    shr   ecx, 6
1201
    shr   ecx, 6
1202
    sub   eax, ecx
1202
    sub   eax, ecx
1203
    shr   ecx, 2
1203
    shr   ecx, 2
1204
    add   eax, ecx
1204
    add   eax, ecx
1205
    shr   ecx, 2
1205
    shr   ecx, 2
1206
    sub   eax, ecx
1206
    sub   eax, ecx
1207
    dec   eax	      ; â eax íîìåð ñòîëáöà ãîðîäà ïî êîòîðîìó ëåòèò áîìáà
1207
    dec   eax	      ; â eax íîìåð ñòîëáöà ãîðîäà ïî êîòîðîìó ëåòèò áîìáà
1208
    mov   esi, eax
1208
    mov   esi, eax
1209
    shl   esi, 1
1209
    shl   esi, 1
1210
    add   esi, _city	; â esi óêàçàòåëü íà âûñîòó ïîñòðîéêè â äàííîì ñòîëáöå
1210
    add   esi, _city	; â esi óêàçàòåëü íà âûñîòó ïîñòðîéêè â äàííîì ñòîëáöå
1211
 
1211
 
1212
    mov   edx, WINDOW_HEIGHT - GROUNG_HEIGHT
1212
    mov   edx, WINDOW_HEIGHT - GROUNG_HEIGHT
1213
    sub   edx, ebx
1213
    sub   edx, ebx
1214
    mov   ebx, edx
1214
    mov   ebx, edx
1215
    cmp   ebx, 0
1215
    cmp   ebx, 0
1216
    jg	  bcd_no_neg_value_Y
1216
    jg	  bcd_no_neg_value_Y
1217
    xor   ecx, ecx
1217
    xor   ecx, ecx
1218
    mov   cx, [esi]
1218
    mov   cx, [esi]
1219
    xor   ebx, ebx
1219
    xor   ebx, ebx
1220
    jmp   bcd_damage	; íàíîñèì ðàçðóøåíèÿ
1220
    jmp   bcd_damage	; íàíîñèì ðàçðóøåíèÿ
1221
  bcd_no_neg_value_Y:
1221
  bcd_no_neg_value_Y:
1222
    add   ebx, 10	  ; äåëèì êîîðäèíàòó Y íà 20
1222
    add   ebx, 10	  ; äåëèì êîîðäèíàòó Y íà 20
1223
    mov   ecx, ebx
1223
    mov   ecx, ebx
1224
    shr   ebx, 4
1224
    shr   ebx, 4
1225
    shr   ecx, 6
1225
    shr   ecx, 6
1226
    sub   ebx, ecx
1226
    sub   ebx, ecx
1227
    shr   ecx, 2
1227
    shr   ecx, 2
1228
    add   ebx, ecx
1228
    add   ebx, ecx
1229
    shr   ecx, 2
1229
    shr   ecx, 2
1230
    sub   ebx, ecx	   ; â ebx âûñîòà  áîìáû "â ïëèòêàõ" íàä ïîâåðõíîñòüþ
1230
    sub   ebx, ecx	   ; â ebx âûñîòà  áîìáû "â ïëèòêàõ" íàä ïîâåðõíîñòüþ
1231
 
1231
 
1232
    xor   ecx, ecx
1232
    xor   ecx, ecx
1233
    mov   cx, [esi]
1233
    mov   cx, [esi]
1234
    cmp   ebx, ecx	      ; ïðîâåðêà íà ïîïàäàíèå â ñòðîåíèå
1234
    cmp   ebx, ecx	      ; ïðîâåðêà íà ïîïàäàíèå â ñòðîåíèå
1235
    jg	  bcd_no_detonation
1235
    jg	  bcd_no_detonation
1236
  bcd_damage:	     ; ðàçðóøåíèÿ
1236
  bcd_damage:	     ; ðàçðóøåíèÿ
1237
    ;ðàçðóøåíèå ñòîëáèêà â êîòîðûé ïîïàëà áîìáà
1237
    ;ðàçðóøåíèå ñòîëáèêà â êîòîðûé ïîïàëà áîìáà
1238
    mov   edx, ecx
1238
    mov   edx, ecx
1239
    mov   ecx, ebx
1239
    mov   ecx, ebx
1240
    sub   ecx, 2
1240
    sub   ecx, 2
1241
    cmp   ecx, 0	     ; ïðîñòî ïðîâåðêà íà 0, ÷òîá íå óøëî â ìèíóñ
1241
    cmp   ecx, 0	     ; ïðîñòî ïðîâåðêà íà 0, ÷òîá íå óøëî â ìèíóñ
1242
    jge   bcd_no_neg_value_H
1242
    jge   bcd_no_neg_value_H
1243
    xor   ecx, ecx
1243
    xor   ecx, ecx
1244
   bcd_no_neg_value_H:
1244
   bcd_no_neg_value_H:
1245
    mov   [esi], cx	    ;  âîçâðàò çíà÷åíèÿ âûñîòû ñòîëáöà ïîñëå âçðûâà
1245
    mov   [esi], cx	    ;  âîçâðàò çíà÷åíèÿ âûñîòû ñòîëáöà ïîñëå âçðûâà
1246
    ; çà÷èñòêà âçîðâàííîé îáëàñòè
1246
    ; çà÷èñòêà âçîðâàííîé îáëàñòè
1247
    call  clear_tiles
1247
    call  clear_tiles
1248
    ; ïðîâåðêà íà ïîïàäàíèå â çåíèòêè
1248
    ; ïðîâåðêà íà ïîïàäàíèå â çåíèòêè
1249
    call ackack_check_bombing
1249
    call ackack_check_bombing
1250
    ; ðàçðóøåíèå ñîñåäíåãî ñòîëáèêà ñëåâà
1250
    ; ðàçðóøåíèå ñîñåäíåãî ñòîëáèêà ñëåâà
1251
    ; íà äàííûé ìîìåíò èìååì: eax - íîìåð öåíòðàëüíîãî (öåíòðàëüíûé - ýòî â êîòîðûé íåïîñðåäñòâåííî ïîïàëà áîìáà) ñòîëáèêà,
1251
    ; íà äàííûé ìîìåíò èìååì: eax - íîìåð öåíòðàëüíîãî (öåíòðàëüíûé - ýòî â êîòîðûé íåïîñðåäñòâåííî ïîïàëà áîìáà) ñòîëáèêà,
1252
    ; ebx - âûñîòà ïîïàäàíèÿ áîìáû, ecx - íîâàÿ âûñîòà öåíòðàëüíîãî ñòîëáèêà, edx - ïðåæíÿÿ âûñîòà öåíòðàëüíîãî ñòîëáèêà,
1252
    ; ebx - âûñîòà ïîïàäàíèÿ áîìáû, ecx - íîâàÿ âûñîòà öåíòðàëüíîãî ñòîëáèêà, edx - ïðåæíÿÿ âûñîòà öåíòðàëüíîãî ñòîëáèêà,
1253
    ; esi - óêàçàòåëü íà çíà÷åíèå âûñîòû öåíòðàëüíîãî ñòîëáèêà â ìàññèâå
1253
    ; esi - óêàçàòåëü íà çíà÷åíèå âûñîòû öåíòðàëüíîãî ñòîëáèêà â ìàññèâå
1254
    dec   eax
1254
    dec   eax
1255
    cmp   eax, 0
1255
    cmp   eax, 0
1256
    jl	  bcd_damage_left_end
1256
    jl	  bcd_damage_left_end
1257
    sub   esi, 2
1257
    sub   esi, 2
1258
    xor   ecx, ecx
1258
    xor   ecx, ecx
1259
    mov   cx, [esi]	; â ecx âûñîòà ëåâîãî ñòîëáèêà
1259
    mov   cx, [esi]	; â ecx âûñîòà ëåâîãî ñòîëáèêà
1260
    mov   edx, ecx
1260
    mov   edx, ecx
1261
    push  ecx
1261
    push  ecx
1262
    sub   ecx, ebx
1262
    sub   ecx, ebx
1263
    inc   ecx
1263
    inc   ecx
1264
    cmp   ecx, 2
1264
    cmp   ecx, 2
1265
    pop   ecx
1265
    pop   ecx
1266
    ja	  bcd_damage_left_end	  ; óñëîâèå  |ecx-ebx|<=1
1266
    ja	  bcd_damage_left_end	  ; óñëîâèå  |ecx-ebx|<=1
1267
    dec   ecx
1267
    dec   ecx
1268
    cmp   ecx, 0	     ; ïðîñòî ïðîâåðêà íà 0, ÷òîá íå óøëî â ìèíóñ
1268
    cmp   ecx, 0	     ; ïðîñòî ïðîâåðêà íà 0, ÷òîá íå óøëî â ìèíóñ
1269
    jge   bcd_no_neg_value_HL
1269
    jge   bcd_no_neg_value_HL
1270
    xor   ecx, ecx
1270
    xor   ecx, ecx
1271
   bcd_no_neg_value_HL:
1271
   bcd_no_neg_value_HL:
1272
    mov   [esi], cx
1272
    mov   [esi], cx
1273
    call  clear_tiles
1273
    call  clear_tiles
1274
    ; ïðîâåðêà íà ïîïàäàíèå â çåíèòêè
1274
    ; ïðîâåðêà íà ïîïàäàíèå â çåíèòêè
1275
    call ackack_check_bombing
1275
    call ackack_check_bombing
1276
  bcd_damage_left_end:
1276
  bcd_damage_left_end:
1277
 
1277
 
1278
    ; ðàçðóøåíèå ñîñåäíåãî ñòîëáèêà ñïðàâà
1278
    ; ðàçðóøåíèå ñîñåäíåãî ñòîëáèêà ñïðàâà
1279
    ; íà äàííûé ìîìåíò èìååì: eax - íîìåð ëåâîãî  ñòîëáèêà,
1279
    ; íà äàííûé ìîìåíò èìååì: eax - íîìåð ëåâîãî  ñòîëáèêà,
1280
    ; ebx - âûñîòà ïîïàäàíèÿ áîìáû, ecx - íîâàÿ âûñîòà ëåâîãî ñòîëáèêà, edx - ïðåæíÿÿ âûñîòà ëåâîãî ñòîëáèêà,
1280
    ; ebx - âûñîòà ïîïàäàíèÿ áîìáû, ecx - íîâàÿ âûñîòà ëåâîãî ñòîëáèêà, edx - ïðåæíÿÿ âûñîòà ëåâîãî ñòîëáèêà,
1281
    ; esi - óêàçàòåëü íà çíà÷åíèå âûñîòû ëåâîãî ñòîëáèêà â ìàññèâå
1281
    ; esi - óêàçàòåëü íà çíà÷åíèå âûñîòû ëåâîãî ñòîëáèêà â ìàññèâå
1282
    inc   eax
1282
    inc   eax
1283
    inc   eax
1283
    inc   eax
1284
    cmp   eax, 32
1284
    cmp   eax, 32
1285
    jge   bcd_damage_right_end
1285
    jge   bcd_damage_right_end
1286
    add   esi, 4
1286
    add   esi, 4
1287
    xor   ecx, ecx
1287
    xor   ecx, ecx
1288
    mov   cx, [esi]	; â ecx âûñîòà ïðàâîãî ñòîëáèêà
1288
    mov   cx, [esi]	; â ecx âûñîòà ïðàâîãî ñòîëáèêà
1289
    mov   edx, ecx
1289
    mov   edx, ecx
1290
    push  ecx
1290
    push  ecx
1291
    sub   ecx, ebx
1291
    sub   ecx, ebx
1292
    inc   ecx
1292
    inc   ecx
1293
    cmp   ecx, 2
1293
    cmp   ecx, 2
1294
    pop   ecx
1294
    pop   ecx
1295
    ja	  bcd_damage_right_end	   ; óñëîâèå  |ecx-ebx|<=1
1295
    ja	  bcd_damage_right_end	   ; óñëîâèå  |ecx-ebx|<=1
1296
    dec   ecx
1296
    dec   ecx
1297
    cmp   ecx, 0	     ; ïðîñòî ïðîâåðêà íà 0, ÷òîá íå óøëî â ìèíóñ
1297
    cmp   ecx, 0	     ; ïðîñòî ïðîâåðêà íà 0, ÷òîá íå óøëî â ìèíóñ
1298
    jge   bcd_no_neg_value_HR
1298
    jge   bcd_no_neg_value_HR
1299
    xor   ecx, ecx
1299
    xor   ecx, ecx
1300
   bcd_no_neg_value_HR:
1300
   bcd_no_neg_value_HR:
1301
    mov   [esi], cx
1301
    mov   [esi], cx
1302
    call  clear_tiles
1302
    call  clear_tiles
1303
    ; ïðîâåðêà íà ïîïàäàíèå â çåíèòêè
1303
    ; ïðîâåðêà íà ïîïàäàíèå â çåíèòêè
1304
    call ackack_check_bombing
1304
    call ackack_check_bombing
1305
  bcd_damage_right_end:
1305
  bcd_damage_right_end:
1306
    call  check_level_complete
1306
    call  check_level_complete
1307
  bcd_detonation:
1307
  bcd_detonation:
1308
    mov   eax, 1
1308
    mov   eax, 1
1309
    jmp   bcd_end
1309
    jmp   bcd_end
1310
  bcd_no_detonation:
1310
  bcd_no_detonation:
1311
    mov   eax, 0
1311
    mov   eax, 0
1312
    jmp   bcd_end
1312
    jmp   bcd_end
1313
  bcd_out_of_city:
1313
  bcd_out_of_city:
1314
    mov   eax, 1
1314
    mov   eax, 1
1315
    cmp   ebx, WINDOW_HEIGHT - GROUNG_HEIGHT
1315
    cmp   ebx, WINDOW_HEIGHT - GROUNG_HEIGHT
1316
    jge   bcd_end
1316
    jge   bcd_end
1317
    mov   eax, 0
1317
    mov   eax, 0
1318
  bcd_end:
1318
  bcd_end:
1319
    pop   edx
1319
    pop   edx
1320
    pop   ecx
1320
    pop   ecx
1321
 
1321
 
1322
    ret
1322
    ret
1323
 
1323
 
1324
 
1324
 
1325
bombfly_sound_start:	; ecx - íîìåð áîìáû â ìàññèâå
1325
bombfly_sound_start:	; ecx - íîìåð áîìáû â ìàññèâå
1326
 
1326
 
1327
    push eax ebx ecx
1327
    push eax ebx ecx
1328
    cmp  [_flag_bomberdatabin_ok], 1
1328
    cmp  [_flag_bomberdatabin_ok], 1
1329
    jne  @f
1329
    jne  @f
1330
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 1 ))-1)], [_array_sounds+8*((( 1 ))-1)+4], VOLUME_BOMBFLY, VOLUME_BOMBFLY, SSMIX_CHANMODE_SINGLE_WITHOUT_RESET
1330
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 1 ))-1)], [_array_sounds+8*((( 1 ))-1)+4], VOLUME_BOMBFLY, VOLUME_BOMBFLY, SSMIX_CHANMODE_SINGLE_WITHOUT_RESET
1331
  @@:
1331
  @@:
1332
    mov  ebx, ecx
1332
    mov  ebx, ecx
1333
    shl  ebx, 2
1333
    shl  ebx, 2
1334
    add  ebx,  _array_bombsoundchannels
1334
    add  ebx,  _array_bombsoundchannels
1335
    mov  [ebx], eax
1335
    mov  [ebx], eax
1336
    pop  ecx ebx eax
1336
    pop  ecx ebx eax
1337
 
1337
 
1338
    ret
1338
    ret
1339
 
1339
 
1340
 
1340
 
1341
bombfly_sound_stop:    ; ecx - íîìåð áîìáû â ìàññèâå
1341
bombfly_sound_stop:    ; ecx - íîìåð áîìáû â ìàññèâå
1342
 
1342
 
1343
    push eax ebx ecx
1343
    push eax ebx ecx
1344
    mov  ebx, ecx
1344
    mov  ebx, ecx
1345
    shl  ebx, 2
1345
    shl  ebx, 2
1346
    add  ebx,  _array_bombsoundchannels
1346
    add  ebx,  _array_bombsoundchannels
1347
    mov  eax, [ebx]
1347
    mov  eax, [ebx]
1348
    cmp  [_flag_bomberdatabin_ok], 1
1348
    cmp  [_flag_bomberdatabin_ok], 1
1349
    jne  @f
1349
    jne  @f
1350
    stdcall  ssmix_stoptrack, eax
1350
    stdcall  ssmix_stoptrack, eax
1351
  @@:
1351
  @@:
1352
    inc  ecx
1352
    inc  ecx
1353
  .delete_loop:
1353
  .delete_loop:
1354
    cmp  ecx, MAX_BOMBS
1354
    cmp  ecx, MAX_BOMBS
1355
    jae  .delete_loop_end
1355
    jae  .delete_loop_end
1356
    mov  ebx, ecx
1356
    mov  ebx, ecx
1357
    shl  ebx, 2
1357
    shl  ebx, 2
1358
    add  ebx,  _array_bombsoundchannels
1358
    add  ebx,  _array_bombsoundchannels
1359
    mov  eax, [ebx]
1359
    mov  eax, [ebx]
1360
    mov  [ebx-4], eax
1360
    mov  [ebx-4], eax
1361
    inc  ecx
1361
    inc  ecx
1362
    jmp  .delete_loop
1362
    jmp  .delete_loop
1363
  .delete_loop_end:
1363
  .delete_loop_end:
1364
    pop  ecx ebx eax
1364
    pop  ecx ebx eax
1365
 
1365
 
1366
    ret
1366
    ret
1367
 
1367
 
1368
; ==================================== ÂÇÐÛÂÛ =======================================
1368
; ==================================== ÂÇÐÛÂÛ =======================================
1369
 
1369
 
1370
 
1370
 
1371
fill_circle:
1371
fill_circle:
1372
    ; ïîñòðîåíèå çàïîëíåííîãî êðóãà    (àëãîðèòì Áðåçåíõåìà)
1372
    ; ïîñòðîåíèå çàïîëíåííîãî êðóãà    (àëãîðèòì Áðåçåíõåìà)
1373
    ; âõîäíûå ïàðàìåòðû:
1373
    ; âõîäíûå ïàðàìåòðû:
1374
    ; eax - êîîðäèíàòà öåíòðà ïî X
1374
    ; eax - êîîðäèíàòà öåíòðà ïî X
1375
    ; ebx - êîîðäèíàòà öåíòðà ïî Y
1375
    ; ebx - êîîðäèíàòà öåíòðà ïî Y
1376
    ; ecx - ðàäèóñ
1376
    ; ecx - ðàäèóñ
1377
    ; edx - öâåò
1377
    ; edx - öâåò
1378
    mov  edi, eax
1378
    mov  edi, eax
1379
    mov  esi, ebx
1379
    mov  esi, ebx
1380
    push edx	     ; öâåò â ñòåê
1380
    push edx	     ; öâåò â ñòåê
1381
 
1381
 
1382
    mov  eax, ecx
1382
    mov  eax, ecx
1383
    shl  eax, 1
1383
    shl  eax, 1
1384
    mov  edx, 3
1384
    mov  edx, 3
1385
    sub  edx, eax	  ; D:=3-2*R
1385
    sub  edx, eax	  ; D:=3-2*R
1386
    xor  ebx, ebx   ; òåïåðü â ebx áóäåò êîîðä X, â ecx êîîðä Y, â edx ïåðåìåííàÿ D, â eax - ïðîìåæóòî÷íûå äàííûå
1386
    xor  ebx, ebx   ; òåïåðü â ebx áóäåò êîîðä X, â ecx êîîðä Y, â edx ïåðåìåííàÿ D, â eax - ïðîìåæóòî÷íûå äàííûå
1387
 
1387
 
1388
  fc_loop:
1388
  fc_loop:
1389
    cmp  ebx, ecx
1389
    cmp  ebx, ecx
1390
    jg	 fc_loop_end
1390
    jg	 fc_loop_end
1391
    ; îòðèñîâêà ëèíèÿìè
1391
    ; îòðèñîâêà ëèíèÿìè
1392
     pop  eax	    ; öâåò èç ñòåêà
1392
     pop  eax	    ; öâåò èç ñòåêà
1393
     push edx	    ; D â ñòåê
1393
     push edx	    ; D â ñòåê
1394
     mov  edx, eax  ; â edx - öâåò
1394
     mov  edx, eax  ; â edx - öâåò
1395
     push ebx
1395
     push ebx
1396
     push ecx
1396
     push ecx
1397
     ; ðèñóåì ïåðâûé îòðåçîê
1397
     ; ðèñóåì ïåðâûé îòðåçîê
1398
     mov  eax, edi
1398
     mov  eax, edi
1399
     sub  eax, ebx
1399
     sub  eax, ebx
1400
     shl  eax, 16
1400
     shl  eax, 16
1401
     add  ebx, edi
1401
     add  ebx, edi
1402
     add  ebx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî õ
1402
     add  ebx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî õ
1403
     add  ecx, esi
1403
     add  ecx, esi
1404
     mov  eax, ecx
1404
     mov  eax, ecx
1405
     shl  eax, 16
1405
     shl  eax, 16
1406
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1406
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1407
     mov  eax, 38
1407
     mov  eax, 38
1408
     int  0x40
1408
     int  0x40
1409
     pop  ecx
1409
     pop  ecx
1410
     push ecx
1410
     push ecx
1411
     ; ðèñóåì âòîðîé îòðåçîê
1411
     ; ðèñóåì âòîðîé îòðåçîê
1412
     mov  eax, esi
1412
     mov  eax, esi
1413
     sub  eax, ecx
1413
     sub  eax, ecx
1414
     mov  ecx, eax
1414
     mov  ecx, eax
1415
     shl  eax, 16
1415
     shl  eax, 16
1416
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1416
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1417
     mov  eax, 38
1417
     mov  eax, 38
1418
     int  0x40
1418
     int  0x40
1419
     pop  ecx
1419
     pop  ecx
1420
     pop  ebx
1420
     pop  ebx
1421
     push ecx
1421
     push ecx
1422
     push ebx	; îáðàòèòü âíèìàíèå! ïîðÿäîê çàãðóçêè êîîðäèíàò â ñòåê ïîìåíÿëñÿ!
1422
     push ebx	; îáðàòèòü âíèìàíèå! ïîðÿäîê çàãðóçêè êîîðäèíàò â ñòåê ïîìåíÿëñÿ!
1423
     ; ðèñóåì òðåòèé îòðåçîê
1423
     ; ðèñóåì òðåòèé îòðåçîê
1424
     mov  eax, edi
1424
     mov  eax, edi
1425
     sub  eax, ecx
1425
     sub  eax, ecx
1426
     shl  eax, 16
1426
     shl  eax, 16
1427
     add  ecx, edi
1427
     add  ecx, edi
1428
     add  ecx, eax
1428
     add  ecx, eax
1429
     mov  eax, ebx
1429
     mov  eax, ebx
1430
     mov  ebx, ecx    ; ïîëó÷èëè êîíöû îòðåçêà ïî õ
1430
     mov  ebx, ecx    ; ïîëó÷èëè êîíöû îòðåçêà ïî õ
1431
     mov  ecx, eax    ; âíèìàíèå! â ecx - êîîðäèíàòà x
1431
     mov  ecx, eax    ; âíèìàíèå! â ecx - êîîðäèíàòà x
1432
     add  ecx, esi
1432
     add  ecx, esi
1433
     mov  eax, ecx
1433
     mov  eax, ecx
1434
     shl  eax, 16
1434
     shl  eax, 16
1435
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1435
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1436
     mov  eax, 38
1436
     mov  eax, 38
1437
     int  0x40
1437
     int  0x40
1438
     pop  ecx
1438
     pop  ecx
1439
     push ecx
1439
     push ecx
1440
     ; ðèñóåì ÷åòâåðòûé îòðåçîê
1440
     ; ðèñóåì ÷åòâåðòûé îòðåçîê
1441
     mov  eax, esi
1441
     mov  eax, esi
1442
     sub  eax, ecx
1442
     sub  eax, ecx
1443
     mov  ecx, eax
1443
     mov  ecx, eax
1444
     shl  eax, 16
1444
     shl  eax, 16
1445
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1445
     add  ecx, eax   ; ïîëó÷èëè êîíöû îòðåçêà ïî y
1446
     mov  eax, 38
1446
     mov  eax, 38
1447
     int  0x40
1447
     int  0x40
1448
     pop  ebx
1448
     pop  ebx
1449
     pop  ecx
1449
     pop  ecx
1450
 
1450
 
1451
     mov  eax, edx	 ; â eax - öâåò
1451
     mov  eax, edx	 ; â eax - öâåò
1452
     pop  edx		 ; D èç ñòåêà
1452
     pop  edx		 ; D èç ñòåêà
1453
     push eax		 ; öâåò â ñòåê
1453
     push eax		 ; öâåò â ñòåê
1454
    ; ïåðåõîä â ñëåäóþùåé òî÷êå
1454
    ; ïåðåõîä â ñëåäóþùåé òî÷êå
1455
    cmp  edx, 0
1455
    cmp  edx, 0
1456
    jge  fc_loop_D_more_0     ; åñëè D<0
1456
    jge  fc_loop_D_more_0     ; åñëè D<0
1457
  fc_loop_D_low_0:	      ; òî
1457
  fc_loop_D_low_0:	      ; òî
1458
    mov  eax, ebx
1458
    mov  eax, ebx
1459
    shl  eax, 2
1459
    shl  eax, 2
1460
    add  edx, eax
1460
    add  edx, eax
1461
    add  edx, 4        ; D:=D+4*X+6
1461
    add  edx, 4        ; D:=D+4*X+6
1462
    jmp  fc_loop_cmpD_end
1462
    jmp  fc_loop_cmpD_end
1463
  fc_loop_D_more_0:	      ; èíà÷å
1463
  fc_loop_D_more_0:	      ; èíà÷å
1464
    mov  eax, ebx
1464
    mov  eax, ebx
1465
    sub  eax, ecx
1465
    sub  eax, ecx
1466
    shl  eax, 2
1466
    shl  eax, 2
1467
    add  edx, eax
1467
    add  edx, eax
1468
    add  edx, 10      ; D:=D+4*(X-Y)+10
1468
    add  edx, 10      ; D:=D+4*(X-Y)+10
1469
    dec  ecx
1469
    dec  ecx
1470
  fc_loop_cmpD_end:	      ; êîíåö åñëè
1470
  fc_loop_cmpD_end:	      ; êîíåö åñëè
1471
    inc  ebx
1471
    inc  ebx
1472
    jmp  fc_loop
1472
    jmp  fc_loop
1473
  fc_loop_end:
1473
  fc_loop_end:
1474
 
1474
 
1475
    pop  edx	   ; öâåò èç ñòåêà
1475
    pop  edx	   ; öâåò èç ñòåêà
1476
 
1476
 
1477
    ret
1477
    ret
1478
 
1478
 
1479
 
1479
 
1480
 
1480
 
1481
 
1481
 
1482
bang_add:   ; äîáàâèòü âçðûâ îò áîìáû, eax - êîîðäèíàòà X, eab - êîîðäèíàòà Y
1482
bang_add:   ; äîáàâèòü âçðûâ îò áîìáû, eax - êîîðäèíàòà X, eab - êîîðäèíàòà Y
1483
 
1483
 
1484
    push  eax
1484
    push  eax
1485
    push  ebx
1485
    push  ebx
1486
    push  ecx
1486
    push  ecx
1487
    push  edx
1487
    push  edx
1488
 
1488
 
1489
    shl  eax, 16
1489
    shl  eax, 16
1490
    add  eax, ebx
1490
    add  eax, ebx
1491
    mov  ebx, _bang_array
1491
    mov  ebx, _bang_array
1492
    xor  ecx, ecx
1492
    xor  ecx, ecx
1493
  bang_add_loop:
1493
  bang_add_loop:
1494
    cmp  ecx, MAX_BOMBS
1494
    cmp  ecx, MAX_BOMBS
1495
    jae  bang_add_loop_end
1495
    jae  bang_add_loop_end
1496
    mov  edx, [ebx]
1496
    mov  edx, [ebx]
1497
    cmp  edx, -1
1497
    cmp  edx, -1
1498
    jne  bang_add_loop_freecheck_end
1498
    jne  bang_add_loop_freecheck_end
1499
    mov  edx,  5*65536 + 3
1499
    mov  edx,  5*65536 + 3
1500
    mov  [ebx], edx
1500
    mov  [ebx], edx
1501
    add  ebx, 4
1501
    add  ebx, 4
1502
    mov  [ebx], eax
1502
    mov  [ebx], eax
1503
    cmp  [_flag_bomberdatabin_ok], 1
1503
    cmp  [_flag_bomberdatabin_ok], 1
1504
    jne  @f
1504
    jne  @f
1505
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 2 ))-1)], [_array_sounds+8*((( 2 ))-1)+4], VOLUME_BOMBBANG, VOLUME_BOMBBANG, SSMIX_CHANMODE_SINGLE
1505
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 2 ))-1)], [_array_sounds+8*((( 2 ))-1)+4], VOLUME_BOMBBANG, VOLUME_BOMBBANG, SSMIX_CHANMODE_SINGLE
1506
  @@:
1506
  @@:
1507
    jmp  bang_add_loop_end
1507
    jmp  bang_add_loop_end
1508
  bang_add_loop_freecheck_end:
1508
  bang_add_loop_freecheck_end:
1509
    add  ebx, 8
1509
    add  ebx, 8
1510
    inc  ecx
1510
    inc  ecx
1511
    jmp  bang_add_loop
1511
    jmp  bang_add_loop
1512
  bang_add_loop_end:
1512
  bang_add_loop_end:
1513
 
1513
 
1514
 
1514
 
1515
    pop   edx
1515
    pop   edx
1516
    pop   ecx
1516
    pop   ecx
1517
    pop   ebx
1517
    pop   ebx
1518
    pop   eax
1518
    pop   eax
1519
 
1519
 
1520
    ret
1520
    ret
1521
 
1521
 
1522
 
1522
 
1523
bang_proc:
1523
bang_proc:
1524
 
1524
 
1525
    mov  ebx, _bang_array
1525
    mov  ebx, _bang_array
1526
    xor  ecx, ecx
1526
    xor  ecx, ecx
1527
  bang_proc_loop:
1527
  bang_proc_loop:
1528
    cmp  ecx, MAX_BOMBS
1528
    cmp  ecx, MAX_BOMBS
1529
    jae  bang_proc_loop_end
1529
    jae  bang_proc_loop_end
1530
    ; ïðîâåðêà íà íàëè÷èå âçðûâà
1530
    ; ïðîâåðêà íà íàëè÷èå âçðûâà
1531
    mov  edx, [ebx]
1531
    mov  edx, [ebx]
1532
    cmp  edx, -1
1532
    cmp  edx, -1
1533
    je	 bang_proc_loop_freecheck_end
1533
    je	 bang_proc_loop_freecheck_end
1534
    ; ïðîâåðêà íà çàâåðøåíèå âçðûâà
1534
    ; ïðîâåðêà íà çàâåðøåíèå âçðûâà
1535
    and  edx, 0x0000FFFF
1535
    and  edx, 0x0000FFFF
1536
    cmp  edx, 0
1536
    cmp  edx, 0
1537
    jne  bang_proc_loop_endcheck_end
1537
    jne  bang_proc_loop_endcheck_end
1538
    ; çäåñü ïèøåì îáðàáîòêó çàâåðøåíèÿ âçðûâà
1538
    ; çäåñü ïèøåì îáðàáîòêó çàâåðøåíèÿ âçðûâà
1539
    push  ebx
1539
    push  ebx
1540
    push  ecx
1540
    push  ecx
1541
    mov  ecx, [ebx]
1541
    mov  ecx, [ebx]
1542
    shr  ecx, 16
1542
    shr  ecx, 16
1543
    add  ebx, 4
1543
    add  ebx, 4
1544
    mov  eax, [ebx]
1544
    mov  eax, [ebx]
1545
    mov  ebx, eax
1545
    mov  ebx, eax
1546
    shr  eax, 16
1546
    shr  eax, 16
1547
    and  ebx, 0x0000FFFF
1547
    and  ebx, 0x0000FFFF
1548
    mov  edx, BACK_COLOR
1548
    mov  edx, BACK_COLOR
1549
    call fill_circle
1549
    call fill_circle
1550
    pop   ecx
1550
    pop   ecx
1551
    pop   ebx
1551
    pop   ebx
1552
    mov  eax, -1
1552
    mov  eax, -1
1553
    mov  [ebx], eax
1553
    mov  [ebx], eax
1554
    jmp  bang_proc_loop_continue
1554
    jmp  bang_proc_loop_continue
1555
  bang_proc_loop_endcheck_end:
1555
  bang_proc_loop_endcheck_end:
1556
    ; çäåñü ïèøåì îáðàáîòêó âçðûâà
1556
    ; çäåñü ïèøåì îáðàáîòêó âçðûâà
1557
    push  ebx
1557
    push  ebx
1558
    push  ecx
1558
    push  ecx
1559
    ; çàäàåì ðàäèóñ è ñ÷èòàåì íîâûé
1559
    ; çàäàåì ðàäèóñ è ñ÷èòàåì íîâûé
1560
    mov  eax, [ebx]
1560
    mov  eax, [ebx]
1561
    mov  edx, eax
1561
    mov  edx, eax
1562
    shr  eax, 16
1562
    shr  eax, 16
1563
    mov  ecx, eax
1563
    mov  ecx, eax
1564
    and  edx, 0x0000FFFF
1564
    and  edx, 0x0000FFFF
1565
    mov  eax, edx
1565
    mov  eax, edx
1566
    shl  eax, 3
1566
    shl  eax, 3
1567
    add  eax, ecx
1567
    add  eax, ecx
1568
    shl  eax, 16
1568
    shl  eax, 16
1569
    dec  edx
1569
    dec  edx
1570
    add  eax, edx
1570
    add  eax, edx
1571
    mov  [ebx], eax
1571
    mov  [ebx], eax
1572
    ; çàäàåì êîîðäèíàòû
1572
    ; çàäàåì êîîðäèíàòû
1573
    add  ebx, 4
1573
    add  ebx, 4
1574
    mov  eax, [ebx]
1574
    mov  eax, [ebx]
1575
    mov  ebx, eax
1575
    mov  ebx, eax
1576
    shr  eax, 16
1576
    shr  eax, 16
1577
    and  ebx, 0x0000FFFF
1577
    and  ebx, 0x0000FFFF
1578
    ;çàäàåì öâåò
1578
    ;çàäàåì öâåò
1579
    mov  edx, BANG_COLOR
1579
    mov  edx, BANG_COLOR
1580
    call fill_circle
1580
    call fill_circle
1581
    pop   ecx
1581
    pop   ecx
1582
    pop   ebx
1582
    pop   ebx
1583
  bang_proc_loop_freecheck_end:
1583
  bang_proc_loop_freecheck_end:
1584
  bang_proc_loop_continue:
1584
  bang_proc_loop_continue:
1585
    add  ebx, 8
1585
    add  ebx, 8
1586
    inc  ecx
1586
    inc  ecx
1587
    jmp  bang_proc_loop
1587
    jmp  bang_proc_loop
1588
  bang_proc_loop_end:
1588
  bang_proc_loop_end:
1589
 
1589
 
1590
    ret
1590
    ret
1591
 
1591
 
1592
; ===================================== ÇÅÍÈÒÊÈ =========================================
1592
; ===================================== ÇÅÍÈÒÊÈ =========================================
1593
; óïðàâëåíèå çåíèòêàìè, äîáàâëåíèå çåíèòîê, îòðèñîâêà çåíèòîê, ñòðåëüáà
1593
; óïðàâëåíèå çåíèòêàìè, äîáàâëåíèå çåíèòîê, îòðèñîâêà çåíèòîê, ñòðåëüáà
1594
 
1594
 
1595
 
1595
 
1596
ackack_draw:			   ; îòðèñîâêà çåíèòîê
1596
ackack_draw:			   ; îòðèñîâêà çåíèòîê
1597
 
1597
 
1598
    mov  ebx, _ackack
1598
    mov  ebx, _ackack
1599
    xor  ecx, ecx
1599
    xor  ecx, ecx
1600
    xor  esi, esi	; ôëàã íàëè÷èÿ õîòÿ áû îäíîé çåíèòêè (äåéñòâóþùåé èëè â ïåðñïåêòèâå)
1600
    xor  esi, esi	; ôëàã íàëè÷èÿ õîòÿ áû îäíîé çåíèòêè (äåéñòâóþùåé èëè â ïåðñïåêòèâå)
1601
  ackack_draw_loop:
1601
  ackack_draw_loop:
1602
    cmp  ecx, 32
1602
    cmp  ecx, 32
1603
    jae  ackack_draw_loop_end
1603
    jae  ackack_draw_loop_end
1604
    xor  eax, eax
1604
    xor  eax, eax
1605
    mov  ax, [ebx]
1605
    mov  ax, [ebx]
1606
    cmp  eax, 1
1606
    cmp  eax, 1
1607
    jne  ackack_draw_continue	   ; åñëè çíà÷åíèå òåêóùåé ÿ÷åéêè â ìàññèâå íå 1 òî íå ðèñóåì çåíèòêó
1607
    jne  ackack_draw_continue	   ; åñëè çíà÷åíèå òåêóùåé ÿ÷åéêè â ìàññèâå íå 1 òî íå ðèñóåì çåíèòêó
1608
    push  ebx
1608
    push  ebx
1609
    push  ecx
1609
    push  ecx
1610
    ; â ebx ïîëó÷àåì óêàçàòåëü íà âûñîòó ïîñòðîéêè
1610
    ; â ebx ïîëó÷àåì óêàçàòåëü íà âûñîòó ïîñòðîéêè
1611
    mov   ebx, ecx
1611
    mov   ebx, ecx
1612
    shl   ebx, 1
1612
    shl   ebx, 1
1613
    add   ebx, _city  ; ïîëó÷èëè óêàçàòåëü íà âûñîòó ïîñòðîéêè
1613
    add   ebx, _city  ; ïîëó÷èëè óêàçàòåëü íà âûñîòó ïîñòðîéêè
1614
    xor  eax, eax
1614
    xor  eax, eax
1615
    mov  ax, [ebx]    ; ïîëó÷èëè âûñîòó ïîñòðîéêè
1615
    mov  ax, [ebx]    ; ïîëó÷èëè âûñîòó ïîñòðîéêè
1616
    cmp   eax, 0
1616
    cmp   eax, 0
1617
    jle   ackack_draw_continue2      ; åñëè ïîñòðîéêè íåò òî íå ðèñóåì çåíèòêó
1617
    jle   ackack_draw_continue2      ; åñëè ïîñòðîéêè íåò òî íå ðèñóåì çåíèòêó
1618
    mov   esi, 1
1618
    mov   esi, 1
1619
    call  ackack_bullet_start
1619
    call  ackack_bullet_start
1620
    ; îòðèñîâêà çåíèòêè
1620
    ; îòðèñîâêà çåíèòêè
1621
    mov   ebx, bmp_ackack   ; ïîëó÷èëè óêàçàòåëü íà êàðòèíêó
1621
    mov   ebx, bmp_ackack   ; ïîëó÷èëè óêàçàòåëü íà êàðòèíêó
1622
    cmp   edx, 0
1622
    cmp   edx, 0
1623
    je	  ackack_draw_no_start_bullet
1623
    je	  ackack_draw_no_start_bullet
1624
    add   ebx, 20*20*3	    ; êàðòèíêà ñî òðåëÿþùåé çåíèòêîé
1624
    add   ebx, 20*20*3	    ; êàðòèíêà ñî òðåëÿþùåé çåíèòêîé
1625
  ackack_draw_no_start_bullet:
1625
  ackack_draw_no_start_bullet:
1626
    ; ôîðìèðîâàíèå êîîðäèíàò êàðòèíêè  â edx
1626
    ; ôîðìèðîâàíèå êîîðäèíàò êàðòèíêè  â edx
1627
    mov   edx, ecx
1627
    mov   edx, ecx
1628
    shl   edx, 4
1628
    shl   edx, 4
1629
    shl   ecx, 2
1629
    shl   ecx, 2
1630
    add   edx, ecx
1630
    add   edx, ecx
1631
    add   edx, CITY_OFFSET
1631
    add   edx, CITY_OFFSET
1632
    shl   edx, 16
1632
    shl   edx, 16
1633
    mov   ecx, eax
1633
    mov   ecx, eax
1634
    shl   eax, 4
1634
    shl   eax, 4
1635
    shl   ecx, 2
1635
    shl   ecx, 2
1636
    add   eax, ecx
1636
    add   eax, ecx
1637
    mov   ecx, WINDOW_HEIGHT-GROUNG_HEIGHT
1637
    mov   ecx, WINDOW_HEIGHT-GROUNG_HEIGHT
1638
    sub   ecx, eax
1638
    sub   ecx, eax
1639
    sub   ecx, 20  ; ïîäíÿëè êîîðäèíàòó íà ïëèòêó âûøå ïîñòðîéêè
1639
    sub   ecx, 20  ; ïîäíÿëè êîîðäèíàòó íà ïëèòêó âûøå ïîñòðîéêè
1640
    add   edx, ecx ; ïîëó÷èëè êîîðäèíàòû
1640
    add   edx, ecx ; ïîëó÷èëè êîîðäèíàòû
1641
    mov   ecx, 20*0x00010000 + 20   ; çàäàëè ðàçìåð êàðòèíêè
1641
    mov   ecx, 20*0x00010000 + 20   ; çàäàëè ðàçìåð êàðòèíêè
1642
    mov   eax, 7
1642
    mov   eax, 7
1643
    int   0x40		; âûâîäèì êàðòèíêó
1643
    int   0x40		; âûâîäèì êàðòèíêó
1644
  ackack_draw_continue2:
1644
  ackack_draw_continue2:
1645
    pop   ecx
1645
    pop   ecx
1646
    pop   ebx
1646
    pop   ebx
1647
  ackack_draw_continue:
1647
  ackack_draw_continue:
1648
    add  ebx, 2
1648
    add  ebx, 2
1649
    inc  ecx
1649
    inc  ecx
1650
    jmp  ackack_draw_loop
1650
    jmp  ackack_draw_loop
1651
  ackack_draw_loop_end:
1651
  ackack_draw_loop_end:
1652
 
1652
 
1653
    cmp  esi, 0
1653
    cmp  esi, 0
1654
    jne  @f
1654
    jne  @f
1655
    ; âûêëþ÷èòü ñèðåíó
1655
    ; âûêëþ÷èòü ñèðåíó
1656
    call  air_raid_warning_off
1656
    call  air_raid_warning_off
1657
  @@:
1657
  @@:
1658
 
1658
 
1659
    ret
1659
    ret
1660
 
1660
 
1661
 
1661
 
1662
ackack_check_bombing: ; ïðîâåðêà íà ïîäðûâ çåíèòîê áîìáàìè : eax - íîìåð ñòîëáöà
1662
ackack_check_bombing: ; ïðîâåðêà íà ïîäðûâ çåíèòîê áîìáàìè : eax - íîìåð ñòîëáöà
1663
 
1663
 
1664
    push eax
1664
    push eax
1665
    push ebx
1665
    push ebx
1666
    push ecx
1666
    push ecx
1667
    push edx
1667
    push edx
1668
    ; ïðîâåðêà íà ïîïàäàíèå â ñòîëáåö çåíèòêè
1668
    ; ïðîâåðêà íà ïîïàäàíèå â ñòîëáåö çåíèòêè
1669
    mov  ebx, eax
1669
    mov  ebx, eax
1670
    shl  ebx, 1
1670
    shl  ebx, 1
1671
    push  ebx
1671
    push  ebx
1672
    add  ebx, _ackack
1672
    add  ebx, _ackack
1673
    mov  edx, ebx	; çàïîìíèì óêàçàòåëü ñîñòîÿíèÿ çåíèòêè â edx
1673
    mov  edx, ebx	; çàïîìíèì óêàçàòåëü ñîñòîÿíèÿ çåíèòêè â edx
1674
    xor  eax, eax
1674
    xor  eax, eax
1675
    mov  ax, [ebx]    ; â eax  ïîëó÷èëè ñîñòîÿíèå çåíèòêè
1675
    mov  ax, [ebx]    ; â eax  ïîëó÷èëè ñîñòîÿíèå çåíèòêè
1676
    cmp  eax, 1
1676
    cmp  eax, 1
1677
    jne  acb_no_bombing       ; ïðîâåðêà íà íàëè÷èå çåíèòêè â äàííîì ñòîëáöå
1677
    jne  acb_no_bombing       ; ïðîâåðêà íà íàëè÷èå çåíèòêè â äàííîì ñòîëáöå
1678
    xor  eax, eax
1678
    xor  eax, eax
1679
    mov  [ebx], ax     ; óáèðàåì çåíèòêó
1679
    mov  [ebx], ax     ; óáèðàåì çåíèòêó
1680
    call ackack_next_wave
1680
    call ackack_next_wave
1681
  acb_no_bombing:
1681
  acb_no_bombing:
1682
    ; ïðîâåðêà íà ïîëíîå óíè÷íîæåíèå ñòîëáöà
1682
    ; ïðîâåðêà íà ïîëíîå óíè÷íîæåíèå ñòîëáöà
1683
    pop  ebx
1683
    pop  ebx
1684
    add  ebx, _city
1684
    add  ebx, _city
1685
    xor  eax, eax
1685
    xor  eax, eax
1686
    mov  ax, [ebx]    ; â eax  ïîëó÷èëè ñîñòîÿíèå çåíèòêè
1686
    mov  ax, [ebx]    ; â eax  ïîëó÷èëè ñîñòîÿíèå çåíèòêè
1687
    cmp  eax, 0
1687
    cmp  eax, 0
1688
    jg	 acb_no_destroy_building       ; ïðîâåðêà íà íàëè÷èå ïîñòðîéêè â ñòîëáöå
1688
    jg	 acb_no_destroy_building       ; ïðîâåðêà íà íàëè÷èå ïîñòðîéêè â ñòîëáöå
1689
    xor  eax, eax
1689
    xor  eax, eax
1690
    mov  [ebx], ax     ; óáèðàåì çåíèòêó äàæå â ïåðñïåêòèâå
1690
    mov  [ebx], ax     ; óáèðàåì çåíèòêó äàæå â ïåðñïåêòèâå
1691
  acb_no_destroy_building:
1691
  acb_no_destroy_building:
1692
    pop  edx
1692
    pop  edx
1693
    pop  ecx
1693
    pop  ecx
1694
    pop  ebx
1694
    pop  ebx
1695
    pop  eax
1695
    pop  eax
1696
 
1696
 
1697
    ret
1697
    ret
1698
 
1698
 
1699
 
1699
 
1700
 
1700
 
1701
ackack_next_wave:	 ; íîâàÿ âîëíà çåíèòîê
1701
ackack_next_wave:	 ; íîâàÿ âîëíà çåíèòîê
1702
 
1702
 
1703
    push eax
1703
    push eax
1704
    push ebx
1704
    push ebx
1705
    push ecx
1705
    push ecx
1706
    push edx
1706
    push edx
1707
 
1707
 
1708
  anw_begin:
1708
  anw_begin:
1709
    mov  ebx, _ackack
1709
    mov  ebx, _ackack
1710
    xor  ecx, ecx
1710
    xor  ecx, ecx
1711
    xor  edx, edx	; ôëàã êîíòðîëÿ çà çåíèòêàìè
1711
    xor  edx, edx	; ôëàã êîíòðîëÿ çà çåíèòêàìè
1712
  anw_loop:
1712
  anw_loop:
1713
    cmp  ecx, 32
1713
    cmp  ecx, 32
1714
    jae  anw_loop_end
1714
    jae  anw_loop_end
1715
    xor  eax, eax
1715
    xor  eax, eax
1716
    mov  ax, [ebx]
1716
    mov  ax, [ebx]
1717
    cmp  eax, 1
1717
    cmp  eax, 1
1718
    jle  anw_continue	   ; åñëè çíà÷åíèå òåêóùåé ÿ÷åéêè <=1 òî ïðîïóñêàåì
1718
    jle  anw_continue	   ; åñëè çíà÷åíèå òåêóùåé ÿ÷åéêè <=1 òî ïðîïóñêàåì
1719
    dec  eax
1719
    dec  eax
1720
    mov  [ebx], ax
1720
    mov  [ebx], ax
1721
    cmp  eax, 1
1721
    cmp  eax, 1
1722
    jg	 anw_no_active_ackack	  ; åñëè çíà÷åíèå òåêóùåé ÿ÷åéêè â ìàññèâå >1 òî ïðîïóñêàåì
1722
    jg	 anw_no_active_ackack	  ; åñëè çíà÷åíèå òåêóùåé ÿ÷åéêè â ìàññèâå >1 òî ïðîïóñêàåì
1723
    mov  edx, 1        ; ïîêàçûâàåì ÷òî åñòü äåéñòâóþùàÿ çåíèòêà
1723
    mov  edx, 1        ; ïîêàçûâàåì ÷òî åñòü äåéñòâóþùàÿ çåíèòêà
1724
    jmp  anw_continue
1724
    jmp  anw_continue
1725
  anw_no_active_ackack:
1725
  anw_no_active_ackack:
1726
    cmp  edx, 1
1726
    cmp  edx, 1
1727
    je	 anw_continue	   ; åñëè ôëàãà 1 òî ïðîïóñêàåì
1727
    je	 anw_continue	   ; åñëè ôëàãà 1 òî ïðîïóñêàåì
1728
    mov  edx, 2
1728
    mov  edx, 2
1729
  anw_continue:
1729
  anw_continue:
1730
    add  ebx, 2
1730
    add  ebx, 2
1731
    inc  ecx
1731
    inc  ecx
1732
    jmp  anw_loop
1732
    jmp  anw_loop
1733
  anw_loop_end:
1733
  anw_loop_end:
1734
    cmp  edx, 2
1734
    cmp  edx, 2
1735
    je	 anw_begin
1735
    je	 anw_begin
1736
 
1736
 
1737
    pop  edx
1737
    pop  edx
1738
    pop  ecx
1738
    pop  ecx
1739
    pop  ebx
1739
    pop  ebx
1740
    pop  eax
1740
    pop  eax
1741
    ret
1741
    ret
1742
 
1742
 
1743
 
1743
 
1744
 
1744
 
1745
 
1745
 
1746
 
1746
 
1747
ackack_bullet_start:	 ; çàïóñê ñíàðÿäîâ  (âõîäíûå: eax - âûñîòà ñòîëáöà, ecx - íîìåð ñòîëáöà;
1747
ackack_bullet_start:	 ; çàïóñê ñíàðÿäîâ  (âõîäíûå: eax - âûñîòà ñòîëáöà, ecx - íîìåð ñòîëáöà;
1748
			 ;                   âûõîäíûå: edx - ôëàã íîâîãî çàïóñêà (0-íåò, 1 -äà)
1748
			 ;                   âûõîäíûå: edx - ôëàã íîâîãî çàïóñêà (0-íåò, 1 -äà)
1749
 
1749
 
1750
    push  eax
1750
    push  eax
1751
    push  ebx
1751
    push  ebx
1752
    push  ecx
1752
    push  ecx
1753
 
1753
 
1754
    cmp   [_flag_air_raid_warning], 1
1754
    cmp   [_flag_air_raid_warning], 1
1755
    jne   abs_no_start_bullet
1755
    jne   abs_no_start_bullet
1756
 
1756
 
1757
    ; â ebx ïîëó÷àåì óêàçàòåëü íà ïîëîæåíèå ñíàðÿäà
1757
    ; â ebx ïîëó÷àåì óêàçàòåëü íà ïîëîæåíèå ñíàðÿäà
1758
    mov   edx, eax
1758
    mov   edx, eax
1759
    mov   ebx, ecx
1759
    mov   ebx, ecx
1760
    shl   ebx, 2
1760
    shl   ebx, 2
1761
    add   ebx, _ackack_bullet  ; ïîëó÷èëè óêàçàòåëü íà ïîëîæåíèå ñíàðÿäà
1761
    add   ebx, _ackack_bullet  ; ïîëó÷èëè óêàçàòåëü íà ïîëîæåíèå ñíàðÿäà
1762
    mov   eax, [ebx]	; ïîëó÷èëè ïîëîæåíèå ñíàðÿäà
1762
    mov   eax, [ebx]	; ïîëó÷èëè ïîëîæåíèå ñíàðÿäà
1763
    cmp   eax, 0
1763
    cmp   eax, 0
1764
    jne   abs_no_start_bullet	   ; åñëè íå 0, òî íå çàïóñêàåì íîâûé
1764
    jne   abs_no_start_bullet	   ; åñëè íå 0, òî íå çàïóñêàåì íîâûé
1765
    ; çàïóñê ñíàðÿäà
1765
    ; çàïóñê ñíàðÿäà
1766
    mov   eax, edx    ; ïîìåùàåì â eax âûñîòó ïîñòðîéêè
1766
    mov   eax, edx    ; ïîìåùàåì â eax âûñîòó ïîñòðîéêè
1767
    ; ñ÷èòàåì êîîðäèíàòó âåðøèíû
1767
    ; ñ÷èòàåì êîîðäèíàòó âåðøèíû
1768
    mov   ecx, eax
1768
    mov   ecx, eax
1769
    shl   eax, 4
1769
    shl   eax, 4
1770
    shl   ecx, 2
1770
    shl   ecx, 2
1771
    add   eax, ecx
1771
    add   eax, ecx
1772
    mov   ecx, WINDOW_HEIGHT-GROUNG_HEIGHT
1772
    mov   ecx, WINDOW_HEIGHT-GROUNG_HEIGHT
1773
    sub   ecx, eax
1773
    sub   ecx, eax
1774
    sub   ecx, 20+BULLET_SIZE  ; ïîäíÿëè êîîðäèíàòó íà ïëèòêó âûøå ïîñòðîéêè + âûñîòà ñíàÿðÿäà (â ecx - íà÷àëüíàÿ êîîðäèíàòà ñíàðÿäà)
1774
    sub   ecx, 20+BULLET_SIZE  ; ïîäíÿëè êîîðäèíàòó íà ïëèòêó âûøå ïîñòðîéêè + âûñîòà ñíàÿðÿäà (â ecx - íà÷àëüíàÿ êîîðäèíàòà ñíàðÿäà)
1775
    mov   [ebx], ecx  ; çàäàëè íà÷àëüíóþ êîîðäèíàòó ñíàðÿäó
1775
    mov   [ebx], ecx  ; çàäàëè íà÷àëüíóþ êîîðäèíàòó ñíàðÿäó
1776
 
1776
 
1777
    cmp  [_flag_bomberdatabin_ok], 1
1777
    cmp  [_flag_bomberdatabin_ok], 1
1778
    jne  @f
1778
    jne  @f
1779
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 3 ))-1)], [_array_sounds+8*((( 3 ))-1)+4], VOLUME_ACKACK,VOLUME_ACKACK , SSMIX_CHANMODE_SINGLE
1779
    stdcall  ssmix_playtrack, [_array_sounds+8*((( 3 ))-1)], [_array_sounds+8*((( 3 ))-1)+4], VOLUME_ACKACK,VOLUME_ACKACK , SSMIX_CHANMODE_SINGLE
1780
  @@:
1780
  @@:
1781
 
1781
 
1782
    mov   edx, 1
1782
    mov   edx, 1
1783
    jmp   abs_end_start_bullet
1783
    jmp   abs_end_start_bullet
1784
  abs_no_start_bullet:
1784
  abs_no_start_bullet:
1785
    mov   edx, 0
1785
    mov   edx, 0
1786
  abs_end_start_bullet:
1786
  abs_end_start_bullet:
1787
 
1787
 
1788
    pop   ecx
1788
    pop   ecx
1789
    pop   ebx
1789
    pop   ebx
1790
    pop   eax
1790
    pop   eax
1791
 
1791
 
1792
    ret
1792
    ret
1793
 
1793
 
1794
 
1794
 
1795
ackack_bullet_proc:	; ïðîöåäóðà îáðàáîòêè è îòðèñîâêè ñíàðÿäîâ
1795
ackack_bullet_proc:	; ïðîöåäóðà îáðàáîòêè è îòðèñîâêè ñíàðÿäîâ
1796
 
1796
 
1797
    mov  ebx, _ackack_bullet
1797
    mov  ebx, _ackack_bullet
1798
    xor  ecx, ecx
1798
    xor  ecx, ecx
1799
  abp_loop:
1799
  abp_loop:
1800
    cmp  ecx, 32
1800
    cmp  ecx, 32
1801
    jae  abp_loop_end
1801
    jae  abp_loop_end
1802
    mov  eax, [ebx]
1802
    mov  eax, [ebx]
1803
    cmp  eax, 0
1803
    cmp  eax, 0
1804
    je	 abp_continue
1804
    je	 abp_continue
1805
    jl	 abp_low_zero
1805
    jl	 abp_low_zero
1806
    push  ebx
1806
    push  ebx
1807
    push  ecx
1807
    push  ecx
1808
    ; ñòèðàíèå ñòàðîãî èçîáðàæåíèÿ
1808
    ; ñòèðàíèå ñòàðîãî èçîáðàæåíèÿ
1809
    mov   ebx, ecx
1809
    mov   ebx, ecx
1810
    shl   ebx, 4
1810
    shl   ebx, 4
1811
    shl   ecx, 2
1811
    shl   ecx, 2
1812
    add   ebx, ecx
1812
    add   ebx, ecx
1813
    add   ebx, CITY_OFFSET
1813
    add   ebx, CITY_OFFSET
1814
    add   ebx, 7	     ; ñìåùåíèå ñíàðÿäà
1814
    add   ebx, 7	     ; ñìåùåíèå ñíàðÿäà
1815
    mov   edx, ebx
1815
    mov   edx, ebx
1816
    shl   ebx, 16
1816
    shl   ebx, 16
1817
    add   ebx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè X
1817
    add   ebx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè X
1818
    mov   ecx, eax
1818
    mov   ecx, eax
1819
    mov   edx, ecx
1819
    mov   edx, ecx
1820
    add   edx, BULLET_SIZE   ; ïðèáàâèëè äëèíó ñíàðÿäà
1820
    add   edx, BULLET_SIZE   ; ïðèáàâèëè äëèíó ñíàðÿäà
1821
    shl   ecx, 16
1821
    shl   ecx, 16
1822
    add   ecx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè Y
1822
    add   ecx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè Y
1823
    mov   edx, BACK_COLOR
1823
    mov   edx, BACK_COLOR
1824
    mov   eax, 38
1824
    mov   eax, 38
1825
    int   0x40
1825
    int   0x40
1826
    add   ebx, 0x00050005
1826
    add   ebx, 0x00050005
1827
    int   0x40
1827
    int   0x40
1828
 
1828
 
1829
    pop   ecx
1829
    pop   ecx
1830
    pop   ebx
1830
    pop   ebx
1831
    push  ebx
1831
    push  ebx
1832
    push  ecx
1832
    push  ecx
1833
 
1833
 
1834
    mov  eax, [ebx]
1834
    mov  eax, [ebx]
1835
    sub  eax, ACKACK_BULLET_SPEED
1835
    sub  eax, ACKACK_BULLET_SPEED
1836
    mov  [ebx], eax
1836
    mov  [ebx], eax
1837
    cmp  eax, 0
1837
    cmp  eax, 0
1838
    jle  abp_end_draw_bullet
1838
    jle  abp_end_draw_bullet
1839
 
1839
 
1840
    call ackack_bullet_interaction_check
1840
    call ackack_bullet_interaction_check
1841
    cmp  edx, 0
1841
    cmp  edx, 0
1842
    je	 abp_no_bullet_interaction	; åñëè íå áûëî âçàèìîäåéñòâèå òî ðèñóåì ñíàðÿäû
1842
    je	 abp_no_bullet_interaction	; åñëè íå áûëî âçàèìîäåéñòâèå òî ðèñóåì ñíàðÿäû
1843
    xor  eax, eax
1843
    xor  eax, eax
1844
    mov  [ebx], eax
1844
    mov  [ebx], eax
1845
    jmp  abp_end_draw_bullet
1845
    jmp  abp_end_draw_bullet
1846
  abp_no_bullet_interaction:
1846
  abp_no_bullet_interaction:
1847
 
1847
 
1848
    ; ðèñóåì ñíàðÿäû
1848
    ; ðèñóåì ñíàðÿäû
1849
    mov   ebx, ecx
1849
    mov   ebx, ecx
1850
    shl   ebx, 4
1850
    shl   ebx, 4
1851
    shl   ecx, 2
1851
    shl   ecx, 2
1852
    add   ebx, ecx
1852
    add   ebx, ecx
1853
    add   ebx, CITY_OFFSET
1853
    add   ebx, CITY_OFFSET
1854
    add   ebx, 7	     ; ñìåùåíèå ñíàðÿäà
1854
    add   ebx, 7	     ; ñìåùåíèå ñíàðÿäà
1855
    mov   edx, ebx
1855
    mov   edx, ebx
1856
    shl   ebx, 16
1856
    shl   ebx, 16
1857
    add   ebx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè X
1857
    add   ebx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè X
1858
    mov   ecx, eax
1858
    mov   ecx, eax
1859
    mov   edx, ecx
1859
    mov   edx, ecx
1860
    add   edx, BULLET_SIZE   ; ïðèáàâèëè äëèíó ñíàðÿäà
1860
    add   edx, BULLET_SIZE   ; ïðèáàâèëè äëèíó ñíàðÿäà
1861
    shl   ecx, 16
1861
    shl   ecx, 16
1862
    add   ecx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè Y
1862
    add   ecx, edx   ; â ebx êîîðäèíàòû íà÷àëà è êîíöà îòðåçêà ïî îñè Y
1863
    mov   edx, 0x00000000
1863
    mov   edx, 0x00000000
1864
    mov   eax, 38
1864
    mov   eax, 38
1865
    int   0x40
1865
    int   0x40
1866
    add   ebx, 0x00050005
1866
    add   ebx, 0x00050005
1867
    int   0x40
1867
    int   0x40
1868
  abp_end_draw_bullet:
1868
  abp_end_draw_bullet:
1869
 
1869
 
1870
    pop   ecx
1870
    pop   ecx
1871
    pop   ebx
1871
    pop   ebx
1872
    jmp  abp_continue
1872
    jmp  abp_continue
1873
  abp_low_zero:
1873
  abp_low_zero:
1874
    xor  eax, eax
1874
    xor  eax, eax
1875
    mov  [ebx], eax
1875
    mov  [ebx], eax
1876
  abp_continue:
1876
  abp_continue:
1877
    add  ebx, 4
1877
    add  ebx, 4
1878
    inc  ecx
1878
    inc  ecx
1879
    jmp  abp_loop
1879
    jmp  abp_loop
1880
  abp_loop_end:
1880
  abp_loop_end:
1881
 
1881
 
1882
    ret
1882
    ret
1883
 
1883
 
1884
 
1884
 
1885
ackack_bullet_interaction_check:       ; ïðîâåðêà âçàèìîäåéñòâèÿ ñíàðÿäîâ
1885
ackack_bullet_interaction_check:       ; ïðîâåðêà âçàèìîäåéñòâèÿ ñíàðÿäîâ
1886
				       ;  (âõîäíûå: eax - êîîðäèíàòà ñíàðÿäà ïî Y, ecx - íîìåð ñòîëáöà;
1886
				       ;  (âõîäíûå: eax - êîîðäèíàòà ñíàðÿäà ïî Y, ecx - íîìåð ñòîëáöà;
1887
				       ;  âûõîäíûå: edx - ôëàã ïîïàäàíèÿ (0-íåò, 1 -äà))
1887
				       ;  âûõîäíûå: edx - ôëàã ïîïàäàíèÿ (0-íåò, 1 -äà))
1888
 
1888
 
1889
 
1889
 
1890
    push  eax
1890
    push  eax
1891
    push  ebx
1891
    push  ebx
1892
    push  ecx
1892
    push  ecx
1893
 
1893
 
1894
    ; åñëè ñàìîëåò äåëàåò áî÷êó òî ïðîïóñêàåì
1894
    ; åñëè ñàìîëåò äåëàåò áî÷êó òî ïðîïóñêàåì
1895
    mov   ebx, [_plane_health]
1895
    mov   ebx, [_plane_health]
1896
    cmp   ebx, 0
1896
    cmp   ebx, 0
1897
    jle   abic_with_plane_no
1897
    jle   abic_with_plane_no
1898
    mov   ebx, [_plane_state]
1898
    mov   ebx, [_plane_state]
1899
    cmp   ebx, 4
1899
    cmp   ebx, 4
1900
    je	  abic_with_plane_no
1900
    je	  abic_with_plane_no
1901
    cmp   ebx, 5
1901
    cmp   ebx, 5
1902
    je	  abic_with_plane_no
1902
    je	  abic_with_plane_no
1903
    ; ïðîâåðêà íà êîîðäèíàòû
1903
    ; ïðîâåðêà íà êîîðäèíàòû
1904
    mov   ebx, [_Y_plane]
1904
    mov   ebx, [_Y_plane]
1905
    cmp   eax, ebx
1905
    cmp   eax, ebx
1906
    jl	  abic_with_plane_no	 ; åñëè ñíÿðÿä âûøå êîîðäèíàòû ïîïàäÿíèÿ òî ïðîïóñêàåì
1906
    jl	  abic_with_plane_no	 ; åñëè ñíÿðÿä âûøå êîîðäèíàòû ïîïàäÿíèÿ òî ïðîïóñêàåì
1907
    add   ebx, 20     ; â ebx - êîîðäèíàòà ïîïàäàíèÿ â ñàìîëåò
1907
    add   ebx, 20     ; â ebx - êîîðäèíàòà ïîïàäàíèÿ â ñàìîëåò
1908
    cmp   eax, ebx
1908
    cmp   eax, ebx
1909
    jg	  abic_with_plane_no	 ; åñëè ñíÿðÿä íèæå êîîðäèíàòû ïîïàäÿíèÿ òî ïðîïóñêàåì
1909
    jg	  abic_with_plane_no	 ; åñëè ñíÿðÿä íèæå êîîðäèíàòû ïîïàäÿíèÿ òî ïðîïóñêàåì
1910
    ; ñ÷èòàåì êîîðäèíàòó X âåðøèíû
1910
    ; ñ÷èòàåì êîîðäèíàòó X âåðøèíû
1911
    mov   edx, ecx
1911
    mov   edx, ecx
1912
    shl   edx, 4
1912
    shl   edx, 4
1913
    shl   ecx, 2
1913
    shl   ecx, 2
1914
    add   ecx, edx
1914
    add   ecx, edx
1915
    add   ecx, CITY_OFFSET
1915
    add   ecx, CITY_OFFSET
1916
    add   ecx, 7    ; â ecx - êîîðäèíàòà X ëåâîãî ñíàðÿäà
1916
    add   ecx, 7    ; â ecx - êîîðäèíàòà X ëåâîãî ñíàðÿäà
1917
    mov   ebx, [_X_plane]
1917
    mov   ebx, [_X_plane]
1918
    add   ebx, 32
1918
    add   ebx, 32
1919
    cmp   ecx, ebx
1919
    cmp   ecx, ebx
1920
    jg	  abic_with_plane_no
1920
    jg	  abic_with_plane_no
1921
    mov   ebx, [_X_plane]
1921
    mov   ebx, [_X_plane]
1922
    add   ecx, 5
1922
    add   ecx, 5
1923
    cmp   ecx, ebx
1923
    cmp   ecx, ebx
1924
    jl	  abic_with_plane_no
1924
    jl	  abic_with_plane_no
1925
    ; åñòü ïîïàäàíèå!!!
1925
    ; åñòü ïîïàäàíèå!!!
1926
    mov   ebx, [_plane_health]
1926
    mov   ebx, [_plane_health]
1927
    sub   ebx, 20
1927
    sub   ebx, 20
1928
    mov   [_plane_health], ebx
1928
    mov   [_plane_health], ebx
1929
    cmp   ebx, 0		; ïðîâåðêà íà game over
1929
    cmp   ebx, 0		; ïðîâåðêà íà game over
1930
    jg	  abic_no_plane_crash
1930
    jg	  abic_no_plane_crash
1931
    mov   [_plane_health], 0
1931
    mov   [_plane_health], 0
1932
    mov   eax, [_X_plane]
1932
    mov   eax, [_X_plane]
1933
    mov   ebx, [_Y_plane]
1933
    mov   ebx, [_Y_plane]
1934
    call  bang_add	    ; äåëàåì âçðûâ
1934
    call  bang_add	    ; äåëàåì âçðûâ
1935
    call  game_over	    ; çàâåðøåíèå èãðû
1935
    call  game_over	    ; çàâåðøåíèå èãðû
1936
  abic_no_plane_crash:
1936
  abic_no_plane_crash:
1937
    mov   edx, 1
1937
    mov   edx, 1
1938
    jmp   abic_with_plane_end
1938
    jmp   abic_with_plane_end
1939
  abic_with_plane_no:
1939
  abic_with_plane_no:
1940
    mov   edx, 0
1940
    mov   edx, 0
1941
  abic_with_plane_end:
1941
  abic_with_plane_end:
1942
 
1942
 
1943
    pop   ecx
1943
    pop   ecx
1944
    pop   ebx
1944
    pop   ebx
1945
    pop   eax
1945
    pop   eax
1946
    ret
1946
    ret
1947
 
1947
 
1948
; ===================================== ÌÈÐ =========================================
1948
; ===================================== ÌÈÐ =========================================
1949
 
1949
 
1950
ground_draw:
1950
ground_draw:
1951
 
1951
 
1952
    mov  eax, 13
1952
    mov  eax, 13
1953
    mov  ebx, 0*0x00010000 + (WINDOW_WIDTH-10)
1953
    mov  ebx, 0*0x00010000 + (WINDOW_WIDTH-10)
1954
    mov  ecx, (WINDOW_HEIGHT-GROUNG_HEIGHT)*0x00010000 + (GROUNG_HEIGHT-5-20)
1954
    mov  ecx, (WINDOW_HEIGHT-GROUNG_HEIGHT)*0x00010000 + (GROUNG_HEIGHT-5-20)
1955
    mov  edx, GROUND_COLOR
1955
    mov  edx, GROUND_COLOR
1956
    int  0x40
1956
    int  0x40
1957
 
1957
 
1958
    mov  eax, 38
1958
    mov  eax, 38
1959
    mov  ebx, 0*0x00010000 + (WINDOW_WIDTH-10)
1959
    mov  ebx, 0*0x00010000 + (WINDOW_WIDTH-10)
1960
    mov  ecx, (WINDOW_HEIGHT-GROUNG_HEIGHT)*0x00010000 + (WINDOW_HEIGHT-GROUNG_HEIGHT)
1960
    mov  ecx, (WINDOW_HEIGHT-GROUNG_HEIGHT)*0x00010000 + (WINDOW_HEIGHT-GROUNG_HEIGHT)
1961
    mov  edx, 0x000000
1961
    mov  edx, 0x000000
1962
    int  0x40
1962
    int  0x40
1963
 
1963
 
1964
    ret
1964
    ret
1965
 
1965
 
1966
 
1966
 
1967
city_draw:	      ; îòðèñîâêà ãîðîäà
1967
city_draw:	      ; îòðèñîâêà ãîðîäà
1968
 
1968
 
1969
    mov  ebx, _city
1969
    mov  ebx, _city
1970
    xor  edx, edx
1970
    xor  edx, edx
1971
  city_draw_loop:
1971
  city_draw_loop:
1972
    cmp  edx, 32
1972
    cmp  edx, 32
1973
    jae  city_draw_loop_end
1973
    jae  city_draw_loop_end
1974
    xor  eax, eax
1974
    xor  eax, eax
1975
    mov  ax, [ebx]
1975
    mov  ax, [ebx]
1976
    push  ebx
1976
    push  ebx
1977
    push  edx
1977
    push  edx
1978
    mov   ebx, bmp_tile
1978
    mov   ebx, bmp_tile
1979
  city_draw_loop2:
1979
  city_draw_loop2:
1980
    cmp  eax, 0
1980
    cmp  eax, 0
1981
    jle  city_draw_loop2_end
1981
    jle  city_draw_loop2_end
1982
    push  eax
1982
    push  eax
1983
    push  edx
1983
    push  edx
1984
    ; ôîðìèðîâàíèå êîîðäèíàò êàðòèíêè â edx
1984
    ; ôîðìèðîâàíèå êîîðäèíàò êàðòèíêè â edx
1985
    mov   ecx, edx
1985
    mov   ecx, edx
1986
    shl   edx, 4
1986
    shl   edx, 4
1987
    shl   ecx, 2
1987
    shl   ecx, 2
1988
    add   edx, ecx
1988
    add   edx, ecx
1989
    add   edx, CITY_OFFSET
1989
    add   edx, CITY_OFFSET
1990
    shl   edx, 16
1990
    shl   edx, 16
1991
    mov   ecx, eax
1991
    mov   ecx, eax
1992
    shl   eax, 4
1992
    shl   eax, 4
1993
    shl   ecx, 2
1993
    shl   ecx, 2
1994
    add   eax, ecx
1994
    add   eax, ecx
1995
    mov   ecx, WINDOW_HEIGHT-GROUNG_HEIGHT
1995
    mov   ecx, WINDOW_HEIGHT-GROUNG_HEIGHT
1996
    sub   ecx, eax
1996
    sub   ecx, eax
1997
    add   edx, ecx ; ïîëó÷èëè êîîðäèíàòû
1997
    add   edx, ecx ; ïîëó÷èëè êîîðäèíàòû
1998
    mov   ecx, 20*0x00010000 + 20   ; çàäàëè ðàçìåð êàðòèíêè
1998
    mov   ecx, 20*0x00010000 + 20   ; çàäàëè ðàçìåð êàðòèíêè
1999
    mov   eax, 7
1999
    mov   eax, 7
2000
    int   0x40		; âûâîäèì êàðòèíêó
2000
    int   0x40		; âûâîäèì êàðòèíêó
2001
    pop   edx
2001
    pop   edx
2002
    pop   eax
2002
    pop   eax
2003
    dec  eax
2003
    dec  eax
2004
    jmp  city_draw_loop2
2004
    jmp  city_draw_loop2
2005
  city_draw_loop2_end:
2005
  city_draw_loop2_end:
2006
 
2006
 
2007
    pop   edx
2007
    pop   edx
2008
    pop   ebx
2008
    pop   ebx
2009
    add  ebx, 2
2009
    add  ebx, 2
2010
    inc  edx
2010
    inc  edx
2011
    jmp  city_draw_loop
2011
    jmp  city_draw_loop
2012
  city_draw_loop_end:
2012
  city_draw_loop_end:
2013
 
2013
 
2014
    ret
2014
    ret
2015
 
2015
 
2016
 
2016
 
2017
clear_tiles:	   ; çà÷èñòêà âçîðâàííûõ ïëèòîê: eax - íîìåð ñòîëáöà, ecx - íèæíÿÿ ïëèòêà èç óäàëÿåìûõ, edx - âåðõíÿÿ ïëèòêà èç óäàëÿåìûõ
2017
clear_tiles:	   ; çà÷èñòêà âçîðâàííûõ ïëèòîê: eax - íîìåð ñòîëáöà, ecx - íèæíÿÿ ïëèòêà èç óäàëÿåìûõ, edx - âåðõíÿÿ ïëèòêà èç óäàëÿåìûõ
2018
 
2018
 
2019
    push eax
2019
    push eax
2020
    push ebx
2020
    push ebx
2021
    push ecx
2021
    push ecx
2022
    push edx
2022
    push edx
2023
    ; ôîðìèðîâàíèå êîîðäèíàòû X óãëà ïðÿìîóãîëüíèêà
2023
    ; ôîðìèðîâàíèå êîîðäèíàòû X óãëà ïðÿìîóãîëüíèêà
2024
    mov  ebx, eax
2024
    mov  ebx, eax
2025
    shl  eax, 4
2025
    shl  eax, 4
2026
    shl  ebx, 2
2026
    shl  ebx, 2
2027
    add  eax, ebx
2027
    add  eax, ebx
2028
    add  eax, CITY_OFFSET
2028
    add  eax, CITY_OFFSET
2029
    ;  ôîðìèðîâàíèå êîîðäèíàòû Y1 íèæíåãî êðàÿ íèæíåé ïëèòêè
2029
    ;  ôîðìèðîâàíèå êîîðäèíàòû Y1 íèæíåãî êðàÿ íèæíåé ïëèòêè
2030
    mov  ebx, ecx
2030
    mov  ebx, ecx
2031
    shl  ecx, 4
2031
    shl  ecx, 4
2032
    shl  ebx, 2
2032
    shl  ebx, 2
2033
    add  ecx, ebx
2033
    add  ecx, ebx
2034
    mov  ebx, WINDOW_HEIGHT-GROUNG_HEIGHT
2034
    mov  ebx, WINDOW_HEIGHT-GROUNG_HEIGHT
2035
    sub  ebx, ecx
2035
    sub  ebx, ecx
2036
    mov  ecx, ebx
2036
    mov  ecx, ebx
2037
    add  ecx, 20
2037
    add  ecx, 20
2038
    ; ôîðìèðîâàíèå êîîðäèíàòû Y2 âåðõíåãî êðàÿ âåðõíåé ïëèòêè
2038
    ; ôîðìèðîâàíèå êîîðäèíàòû Y2 âåðõíåãî êðàÿ âåðõíåé ïëèòêè
2039
    mov  ebx, edx
2039
    mov  ebx, edx
2040
    shl  edx, 4
2040
    shl  edx, 4
2041
    shl  ebx, 2
2041
    shl  ebx, 2
2042
    add  edx, ebx
2042
    add  edx, ebx
2043
    mov  ebx, WINDOW_HEIGHT-GROUNG_HEIGHT
2043
    mov  ebx, WINDOW_HEIGHT-GROUNG_HEIGHT
2044
    sub  ebx, edx
2044
    sub  ebx, edx
2045
    mov  edx, ebx
2045
    mov  edx, ebx
2046
    sub  edx, 20   ; ÷òîá è çåíèòêè ñòèðàòü, åñëè îíè åñòü
2046
    sub  edx, 20   ; ÷òîá è çåíèòêè ñòèðàòü, åñëè îíè åñòü
2047
    ; çàäàíèå êîîðäèíàòû ïðÿìîóãîëüíèêà ïî Y=Y2 è åãî âûñîòû H=Y1-Y2
2047
    ; çàäàíèå êîîðäèíàòû ïðÿìîóãîëüíèêà ïî Y=Y2 è åãî âûñîòû H=Y1-Y2
2048
    sub  ecx, edx
2048
    sub  ecx, edx
2049
    shl  edx, 16
2049
    shl  edx, 16
2050
    add  ecx, edx
2050
    add  ecx, edx
2051
    ; çàäàíèå êîîðäèíàòû ïðÿìîóãîëüíèêà ïî X è åãî øèðèíû 20
2051
    ; çàäàíèå êîîðäèíàòû ïðÿìîóãîëüíèêà ïî X è åãî øèðèíû 20
2052
    shl  eax, 16
2052
    shl  eax, 16
2053
    add  eax, 20
2053
    add  eax, 20
2054
    mov  ebx, eax
2054
    mov  ebx, eax
2055
    ; îòðèñîâêà ïðÿìîóãîëüíèêà öâåòà ôîíà
2055
    ; îòðèñîâêà ïðÿìîóãîëüíèêà öâåòà ôîíà
2056
    mov  eax, 13
2056
    mov  eax, 13
2057
    mov  edx, BACK_COLOR
2057
    mov  edx, BACK_COLOR
2058
    int  0x40
2058
    int  0x40
2059
 
2059
 
2060
    pop  edx
2060
    pop  edx
2061
    pop  ecx
2061
    pop  ecx
2062
    pop  ebx
2062
    pop  ebx
2063
    pop  eax
2063
    pop  eax
2064
 
2064
 
2065
    ret
2065
    ret
2066
 
2066
 
2067
 
2067
 
2068
load_level:	   ; çàãðóçêà óðîâíÿ, â eax íîìåð çàãðóæàåìîãî óðîâíÿ
2068
load_level:	   ; çàãðóçêà óðîâíÿ, â eax íîìåð çàãðóæàåìîãî óðîâíÿ
2069
 
2069
 
2070
    mov  eax, [_level_num]
2070
    mov  eax, [_level_num]
2071
    dec  eax
2071
    dec  eax
2072
    shl  eax, 7 	    ; óìíîæèòü íà ðàçìåð äàííûõ äëÿ îäíîãî óðîâíÿ (128 áàéò)
2072
    shl  eax, 7 	    ; óìíîæèòü íà ðàçìåð äàííûõ äëÿ îäíîãî óðîâíÿ (128 áàéò)
2073
    mov  ebx, levels
2073
    mov  ebx, levels
2074
    add  ebx, eax	    ; â ebx óêàçàòåëü íà íà÷àëî çàãðóæàåìîãî óðîâíÿ
2074
    add  ebx, eax	    ; â ebx óêàçàòåëü íà íà÷àëî çàãðóæàåìîãî óðîâíÿ
2075
    mov  edx, cur_level
2075
    mov  edx, cur_level
2076
    mov  ecx, 0
2076
    mov  ecx, 0
2077
  load_level_loop:
2077
  load_level_loop:
2078
    cmp  ecx, 128/4
2078
    cmp  ecx, 128/4
2079
    jae  load_level_loop_end
2079
    jae  load_level_loop_end
2080
    mov  eax, [ebx]
2080
    mov  eax, [ebx]
2081
    mov  [edx], eax
2081
    mov  [edx], eax
2082
    add  ebx, 4
2082
    add  ebx, 4
2083
    add  edx, 4
2083
    add  edx, 4
2084
    inc  ecx
2084
    inc  ecx
2085
    jmp  load_level_loop
2085
    jmp  load_level_loop
2086
  load_level_loop_end:
2086
  load_level_loop_end:
2087
 
2087
 
2088
  load_level_end:
2088
  load_level_end:
2089
 
2089
 
2090
    ret
2090
    ret
2091
 
2091
 
2092
; =================================== ÐÀÇÍÎÅ ========================================
2092
; =================================== ÐÀÇÍÎÅ ========================================
2093
 
2093
 
2094
timer_x4:
2094
timer_x4:
2095
    mov  eax, [_timer_x4]
2095
    mov  eax, [_timer_x4]
2096
    inc  eax
2096
    inc  eax
2097
    mov  [_timer_x4],eax
2097
    mov  [_timer_x4],eax
2098
    cmp  eax, 4
2098
    cmp  eax, 4
2099
    ja	 timer_x4_do
2099
    ja	 timer_x4_do
2100
    jmp  timer_x4_end
2100
    jmp  timer_x4_end
2101
  timer_x4_do:
2101
  timer_x4_do:
2102
    mov  [_timer_x4],0
2102
    mov  [_timer_x4],0
2103
  timer_x4_end:
2103
  timer_x4_end:
2104
    ret
2104
    ret
2105
 
2105
 
2106
 
2106
 
2107
timer_x2:
2107
timer_x2:
2108
    mov  eax, [_timer_x2]
2108
    mov  eax, [_timer_x2]
2109
    inc  eax
2109
    inc  eax
2110
    mov  [_timer_x2],eax
2110
    mov  [_timer_x2],eax
2111
    cmp  eax, 2
2111
    cmp  eax, 2
2112
    ja	 timer_x2_do
2112
    ja	 timer_x2_do
2113
    jmp  timer_x2_end
2113
    jmp  timer_x2_end
2114
  timer_x2_do:
2114
  timer_x2_do:
2115
    mov  [_timer_x2],0
2115
    mov  [_timer_x2],0
2116
  timer_x2_end:
2116
  timer_x2_end:
2117
    ret
2117
    ret
2118
 
2118
 
2119
draw_window:			     ; îòðèñîâêà îêíà
2119
draw_window:			     ; îòðèñîâêà îêíà
2120
 
2120
 
2121
    mov  eax,12
2121
    mov  eax,12
2122
    mov  ebx,1
2122
    mov  ebx,1
2123
    int  0x40
2123
    int  0x40
2124
 
2124
 
2125
    mov  eax,0
2125
    mov  eax,0
2126
    mov  ebx,100*65536+WINDOW_WIDTH
2126
    mov  ebx,100*65536+WINDOW_WIDTH
2127
    mov  ecx,100*65536+WINDOW_HEIGHT
2127
    mov  ecx,100*65536+WINDOW_HEIGHT
2128
    mov  edx,0x34000000+BACK_COLOR
2128
    mov  edx,0x34000000+BACK_COLOR
2129
    mov  edi,_window_caption
2129
    mov  edi,_window_caption
2130
    int  0x40
2130
    int  0x40
2131
 
2131
 
2132
    mov  eax,12
2132
    mov  eax,12
2133
    mov  ebx,2
2133
    mov  ebx,2
2134
    int  0x40
2134
    int  0x40
2135
 
2135
 
2136
    ret
2136
    ret
2137
 
2137
 
2138
 
2138
 
2139
 
2139
 
2140
draw_intro:
2140
draw_intro:
2141
 
2141
 
2142
    ;çàãîëîâîê
2142
    ;çàãîëîâîê
2143
    mov  eax,4
2143
    mov  eax,4
2144
    mov  ebx,(WINDOW_WIDTH/2-80)*65536 + 60
2144
    mov  ebx,(WINDOW_WIDTH/2-80)*65536 + 60
2145
    mov  ecx,0x80000000
2145
    mov  ecx,0x80000000
2146
    mov  edx,_text_intro_title
2146
    mov  edx,_text_intro_title
2147
    int  0x40
2147
    int  0x40
2148
 
2148
 
2149
    ;îïèñàíèå èãðû
2149
    ;îïèñàíèå èãðû
2150
    mov  eax,4
2150
    mov  eax,4
2151
    mov  ebx,(WINDOW_WIDTH/2-200)*65536 + 120
2151
    mov  ebx,(WINDOW_WIDTH/2-200)*65536 + 120
2152
    mov  ecx,0x80000000
2152
    mov  ecx,0x80000000
2153
    mov  edx,_text_intro_description1
2153
    mov  edx,_text_intro_description1
2154
    int  0x40
2154
    int  0x40
2155
 
2155
 
2156
 
2156
 
2157
    ;êëàâèøè óïðàâëåíèÿ
2157
    ;êëàâèøè óïðàâëåíèÿ
2158
    mov  eax,4
2158
    mov  eax,4
2159
    mov  ebx,(WINDOW_WIDTH/2-60)*65536 + 200
2159
    mov  ebx,(WINDOW_WIDTH/2-60)*65536 + 200
2160
    mov  ecx,0x80000000
2160
    mov  ecx,0x80000000
2161
    mov  edx,_text_intro_key_controls
2161
    mov  edx,_text_intro_key_controls
2162
    int  0x40
2162
    int  0x40
2163
 
2163
 
2164
    mov  eax,4
2164
    mov  eax,4
2165
    mov  ebx,(WINDOW_WIDTH/2-70)*65536 + 230
2165
    mov  ebx,(WINDOW_WIDTH/2-70)*65536 + 230
2166
    mov  ecx,0x80000000
2166
    mov  ecx,0x80000000
2167
    mov  edx,_text_intro_key_ctrl
2167
    mov  edx,_text_intro_key_ctrl
2168
    int  0x40
2168
    int  0x40
2169
 
2169
 
2170
    mov  eax,4
2170
    mov  eax,4
2171
    mov  ebx,(WINDOW_WIDTH/2-70)*65536 + 245
2171
    mov  ebx,(WINDOW_WIDTH/2-70)*65536 + 245
2172
    mov  ecx,0x80000000
2172
    mov  ecx,0x80000000
2173
    mov  edx,_text_intro_key_space
2173
    mov  edx,_text_intro_key_space
2174
    int  0x40
2174
    int  0x40
2175
 
2175
 
2176
    ; âûáîð óðîâíÿ
2176
    ; âûáîð óðîâíÿ
2177
 
2177
 
2178
    mov  eax,4
2178
    mov  eax,4
2179
    mov  ebx,(WINDOW_WIDTH/2-175)*65536 + 300
2179
    mov  ebx,(WINDOW_WIDTH/2-175)*65536 + 300
2180
    mov  ecx,0x80000000
2180
    mov  ecx,0x80000000
2181
    mov  edx,_text_intro_select_level
2181
    mov  edx,_text_intro_select_level
2182
    int  0x40
2182
    int  0x40
2183
 
2183
 
2184
    mov  eax,4
2184
    mov  eax,4
2185
    mov  ebx,(WINDOW_WIDTH/2-25)*65536 + 320
2185
    mov  ebx,(WINDOW_WIDTH/2-25)*65536 + 320
2186
    mov  ecx,0x80000000
2186
    mov  ecx,0x80000000
2187
    mov  edx,_text_intro_level_num
2187
    mov  edx,_text_intro_level_num
2188
    int  0x40
2188
    int  0x40
2189
 
2189
 
2190
    call draw_level_num
2190
    call draw_level_num
2191
 
2191
 
2192
    ; óñòàíîâêà ãðîìêîñòè
2192
    ; óñòàíîâêà ãðîìêîñòè
2193
 
2193
 
2194
    mov  eax,4
2194
    mov  eax,4
2195
    mov  ebx,(WINDOW_WIDTH/2-175)*65536 + 350
2195
    mov  ebx,(WINDOW_WIDTH/2-175)*65536 + 350
2196
    mov  ecx,0x80000000
2196
    mov  ecx,0x80000000
2197
    mov  edx,_text_intro_set_volume
2197
    mov  edx,_text_intro_set_volume
2198
    int  0x40
2198
    int  0x40
2199
 
2199
 
2200
    mov  eax,4
2200
    mov  eax,4
2201
    mov  ebx,(WINDOW_WIDTH/2-25)*65536 + 370
2201
    mov  ebx,(WINDOW_WIDTH/2-25)*65536 + 370
2202
    mov  ecx,0x80000000
2202
    mov  ecx,0x80000000
2203
    mov  edx,_text_intro_volume_num
2203
    mov  edx,_text_intro_volume_num
2204
    int  0x40
2204
    int  0x40
2205
    call draw_volume_num
2205
    call draw_volume_num
2206
 
2206
 
2207
    ; çàïóñê èãðû è âûõîä
2207
    ; çàïóñê èãðû è âûõîä
2208
 
2208
 
2209
    mov  eax,4
2209
    mov  eax,4
2210
    mov  ebx,(WINDOW_WIDTH/2-80)*65536 + 400
2210
    mov  ebx,(WINDOW_WIDTH/2-80)*65536 + 400
2211
    mov  ecx,0x80FF0000
2211
    mov  ecx,0x80FF0000
2212
    mov  edx,_text_intro_start_space
2212
    mov  edx,_text_intro_start_space
2213
    int  0x40
2213
    int  0x40
2214
 
2214
 
2215
    mov  eax,4
2215
    mov  eax,4
2216
    mov  ebx,(WINDOW_WIDTH/2-30)*65536 + 460
2216
    mov  ebx,(WINDOW_WIDTH/2-30)*65536 + 460
2217
    mov  ecx,0x80000000
2217
    mov  ecx,0x80000000
2218
    mov  edx,_text_intro_exit_key
2218
    mov  edx,_text_intro_exit_key
2219
    int  0x40
2219
    int  0x40
2220
 
2220
 
2221
 
2221
 
2222
   ret
2222
   ret
2223
 
2223
 
2224
 
2224
 
2225
draw_level_num:
2225
draw_level_num:
2226
 
2226
 
2227
    mov  eax, 13
2227
    mov  eax, 13
2228
    mov  ebx, (WINDOW_WIDTH/2+25)*0x00010000 + 30
2228
    mov  ebx, (WINDOW_WIDTH/2+25)*0x00010000 + 30
2229
    mov  ecx, 320*0x00010000 + 15
2229
    mov  ecx, 320*0x00010000 + 15
2230
    mov  edx, BACK_COLOR
2230
    mov  edx, BACK_COLOR
2231
    int  0x40
2231
    int  0x40
2232
 
2232
 
2233
    mov  eax, 47
2233
    mov  eax, 47
2234
    mov  ebx, 0x80020000
2234
    mov  ebx, 0x80020000
2235
    mov  ecx, [_level_num]
2235
    mov  ecx, [_level_num]
2236
    mov  edx, (WINDOW_WIDTH/2+25)*65536 + 320
2236
    mov  edx, (WINDOW_WIDTH/2+25)*65536 + 320
2237
    mov  esi,0x00000000
2237
    mov  esi,0x00000000
2238
    int  0x40
2238
    int  0x40
2239
 
2239
 
2240
    ret
2240
    ret
2241
 
2241
 
2242
draw_volume_num:
2242
draw_volume_num:
2243
 
2243
 
2244
    mov  eax, 13
2244
    mov  eax, 13
2245
    mov  ebx, (WINDOW_WIDTH/2+25)*0x00010000 + 30
2245
    mov  ebx, (WINDOW_WIDTH/2+35)*0x00010000 + 30
2246
    mov  ecx, 370*0x00010000 + 15
2246
    mov  ecx, 370*0x00010000 + 15
2247
    mov  edx, BACK_COLOR
2247
    mov  edx, BACK_COLOR
2248
    int  0x40
2248
    int  0x40
2249
 
2249
 
2250
    mov  eax, 47
2250
    mov  eax, 47
2251
    mov  ebx, 0x80020000
2251
    mov  ebx, 0x80020000
2252
    mov  ecx, [_set_volume]
2252
    mov  ecx, [_set_volume]
2253
    mov  edx, (WINDOW_WIDTH/2+25)*65536 + 370
2253
    mov  edx, (WINDOW_WIDTH/2+35)*65536 + 370
2254
    mov  esi,0x00000000
2254
    mov  esi,0x00000000
2255
    int  0x40
2255
    int  0x40
2256
 
2256
 
2257
    ret
2257
    ret
2258
 
2258
 
2259
;---------------------------------------------------------------------------
2259
;---------------------------------------------------------------------------
2260
;-------------------------------- äàííûå -----------------------------------
2260
;-------------------------------- äàííûå -----------------------------------
2261
;---------------------------------------------------------------------------
2261
;---------------------------------------------------------------------------
2262
 
2262
 
2263
_game_state dd ?
2263
_game_state dd ?
2264
_delay dd 6
2264
_delay dd 6
2265
_timer_x2 dd ?
2265
_timer_x2 dd ?
2266
_timer_x4 dd ?
2266
_timer_x4 dd ?
2267
_game_over_time  dd ?
2267
_game_over_time  dd ?
2268
_flag_air_raid_warning dd ?
2268
_flag_air_raid_warning dd ?
2269
_flag_bomberdatabin_ok dd ?
2269
_flag_bomberdatabin_ok dd ?
2270
_last_value_timecount dd ?
2270
_last_value_timecount dd ?
2271
 
2271
 
2272
_X_plane dd ?
2272
_X_plane dd ?
2273
_Y_plane dd ?
2273
_Y_plane dd ?
2274
_last_XY_plane dd ?
2274
_last_XY_plane dd ?
2275
_VX_plane dd ?
2275
_VX_plane dd ?
2276
_addit_VY_plane dd ?
2276
_addit_VY_plane dd ?
2277
_plane_state dd ?  ; 0 - ïîëåò íàïðàâî, 1- ïîëåò íàëåâî, 2-ðàçâîðîò ñïðàâà-íàëåâî, 3-ðàçâîðîò ñëåâà-íàïðàâî, 4 - áî÷êà âïðàâî, 5 - áî÷êà âëåâî
2277
_plane_state dd ?  ; 0 - ïîëåò íàïðàâî, 1- ïîëåò íàëåâî, 2-ðàçâîðîò ñïðàâà-íàëåâî, 3-ðàçâîðîò ñëåâà-íàïðàâî, 4 - áî÷êà âïðàâî, 5 - áî÷êà âëåâî
2278
_plane_state_step dd ?	 ; íîìåð øàãà òåêóùåãî ñîñòîÿíèÿ (íóæíî äëÿ ñèíõíîïèçàöèè ñ àíèìàöèåé)
2278
_plane_state_step dd ?	 ; íîìåð øàãà òåêóùåãî ñîñòîÿíèÿ (íóæíî äëÿ ñèíõíîïèçàöèè ñ àíèìàöèåé)
2279
_plane_health dd ?   ; çäîðîâüå ñàìîëåòà
2279
_plane_health dd ?   ; çäîðîâüå ñàìîëåòà
2280
 
2280
 
2281
_bomb_count dd ?
2281
_bomb_count dd ?
2282
_bomb_array rd 4*MAX_BOMBS
2282
_bomb_array rd 4*MAX_BOMBS
2283
_bomb_delay_time dd ?	; çàäåðæêà âðåìåíè íà ñáðîñ áîìáû
2283
_bomb_delay_time dd ?	; çàäåðæêà âðåìåíè íà ñáðîñ áîìáû
2284
 
2284
 
2285
_bang_array rd 2*MAX_BOMBS
2285
_bang_array rd 2*MAX_BOMBS
2286
 
2286
 
2287
_anim_pos_plane dd ?
2287
_anim_pos_plane dd ?
2288
; ïîñëåäîâàòåëüíîñòè êàðòèíîê àíèìàöèè
2288
; ïîñëåäîâàòåëüíîñòè êàðòèíîê àíèìàöèè
2289
_anim_array_uturn_rl dd 0,1,2,3,4,5,6,7,8
2289
_anim_array_uturn_rl dd 0,1,2,3,4,5,6,7,8
2290
_anim_array_uturn_lr dd 8,7,6,9,10,11,2,1,0
2290
_anim_array_uturn_lr dd 8,7,6,9,10,11,2,1,0
2291
_anim_array_barrel_r dd 0,1,2,12,13,14,15,16,0
2291
_anim_array_barrel_r dd 0,1,2,12,13,14,15,16,0
2292
_anim_array_barrel_l dd 8,17,18,19,20,21,6,7,8
2292
_anim_array_barrel_l dd 8,17,18,19,20,21,6,7,8
2293
 
2293
 
2294
 
2294
 
2295
cur_level:
2295
cur_level:
2296
; ìàññèâ, â êîòîðîì õðàíèòüñÿ òåêóùåå ñîñòîÿíèå ãîðîäà. èçíà÷àëüíî â íåãî çàãðóçàþòñÿ óðîâíè
2296
; ìàññèâ, â êîòîðîì õðàíèòüñÿ òåêóùåå ñîñòîÿíèå ãîðîäà. èçíà÷àëüíî â íåãî çàãðóçàþòñÿ óðîâíè
2297
_city rw 32
2297
_city rw 32
2298
; ìàññèâ, â êîòîðîì õðàíèòüñÿ òåêóùåå ñîñòîÿíèå çåíèòîê. èçíà÷àëüíî â íåãî çàãðóçàþòñÿ óðîâíè
2298
; ìàññèâ, â êîòîðîì õðàíèòüñÿ òåêóùåå ñîñòîÿíèå çåíèòîê. èçíà÷àëüíî â íåãî çàãðóçàþòñÿ óðîâíè
2299
_ackack rw 32
2299
_ackack rw 32
2300
; ìàññèâ, â êîòîðîì õðàíÿòñÿ çíà÷åíèÿ òåêóùèõ êîîðäèíà ñíàðÿäîâ îò çåíèòîê
2300
; ìàññèâ, â êîòîðîì õðàíÿòñÿ çíà÷åíèÿ òåêóùèõ êîîðäèíà ñíàðÿäîâ îò çåíèòîê
2301
_ackack_bullet rd 32
2301
_ackack_bullet rd 32
2302
 
2302
 
2303
; íîìåð òåêóùåãî óðîâíÿ
2303
; íîìåð òåêóùåãî óðîâíÿ
2304
_level_num dd 1
2304
_level_num dd 1
2305
; çàäàíèå óðîâíåé: 32 ÷èñëà îçíà÷àþò âûñîòó ñòðîåíèé (âûñîòà "â êâàäðàòàõ") äëÿ _level?_city
2305
; çàäàíèå óðîâíåé: 32 ÷èñëà îçíà÷àþò âûñîòó ñòðîåíèé (âûñîòà "â êâàäðàòàõ") äëÿ _level?_city
2306
;                  è ïîðÿäîê ïîÿâëåíèÿ çåíèòîê äëÿ _level?_ackack
2306
;                  è ïîðÿäîê ïîÿâëåíèÿ çåíèòîê äëÿ _level?_ackack
2307
levels:
2307
levels:
2308
_level1_city dw    0, 0, 0, 6, 5, 6, 5, 6, 3, 3, 3, 3, 3, 6, 7, 8,   8, 7, 6, 3, 3, 3, 3, 3, 6, 5, 6, 5, 6, 0, 0, 0
2308
_level1_city dw    0, 0, 0, 6, 5, 6, 5, 6, 3, 3, 3, 3, 3, 6, 7, 8,   8, 7, 6, 3, 3, 3, 3, 3, 6, 5, 6, 5, 6, 0, 0, 0
2309
_level1_ackack	dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2309
_level1_ackack	dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2310
 
2310
 
2311
_level2_city dw    0, 0, 0, 5, 5, 2, 5, 7, 7, 2, 7, 9, 9, 9, 2, 9,   9, 2, 9, 9, 9, 7, 2, 7, 7, 5, 2, 5, 5, 0, 0, 0
2311
_level2_city dw    0, 0, 0, 5, 5, 2, 5, 7, 7, 2, 7, 9, 9, 9, 2, 9,   9, 2, 9, 9, 9, 7, 2, 7, 7, 5, 2, 5, 5, 0, 0, 0
2312
_level2_ackack	dw 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 5, 0,   0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0
2312
_level2_ackack	dw 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 5, 0,   0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0
2313
 
2313
 
2314
_level3_city dw    0, 0, 0,12,12,12, 9, 9, 9,12,12,12, 9, 7, 5, 3,   3, 5, 7, 9,12,12,12, 9, 9, 9,12,12,12, 0, 0, 0
2314
_level3_city dw    0, 0, 0,12,12,12, 9, 9, 9,12,12,12, 9, 7, 5, 3,   3, 5, 7, 9,12,12,12, 9, 9, 9,12,12,12, 0, 0, 0
2315
_level3_ackack	dw 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 4, 0, 3, 0, 2, 1,   1, 2, 0, 3, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0
2315
_level3_ackack	dw 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 4, 0, 3, 0, 2, 1,   1, 2, 0, 3, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0
2316
 
2316
 
2317
_level4_city dw    0, 0, 0,12,12,12, 3,12,12,12, 3, 1, 1, 6,12,18,  18,12, 6, 1, 1, 3,12,12,12, 3,12,12,12, 0, 0, 0
2317
_level4_city dw    0, 0, 0,12,12,12, 3,12,12,12, 3, 1, 1, 6,12,18,  18,12, 6, 1, 1, 3,12,12,12, 3,12,12,12, 0, 0, 0
2318
_level4_ackack	dw 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 1, 0, 3, 0, 0, 2,   6, 0, 0, 3, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0
2318
_level4_ackack	dw 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 1, 0, 3, 0, 0, 2,   6, 0, 0, 3, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0
2319
 
2319
 
2320
_level5_city dw    0, 5,10,10,10,10,15,15,15,15,17,17,17,17, 1,15,  15, 1,17,17,17,17,15,15,15,15,10,10,10,10, 5, 0
2320
_level5_city dw    0, 5,10,10,10,10,15,15,15,15,17,17,17,17, 1,15,  15, 1,17,17,17,17,15,15,15,15,10,10,10,10, 5, 0
2321
_level5_ackack	dw 0, 8, 0, 9, 9, 0, 3, 3, 3, 3, 0, 0, 0, 0, 5, 1,   2, 5, 0, 0, 0, 0, 4, 4, 4, 4, 0,10,10, 0, 7, 0
2321
_level5_ackack	dw 0, 8, 0, 9, 9, 0, 3, 3, 3, 3, 0, 0, 0, 0, 5, 1,   2, 5, 0, 0, 0, 0, 4, 4, 4, 4, 0,10,10, 0, 7, 0
2322
 
2322
 
2323
; çâóêè
2323
; çâóêè
2324
_count_sounds dd ?
2324
_count_sounds dd ?
2325
_array_sounds rd 2*MAX_SOUNDS
2325
_array_sounds rd 2*MAX_SOUNDS
2326
 
2326
 
2327
_channel_sound_plane dd ?    ; íîìåð êàíàëà çâóêà ïðîïåëåðà ñàìîëåòà
2327
_channel_sound_plane dd ?    ; íîìåð êàíàëà çâóêà ïðîïåëåðà ñàìîëåòà
2328
_channel_sound_arw dd ?      ; íîìåð êàíàëà çâóêà ñèðåíû
2328
_channel_sound_arw dd ?      ; íîìåð êàíàëà çâóêà ñèðåíû
2329
_array_bombsoundchannels rd MAX_BOMBS	 ; ìàññèâ íîìåðîâ çâóêîâûõ êàíàëîâ äëÿ áîìá
2329
_array_bombsoundchannels rd MAX_BOMBS	 ; ìàññèâ íîìåðîâ çâóêîâûõ êàíàëîâ äëÿ áîìá
2330
 
2330
 
2331
_set_volume dd 8    ; ãðîìêîñòü 0..8
2331
_set_volume dd 8    ; ãðîìêîñòü 0..8
2332
 
2332
 
2333
; ðàçíîå
2333
; ðàçíîå
2334
 
2334
 
2335
_s_current_dir rb 4096	 ; ïóòü ê èñïîëíÿåìîìó ôàéëó
2335
_s_current_dir rb 4096	 ; ïóòü ê èñïîëíÿåìîìó ôàéëó
2336
 
2336
 
2337
file_info:	      ; èíôîðìàöèîííàÿ ñòðóêòóðà äëÿ ðàáîòû ñ ôàéëàìè
2337
file_info:	      ; èíôîðìàöèîííàÿ ñòðóêòóðà äëÿ ðàáîòû ñ ôàéëàìè
2338
  _fi_func dd ?
2338
  _fi_func dd ?
2339
  _fi_pos dd ?
2339
  _fi_pos dd ?
2340
  dd 0
2340
  dd 0
2341
  _fi_size dd ?
2341
  _fi_size dd ?
2342
  _fi_pbuff dd ?
2342
  _fi_pbuff dd ?
2343
  db 0
2343
  db 0
2344
  _fi_pfilename dd ?
2344
  _fi_pfilename dd ?
2345
 
2345
 
2346
if lang eq ru
2346
if lang eq ru
2347
	include 'ruslang.inc'
2347
	include 'ruslang.inc'
2348
else
2348
else
2349
	include 'englang.inc'
2349
	include 'englang.inc'
2350
end if
2350
end if
2351
 
2351
 
2352
bmp_plane:
2352
bmp_plane:
2353
file "plane.bmp":54
2353
file "plane.bmp":54
2354
 
2354
 
2355
bmp_bomb:
2355
bmp_bomb:
2356
file "bomb.bmp":54
2356
file "bomb.bmp":54
2357
 
2357
 
2358
bmp_tile:
2358
bmp_tile:
2359
file "tile.bmp":54
2359
file "tile.bmp":54
2360
 
2360
 
2361
bmp_ackack:
2361
bmp_ackack:
2362
file "ackack.bmp":54
2362
file "ackack.bmp":54
2363
 
2363
 
2364
 
2364
 
2365
align 16
2365
align 16
2366
rb 0x100 ; ðåçåðâ ïàìÿòè äëÿ ñòåêà.
2366
rb 0x100 ; ðåçåðâ ïàìÿòè äëÿ ñòåêà.
2367
 
2367
 
2368
i_end:
2368
i_end:
2369
>
2369
>
2370
>
2370
>
2371
>
2371
>