Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed


        if 1==0
_TST#8  LD HL,isTST8 ;[**]
        LD A,(HL)
        AND %1111
        RET NZ
        DEC (HL)
        ;
        LD C,0
        LD DE,invBUF
        PUSH DE
        CALL t8dst
        LD C,(HL)
        POP HL
        CP C
        JR Z,t8ex_
        LD DE,KUNGE-invBUF+#100
        ADD HL,DE       ;err
t8ex_   LD BC,#40FF
t8ex    LD (HL),C
        INC HL
        DJNZ t8ex
        SCF
        RET

t8dst   PUSH DE ;[**]
        LD HL,t8tab
t8d0    LD A,(HL)
        INC HL
        CP #80
        JR Z,t8d1
        JR NC,t8d2
        CP #38
        JR Z,t8d1
        JR t8d3
t8d2    CP #FE
        RET Z
t8d3    INC C
        LD (DE),A
        INC DE
t8d1    JR t8d0
        ;
        POP DE
        LD A,C
        RET

        endif


;звуковые эффекты   (C) Copper Feet [sept.1997]
;--------------- Звук (в осн.стр)-----------------

;частотаМЛ (FF-конец),частотаСТ,громкость,шум (FF-НЕТ)

SOU4    ;выстрел из катапульты
        DEFW 1096
        DEFB 11,31
        DEFW 946
        DEFB 12,20
        DEFW 2096
        DEFB 14,17
        DEFW 796
        DEFB 15,20
        DEFW 3094
        DEFB 15,22
        DEFW 646
        DEFB 15,26
        DEFW 4094
        DEFB 15,28
        DEFW 596
        DEFB 14,29
        ;
SOU3    ;выстрел из лука
        DEFW 4094
        DEFB 14,30
        DEFW 596
        DEFB 14,27
        DEFW 4094
        DEFB 13,25
        DEFW 596
        DEFB 11,20
        DEFW 3094
        DEFB 09,10
        DEFB #FF


;0-меч,1-топор,2-взрыв катапульты,3-выстрел из лука,
;4-выстрел из катапульты, 5-колдовство, 6-волшебники стреляют
;7-укус, 8-малый взрыв
tSOUND  DEFW SOU0,SOU1,SOU2,SOU3,SOU4,SOU5,SOU6,SOU7,SOU8
prvSND  ; приоритет
        DEFB   10,   5,  20,   6,   15, 12,   9,   8,  14
typSND  ;кто какой звук при ударе даёт (#FF-нет)
        DEFB 1,#FF,#FF,3,0,#FF,#FF,#FF,0
        DEFB 1,#FF,#FF,3,0,#FF,#FF,#FF,0
        DEFB 7,1,7,1,#FF,#FF,1,0,#FF

;#EEC9(стр.6) - адрес хранения упр. регистра AY для протрекера
;часть эффектов в стр.3


SOUNDy  ;играть звук A (IY+5,IY+6 - коорд источника)
        PUSH HL
        LD L,(IY+5)
        LD H,(IY+6)
        LD (sIY56),HL
        POP HL
SOUND9  LD IX,sIY56
        ;
SOUNDn  ;играть звук A (IX+0,IX+1 - коорд источника)
        CP #FF
        RET Z ;пустой звук
        PUSH HL
        PUSH BC
        PUSH AF
        LD C,A
        LD A,(AY_FX)
        OR A
        JR Z,son1 ;эфф запрещ
        LD A,C
        LD HL,prvSND
        CALL BA
        LD A,(priv_S)
        CP (HL)
        JR NC,son1 ;приоритет эффекта ниже проигрываемой
        LD A,(HL)
        LD (priv_2),A
        LD A,C
        LD HL,tSOUND  ;инициализ мелодии #A
        CALL WT
        LD (NOTA2),HL
        ;
        ;опр видимости источника звука
        CALL HL_IX0
        CALL GMAP
        BIT 7,(HL)
        JR NZ,son1
        ;опред громкости в зависимости от дальности
        LD HL,(X0)
        LD A,L
        ADD A,6
        LD L,A
        LD A,H
        ADD A,7
        LD H,A ;центр экр
        CALL DIST2
        SUB 6
        JR NC,lso1
        ;в экране - макс громкость
        XOR A
lso0    LD (levSND),A
        LD HL,(NOTA2)
        LD (NOTA),HL
        LD A,(priv_2)
        LD (priv_S),A
        JR son1
lso1    CP 6
        JR C,lso0;в радиусе 12
son1    POP AF
        POP BC
        POP HL
        RET

;форматы нот
;(#ff) - конец мелодии
;(N4,N5,N10,Nшум) - значение 4,5,10  и 6  регистров для С


pSOUND  ;вып. ноту мелодии
        LD A,(priv_S) ;проигрыватель не занят
        OR A
        RET Z
        LD A,(#EEC9) ;из протрекера
        LD E,A
        if 1==0
        LD A,3   ;стр. с эффектами
        CALL MEM
        else
        call MEM_snd
        endif
        LD HL,(NOTA)
        LD A,(HL)
        CP #FF
        JR NZ,ppsC ;конец эффекта?
        XOR  A
        LD (priv_S),A ;завершение мелодии
        RET
ppsC    ;
        LD BC,#FFFD
        LD A,4 ;частотаМЛ
        OUT (C),A
        LD B,#BF
        OUTI
        ;
        LD B,#FF
        INC A ;частотаCT
        OUT (C),A
        LD B,#BF
        OUTI
        ;
        LD B,#FF
        LD A,10 ;громкость
        OUT (C),A
        LD A,(levSND)
        LD B,A
        LD A,(HL)
        INC HL
        SUB B ;коррект громкости по расстоянию
        JR NC,pps1
        XOR A
pps1    LD B,#BF
        OUT (C),A
        ;
        LD B,#FF
        LD A,7 ;управление
        OUT (C),A
        LD B,#BF
        LD A,E ;из протрекера
        BIT 7,(HL)
        JR Z,pps2
        AND %11111011 ;без шума
        JR pps3
pps2    AND %11011011
pps3    OUT (C),A
        ;
        LD B,#FF
        LD A,6 ;шум
        OUT (C),A
        BIT 7,(HL)
        JR NZ,pps4
        OUTI
        JR pps5
pps4    INC HL
pps5    LD (NOTA),HL
        RET

        if 1==0
yw  EQU #38
yv  EQU #80
t8tab   DEFB yv,#AF,yv,yw      ;   TST#8   XOR A [**]
        DEFB #21,yv,#50,yw,yv,#40  ;           LD HL,#4050
        DEFB #01,#00,yv,#36  ;           LD BC,#3600
        DEFB #AE,yv,yv,yv      ;   tst80   XOR (HL)
        DEFB #86,yw      ;           ADD A,(HL)
        DEFB #23      ;           INC HL
        DEFB #0D,yw      ;           DEC C
        DEFB #20,#FA    ;           JR NZ,tst80
        DEFB #05      ;           DEC B
        DEFB #20,yv,yv,#F7    ;           JR NZ,tst80
        DEFB #21,yv,#00,yv,#FF  ;           LD HL,#FF00
        DEFB #C9,yw,yw,  #FE          ;RET (!cp(hl))
        endif