?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         ;MAIN "VERA",8
  2.         ;ORG FINAL,PG_MISC
  3.  
  4. BVIDEO  EQU #4400      ;финал видео
  5. SUNP    EQU BVIDEO+768 ;спрайт солнца
  6. MYSL    EQU SUNP+1404  ;спрайт финальной мысли
  7. TABLE   EQU MYSL+224   ;таб. заливки
  8. ATTR    EQU 48+6+64    ;атрибут заливки
  9.  
  10.         DISP #4000
  11. ;de=конец FINAL = 0x41b2
  12.         PUSH DE,DE
  13.         LD HL,MUS
  14.         LD (IM2N-2),HL
  15.  
  16.         LD A,4
  17.         CALL MUSNXT+3
  18.  
  19. ;Распаковка видео,спрайтов,таблиц
  20.         LD A,PG_MISC
  21.         CALL PAGE
  22.  
  23.         LD HL,FINPACK
  24.         LD DE,BVIDEO
  25.         CALL DEHRUST
  26.  
  27.         ;LD A,16+8
  28.         ;CALL CURSCR
  29.         call setcurscr1
  30.  
  31.        if EGA
  32.         ld a,(user_scr1_high) ;ok
  33.         SETPGC000
  34.         ld hl,0xd800
  35.         ld de,0xd801
  36.         ld bc,767
  37.         ld (hl),l;0
  38.         ldir
  39.         ld de,standardpal
  40.         OS_SETPAL
  41.        endif
  42.  
  43.         LD A,ATTR
  44.         LD (fill_3+1),A
  45.        ;if !EGA
  46.         CALL FILL ;затирание кружочком сверху справа
  47.        ;endif
  48.  
  49. ;Распаковка ключевого кадра для храма
  50.         LD A,PG_MISC
  51.         CALL PAGE
  52.         LD HL,BKEY
  53.         LD BC,ABOUTS-BKEY
  54.         POP DE
  55.         LDIR
  56.        if EGA
  57.         ld a,(user_scr1_high) ;ok
  58.         SETPGC000
  59.        else
  60.         ;LD A,PG_VIEW
  61.         ;CALL PAGE
  62.         call PAGE_PG_VIEW
  63.        endif
  64.         POP HL
  65.         CALL LC5
  66.  
  67.         LD A,PG_MISC
  68.         CALL PAGE
  69.         LD HL,FINPACK
  70.         LD DE,BVIDEO
  71.         CALL DEHRUST ;зачем второй раз?
  72.        
  73.        if EGA
  74.         ld a,(user_scr1_high) ;ok
  75.         SETPGC000
  76.        else
  77.         ;LD A,PG_VIEW
  78.         ;CALL PAGE
  79.         call PAGE_PG_VIEW
  80.        endif
  81.  
  82. FINLP   CALL VIDEO2
  83.         HALT
  84.         HALT
  85.  
  86. FNCN    LD HL,0
  87.         INC HL
  88.         LD (FNCN+1),HL
  89.         LD DE,700
  90. ;       LD DE,1160
  91.         LD BC,1160
  92. ;       LD BC,2010
  93.         PUSH HL
  94.         AND A
  95.         SBC HL,DE
  96.         POP HL
  97.         JR Z,POINT1
  98.         AND A
  99.         SBC HL,BC
  100.         JR Z,POINT2
  101.  
  102.         HALT
  103.         HALT
  104.         HALT
  105.  
  106. ;       LD A,(MKEYSp1) ;нажатие "Огня" на мышке
  107. ;       BIT 4,A
  108. ;       JR NZ,POINT2
  109.  
  110.         JR FINLP
  111.  
  112. POINT1
  113.         ;запомнили атрибуты
  114.         LD HL,#D800
  115.         LD DE,#5800
  116.         LD BC,768
  117.         LDIR
  118.  
  119.         CALL FILL
  120.  
  121.         CALL SUNPR
  122.  
  123.         ;восстановили атрибуты
  124.         LD HL,#5800
  125.         LD DE,#D800
  126.         LD BC,768
  127.         LDIR
  128.  
  129.         JR FINLP
  130.  
  131. POINT2
  132.         CALL FILL
  133.  
  134.         LD HL,#C000
  135.         LD DE,#C001
  136.         LD (HL),L
  137.         LD BC,6143
  138.         LDIR
  139.  
  140. ;       LD HL,#D800
  141. ;       LD DE,#D801
  142.         LD BC,767
  143.         LD (HL),64+48
  144.         LDIR
  145.  
  146.         XOR A
  147.         LD (MKEYSp1),A
  148.  
  149.         LD B,80
  150.         HALT
  151.         DJNZ $-1
  152.  
  153. ;Вывод случайным образом спрайта
  154.         LD BC,700 ;кол-во циклов
  155.  
  156. PNTLP   PUSH BC
  157.  
  158. ;Расчет коорд. X
  159.  
  160. PNT1    CALL RNDX2
  161.         LD D,A
  162.         CP 14     ;X
  163.         JR NC,PNT1
  164.  
  165. ;Расчет коорд. Y
  166.  
  167. PNT11   CALL RNDX2
  168.         LD E,A
  169.         CP 16     ;Y
  170.         JR NC,PNT11
  171.  
  172. ;       AND A
  173. ;       LD A,D
  174. ;       JR Z,PNT33
  175. ;       LD H,E
  176.  
  177.         ADD A,A ;A=A*14
  178.         LD B,A
  179.         ADD A,A
  180.         LD C,A
  181.         ADD A,A
  182.         ADD A,C
  183.         ADD A,B
  184.        
  185. ;       XOR A
  186. ;PNT22  ADD A,14  ;Y*14
  187. ;       DEC H
  188. ;       JR NZ,PNT22
  189.  
  190.         ADD A,D ;A - смещение байта
  191.                 ;от начала спрайта
  192.  
  193. ;Берем байт в зависимости от смещения
  194.  
  195. PNT33   LD B,0
  196.         LD C,A
  197.         LD HL,MYSL
  198.         ADD HL,BC
  199.  
  200. ;       LD A,D
  201. ;       ADD A,9
  202. ;       LD D,A
  203. ;       LD A,E
  204. ;       ADD A,80
  205. ;       LD E,A
  206.  
  207. ;Делаем смещение координат для вывода
  208.         LD BC,#0950
  209.         EX DE,HL
  210.         ADD HL,BC
  211.         EX DE,HL
  212.  
  213. ;       CALL SCR_ADR
  214.  
  215. ;by axor (the last courier)
  216. ;SCR_ADR
  217.         LD A,E ;Вход: DE-координаты
  218.         AND 7  ;Выход: DE-адрес в экране
  219.         LD C,A ;За 80 тактов!
  220.         LD A,E
  221.         AND 192
  222.         RRCA
  223.         RRCA
  224.         RRCA
  225.         OR #C0 ;40
  226.         OR C
  227.         LD C,A
  228.         LD A,E
  229.         AND 56
  230.         RLCA
  231.         RLCA
  232.         OR D
  233.         LD E,A
  234.         LD D,C
  235. ;       RET
  236.  
  237.         LDI
  238.  
  239. ;       LD A,R
  240. ;       LD (DE),A
  241.  
  242. ;       HALT
  243.  
  244.         POP BC
  245.         DEC BC
  246.         LD A,B
  247.         OR C
  248.         JR NZ,PNTLP
  249.  
  250. ;выводим окончательно спрайт
  251.  
  252.         LD A,14
  253.         LD (LDI13+1),A
  254.         LD DE,MYSL
  255.         LD HL,#C849
  256.         LD C,16
  257.         CALL SPS
  258.  
  259. ;Ожидаем нажатие "огонь"
  260. PNT2    HALT
  261.         ;LD A,(MKEYSp1) ;почему не работает???
  262.         ;BIT 4,A
  263.        ld a,0x7f
  264.        in a,(0xfe)
  265.        cpl
  266.        and 1 ;space
  267.         JR Z,PNT2
  268.  
  269.         XOR A
  270.         LD (fill_3+1),A
  271.  
  272.         CALL FILL
  273.  
  274.         JP GAMEOVER_MMENU;MMENU
  275.  
  276. ;       DI
  277. ;       LD A,255
  278. ;       CALL MUSNXT+3
  279. ;       JP SKPMN
  280.  
  281. ;Вывод спрайта солнца
  282. ;  ---
  283. SUNPR
  284.         LD DE,SUNP
  285.         LD HL,#C013
  286.         LD C,12*8
  287. SPS     CALL LDI13
  288.         CALL LINE_HL
  289.         DEC C
  290.         JR NZ,SPS
  291.  
  292. ;Вывод атрибутов
  293.         LD HL,#5813
  294.         LD C,12
  295. SPS1    CALL LDI13
  296.         CALL HL32
  297.         DEC C
  298.         JR NZ,SPS1
  299.         RET
  300. ;  ---
  301.  
  302. LDI13   LD B,13
  303.         PUSH HL
  304. LDILP   LD A,(DE)
  305.         LD (HL),A
  306.         INC L
  307.         INC DE
  308.         DJNZ LDILP
  309.         POP HL
  310.         RET
  311.  
  312. HL32    PUSH DE
  313.         LD DE,32
  314.         ADD HL,DE
  315.         POP DE
  316.         RET
  317.  
  318. ;На выходе в А ПСЧ
  319. RNDX2
  320. ;       PUSH HL
  321. RNDX1   LD HL,0
  322.         INC HL
  323.         LD A,H
  324.         AND #3F
  325.         LD H,A
  326.         LD (RNDX1+1),HL
  327.         LD A,R
  328.         XOR (HL)
  329. ;       POP HL
  330.         RET
  331.  
  332. ;Вывод кадра колоколов
  333. VIDEO2
  334.         LD A,0    ;Кадры
  335.         INC A
  336.         CP 12
  337.         JR C,$+3
  338.         XOR A
  339.         LD (VIDEO2+1),A
  340.         ADD A,A
  341.         LD E,A
  342.         LD D,0
  343.         LD HL,BELTAB
  344.         ADD HL,DE
  345.         LD E,(HL)
  346.         INC HL
  347.         LD D,(HL)
  348.         LD (VID1m2),DE ;адрес кадра
  349.         DI
  350.         CALL VIDEO
  351.         EI
  352.         RET
  353.  
  354. ;fill_atributes
  355.  
  356. FILL
  357.         LD BC,TABLE
  358. fill_1
  359. ;       LD HL,#581F  ;#4000
  360.         LD HL,#D81F  ;#C000
  361.         LD A,(BC)
  362.         INC A        ;#FF - конец заливки
  363.         RET Z
  364. fill_2
  365.         LD A,(BC)
  366.         AND A        ;0 - конец кадра
  367.         JR Z,fill_4
  368.         LD D,A
  369.         LD A,L
  370. fill_3
  371.         LD (HL),ATTR
  372.         DEC L
  373.         DEC D
  374.         JR NZ,fill_3
  375.         ADD A,32
  376.         LD L,A
  377.         ADC A,H
  378.         SUB L
  379.         LD H,A
  380.         INC BC
  381.         JR fill_2
  382. fill_4
  383.         HALT
  384.         INC BC
  385.         JR fill_1
  386.  
  387. ;Табличка кадров колокола (видео)
  388. BELTAB  DW BVIDEO
  389.         DW BVIDEO+120
  390.         DW BVIDEO+120+144
  391.         DW BVIDEO+120+144+96
  392.         DW BVIDEO+120+144+96+132
  393.         DW BVIDEO+120+144+96+132+132
  394.         DW BVIDEO+120+144+96+132+132
  395.         DW BVIDEO+120+144+96+132
  396.         DW BVIDEO+120+144+96
  397.         DW BVIDEO+120+144
  398.         DW BVIDEO+120
  399.         DW BVIDEO
  400.  
  401. ;       INCLUDE "TABLES"
  402.  
  403.         ENT
  404. ENDFIN
  405.  
  406. FINLEN  EQU ENDFIN-FINAL
  407.        DISPLAY "FINLEN=",FINLEN
  408.