Login

Subversion Repositories NedoOS

Rev

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

        ;MAIN "VERA",8
        ;ORG FINAL,PG_MISC

BVIDEO  EQU #4400      ;финал видео
SUNP    EQU BVIDEO+768 ;спрайт солнца
MYSL    EQU SUNP+1404  ;спрайт финальной мысли
TABLE   EQU MYSL+224   ;таб. заливки
ATTR    EQU 48+6+64    ;атрибут заливки

        DISP #4000
;de=конец FINAL = 0x41b2
        PUSH DE,DE
        LD HL,MUS
        LD (IM2N-2),HL

        LD A,4
        CALL MUSNXT+3

;Распаковка видео,спрайтов,таблиц
        LD A,PG_MISC
        CALL PAGE

        LD HL,FINPACK
        LD DE,BVIDEO
        CALL DEHRUST

        ;LD A,16+8
        ;CALL CURSCR
        call setcurscr1

       if EGA
        ld a,(user_scr1_high) ;ok
        SETPGC000
        ld hl,0xd800
        ld de,0xd801
        ld bc,767
        ld (hl),l;0
        ldir
        ld de,standardpal
        OS_SETPAL
       endif

        LD A,ATTR
        LD (fill_3+1),A
       ;if !EGA
        CALL FILL ;затирание кружочком сверху справа
       ;endif

;Распаковка ключевого кадра для храма
        LD A,PG_MISC
        CALL PAGE
        LD HL,BKEY
        LD BC,ABOUTS-BKEY
        POP DE
        LDIR
       if EGA
        ld a,(user_scr1_high) ;ok
        SETPGC000
       else
        ;LD A,PG_VIEW
        ;CALL PAGE
        call PAGE_PG_VIEW
       endif
        POP HL
        CALL LC5

        LD A,PG_MISC
        CALL PAGE
        LD HL,FINPACK
        LD DE,BVIDEO
        CALL DEHRUST ;зачем второй раз?
       
       if EGA
        ld a,(user_scr1_high) ;ok
        SETPGC000
       else
        ;LD A,PG_VIEW
        ;CALL PAGE
        call PAGE_PG_VIEW
       endif

FINLP   CALL VIDEO2
        HALT
        HALT

FNCN    LD HL,0
        INC HL
        LD (FNCN+1),HL
        LD DE,700
;       LD DE,1160
        LD BC,1160
;       LD BC,2010
        PUSH HL
        AND A
        SBC HL,DE
        POP HL
        JR Z,POINT1
        AND A
        SBC HL,BC
        JR Z,POINT2

        HALT
        HALT
        HALT

;       LD A,(MKEYSp1) ;нажатие "Огня" на мышке
;       BIT 4,A
;       JR NZ,POINT2

        JR FINLP

POINT1
        ;запомнили атрибуты
        LD HL,#D800
        LD DE,#5800
        LD BC,768
        LDIR

        CALL FILL

        CALL SUNPR

        ;восстановили атрибуты
        LD HL,#5800
        LD DE,#D800
        LD BC,768
        LDIR

        JR FINLP

POINT2
        CALL FILL

        LD HL,#C000
        LD DE,#C001
        LD (HL),L
        LD BC,6143
        LDIR

;       LD HL,#D800
;       LD DE,#D801
        LD BC,767
        LD (HL),64+48
        LDIR

        XOR A
        LD (MKEYSp1),A

        LD B,80
        HALT
        DJNZ $-1

;Вывод случайным образом спрайта
        LD BC,700 ;кол-во циклов

PNTLP   PUSH BC

;Расчет коорд. X

PNT1    CALL RNDX2
        LD D,A
        CP 14     ;X
        JR NC,PNT1

;Расчет коорд. Y

PNT11   CALL RNDX2
        LD E,A
        CP 16     ;Y
        JR NC,PNT11

;       AND A
;       LD A,D
;       JR Z,PNT33
;       LD H,E

        ADD A,A ;A=A*14
        LD B,A
        ADD A,A
        LD C,A
        ADD A,A
        ADD A,C
        ADD A,B
       
;       XOR A
;PNT22  ADD A,14  ;Y*14
;       DEC H
;       JR NZ,PNT22

        ADD A,D ;A - смещение байта
                ;от начала спрайта

;Берем байт в зависимости от смещения

PNT33   LD B,0
        LD C,A
        LD HL,MYSL
        ADD HL,BC

