?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. ;------------------------------------------
  2. ;     Вражеский интеллект - СТРАТЕГИЯ
  3. ;------------------------------------------
  4. ;*L+
  5. pntINI  ;инициализация параметров точки сбора
  6.         if 1==0
  7.         LD H,WX_BAD/256 ;[--10]
  8.         LD A,3
  9.         LD L,WX_BAD&255
  10.         PUSH HL
  11.         CALL BA
  12.         ADD A,63
  13.         LD C,A
  14.         LD A,10
  15.         POP HL
  16.         CALL BA
  17.         CP C
  18.         JR Z,crc10
  19.         ;
  20.        LD HL,#FFF0
  21.        LD (KUNGE+16),HL
  22. crc10   ;
  23.         endif
  24.         LD A,(DIFFIC)
  25.         OR A
  26.         PUSH AF
  27.          JR NZ,pniMR ;%1
  28.          LD A,%1101
  29. pniMR    LD (deMRCH),A ;скр.отступ.влш
  30.         POP AF
  31.         CALL NZ,UP_DIF
  32.         LD A,#FF ;нач задержка
  33.         LD (pntNUM),A
  34.         LD A,(lev1ST)
  35.         LD (pntDEL),A
  36.         ;/опред. возможности пр-ва типов
  37.         LD HL,pntEN+1 ;очистка
  38.         LD B,5
  39. pni0    LD (HL),0
  40.         INC HL
  41.         DJNZ pni0
  42.         LD A,(kTOWER)
  43.         CP 4
  44.         JR NC,pni4
  45.         CP 3
  46.         JR NC,pni3
  47.         CP 2
  48.         JR NC,pni2
  49.         JR pni1
  50. pni4    LD (pntEN+4),A;кат
  51. pni3    LD (pntEN+5),A;конн
  52. pni2    LD (pntEN+0),A;луч
  53. pni1    LD (pntEN+1),A;пех
  54.         LD A,(kmaxC) ;по налич закл
  55.         LD (pntEN+2),A
  56.         LD A,(kmaxW) ;по налич закл
  57.         LD (pntEN+3),A
  58.         ;опред нач точки сбора
  59.         LD HL,(KBUILD) ;перв. здание
  60. pniP0   LD A,L
  61.         OR A
  62.         JR Z,pniP
  63. pniPX   LD (pntX),HL
  64.         RET
  65. pniP    LD HL,(KUNGE) ;перв. воин /иначе error
  66.         JR pniP0
  67.  
  68.  
  69. pntACT  ;-----обработка точки сбора (1 раз в 8 тик)
  70.         LD A,(TIC)
  71.         AND %111
  72.         CP %101
  73.         RET NZ ; раз в 8 кадров (~в секунду)
  74.         LD HL,pntDEL
  75.         LD A,(HL)
  76.         DEC (HL)
  77.         OR A
  78.         RET NZ ;задержка не окончена
  79.         LD HL,pntNUM
  80.         LD A,(HL)
  81.         DEC (HL)
  82.         OR A
  83.         JP Z,pntATA  ;послать в атаку
  84.         CP 128
  85.         JP NC,pntNEW  ;новый сбор
  86.         ;
  87. pntNXT  ;--------произвести следующего члена отряда
  88.         LD A,(pntUNI)
  89.         OR A
  90.         JR NZ,pnx1
  91.         CALL pnxNXT
  92. pnx1    LD C,A
  93.         LD A,(MASTER)
  94.         OR A
  95.         JR Z,pnx11
  96.         LD HL,pnxBLT-3
  97.         LD A,C
  98.         CP 5
  99.         JR Z,pnxW
  100.         CP 6
  101.         JR NZ,pnx2
  102.         ;
  103. pnxW    ;если волшебник есть - не производить его, а отозвать
  104.         PUSH AF
  105.         CALL loop_K
  106. pnxW0   LD A,(IX+0)
  107.         OR A
  108.         JR Z,pnxW1
  109.         LD A,(IX+4) ;волш?
  110.         CP C
  111.         JR NZ,pnxW1
  112.         LD A,(IX+13) ;не охр?
  113.         CP 12
  114.         JP NC,pnxFRW ;нашли волш, вернуть на базу
  115. pnxW1   ADD IX,DE
  116.         DJNZ pnxW0
  117.         POP AF
  118.         JR pnx2
  119.         ;
  120. pnx11   LD HL,pnxBLT-6 ;для кунгов
  121.         LD A,C
  122.         ADD A,9
  123.         LD C,A
  124.         CP 14
  125.         JR Z,pnxW
  126.         CP 15
  127.         JR Z,pnxW
  128. pnx2    LD (pntMAN),A
  129.         CALL BA
  130.         ;//опред здания для пр-ва
  131.         LD C,A
  132.         LD B,#28
  133.         LD IX,KBUILD
  134.         LD HL,(pntX)
  135.         LD DE,#FFFF ;номер/расст
  136.         EXX
  137.         LD B,32
  138.         LD DE,8
  139. pnx0    EXX
  140.         LD A,(IX+0)
  141.         OR A
  142.         JR Z,pnx4
  143.         LD A,(IX+2)
  144.         CP C
  145.         JR NZ,pnx4
  146.         PUSH BC
  147.         CALL DIST2 ;искать ближайшее
  148.         POP BC
  149.         CP E
  150.         JR NC,pnx4
  151.         LD E,A
  152.         LD D,B
  153. pnx4    INC B
  154.         EXX
  155.         ADD IX,DE
  156.         DJNZ pnx0
  157.         EXX
  158.         LD A,D
  159.         CP #FF
  160.         JR NZ,pnxOK
  161.         ;//не найдено здание :(
  162. pnxNIL  LD A,2
  163.         LD (pntDEL),A
  164.         RET
  165. pnxOK   ;//дать задержку на пр-во
  166.         LD A,D
  167.         CALL B_IX
  168.         LD A,(IX+2)
  169.         LD HL,hcTIME
  170.         CALL BA
  171.         SRL A
  172.         SRL A
  173.         SRL A
  174.         LD (pntDEL),A
  175.         ;//произвести воина
  176.         CALL HL_IX0
  177.         CALL stayON
  178.         LD A,(pntMAN)
  179.         PUSH AF
  180.         EX AF,AF
  181.         LD A,1
  182.         CALL NEWHER
  183.         JR NZ,pnoMEM
  184. pnxOK1  LD (IX+13),2 ;ждущий
  185.         LD HL,(pntX)
  186.         CALL IXt_HL
  187.         CALL IX_93
  188.         POP AF
  189.         CP 7
  190.         JR Z,pnxKT
  191.         CP 16
  192.         RET NZ
  193. pnxKT   ;катапульты - сразу в бой
  194.         LD (IX+13),3
  195.         JP IX_98
  196. pnoMEM  POP AF ;нет памяти
  197.         RET
  198. pnxFRW  CALL pnxNIL ;волш уже есть
  199.         JR pnxOK1
  200.         ;
  201. pnxBLT  ;тип производящего здания (3..8, 12..17)
  202.         DEFB 1,1,3,6,1,1, 11,11,13,16,11,11
  203.  
  204.  
  205. pntATA  ;--------послать отряд в атаку
  206.          LD A,(levTYP)
  207.          CP 2
  208.          JR NZ,pnaa ;для типа 2 выбрать охранника и послать в атаку
  209.          LD B,10 ;число попыток
  210. att1     CALL RND
  211.          AND #3F
  212.          CP 48
  213.          JR NC,att1
  214.          ADD A,48
  215.          CALL N_IX
  216.          LD A,(IX+0)
  217.          OR A
  218.          JR Z,attx
  219.          LD (IX+13),3
  220.          LD B,1
  221. attx     DJNZ att1
  222. pnaa    ;подать всем команду атаковать поз HL
  223.         CALL loop_K
  224. pna0    LD A,(IX+0)
  225.         OR A
  226.         JR Z,pna1
  227.         LD A,(IX+13)
  228.         CP 2
  229.         JR NZ,pna1
  230.         LD (IX+13),3 ;ждущий->атакующий
  231.         ;
  232.         LD A,(IX+4)
  233.         CP 9
  234.         JR C,pna50
  235.         SUB 9
  236. pna50   CP 5
  237.         JR Z,pna66
  238.         CP 6
  239.         JR NZ,pna60
  240.         LD C,15 ;волш-атак
  241.         JR pna77
  242. pna66   LD C,12 ;свящ-атак
  243. pna77   CALL pnMAGI
  244.         LD (IX+13),C
  245.         ;
  246. pna60   LD A,(IX+3) ;неодновр. старт
  247.         OR A
  248.         JR NZ,pna0a
  249.         CALL RND
  250.         AND %00000111
  251.         OR  %10000000
  252.         LD (IX+3),A
  253. pna0a   CALL IX_98
  254. pna1    ADD IX,DE
  255.         DJNZ pna0
  256.         ;/расч del до след сбора = levDEL+RND(32)
  257.         CALL RND
  258.         AND %11111
  259.         LD HL,(levDEL)
  260.         ADD A,L
  261.         LD (pntDEL),A
  262.         RET
  263.         ;
  264. pnMAGI  ;вх: C=нач уровень магии вых: C+=0..2
  265.         LD A,R
  266.         RRCA
  267.         RET C ;+0 /50%
  268.         INC C
  269.         RRCA
  270.         RET C;+1 /25%
  271.         INC C
  272.         RET ;+2 /25%
  273.  
  274.  
  275.  
  276. pntNEW  ;--------начать новый сбор
  277.         if 1==0
  278.         CALL _TST#5
  279.         endif
  280.         ;выбор базового здания
  281.         LD B,16
  282. pnw0    CALL RND
  283.         AND #1F
  284.         ADD A,#28
  285.         CALL B_IX
  286.         LD A,(IX+0)
  287.         OR A
  288.         JR NZ,pnw1
  289.         DJNZ pnw0
  290.         JR pnwX ;нет зданий
  291. pnw1    ;//выбрать базовую точку (+7..-8)
  292.         if 1==0
  293.          LD HL,isTST8 ;[**]
  294.          DEC (HL)
  295.         endif
  296.         CALL HL_IX0
  297.         EX DE,HL
  298.         LD B,16
  299. pnw2    LD C,E
  300.         CALL RNDshf
  301.         LD L,A
  302.         LD C,D
  303.         CALL RNDshf
  304.         LD H,A
  305.         PUSH HL
  306.         CALL GMAP2
  307.         LD A,(HL)
  308.         POP HL
  309.         OR A
  310.         JR Z,pnw3
  311.         DJNZ pnw2
  312.         JR pnwX ;вокруг нет своб места
  313. pnw3    LD (pntX),HL ;нов место сбора
  314. pnwX    ;//выбрать число воинов
  315.         LD A,(levMAX)
  316.         CP 2
  317.         JR C,pnwM0
  318.         DEC A
  319.         LD B,A
  320.         LD C,1
  321. pnwM1   CALL RND
  322.         RLCA
  323.         JR C,pnwM3
  324.         INC C
  325. pnwM3   DJNZ pnwM1
  326.         LD A,C
  327. pnwM0   LD (pntNUM),A
  328.         ;//выбрать тип отряда (в 20% - однородный)
  329.         CALL RND
  330.         CP 201
  331.         LD A,0
  332.         JR C,pnwU0
  333.         ;отряд однородный
  334. pnwNU   CALL pnxNXT
  335.         CP 5
  336.         JR Z,pnwNU ;не волш/свящ
  337.         CP 6
  338.         JR Z,pnwNU
  339. pnwU0   LD (pntUNI),A
  340.         ;//задержка=1
  341.         LD A,1
  342.         LD (pntDEL),A
  343.         ;--иногда смена цели
  344.         LD A,R
  345.         AND %10100
  346.         RET NZ
  347.         JR Z,selNEW
  348.  
  349. pnxNXT  CALL pnxNX1 ;тип след члена отряда ->A
  350.         LD A,C
  351.         LD HL,pntEN-3
  352.         CALL BA
  353.         OR A
  354.         JR Z,pnxNXT
  355.         LD A,C
  356.         RET
  357.         ;
  358. pnxNX1  CALL RND ;вероятн появл
  359.         LD C,3
  360.         SUB 70
  361.         RET C ;луч (3)
  362.         INC C
  363.         SUB 50
  364.         RET C ;воин (4)
  365.         INC C
  366.         SUB 20
  367.         RET C ;свящ (5)
  368.         INC C
  369.         SUB 25
  370.         RET C ;волш (6)
  371.         INC C
  372.         SUB 10
  373.         RET C ;катап (7)
  374.         INC C
  375.         ;sub 75
  376.         RET ;конник (8)
  377.  
  378. selTAR  ;выбор/коррекция общей цели
  379.         LD A,(pntTAR)
  380.         CP #FF
  381.         JR Z,selNEW
  382.         CP #80
  383.         JR NC,sttBU
  384.         ;цель-воин - жив?
  385.         CALL N_IX
  386.         LD A,(IX+0)
  387.         OR A
  388.         JR Z,selNEW ;мёртв
  389.         LD A,(IX+1)
  390.         CP #80
  391.         JR NC,selNEW ;в здании
  392.         RET
  393. sttBU   ;цель-здание
  394.         AND #7F
  395.         CALL B_IX
  396.         LD A,(IX+0)
  397.         OR A
  398.         RET NZ ;цело
  399.         ;
  400. selNEW  ;----нов цель
  401.         ;поиск здания
  402.         LD B,16 ;число попыток
  403. stt0    CALL RND
  404.         AND #1F
  405.         ADD A,8
  406.         LD C,A
  407.         CALL B_IX
  408.         LD A,(IX+0)
  409.         OR A
  410.         JR NZ,sttNB
  411.         DJNZ stt0
  412.         ;поиск человека
  413.         LD B,24 ;число попыток
  414. stt1    CALL RND
  415.         AND #3F
  416.         CP 48
  417.         JR NC,stt1
  418.         LD C,A
  419.         CALL N_IX
  420.         LD A,(IX+0)
  421.         OR A
  422.         JR NZ,sttx
  423.         DJNZ stt1
  424.         LD C,#FF ;цель не найдена
  425.         JR sttx
  426. sttNB   SET 7,C
  427. sttx    LD A,C
  428.         LD (pntTAR),A
  429.         RET
  430.  
  431.  
  432.