Subversion Repositories Kolibri OS

Rev

Rev 2075 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. IDA equ 1 ; We're running debugida.exe
  2.  
  3. STRIP  equ 40
  4. LEVNUM equ 500
  5.  XFOFS equ 10
  6.  YFOFS equ 55
  7.  MSGXO equ 32
  8. GAMES_ALL equ 12
  9. WNDCOLOR equ 0x03c0c0c0;0x03f6f6f6;
  10. MINCS equ 40
  11. MAXCS equ 80
  12. macro icall lbl
  13. {
  14.         call [lbl+ebp*4]
  15. }
  16.  
  17.   use32
  18.   org     0x0
  19.  
  20.   db     'MENUET01'              ; 8 byte id
  21.   dd     0x01                    ; header version
  22.   dd     run                     ; start of code
  23.   dd     I_END                   ; size of image
  24.   dd     end_mem                 ; memory for app
  25.   dd     stack_end                ; esp
  26.   dd     0x0 , 0x0               ; I_Param , I_Icon
  27. lang fix ru
  28. include "MACROS.INC"
  29. purge mov
  30. ;include "DEBUG.INC"
  31. COLOR_ORDER equ MENUETOS
  32.  
  33. include 'gif_lite.inc'
  34.  
  35. include 'tam.inc'
  36. include 'smz.inc'
  37. include 'tilt.inc'
  38. include 'tilt2.inc'
  39. include 'fhouse.inc'
  40. include 'loops.inc'
  41. include 'wriggle.inc'
  42. include 'blackbox.inc'
  43. include 'marble.inc'
  44. include 'cstep.inc'
  45. include 'orient.inc'
  46. include 'nolt.inc'
  47. include 'colzone.inc'
  48.  
  49. run:
  50.                 mov  [Ces],STRIP;20
  51.     mcall 3
  52.     mov  cl,16
  53.     ror  eax,cl
  54.     mov  [generator],eax    ; random generator from Tetris
  55.  
  56.                 and [mpress_flag],0
  57.                 and [gif_unp],0
  58.     xor  ebp,ebp ; game_t
  59. ;    mov  ebp,10
  60.     mcall 64,1,end_mem
  61.     mov  [pause_time],40
  62.     call resize
  63.   .game1:
  64.     mov  [levnum],LEVNUM
  65.   .game:
  66.     and  [win_flag],0
  67.     and  [drag_flag],0
  68.     mov  ecx,[levnum]
  69.     mov  esi,[levels+ebp*4]
  70.     jecxz .skip
  71.   .nxt:
  72.     movzx eax,byte[esi]
  73.     add  esi,eax
  74.     xor  eax,eax
  75.     cmp  al,byte[esi]
  76.     jne  .noz
  77.     mov  esi,LEVNUM;500
  78.     sub  esi,ecx
  79.     mov  [levcount],esi
  80.     and  [levnum],0
  81.     jmp  .game
  82.   .noz:
  83.     loop .nxt
  84.   .skip:
  85.                 mcall 40,111b
  86.           mov  [mouse_processed],1
  87.     xor  eax,eax
  88.     icall prepare_level
  89. wnd_size:
  90.         mov  eax,[Ces]
  91.           shr  eax,2
  92.           sub  eax,2
  93.     mov  [sq_size],eax
  94.   if ~ IDA eq 1
  95.     mov   edx,[fx]
  96.     imul  edx,[Ces]
  97.     add   edx,XFOFS*2+20
  98.     mov   esi,[fy]
  99.     imul  esi,[Ces]
  100.     add   esi,YFOFS+30
  101.     mov   ecx,-1
  102.     mcall 67,ecx
  103.   end if
  104. red:
  105.     call  draw_window
  106.  
  107. drw:
  108.                 call  drwfld
  109.  
  110. still:
  111.     mcall 2
  112.     test al,al
  113.     jz   still
  114.     mcall 10
  115.     cmp  eax,2
  116.     je   key
  117.     cmp  eax,1                  ; redraw request ?
  118.     je   red
  119.     cmp  eax,3                  ; button in buffer ?
  120.     je   button
  121.     cmp  eax,6                  ; mouse event ?
  122.     je   mouse
  123. key:
  124.     mcall 2
  125. ;    movzx ebx,ah
  126. ;    dpd  ebx
  127.                 cmp  ebp,10
  128.                 je   .noplus
  129.     mov  ebx,5
  130.     cmp  ah,184
  131.     jne  .nomin
  132.     cmp  [Ces],MINCS
  133.     je   still
  134.   .ces:
  135.     sub  [Ces],ebx
  136.     call resize
  137.     jmp  wnd_size
  138.   .nomin:
  139.     cmp  ah,183
  140.     jne  .noplus
  141.     cmp  [Ces],MAXCS
  142.     je   still
  143.     neg  ebx
  144.     jmp  .ces
  145.         .noplus:
  146.     cmp  ah,'h'
  147.     jne  .nohlp
  148. ;  if IDA eq 1
  149. ;    cmp  [child],0
  150. ;    jne  still
  151. ;  else
  152.     call kill_help
  153. ;  end if
  154.     mov  [pack],ebp
  155.     mcall 51,1,show_help,chs_end
  156. ;    dpd  eax
  157.     mov  [child],eax
  158.     jmp  still
  159.   .nohlp:
  160.     cmp  [win_flag],10
  161.     je   .levover
  162.     cmp  [win_flag],2
  163.     je   .no_win
  164.     cmp  [win_flag],1
  165.     jne  .now
  166.   .levover:
  167.     call lev_next
  168.   .no_win:
  169.     and  [win_flag],al
  170.     jmp  run.game
  171.   .now:
  172.     shr  eax,8
  173.     mov  [jump],drw;red
  174.     cmp  eax,13
  175.     je   run.game
  176.     icall key_handler
  177.     jmp  [jump]
  178.  
  179. button:
  180.     mcall 17
  181.     cmp  ah,1
  182.     je   close
  183.     cmp  ah,2
  184.     je   .game_type
  185.     cmp  ah,4
  186.     je   .inclev
  187.     cmp  ah,3
  188.     je   .declev
  189.     jmp  still
  190.   .declev:
  191.     dec  [levnum]
  192.     cmp  [levnum],0
  193.     jge  run.game
  194.     push [levcount]
  195.     pop  [levnum]
  196.     jmp  run.game
  197.   .inclev:
  198.     call lev_next
  199.     jmp  run.game
  200.   .game_type:
  201.     inc  ebp
  202.     cmp  ebp,GAMES_ALL
  203.     jbe  run.game1
  204.     xor  ebp,ebp
  205.     jmp  run.game1
  206.   close:
  207.   if ~ IDA eq 1
  208.     call kill_help
  209.   end if
  210.     mcall -1
  211.  
  212. ;if ~ IDA eq 1
  213.  
  214. kill_help:
  215.                 mcall 9,prc_info2,-1
  216.                 mov  edx,[child]
  217.                 mov  ecx,eax
  218.         .lp:
  219.                 mcall 9
  220.                 cmp  edx,[ebx+30]
  221.                 jne   .nochild
  222.                 mcall 18,2
  223.     and  [child],0
  224.                 ret
  225.         .nochild:
  226.                 loop .lp
  227.                 ret
  228.  
  229. ;end if
  230.  
  231. mouse:
  232.                 cmp  [mouse_processed],1
  233.                 jne  .ex
  234.                 mcall 37,1
  235.                 sub  eax,XFOFS shl 16+YFOFS
  236.                 xor  edx,edx
  237.                 mov  ebx,[Ces]
  238.                 mov  ecx,eax
  239.                 and  eax,0xffff
  240.                 div  ebx
  241.                 xor  edx,edx
  242.                 mov  [mouse_y],eax
  243.                 cmp  eax,[fy]
  244.                 jae  .ex
  245.                 mov  eax,ecx
  246.                 shr  eax,16
  247.                 div  ebx
  248.                 mov  [mouse_x],eax
  249.                 cmp  eax,[fx]
  250.                 jae  .ex
  251.                 mcall 37,2 ; get buttons
  252.                 cmp  [drag_flag],0
  253.                 je   .nodrag
  254.                 mov  ebx,eax
  255.                 cmp  eax,[mpress_flag]
  256.                 mov  eax,-1
  257.                 je   .nochg
  258.                 dec  eax
  259.         .nochg:
  260.                 mov  [mpress_flag],ebx
  261.                 jmp  .call_hnd
  262.         .nodrag:
  263.                 test eax,eax
  264.                 jz  .ex1
  265.                 cmp  eax,[mpress_flag]
  266.                 je   .ex
  267.                 mov  [mpress_flag],eax
  268.                 mov  eax,-1
  269.         .call_hnd:
  270.                 mov  [mouse_processed],0
  271.                 icall key_handler
  272.                 jmp  [jump]
  273.         .ex1:
  274.                 mov  [mpress_flag],0
  275.         .ex:
  276.                 jmp  still
  277.  
  278. lev_next:
  279.     push eax
  280.     inc  [levnum]
  281.     mov  eax,[levnum]
  282.     cmp  eax,[levcount]
  283.     jbe  .ex
  284.     and  [levnum],0
  285.   .ex:
  286.     pop  eax
  287.     ret
  288.  
  289. ;   *********************************************
  290. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  291. ;   *********************************************
  292. draw_window:
  293.     pusha
  294.     mcall 12,1
  295.     mov   ebx,[fx]
  296.     imul  ebx,[Ces]
  297.     push  ebx
  298.     add   ebx,50 shl 16+XFOFS*2+20
  299.     mov   ecx,[fy]
  300.     imul  ecx,[Ces]
  301.     add   ecx,10 shl 16+YFOFS+30
  302.     mcall 0,,,WNDCOLOR
  303.     mov   esi,edx
  304.     and   esi,0xffffff
  305.     mcall 9,prc_info,-1
  306.     mov   ebx,[esp]
  307.     pop   ebx
  308.     add   ebx,XFOFS shl 16+XFOFS*2
  309.  
  310.     mcall 8,,<25,12>,2
  311.  
  312.     mcall 8,<XFOFS,11>,<40,12>,3
  313.     add   ebx,14 shl 16
  314.     inc   edx
  315.     mcall
  316.     mcall 4,<8,8>,0x10ffffff,header,header.size
  317.     mov   ecx,ebp
  318.     mov   edx,game_names+4
  319.     call  get_mstr
  320.     mcall ,<XFOFS+2,28>,0x8000
  321.     imul  esi,6
  322.     add   esi,3
  323.     shl   esi,16
  324.     lea   edx,[ebx+esi]
  325.     mcall 47,0x020001,levnum,,0x8000
  326.  
  327.     mcall 4,<XFOFS+3,43>,0x108000,next_msg,3
  328.     mcall 12,2
  329.     popa
  330.     ret
  331.  
  332. unpack_level:
  333.     mov   ecx,[cell_count]
  334.     mov   edi,field
  335.   .lp:
  336.     movzx eax,byte[esi]
  337.     inc   esi
  338.     shl   ax,4
  339.     shr   al,4
  340.     stosw
  341.     loop  .lp
  342.     ret
  343.  
  344. get_xy:
  345. ; eax-coord
  346. ; out: [lx]-[x+2][CS-4],[ly]-[y+2][CS-4]
  347.     pusha
  348.     xor   edx,edx
  349.     mov   esi,[sq_size]
  350.     lea   edi,[esi*2]
  351.     neg   edi
  352.     add   edi,[Ces]
  353.     mov   [lx],edi
  354.     mov   [ly],edi
  355.     mov   ebx,[fx]
  356.     div   bx
  357.     imul  eax,[Ces]
  358.     imul  edx,[Ces]
  359.     lea   edx,[edx+XFOFS+esi]
  360.     lea   eax,[eax+YFOFS+esi]
  361.     mov   word[ly+2],ax
  362.     mov   word[lx+2],dx
  363.     popa
  364.     ret
  365.  
  366. check_move:
  367. ; eax-coord, ebx-direction
  368. ; CF=0 if move is valid
  369.     bt   dword[field+eax],ebx
  370.     ret
  371.  
  372. delay:
  373.     pusha
  374.     mcall 5,[pause_time]
  375.     popa
  376.     ret
  377.  
  378. get_mstr:
  379. ; in:  edx,ecx
  380. ; out: edx,esi
  381.     mov   esi,[edx-4]
  382.     jecxz .ex
  383.     lea   edx,[edx+esi+4]
  384.     dec   ecx
  385.     jmp   get_mstr
  386.   .ex:
  387.     ret
  388.  
  389. maze_field:
  390.     mov   edi,field
  391.     mov   [ly],YFOFS shl 16+YFOFS
  392.     mov   eax,38
  393.     mov   ecx,[fy]
  394.   .lp1:
  395.     push  ecx
  396.     mov   [lx],XFOFS shl 16+XFOFS
  397.     mov   ecx,[fx]
  398.   .lp2:
  399.     push  ecx
  400.     xor   esi,esi
  401.   .lp3:
  402.     mov   edx,0xd0d0d0
  403.     bt    dword[edi],esi
  404.     jnc   .gray
  405.     mov   edx,0
  406.   .gray:
  407.     mov   ebx,[lx]
  408.     add   ebx,[dir_ofs+esi*4]
  409.     mov   ecx,[ly]
  410.     add   ecx,[dir_ofs+esi*4+8]
  411.     mcall
  412.     inc   esi
  413.     cmp   esi,4
  414.     jb    .lp3
  415.     inc   edi
  416.     mov   ecx,[Ces]
  417.     add   word[lx],cx
  418.     add   word[lx+2],cx
  419.     pop   ecx
  420.     loop  .lp2
  421.     mov   ecx,[Ces]
  422.     add   word[ly],cx
  423.     add   word[ly+2],cx
  424.     pop   ecx
  425.     loop  .lp1
  426.     ret
  427.  
  428. grid_field:
  429.     mov   edx,0xa0a0a0
  430.     mov   eax,38
  431.  
  432.     mov   ecx,[fy]
  433.     mov   ebx,[fx]
  434.     imul  ebx,[Ces]
  435.     add   ebx,XFOFS shl 16+XFOFS
  436.     mov   esi,YFOFS shl 16+YFOFS
  437.     inc   ecx
  438.   .lp1:
  439.     push  ecx
  440.     mov   ecx,esi
  441.     mcall
  442.     mov   ecx,[Ces]
  443.     add   esi,ecx
  444.     shl   ecx,16
  445.     add   esi,ecx
  446.     pop   ecx
  447.     loop  .lp1
  448.  
  449.     mov   ecx,[fx]
  450.     mov   esi,[fy]
  451.     imul  esi,[Ces]
  452.     add   esi,YFOFS shl 16+YFOFS
  453.     mov   ebx,XFOFS shl 16+XFOFS
  454.     inc   ecx
  455.   .lp2:
  456.     push  ecx
  457.     mov   ecx,esi
  458.     mcall
  459.     mov   ecx,[Ces]
  460.     add   ebx,ecx
  461.     shl   ecx,16
  462.     add   ebx,ecx
  463.     pop   ecx
  464.     loop  .lp2
  465.     ret
  466.  
  467. get_xy_sf:
  468.                 xor  eax,eax
  469.                 and  [player],eax
  470.     mov  [fx],eax
  471.     mov  [fy],eax
  472.     lodsb
  473.     lodsb
  474.     mov  ah,al
  475.     shr  ah,4
  476.     and  al,0xf
  477.     mov  byte[fx],ah
  478.     mov  byte[fy],al
  479.     lodsb
  480.     mov  byte[player],al
  481.     lodsb
  482.     mov  byte[finish],al
  483.   .count:
  484.     mov  eax,[fx]
  485.     mov  [dirs+4],eax
  486.     neg  eax
  487.     mov  [dirs+8],eax
  488.     mov  eax,[fx]
  489.     imul eax,[fy]
  490.     mov  [cell_count],eax
  491.  
  492.     ret
  493.  
  494. get_last_mclick:
  495. ; out - eax=0 no click or outside field
  496. ;                               eax>0 button pressed, ebx=[xy]
  497.                 mov  [mouse_processed],1
  498.                 mov  eax,[mpress_flag]
  499.                 mov  ebx,[mouse_y]
  500.                 imul ebx,[fx]
  501.                 add  ebx,[mouse_x]
  502.                 ret
  503.  
  504. erase_field:
  505.                 pusha
  506.                 mov  ecx,[cell_count]
  507.                 xor  eax,eax
  508.                 mov  edi,field
  509.                 rep  stosb
  510.                 popa
  511.                 ret
  512.  
  513. get_pxy:
  514. ; in: [pack] - cell#, out: word[pack] - packed  [xy]
  515.                 pusha
  516.                 mov  eax,[pack]
  517.                 cdq
  518.                 mov  ebx,[fx]
  519.                 div  ebx
  520.                 shl edx,8
  521.                 add  eax,edx
  522.                 mov  [pack],eax
  523.                 popa
  524.                 ret
  525.  
  526. check_bounds:
  527. ; in: eax - cell, ebx - dir
  528. ; out: ebx=-1 if bounds crossed
  529.                 push eax ecx
  530.                 mov  ecx,eax
  531.                 add  ecx,[dirs+ebx*4]
  532.                 mov  ebx,ecx
  533.                 call get_offset
  534.                 mov  ebx,eax
  535.                 pop  ecx eax
  536.     cmp  ebx,-1
  537.                 ret
  538.  
  539. get_offset:
  540. ; in: eax - start, ebx-end
  541. ; out: eax - dir or -1 if not straight
  542. ;      ebx - distance
  543.                 push ecx edx
  544.                 mov  ecx,-1
  545.                 mov  edx,[cell_count]
  546.                 cmp  eax,edx
  547.                 jae  .ex
  548.                 cmp  ebx,edx
  549.                 jae  .ex
  550.                 mov  [pack],eax
  551.                 call get_pxy
  552.                 mov  eax,[pack]
  553.                 mov  [pack],ebx
  554.                 call get_pxy
  555.                 mov  ebx,[pack]
  556.                 cmp  ah,bh ; compare X
  557.                 jne  .noX
  558.                 mov  ecx,1
  559.                 sub  bl,al
  560.                 ja   .ok
  561.                 inc  ecx
  562.         .ok2:
  563.                 neg  bl
  564.                 jmp  .ok
  565.         .noX:
  566.                 cmp  al,bl ; compare Y
  567.                 jne  .ex
  568.                 inc  ecx
  569.                 sub  bh,ah
  570.                 mov  bl,bh
  571.                 jb   .ok2
  572.                 add  ecx,3
  573.         .ok:
  574.                 movzx ebx,bl
  575.         .ex:
  576.                 mov  eax,ecx
  577.                 pop edx ecx
  578.                 ret
  579.  
  580. show_help:
  581.                 mov   ebp,[pack]
  582.         .red:
  583.     mcall 12,1
  584.     mov   ebx,[prc_info.x_start]
  585.     add   ebx,[prc_info.x_size]
  586.     shl   ebx,16
  587.     add   ebx,310
  588.     mov   ecx,[prc_info.y_start]
  589.     shl   ecx,16
  590.     add   ecx,220
  591.     mcall 0,,,0x03c0c0c0
  592.     mcall 4,<8,8>,0x00ffffff,help_hdr,help_hdr.size
  593.     mov   ecx,ebp
  594.     mov   edx,game_names+4
  595.     call  get_mstr
  596.     sub   esi,2
  597.     mcall 4,<6*help_hdr.size+15,8>,0x00ffffff
  598.  
  599.     mov   edx,[help_msg+ebp*4]
  600.     add   edx,4
  601.     xor   ecx,ecx
  602.     mov   ebx,10 shl 16+30
  603.   .nxt:
  604.     mov   esi,[edx-4]
  605.     jecxz .drw
  606.     dec   ecx
  607.     lea   edx,[edx+esi+4]
  608.     jmp   .nxt
  609.   .drw:
  610.     cmp   esi,-1
  611.     je    .edraw
  612.     mcall ,,0x000000ff
  613.     mov   ecx,1
  614.     add   ebx,12
  615.     jmp    .nxt
  616.   .edraw:
  617.     mcall 12,2
  618.         .still:
  619.     mcall 10
  620.     cmp  eax,2
  621.     jne  .nokey
  622.     mcall
  623.     jmp  .close
  624.   .nokey:
  625.     cmp  eax,1                  ; redraw request ?
  626.     je   .red
  627.     cmp  eax,3                  ; button in buffer ?
  628.     jne  .still
  629.     mcall 17
  630.     cmp  ah,1
  631.     jne  .still
  632.   .close:
  633.     and  [child],0
  634.     mcall -1
  635.  
  636. getline:
  637. ; in: esi,edi
  638.                 pusha
  639.     mov  eax,esi
  640.     call get_xy
  641.     mov  ebx,[lx]
  642.     mov  ecx,[ly]
  643.     mov  eax,edi
  644.     call get_xy
  645.     mov  bx,word[lx+2]
  646.     mov  cx,word[ly+2]
  647.     mov  eax,[Ces]
  648.     shr  eax,1
  649.     sub  eax,[sq_size]
  650.     add  ebx,eax
  651.     add  ecx,eax
  652.     shl  eax,16
  653.     add  ebx,eax
  654.     add  ecx,eax
  655.     mov  [lx],ebx
  656.     mov  [ly],ecx
  657.                 mcall 38
  658.                 popa
  659.                 ret
  660.  
  661. bold_line:
  662.   WGSPC equ 1
  663.     pusha
  664.                 mov  edi,WGSPC shl 16+WGSPC
  665.     add  [lx],edi
  666.     add  [ly],edi
  667.                 mcall 38,[lx],[ly]
  668.                 shl  edi,1
  669.     sub  ebx,edi
  670.     sub  ecx,edi
  671.                 mcall
  672.                 popa
  673.                 ret
  674.  
  675. get_rnd:
  676.                 mov  eax, [generator]
  677.     sub  eax,0x43ab45b5    ; next random number
  678.     ror  eax,1
  679.     xor  eax,0x32c4324f
  680.     ror  eax,1
  681.     mov  [generator],eax
  682.     ret
  683.  
  684. drwfld:
  685.                 pusha
  686.     mov   ebx,[fx]
  687.     imul  ebx,[Ces]
  688.     add   ebx,XFOFS shl 16
  689.     mov   ecx,[fy]
  690.     imul  ecx,[Ces]
  691.     add   ecx,YFOFS shl 16
  692.     mcall 13,,,WNDCOLOR
  693.     add   ebx,26 shl 16-26
  694.     sub   ecx,16 shl 16
  695.     mov   cx,16
  696.     mcall
  697.     icall draw_field
  698.     icall draw_more
  699.     cmp   [win_flag],0
  700.     jz    .edraw
  701.     movzx ecx,[win_flag]
  702.     mov   edx,msgs+4
  703.     call  get_mstr
  704.     mcall 4,<XFOFS+MSGXO,42>,0x100000ff
  705.   .edraw:
  706.     popa
  707.     ret
  708.  
  709. resize:
  710.     mov  eax,[Ces]
  711.     mov  edi,dir_ofs+4
  712.     stosd
  713.     stosd
  714.     stosw
  715.     stosw
  716.     mov  [edi+4],eax
  717.                 ret
  718.  
  719. need_image:
  720. ; in: eax - gif pointer
  721.                 cmp  [gif_unp],0
  722.                 jne  .skip
  723.                 push esi edi
  724.                 mov  esi,eax
  725.                 mov  eax,field
  726.                 mov  edi,raw_area
  727.                 call ReadGIF
  728.                 mov  [gif_unp],1
  729.                 pop  edi esi
  730.         .skip:
  731.                 ret
  732.  
  733. out_image:
  734. ; in: eax - coord, ebx - image #
  735.  
  736. STRIP2 = STRIP-2
  737.         pusha
  738.   call get_xy
  739.   mov  edx,[lx]
  740.   mov  dx,word[ly+2]
  741.   add  edx,1 shl 16+1
  742.   imul ebx,STRIP2*STRIP2*3
  743.         add  ebx,raw_area+12
  744.   mcall 7,,STRIP2 shl 16+STRIP2
  745.   popa
  746.         ret
  747.  
  748. OR_strip:
  749. ;file 'orient2.gif'
  750. file 'orientg2.gif'
  751.         rd 2
  752.         gif_unp dd 0
  753.  
  754. ; DATA AREA
  755. help_hdr db 'MegaMaze Help -'
  756.         .size=$-help_hdr
  757.  
  758. dirs dd -1,0,0,1
  759. dir_ofs dd 0, 1, 1, 1 shl 16+1, 0, 1
  760.  
  761. dir_rotate db 2,0,3,1,1,3,0,2
  762.  
  763. w_colors dd 0x0404CA,0xCC0404,0x00CC00
  764. f_colors dd 0x9494FC,0xFC9494,0x99FF99,0xFFFF00
  765.  
  766. levnum   dd LEVNUM
  767.  
  768. prepare_level dd TM_levelp,SMZ_levelp,TILT_levelp,TILT2_levelp,FH_levelp,\
  769.          LP_levelp,WG_levelp,BB_levelp,MAR_levelp,TM_levelp,OR_levelp,NLT_levelp,\
  770.          CZ_levelp
  771. key_handler   dd TM_key,SMZ_key,TILT_key,TILT2_key,FH_key,LP_key,WG_key,BB_key,\
  772.          MAR_key,CSTEP_key,OR_key,NLT_key,CZ_key
  773. draw_more     dd TM_drawm,SMZ_drawm,TILT_drawm,TILT2_drawm,FH_drawm,LP_drawm,\
  774.          WG_drawm,BB_drawm,MAR_drawm,CSTEP_drawm,OR_drawm,NLT_drawm,CZ_drawm
  775. draw_field    dd maze_field,maze_field,maze_field,maze_field,grid_field,\
  776.          grid_field,grid_field,grid_field,maze_field,maze_field,OR_drawf,maze_field,\
  777.          grid_field
  778. levels        dd TM_level,SMZ_level,TILT_level,TILT2_level,FH_level,LP_level,\
  779.          WG_level,BB_level,MAR_level,CSTEP_level,OR_level,NLT_level,CZ_level
  780. help_msg      dd TM_help,SMZ_help,TILT_help,TILT2_help,FH_help,LP_help,WG_help,\
  781.          BB_help,MAR_help,CSTEP_help,OR_help,NLT_help,CZ_help
  782.  
  783. if lang eq ru
  784.   header db 'Mega Maze'
  785. else
  786.   header db 'Mega Maze'
  787. end if
  788.    .size = $ - header
  789.  
  790. next_msg db '< >'
  791.  
  792. game_names mstr \
  793.         'Teseus & Minotaur #',\
  794.         '1-2-3 Maze #',\
  795.         'Tilt Maze #',\
  796.         'Double Tilt #',\
  797.         'Full-house #',\
  798.         'Loops #',\
  799.         'Wriggle #',\
  800.         'BlackBox #',\
  801.         'Marble #',\
  802.         'Counter Step #',\
  803.         'Orientation #',\
  804.         'No left turn #',\
  805.         'Colour-zone #'
  806.  
  807. msgs mstr ' ','You win!!!','Game over.','Start cell?','Dead end!',\
  808.         "  atoms hidden.",'Ray emerged.','Ray absorbed.','Ray reflected.',\
  809.         'Mark exactly    guesses','Your score is','Guess mark toggled'
  810.  
  811. I_END:
  812. main_pid dd ?
  813. child_stack rb 256
  814.         chs_end:
  815. drag_flag db ?
  816. sq_size dd ?
  817. mouse_processed dd ?
  818. mpress_flag dd ?
  819. mouse_x dd ?
  820. mouse_y dd ?
  821.  
  822. Ces dd ?
  823. pack dd ?
  824. fy dd ?
  825. fx dd ?
  826. lx dd ?
  827. ly dd ?
  828. generator dd ?
  829. cell_count dd ?
  830. levptr   dd ?
  831. levcount dd ?
  832.  
  833. score    dd ?
  834. player:
  835. teseus   dd ?
  836. finish:
  837. minotaur dd ?
  838.  
  839. stepptr  dd ?
  840. cur_step dd ?
  841.  
  842. win_flag db ?
  843. jump     dd ?
  844. pause_time dd ?
  845. child    dd ?
  846. area rb 1024
  847. stak rb 1024
  848. stack_end:
  849. prc_info process_information
  850. prc_info2 process_information
  851. field:
  852.     rb 128*128
  853. raw_area:
  854.                 rb STRIP*STRIP*12*3+16
  855. end_mem:
  856.