DEVICE ZXSPECTRUM1024
include "../../_sdk/sys_h.asm"
_128=PROGSTART+3
swapimer=PROGSTART+6
ttexpgs=PROGSTART+0x100
LEVDAT EQU #79C0 ;адр. нач данных уровня
ORG LEVDAT
begin
DSCR EQU 0xc000;#4000
;*D-
;********* Победа людей ****************
isRUNC ; кодовый блок
nop
;jr $
;LD A,0 ;люди
LD A,1 ;кунги
JP F_CUTh
;--------характеристики сторон-------(0)-обнулять вначале
;параметры играющего
;hTOWER DEFB 4 ;мак.число типов вооруж (1-4)
;hARC DEFB 0 ;0-2 (0)
hHORSE DEFB 1 ;0-3 (0)
hSHILD DEFB 0 ;0-2 (0)
hBLADE DEFB 1 ;0-2 (0)
hmaxC DEFB 3 ;1-3 чиcло возможн иccл закл свящ
hmaxW DEFB 3 ;1-3 число --"-- закл волш
;дополнительные параметры играющего
hmaxB1 DEFB 2 ;макс число стандарт зданий (0 или 1-2)
hmaxB2 DEFB 4 ;maкc число доп эданий (0, 1-4)
hWALL DEFB 17 ;0/17 - можно/нельзя строить стены
;параметры компьютера
kTOWER DEFB 4 ;1-4
kARC DEFB 0 ;0-2
kHORSE DEFB 2 ;0-3
kSHILD DEFB 1 ;0-2
kBLADE DEFB 1 ;0-2
kmaxC DEFB 3 ;1,3 чиcло иccл закл (0-нет свящ)
kmaxW DEFB 3 ;1..3 чиcло иccл закл (0-нет волш)
;----------- параметры стратегии врага ----------------
;/wSTRATEG (1.ед.изм - 8тик)
levMAX DEFB 8 ;макс число народу в группе (для уровня) = 1..10
levDEL DEFB 41 ;средн задержка межд сборами (для уровня) = 1..X
lev1ST DEFB 221 ;нач задержка первого сбора = 1..
;Тип уровня 0 ;обычный
;Тип уровня 1 ;атакованый охранник становится атакующим
;Тип уровня 2 ;см. тип 1 + охранники иногда идут в атаку
levTYP DEFB 0 ;тип уровня (0-обычный)
;-------- цветовые настройки -------
COLOR DEFB #28 ;цвет поля
;-------- общие параметры уровня -----
MASTER DEFB 0 ; кто играет 0/1 - люди?кунги
LEVEL DEFB 15 ; номер уровня
MONEY DEFB 0,0,3,0,0,0 ;деньги
WOOD DEFB 0,0,0,5,0,0 ;леc
TASK_M ;задание: 3 строки по 20+1 символов = 63
ds 63 ;*B ..\TASK\w115.tsk
LEVRES DEFB 0,0,0,43,0,0,127 ;текущее время прохождения
;------- используемые файлы -------
fsLAND DEFB 2; 1-4
fsMUS DEFB 0; 0-7
;****************** Инициализируемые переменные ****************
;--------------- (входят в описание каждого уровня) ------------
;/выбраные герои
SEL_T DEFB 0 ;0-none;1-один;2-6-group;7-кунг,8-здание
SEL_N DEFB 0,0,0,0,0,0 ;номера 6 выбр гер/зд
sel_en DEFB #FF ;выбранный враг-цель
sel_ti DEFB 0 ;время отображения цели
;/outLED
LED DEFB 4,3,4,3,4,3
;/putTX
_msg DEFB #FF
pTX_AD DEFW 0;WNAMES
TX_AD DEFW 0;WNAMES
pTXdel DEFB 0 ;t задержки на выв экcтр cообщ
;/M_PLAT
isPLAT DEFB 0; 0/1-есть/нет площадки
szPLAT DEFB 0; размер площадки под стр-во (1..3, 0-нет)
bcPLAT DEFW 0; размеры
adPLAT DEFW 0; позиция in ATR
waPLAT DEFB 0; если стена - 1
;/PAUSE
onPAUS DEFB 1 ;0-включить паузу
;/SOUNDn
NOTA DEFW se ;текущ нота <---- ПРЕРЫВАНИЕ ПИШЕТ СЮДА
se DEFW #FFFF ;конст
levSND DEFB 0 ;0-макс громкость
sIY56 DEFW 0 ;координаты снарядов
priv_S DEFB 0 ;текущ приоритет (0-нет мелодии)
NOTA2 DEFW se ;нота новой мелодии
priv_2 DEFB 0 ;нов приор
;/STRATEG - variables
pntX DEFB 32 ;-коорд т.сбора
pntY DEFB 31 ;-/
pntNUM DEFB 0 ;-число оставшихся до конца сбора воинов (0-конец сбора, 255-нов сбор)
pntDEL DEFB 22 ;-время до нач.след сбора/задержка на пр-во воина
pntTAR DEFB #FF ;-объект атаки (0-101 - воины, #80.. -здания, #FF-нет)
pntUNI DEFB 0 ;-отряд разнородный/однородный (0/member typ)
pntEN DEFB 0,0,0,0,0,0
;-разреш пр-во вида (3..8) (0-нет)
pntMAN DEFB 0 ;тип пораждаемого воина
;/isEND
END_1 DEFB 0 ;0/1/2-none/нет врагов/нет людей
END_2 DEFB 0 ;не0-князь вошёл в пещеру
TheEND DEFB 0 ;0/1/2-none/победа людей/победа врагов (устанавл в _cLOOP)
if 1==1
;надо загрузить brfinal.dat и странички
;*P0;
; ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIu_0.LPZ
;*P1;
; ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIu_1.LPZ
;*P3;
; ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIv_0.LPZ
;*P4;
; ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIv_1.LPZ
;*P6;
; ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIw_0.LPZ
;*P7;
; ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIw_1.LPZ
loader
ld hl,texfilename
ld de,0x8000 ;addr
ld b,7
getttexpgs0
push bc
ld a,(hl)
call _128
inc hl
push hl
push de ;addr
ex de,hl
OS_OPENHANDLE
pop de ;addr
push bc
;ld de,0xc000 ;addr
ld hl,0x4000 ;size
OS_READHANDLE
pop bc
OS_CLOSEHANDLE
pop hl
ld b,1
xor a
cpir ;after 0
pop bc
ld de,0xc000 ;addr
djnz getttexpgs0
call swapimer
;im 2
pop af
ld (0x8000),a
jp 0x8001
texfilename
db 0,"brfinal.dat",0
db 0,"branix_0.dat",0
db 1,"branix_1.dat",0
db 3,"braniy_0.dat",0
db 4,"braniy_1.dat",0
db 6,"braniz_0.dat",0
db 7,"braniz_1.dat",0
endif
Sc1
incbin "../barkov/w_end_k.scr"
Sc2
incbin "../barkov/w_end2.scr"
F_CUTh ;DI
;IM 1
LD SP,LEVDAT-2
LD B,A
PUSH BC
CALL OFFD
xor a
CALL _128
if 1==1
call swapimer
;im 1
ld e,3
OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
ld e,0
OS_SETSCREEN
ld de,RSTPAL
OS_SETPAL
;OS_GETSCREENPAGES
;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
ld a,(user_scr0_high) ;ok
SETPG32KHIGH
endif
LD HL,Sc1
CALL COPYAT
;пробел?
lggP LD BC,#7FFE
IN A,(C)
AND %1
JR NZ,lggP
CALL OFFD
LD HL,Sc2
CALL COPYAT
if 1==1
jp loader
RSTPAL
STANDARDPAL
else
CALL A_or_B
LD (tDRIVE),A
CALL OFFD
;чтение трек 0, сек 9 по 23845
A009 EQU 23845
L1st CALL TR000
LD DE,#09
LD B,1
LD HL,A009
PUSH HL
CALL D_READ ;загр. табл.ф-лов
POP HL
JR C,L1st
;проверка метки диска D1,BB
LD A,(HL)
CP #D1
JR NZ,L1st
INC HL
LD A,(HL)
CP #BB
JR NZ,L1st
;перенос т.ф-лов
POP BC
LD A,(tDRIVE)
JP A009+2
endif
if 1==0
;------------------- вспом п/п
A_or_B ;возвр: 0/1 - A/B
NOP
LD BC,#7FFE
IN A,(C)
AND %10000
LD A,1
RET Z
LD B,#FD
IN A,(C)
AND %1
RET Z
JR NZ,A_or_B
endif
if 1==0
;TODO fix
_128 LD A,%10000
LD BC,#7FFD
OUT (C),A
RET
endif
OFFD LD DE,DSCR+#1AFE
PUSH DE
POP HL
INC HL
LD BC,768
LD (HL),0
LDDR
LD BC,6143
LD (HL),255
LDDR
RET
COPYAT ;из HL
LD BC,6912
LD DE,DSCR
LDIR
RET
if 1==0
;-------tr/dos
RG_DOS LD IX,#2A53 ;выв в рег TRDOS (out (C),A:ret)
JR DOS
DOS PUSH IX
JP #3D2E
POS ;позиционир трек
LD C,#3C
LD A,(SIDE)
OR A
JR Z,DW_SID
RES 4,C
DW_SID LD A,(tDRIVE)
OR C
LD C,#FF
CALL RG_DOS
LD A,D
LD C,#7F
CALL RG_DOS
LD A,#18
LD IX,#2F57 ;вып ком TRDOS
JP DOS
RD_SCT LD BC,RD_SCT ;по этому адресу = 1
PUSH BC
LD BC,#17F
LD IX,#2090 ;чтение сектора из п/п форматирования(портит#5cd6)
JR DOS
TR000 CALL TR00 ;иниц дисковода + задержка
CALL TR00
CALL TR00
TR00 DI
LD D,0
CALL POS
LD IX,#2F65 ;ld a,8:jr 2f57
JR DOS
tDRIVE DEFB 0
SIDE DEFB 0
D_READ DI ;E-sec,D-trk,B-sec.num,HL-mem.adr
CALL POS
LD A,(#5CD6)
EX AF,AF'
NXT_S DEFB #DD
LD L,#3 ;retry.num
NXT_SC PUSH HL
PUSH BC
NXC_C1 PUSH IX
LD C,#5F
LD A,E
CALL RG_DOS
CALL RD_SCT
DI
LD HL,#5CD6
EX AF,AF'
CP (HL)
POP IX
JR Z,GOOD
LD (HL),A
DEFB #DD
DEC L
POP BC
POP HL
JR Z,ERR_RW
EX AF,AF'
JR NXT_SC
GOOD POP BC
POP HL
EX AF,AF'
GOOD1 INC E
LD A,E
CP #F9
JR C,OLD_TR
LD E,#F4
INC D
CALL POS
OLD_TR INC H
INC H
INC H
INC H
DJNZ NXT_S
XOR A
RET
ERR_RW SCF
RET
endif
end
savebin "br/br217.dat",begin,end-begin ;in current dir (not in dir of this source)