]> github.com/historicalsource and other repositories - DRGNSRC.git/blob - DDPANEL.ASM
Fixed README extension
[DRGNSRC.git] / DDPANEL.ASM
1 \r
2 cseg            segment public 'code'\r
3 \r
4 assume          cs:cseg, ds:dseg\r
5 \r
6 include         ddeqfile\r
7 \r
8 public          panel, bonus, end_game\r
9 \r
10 extrn           entry:near, pull_person:near, put_person:near\r
11 extrn           main_loop:near, find_walkable:near\r
12 \r
13 extrn           ptxt:near,head:near,pnum:near\r
14 extrn           pscore:near,strength_bar:near,big_num:near\r
15 \r
16 panel:          cmp     cycle, 1\r
17                 jg      same_panel\r
18                 call    header\r
19                 call    heads\r
20 same_panel:     call    scores\r
21                 call    time\r
22         cmp     cheat_mode,0\r
23         je      no_creds\r
24                 call    cred\r
25 no_creds:\r
26                 call    bars\r
27                 call    lives\r
28                 call    end_game\r
29                 ret\r
30 \r
31 \r
32 header:         mov     si, offset one_up\r
33                 mov     dx, 2\r
34                 call    ptxt\r
35                 mov     si, offset two_up\r
36                 mov     dx, 30\r
37                 call    ptxt\r
38                 mov     si, offset pow\r
39                 mov     dx, 28+256*188\r
40                 call    ptxt\r
41                 mov     si, offset pow\r
42                 mov     dx, 2+256*188\r
43                 call    ptxt\r
44 ;mov    si, offset hi_up\r
45 ;mov    dx, 16\r
46 ;call   ptxt\r
47                 mov     si, offset time_up\r
48                 mov     dx, 16+2*256\r
49                 call    big_num\r
50 ;mov    dx, 20+0*256\r
51 \r
52         cmp     cheat_mode,0\r
53         je      no_chtxyz\r
54                 mov     si, offset creds_up\r
55                 mov     dx, 15+188*256\r
56                 call    ptxt\r
57 no_chtxyz:      \r
58                 ret\r
59 \r
60 \r
61 scores:         mov     ax, cycle\r
62                 and     ax, 6\r
63         shr     ax,1    ;ha ha ha !\r
64                 cmp     ax, 1\r
65                 je      score_pl1\r
66                 cmp     ax, 2\r
67                 je      score_pl2\r
68 ;cmp    ax, 3\r
69 ;je     score_hi\r
70                 ret\r
71 score_pl1:      mov     ax, pl1_score\r
72                 mov     dx, 4\r
73                 mov     cx, 6\r
74                 call    pscore\r
75                 ret\r
76 score_pl2:      mov     ax, pl2_score\r
77                 mov     dx, 32\r
78                 mov     cx, 6\r
79                 call    pscore\r
80                 ret\r
81 score_hi:       mov     ax, hi_score\r
82                 mov     dx, 18\r
83                 mov     cx, 6\r
84                 call    pscore\r
85                 ret\r
86 \r
87 \r
88 time:           test    cycle, 3eh\r
89                 jz      new_time\r
90                 ret\r
91 new_time:       test    cycle,1\r
92                 jnz     nnnn\r
93                 dec     timer\r
94 nnnn:\r
95         cmp     timer,0\r
96                 jl      time_over\r
97                 mov     ax, timer\r
98                 mov     cx, 2\r
99                 mov     dx, 20+2*256\r
100                 mov     si,offset dum_frg\r
101                 call    big_num         ;pnum\r
102                 ret\r
103 \r
104 time_over:      mov     byte ptr person_table + 5, 0\r
105                 mov     byte ptr person_table + 5 + per_list_size, 0\r
106                 mov     bl, mission\r
107                 shl     bl, 1\r
108                 xor     bh, bh\r
109                 add     bx, offset timetable2 - 2\r
110                 mov     ax, [bx]\r
111                 mov     timer, ax\r
112                 inc     timer\r
113                 ret\r
114 \r
115 \r
116 cred:           mov     ax, credits\r
117                 mov     cx, 1\r
118                 mov     dx, 24+188*256\r
119                 call    pnum\r
120                 ret\r
121 \r
122 \r
123 bars:           test    cycle, 6\r
124                 jz      new_bars\r
125                 ret\r
126 new_bars:       mov     si, offset person_table\r
127                 mov     al, [si+5]\r
128                 xor     ah, ah\r
129                 mov     di, 6\r
130                 mov     cx, 256 + 8*256\r
131                 call    strength_bar\r
132                 mov     si, offset person_table + per_list_size\r
133                 mov     al, [si+5]\r
134                 xor     ah, ah\r
135                 mov     di, 33\r
136                 mov     cx, 7*256       ;light grey?\r
137                 call    strength_bar\r
138                 ret\r
139 \r
140 \r
141 heads:\r
142 ;               mov     ax, 1\r
143 ;               mov     di, 1\r
144 ;               call    head\r
145 ;               mov     ax, 2\r
146 ;               mov     di, 28\r
147 ;               call    head\r
148                 ret\r
149 \r
150 \r
151 lives:          test    cycle, 6\r
152                 jz      new_lives\r
153                 ret\r
154 new_lives:      mov     ax, pl1_lives\r
155                 mov     cx, 1\r
156                 mov     dx, 1+256*180\r
157                 mov     si,offset dum_frg\r
158                 call    big_num\r
159                 mov     ax, pl2_lives\r
160                 mov     cx, 1\r
161                 mov     dx, 27+256*180\r
162                 mov     si,offset dum_frg\r
163                 call    big_num\r
164                 ret\r
165 \r
166 \r
167 no_end_game:    ret\r
168 end_game:       cmp     byte ptr person_table + 2, being_dead\r
169                 jne     no_end_game\r
170                 cmp     byte ptr person_table + 2 + per_list_size, being_dead\r
171                 jne     no_end_game\r
172                 mov     si, offset game_over\r
173                 mov     dx, 2+10*256\r
174                 call    ptxt\r
175                 mov     si, offset game_over\r
176                 mov     dx, 30+10*256\r
177                 call    ptxt\r
178                 pause   10\r
179                 cmp     credits, 0\r
180                 jne     test_restart\r
181                 jmp     entry\r
182 test_restart:   mov     dx, 8\r
183 flashloop:      push    dx\r
184                 mov     si, offset continue\r
185                 mov     dx, 2+10*256\r
186                 call    ptxt\r
187                 mov     si, offset continue\r
188                 mov     dx, 30+10*256\r
189                 call    ptxt\r
190                 mov     cx, 0\r
191 scanloop1:      cmp     keybd+fire_j, 0\r
192                 je      pl1_rst\r
193                 cmp     keybd+fire_jk, 0\r
194                 je      pl1_rst\r
195                 cmp     keybd+fire_k, 0\r
196                 je      pl2_rst\r
197                 loop    scanloop1\r
198                 mov     si, offset spaces\r
199                 mov     dx, 2+10*256\r
200                 call    ptxt\r
201                 mov     si, offset spaces\r
202                 mov     dx, 30+10*256\r
203                 call    ptxt\r
204                 mov     cx, 30000\r
205 scanloop2:      cmp     keybd+fire_j, 0\r
206                 je      pl1_rst\r
207                 cmp     keybd+fire_jk, 0\r
208                 je      pl1_rst\r
209                 cmp     keybd+fire_k, 0\r
210                 je      pl2_rst\r
211                 loop    scanloop2\r
212                 pop     dx\r
213                 dec     dx\r
214                 jnz     flashloop\r
215                 jmp     entry\r
216 \r
217 pl1_rst:        mov     pl1_lives, 2\r
218                 mov     pl1_score, 0\r
219                 mov     si, offset person_table\r
220                 jmp     player_rst\r
221 pl2_rst:        mov     pl2_lives, 2\r
222                 mov     pl2_score, 0\r
223                 mov     si, offset person_table + per_list_size\r
224 player_rst:\r
225         mov     ax,seg dseg\r
226         mov     ds,ax\r
227 ;mov    es,ax   ;is this bug ever gunna go ????\r
228                 push    si\r
229                 call    pull_person\r
230                 mov     strength, 20\r
231                 mov     action, getting_up\r
232                 mov     frame_no, -1\r
233                 call    find_walkable\r
234                 pop     si\r
235                 call    put_person\r
236                 dec     credits\r
237                 mov     si, offset spaces\r
238                 mov     dx, 2+10*256\r
239                 call    ptxt\r
240                 mov     si, offset spaces\r
241                 mov     dx, 30+10*256\r
242                 call    ptxt\r
243                 mov     bl, mission\r
244                 shl     bl, 1\r
245                 xor     bh, bh\r
246                 add     bx, offset timetable2 - 2\r
247                 mov     ax, [bx]\r
248                 mov     timer, ax\r
249                 pop     ax\r
250                 pop     ax\r
251                 pop     ax\r
252                 jmp     main_loop\r
253 \r
254 bonus:\r
255         mov     bx,offset bonii\r
256         mov     cl,mission\r
257         xor     ch,ch\r
258         shl     cx,1    ;cx = mission*2 !\r
259         add     bx,cx   ;index into table\r
260         mov     ax,[bx]\r
261         mov     bonus_sc,ax     ;save for later !\r
262 \r
263         cmp     mission,5\r
264         je      miss5_only\r
265         \r
266                 mov     si, offset bonus_pt\r
267                 mov     dx, 12+80*256\r
268                 call    ptxt\r
269 \r
270         mov     ax,bonus_sc\r
271                 mov     cx, 3\r
272                 mov     dx, 24+80*256\r
273         xor     bscrn,200h\r
274                 call    pnum\r
275         xor     bscrn,200h\r
276                 mov     si, offset missn_message\r
277                 mov     dx, 8+96*256\r
278                 call    ptxt\r
279 \r
280                 mov     al, mission\r
281                 cbw\r
282                 mov     cx, 1\r
283                 mov     dx, 30+96*256\r
284         xor     bscrn,200h\r
285                 call    pnum\r
286         xor     bscrn,200h\r
287 from_miss5:\r
288         mov     ax,bonus_sc\r
289                 cmp     byte ptr person_table + 2, being_dead\r
290                 je      no_pl1_bonus\r
291                 add     pl1_score, ax   ;300\r
292 no_pl1_bonus:   cmp     byte ptr person_table + 2 + per_list_size, being_dead\r
293                 je      no_pl2_bonus\r
294                 add     pl2_score, ax   ;300\r
295 no_pl2_bonus:   ret\r
296 \r
297 miss5_only:\r
298         mov     si, offset miss5_message\r
299         mov     dx, 8+96*256\r
300         call    ptxt\r
301         jmp     from_miss5\r
302 \r
303 cseg            ends\r
304 \r
305 \r
306 dseg            segment public 'data'\r
307 \r
308 public          pl1_score, pl2_score, pl1_lives, pl2_lives, hi_score\r
309 public          credits, timer\r
310 \r
311 extrn           identity_table:byte, player2_table:byte, cycle:word\r
312 extrn           person_table:byte, walk_dr_0f:word, walk_dl_0f:word\r
313 extrn           keybd:byte, strength:byte, action:byte, frame_no:word\r
314 extrn           mission:byte,cheat_mode:word\r
315 extrn           number:byte\r
316 \r
317 ss_s            dw      ?\r
318 sp_s            dw      ?\r
319 \r
320 pl1_score       dw      0\r
321 pl2_score       dw      0\r
322 pl1_lives       dw      2\r
323 pl2_lives       dw      2\r
324 credits         dw      5\r
325 timer           dw      70\r
326 hi_score        dw      2000 ; x 10\r
327 dum_frg db      0\r
328 one_up          db      "1P", 0\r
329 two_up          db      "2P", 0\r
330 hi_up           db      "HI", 0\r
331 time_up         db      255,0           ;"TIME", 0\r
332 creds_up        db      "CREDITS", 0\r
333 game_over       db      "GAME OVER", 0\r
334 continue        db      "CONTINUE ", 0\r
335 spaces          db      "         ", 0\r
336 pow             db      "POW",0\r
337 bonus_pt        db      "BONUS POINT 3000", 0   ;end zero needed!\r
338 missn_message   db      "GET READY FOR MISSION ", 0\r
339 miss5_message   db      "INVADE THE ENEMY'S BASE ",0\r
340 bonus_sc        dw      0\r
341 bonii           dw      0,0,300,500,800,0,0     ;no bonuses for last two levels\r
342 ; er its 1-5 and mission is 1 bigger than the one just finished!\r
343 timetable2      dw      70, 70, 90, 50, 90\r
344 \r
345 extrn           bscrn:word\r
346 \r
347 dseg            ends\r
348 \r
349 end\r
350 \1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a