;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