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:=1>0 |
2368 | i_end:=1>0 |
2369 | >=1 |
2369 | >=1 |
2370 | >=1 |
2370 | >=1 |
2371 | > |
2371 | > |