?login_element?

Subversion Repositories NedoOS

Rev

Rev 914 | Rev 966 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.         ;MAIN "VERA",8
  2.  
  3. ;Для компиляции раздела "Об..."
  4. ;раскоментировать строку, но
  5. ;закоментировать вышестоящие INCBIN
  6.         ;INCLUDE "B:ABOUT"
  7.  
  8. VUSE1   CALL CLRMK
  9.         CALL MANAGE
  10.         LD A,B
  11.         CP 5
  12.         RET NZ
  13.  
  14. ;Выкладыв. вещей на поле/разговор
  15. VUSE2
  16.         LD A,(RunHero+1)
  17.         AND A
  18.         RET NZ
  19.         LD A,B
  20.  
  21.         DEC A
  22.         LD (VUSE3+1),A
  23.         JP Z,VSHERO
  24.  
  25.         LD (RunHero+1),A
  26.         LD (VUS+1),A
  27.         LD A,ROTSPD     ;скорость при повороте и выклад. вещи
  28.         LD (SPH+1),A
  29.         LD DE,(HEROCRD)
  30. CURSCRD LD BC,0         ;крд. курс. на карте в сис-ме 2*2 знак.
  31.         CALL ROTATOR    ;поворот героя к месту применения вещи
  32.  
  33. VUSE3   LD A,0
  34.         DEC A
  35.         JP Z,GIVE      ;Отдаем вещь персонажу
  36.         DEC A
  37.         JP Z,TALK      ;Говорим с персонажем
  38.         DEC A
  39.         JP Z,MANIP     ;Применяем вещь на объект
  40.         DEC A
  41.         LD (PUT_GET+1),A
  42.                        ;0-Выкладываем вещь рядом с героем
  43.                        ;1-Берем вещь
  44. VUSE4   LD HL,VeraTab2
  45.         LD A,0
  46.         LD C,A
  47.         AND A
  48.         JR NZ,VS1
  49.  
  50.         LD A,(ROTATE+1)
  51.         ADD A,A         ;A=A*12
  52.         ADD A,A
  53.         LD B,A
  54.         ADD A,A
  55.         ADD A,B
  56.         LD E,A
  57.         LD D,0
  58.         ADD HL,DE
  59. VS1     LD A,C
  60.         INC A
  61.         CP 3
  62.         CALL Z,VS3
  63.         CP 7
  64.         JR NC,VS2
  65.         LD (VUSE4+4),A
  66.         LD E,(HL)
  67.         INC HL
  68.         LD D,(HL)
  69.         INC HL
  70.         LD (SprHero+1),DE
  71.         JR VS2_
  72.  
  73. ;Выкладыв. закончено
  74. VS2     XOR A
  75.         LD (VUS+1),A
  76.         LD (VUSE4+4),A
  77.         LD (RunHero+1),A
  78.         LD A,SPD_HERO
  79.         LD (SPH+1),A
  80.         LD HL,VeraTab2
  81. VS2_    LD (VUSE4+1),HL
  82.         RET
  83.  
  84. ;Непосредств. выкладывание вещи
  85. VS3     EX AF,AF' ;'
  86.         PUSH HL
  87.  
  88.         LD HL,SND_TK
  89.         LD (SAMPLE+1),HL
  90.  
  91.         LD A,PG_MAP
  92.         CALL PAGE
  93.  
  94. PUT_GET LD B,0     ;0-выкладываем,1-берем
  95.         DJNZ VS5
  96. ;берем
  97.         LD A,(UNDER+1)
  98.         AND %01111111
  99.         LD D,A
  100.         CALL SVOYST
  101.        if EGA
  102.        ld a,3 ;3,2 - печатаем, 1 - не печатаем (кроме как под героем)
  103.        LD (MAPFLAG+1),A ;обновить весь экран
  104.        endif
  105.         LD H,B
  106.         LD L,C
  107.         INC HL,HL,HL,HL
  108.         LD C,(HL)
  109.         INC HL
  110.         LD A,(HL)
  111.         CP #F8          ;если под вещью лежал
  112.         JR NC,P_G       ;спрайт из последних 32-х
  113.                         ;то поле под ним не делаем проходимым
  114.         LD HL,(ADRELM)
  115.         LD (HL),0
  116.  
  117. P_G     LD HL,(ADRSPRT) ;восст. фон
  118.         LD (HL),C
  119.         INC HL
  120.         LD (HL),A
  121.         LD A,D
  122.         ADD A,7
  123.         JR VS4
  124.  
  125. ;выкладываем
  126. VS5     LD A,(KARM)
  127.         LD BC,SPR
  128.         ADD A,143
  129.         LD L,A
  130.         LD H,C   ;C=0
  131.         ADD HL,HL
  132.         ADD HL,HL
  133.         ADD HL,HL
  134.         ADD HL,HL
  135.         ADD HL,HL
  136.         ADD HL,BC
  137.         EX DE,HL
  138.         LD HL,(ADRSPRT)
  139.         LD C,(HL)   ;запоминаем фон
  140.         LD (HL),E
  141.         INC HL
  142.         LD B,(HL)
  143.         LD (HL),D
  144.         LD D,B
  145.         LD E,C
  146.         SUB 150
  147.  
  148.         CALL SVOYST
  149.         LD H,B
  150.         LD L,C
  151.         INC HL,HL,HL,HL
  152.  
  153.         LD (HL),E
  154.         INC HL
  155.         LD (HL),D
  156.         LD HL,(ADRELM)
  157.         LD (HL),1
  158.         XOR A
  159.         LD (DISTV),A
  160.         LD (CCURS+1),A
  161. VS4     LD (KARM),A
  162.         EX AF,AF' ;'
  163.         POP HL
  164.         RET
  165.  
  166. ;Поворот героя к персон./вещи
  167. ;IN: DE-коорд. героя, BC-персон./вещи
  168. ROTATOR
  169.         LD A,D          ;Расчет направления движения
  170.         SUB B           ;Оно получается из разности
  171.         RRA             ;нужно если разность >1
  172.         JR NC,PTH1
  173.         RLA
  174. PTH1    LD H,A          ;первоначальной координаты
  175.         LD A,E          ;и следующей коорд.
  176.         SUB C
  177.         RRA
  178.         JR NC,PTH2
  179.         RLA
  180. PTH2    LD L,A          ;HL-направление
  181.  
  182. ;       LD A,L          ;by Pulsar
  183.         ADD A,A
  184.         ADD A,L
  185.         ADD A,H
  186.         ADD A,4
  187.         ADC A,-1
  188.         LD B,A
  189.         JP ROTAT
  190.  
  191. ONESYM  DB 0,0 ;для печати одного символа
  192. ADRELM  DW 0 ;адрес элемента
  193. ADRSPRT DW 0 ;Адрес спрайта на карте под курсором
  194.  
  195. ;Процедуры обслуживающие диалоги, скрипты
  196.  
  197. ;нельзя применить
  198. NOTUSE  ;LD B,64   ;номер сообщ.
  199.         LD A,#20
  200.         LD (PRJR),A
  201.         ADD A,A
  202.         LD (PRTIME+1),A
  203.         LD B,A
  204.         LD HL,SND_END
  205.         LD (SAMPLE+1),HL
  206.         JP SVER    ;печ. сообщения
  207.  
  208. ;Применяем вещь на героя
  209. VSHERO  LD A,(KARM)
  210.         SUB 7
  211.         CALL SVOYST
  212.         LD A,(BC)
  213.         AND A
  214.         JR Z,NOTUSE
  215.  
  216. ;Вещь применяется
  217.         LD HL,SND_HR
  218.         LD A,(BC)
  219.         BIT 7,A
  220.         JR Z,TLSN-3 ;только реплика
  221.         AND %01111111
  222.         PUSH HL
  223.         CALL SCRIPT;скрипт
  224.         POP HL
  225.         EX AF,AF' ;'
  226.         JR TLSN-3
  227.  
  228. XF      EQU (SCRHG/2-4)*256+SCRHG-8+(SHADSCR/256)
  229. XF2     EQU (SCRHG/2)*256+SCRHG+(SHADSCR/256)
  230.  
  231. ;Разговор с персонажем (открываем окно диалога)
  232. TALK
  233.         ;jr $
  234.         LD HL,SND_SPK
  235.         LD (SAMPLE+1),HL
  236. TLSN
  237.         LD (TLK+1),A ;номер реплики или 0-диалог
  238.        if !EGA
  239.         AND A
  240.         JR Z,TL0
  241.         LD A,201
  242. TL0     LD (DLG),A
  243.        endif
  244.         XOR A
  245.         LD (TILED+1),A
  246.         LD A,(KARM)
  247.         LD (KARMBK+1),A
  248.         LD A,SCRHG-8
  249.         LD BC,XF
  250.         LD E,1
  251.         HALT
  252.         DI
  253.         CALL FIX2
  254.        if EGA
  255.         CALL PRW
  256.        else
  257. ;      LD A,PG_VIEW
  258.         CALL PAGE_PG_VIEW
  259.         CALL ARROFF
  260.         CALL PRW
  261.         CALL ARRON
  262.        endif
  263.         EI
  264.        halt
  265.  
  266. TLK     LD A,0        ;0-диалог с кем-то, 1-X номер реплики
  267.         AND A
  268.         LD B,A
  269.         LD HL,#0A11   ;H-X,L-Y текущ. позиции печати
  270.         JR Z,TL1
  271.         LD H,2
  272. TL1     LD (TXT1+1),HL
  273.         LD A,H
  274.         LD (TXT2+1),A
  275.         JR Z,TL2
  276.  
  277.         LD A,B
  278.         DEC A
  279.         PUSH AF
  280.         LD A,PG_MUZ
  281.         CALL PAGE
  282.         LD HL,RP
  283.         LD DE,TEXT
  284.         PUSH DE
  285.         CALL DEHRUST
  286.         POP HL
  287.         POP AF
  288.         CALL SVOYST+3 ;расчет адреса реплики
  289.         XOR A
  290.         JR TL3
  291.  
  292. TL2     CALL PDIAL
  293.         LD (TNN_+1),DE
  294.         ADD A,39
  295.         LD (WHO+1),A
  296.  
  297.         LD A,1
  298. TL3     LD (DIAL+1),A
  299.         XOR A
  300.         LD H,A
  301.         LD L,A
  302.         LD (DISTV),HL
  303.         LD (CCURS+1),A
  304.         LD (UNDER+1),A
  305.         LD (KARM),A
  306.         LD (F3+1),A
  307.         LD (TXT+1),BC ;адрес диалога/реплики
  308.         JP VS2+4
  309.  
  310. ;Продолжение диалога (окно диалога открыто)
  311. TALKING
  312.         LD HL,(mouse_crd);L-Y,H-X
  313. ;      LD A,PG_VIEW
  314.         CALL PAGE_PG_VIEW
  315.         CALL NP2 ;вид курсора
  316.         CALL DIV8
  317.         LD A,H
  318.         CP 22   ;X
  319.         JR NZ,TLKNG ;не попали в кнопочку
  320.         LD A,L  ;Y
  321.         CP 17
  322.         JP Z,SKIP ;попали в кнопочку
  323.  
  324. TLKNG
  325.         LD A,(DIALOG+1) ;проверяем для клав. Enter
  326.         AND A
  327.         RET Z
  328.  
  329.         LD A,PG_MUZ
  330.         CALL PAGE
  331.  
  332.         LD HL,(TXT+1);текущ. напеч. байт
  333.         LD B,(HL)
  334.         INC HL
  335.         LD A,(HL)
  336.         LD (SCRP+1),A
  337. ;      LD A,PG_VIEW
  338.         CALL PAGE_PG_VIEW
  339.         LD A,B
  340.         CP TOKEN
  341.         RET NC ;фраза все еще печатается
  342.  
  343. ;Продолжение диалога
  344. ;       LD A,B
  345.         AND A
  346.         JR Z,TLKEND ;конец диалога - выход
  347.         HALT
  348.         LD DE,#0A14 ;H-X,L-Y
  349.         LD BC,#1006
  350.         DEC A
  351.         JR Z,TN1    ;1 на собес.
  352.         DEC A
  353.         JR Z,TN0    ;2 на героя
  354.         DEC A
  355.         JR Z,TNN    ;3 на другой диалог
  356.         DEC A       ;4 скрипт
  357.         JR Z,SCRP
  358.  
  359. ;       DEC A
  360. ;       JR Z,SCRP5  ;5 особый скрипт (см. формат)
  361.  
  362. ;6 продолж. реплики
  363.         LD A,(TXT1+1)
  364.         CP #13
  365.         JR Z,TN0
  366.         JR TN1
  367.  
  368. TNN     LD A,(SCRP+1)
  369. TNN_    LD (0),A    ;текущий диалог текущего персонажа
  370.         JR TLKEND
  371.  
  372. TN0     LD E,#11
  373. TN1
  374.        if EGA
  375.         push de
  376.         push hl
  377.         LD L,#25
  378.         LD A,201
  379.         CALL FIX3
  380.         call CLW
  381.         pop hl
  382.         pop de
  383.        endif
  384.         LD (TXT1+1),DE
  385.         LD (TXT+1),HL
  386.  
  387.         LD HL,SND_NXT
  388.         LD (SAMPLE+1),HL
  389.  
  390.        if EGA
  391.         ret
  392.        else
  393.         LD L,#25
  394.         LD A,201
  395.         CALL FIX3
  396.         CALL ARROFF
  397.         CALL CLW
  398.         JP ARRON
  399.        endif
  400.  
  401. SCRP    LD A,0
  402.         CALL SCRIPT ;выполняем скрипт
  403.  
  404.         CALL PAGE_PG_VIEW
  405.  
  406. ;Выход из диалога
  407. TLKEND
  408.         LD HL,ONESYM+1
  409.         LD (TXT+1),HL
  410.         XOR A
  411.         LD E,A
  412.        if EGA
  413.        ld a,3 ;3,2 - печатаем, 1 - не печатаем (кроме как под героем)
  414.        endif
  415.         LD (MAPFLAG+1),A
  416.         LD A,SCRHG
  417.         LD BC,XF2
  418.         CALL FIX2
  419.         XOR A
  420.         LD BC,#1506
  421.         LD L,#21
  422.         CALL FIX3
  423.  
  424.         CALL FONE
  425. KARMBK  LD A,0      ;восстан. то, что было в кармане
  426.         LD (KARM),A
  427.         XOR A
  428.         LD (PDMOD),A
  429.  
  430.         LD A,(SAMPLE+2)
  431.         AND A
  432.         JR NZ,TEND
  433.         LD HL,SND_END
  434.         LD (SAMPLE+1),HL
  435. TEND    JP VS2
  436.  
  437. ;Промотка/пропуск диалога
  438. SKIP
  439.         LD A,(DIALOG+1) ;открыто ли окно диалога?
  440.         AND A
  441.         JP Z,KOF
  442.  
  443.         LD A,PG_MUZ
  444.         CALL PAGE
  445.         HALT
  446.         LD DE,(TXT+1)   ;текущ. напеч. байт
  447.  
  448.         LD HL,ONESYM+1  ;останавливаем печать
  449.         LD (TXT+1),HL
  450.  
  451.         LD HL,KOF       ;сюда пойдет переход
  452.         PUSH HL         ;по RET
  453.  
  454. LPSKIP1 LD A,(DE)
  455.         INC DE
  456.         CP TOKEN
  457.         JR NC,LPSKIP1
  458.         AND A
  459.         JR Z,TLKEND-3   ;завершение диалога
  460.         CP 3
  461.         JR Z,LPSKIP3
  462.         CP 4
  463.         JR Z,LPSKIP2
  464.         CP 5
  465.         JR NZ,LPSKIP1
  466.         LD A,(DE)
  467.         CALL SCRIPT ;выполняем скрипт, который выдаст
  468.                     ;след. адрес диалога
  469.         EX DE,HL
  470.         JR LPSKIP1
  471.  
  472. ;выполнение скрипта
  473. LPSKIP2 LD A,(DE)
  474.         JR SCRP+2
  475.  
  476. ;переход на другой диалог с персонажем и
  477. ;завершение текущего диалога
  478. LPSKIP3 LD A,(DE)
  479.         LD HL,(TNN_+1)
  480.         LD (HL),A
  481.         JR TLKEND-3
  482.  
  483. ;Отдаем персонажу вещь
  484. GIVE
  485.         LD A,(PERSON)
  486.         LD B,A
  487.         LD A,(KARM)
  488.         SUB 7
  489.         LD C,A
  490.         PUSH BC
  491.         CALL FOR
  492.         POP DE
  493.         DJNZ GV1
  494.         JR GV3  ;реплика
  495. ;диалог
  496. GV1     AND A
  497.         JR Z,GV2
  498.         EX AF,AF' ;'
  499.         CALL PDIAL2
  500.         LD A,(HL)   ;запом. диалог
  501.         LD (PREV),A
  502.         LD (PREV+1),HL
  503.         EX AF,AF' ;'
  504.         LD (HL),A
  505.         JR GV3-1
  506. ;Вещь не нужна
  507. GV2     LD A,#23
  508.         LD (PDMOD),A
  509.         XOR A
  510. GV3     JP TALK
  511.  
  512. ;Применение вещей на объекты
  513. MANIP
  514.         LD A,(ITEM)
  515.         LD B,A
  516.         LD A,(KARM)
  517.         SUB 7
  518.         LD C,A
  519.         LD HL,FORTAB2
  520.         LD A,LENTAB2
  521.         CALL FO1
  522.         AND A
  523.         JR NZ,MN1
  524.         CALL VS2
  525.         JP NOTUSE
  526. MN1     LD B,A
  527.  
  528.         LD HL,SND_OBJ
  529.         LD (SAMPLE+1),HL
  530.  
  531.         LD A,B
  532.         JP TLSN
  533.  
  534. ;Вывод горизонтальных линий окна
  535. ;работа со стеком но без запрета прерываний
  536. PRW
  537.        if EGA
  538.         ;ld a,PGHUD
  539.         ;call setpg
  540.         ld de,hudmsg
  541.         ld bc,64*256+96
  542.         ld hl,scrbase+(40*128)
  543. ;b=hgt,c=wid (/2)
  544. ;de=gfx
  545. ;hl=scr
  546.         jp primgega_pghud
  547.        else
  548.         LD (BACK+1),SP
  549.         LD HL,WIN_SPR
  550.         LD C,(HL)
  551.         INC HL
  552.         LD B,(HL)
  553.         DEC HL
  554.         LD SP,HL
  555.  
  556.         LD HL,#5000+#8000
  557.         LD DE,#50E0+#8000
  558.  
  559.         LD A,2
  560.         EX AF,AF' ;'
  561.         LD A,4
  562. PRWIN   ;
  563.         DUP 11
  564.         POP BC
  565.         LD (HL),C
  566.         INC L
  567.         LD (HL),B
  568.         INC L
  569.         EDUP
  570.  
  571.         POP BC
  572.         LD (HL),C
  573.         INC L
  574.         LD (HL),B
  575.         INC H
  576.  
  577.         DUP 11
  578.         POP BC
  579.         LD (HL),C
  580.         DEC L
  581.         LD (HL),B
  582.         DEC L
  583.         EDUP
  584.  
  585.         POP BC
  586.         LD (HL),C
  587.         DEC L
  588.         LD (HL),B
  589.         INC H
  590.  
  591.         DEC A
  592.         JR NZ,PRWIN
  593.         EX DE,HL
  594.         EX AF,AF' ;'
  595.         DEC A
  596.         JP NZ,PRWIN-3
  597. BACK    LD SP,0
  598.  
  599. ;Вывод вертикальных линий окна
  600. PRW2    LD HL,WIN_SPR+(24*16)
  601.         LD DE,#5020+#8000
  602.         LD BC,#5037+#8000
  603.  
  604.         LD A,6
  605. PW2     EX AF,AF' ;'
  606.         DUP 8
  607.         LD A,(HL)
  608.         LD (DE),A
  609.         INC HL
  610.         INC D
  611.         LD A,(HL)
  612.         INC HL
  613.         LD (BC),A
  614.         INC B
  615.         EDUP
  616.  
  617.         LD D,#50+#80
  618.         LD B,D
  619.  
  620.         LD A,E
  621.         ADD A,32
  622.         LD E,A
  623.  
  624.         LD A,C
  625.         ADD A,32
  626.         LD C,A
  627.  
  628.         EX AF,AF' ;'
  629.         DEC A
  630.         JR NZ,PW2
  631.        endif
  632.  
  633. ;стираем само окно
  634. CLW
  635.         LD HL,#D021
  636. CLP     LD DE,#1506 ;ширина,высота
  637.        if EGA
  638.         ld bc,scrbase+(40*136)+1-#d021
  639.         add hl,bc
  640.         ;ld bc,64*256+96
  641.         ld a,d
  642.         inc a
  643.         add a,a
  644.         add a,a
  645.         ld c,a ;wid/2
  646.         ld a,e
  647.         add a,a
  648.         add a,a
  649.         add a,a
  650.         ld b,a ;hgt
  651.         ld e,0xc9 ;color 9
  652. ;b=hgt,c=wid (/2)
  653. ;de=gfx
  654. ;hl=scr
  655.         push bc
  656.         push de
  657.         push hl
  658.        ld a,55
  659.        ld (im_arroff),a
  660.        call ARROFF
  661.         call setpgsscr40008000;_current ;visible
  662.         pop hl
  663.         pop de
  664.         pop bc
  665.         push bc
  666.         push de
  667.         push hl
  668.         call climgega_onescreen
  669.        call ARRON
  670.        ld a,55+128 ;"or a"
  671.        ld (im_arroff),a
  672.         call setpgsscr40008000_current ;shadow
  673.         pop hl
  674.         pop de
  675.         pop bc
  676.         ld a,55 ;"scf"
  677.         ld (wasdrawimg),a
  678.         jp climgega_onescreen
  679.        else
  680.         XOR A
  681.         LD C,4
  682. CLP_    LD B,D
  683.         LD (HL),A
  684.         INC L
  685.         DJNZ $-2
  686.         LD (HL),A
  687.         INC H
  688.         LD B,D
  689.         LD (HL),A
  690.         DEC L
  691.         DJNZ $-2
  692.         LD (HL),A
  693.         INC H
  694.         DEC C
  695.         JR NZ,CLP_
  696.         CALL LINE_HL+1
  697.         DEC E
  698.         JR NZ,CLP+3
  699.  
  700. CLP3    NOP ;RET
  701.  
  702. ;цвет
  703.         LD HL,#DA00
  704.         LD E,8
  705.         LD A,#60
  706.         CALL FNLP
  707.  
  708.         LD A,#68
  709.         LD H,A
  710.         LD L,A
  711.         LD (#DA00),HL
  712.         LD (#DA16),HL
  713.         LD (#DAEB),HL
  714.         LD (#DAF7),A
  715.         LD (#DAE0),A
  716.  
  717. DLG     NOP ;/RET ;есть ли диалог?
  718.  
  719.         LD A,29
  720.         LD B,3
  721.         CALL FIX
  722.  
  723.         LD A,#78
  724.         LD HL,#5A21+#8000
  725.         LD E,6
  726.         CALL FNLP
  727.  
  728.         LD A,8
  729.         LD B,24
  730. ;Измен. проц. вывода атрибутов
  731. FIX
  732.         LD (FNLPp1),A
  733.         LD A,B
  734.         LD (FNLPp3),A
  735.         RET
  736.        endif
  737.  
  738. ;Изменяем высоту выводимого экрана
  739. ;убираем курсор
  740. ;измен. проц-ры вывода курсора и др.
  741. FIX2
  742.         LD (HMOVEp1),A ;высота видимой части карты/8
  743.         LD (FNLPm1),A
  744.         LD A,B
  745.         LD (HMAP+1),A
  746.         LD A,C
  747.         LD (ARO+1),A
  748.         LD (ARO2+1),A
  749.         LD A,E
  750.         LD (DIALOG+1),A
  751.         LD (VUS+1),A
  752.         RET
  753.  
  754. ;Измен, пр-ру стирания окна
  755. FIX3
  756.        if !EGA
  757.         LD (CLP3),A ;0(TLKEND)/201(TN1)
  758.        endif
  759.         LD A,L ;#21(TLKEND)/#25(TN1) scraddr начала, где стирать
  760.         LD (CLW+1),A
  761.         LD (CLP+1),BC
  762.         RET
  763.  
  764. ;Колдовство Зловета (не туда идет герой)
  765. MAG1
  766.         CALL RND2
  767.         AND 15
  768.         LD B,A
  769.         LD A,L
  770.         XOR B
  771.         LD L,A
  772.         LD A,H
  773.         XOR B
  774.         LD H,A
  775.         RET
  776.  
  777. ;Колдовство Зловета (герой не движется)
  778. MAG2    LD D,L
  779.         LD E,H
  780.         LD HL,(DispMapX)
  781.         ADD HL,DE
  782.         LD (OLDC+1),HL
  783.         LD H,E
  784.         LD L,D
  785.         RET
  786.  
  787. ;Отложенное выполнение задания
  788. ;Когда герой еще далеко от предмета/персонажа
  789. ;Как только герой подойдет, задание будет выполняться
  790. ;говорить/брать/применять
  791. FTASK
  792.         RET ;/nop
  793.         CALL F7
  794. FTSK    LD HL,0
  795.         LD A,201
  796.         LD (CLC48_),A
  797.         CALL CALC1
  798.         XOR A
  799.         LD (CLC48_),A
  800.         PUSH DE
  801.         CALL MANAGE
  802.         POP DE
  803.         LD A,B
  804.         CP 2
  805.         RET C
  806.         CP 5
  807.         RET Z
  808.         PUSH BC
  809.         CP 4
  810.         CALL C,CLC48_
  811.         POP BC
  812.         LD HL,#FFFF
  813.         LD (OLDC+1),HL
  814.         JP VUSE2
  815.  
  816. ;Вывод спрайта течения дня-ночи
  817. DAYS
  818.         RET
  819.         LD (D_SP+1),SP
  820.         LD SP,REZULT
  821.  
  822. DADR=#D039
  823.         DUP 8
  824.         POP HL
  825.         LD (DADR),HL
  826.         POP HL
  827.         LD (DADR+2),HL
  828.         POP HL
  829.         LD (DADR+4),HL
  830. DADR=DADR+256
  831.         EDUP
  832.  
  833. DADR=#D059
  834.         DUP 8
  835.         POP HL
  836.         LD (DADR),HL
  837.         POP HL
  838.         LD (DADR+2),HL
  839.         POP HL
  840.         LD (DADR+4),HL
  841. DADR=DADR+256
  842.         EDUP
  843.  
  844. DADR=#D079
  845.         DUP 8
  846.         POP HL
  847.         LD (DADR),HL
  848.         POP HL
  849.         LD (DADR+2),HL
  850.         POP HL
  851.         LD (DADR+4),HL
  852. DADR=DADR+256
  853.         EDUP
  854.  
  855. DADR=#D099
  856.         DUP 8
  857.         POP HL
  858.         LD (DADR),HL
  859.         POP HL
  860.         LD (DADR+2),HL
  861.         POP HL
  862.         LD (DADR+4),HL
  863. DADR=DADR+256
  864.         EDUP
  865. D_SP    LD SP,0
  866.         LD A,201
  867. setDAYS_a
  868.         LD (DAYS),A
  869.         RET
  870.  
  871. ;OUT:
  872. ;BC-адрес текущ. диалога с персонажем
  873. ;DE-адрес текущ. номера диалога с персонажем
  874. ; A-номер собеседника
  875. PDIAL
  876.         CALL PDIAL2
  877.         PUSH AF,HL,HL
  878.         INC HL
  879.         INC HL
  880.         LD A,(HL)
  881.         INC HL
  882.         LD H,(HL)
  883.         LD L,A
  884.         LD A,PG_MUZ
  885.         CALL PAGE
  886.         LD DE,TEXT
  887.         PUSH DE
  888.         CALL DEHRUST ;распак. текст
  889.         POP DE,HL
  890. PDMOD   NOP          ;0-текущ. диалог
  891.                      ;INC HL - реакция на ненужную вещь
  892.         LD A,(HL)    ;номер текущ. диалога
  893.         EX DE,HL
  894.         CALL SVOYST+3
  895.         POP DE,AF
  896.         RET
  897.  
  898. ;OUT: A-персонаж
  899. ;     HL-адрес номера текущего диалога
  900. PDIAL2  LD A,(PERSON) ;с кем разговариваем
  901.         DEC A   ;
  902.         SUB 2   ;Этюд!
  903.         ADC A,1 ;
  904.         LD B,A
  905.         ADD A,A
  906.         ADD A,A
  907.         LD L,A
  908.         LD H,0
  909.         LD DE,GLB
  910.         ADD HL,DE
  911.         LD A,B
  912.         RET
  913.  
  914. ;Мигание стрелочек мешка
  915. FL_MESH
  916.        if EGA
  917.        ret ;TODO
  918.        endif
  919.         LD A,(#DAD9) ;если выделена кнопка главного меню
  920.         CP 56+64
  921.         RET Z
  922.  
  923.         LD HL,(mouse_crd);L-Y,H-X
  924.         LD A,L
  925.         CP 30
  926.         JR NC,FM2
  927.         CALL DIV8
  928.         LD A,L
  929.         CP 3
  930.         JR NZ,FM2
  931.         LD A,H
  932.         SUB 27
  933.  
  934.         JR C,FM2
  935.         CP 2
  936.         JR NC,FM2
  937.  
  938. ;счетчик
  939.         LD HL,FMCNT
  940.         DEC (HL)
  941.         RET NZ
  942.         LD (HL),FRM
  943.  
  944. FM0     LD HL,#C37B
  945.         LD DE,#C17C
  946.  
  947.         LD A,(HL)
  948.         CP %11110110
  949.         JR Z,FM1
  950.  
  951.         LD (HL),%11110110
  952.         INC H
  953.         LD (HL),%11100011
  954.         INC H
  955.         LD (HL),%11000001
  956.         EX DE,HL
  957.         LD (HL),%11100000
  958.         INC H
  959.         LD (HL),%11110001
  960.         INC H
  961.         LD (HL),%01111011
  962.         RET
  963.  
  964. FM1     LD (HL),%11111110
  965.         INC H
  966.         LD (HL),%11111111
  967.         INC H
  968.         LD (HL),%11111111
  969.         EX DE,HL
  970.         LD (HL),%11111111
  971.         INC H
  972.         LD (HL),%11111111
  973.         INC H
  974.         LD (HL),%01111111
  975.         RET
  976.  
  977. FM2     LD A,(#C37B)
  978.         CP %11110110
  979.         RET Z
  980.         JR FM0
  981.  
  982. FMCNT   DB FRM   ;счетчик для мигания стрелочек
  983.  
  984. ;Скролл карты от клавиш
  985. MOVMAP
  986.         CALL SCRLMAP
  987.         RET NC
  988.  
  989. ;      LD A,PG_VIEW
  990.         CALL PAGE_PG_VIEW
  991.  
  992.         POP DE ;выход из CALL MOVMAP
  993.                ;т.к. будет переход в другое место
  994. MVM0    LD HL,(NEW_CRD)
  995.         LD DE,(OLD_CRD+1)
  996.         LD A,H
  997.         SUB D
  998.         LD H,A
  999.         JR Z,MVM1
  1000.         LD A,1
  1001.         LD H,-16
  1002.         JR NC,MVM1
  1003.         LD A,-1
  1004.         LD H,16
  1005. MVM1    LD C,A
  1006.         LD A,L
  1007.         SUB E
  1008.         LD L,A
  1009.         JR Z,MVM2
  1010.         LD A,1
  1011.         LD L,-16
  1012.         JR NC,MVM2
  1013.         LD A,-1
  1014.         LD L,16
  1015. MVM2    LD B,A
  1016.         OR C
  1017.         JP Z,CURSR  ;карту не скроллим,
  1018.                     ;но курсор показываем
  1019.         LD D,L
  1020.         LD E,H
  1021. WWW
  1022.         JP SCROLL
  1023.  
  1024. ;Процедуры обслуживания скриптов и пр.
  1025.  
  1026. ;Положить отложенное задание в очередь (таск)
  1027. ;IN: BC-кол-во фреймов через кот. выполнится скрипт (таск)
  1028. ;    DE-адрес задания (скрипта)
  1029.  
  1030.         LD BC,1500
  1031. INSERT
  1032.         PUSH AF
  1033.         LD A,MAXTASK
  1034.         LD HL,TASKS
  1035. INSTLP  EXA
  1036.         LD A,(HL)
  1037.         INC HL
  1038.         OR (HL)
  1039.         JR Z,INSRT
  1040.         INC HL
  1041.         INC HL
  1042.         INC HL
  1043.         EXA
  1044.         DEC A
  1045.         JR NZ,INSTLP
  1046.         POP AF
  1047.         RET
  1048.  
  1049. INSRT   DI
  1050.         DEC  HL
  1051.         LD (HL),C
  1052.         INC HL
  1053.         LD (HL),B
  1054.         INC HL
  1055.         LD (HL),E
  1056.         INC HL
  1057.         LD (HL),D
  1058.         POP AF
  1059.         EI
  1060.         RET
  1061.  
  1062. ;Выполнение отложенных задач
  1063. ;выполняется только внутри прерывания
  1064. ;поэтому нужно все делать быстро!
  1065. GOTASK
  1066.         LD B,MAXTASK
  1067.         LD HL,TASKS
  1068. TSKLOOP LD A,(HL)
  1069.         LD E,A
  1070.         INC HL
  1071.         OR (HL)
  1072.         JR Z,NXTASK
  1073.         LD D,(HL)
  1074.         DEC DE
  1075.         LD (HL),D
  1076.         DEC HL
  1077.         LD (HL),E
  1078.         INC HL
  1079.         LD A,D
  1080.         OR E
  1081.         CALL Z,GT0  ;время пришло
  1082.                     ;выполнить таск!
  1083. NXTASK  INC HL
  1084.         INC HL
  1085.         INC HL
  1086.         DJNZ TSKLOOP
  1087.         RET
  1088.  
  1089. ;само выполнение
  1090. GT0
  1091.         PUSH BC
  1092.         PUSH HL
  1093.  
  1094.         INC HL
  1095.         LD C,(HL)
  1096.         INC HL
  1097.         LD H,(HL)
  1098.         LD L,C
  1099.         LD (GT1+1),HL
  1100.  
  1101.         LD HL,SND_TSK    ;после выполнения
  1102.                          ;таска будет звук
  1103.         LD (SAMPLE+1),HL
  1104.  
  1105.         LD A,PG_MAP
  1106.         CALL PAGE
  1107. GT1     CALL 0      ;выполняем таск
  1108.         POP HL
  1109.         POP BC
  1110.         RET
  1111.  
  1112. ;Выполнение скриптов
  1113. ;IN: A-номер скрипта
  1114. SCRIPT
  1115.         ADD A,A
  1116.         LD E,A
  1117.         LD D,0
  1118.         LD A,PG_MAP
  1119.         CALL PAGE
  1120.         LD HL,SCRPTB
  1121.         ADD HL,DE
  1122.         LD E,(HL)
  1123.         INC HL
  1124.         LD D,(HL)
  1125.         EX DE,HL
  1126.         LD (JPSC+1),HL
  1127. JPSC    CALL 0
  1128.         EX AF,AF' ;'
  1129. ;      LD A,PG_VIEW
  1130.         JP PAGE_PG_VIEW
  1131.  
  1132. ;Нужна ли отдаваемая вещь персонажу
  1133. ; IN:B-персонаж, C-вещь
  1134. ;OUT:A<>0-номер диалога с персонажем, если ему вещь нужна
  1135. ;    A=0, если вещь не нужна
  1136. ;    Выполняется скрипт, если нужно
  1137.  
  1138. ;    B=0-идет диалог
  1139. ;    B=1-реплика, A-номер реплики
  1140. FOR
  1141.         LD HL,FORTAB
  1142.         LD A,LENTAB
  1143. FO1     LD D,(HL)
  1144.         INC HL
  1145.         LD E,(HL)
  1146.         INC HL
  1147.         AND A
  1148.         EX DE,HL
  1149.         SBC HL,BC
  1150.         EX DE,HL
  1151.         JR Z,FO2
  1152.         INC HL
  1153.         INC HL
  1154.         DEC A
  1155.         JR NZ,FO1
  1156.         LD B,A ;B=0
  1157.         RET
  1158. FO2     LD A,(HL)   ;диалог
  1159.         INC HL
  1160.         LD B,(HL)   ;скрипт
  1161.         INC A
  1162.         JR Z,FO4    ;доп. команда
  1163.         DEC A
  1164.         DJNZ FO3
  1165.         RET
  1166. FO3     PUSH AF
  1167.         LD A,B
  1168.         CALL SCRIPT
  1169.         POP AF
  1170.         LD B,0
  1171.         RET
  1172. FO4     LD A,B   ;номер реплики
  1173.         LD B,1
  1174.         RET
  1175.  
  1176. ;---
  1177. V39     DB "Провидец",13,"Глеб",0
  1178. V40     DB "Коварный",13,"Зловет",0
  1179. V41     DB "Зловет",13,"без посоха",0
  1180. V42     DB "Старейшина",13
  1181.         DB "Хевор",0
  1182. V43     DB "Библиотекарь",13
  1183.         DB "Буквин",0
  1184. V44     DB "Волк Жора",0
  1185. V45     DB "Бармен Петро",0
  1186. V46     DB "Аленушка",0
  1187. V47     DB "Ф",241,"кла",13
  1188.         DB "Девурдалак",0
  1189. V48     DB "Кузнец",13
  1190.         DB "Задолбайло",0
  1191.  
  1192. V49     DB "Мельница",0
  1193. V50     DB "Кострище",0
  1194. V51     DB "Скелет",0
  1195. V52     DB "Летучая мышь",0
  1196. V53     DB "Фонтан",0
  1197. V54     DB "Хмель",0
  1198. V55     DB "Пшеница",0
  1199. V56     DB "Улей",0
  1200. V57     DB "Колодец",13,"с водой",0
  1201. V58     DB "Храм",0
  1202. V59     DB "Козленок",0
  1203. V60     DB "Колодец с",13,"живой водой",0
  1204. V64     DB "Ничего",13
  1205.         DB "не вышло",0
  1206. V65     DB "Костер",0
  1207.  
  1208. ;Формат анимации на карте
  1209. ;1-й байт - номер группы*2 и вкл. 0-й бит
  1210. ;2-й байт - номер спрайта*2 из группы
  1211.  
  1212. ;Адреса групп
  1213. AdrGrps DW LEO1 ;0
  1214.         DW MELN ;1
  1215.         DW FIRS ;2
  1216.         DW SKEL1;3
  1217.         DW SKEL2;4
  1218.         DW SKEL3;5
  1219.         DW SKEL4;6
  1220.         DW MOUS ;7
  1221.         DW PBOY ;8
  1222.         DW RUMB ;9
  1223.         DW PIAN1;10
  1224.         DW PIAN2;11
  1225.         DW KOST1;12
  1226.         DW LEO2 ;13
  1227.         DW INVT ;14
  1228.         DW INVT2;15
  1229.         DW INVT3;16
  1230.  
  1231. ;Количество анимационных групп во всей игре
  1232. ;(например, мельница, костер и т.п.)
  1233. QGRPS   EQU ($-AdrGrps)/2
  1234.  
  1235. ;Таблица анимационных групп, в которой выставляются флаги
  1236. ;видимости группы на экране.
  1237. ;Обнуляется после каждой печати видимой части экрана
  1238. ;Состоит из единичек или ноликов.
  1239. ;1-если группа уже появилась на экране,
  1240. ;0-если группы еще небыло. На одну группу - один байт.
  1241.  
  1242. AnimGrps DS QGRPS
  1243.  
  1244. ;Заголовки анимированных групп
  1245. ;5 байт+кол-во спрайтов в группе*2
  1246. ;Все остальное "тело" группы
  1247. ;Можно делать разные заголовки,
  1248. ;со ссылкой на одно и тоже "тело"
  1249. ;Например, это нужно для того чтобы рассинхронизировать
  1250. ;одинаковые анимации (у меня это скелеты)
  1251.  
  1252. ;Мельница
  1253. MELN    DB 2   ;Скорость вывода (для восстановления)
  1254.         DB 2   ;Скорость вывода (счетчик)
  1255.         DB 1   ;Тип анимации:
  1256.                ;1-Зацикленная (0.1.2.X.0.1.2...)
  1257.                ;2-Угасающая (0-X-X-X...),Кол-во фаз в группе
  1258.                ;должно быть >на 1, где послед. спрайт тот,
  1259.                ;который будет поставлен на карту (см. LEO2)
  1260.                ;>=3-Реверсивная, где данное число-2 означает
  1261.                ;новую стартовую фазу (см. LEO)
  1262.         DB 3   ;Кол-во фаз в группе-1 (1-X)
  1263.                ;Если =0, то анимация заморожена
  1264.         DB 0   ;Смещение от стартовой фазы для всей группы
  1265.  
  1266.         DW MEL1;Ссылки на фазы каждого спрайта группы
  1267.         DW MEL2
  1268.         DW MEL3
  1269.         DW MEL4
  1270.         DW MEL5
  1271.         DW MEL6
  1272.         DW MEL7
  1273.         DW MEL8
  1274.         DW MEL9
  1275.  
  1276. MEL1    DW (80*32)+SPR,(87*32)+SPR,(96*32)+SPR,(105*32)+SPR
  1277. MEL2    DW (81*32)+SPR,(88*32)+SPR,(97*32)+SPR,(106*32)+SPR
  1278. MEL3    DW SPR,(89*32)+SPR,(98*32)+SPR,(107*32)+SPR
  1279. MEL4    DW (82*32)+SPR,(90*32)+SPR,(99*32)+SPR,(108*32)+SPR
  1280. MEL5    DW (83*32)+SPR,(91*32)+SPR,(100*32)+SPR,(109*32)+SPR
  1281. MEL6    DW (84*32)+SPR,(92*32)+SPR,(101*32)+SPR,(110*32)+SPR
  1282. MEL7    DW (85*32)+SPR,(93*32)+SPR,(102*32)+SPR,(111*32)+SPR
  1283. MEL8    DW (86*32)+SPR,(94*32)+SPR,(103*32)+SPR,(112*32)+SPR
  1284. MEL9    DW SPR,(95*32)+SPR,(104*32)+SPR,SPR
  1285.  
  1286. ;Костер
  1287. FR1     DW (64*32)+SPR,(68*32)+SPR,(72*32)+SPR,(76*32)+SPR,SPR
  1288. FR2     DW (65*32)+SPR,(69*32)+SPR,(73*32)+SPR,(77*32)+SPR,SPR
  1289. FR3     DW (66*32)+SPR,(70*32)+SPR,(74*32)+SPR,(78*32)+SPR
  1290.         DW (314*32)+SPR
  1291. FR4     DW (67*32)+SPR,(71*32)+SPR,(75*32)+SPR,(79*32)+SPR
  1292.         DW (315*32)+SPR
  1293.  
  1294. ;Скелет
  1295. SKEL1   DB 5,5
  1296.         DB 1,15,0
  1297.         DW SK1
  1298.         DW SK2
  1299. SK1     DW (123*32)+SPR,(123*32)+SPR,(123*32)+SPR,(123*32)+SPR
  1300.         DW (123*32)+SPR,(125*32)+SPR,(127*32)+SPR,(129*32)+SPR
  1301.         DW (131*32)+SPR,(129*32)+SPR,(131*32)+SPR,(129*32)+SPR
  1302.         DW (131*32)+SPR,(129*32)+SPR,(127*32)+SPR,(125*32)+SPR
  1303. SK2     DW (124*32)+SPR,(124*32)+SPR,(124*32)+SPR,(124*32)+SPR
  1304.         DW (124*32)+SPR,(126*32)+SPR,(128*32)+SPR,(130*32)+SPR
  1305.         DW (132*32)+SPR,(130*32)+SPR,(132*32)+SPR,(130*32)+SPR
  1306.         DW (132*32)+SPR,(130*32)+SPR,(128*32)+SPR,(126*32)+SPR
  1307.  
  1308. SKEL2   DB 6,6
  1309.         DB 1,15,3
  1310.         DW SK1
  1311.         DW SK2
  1312.  
  1313. SKEL3   DB 7,7
  1314.         DB 1,15,8
  1315.         DW SK1
  1316.         DW SK2
  1317.  
  1318. SKEL4   DB 9,9
  1319.         DB 1,15,5
  1320.         DW SK1
  1321.         DW SK2
  1322.  
  1323. ;Летучие мыши
  1324. MOUS    DB 4,4
  1325.         DB 1,3,0
  1326.         DW MS1
  1327. MS1     DW (148*32)+SPR,(149*32)+SPR,(150*32)+SPR,(149*32)+SPR
  1328.  
  1329. ;Пьяницы
  1330. PIAN1   DB 10,10
  1331.         DB 1,6,0
  1332.         DW PI1,PI2
  1333. PI1     DW (113*32)+SPR,(113*32)+SPR,(115*32)+SPR,(117*32)+SPR
  1334.         DW (117*32)+SPR
  1335.         DW (115*32)+SPR,(113*32)+SPR
  1336. PI2     DW (114*32)+SPR,(114*32)+SPR,(116*32)+SPR,(118*32)+SPR
  1337.         DW (118*32)+SPR
  1338.         DW (116*32)+SPR,(114*32)+SPR
  1339.  
  1340. ;тело анимации одно на 2-х пьяниц
  1341. PIAN2   DB 13,13
  1342.         DB 1,6,4
  1343.         DW PI1,PI2
  1344.  
  1345. ;Писающий мальчик
  1346. PB1     DW (24*32)+SPR,(30*32)+SPR,(30*32)+SPR,(30*32)+SPR
  1347. PB2     DW (25*32)+SPR,(31*32)+SPR,(36*32)+SPR,(31*32)+SPR
  1348. PB3     DW (26*32)+SPR,(32*32)+SPR,(37*32)+SPR,(32*32)+SPR
  1349. PB4     DW (27*32)+SPR,(33*32)+SPR,(38*32)+SPR,(33*32)+SPR
  1350. PB5     DW (28*32)+SPR,(34*32)+SPR,(39*32)+SPR,(34*32)+SPR
  1351. PB6     DW (29*32)+SPR,(35*32)+SPR,(40*32)+SPR,(35*32)+SPR
  1352.  
  1353. ;Замок Зловета
  1354. RU1     DW (41*32)+SPR,(57*32)+SPR,(41*32)+SPR,(50*32)+SPR
  1355. RU2     DW (42*32)+SPR,(58*32)+SPR,(42*32)+SPR,(51*32)+SPR
  1356. RU3     DW (43*32)+SPR,(59*32)+SPR,(43*32)+SPR,(52*32)+SPR
  1357. RU4     DW (44*32)+SPR,(60*32)+SPR,(44*32)+SPR,(53*32)+SPR
  1358. RU5     DW (45*32)+SPR,(61*32)+SPR,(45*32)+SPR,(54*32)+SPR
  1359. RU6     DW (46*32)+SPR,(62*32)+SPR,(46*32)+SPR,(55*32)+SPR
  1360. RU7     DW (47*32)+SPR,(47*32)+SPR,(47*32)+SPR,(47*32)+SPR
  1361. RU8     DW (48*32)+SPR,(63*32)+SPR,(48*32)+SPR,(56*32)+SPR
  1362. RU9     DW (49*32)+SPR,(49*32)+SPR,(49*32)+SPR,(49*32)+SPR
  1363.  
  1364. ;Кости скелета
  1365. KOST1   DB 4,4
  1366.         DB 2,4,0
  1367.         DW KS1,KS2
  1368. KS1     DW (135*32)+SPR,(137*32)+SPR,(139*32)+SPR,SPR,SPR,SPR
  1369. KS2     DW (136*32)+SPR,(138*32)+SPR,(140*32)+SPR,(141*32)+SPR
  1370.         DW (142*32)+SPR
  1371.         DW (142*32)+SPR
  1372.  
  1373. ONESYM2 DB 0,0,0
  1374.  
  1375. ;для вещей
  1376. RNDTB1  DB 30,59,47,2,14,1,18,8,23,17,2,4,35,27,2,35,18,57,25,41
  1377.         DB 61,51,45,47,14,29,4,46,34,52,53,33
  1378. PREV    DS 3 ;предыд. диалог до отдачи вещи
  1379.