]> github.com/historicalsource and other repositories - DRGNSRC.git/blob - DDSETUP.ASM
Fixed README extension
[DRGNSRC.git] / DDSETUP.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          set_up, death, find_walkable,renum_chrs\r
9 public          set_vga\r
10 \r
11 extrn           load:near, rect_offscrn:near, get_surface:near\r
12 extrn           grabeither:near,rl_william:near,rl_bigbos:near\r
13 extrn           rl_linda:near,reload:near,cvertx:near\r
14 extrn           disp_scrn:near,ptxt:near,load_error:near\r
15 \r
16 miss5_frig:\r
17 ; make things a hole !\r
18         pushall\r
19         mov     cx,20\r
20         mov     si,4008+offset chr_map\r
21 ch_lp1:\r
22         mov     ah,[si]\r
23         and     ah,81h  ;mask out chr but none else\r
24         or      ah,36   ;place the newchr in\r
25         mov     [si],ah\r
26         add     si,2\r
27         loop    ch_lp1\r
28         mov     cx,22\r
29         mov     si,4190+offset chr_map\r
30 ch_lp2:\r
31         mov     ah,[si]\r
32         and     ah,81h  ;mask out chr but none else\r
33         or      ah,36   ;place the newchr in\r
34         mov     [si],ah\r
35         add     si,2\r
36         loop    ch_lp2\r
37 \r
38         mov     cx,24\r
39         mov     si,4372+offset chr_map\r
40 ch_lp3:\r
41         mov     ah,[si]\r
42         and     ah,81h  ;mask out chr but none else\r
43         or      ah,36   ;place the newchr in\r
44         mov     [si],ah\r
45         add     si,2\r
46         loop    ch_lp3\r
47 \r
48         mov     cx,26+16\r
49         mov     si,4554+offset chr_map\r
50 ch_lp4:\r
51         mov     ah,[si]\r
52         and     ah,81h  ;mask out chr but none else\r
53         or      ah,36   ;place the newchr in\r
54         mov     [si],ah\r
55         add     si,2\r
56         loop    ch_lp4\r
57 \r
58         mov     cx,28+14\r
59         mov     si,4736+offset chr_map\r
60 ch_lp5:\r
61         mov     ah,[si]\r
62         and     ah,81h  ;mask out chr but none else\r
63         or      ah,36   ;place the newchr in\r
64         mov     [si],ah\r
65         add     si,2\r
66         loop    ch_lp5\r
67 \r
68         popall\r
69         ret\r
70 \r
71 set_up:\r
72         MOV     AX,SEG DSEG\r
73         MOV     DS,AX   ;WHAT A LAUGH !\r
74                 call    empty_p_tab\r
75                 call    setup_w_tab\r
76 \r
77         mov     al,mission\r
78         xor     ah,ah           ; mission is 1 to 5 i reckon.\r
79         call    disp_scrn       ; shows those fucking nintendo scrns!\r
80         mov     al,mission\r
81         xor     ah,ah\r
82         call    nint_text       ; that crappy stupid text !\r
83 \r
84                 mov     bl, mission\r
85                 shl     bl, 1\r
86                 xor     bh, bh\r
87                 add     bx, offset mission_table-2\r
88                 mov     bx, [bx]\r
89 \r
90                 push    bx\r
91                 cmp     [sixteencol],0  ;sixteencolours ?\r
92                 jp_e    nsix\r
93         cmp     sixteencol,3    ; vga version\r
94         jp_e    vga_ld\r
95         load_m2 dumvar,[bx+49],g_disc\r
96         cmp     sixteencol,1\r
97         jne     no_cv_1\r
98         pushall\r
99         mov     ax,seg dumvar\r
100         mov     es,ax\r
101         mov     di,offset dumvar\r
102         mov     cx,30720        ;just how long is the file\r
103         call    cvertx\r
104         popall\r
105 no_cv_1:        cmp     mission,4\r
106                 jp_e    othrstf         ;no second block for level 4\r
107                 load_m2 dm2,[bx+51],g_disc\r
108         cmp     sixteencol,1\r
109         jne     no_cv_2\r
110         pushall\r
111         mov     ax,seg dm2\r
112         mov     es,ax\r
113         mov     di,offset dm2\r
114         mov     cx,30720        ;just how long is the file\r
115         call    cvertx\r
116         popall\r
117 no_cv_2:\r
118 ;NEED CONVERSION CODE HERE WHEN TANDY VERSION IS COMPLETED.\r
119         jmp     othrstf ;skip other loading !\r
120 vga_ld:\r
121                 load_m2 dumvar,[bx+53],g_disc\r
122                 cmp     mission,4\r
123                 je      othrstf         ;no second block for level 4\r
124                 load_m2 dm2,[bx+55],g_disc\r
125 \r
126                 jmp     othrstf ;skip other loading !\r
127 \r
128 nsix:\r
129                 load_m2 chr_blocks,[bx],g_disc\r
130                 load_m2 chr_block2,[bx+47],g_disc\r
131 othrstf:\r
132 \r
133                 pop     bx\r
134 ;DOES ZE LOADING OF CHR_MAP CRASH IT ?\r
135                 push    bx\r
136 rty:\r
137                 mov     start_seg,seg chr_map\r
138                 mov     start_offset,offset chr_map -4  ;lose those bytes !\r
139                 mov     ax, [bx+2]\r
140                 mov     file_name, ax\r
141                 call    load\r
142         cmp     errfl,0\r
143         je      nay_err\r
144         mov     ax,g_disc\r
145         call    load_error\r
146         jmp     rty\r
147 nay_err:\r
148 \r
149         cmp     mission,5\r
150         jne     not_zis\r
151         call    miss5_frig\r
152 not_zis:\r
153                 pop     bx\r
154 \r
155                 push    bx\r
156                 load_m2 hat_map, [bx+4] , g_disc\r
157                 pop     bx\r
158 \r
159         mov     ax, [bx+6]\r
160         mov     map_width, ax\r
161         mov     ax, [bx+8]\r
162         mov     map_right, ax   ;what the hell is map right\r
163 \r
164                 mov     ax, [bx+10]\r
165                 mov     map_bottom, ax\r
166 \r
167                 mov     ax, [bx+12]\r
168                 mov     posn_in_map, ax\r
169                 mov     ax, [bx+14]\r
170                 mov     scrn_left, ax\r
171                 mov     ax, [bx+16]\r
172                 mov     scrn_top, ax\r
173 \r
174                 mov     ax, [bx+18]\r
175                 mov     word ptr person_table + 8, ax   ; map_x of player 1\r
176                 mov     ax, [bx+20]\r
177                 mov     word ptr person_table + 10, ax  ; map_y of player 1\r
178                 mov     ax, [bx+22]\r
179                 mov     word ptr person_table + 8 + per_list_size, ax   ; pl2x\r
180                 mov     ax, [bx+24]\r
181                 mov     word ptr person_table + 10 + per_list_size, ax  ; pl2y\r
182                 mov     al, [bx+26]\r
183                 mov     person_table + 3, al    ; height of player 1\r
184                 mov     al, [bx+27]\r
185                 mov     person_table + 3 + per_list_size, al    ; h, player 2\r
186 \r
187                 mov     ax, [bx+28]\r
188                 mov     trigger_point, ax\r
189                 mov     ax, [bx+30]\r
190                 mov     limit_ptr, ax\r
191 \r
192                 mov     ax, [bx+32]\r
193                 mov     door_map_x, ax\r
194                 mov     ax, [bx+34]\r
195                 mov     door_map_y, ax\r
196                 mov     ax, [bx+36]\r
197                 mov     door_trigger, ax\r
198                 mov     al, [bx+38]\r
199 \r
200                 mov     opened, al\r
201                 mov     al, [bx+39]\r
202                 mov     closing, al\r
203                 mov     al, [bx+40]\r
204                 mov     closed, al\r
205                 mov     ax, [bx+41]\r
206                 mov     rect_rows, ax\r
207 \r
208                 mov     ax, [bx+43]\r
209                 mov     min_plane, ax\r
210                 mov     ax, [bx+45]\r
211                 mov     max_plane, ax\r
212 \r
213                 mov     window_topleft, offset dummy_scrn\r
214                 mov     window_top, 0\r
215                 mov     window_left, 0\r
216                 mov     posn_in_chr, 0\r
217                 mov     limit_flag, 1\r
218                 mov     cycle, 0\r
219                 mov     furthest_reachd, 0\r
220 \r
221                 mov     bl, mission\r
222                 shl     bl, 1\r
223                 xor     bh, bh\r
224                 add     bx, offset timetable - 2\r
225                 mov     ax, [bx]\r
226                 mov     timer, ax\r
227 \r
228                 mov     rect_cols, 0\r
229                 call    rect_offscrn\r
230                 mov     door_state, 0\r
231                 mov     wall_state, 0\r
232 \r
233                 mov     cx,2\r
234                 mov     si,offset person_table\r
235 ;if this player is dead then make sure I don't make him standing.\r
236 rset_plyer:\r
237                 cmp     byte ptr [si+2],being_dead\r
238                 je      dont_unkill\r
239                 mov     byte ptr [si+2], standing\r
240 dont_unkill:\r
241                 mov     byte ptr [si+4], down+right\r
242                 mov     byte ptr [si+5], 20\r
243                 mov     word ptr [si+6], -1\r
244                 mov     word ptr [si+18], nawt_lad\r
245                 add     si,per_list_size\r
246                 loop    rset_plyer\r
247 \r
248         call    reload  ; Checks wether we need to reload \r
249                         ; if so it loads in the req file.\r
250 \r
251         cmp     [sixteencol],0\r
252         jne     noncga\r
253 ;cmp    mission, 3\r
254 ;je     green_palette\r
255 ;cmp    mission, 4\r
256 ;je     green_palette\r
257                 mov     ax, 5\r
258                 int     16\r
259                 ret\r
260 noncga:\r
261                 mov     ax,[gmode]\r
262                 int     16\r
263         cmp     sixteencol,3\r
264         jne     no_c_pal\r
265         pushall\r
266 \r
267         mov     dx,offset vga_col_table\r
268         call    set_vga\r
269 \r
270         call    vga_cls\r
271 \r
272         popall\r
273 no_c_pal:\r
274                 ret\r
275 \r
276 vga_cls:\r
277         mov     ax,0a000h\r
278         mov     es,ax\r
279         xor     di,di\r
280 \r
281         mov     cx,8192 ;number of words for 2 whole screens\r
282 \r
283         mov     dx,3c4h\r
284         mov     ax,0e02h\r
285         out     dx,ax   ;set up sequencer.\r
286         mov     ax,65535        ;err ? affect em all ?\r
287 rep     stosw\r
288 \r
289         ret\r
290 \r
291 renum_chrs:\r
292         ret\r
293 set_vga:\r
294         mov     ax,seg pal_tab\r
295         mov     es,ax\r
296         mov     bx,0\r
297         mov     cx,16   ;err?\r
298         mov     ax,1012h        ;func 10h sub-func 12h\r
299         int     16              ; set the colour registers\r
300         mov     dx,offset pal_tab\r
301         mov     ax,1002h        ;set the palette registers !\r
302         int     16\r
303         ret\r
304 \r
305 ;green_palette: mov     ax, 4\r
306 ;int    16\r
307 ;mov    ah, 11\r
308 ;mov    bx, 100h\r
309 ;int    16\r
310 ;ret\r
311 \r
312 empty_p_tab:    mov     si, offset person_table + 2 * per_list_size\r
313                 mov     cx, 5\r
314 empty_pt_loop:  mov     byte ptr [si+2], being_dead\r
315                 add     si, per_list_size\r
316                 loop    empty_pt_loop\r
317                 ret\r
318 \r
319 \r
320 setup_w_tab:    mov     bl, mission\r
321                 shl     bl, 1\r
322                 xor     bh, bh\r
323                 add     bx, offset wepup_table-2\r
324                 mov     si, [bx]\r
325                 mov     di, offset weapon_table\r
326                 mov     cx, 3 * wep_list_size\r
327                 rep     movsw\r
328                 ret\r
329 \r
330 bill_death:\r
331                 cmp     strength, 0\r
332                 jp_ne   no_death\r
333 \r
334                 cmp     frame_no, offset bidie_r_8      ;p_null_0\r
335                 je      kill_bill\r
336                 cmp     action,bidye\r
337                 jp_e    no_death        ;already dying !\r
338 \r
339                 mov     action,bidye    ;set off dying\r
340                 mov     frame_no,-1\r
341                 ret     ;hmm hmm hmm ? safe at this as when bill is dead\r
342 kill_bill:\r
343                 mov     action,being_dead       ;kill so we can fin level\r
344                 ret                     \r
345 \r
346 death:          cmp     name_, player1\r
347                 je      player_death\r
348                 cmp     name_, player2\r
349                 je      player_death\r
350                 cmp     type_, bill\r
351                 je      bill_death\r
352                 cmp     strength, 0\r
353                 jne     no_death\r
354                 cmp     frame_no, offset getup_r_0\r
355                 je      enemy_death\r
356                 cmp     frame_no, offset getup_l_0\r
357                 jne     no_death\r
358 enemy_death:\r
359                 mov     action, being_dead\r
360 no_death:\r
361                 ret\r
362 \r
363 player_death:   cmp     action, being_dead\r
364                 je      lives_down\r
365                 cmp     strength, 0\r
366                 jg      no_death\r
367                 cmp     action, standing\r
368                 je      player_collapse\r
369                 cmp     action, walking\r
370                 je      player_collapse\r
371                 cmp     frame_no, offset p_null_0\r
372                 jne     no_death\r
373                 mov     action, being_dead\r
374 lives_down:     cmp     name_, player2\r
375                 je      player2_death\r
376                 sub     pl1_lives, 1\r
377                 adc     pl1_lives, 0\r
378                 jmp     reincarnate\r
379 player2_death:  sub     pl2_lives, 1\r
380                 adc     pl2_lives, 0\r
381 reincarnate:    jc      try_restart\r
382                 mov     action, getting_up\r
383                 mov     frame_no, -1\r
384                 mov     strength, 20\r
385                 call    find_walkable\r
386                 ret\r
387 player_collapse:mov     action, collapsing\r
388                 mov     frame_no, -1\r
389                 ret\r
390 try_restart:    cmp     credits, 0\r
391                 je      no_rst\r
392                 cmp     name_, player2\r
393                 je      pl2_rst\r
394                 cmp     keybd+fire_j, 0\r
395                 je      new_pl1\r
396                 cmp     keybd+fire_jk, 0\r
397                 je      new_pl1\r
398 no_rst:         ret\r
399 pl2_rst:        cmp     keybd+fire_k, 0\r
400                 je      new_pl2\r
401                 ret\r
402 new_pl1:        mov     pl1_lives, 2\r
403                 mov     pl1_score, 0\r
404                 jmp     over_npl2\r
405 new_pl2:        mov     pl2_lives, 2\r
406                 mov     pl2_score, 0\r
407 over_npl2:      mov     strength, 20\r
408                 mov     action, getting_up\r
409                 mov     frame_no, -1\r
410                 dec     credits\r
411                 call    find_walkable\r
412                 mov     bl, mission\r
413                 shl     bl, 1\r
414                 xor     bh, bh\r
415                 add     bx, offset timetable - 2\r
416                 mov     ax, [bx]\r
417                 mov     timer, ax\r
418                 ret\r
419 \r
420 find_walkable:  mov     ax, scrn_left\r
421                 add     ax, 25\r
422                 cmp     name_, player1\r
423                 je      skip_fw\r
424                 add     ax, 10\r
425 skip_fw:        mov     test_map_x, ax\r
426                 mov     ax, scrn_top\r
427                 add     ax, 20\r
428                 mov     test_map_y, ax\r
429                 mov     bx, 1           ; line length in steps\r
430                 mov     dx, 4           ; step length in map units\r
431         mov     test_height,1   ;?\r
432 spiral_loop:\r
433                 mov     cx, bx\r
434 line_loop_1:    push    bx\r
435                 push    cx\r
436                 push    dx\r
437                 call    get_surface\r
438 ;border 10\r
439                 pop     dx\r
440                 pop     cx\r
441                 pop     bx\r
442                 cmp     byte ptr attribute,0    ; walkable 0 attr is garys walkable all over\r
443                 je      found_it\r
444                 add     test_map_x, dx\r
445                 loop    line_loop_1\r
446 \r
447                 mov     cx, bx\r
448 line_loop_2:    push    bx\r
449                 push    cx\r
450                 push    dx\r
451                 call    get_surface\r
452 ;border 10\r
453                 pop     dx\r
454                 pop     cx\r
455                 pop     bx\r
456                 cmp     byte ptr attribute,0            ; walkable\r
457                 je      found_it\r
458                 add     test_map_y, dx\r
459                 loop    line_loop_2\r
460 \r
461                 inc     bx\r
462                 neg     dx\r
463                 jmp     spiral_loop\r
464 \r
465 found_it:       mov     ax, test_map_x\r
466                 mov     map_x, ax\r
467                 mov     ax, test_map_y\r
468                 mov     map_y, ax\r
469                 mov     al, level\r
470                 mov     height, al\r
471                 ret\r
472 \r
473 \r
474 nint_text:\r
475 ;       print some bloody text onto the screen.\r
476 ;       for those fucking nintendo scrns.\r
477 ;       ax = mission .\r
478 \r
479         pushall\r
480         shl     ax,1\r
481         shl     ax,1\r
482         mov     bx,offset text_tables\r
483         add     bx,ax           ;index into the tables\r
484         push    bx\r
485         mov     si,[bx]         ;address of first text message\r
486 \r
487         mov     dx,2+140*256\r
488         call    ptxt\r
489         pop     bx\r
490         mov     si,[bx+2]\r
491         mov     dx,2+160*256\r
492         call    ptxt\r
493 \r
494         popall\r
495         ret\r
496 \r
497 cseg            ends\r
498 \r
499 extrn   chr_blocks:byte\r
500 chr_block2      equ     chr_blocks+15360        ;secondary load address\r
501 \r
502 dseg            segment public 'data'\r
503 extrn   test_height:byte,errfl:word\r
504 extrn           mission:byte,  chr_map:word, hat_map:word\r
505 extrn           start_seg:word, start_offset:word, file_name:word\r
506 extrn           map_width:word, map_right:word, map_bottom:word\r
507 extrn           posn_in_map:word, scrn_left:word, scrn_top:word\r
508 extrn           person_table:byte, trigger_point:word, limit_ptr:word\r
509 extrn           trigger_table_1:word, limit_table_1:word\r
510 extrn           trigger_table_2:word, limit_table_2:word\r
511 extrn           trigger_table_3:word, limit_table_3:word\r
512 extrn           trigger_table_4:word, limit_table_4:word\r
513 extrn           trigger_table_5:word, limit_table_5:word\r
514 extrn           sprt_table:word, weapon_table:word, door_trigger:word\r
515 extrn           door_map_x:word, door_map_y:word, opened:byte, closing:byte\r
516 extrn           closed:byte, rect_cols:word, rect_rows:word, door_state:byte\r
517 extrn           wall_state:byte, min_plane:word, max_plane:word\r
518 extrn           linda_file1:byte, boss_file1:byte, strength:byte, keybd:byte\r
519 extrn           map_x:word, map_y:word, height:byte, name_:byte, action:byte,type_:byte\r
520 extrn           test_map_x:word, test_map_y:word, attribute:byte, level:byte,reduced_attr:byte\r
521 extrn           frame_no:word, credits:word, pl1_lives:word, pl2_lives:word\r
522 extrn           getup_r_0:word, getup_l_0:word, p_null_0:word, cycle:word\r
523 extrn           window_topleft:word, window_top:word, window_left:word\r
524 extrn           posn_in_chr:word, furthest_reachd:word, limit_flag:byte\r
525 extrn           dummy_scrn:byte, timer:word, pl1_score:word, pl2_score:word\r
526 extrn           null_0:word,flame_0:word\r
527 \r
528 extrn           gmode:word,sixteencol:byte,screen:word,bidie_r_8:word\r
529 extrn           vga_col_table:byte,g_disc:word\r
530 \r
531 mission_table   dw      offset mission1_data\r
532                 dw      offset mission2_data\r
533                 dw      offset mission3_data\r
534                 dw      offset mission4_data\r
535                 dw      offset mission5_data\r
536 \r
537 mission1_data   dw      offset chr_file_1       ; chr blocks\r
538                 dw      offset map_file_1       ; chr map\r
539                 dw      offset hat_file_1       ; hat map\r
540                 dw      190, 364, 79            ; map_width, _right, _bottom\r
541                 dw      offset chr_map+(2*190)  ; posn_in_map\r
542                 dw      0,8                     ; scrn_left, scrn_top\r
543                 dw      10,60 , 20,60           ; pl1 (x,y),  pl2 (x,y)\r
544                 db      4, 4                    ; pl1 hght,  pl2 hght\r
545                 dw      offset trigger_table_1  ; trigger_point\r
546                 dw      offset limit_table_1    ; limit pointer\r
547                 dw      190, 24, 190            ; door_map_x, _map_y, _trigger\r
548                 db      8, 24, 29               ; opened, closing, closed\r
549                 dw      64                      ; rect_rows\r
550                 dw      0,80                    ; min, max sprt planes\r
551                 dw      offset chr_file_1a\r
552                 dw      offset chr_lv1_1\r
553                 dw      offset chr_lv1_2\r
554                 dw      offset chr_lv1_1v\r
555                 dw      offset chr_lv1_2v\r
556 \r
557 mission2_data   dw      offset chr_file_2\r
558                 dw      offset map_file_2\r
559                 dw      offset hat_file_2\r
560                 dw      168, 320, 123\r
561                 dw      offset chr_map+(20*168)\r
562                 dw      0, 80\r
563                 dw      10, 120, 20, 120\r
564                 db      4, 4\r
565                 dw      offset trigger_table_2, offset limit_table_2\r
566                 dw      272, 44, 280    ;door map x/y,_trigger\r
567                 db      13, 20, 30      ;opened,closing,closed\r
568                 dw      74              ;rect_rows\r
569                 dw      0, 150\r
570                 dw      offset chr_file_2a\r
571                 dw      offset chr_lv2_1\r
572                 dw      offset chr_lv2_2\r
573                 dw      offset chr_lv2_1v\r
574                 dw      offset chr_lv2_2v\r
575 \r
576 \r
577 mission3_data   dw      offset chr_file_3\r
578                 dw      offset map_file_3\r
579                 dw      offset hat_file_3\r
580                 dw      292, 567, 68\r
581                 dw      offset chr_map + 5 * 292\r
582                 dw      0, 20\r
583                 dw      10, 60, 20, 60\r
584                 db      4, 4\r
585                 dw      offset trigger_table_3, offset limit_table_3\r
586                 dw      150, 12, 150\r
587                 db      8, 24, 29\r
588                 dw      64\r
589                 dw      20, 76  ;68 ?\r
590                 dw      offset chr_file_3a\r
591                 dw      offset chr_lv3_1\r
592                 dw      offset chr_lv3_2\r
593                 dw      offset chr_lv3_1v\r
594                 dw      offset chr_lv3_2v\r
595 \r
596 \r
597 mission4_data   dw      offset chr_file_4\r
598                 dw      offset map_file_4\r
599                 dw      offset hat_file_4\r
600                 dw      80, 159-16, 80\r
601                 dw      offset chr_map + 2 * 80\r
602                 dw      0, 8\r
603                 dw      40, 40, 50, 40\r
604                 db      12,12\r
605                 dw      offset trigger_table_4, offset limit_table_4\r
606                 dw      118, 4, 120     ;m_x ,m_y , trigger/(override trigg?)\r
607                 db      6, 24, 27\r
608                 dw      90      ;just gets bigger and bigger ...!\r
609                 dw      40, 120\r
610                 dw      offset chr_file_4a\r
611                 dw      offset chr_lv4_1\r
612                 dw      offset chr_lv4_2        ;no real file !\r
613                 dw      offset chr_lv4_1v\r
614                 dw      offset chr_lv4_2v\r
615 \r
616 \r
617 mission5_data   dw      offset chr_file_5\r
618                 dw      offset map_file_5\r
619                 dw      offset hat_file_5\r
620                 dw      182, 356, 108\r
621                 dw      offset chr_map + 2 * 182\r
622                 dw      0, 8\r
623                 dw      10, 30, 20, 30\r
624                 db      88, 88\r
625                 dw      offset trigger_table_5, offset limit_table_5\r
626                 dw      484, 16, 490\r
627                 db      5, 24, 26\r
628                 dw      80\r
629                 dw      0, 208\r
630                 dw      offset chr_file_5a\r
631                 dw      offset chr_lv5_1\r
632                 dw      offset chr_lv5_2\r
633                 dw      offset chr_lv5_1v\r
634                 dw      offset chr_lv5_2v\r
635 \r
636 \r
637 wepup_table     dw      offset mission1_weps\r
638                 dw      offset mission2_weps\r
639                 dw      offset mission3_weps\r
640                 dw      offset mission4_weps\r
641                 dw      offset mission5_weps\r
642 \r
643 mission1_weps   db      whip, ?, nonexistent, ?\r
644                 dw      -1, ?, ?, ?, ?, offset sprt_table+224, 4 * per_list_size + offset person_table\r
645 \r
646                 db      club, ?, stationary, 4\r
647                 dw      -1, 250, 60, 0, 0, offset sprt_table+256, nobody        ;5 * per_list_size + offset person_table\r
648 ; will give to a captain I reckon eventually.\r
649                 db      crate, ?, stationary, 4\r
650                 dw      -1, 50, 70, 0, 0, offset sprt_table+288, nobody\r
651 \r
652                 db      whip, ?, nonexistent, ?\r
653                 dw      -1, ?, ?, ?, ?, offset sprt_table+384, 4*per_list_size+offset person_table\r
654 \r
655                 db      knife, ?, stationary, 4\r
656                 dw      -1, 280, 65, 0, 0, offset sprt_table+352, nobody\r
657         \r
658                 db      ?, ?, nonexistent, ?\r
659                 dw      ?, ?, ?, ?, ?, offset sprt_table+384, nobody\r
660 \r
661 ;       Used As The Thumb .\r
662 \r
663 mission2_weps   db      tnt, 50, stationary, 4  ;it explodes pretty quickly\r
664                 dw      -1, 40, 111, 0, 0, offset sprt_table+224, nobody\r
665 \r
666                 db      club, ?, stationary, 4\r
667                 dw      -1, 30, 115, 0, 0, offset sprt_table+256, nobody        ;5 * per_list_size + offset person_table\r
668 \r
669                 db      rock, ?, stationary, 4\r
670                 dw      -1, 90, 115, 0, 0, offset sprt_table+288, nobody\r
671 \r
672                 db      knife, ?, stationary, 53\r
673                 dw      -1, 243, 63, 0, 0, offset sprt_table+320, nobody\r
674 \r
675                 db      whip, ?, nonexistent, ?\r
676                 dw      -1, ?, ?, ?, ?, offset sprt_table+352, nobody   ;4 * per_list_size + offset person_table\r
677 \r
678                 db      ?, ?, nonexistent, ?\r
679                 dw      ?, ?, ?, ?, ?, offset sprt_table+384, nobody\r
680 \r
681 mission3_weps   db      club, ?, stationary, 4\r
682                 dw      -1, 90, 50, 0, 0, offset sprt_table+224, nobody\r
683 \r
684                 db      barrel, ?, stationary, 4\r
685                 dw      -1, 100, 45, 0, 0, offset sprt_table+256, nobody\r
686 \r
687                 db      whip, ?, nonexistent, ?\r
688                 dw      -1, ?, ?, ?, ?, offset sprt_table+288, 5 * per_list_size + offset person_table\r
689 \r
690                 db      club, ?, stationary, 4\r
691                 dw      -1, 450, 50, 0, 0, offset sprt_table+320, nobody\r
692 \r
693 ;       two weapons only that are not used ( not enough I think for the combine)\r
694 ;       excellent !\r
695                 db      specwep, ?, stationary, 4\r
696                 dw      -1, 152, 26, 0, 0, offset sprt_table+352, nobody\r
697 \r
698                 db      rock, ?, nonexistent, 4\r
699                 dw      -1, 700, 30, 0, 0, offset sprt_table+384, nobody\r
700 \r
701 mission4_weps   db      tnt, 250, nonexistent, 4\r
702                 dw      -1, 130, 80, 0, 0, offset sprt_table+224, nobody\r
703 \r
704                 db      rock, ?, nonexistent, 56\r
705                 dw      -1, 190, 30, 0, 0, offset sprt_table+256, nobody\r
706 \r
707                 db      rock, ?, nonexistent, 56\r
708                 dw      -1, 200, 35, 0, 0, offset sprt_table+288, nobody\r
709 \r
710                 db      ?, ?, nonexistent, ?\r
711                 dw      ?, ?, ?, ?, ?, offset sprt_table+320, nobody\r
712 \r
713                 db      ?, ?, nonexistent, ?\r
714                 dw      ?, ?, ?, ?, ?, offset sprt_table+352, nobody\r
715 \r
716                 db      ?, ?, nonexistent, ?\r
717                 dw      ?, ?, ?, ?, ?, offset sprt_table+384, nobody\r
718 \r
719 mission5_weps   db      specwep, ?, stationary, 88\r
720                 dw      offset flame_0, 8, 16, 0, 0, offset sprt_table+224, nobody\r
721                 db      specwep, ?, stationary, 88\r
722                 dw      offset flame_0, 60, 16, 0, 0, offset sprt_table+256, nobody\r
723 ; these special weapons are     1. flames\r
724 ;                               2. stabbers\r
725 ;                               3. stones\r
726 ;                               4. wall\r
727 ;       The weapons have been rearranged considerably due to the bloody walls !\r
728                 db      club, ?, nonexistent, ?\r
729                 dw      -1, ?, ?, ?, ?, offset sprt_table+288, nobody   ;2 * per_list_size + offset person_table\r
730                 db      rock, ?, nonexistent, 88\r
731                 dw      -1, 170, 40, -1, 400, offset sprt_table+320, nobody\r
732                 db      rock, ?, nonexistent, 88\r
733                 dw      -1, 180, 40, -1, 400, offset sprt_table+352, nobody\r
734 ; the y_velocity when rolling is used as a timer ?!\r
735                 db      ?, ?, nonexistent, ?\r
736                 dw      ?, ?, ?, ?, ?, offset sprt_table+384, nobody\r
737 \r
738 chr_file_1      db      "level11.cpc",0\r
739 chr_file_1a     db      "level12.cpc",0 ;must change this!\r
740 chr_file_2      db      "level21.cpc",0\r
741 chr_file_2a     db      "level22.cpc",0 ;must change this!\r
742 chr_file_3      db      "level31.cpc",0\r
743 chr_file_3a     db      "level32.cpc",0 ;must change this!\r
744 chr_file_4      db      "level41.cpc",0\r
745 chr_file_4a     db      "level42.cpc",0 ;must change this!\r
746 chr_file_5      db      "level51.cpc",0\r
747 chr_file_5a     db      "level52.cpc",0 ;must change this!\r
748 \r
749 \r
750 map_file_1      db      "level1.map",0\r
751 map_file_2      db      "level2.map", 0\r
752 map_file_3      db      "level3.map", 0\r
753 map_file_4      db      "level4.map", 0\r
754 map_file_5      db      "level5.map", 0\r
755 \r
756 hat_file_1      db      "level1.hat", 0\r
757 hat_file_2      db      "level2.hat", 0\r
758 hat_file_3      db      "level3.hat", 0\r
759 hat_file_4      db      "level4.hat", 0\r
760 hat_file_5      db      "level5.hat", 0\r
761 \r
762 chr_lv1_1       db      "level11.cpe",0\r
763 chr_lv1_2       db      "level12.cpe",0\r
764 chr_lv2_1       db      "level21.cpe",0\r
765 chr_lv2_2       db      "level22.cpe",0\r
766 chr_lv3_1       db      "level31.cpe",0\r
767 chr_lv3_2       db      "level32.cpe",0\r
768 chr_lv4_1       db      "level41.cpe",0\r
769 chr_lv4_2       db      "level42.cpe",0 ;shouldnt be such a file though\r
770 chr_lv5_1       db      "level51.cpe",0\r
771 chr_lv5_2       db      "level52.cpe",0\r
772 \r
773 chr_lv1_1v      db      "level11.cpv",0\r
774 chr_lv1_2v      db      "level12.cpv",0\r
775 chr_lv2_1v      db      "level21.cpv",0\r
776 chr_lv2_2v      db      "level22.cpv",0\r
777 chr_lv3_1v      db      "level31.cpv",0\r
778 chr_lv3_2v      db      "level32.cpv",0\r
779 chr_lv4_1v      db      "level41.cpv",0\r
780 chr_lv4_2v      db      "level42.cpv",0 ;shouldnt be such a file though\r
781 chr_lv5_1v      db      "level51.cpv",0\r
782 chr_lv5_2v      db      "level52.cpv",0\r
783 \r
784 timetable       dw      71, 71, 91, 51, 91\r
785 \r
786 pal_tab         db      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0\r
787 ; good grief this is bloody silly !\r
788 \r
789 text_tables     dw      level_1_a,level_1_b     ;0 mission shouldnt be used.\r
790                 dw      level_1_a,level_1_b\r
791                 dw      level_2_a,level_2_b\r
792                 dw      level_3_a,level_3_b\r
793                 dw      level_4_a,level_4_b\r
794                 dw      level_5_a,level_5_b\r
795 \r
796 level_1_a       db      "Billy and Jimmy Lee pursue the killers",0\r
797 level_1_b       db      "  of Billy's girlfriend , Marian.",0\r
798 level_2_a       db      34,"They're hiding in that factory !",34,0\r
799 level_2_b       db      0\r
800 level_3_a       db      "The pursuit moves out of the city .",0\r
801 level_3_b       db      0\r
802 level_4_a       db      "    ",34,"Quick , up the mountain !",34,0\r
803 level_4_b       db      0\r
804 level_5_a       db      "The Double Dragons have gained entry",0\r
805 level_5_b       db      "      to the enemy's base.",0\r
806 \r
807 dseg            ends\r
808 \r
809 lin_seg         segment public 'data'\r
810 extrn           lin_dat:word\r
811 lin_seg         ends\r
812 \r
813 wil_seg         segment public 'data'\r
814 extrn           wil_dat:word\r
815 wil_seg         ends\r
816 \r
817 flidseg segment public 'zzzz'\r
818 extrn   dumvar:word\r
819 dm2     equ     dumvar+30720\r
820 \r
821 flidseg  ends\r
822 \r
823 end\r
824 \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\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\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