?login_element?

Subversion Repositories NedoOS

Rev

Rev 1626 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         device zxspectrum1024
  2.  
  3.         include "settings.ast"
  4. MEM128=ATM;1 ;TODO автоопределение 48/128?
  5.  
  6.        if ATM
  7.         include "../../_sdk/sys_h.asm"
  8.        endif
  9.  
  10. STICKMOUSEXTOGRID=!ATM;1
  11.  
  12. FASTMAPPER=0 ;выброшено
  13. CEILING=0 ;с потолком 8K лишних, только при FASTMAPPER=0
  14.  
  15. Nobjects=16+4 ;16 worms + 4 mines
  16.  
  17.        if ATM
  18. STACK=0x4000
  19. UVSCROLL_USETILES=0
  20. UVSCROLL_USEBMP=0
  21.        else
  22. STACK=0x6000
  23.        endif
  24.  
  25. FD      EQU 0x7ffd
  26. COLOUR  EQU 7
  27. TITLCOL EQU 71
  28.  
  29. PGMASK_  EQU #17
  30.        if MEM128
  31. MASK=0xf000 ;(MAPWID/2)*((256-8)/2+1[временно для mkmap]) = 46*125 = 5750
  32.        else
  33. MASK=0xb000 ;(MAPWID/2)*(TERRAINHGT/2+1[временно для mkmap]) = 46*79 = 3634 ;TODO в 128K тут будет потолок карты (80*93=7440)
  34.        endif
  35.        if !ATM
  36. PGMAP=0x10
  37.        endif
  38. PGHICODE=0x14
  39. PGLMN=0x16
  40. ;LMNS    EQU #C000 ;for mkmap
  41. NLMN=15 ;число всех элементов фона в LMNS
  42. NLMNONMAP=5 ;число элементов, которые ставим на карту
  43.  
  44. ;USELMNBUF=0
  45. ;       if USELMNBUF
  46. ;LMNBUF=0x4000 ;во время построения карты
  47. ;LMNSZ=0x0800
  48. ;       else
  49.        if !ATM
  50. LMNGFX=0x4000 ;здесь будут лежать только те элементы, которые точно хотим ставить (тогда можем перестроить карту и в 48K)
  51. LMNGFXSZ=0x0800 ;не более стольких байт, иначе число элементов будет урезано (а по умолчанию MLMNONMAP штук)
  52.        endif
  53. ;       endif
  54.  
  55. MAPWID   EQU 93 ;нечётная! т.к. маска без 4 пикс слева и 4 пикс справа - там червей нельзя ставить ;TODO а если червь влетит в стену на левой границе карты? надо полную маску или при любой порче ландшафта крайний левый пикс маски формировать из 5 левых пикс, справа аналогично?
  56. MASKWID  EQU MAPWID/2 ;округление вниз (x в маске считается для центра червя, x=0 соответствует x=4 в карте)
  57. XWID=MAPWID*2 ;максимальное значение координаты xhigh
  58. XWIDCHRBITS=1
  59. XWIDCHR=1<<XWIDCHRBITS;2 ;одно знакоместо смещает xhigh вот на столько
  60. INVISIBLEX=220 ;xhigh между 186 и 255, чтобы даже бомба не задела стоящих там трупов
  61.  
  62. MAPHGT  EQU 22*8 ;высота карты в пикселях
  63. TERRAINHGT = MAPHGT-20 ;высота генерируемой карты в пикселях ;чтобы уместить червей и надписи сверху ;защита от вставания на идеально высокого червя - отсутствие маски для строк выше
  64. MASKHGT EQU MAPHGT/2 ;высота маски в пикселях
  65. BIGMAPHGT EQU 256 ;с небом
  66. SKYHGT=BIGMAPHGT-MAPHGT ;высота неба
  67. SKYMASKHGT=SKYHGT/2
  68.  
  69.        if ATM
  70. RAMKAX=5
  71.        else
  72. RAMKAX=1
  73.        endif
  74. RAMKAHGT=16
  75. RAMKAWID=14
  76. SCRTOP=#4061 ;левый верхний угол активной зоны экрана
  77. SCRHGT=17*8 ;высота активной зоны экрана в пикселях
  78.        if ATM
  79. SCRWID=40 ;ширина активной зоны экрана в знакоместах
  80. TITLEY=200-32-8
  81.        else
  82. SCRWID=30 ;ширина активной зоны экрана в знакоместах
  83. TITLEY=128
  84.        endif
  85. ;SHADWD=SCRWID+2
  86. ;SHADHGT=SCRHGT;+14?
  87. WATERHGT=32 ;высота воды в пикселях дополнительно к высоте карты с небом (BIGMAPHGT)
  88. ;для мыши:
  89. waterYwin=BIGMAPHGT-SCRHGT ;waterYwin - это где высота воды 0
  90. maxYwin=waterYwin+WATERHGT ;waterYwin+WATERHGT - это где высота воды WATERHGT
  91. maxXwin=(MAPWID-SCRWID)*8
  92.  
  93. ;DOPRSZ  EQU 56
  94. ;UPPRSZ  EQU SCRHGT-DOPRSZ
  95. ;DOPRSCR EQU -(DOPRSZ*4)+#4981
  96.  
  97. MAP=0xc000 ;там лежит карта в PGMAP
  98. MAPDO   EQU -(MAPWID*SKYHGT)+MAP ;виртуальный адрес начала карты, включая небо
  99. MASKDO  EQU -(MASKWID*(SKYMASKHGT-4))+MASK ;виртуальный адрес начала маски, включая небо ;маска - под ногами червя (высота червя=8, в маске =4)
  100.  
  101. MASKSZ  EQU MAPHGT/2*MASKWID
  102.  
  103.        if ATM
  104. INTSTACK=0x3f80
  105.        else
  106. INTSTACK=0x5c00
  107.        endif
  108. ;SPOILSTACK=INTSTACK+2 ;2 bytes for drawmap
  109.  
  110.        if ATM
  111. uvscroll_scrbase=0x4000+(24*40)
  112. uvscroll_pushbase=0x8000
  113. uvscroll_callbase=0xc000
  114.  
  115. UVSCROLL_WID=1024
  116. UVSCROLL_HGT=256;512;256
  117. SKIPPGS=0;16 ;0 for UVSCROLL_HGT=256
  118. UVSCROLL_SCRWID=SCRWID*8;320 ;8*(TILEMAPWID-2)
  119. UVSCROLL_SCRHGT=136;200;192-16 ;(делится на 16!!!) ;8*(TILEMAPHGT-2) ;чтобы выводить всегда 12 метатайлов (3 блока по 8) по высоте
  120. UVSCROLL_NPUSHES=UVSCROLL_WID/2/4/2
  121. UVSCROLL_SCRNPUSHES=UVSCROLL_SCRWID/2/4/2
  122.  
  123. UVSCROLL_SCRSTART=uvscroll_scrbase+((UVSCROLL_SCRHGT-1)*40)
  124. UVSCROLL_LINESTEP=-40
  125.  
  126. UVSCROLL_NCALLPGS=4
  127.        
  128.         macro SETPGPUSHBASE
  129.         SETPG8000
  130.         endm
  131.  
  132.         macro RECODEBYTE
  133.         ld a,(de)
  134.         ld ($+4),a
  135.         ld a,(trecodebyteright)
  136.         ld c,a
  137.         dec de
  138.         ld a,(de)
  139.         dec de
  140.         ld ($+4),a
  141.         ld a,(trecodebyteleft)
  142.         or c
  143.         endm        
  144.  
  145.        endif
  146.  
  147.  
  148.        macro SCRADDR x,y ;x in chr, y in pix
  149.        if ATM
  150. _=0x4000+((y)*40)+(x)
  151.        else
  152. _=0x4000+(((y)&7)<<8)+(((y)&0x38)<<2)+(((y)&0xc0)<<5)+(x)
  153.        endif
  154.        endm
  155.  
  156.         page 0
  157.        if ATM
  158.         org PROGSTART
  159.        else
  160.         ORG 0x6000
  161.        endif
  162. begin
  163.        if ATM
  164.         ld sp,STACK
  165.         OS_HIDEFROMPARENT
  166.        
  167.         ld e,0+128 ;+128=keep
  168.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  169.  
  170.         ld e,0
  171.         OS_SETSCREEN
  172.         ld e,0 ;color byte
  173.         OS_CLS
  174.         ld e,1
  175.         OS_SETSCREEN
  176.         ld e,0 ;color byte
  177.         OS_CLS
  178.  
  179.         OS_NEWPAGE
  180.         ld a,e
  181.         ld (pg1),a
  182.         OS_NEWPAGE
  183.         ld a,e
  184.         ld (pg2),a
  185.  
  186.         OS_GETMAINPAGES
  187. ;dehl=номера страниц в 0000,4000,8000,c000
  188.         ld a,e
  189.         LD (pgmain4000),A
  190.         ld a,h
  191.         LD (pgmain8000),A
  192.         ld a,l
  193.         ld (pgmask),a
  194.         ld de,res_path
  195.         OS_CHDIR
  196.  
  197.         call SetPgTexture8000
  198.         ld de,fnpg1
  199.         call loadfile8000
  200.  
  201.         call SetPgLmn8000
  202.         ld de,fnpg2
  203.         call loadfile8000
  204.  
  205.         call setpgsmain40008000
  206.  
  207.         ;call cls
  208.         call swapimer
  209.  
  210.         call uvscroll_prepare
  211.         jp GO
  212.  
  213. loadfile8000
  214.         call openstream_file
  215.         ld de,0x8000
  216.         ld hl,0x4000
  217.         call readstream_file
  218.         jp closestream_file
  219.        
  220. ;bgxyfilename
  221. ;        db "bg8-16d.bmp",0
  222.  
  223. swapimer
  224.         di
  225.         ld de,0x0038
  226.         ld hl,oldimer
  227.         ld bc,3
  228. swapimer0
  229.         ld a,(de)
  230.         ldi ;[oldimer] -> [0x0038]
  231.         dec hl
  232.         ld (hl),a ;[0x0038] -> [oldimer]
  233.         inc hl
  234.         jp pe,swapimer0
  235.         ei
  236.         ret
  237. oldimer
  238.         jp on_int ;заменится на код из 0x0038
  239.         jp 0x0038+3
  240.  
  241. on_int
  242. ;restore stack with de
  243.         EX DE,HL
  244.         EX (SP),HL ;de="hl", в стеке "de"
  245.         LD (on_int_jp),HL
  246.         LD (on_int_sp),SP
  247.         LD SP,INTSTACK
  248.         push af
  249.         push bc
  250.         push de ;"hl"
  251.         exx
  252.         ex af,af' ;'
  253.         push af
  254.         push bc
  255.         push de
  256.         push hl
  257.         push ix
  258.         push iy
  259.  
  260. curscrnum_int=$+1
  261.         ld e,0
  262.         OS_SETSCREEN
  263.        
  264.         call oldimer ;ei ;а что если выйдем поздно (по yield)? надо в конце обработчика убрать ei, но и это не поможет, т.к. yield сейчас с включенными прерываниями!!!
  265.        
  266.         ;GET_KEY
  267.         ;ld a,c ;кнопка без учёта языка
  268.         ;or a
  269.         ;jr z,$+5
  270.         ;ld (curkey),a
  271.        
  272.         ;OS_GETKEYMATRIX
  273.         LD hl,curwater
  274.         ld a,(hl)
  275.         SUB -16
  276.         LD (hl),A
  277.         CALL MOUSE
  278.         call TIME
  279.         ld hl,timer
  280.         inc (hl)
  281.  
  282.         pop iy
  283.         pop ix
  284.         pop hl
  285.         pop de
  286.         pop bc
  287.         pop af
  288.         ex af,af' ;'
  289.         exx
  290.         pop hl
  291.         pop bc
  292.         pop af        
  293. on_int_sp=$+1
  294.         ld sp,0
  295.         pop de
  296.         ei
  297. on_int_jp=$+1
  298.         jp 0
  299.  
  300.         align 256
  301.        endif
  302. _tables=$
  303.        
  304.        macro TABLE sz
  305.         org _tables
  306. _tables=_tables+sz
  307.        endm
  308.        macro ENDTABLE
  309.        endm
  310.        
  311.         TABLE 0x200
  312. FONT
  313.         INCBIN "w64fnt.bin"   ;todo PG ;todo 256 байт (по 2 символа в байте)
  314.         ENDTABLE
  315.         TABLE 0x200
  316. FONT88
  317.         INCBIN "w88_fnt.bin" ;(пока адрес делится на 512) можно уменьшить (за счёт ненужных символов и высоты), но не сильно
  318.         ENDTABLE
  319.         TABLE 0x100
  320. WATER
  321.         INCBIN "water.bin"    ;todo PG
  322.         ENDTABLE
  323.         TABLE 0x100
  324. DTNTAB ;32 байта по круглому адресу во время построения контура карты
  325. MKMASKBUF EQU DTNTAB ;(MASKWID) ;во время построения карты
  326. TPLACES EQU DTNTAB ;table of y's (per column) usable for worms ;во время построения карты
  327. TXY     EQU TPLACES+256-(2*Nobjects) ;x,y всех червей (генерируется в mkmap) временно, потом используем WORMXY
  328. ;TABSIN  EQU DTNTAB ;пока топорный квадратичный (для перемещения курсора вокруг червя) во время хода игрока (но не логики)
  329. ;MAXWXY EQU 98
  330. ;SPRITE,COORDS,SPEED
  331. WORMXY  EQU DTNTAB ;во время игры
  332. ;TEAM,WORM,ENERGY,WEAPON,AIM,0
  333. CUWORMS EQU DTNTAB+0x80
  334. ;TODO ещё буфер координат партиклов - или их сюда же? тогда не более 22 партиклов при 512 байт на два этих списка
  335.         ENDTABLE
  336.         TABLE 0x100
  337. TITBUF ;todo очередь в PG
  338.         ENDTABLE
  339.         TABLE 0x400
  340. Tshift ;,#400 ;во время игры (скролл 3,5)
  341. grassbuf=Tshift ;for mkmap
  342. grassbufsz=0x400 ;0x200 часто выдаёт "nowhere to worm"
  343. LMNused=grassbuf ;(NLMN) ;for mkmap ;там помечается, какие номера элементов уже использовались
  344. LMNlist=LMNused+256-NLMNONMAP ;список используемых
  345.         ENDTABLE
  346.         TABLE 0x100
  347. TABROLL ;для логики (быстрая работа с маской)
  348.         ENDTABLE
  349.         TABLE 0x200
  350. TMASKLN ;512 ;адреса строк маски = MASK+l*MASKWID ;почему-то не используется при построении карты
  351.         ENDTABLE
  352.        if !ATM
  353.         TABLE 0x200
  354. TMAPLN ;512 ;адреса строк карты = MAP+l*MAPWID ;во время построения карты и для drawinmap (и для FASTMAPPER)
  355.         ENDTABLE
  356.         TABLE 0x200
  357. skysprlist=$+256-(42*6)+(4*6) ;80 строк по 6 байт (480 байт) с запасом сверху на 4 (не хватило на высоту червя) (внутри каждых 6 байт адресация inc l!)
  358.         ENDTABLE
  359.        endif
  360. endtables=_tables
  361.         ds endtables-$
  362. GO
  363.         ld sp,STACK
  364.        if !ATM
  365.         xor a
  366.        out (0xfe),a
  367.         ld hl,0x6000
  368.         ld (hl),a
  369.         inc l
  370.         ld (hl),a
  371.         inc l
  372.         ld (hl),a ;was jp GO
  373.        endif
  374.         LD A,R
  375.         ld l,a
  376.        ;ld hl,0xcdc5;0x4dd5;0xf1b3
  377.         ld (rndseed1),hl
  378.         ld hl,(0x5c78)
  379.        ;ld hl,0x765e;0x2734;0x6c1b
  380.         ld (rndseed2),hl
  381.      
  382.       if !ATM
  383.      ld a,PGLMN
  384.      call OUTME
  385.      ld a,(LMNS)
  386.      ld (LMNSfirstbyte),a
  387.       endif
  388.  
  389.        if ATM
  390. ;шрифт должен содержать по 2 копии каждой буквы
  391.         ld hl,FONT
  392.         ld bc,512 +255 ;+255 для цикла dec bc:inc b:djnz
  393. mkdoublefont0
  394.         ld a,(hl)
  395.         rlca
  396.         rlca
  397.         rlca
  398.         rlca
  399.         or (hl)
  400.         ld (hl),a
  401.         inc hl
  402.         dec bc
  403.         inc b
  404.         djnz mkdoublefont0
  405.        endif
  406.  
  407.         LD HL,TITBUF
  408.         LD (HL),0
  409. ;NACHALO
  410.        if !ATM
  411.         LD DE,MAPDO
  412.         LD BC,MAPWID
  413.         LD L,B;0
  414. MKTBROW0 LD H,TMAPLN/256
  415.         LD (HL),E
  416.         INC H
  417.         LD (HL),D
  418.        ;BIT 6,D
  419.        ;JR NZ,$+6
  420.        ;LD (HL),#C0
  421.        ;DEC H
  422.        ;LD (HL),B
  423.         EX DE,HL
  424.         ADD HL,BC
  425.         EX DE,HL
  426.         INC L
  427.         JR NZ,MKTBROW0
  428.        endif
  429.  
  430.         LD L,0
  431.         LD DE,MASKDO
  432.         LD C,MASKWID
  433. MKTBMSK LD H,TMASKLN/256
  434.         LD (HL),E
  435.         INC H
  436.         LD (HL),D
  437.         LD A,L ;l=y не в маске, а в карте, причём для головы, а не для ног!
  438.        add a,8 ;координата для ног
  439.        cp SKYHGT
  440.        jr nc,MKTBMSKnoblank
  441.        ; CP -8
  442.        ; JR NC,$+6
  443.        ;BIT 5,D
  444.        ;JR NZ,$+7
  445.          LD (HL),BLANK/256
  446.          DEC H
  447.          LD (HL),BLANK&0xff
  448. MKTBMSKnoblank
  449.         RRA
  450.         JR NC,$+5
  451.          EX DE,HL
  452.          ADD HL,BC ;двигаемся каждый второй раз (1 строка маски = 2 строки карты)
  453.          EX DE,HL
  454.         INC L
  455.         JR NZ,MKTBMSK
  456.  
  457.         CALL INIMOUS ;портит ba00
  458.        
  459.        if ATM
  460.         call SetPgMuzC000
  461.         call muz
  462.         ld hl,muz+5
  463.         ld a,(pg1)
  464.         OS_SETMUSIC
  465.        else
  466.         ld a,PGMAP
  467.         call OUTME
  468.         xor a
  469.         ld (muz),a
  470.         ld a,PGLMN
  471.         call OUTME
  472.         ld a,(muz)
  473.         sub 0x21
  474.         ld (muzpatch),a
  475.         call z,muz
  476.          CALL MAKINT
  477.        endif
  478. NACHALO
  479.         LD HL,TLAND
  480.         jr newmapgo
  481. nowhere ;return here if "nowhere to worm"
  482.         LD HL,MESWHE ;"nowhere to worm"
  483. newmapgo
  484.        ld sp,STACK
  485.         CALL MTITLE
  486.         call cls
  487.        
  488.        if ATM
  489.         ;ld de,bgxyfilename
  490.         ;call uvscroll_preparebmp;uvscroll_prepare
  491.         ld de,pal;SUMMERPAL
  492.         OS_SETPAL
  493.         YIELD
  494.         ld hl,panel16
  495.         call DrawPanel
  496.        else
  497.         ld hl,panel
  498.         call DrawPanel
  499.        endif
  500.        
  501.         LD HL,(curdrawingtitle)
  502.         CALL DrawTitle ;печать игрового сообщения
  503.  
  504.         CALL MKMAP
  505.  
  506.        if !ATM
  507.         ld hl,Tshift
  508.         ld de,0x0705
  509.         call fixshift
  510.         ld h,Tshift/256+2
  511.         ld de,0x1f03
  512.         call fixshift
  513.        endif
  514.  
  515. ;TODO сделать нормальный синус
  516. ;он тут кладётся, т.к. TABSIN затёрта во время генерации карты
  517.         ;LD HL,TABSIN
  518.         ;XOR A
  519.         ;LD B,22
  520.         ;LD (HL),A
  521.         ;INC HL
  522.         ;ADD A,B
  523.         ;DJNZ $-3
  524.  
  525.         LD HL,MESHOM
  526.         CALL MTITLE
  527.         CALL DrawAttrField
  528.         CALL ResetTime
  529.         CALL DrawEnergyPanel ;печать панельки для энергии и ветра
  530.  
  531.         LD HL,TABROLL
  532.         LD C,1
  533. MKTRL   LD A,L
  534.         AND 31
  535.         JR NZ,$+4
  536.          RRC C
  537.         LD (HL),C
  538.         INC L
  539.         JR NZ,MKTRL
  540.  
  541.        call ForcedDrawWormsInMap
  542. gamemove
  543.        call DrawWormsDataInMap
  544.        ld a,STATE_MOVE
  545.        ld (gamestate),a
  546. genwind0
  547.         call RND
  548.         and 127
  549.         cp 46+1+46
  550.         jr nc,genwind0
  551.         sub 46
  552.         ld (wind),a
  553.        
  554.        if 1 ;TODO remove
  555. genpowr0
  556.         call RND
  557.         and 127
  558.         cp 119
  559.         jr nc,genwind0
  560.         ld (powr),a
  561.        endif
  562.  
  563.        CALL DrawEnergy ;печать полосок энергии и ветра
  564. gameloop
  565.         LD HL,(MOUSEx)
  566.         LD (MOUSEX),HL
  567.         LD A,(MOUSEy)
  568.         LD (MOUSEY),A
  569.       ;HALT
  570.     ;CALL MAPPER ;печать верха карты при one frame выводилке
  571.        if !ATM
  572.         LD A,PGMAP;16
  573.         CALL OUTME
  574.        endif
  575.     call DrawWormsInMap ;TODO рисовать только сместившихся ;даже если напечатали ниже 0xc000, то всё равно сотрём сразу после отрисовки
  576.        ld a,(gamestate)
  577.        cp STATE_MOVE
  578.        call z,DrawCrossInMap
  579.      CALL DrawMap ;TODO не перерисовывать, если не сменился XY и не сместились объекты (прорисовать только строки под стрелкой для air strike)
  580.      CALL DrawTime
  581.        if !ATM
  582.         LD A,PGMAP;16
  583.         CALL OUTME
  584.        endif
  585.        ld a,(gamestate)
  586.        cp STATE_MOVE
  587.        call z,UnDrawCrossInMap
  588.     call UnDrawWormsInMap ;TODO стирать только сместившихся
  589.     call AnimMines
  590.        ;LD A,-64
  591.        ;LD HY,'TY4TOP
  592.        ;CALL WORMS
  593.        ;CALL CURSOR
  594. oldtitletimer=$+1
  595.         ld e,0
  596.         ld a,(timer)
  597.         ld (oldtitletimer),a
  598.         sub e
  599.         ld e,a
  600. STCNTa=$+1
  601.         LD A,1
  602.         sub e;DEC A
  603.         JR nc,STNOTIT
  604.         xor a
  605. curdrawingtitle=$+1
  606.         LD HL,TITBUF
  607.         CP (HL)
  608.         CALL NZ,DrawTitle ;печать игрового сообщения
  609.         JR $+5
  610. STNOTIT LD (STCNTa),A
  611. ;DOPR    CALL 0 ;печать низа карты при one frame выводилке
  612. ;DOPRA   LD HL,0
  613. ;       LD (HL),#FD
  614. ;       INC HL
  615. ;       INC HL
  616. ;       LD (HL),#E1
  617. ;       CALL DrawWater
  618. ;      LD BC,999
  619. ;      LD D,B
  620. ;NOLDIR LDIR ;wait for turbo mode (недостаточно при 14 МГц)
  621.        ;XOR A
  622.        ;LD HY,'TY4LOW
  623.        ;CALL CURSOR ;TODO для AIRSTRIKE (надо печатать на карте с запоминанием - прямо перед выводом карты, а потом восстанавливать)
  624.  
  625.        if ATM
  626.         call changescrpg ;с этого момента (точнее, с прерывания) можем видеть, что нарисовали
  627.         halt
  628.         ;ld a,(curscrnum_int)
  629.         ;ld e,a
  630.         ;OS_SETSCREEN
  631.        endif
  632.  
  633. ;logic:
  634. ;delta timing
  635. oldtimer=$+1
  636.         ld e,0
  637. waithalt
  638.         ld a,(timer)
  639.         ld (oldtimer),a
  640.         sub e
  641.          cp 1;2
  642.        if ATM
  643.         jp c,waithalt ;это не гарантия переключения экрана!!!
  644.        else
  645.         jp c,timeraction0q;waithalt ;чтобы линия обновления экрана была в рандомном месте
  646.        endif
  647. logicframesremained=$+1
  648.        add a,0 ;0..LOGICSPEED-1
  649. timeraction0
  650.         ld (logicframesremained),a
  651.         sub 1;2
  652.         jr c,timeraction0q
  653.         push af
  654.  
  655.        CALL WRMOVE
  656.        ld a,(gamestate)
  657.        cp STATE_MOVE
  658.        call z,ControlCurWorm
  659.        call WormsVsMines
  660.        call StayingWormsVsMovingWorms ;столкновение летящего со стоящим
  661.        
  662.         pop af
  663.         jr timeraction0
  664. timeraction0q
  665.        
  666.        ld a,(gamestate)
  667.        cp STATE_FLYCURWORM
  668.        jr nz,noflycurworm ;не режим прыжка
  669.        call CheckFlyingWorms
  670.        jr nz,noflycurworm ;есть летящие
  671.        call DrawCurWormData
  672.        ld a,STATE_MOVE
  673.        ld (gamestate),a
  674. noflycurworm
  675.        ld a,(gamestate)
  676.        cp STATE_FLY
  677.        jr nz,flyingok ;не режим взрыва
  678.        call CheckFlyingWorms
  679.        jr nz,flyingok ;есть летящие
  680. ;летящих червей больше нет, печатаем названия всех живых червей и переходим в режим смертей (а из него потом или в режим взрыва, или в режим перехода хода)
  681.        ld a,STATE_DIE
  682.        ld (gamestate),a
  683. ;TODO...
  684. ;TODO асинхронно от цикла графики  
  685.         jp gamemove
  686. flyingok
  687. ;
  688.      
  689.        ;CALL CLRTOP
  690.        ;CALL UPPRU
  691.        ;CALL 8020
  692.        ;RET NC
  693.        LD A,-3
  694.        IN A,(-2)
  695.        BIT 1,A
  696.        CALL Z,unsetwms;SETWMS ;"S" - заново расставить червей
  697.        LD A,#FB
  698.        IN A,(-2)
  699.        BIT 3,A
  700.        JP Z,NACHALO ;"R" - заново сгенерировать карту
  701.         JP gameloop
  702.  
  703. timer
  704.         db 0 ;for logic
  705. wind
  706.         db 0 ;-46..46
  707. powr
  708.         db 0 ;0..118
  709. gamestate
  710.         db 0 ;STATE_MOVE=управление червём (в т.ч. ИИ), STATE_SHOT=анимация выстрела, STATE_BULLET=полёт снаряда, STATE_FLY=взрыв, STATE_DIE=смерти, STATE_NEXTMOVE=переход хода
  711. STATE_MOVE=0
  712. STATE_SHOT=1
  713. STATE_BULLET=2
  714. STATE_FLY=3 ;сняты надписи со всех червей
  715. STATE_DIE=4
  716. STATE_NEXTMOVE=5
  717. STATE_FLYCURWORM=6 ;прыжок/падение во время хода, снята надпись только с текущего червя
  718.  
  719.        if !ATM
  720. fixshift
  721. fixshift0
  722.         ld b,e
  723.         ld a,l
  724.         RRCA
  725.         DJNZ $-1
  726.         ld (hl),a
  727.         and d
  728.         inc h
  729.         ld (hl),a
  730.         dec h
  731.         xor (hl)
  732.         ld (hl),a
  733.         inc l
  734.         jr nz,fixshift0
  735.         ret
  736.        endif
  737.  
  738.        if !ATM
  739. MAKINT
  740.         LD A,IMTAB/256
  741.         LD I,A
  742.         IM 2
  743.         EI
  744.         RET
  745.        endif
  746.  
  747.       if !ATM
  748. ;PRGA    LD A,0
  749. curpg
  750.         db 0x10
  751. OUTME
  752.         ;LD (PRGA+1),A
  753.         ld (curpg),a
  754. ;OUTNO
  755.         PUSH BC
  756.         LD BC,FD
  757.         OUT (C),A
  758.         POP BC
  759.         RET
  760.       endif
  761.  
  762. SetPgMask
  763.        if ATM
  764. pgmask=$+1
  765.         ld a,0
  766.         push bc
  767.         SETPGC000
  768.         pop bc
  769.         ret
  770.        else
  771.        LD A,PGMASK_
  772.        jp OUTME
  773.        endif
  774.  
  775.        if ATM
  776. SetPgMask8000
  777.         ld a,(pgmask)
  778.         push bc
  779.         SETPG8000
  780.         pop bc
  781.        ret
  782. SetPgTexture8000
  783. pg1=$+1
  784.         ld a,0
  785.         push bc
  786.         SETPG8000
  787.         pop bc
  788.        ret
  789. SetPgTextureC000
  790.         ld a,(pg1)
  791.         push bc
  792.         SETPGC000
  793.         pop bc
  794.        ret
  795. SetPgLmn8000
  796. pg2=$+1
  797.         ld a,0
  798.         push bc
  799.         SETPG8000
  800.         pop bc
  801.        ret
  802. SetPgMuzC000
  803.         ld a,(pg2) ;TODO отдельная страница
  804.         push bc
  805.         SETPGC000
  806.         pop bc
  807.        ret
  808.        endif
  809.  
  810. RND
  811.         PUSH de
  812.         PUSH HL
  813. ;Patrik Rak
  814. rndseed1=$+1
  815.         ld  hl,0xA280   ; xz -> yw
  816. rndseed2=$+1
  817.         ld  de,0xC0DE   ; yw -> zt
  818.         ld  (rndseed1),de  ; x = y, z = w
  819.         ld  a,e         ; w = w ^ ( w << 3 )
  820.         add a,a
  821.         add a,a
  822.         add a,a
  823.         xor e
  824.         ld  e,a
  825.         ld  a,h         ; t = x ^ (x << 1)
  826.         add a,a
  827.         xor h
  828.         ld  d,a
  829.         rra             ; t = t ^ (t >> 1) ^ w
  830.         xor d
  831.         xor e
  832.         ld  h,l         ; y = z
  833.         ld  l,a         ; w = t
  834.         ld  (rndseed2),hl
  835.         POP HL
  836.         POP de
  837.         RET
  838.  
  839. RNDA
  840.         PUSH BC
  841.         LD C,A
  842.         CALL RND
  843.         SUB C
  844.         JR NC,$-1
  845.         ADD A,C
  846.         POP BC
  847.         RET
  848.  
  849. unsetwms
  850.        ld a,(gamestate)
  851.        cp STATE_FLY
  852.        ret z
  853.        call ForcedUnDrawWormsInMap
  854.        call UnDrawWormsDataInMap
  855.        ld a,STATE_FLY
  856.        ld (gamestate),a
  857.  
  858.         ld a,80
  859.         call RND
  860.        add a,80
  861.         ld e,a ;y0
  862.         call RND
  863.         ld c,a ;x0low
  864.         xor a
  865.         sla c
  866.         rla
  867.         sla c
  868.         rla
  869.         ld b,a ;bc=x0
  870.         ld a,40
  871.         call RNDA
  872.         add a,10
  873.         ld d,a ;d=R
  874.          ;ld bc,200
  875.          ;ld e,100
  876.         call UnDrawCircleInMap
  877.  
  878.         LD HL,WORMXY
  879. unsetwms0
  880.         ;POP BC ;SPRITE (lsb=xlow*32)
  881.         ;POP HL ;COORDS
  882.         ;POP DE ;SPEED
  883.         ld c,(hl)
  884.         inc l
  885.         ld b,(hl) ;spritehsb
  886.         inc l
  887.         dec b
  888.         ret z
  889.         inc b
  890.         ld a,(hl) ;x
  891.         inc l
  892.         inc l
  893.         inc l
  894.        cp XWID
  895.        jr nc,unsetwms_skip
  896.         call RND
  897.         and 7
  898.         sub 4
  899.         ld c,a
  900.         call RND
  901.         and 7
  902.         sub 7;4
  903.         ld b,a ;dy
  904.         dec l
  905.         ld (hl),c
  906.         inc l
  907.         ld (hl),b
  908. unsetwms_skip
  909.         inc l
  910.         jr unsetwms0
  911.  
  912. SETWMS
  913. ;чтобы считывать XY в случайном порядке, будем переставлять случайно несколько раз с первым
  914.         ld b,100
  915. SETWMS_SHUFFLE0
  916.         ld hl,TXY
  917.         xor a
  918.         sub l
  919.         srl a ;число объектов
  920.         call RNDA
  921.         add a,a
  922.         cpl
  923.         ld e,a
  924.         dec e
  925.         ld d,h
  926.         ld c,(hl)
  927.         ld a,(de)
  928.         ld (hl),a
  929.         ld a,c
  930.         ld (de),a
  931.         inc l
  932.         inc e
  933.         ld c,(hl)
  934.         ld a,(de)
  935.         ld (hl),a
  936.         ld a,c
  937.         ld (de),a
  938.         djnz SETWMS_SHUFFLE0
  939.  
  940.         LD HL,WORMXY
  941.         LD DE,TXY
  942.         LD B,0
  943. SWMS0   LD A,(DE) ;x from TXY (до 186?)
  944.        ;ld a,l
  945.         INC E
  946.         LD C,A
  947. ;SWMSAp1=$+1
  948.         LD A,#80
  949.         ;SRL C
  950.         ;RRA
  951.         LD (HL),A ;xlow*64;32 (was for sprite)
  952.         INC HL
  953.         LD (HL),sprworm_0/256;BOMBWMS/256+1 ;sprite
  954.        ld a,e
  955.        cp -2*4 ;4 mines (last in the list)
  956.        jr c,$+4
  957.        LD (HL),sprmine_0/256;BOMBWMS/256+1 ;sprite
  958.         INC HL
  959.         LD (HL),C ;xhigh
  960.         INC HL
  961.         LD A,(DE) ;y from TXY
  962.        ;ld a,l
  963.         LD (HL),A ;y
  964.         INC HL
  965.         LD (HL),B;0 ;dx
  966.         INC HL
  967.         LD (HL),SPRLIST_STAYING ;dy
  968.         INC HL
  969.         INC E
  970.         JR NZ,SWMS0
  971.         INC HL
  972.         LD (HL),1 ;end of list (impossible xlow)
  973.        inc hl
  974.        inc hl
  975.        inc hl
  976.        inc hl
  977.        ld (hl),SPRLIST_END ;end of list (impossible dy)
  978.         ;LD HL,SWMSAp1
  979.         ;LD A,(HL)
  980.         ;SUB -2
  981.         ;OR #80
  982.         ;LD (HL),A ;"рандомная" младшая часть x
  983.         LD HL,CUWORMS
  984. MKCUW0  XOR A
  985. MKCUW1  LD (HL),B ;team 0..3
  986.         INC HL
  987.         LD (HL),A ;worm 0..3 in team
  988.         INC HL
  989.         LD (HL),150 ;health
  990.         INC HL
  991.         LD (HL),0 ;???
  992.         INC HL
  993.         LD (HL),10 ;???
  994.         INC HL
  995.         INC HL
  996.         INC A ;next worm in team
  997.         CP 4
  998.         JR C,MKCUW1
  999.         INC B
  1000.        ld a,b
  1001.        cp 4 ;костыль ;FIXME for 2 or 3 teams
  1002.         ;CP B ;4 teams ;FIXME for 2 or 3 teams
  1003.         JR NZ,MKCUW0
  1004.         RET
  1005.  
  1006. ;offint:
  1007. MOUSEX  DW 0
  1008. MOUSEY  DB 0
  1009.  
  1010. NUMFONTCHARSZ=16;8
  1011.  
  1012. ResetTime
  1013.         LD HL,6*NUMFONTCHARSZ*256+(0*NUMFONTCHARSZ) ;"60"
  1014.         LD (curtime),HL
  1015.         LD A,50
  1016.         LD (curtimeframe),A
  1017.         jp Hud_ResetTime
  1018.  
  1019. TIME
  1020. curtime=$+1
  1021.         LD BC,6*NUMFONTCHARSZ*256+(0*NUMFONTCHARSZ) ;"60"
  1022.         LD A,C
  1023.         INC A
  1024.         ret z ;JR Z,PTIMOUT
  1025. curtimeframe=$+1
  1026.         LD A,50
  1027.         DEC A
  1028.         JR NZ,$+4
  1029.         LD A,50
  1030.         LD (curtimeframe),A
  1031.         ret nz ;JR NZ,TIMPR
  1032.         LD A,C
  1033.         SUB NUMFONTCHARSZ;8
  1034.         LD C,A
  1035.         JR NC,TIMEok
  1036.         LD C,9*NUMFONTCHARSZ;8
  1037.         LD A,B
  1038.         SUB NUMFONTCHARSZ;8
  1039.         LD B,A
  1040.         JR NC,TIMEok
  1041.         LD HL,MESTIM
  1042.         CALL MTITLE
  1043.         LD A,-1
  1044.         LD (curtime),A
  1045.         jp Hud_UnDrawTime
  1046. TIMEok  LD (curtime),BC
  1047.         ret
  1048.  
  1049.  
  1050.  
  1051.        if FASTMAPPER
  1052. MAKELDI
  1053.         PUSH BC
  1054.         LD (HL),225
  1055.         INC HL
  1056.         LD B,15
  1057. MLDI1   LD (HL),225
  1058.         INC HL
  1059.         LD (HL),34
  1060.         INC HL
  1061.         LD (HL),E
  1062.         INC HL
  1063.         LD (HL),D
  1064.         INC HL
  1065.         INC E
  1066.         INC E
  1067.         DJNZ MLDI1
  1068.         CALL DDE
  1069.         POP BC
  1070.         DJNZ MAKELDI
  1071.         DEC HL
  1072.         DEC HL
  1073.         CALL READER
  1074.         LD SP,IX
  1075.         RET
  1076.         NOP
  1077.         RET
  1078.        endif
  1079.  
  1080.        if FASTMAPPER
  1081. READER
  1082. ;генерация в HL куска кода, заданного после CALL (0 = конец куска)
  1083.         EX DE,HL
  1084.         EX (SP),HL
  1085.         DEC DE
  1086. READ0   INC DE
  1087.         LD A,(HL)
  1088.         LD (DE),A
  1089.         INC HL
  1090.         OR A
  1091.         JR NZ,READ0
  1092.         EX (SP),HL
  1093.         EX DE,HL
  1094.         RET
  1095.        endif
  1096.  
  1097. cursorkeys
  1098.         db 0 ;11LRDUef cursor
  1099.  
  1100. TLAND   DB 18,"CREATING LANDSCAPE"
  1101. MESHOM  DB 17,"2X HOMING MISSILE"
  1102. MESWHE  DB 16,"NOWHERE TO WORM!"
  1103. MESTIM  DB 11,"TIME IS OUT"
  1104.         db 0
  1105. MESDIE  DB "123456789012 IS AN EX-WORM"
  1106. MESTEAM
  1107.         DB "1234567890123456 TEAM IS NO MORE"
  1108. TEAMLEN=16
  1109. CUTEAMS ;каждая надпись по TEAMLEN символов
  1110.         DB "ALONE CODER     "
  1111.         DB "DAVE            "
  1112.         DB "WORMS           "
  1113.         DB "THE FARM        "
  1114.  
  1115. NAMES   DB "ALCO        "
  1116.         DB "ALCO2       "
  1117.         DB "ALCO3       "
  1118.         DB "ALCO4       "
  1119.         DB "DAVE        "
  1120.         DB "D2          "
  1121.         DB "D3          "
  1122.         DB "D4          "
  1123.         DB "FLAT        "
  1124.         DB "EARTH       "
  1125.         DB "TAPE        "
  1126.         DB "WOOD        "
  1127.         DB "MOO         "
  1128.         DB "HORSE       "
  1129.         DB "PIGGY       "
  1130.         DB "CHICKEN     "
  1131.        ;db "BOMBA       "
  1132.        ;db "BOMBA       "
  1133.        ;db "BOMBA       "
  1134.        ;db "BOMBA       "
  1135.  
  1136. numfont
  1137.         include "numfont.ast"
  1138.        
  1139.        if !ATM
  1140.         include "panel.ast" ;в 48K версии можно несъёмную панель (без панелей оружия)
  1141.        endif
  1142.  
  1143.         include "input.asm"
  1144.         include "mkmap.asm"
  1145.        if ATM
  1146.         include "mkmapatm.asm"
  1147.        else
  1148.         include "mkmap6912.asm"
  1149.        endif
  1150.         include "hud.asm"
  1151.        if ATM
  1152.         include "hudatm.asm"
  1153.        else
  1154.         include "hud6912.asm"
  1155.        endif
  1156.        display "fast procedures: ",$,">=0x8000"
  1157.         include "logic.asm"
  1158.         include "drawmap.asm"
  1159.        if ATM
  1160.         include "drawmapatm.asm"
  1161.         include "bgpushxy.asm"
  1162.         include "../../_sdk/file.asm"
  1163.         ;include "../../_sdk/bmp.asm"
  1164. ;bmpwid
  1165.         ;dw 0
  1166.         include "mem.asm"
  1167.        else
  1168.         include "drawmap6912.asm"
  1169.        endif
  1170.         include "drawinmap.asm"
  1171.        if ATM
  1172.         include "drawinmapatm.asm"
  1173.        else
  1174.         include "drawinmap6912.asm"
  1175.        endif
  1176.  
  1177.        if ATM
  1178. BLANK   DS MASKWID ;BLANK - пустая строка маски (небо) шириной MASKWID
  1179.        else
  1180.         align 256
  1181. IMTAB   DS 257,$/256+1
  1182. BLANK   DS $/256-1 ;BLANK - пустая строка маски (небо) шириной MASKWID
  1183. IMER
  1184. ;restore stack from de
  1185. ;if sp=screen, fill with 0
  1186. ;if critical section, unwind de/bc and restore from de/bc
  1187.         ld (imerhl),hl
  1188.         pop hl
  1189.         ld (imerjp),hl
  1190.         ld (imersp),sp
  1191.         ld sp,INTSTACK
  1192.        push BC
  1193.        push DE
  1194.        push HL
  1195.        PUSH AF
  1196.       if !ATM
  1197.         ld a,l
  1198.         sub x6line_startcritical&0xff
  1199.         ld a,h
  1200.         sbc a,x6line_startcritical/256
  1201.         jr c,IMERnocritical
  1202.         ld a,l
  1203.         sub x6line_endcritical&0xff
  1204.         ld a,h
  1205.         sbc a,x6line_endcritical/256
  1206.         jr nc,IMERnocritical
  1207.         ld a,(x6line_restorede_startcritical+x6line_startcritical)&0xff
  1208.         sub l
  1209.         ld l,a
  1210.         ld a,((x6line_restorede_startcritical+x6line_startcritical)/256)&0xff
  1211.         sbc a,h
  1212.         ld h,a
  1213.        pop af
  1214.        push af
  1215.        ld (IMERcriticaljp),hl
  1216.        ld hl,IMERcritical_restorede ;jp (hl)=restore de, ret=restore bc
  1217. IMERcriticaljp=$+1
  1218.        call 0 ;unwind de ;addr=x6line_restorede_startcritical-(imerjp-x6line_startcritical)
  1219.         ld hl,(imersp)
  1220.         dec hl
  1221.         ld (hl),b
  1222.         dec hl
  1223.         ld (hl),c
  1224.        jp IMERcriticalq
  1225. IMERcritical_restorede
  1226. ;after jp (hl)
  1227.        pop af ;skip return addr
  1228. IMERnocritical
  1229.       endif
  1230.         ld hl,(imersp)
  1231.        dec hl
  1232.        dec hl
  1233.         bit 7,h
  1234.         jr nz,IMERnozerostack
  1235.         ld de,0
  1236.       if !ATM
  1237.        ld a,l
  1238.        inc a
  1239.        jr nz,IMERnozerostack
  1240.        ld a,h
  1241.        sub 0x50
  1242.        cp 7
  1243.        jr nc,IMERnozerostack
  1244. ;при запарывании 0x50ff..0x56ff (ATM=0)
  1245. ;50ff - берём из 51ff
  1246. ;51ff - берём из 50ff
  1247. ;52ff - берём из 51ff
  1248. ;53ff - берём 0f
  1249. ;прочие - берём ff
  1250.         ;call ReDrawEnergy ;при запарывании 0x50ff..0x56ff
  1251.         cp 3
  1252.         ld e,0x0f
  1253.         jr z,IMERnozerostack
  1254.         ld e,0xff
  1255.         jr nc,IMERnozerostack
  1256.         cpl
  1257.         and 1
  1258.         add a,0x50
  1259.         ld b,a
  1260.         ld c,l
  1261.         ld a,(bc)
  1262.         ld e,a
  1263.       endif
  1264. IMERnozerostack
  1265.         ld (hl),e
  1266.         inc hl
  1267.         ld (hl),d
  1268. IMERcriticalq
  1269.         LD hl,curwater
  1270.         ld a,(hl)
  1271.         SUB -16
  1272.         LD (hl),A
  1273.        ex af,af' ;'
  1274.        PUSH AF
  1275.         CALL MOUSE
  1276.         call TIME
  1277.         ld hl,timer
  1278.         inc (hl)
  1279.         ld a,(curpg)
  1280.         push af
  1281.         push ix
  1282.         push iy
  1283.         ld a,PGLMN
  1284.         call OUTME
  1285. muzpatch=$+1
  1286.         ld a,0
  1287.         or a
  1288.         call z,muz+5
  1289.         pop iy
  1290.         pop ix
  1291.         pop af
  1292.         call OUTME
  1293.        pop AF
  1294.        ex af,af' ;'
  1295.        pop AF
  1296.        POP HL
  1297.        pop DE
  1298.        pop BC
  1299. imersp=$+1
  1300.         ld sp,0
  1301. imerhl=$+1
  1302.         ld hl,0
  1303.         EI
  1304. imerjp=$+1
  1305.         jp 0
  1306.        endif
  1307.  
  1308.        if ATM
  1309. genpush_newpage
  1310. ;заказывает страницу, заносит в tpushpgs, a=pg
  1311.         push bc
  1312.         push de
  1313.         push hl
  1314.         push ix
  1315.         OS_NEWPAGE
  1316.         pop ix
  1317.         ld a,e
  1318.         ld (ix),a
  1319.         ld de,4
  1320.         add ix,de
  1321.         pop hl
  1322.         pop de
  1323.         pop bc
  1324.         ret
  1325.  
  1326. RestoreMemMap3
  1327.         ;ld a,CC_PAGE3;0
  1328.         ;jp setpgc000;SETPG32KHIGH
  1329.         ret
  1330.  
  1331.         include "grass16.ast"
  1332. ;pal
  1333. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  1334.         ;STANDARDPAL
  1335.         include "pal.ast"
  1336. res_path
  1337. ;в этом относительном пути будут лежать все загружаемые данные игры
  1338.         db "worms"
  1339.         db 0
  1340. fnpg1
  1341.         db "hicode.c",0
  1342. fnpg2
  1343.         db "hicode2.c",0
  1344.        
  1345.         align 256 ;for setpixel
  1346. tpushpgs
  1347.         ds 128 ;первая страница 0 слоя, первая страница 1 слоя, первая страница 2 слоя, первая страница 3 слоя, вторая страница 0 слоя...
  1348.  
  1349.         align 256
  1350. trecodebyteleft
  1351.         dup 256
  1352. ;%00003210 => %.3...210
  1353. _3=$&8
  1354. _210=$&7
  1355.         db (_3*0x08) + (_210*0x01)
  1356.         edup
  1357.        
  1358. trecodebyteright
  1359.         dup 256
  1360. ;%00003210 => %3.210...
  1361. _3=$&8
  1362. _210=$&7
  1363.         db (_3*0x10) + (_210*0x08)
  1364.         edup
  1365.  
  1366. bgpush_bmpbuf ds 1024;320 ;заголовок bmp или одна строка
  1367.        endif
  1368.  
  1369.         display "endcode=",$
  1370.  
  1371.         align 256
  1372. tsin
  1373.         incbin "sin"
  1374.        if !ATM
  1375.         align 256
  1376.         include "texture.ast" ;только при генерации карты (0x800 байт) (можно урезать (как на Амиге) или сжать?)
  1377.        endif
  1378.         align 256
  1379.         include "sprites.ast"
  1380. sprpie
  1381.         INCBIN "gug.bin" ;только при генерации карты (на 48K можно убрать)
  1382.        
  1383.         display "endgfx=",$
  1384. endall
  1385.  
  1386.        if !ATM
  1387.         ORG 0x6000
  1388.         jp GO
  1389.        endif
  1390.  
  1391.         page PGHICODE
  1392.         ORG 0xc000
  1393. hicode_begin
  1394.        if !ATM
  1395.         nop ;TODO в этой странице тоже что-нибудь
  1396.        else
  1397.         include "texforrest.ast"
  1398.         include "panel16.ast"
  1399.        endif
  1400. hicode_end
  1401.  
  1402.         page PGLMN
  1403.         ORG 0xc000
  1404. hicode2_begin
  1405. LMNS
  1406.         INCBIN "lmn.bin" ;>7K! в формате SCUT
  1407. muz
  1408.         include "../../_sdk/ptsplay.asm"
  1409. MDLADDR
  1410.         incbin "music/WORMS8.pt3"        
  1411. ;GUG
  1412. ;        INCBIN "gug.bin" ;только при генерации карты (на 48K можно убрать)
  1413. hicode2_end
  1414.  
  1415.        if !ATM
  1416.         page 0
  1417.         savebin "code.c",begin,endall-begin
  1418.         page PGHICODE;6
  1419.         savebin "hicode.c",hicode_begin,hicode_end-hicode_begin
  1420.         page PGLMN;4
  1421.         savebin "hicode2.c",hicode2_begin,hicode2_end-hicode2_begin
  1422.        else
  1423.         page 0
  1424.         savebin "worms.com",begin,endall-begin
  1425.         page PGHICODE;6
  1426.         savebin "worms/hicode.c",hicode_begin,hicode_end-hicode_begin
  1427.         page PGLMN;4
  1428.         savebin "worms/hicode2.c",hicode2_begin,hicode2_end-hicode2_begin
  1429.        endif
  1430.  
  1431.         LABELSLIST "../../../us/user.l",1
  1432.