;---Развевающийся Флаг
bFLAG ;DI
LD A,1
OUT (#FE),A
CALL MEM7
LD DE,SCR
LD HL,CROW+2
CALL DELPZ
CALL SW7 ;изначально видим ворону
LD A,3
CALL MEM
LD HL,PIKE+2
LD DE,DSCR
CALL DELPZ
CALL MEM0
CALL MUS
CALL COLOR
LD BC,824
;Развевающийся Флаг
fSS1 CALL PRESS
PUSH BC
;EI
;HALT
;DI
YIELD
CALL MUS+6
POP BC
DEC BC
LD A,C
OR B
JR NZ,fSS1
;
CALL SW5 ;теперь видим флаг
fSS2 CALL PRESS
CALL fLDIR
XOR A
OUT (#FE),A
CALL MEM0
CALL MUS+6
JR fSS2
fFRAME DEFB 0 ; (#кадра - 1..9)
fFDELY DEFB 0 ;задержка
fLDIR LD HL,fFDELY
INC (HL)
LD A,(HL)
CP 3
LD A,(fFRAME)
JR C,fMM1
LD (HL),0
DEC HL
INC (HL)
LD A,(HL)
CP 9
JR C,fMM1
XOR A
LD (HL),A
fMM1 CP 5
JR C,fMM2
SUB 5
PUSH AF
LD A,4
JR fMM3
fMM2 PUSH AF
LD A,3
fMM3 CALL MEM
POP AF
LD HL,#C000
OR A
JR Z,fMM4
LD DE,2560
fMM5 ADD HL,DE
DEC A
JR NZ,fMM5
fMM4 ;
LD DE,#4049
EXX
LD B,127
LD A,(fFRAME)
DEC A
AND %11110
CP 6
LD A,#68
JR NZ,fMM22
LD A,#78
fMM22 ;EI
;HALT
;DI
push af
push bc
push de
push hl
exx
push bc
push de
push hl
YIELD
pop hl
pop de
pop bc
exx
pop hl
pop de
pop bc
pop af
LD (#5800+124),A
fEM0 EXX
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
LDI;
LD A,E
SUB 20
LD E,A
INC D
LD A,D
AND 7
JP NZ,fEM1
LD A,E
ADD A,32
LD E,A
JR C,fEM1
LD A,D
SUB 8
LD D,A
fEM1 EXX
DJNZ fEM0
RET
PRESS ;нажатие клавиши 1-2-3
if 1==0
PUSH BC
LD BC,#F7FE
IN A,(C)
POP BC
CPL
AND 7
OR A
RET Z
LD E,1
RRA
JR C,PRE1
INC E
RRA
JR C,PRE1
INC E
PRE1 LD A,E
PUSH AF
CALL MUS+9 ;stop muz
POP AF
CP 2
JP C,bFLICK
;JP Z,bGAME
CALL OFFS
JP bINSTR
else
push bc
GET_KEY
pop bc
or a
ret z
PUSH AF
CALL MUS+9 ;stop muz
POP AF
cp key_esc
jr z,press_quit
cp '1'
jp z,bFLICK
CALL OFFS
curpginstr=$+1
ld a,0
SETPG16K
;jr $
JP bINSTR
press_quit
QUIT
endif
COLOR ;раскр флага
CALL STD
LD HL,0
LD BC,#1820
LD E,#78
CALL ATRBAR
LD BC,#404
LD E,#68
CALL ATRBAR
LD L,28
CALL ATRBAR
LD H,20
CALL ATRBAR
LD L,0
CALL ATRBAR
LD HL,8
LD BC,#1801
LD E,#30
CALL ATRBAR
LD BC,#202
LD E,#70
CALL ATRBAR
LD HL,#1609
LD C,15
LD E,#50
CALL ATRBAR
LD BC,#605
LD HL,#900
LD E,#38
CALL ATRBAR
LD HL,#1202
LD BC,#41D
LD E,#78
JP ATRBAR
;-----W_GrLib--for intro---------------
PUTsHL DEFW 0
SCRADR DEFB SCR/256
ATRADR DEFB #D8
FONT DEFW FFONT
PCOORD LD A,D ;de(0-191,0-255) -- hl
RRCA
RRCA
RRCA
LD L,A
AND %00011000
LD H,A
LD A,D
AND %00000111
ADD A,H
LD H,A
LD A,(SCRADR)
ADD A,H
LD H,A
LD A,L
LD L,E
RRA
RR L
RRA
RR L
RRA
RR L
RET
SCOORD LD A,(SCRADR) ;de(0-23,0-31)--hl
ADD A,D
AND %11111000
LD H,A
LD A,D
RRCA
RRCA
RRCA
AND %11100000
OR E
LD L,A
RET
STD LD A,DSCR/256 ;выбор тенев.экрана
JR SELSCR
STS LD A,SCR/256 ;выб.осн.экр
SELSCR LD (SCRADR),A ;A-screen address
ADD A,#18
LD (ATRADR),A; A-attr address
RET
ACOORD LD A,L ;коорд атр HL->HL
RLA
RLA
RLA
SRL H
RRA
SRL H
RRA
SRL H
RRA
LD L,A
LD A,(ATRADR)
ADD A,H
LD H,A
RET
ATRBAR ;HL - adr in scr; BC-size(yx) ;E-COLOR
PUSHs
CALL ACOORD
ATRBA0 LD D,L
LD A,C
ATRBA1 LD (HL),E
INC L
DEC A
JR NZ,ATRBA1
LD A,D
ADD A,32
LD L,A
JR NC,ATRBA2
INC H
ATRBA2 DJNZ ATRBA0
POPs
RET
PRINT ;печать символа А в поз DE(yx)
PUSHs
LD C,A
CALL SCOORD
EX DE,HL
LD A,C
ADD A,A
LD BC,(FONT)
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,BC
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
LD A,(HL)
LD (DE),A
INC HL
INC D
POPs
INC E
RET
;-------------------------
;---МУЛЬТФИЛЬМ------------
MUSj45 EQU 43700
bFLICK ;DI
LD A,0;6
OUT (#FE),A
LD A,R
LD (RNB),A
;CALL SW70 ;CALL SW7:JP MEM0 ;в 4000+
call SW7
call MEM0
LD HL,WIN+2
LD DE,#4000
CALL DELPZ
CALL STD
LD HL,0
;ОКРАС
LD BC,#1820
LD E,#30
CALL ATRBAR
LD L,2
LD BC,#41C
LD E,#70
CALL ATRBAR
LD HL,#501
LD BC,#120E
LD E,#68
CALL ATRBAR
INC C
LD L,#10
LD E,#71
CALL ATRBAR
LD DE,TITRES
LD HL,WFTXT+2
CALL DELPZ
CALL MEM7
LD DE,MUSj45
LD HL,J45LPZ+2
CALL DELPZ
CALL MUSj45
CALL SW5
CALL MEM0
;jr $
;сейчас в 4000..7fff экранная страница 5
;
fREP LD A,-3
LD (fBLOCK),A
LD HL,TITRES-416
LD (TITadr),HL
CALL LOAD_M
CALL PL0
CALL LOAD_M
CALL PL1
CALL LOAD_M
CALL PL2
CALL LOAD_M
CALL PL3
CALL LOAD_M
CALL PL4
CALL LOAD_M
CALL PL5
JR fREP
fCOUNT DEFB 0 ;счётчик кадровх16
pF LD HL,fCOUNT
LD (HL),A
pF0 PUSH HL
CALL FRWRD
POP HL
LD A,(#5800)
CP #30
JR NZ,pF0
DEC (HL)
JR NZ,pF0
RET
pFtt DEFB 0,3,0,6,6,0,3,0, 0,0,0,6,0,3,0,0
DEFB 6,0,0,0,3,3,0,3, 0,3,0,6,0,0,6,0
pFtcnt DEFB 0
pFrr LD HL,fCOUNT ;для doom
LD (HL),A
pFr0 PUSH HL
LD A,(pFtcnt)
INC A
AND #1F
LD (pFtcnt),A
LD HL,pFtt
CALL BA
LD (P_ANI),A
CALL FRWRD
POP HL
LD A,(#5800)
CP #30
JR NZ,pFr0
DEC (HL)
JR NZ,pFr0
RET
fLAST4 DEFB 0 ;(огранич.4х кадров)
pF4 LD HL,fCOUNT
LD (HL),A
LD A,C
LD (fLAST4),A
pF40 PUSH HL
CALL FRWRD4
POP HL
LD A,(#5800)
CP #30
JR NZ,pF40
DEC (HL)
JR NZ,pF40
RET
pFB LD HL,fCOUNT
LD (HL),A
pFB0 PUSH HL
CALL FRWRD
CALL BCKWRD
POP HL
LD A,(#5800)
CP #30
JR NZ,pFB0
DEC (HL)
JR NZ,pFB0
RET
pBF LD HL,fCOUNT
LD (HL),A
pBF0 PUSH HL
CALL BCKWRD
CALL FRWRD
POP HL
LD A,(#5800)
CP #30
JR NZ,pBF0
DEC (HL)
JR NZ,pBF0
RET
PL0 XOR A ;&&copper feet
CALL fSET
LD A,12
CALL pFB
LD A,1 ;&&monitors
CALL fSET
LD HL,450
LD (TITtim),HL
LD A,21
CALL pF
LD A,2 ;&&river
CALL fSET
LD A,35
CALL pF
JP offVID
PL1 XOR A
CALL fSET
LD A,43
CALL pF
LD A,1 ;
CALL fSET
LD A,42
CALL pF
LD A,2 ;&&
CALL fSET
LD A,26
CALL pFB
JP offVID
PL2 XOR A ;&&
CALL fSET
LD A,20
CALL pBF
LD A,1 ;&&
CALL fSET
LD A,34
CALL pF
LD A,2 ;&&
CALL fSET
LD A,17
CALL pFB
CALL MUSj45
JP offVID
tDEL ;время задержки
DEFB 4,3,3, 3,3,2
DEFB 3,4,3, 3,3,4
DEFB 3,3,2, 4
PL3 XOR A ;&&
CALL fSET
LD A,26
CALL pF
LD A,1 ;&&
CALL fSET
LD A,28
CALL pF
LD A,2 ;&&
CALL fSET
LD A,25
CALL pF
JP offVID
PL4 XOR A ;&&
CALL fSET
LD A,32
CALL pF
LD A,1 ;&&катап
CALL fSET
LD A,84
LD C,4
CALL pF4
LD A,1
LD C,8
CALL pF4
LD A,1
LD C,12
CALL pF4
LD A,44
LD C,16
CALL pF4
LD A,2 ;&&
CALL fSET
LD A,84
CALL pF
CALL MUSj45
JP offVID
PL5 XOR A ;&&
CALL fSET
LD A,23
CALL pF
CALL fStt
LD A,14
CALL pFrr
LD A,3
LD (DL_ANI),A
LD A,16
CALL pFrr
CALL fStt
LD A,2
LD (DL_ANI),A
LD A,18
CALL pFrr
LD A,1
LD (DL_ANI),A
LD A,32
CALL pFrr
CALL MUSj45
JP offVID
fSET ;уст нач парм аним A (0-2) из тек блока
LD E,A
ADD A,A
ADD A,E
LD (P_ANI),A
LD HL,(fBLOCK)
LD A,E
ADD A,L
LD E,A
LD HL,fCOLOR
CALL BA
LD (C_ANI),A
LD A,E
LD HL,tDEL
CALL BA
LD (DL_ANI),A
;
XOR A
LD (FRAME),A
INC A
LD (FDELAY),A
CALL fINTRP
LD DE,(C_ANI)
CALL fS_
;инит титров
fStt LD HL,(TITadr)
LD DE,416
ADD HL,DE
LD (TITadr),HL
XOR A
LD (TITad_),A
LD HL,800
LD (TITtim),HL
RET
quit
call MUSj45 ;init muz
QUIT
TITadr DEFW TITRES ;текст титров
TITad_ DEFB 0 ;+0,+208
TITtim DEFW 10 ;время показа
fS_ LD BC,#120E
LD HL,#501
JP ATRBAR
offVID ;очистк межд блоками
;;CALL MUSj45+9
LD E,0
JP fS_
;*************************
P_ANI DEFB 0 ;нач страница аним (0,3,6)
DL_ANI DEFB 4 ;задержка анимации
C_ANI DEFB #38 ;цвет
;*************************
FRAME DEFB 0 ;(#кадра - 0..15)
FDELAY DEFB 0 ;задержка
fBLOCK DEFB 0 ;блок анимации (0,3,6,9,12,15)
FRWRD4 LD B,4 ; 4 кадрa вперёд
frw4 PUSH BC
LD A,(fLAST4)
SUB B
LD (FRAME),A
CALL LDIRER
POP BC
DJNZ frw4
RET
FRWRD LD B,16 ; 16 кадров вперёд
frw0 PUSH BC
LD A,16
SUB B
LD (FRAME),A
CALL LDIRER
POP BC
DJNZ frw0
RET
BCKWRD LD B,16 ; 16 кадров вперёд
bkw0 PUSH BC
LD A,B
DEC A
LD (FRAME),A
CALL LDIRER
POP BC
DJNZ bkw0
RET
LDIRER ;один кадр
CALL fINTRP
LD HL,FDELAY
DEC (HL)
JR NZ,LDIRER
LD A,(DL_ANI)
LD (HL),A
;
LD A,(FRAME) ;выв кадра A(0-15)
CP 8
LD E,A
JR C,LMM2
SUB 8
LD E,A
LD C,1
JR LMM3
LMM2 LD C,0
LMM3 LD A,(P_ANI)
ADD A,C
CALL MEM
LD A,E
LD HL,#C000
OR A
JR Z,LMM4
LD DE,2016
LMM5 ADD HL,DE
DEC A
JR NZ,LMM5
LMM4 ;
LD DE,#40A1
EXX
LD B,144
LEM0 EXX
PUSH DE
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
LDI;
LDI
LDI
LDI
LDI
POP DE
INC D
LD A,D
AND 7
JP NZ,LEM1
LD A,E
ADD A,32
LD E,A
JR C,LEM1
LD A,D
SUB 8
LD D,A
LEM1 EXX
DJNZ LEM0
GET_KEY
cp key_esc
jp z,quit
RET
fINTRP ;обработка im1
;EI
HALT
;DI
CALL MUSj45+6
CALL fTITR
JP fPRESS
Tpos DEFB 0
fTITR ;выв текущ символа титров
LD B,6
fQ0 LD HL,Tpos
LD A,7;(?)
ADD A,(HL)
CP 208
JR C,fQ1
SUB 208
fQ1 LD (HL),A
LD C,A
AND #F
ADD A,6
LD D,A
LD A,C
RRCA
RRCA
RRCA
RRCA
AND #F
ADD A,17
LD E,A
LD A,C
LD HL,(TITadr)
CALL BA
LD A,(TITad_)
CALL BA
CALL PRINT
DJNZ fQ0
LD HL,(TITtim)
DEC HL
LD (TITtim),HL
LD A,L
OR H
RET NZ
LD A,208
LD (TITad_),A
RET
fPRESS ;обр нажатий
;ss+N-next,ss+M-newerending loop,E-ret
LD BC,#7FFE
IN A,(C)
RRA
RRA
JR C,fPP1
RRA
JR C,fPPnx
fPPR LD A,(fRlock)
OR A
RET NZ
LD A,(#5800) ;%00110000/%00010000
XOR %00100000
LD L,A
LD H,A
LD (#5800),HL
LD (#5820),HL
LD (fRlock),A
RET
fPPnx RRA
RET C
LD A,1 ;next flik
LD (fCOUNT),A
RET
fPP1 LD B,#FB
IN E,(C)
XOR A
LD (fRlock),A
BIT 2,E
RET NZ
CALL MUSj45+9
JP START
fRlock DEFB 0
fCOLOR ;цвета фликов
DEFB #78,#7A,#60, #69,#38,#68
DEFB #71,#78,#70, #68,#79,#30
DEFB #70,#72,#78, #68
WIN ;окно для флика
incbin "intro/winflick.lpz"
RNA DEFW 14
RNB DEFB 22
RND PUSH HL
LD HL,(RNA)
INC HL
LD A,H
AND #1F
LD H,A
LD A,(RNB)
RRCA
XOR (HL)
ADD A,L
LD (RNA),HL
LD (RNB),A
POP HL
RET
LOAD_M ;загр блок мультиков: A
;call MUSj45+9 ;чтобы музыка не шипела - бесполезно, шум прописан прямо в музыке (даже в начале следующей)
LD HL,fBLOCK
INC (HL)
INC (HL)
INC (HL)
LD A,(HL)
ADD A,A
ADD A,16
LD C,-1
CALL LOA1_M
CALL LOA1_M
CALL LOA1_M
LD B,8
DPZ1 PUSH BC
LD A,B
DEC A
CP 2
JR Z,DPZ0
CP 5
JR Z,DPZ0
CALL MEM
LD HL,#C000
CALL DELPZF
DPZ0 POP BC
DJNZ DPZ1
RET
FFONT
incbin "data/wfont.fnt"
LOA1_M INC C
CALL LOA2_M ;грузим файл "wani?_0.lpz"
;грузим файл "wani?_1.lpz"
LOA2_M PUSH BC
PUSH AF
LD A,C
CALL MEM
POP AF
PUSH AF
CALL LOADF
POP AF
POP BC
INC C
INC A
RET
TITRES NOP