Login

Subversion Repositories NedoOS

Rev

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

;------------------------------
;--интеллект магов (from ZZ0)--

AI10    ;священник-охранник
        LD A,R
        AND %1111
        JR NZ,_aiWId
        LD A,(IX+6)
        CP MANA/4
        JR C,_aiWId
        JP itHLTH

AI11    ;волшебник-охранник
        LD A,(IX+6)
        CP MANA
        JR C,_aiWId
        LD A,(kmaxW)
        CP 3
        JR C,ai13_1
        JR ai13_3

_aiWId  LD L,(IX+14)
        LD H,(IX+15)
        CALL IXt_HL
        JP IX_93

_aiWIZ  ;если неудача применения магии
        JP AI03_

AI13    ;/священник-атакующий (закл.2->1)
        ;
AI12    ;священник-атакующий (закл.1)
        LD A,(IX+6)
        CP MANA/4
        JR C,_aiWIZ
        ;здоровье/оживл
        CALL itHLTH
        RET NC
        JR _aiWIZ

AI14    ;священник-атакующий (закл.3)
        LD A,(kmaxC)
        CP 3
        JR C,AI12
        ;огн.кольцо/хр.шар
        LD A,(IX+6)
        CP MANA
        JR C,_aiWIZ
        CALL itDFND
        RET NC
        JR _aiWIZ

AI15    ;волшебник-атакующий (закл 1)
        LD A,(IX+6)
        CP MANA/4
        JR C,_aiWIZ
ai13_1  LD A,1
        JR itCREA


AI16    ;волшебник-атакующий (закл 2)
        LD A,(kmaxW)
        CP 2
        JR C,AI15
        LD A,(IX+6)
        CP MANA/2
        JR C,_aiWIZ
        CALL itRAIN
        RET NC
        JR _aiWIZ


AI17    ;волшебник-атакующий (закл 3)
        LD A,(kmaxW)
        CP 3
        JR C,AI16
        LD A,(IX+6)
        CP MANA
        JR C,_aiWIZ
ai13_3  LD A,3
        JR itCREA


;-------применяемые заклинания (NC/C-применили/нет)----

itCREA  ;создания (A=1/3 - насекомые/монстры)
        LD C,A
        LD A,(IX+4)
        CP 6
        LD A,9
        JR Z,it111
        LD A,12
it111   ADD A,C
        LD (IX+9),A
        RET ;nc

itHLTH  ;здоровье/оживл трупов
        CALL HL_IX0
        LD A,(IX+4)
        CP 5
        JR NZ,itTROO
        EXX
        PUSH IX
        CALL loopKb ;w/o B
        LD C,#30
it102   LD A,(IX+0)
        OR A
        JR Z,it103
        LD A,(IX+4)
        LD HL,HEALTH
        CALL WT
        LD A,L
        CP (IX+5) ;требуется лечение?
        JR Z,it103
        EXX
        CALL DIST
        EXX
        CP 16; дистанция
        JR NC,it103
        LD A,(HER_N)
        CP C ;сам на ся?
        JR Z,it103
        CALL HL_IX0
        POP IX
        LD A,16
        JR itACT ;нашли больного
it103   ADD IX,DE
        INC C
        LD A,C
        CP #60
        JR C,it102
        JR itexC
        ;
itTROO  ;оживл трупов
        PUSH IX
        CALL loopHb
        LD C,0
it107   LD A,(IX+0)
        OR A
        JR NZ,it106
        LD A,(IX+1) ;труп?
        OR A
        JR Z,it106
        LD A,(IX+4) ;обычный труп?
        CP 8
        JR NC,it106
        CALL DIST
        CP 20 ;дистанция
        JR NC,it106
        CALL HL_IXt ;коорд трупа
        POP IX ;иди оживляй
        LD A,19
        JR itACT
it106   ADD IX,DE
        INC B
        LD A,B
        CP #60
        JR C,it107
itexC   POP IX
        SCF
        RET ;c-закл не выполн

itACT   ;действуй, маг! A-закл, HL-поз, {C-Nцели}
        LD (IX+9),A
        LD (IX+12),C
        LD (IX+8),#80
        XOR A;nc
        JP IXt_HL

itDFND  ;защитное кольцо/шар
        PUSH IX
        CALL loopKb
        LD C,#30
it402   LD A,(IX+0)
        OR A
        JR Z,it403
        LD A,(IX+9)
        CP 4
        JR NZ,it403
        CALL HL_IX0
        POP IX
        LD A,(IX+4)
        CP 5
        LD A,18
        JR Z,itACT
        LD A,21
        JR itACT ;нашли атакующего
it403   ADD IX,DE
        INC C
        LD A,C
        CP #60
        JR C,it402
        JR itexC

itRAIN  ;огн.дождь/смерч
        PUSH IX
        LD A,(TIC) ;man/blt
        RRCA
        JR C,itRAh
        LD A,R
        AND #1F
        ADD A,8
        CALL B_IX
        CALL HL_IX0
        POP IX
        JR itRA1
itRAh   LD A,R
        AND #3F
        CP 48
        JP NC,itRAh
        CALL N_IX
        CALL HL_IX0
        LD A,(IX+9)
        CP 1
        POP IX
        RET C ;цель не стои'т
itRA1   LD A,L
        CP 1
        RET C ;не нашёл цель
        LD A,(IX+4)
        CP 6
        LD A,11
        JR Z,itACT
        LD A,14
        JP itACT