Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
485 | heavyiron | 1 | ; |
2 | ; Hunter. Version 1.1. |
||
3 | ; The game application for MeOS game compo 05.03.2005 - 12.03.2005 |
||
4 | ; |
||
5 | ; Author: Trans |
||
6 | ; Date: 07.03.2005 - 08.03.2005 |
||
7 | ; Modification: 08.05.2007 |
||
8 | ; Compiler: FASM |
||
9 | ; Target: MenuetOS game |
||
10 | ; |
||
11 | |||
12 | include '..\..\..\macros.inc' |
||
13 | |||
14 | use32 |
||
15 | |||
16 | org 0x0 |
||
17 | |||
18 | db 'MENUET01' ; 8 byte id |
||
19 | dd 0x01 ; header version |
||
20 | dd START ; start of code |
||
21 | dd I_END ; size of image |
||
22 | dd end_memory ;0x180000 ; memory for app |
||
23 | dd start_stack ; esp |
||
24 | dd 0x0 , 0x0 ; I_Param , I_Icon |
||
25 | |||
26 | START: ; start of execution |
||
27 | mov eax,40 |
||
28 | mov ebx,00100111b |
||
29 | mcall |
||
30 | |||
31 | mov eax,26 |
||
32 | mov ebx,9 |
||
33 | mcall |
||
34 | mov [second_count],eax |
||
35 | |||
36 | call init_object |
||
37 | |||
38 | call draw_window |
||
39 | |||
40 | still: |
||
41 | |||
42 | ; mov eax,23 ; wait here for event |
||
43 | ; mov ebx,10 |
||
44 | ; mcall |
||
45 | |||
46 | mov eax,05 |
||
47 | mov ebx,5 |
||
48 | mcall |
||
49 | mov eax,11 |
||
50 | mcall |
||
51 | |||
52 | push eax |
||
53 | mov eax,26 |
||
54 | mov ebx,9 |
||
55 | mcall |
||
56 | mov ebx,eax |
||
57 | sub eax,[second_count] |
||
58 | cmp ax,100 |
||
59 | jb still_continue_00 |
||
60 | inc dword [time_count] |
||
61 | mov [second_count],ebx |
||
62 | xor edx,edx |
||
63 | mov eax,ebx |
||
64 | mov ebx,30 |
||
65 | div ebx |
||
66 | cmp dl,0 |
||
67 | jnz still_loc_01 |
||
68 | call change_objects_speed |
||
69 | still_loc_01: |
||
70 | xor eax,eax |
||
71 | mov esi,forward_list |
||
72 | mov ecx,4 |
||
73 | still_loc_00: |
||
74 | cmp eax,dword [esi] |
||
75 | jnz still_continue_00 |
||
76 | add esi,4 |
||
77 | loop still_loc_00 |
||
78 | ; call set_current_objects_list |
||
79 | call init_object |
||
80 | still_continue_00: |
||
81 | pop eax |
||
82 | |||
83 | call movie_objects |
||
84 | |||
85 | cmp eax,1 ; redraw request ? |
||
86 | je red |
||
87 | cmp eax,2 ; key in buffer ? |
||
88 | je key |
||
89 | cmp eax,3 ; button in buffer ? |
||
90 | je button |
||
91 | cmp eax,6 ; mouse ? |
||
92 | je mouse |
||
93 | |||
94 | call draw_frame |
||
95 | |||
96 | jmp still |
||
97 | |||
98 | red: ; redraw |
||
99 | call draw_window |
||
100 | jmp still |
||
101 | |||
102 | key: ; key |
||
103 | mov eax,2 ; just read it and ignore |
||
104 | mcall |
||
105 | cmp al,0 |
||
106 | jnz still |
||
107 | cmp byte [menu_flag],0 |
||
108 | jnz still |
||
109 | cmp ah,' ' |
||
110 | jnz key_loc_00 |
||
111 | inc byte [pause_flag] |
||
112 | call draw_frame |
||
113 | call pause_game |
||
114 | key_loc_00: |
||
115 | jmp still |
||
116 | |||
117 | button: ; button |
||
118 | mov eax,17 ; get id |
||
119 | mcall |
||
120 | |||
121 | cmp ah,1 ; button id=1 ? |
||
122 | jne noclose |
||
123 | |||
124 | inc byte [game_over_flag] |
||
125 | call game_over_draw |
||
126 | |||
127 | mov eax,-1 ; close this program |
||
128 | mcall |
||
129 | noclose: |
||
130 | |||
131 | jmp still |
||
132 | |||
133 | |||
134 | mouse: ; mouse |
||
135 | mov eax,37 ; get coordinate |
||
136 | xor ebx,ebx |
||
137 | inc ebx |
||
138 | mcall |
||
139 | |||
140 | cmp ax,20 |
||
141 | jae mouse_loc_00 |
||
142 | mov ax,20 |
||
143 | mouse_loc_00: |
||
144 | sub ax,20 |
||
145 | shr ax,1 |
||
146 | ror eax,16 |
||
147 | shr ax,1 |
||
148 | push ax |
||
149 | ror eax,16 |
||
150 | mov dword [mouse_coord],eax |
||
151 | pop ax |
||
152 | cmp ax,110 |
||
153 | ja mouse_loc_03 |
||
154 | mov byte [gun_angle],0 |
||
155 | jmp mouse_loc_05 |
||
156 | mouse_loc_03: |
||
157 | cmp ax,210 |
||
158 | ja mouse_loc_04 |
||
159 | mov byte [gun_angle],1 |
||
160 | jmp mouse_loc_05 |
||
161 | mouse_loc_04: |
||
162 | mov byte [gun_angle],2 |
||
163 | mouse_loc_05: |
||
164 | |||
165 | mov eax,37 |
||
166 | xor ebx,ebx |
||
167 | mov bl,2 |
||
168 | mcall |
||
169 | |||
170 | cmp ax,1 |
||
171 | jnz not_left_button |
||
172 | call left_button_down |
||
173 | not_left_button: |
||
174 | call draw_frame |
||
175 | jmp still |
||
176 | |||
177 | |||
178 | |||
179 | |||
180 | ; ********************************************* |
||
181 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
||
182 | ; ********************************************* |
||
183 | |||
184 | |||
185 | draw_window: |
||
186 | |||
187 | |||
188 | mov eax,12 ; function 12:tell os about windowdraw |
||
189 | mov ebx,1 ; 1, start of draw |
||
190 | mcall |
||
191 | |||
192 | ; DRAW WINDOW |
||
193 | mov eax,0 ; function 0 : define and draw window |
||
194 | mov ebx,100*65536+640 ; [x start] *65536 + [x size] |
||
195 | mov ecx,100*65536+420 ; [y start] *65536 + [y size] |
||
196 | mov edx,0x13ffffff ; color of work area RRGGBB,8->color gl |
||
197 | mov edi,title ; WINDOW LABEL |
||
198 | mcall |
||
199 | |||
200 | call draw_frame |
||
201 | |||
202 | mov eax,12 ; function 12:tell os about windowdraw |
||
203 | mov ebx,2 ; 2, end of draw |
||
204 | mcall |
||
205 | |||
206 | ret |
||
207 | |||
208 | ;-------------Subprograms------------------------ |
||
209 | |||
210 | ; |
||
211 | ; In: |
||
212 | ; Out: |
||
213 | draw_frame: |
||
214 | cmp byte [menu_flag],0 |
||
215 | jz df_loc_00 |
||
216 | call draw_menu |
||
217 | retn |
||
218 | df_loc_00: |
||
219 | call draw_backside |
||
220 | mov esi,buf_oblako |
||
221 | mov eax,0*65536+0 |
||
222 | call draw_pict |
||
223 | mov eax,190*65536+23 |
||
224 | call draw_pict_scale_div_2 |
||
225 | mov esi,buf_sun |
||
226 | mov eax,256*65536+0 |
||
227 | call draw_pict |
||
228 | mov esi,buf_rock |
||
229 | mov eax,47*65536+83 |
||
230 | call draw_pict_scale_div_2 |
||
231 | mov eax,0*65536+70 |
||
232 | call draw_pict |
||
233 | |||
234 | call draw_objects |
||
235 | |||
236 | mov esi,buf_kust02 |
||
237 | mov eax,256*65536+127 |
||
238 | call draw_pict |
||
239 | mov esi,buf_kust01 |
||
240 | mov eax,0*65536+127 |
||
241 | call draw_pict |
||
242 | mov esi,buf_time |
||
243 | mov eax,5*65536+180 |
||
244 | call draw_pict |
||
245 | mov esi,buf_shots |
||
246 | mov eax,200*65536+180 |
||
247 | call draw_pict |
||
248 | mov esi,buf_lives |
||
249 | mov eax,5*65536+5 |
||
250 | call draw_pict |
||
251 | mov eax,56*65536+3 |
||
252 | call draw_lives |
||
253 | call draw_promakh |
||
254 | ; call draw_hole |
||
255 | cmp byte [gun_angle],0 |
||
256 | jnz df_loc_01 |
||
257 | mov esi,buf_gun02 |
||
258 | mov eax,120*65536+151 |
||
259 | call draw_pict |
||
260 | cmp byte [fire_flag],0 |
||
261 | jz df_loc_03 |
||
262 | mov esi,buf_fire02 |
||
263 | mov eax,108*65536+131 |
||
264 | call draw_pict |
||
265 | dec byte [fire_flag] |
||
266 | jmp df_loc_03 |
||
267 | df_loc_01: |
||
268 | cmp byte [gun_angle],2 |
||
269 | jnz df_loc_02 |
||
270 | mov esi,buf_gun01 |
||
271 | mov eax,140*65536+151 |
||
272 | call draw_pict |
||
273 | cmp byte [fire_flag],0 |
||
274 | jz df_loc_03 |
||
275 | mov esi,buf_fire01 |
||
276 | mov eax,167*65536+128 |
||
277 | call draw_pict |
||
278 | dec byte [fire_flag] |
||
279 | jmp df_loc_03 |
||
280 | df_loc_02: |
||
281 | mov esi,buf_gun00 |
||
282 | mov eax,140*65536+144 |
||
283 | call draw_pict |
||
284 | cmp byte [fire_flag],0 |
||
285 | jz df_loc_03 |
||
286 | mov esi,buf_fire00 |
||
287 | mov eax,135*65536+124 |
||
288 | call draw_pict |
||
289 | dec byte [fire_flag] |
||
290 | df_loc_03: |
||
291 | ; mov esi,buf_star |
||
292 | ; mov eax,300*65536+180 |
||
293 | ; call draw_pict |
||
294 | mov esi,buf_score |
||
295 | mov eax,120*65536+5 |
||
296 | call draw_pict |
||
297 | mov eax,260*65536+180 |
||
298 | mov ebx,[shots_count] |
||
299 | call number_print |
||
300 | mov eax,175*65536+3 |
||
301 | mov ebx,[score_count] |
||
302 | call number_print |
||
303 | mov eax,60*65536+180 |
||
304 | mov ebx,[time_count] |
||
305 | call number_print |
||
306 | call draw_mushka |
||
307 | cmp byte [pause_flag],0 |
||
308 | jz df_loc_04 |
||
309 | mov esi,buf_pause |
||
310 | mov eax,90*65536+80 |
||
311 | call draw_pict |
||
312 | df_loc_04: |
||
313 | cmp byte [game_over_flag],0 |
||
314 | jz df_loc_05 |
||
315 | mov esi,buf_gameover |
||
316 | mov eax,[game_over_coord] |
||
317 | call draw_pict |
||
318 | df_loc_05: |
||
319 | |||
320 | call buffer_scale_on_2 |
||
321 | ; call smooth_filter |
||
322 | mov eax,07 |
||
323 | mov ebx,buffer02 |
||
324 | mov ecx,640*65536+400 |
||
325 | mov edx,0*65536+20 |
||
326 | mcall |
||
327 | retn |
||
328 | |||
329 | |||
330 | ; |
||
331 | ; In: |
||
332 | ; Out: |
||
333 | draw_menu: |
||
334 | call clear_buffer |
||
335 | mov esi,buf_start |
||
336 | mov eax,60*65536+50 |
||
337 | call draw_pict |
||
338 | mov esi,buf_exit |
||
339 | mov eax,86*65536+120 |
||
340 | call draw_pict |
||
341 | call draw_mushka |
||
342 | call buffer_scale_on_2 |
||
343 | mov eax,07 |
||
344 | mov ebx,buffer02 |
||
345 | mov ecx,640*65536+400 |
||
346 | mov edx,0*65536+20 |
||
347 | mcall |
||
348 | retn |
||
349 | |||
350 | |||
351 | |||
352 | ; |
||
353 | ; In: |
||
354 | ; Out: |
||
355 | pause_game: |
||
356 | mov eax,40 |
||
357 | mov ebx,00000111b |
||
358 | mcall |
||
359 | |||
360 | pause_game_00: |
||
361 | mov eax,10 ; wait here for event |
||
362 | mcall |
||
363 | |||
364 | cmp eax,1 ; redraw request ? |
||
365 | je pg_red |
||
366 | cmp eax,2 ; key in buffer ? |
||
367 | je pg_key |
||
368 | cmp eax,3 ; button in buffer ? |
||
369 | je pg_button |
||
370 | jmp pause_game_00 |
||
371 | |||
372 | pg_red: ; redraw |
||
373 | call draw_window |
||
374 | jmp pause_game_00 |
||
375 | |||
376 | pg_key: ; key |
||
377 | mov eax,2 ; just read it and ignore |
||
378 | mcall |
||
379 | cmp al,0 |
||
380 | jnz pause_game_00 |
||
381 | cmp ah,' ' |
||
382 | jnz pgk_loc_00 |
||
383 | dec byte [pause_flag] |
||
384 | call draw_frame |
||
385 | mov eax,40 |
||
386 | mov ebx,00100111b |
||
387 | mcall |
||
388 | retn |
||
389 | pgk_loc_00: |
||
390 | jmp pause_game_00 |
||
391 | |||
392 | pg_button: ; button |
||
393 | mov eax,17 ; get id |
||
394 | mcall |
||
395 | cmp ah,1 ; button id=1 ? |
||
396 | jne pg_noclose |
||
397 | mov eax,-1 ; close this program |
||
398 | mcall |
||
399 | pg_noclose: |
||
400 | jmp pause_game |
||
401 | retn |
||
402 | |||
403 | ; |
||
404 | ; In: |
||
405 | ; Out: |
||
406 | left_button_down: |
||
407 | cmp byte [menu_flag],0 |
||
408 | jz lbd_loc_00 |
||
409 | call check_menu |
||
410 | retn |
||
411 | lbd_loc_00: |
||
412 | inc dword [shots_count] |
||
413 | inc byte [fire_flag] |
||
414 | ; mov eax,[mouse_coord] |
||
415 | ; mov [current_hole],eax |
||
416 | call check_kill_object |
||
417 | cmp byte [promakh_count],5 |
||
418 | jnz lbd_loc_01 |
||
419 | mov byte [promakh_count],0 |
||
420 | dec byte [lives_count] |
||
421 | jnz lbd_loc_01 |
||
422 | call draw_frame |
||
423 | mov byte [game_over_flag],1 |
||
424 | call game_over_draw |
||
425 | dec byte [game_over_flag] |
||
426 | inc byte [menu_flag] |
||
427 | lbd_loc_01: |
||
428 | retn |
||
429 | |||
430 | ; |
||
431 | ; In: |
||
432 | ; Out: |
||
433 | check_menu: |
||
434 | push eax |
||
435 | mov eax,[mouse_coord] |
||
436 | cmp ax,50 |
||
437 | jb cm_loc_00 |
||
438 | cmp ax,90 |
||
439 | ja cm_loc_00 |
||
440 | shr eax,16 |
||
441 | cmp ax,60 |
||
442 | jb cm_loc_00 |
||
443 | cmp ax,260 |
||
444 | ja cm_loc_00 |
||
445 | dec byte [menu_flag] |
||
446 | xor eax,eax |
||
447 | mov [score_count],eax |
||
448 | mov [shots_count],eax |
||
449 | mov [time_count],eax |
||
450 | mov [current_hole],eax |
||
451 | mov [current_hole+4],eax |
||
452 | mov [gun_angle],al |
||
453 | mov [stars_count],al |
||
454 | mov [promakh_count],al |
||
455 | mov byte [lives_count],3 |
||
456 | ; call set_current_objects_list |
||
457 | call init_object |
||
458 | pop eax |
||
459 | retn |
||
460 | cm_loc_00: |
||
461 | mov eax,[mouse_coord] |
||
462 | cmp ax,120 |
||
463 | jb cm_loc_01 |
||
464 | cmp ax,160 |
||
465 | ja cm_loc_01 |
||
466 | shr eax,16 |
||
467 | cmp ax,86 |
||
468 | jb cm_loc_01 |
||
469 | cmp ax,234 |
||
470 | ja cm_loc_01 |
||
471 | mov eax,-1 |
||
472 | mcall |
||
473 | cm_loc_01: |
||
474 | pop eax |
||
475 | retn |
||
476 | |||
477 | |||
478 | ; |
||
479 | ; |
||
480 | ; |
||
481 | game_over_draw: |
||
482 | pusha |
||
483 | mov dword [game_over_coord],42*65536+0 |
||
484 | mov ecx,15 |
||
485 | god_loc_00: |
||
486 | push ecx |
||
487 | call draw_frame |
||
488 | add word [game_over_coord],5 |
||
489 | mov eax,05 |
||
490 | mov ebx,3 |
||
491 | mcall |
||
492 | pop ecx |
||
493 | loop god_loc_00 |
||
494 | ; mov eax,7 |
||
495 | mov edx,0*65536+20 |
||
496 | mov ebx,buffer02 |
||
497 | mov ecx,3 |
||
498 | god_loc_01: |
||
499 | push ecx |
||
500 | mov eax,7 |
||
501 | mov ecx,640*65536+400 |
||
502 | mcall |
||
503 | push ebx |
||
504 | mov eax,05 |
||
505 | mov ebx,5 |
||
506 | mcall |
||
507 | pop ebx |
||
508 | sub ebx,640*3*5 |
||
509 | pop ecx |
||
510 | loop god_loc_01 |
||
511 | mov ecx,4 |
||
512 | god_loc_02: |
||
513 | push ecx |
||
514 | mov eax,7 |
||
515 | mov ecx,640*65536+400 |
||
516 | mcall |
||
517 | push ebx |
||
518 | mov eax,5 |
||
519 | mov ebx,5 |
||
520 | mcall |
||
521 | pop ebx |
||
522 | add ebx,640*3*5 |
||
523 | pop ecx |
||
524 | loop god_loc_02 |
||
525 | mov eax,5 |
||
526 | mov ebx,200 |
||
527 | mcall |
||
528 | popa |
||
529 | retn |
||
530 | |||
531 | include 'picture.inc' |
||
532 | include 'math.inc' |
||
533 | include 'object.inc' |
||
534 | ;----------------Data---------------------------- |
||
535 | |||
536 | mouse_coord dd 144*65536+84 |
||
537 | pause_flag db 0 ; 0/1 - active/pause |
||
538 | menu_flag db 1 ; 0/1 - game/menu |
||
539 | lives_count db 3 |
||
540 | stars_count db 0 ; 3 Stars = 1 Heart |
||
541 | shots_count dd 0 |
||
542 | time_count dd 0 |
||
543 | score_count dd 0 |
||
544 | second_count dd 0 |
||
545 | game_over_coord dd 0 |
||
546 | gun_angle db 0 ; 0/1/2 - left/vertical/right |
||
547 | game_over_flag db 0 ; 0/1 - continuing/end game |
||
548 | promakh_count db 0 |
||
549 | fire_flag db 0 ; 0/1 - no fire/fire from gun |
||
550 | current_hole dd 0,0,0,0,0,0 |
||
551 | forward_list db 0,0,0,0,0,0,0,0 |
||
552 | back_list db 0,0,0,0,0,0,0,0 |
||
553 | present_objects_list: |
||
554 | dd buf_glass, buf_net, buf_glaz, buf_plane00 |
||
555 | dd buf_heart02, buf_plane01, buf_net, buf_glaz |
||
556 | |||
557 | title db 'HUNTER 1.2 Trans, 2005',0 |
||
558 | |||
559 | buf_start: |
||
560 | include 'inc\start.inc' |
||
561 | buf_exit: |
||
562 | include 'inc\exit.inc' |
||
563 | buf_gameover: |
||
564 | include 'inc\gameover.inc' |
||
565 | buf_pause: |
||
566 | include 'inc\pause.inc' |
||
567 | buf_gun00: |
||
568 | include 'inc\gun00.inc' |
||
569 | buf_gun01: |
||
570 | include 'inc\gun01.inc' |
||
571 | buf_gun02: |
||
572 | include 'inc\gun02.inc' |
||
573 | buf_heart: |
||
574 | include 'inc\heart.inc' |
||
575 | buf_star: |
||
576 | include 'inc\star.inc' |
||
577 | buf_lives: |
||
578 | include 'inc\lives.inc' |
||
579 | buf_score: |
||
580 | include 'inc\score.inc' |
||
581 | buf_shots: |
||
582 | include 'inc\shots.inc' |
||
583 | buf_time: |
||
584 | include 'inc\time.inc' |
||
585 | buf_numbers: |
||
586 | ;include 'inc\numbers.inc' |
||
587 | buf_num0: |
||
588 | include 'inc\num0.inc' |
||
589 | buf_num1: |
||
590 | include 'inc\num1.inc' |
||
591 | buf_num2: |
||
592 | include 'inc\num2.inc' |
||
593 | buf_num3: |
||
594 | include 'inc\num3.inc' |
||
595 | buf_num4: |
||
596 | include 'inc\num4.inc' |
||
597 | buf_num5: |
||
598 | include 'inc\num5.inc' |
||
599 | buf_num6: |
||
600 | include 'inc\num6.inc' |
||
601 | buf_num7: |
||
602 | include 'inc\num7.inc' |
||
603 | buf_num8: |
||
604 | include 'inc\num8.inc' |
||
605 | buf_num9: |
||
606 | include 'inc\num9.inc' |
||
607 | buf_plus: |
||
608 | include 'inc\plus.inc' |
||
609 | buf_minus: |
||
610 | include 'inc\minus.inc' |
||
611 | buf_sun: |
||
612 | include 'inc\sun.inc' |
||
613 | buf_oblako: |
||
614 | include 'inc\oblako.inc' |
||
615 | buf_mushka: |
||
616 | include 'inc\mushka.inc' |
||
617 | buf_kust01: |
||
618 | include 'inc\kust01.inc' |
||
619 | buf_kust02: |
||
620 | include 'inc\kust02.inc' |
||
621 | buf_glass: |
||
622 | include 'inc\glass.inc' |
||
623 | buf_glaz: |
||
624 | include 'inc\glaz.inc' |
||
625 | buf_net: |
||
626 | include 'inc\net.inc' |
||
627 | buf_plane00: |
||
628 | include 'inc\plane00.inc' |
||
629 | buf_plane01: |
||
630 | include 'inc\plane01.inc' |
||
631 | buf_heart02: |
||
632 | include 'inc\heart02.inc' |
||
633 | buf_rock: |
||
634 | include 'inc\rock.inc' |
||
635 | buf_fire00: |
||
636 | include 'inc\fire00.inc' |
||
637 | buf_fire01: |
||
638 | include 'inc\fire01.inc' |
||
639 | buf_fire02: |
||
640 | include 'inc\fire02.inc' |
||
641 | buf_hole: |
||
642 | include 'inc\hole.inc' |
||
643 | |||
644 | I_END: |
||
645 | |||
646 | end_stack: |
||
647 | org $+1000h |
||
648 | start_stack: |
||
649 | |||
650 | org $+64 ; For stack protect |
||
651 | |||
652 | movieng_objects: |
||
653 | ; For one object - 16 bytes structure: |
||
654 | ; dd ; +00 Pointer to object OR 0 - if empty structure |
||
655 | ; dd ; +04 Current object coordinate X*65536+Y |
||
656 | ; db ; +08 Speed - Maximum 16 (???) |
||
657 | ; db ; +09 Amplitude |
||
658 | ; db ; +0A Direction 0/1 - right/left |
||
659 | ; db ; +0B Object Cost |
||
660 | ; dd ; +0C Reserve |
||
661 | ; |
||
662 | org $+16*16 |
||
663 | |||
664 | buffer00: |
||
665 | org $+320*201*3 |
||
666 | buffer01: |
||
667 | org $+100*201*3 |
||
668 | buffer02: |
||
669 | org $+640*401*3 |
||
670 | org $+640*40*3 |
||
671 | end_memory: |