;       LD A,D
;       ADD A,9
;       LD D,A
;       LD A,E
;       ADD A,80
;       LD E,A

;Делаем смещение координат для вывода
        LD BC,#0950
        EX DE,HL
        ADD HL,BC
        EX DE,HL

;       CALL SCR_ADR

;by axor (the last courier)
;SCR_ADR
        LD A,E ;Вход: DE-координаты
        AND 7  ;Выход: DE-адрес в экране
        LD C,A ;За 80 тактов!
        LD A,E
        AND 192
        RRCA
        RRCA
        RRCA
        OR #C0 ;40
        OR C
        LD C,A
        LD A,E
        AND 56
        RLCA
        RLCA
        OR D
        LD E,A
        LD D,C
;       RET

        LDI

;       LD A,R
;       LD (DE),A

;       HALT

        POP BC
        DEC BC
        LD A,B
        OR C
        JR NZ,PNTLP

;выводим окончательно спрайт

        LD A,14
        LD (LDI13+1),A
        LD DE,MYSL
        LD HL,#C849
        LD C,16
        CALL SPS

;Ожидаем нажатие "огонь"
PNT2    HALT
        ;LD A,(MKEYSp1) ;почему не работает???
        ;BIT 4,A
       ld a,0x7f
       in a,(0xfe)
       cpl
       and 1 ;space
        JR Z,PNT2

        XOR A
        LD (fill_3+1),A

        CALL FILL

        JP GAMEOVER_MMENU;MMENU

;       DI
;       LD A,255
;       CALL MUSNXT+3
;       JP SKPMN

;Вывод спрайта солнца
;  ---
SUNPR
        LD DE,SUNP
        LD HL,#C013
        LD C,12*8
SPS     CALL LDI13
        CALL LINE_HL
        DEC C
        JR NZ,SPS

;Вывод атрибутов
        LD HL,#5813
        LD C,12
SPS1    CALL LDI13
        CALL HL32
        DEC C
        JR NZ,SPS1
        RET
;  ---

LDI13   LD B,13
        PUSH HL
LDILP   LD A,(DE)
        LD (HL),A
        INC L
        INC DE
        DJNZ LDILP
        POP HL
        RET

HL32    PUSH DE
        LD DE,32
        ADD HL,DE
        POP DE
        RET

;На выходе в А ПСЧ
RNDX2
;       PUSH HL
RNDX1   LD HL,0
        INC HL
        LD A,H
        AND #3F
        LD H,A
        LD (RNDX1+1),HL
        LD A,R
        XOR (HL)
;       POP HL
        RET

;Вывод кадра колоколов
VIDEO2
        LD A,0    ;Кадры
        INC A
        CP 12
        JR C,$+3
        XOR A
        LD (VIDEO2+1),A
        ADD A,A
        LD E,A
        LD D,0
        LD HL,BELTAB
        ADD HL,DE
        LD E,(HL)
        INC HL
        LD D,(HL)
        LD (VID1m2),DE ;адрес кадра
        DI
        CALL VIDEO
        EI
        RET

;fill_atributes

FILL
        LD BC,TABLE
fill_1
;       LD HL,#581F  ;#4000
        LD HL,#D81F  ;#C000
        LD A,(BC)
        INC A        ;#FF - конец заливки
        RET Z
fill_2
        LD A,(BC)
        AND A        ;0 - конец кадра
        JR Z,fill_4
        LD D,A
        LD A,L
fill_3
        LD (HL),ATTR
        DEC L
        DEC D
        JR NZ,fill_3
        ADD A,32
        LD L,A
        ADC A,H
        SUB L
        LD H,A
        INC BC
        JR fill_2
fill_4
        HALT
        INC BC
        JR fill_1

;Табличка кадров колокола (видео)
BELTAB  DW BVIDEO
        DW BVIDEO+120
        DW BVIDEO+120+144
        DW BVIDEO+120+144+96
        DW BVIDEO+120+144+96+132
        DW BVIDEO+120+144+96+132+132
        DW BVIDEO+120+144+96+132+132
        DW BVIDEO+120+144+96+132
        DW BVIDEO+120+144+96
        DW BVIDEO+120+144
        DW BVIDEO+120
        DW BVIDEO

;       INCLUDE "TABLES"

        ENT
ENDFIN

FINLEN  EQU ENDFIN-FINAL
       DISPLAY "FINLEN=",FINLEN