?login_element?

Subversion Repositories NedoOS

Rev

Rev 1505 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. MKMAP
  2.         LD HL,sprpie
  3.         LD (DrawPieaddr),HL
  4.  
  5.       if !ATM;!USELMNBUF
  6.         call GenLMNList
  7.         call CopyLMNGfx ;копируем графику выбранных элементов в LMNGFX (не более LMNGFXSZ)
  8.       endif
  9.  
  10.        call DrawPie ;1
  11.  
  12.         call MKMAPPP ;generate map contour ;CY=error
  13.         ;call CheckGroundExist ;проверяем, есть ли земля на ниж. линии (CY=error)
  14.         ;jr c,MKMAP ;error
  15.  
  16.        call DrawPie ;2
  17.  
  18.         call EorFillInMap
  19.  
  20.         ;ld b,0
  21.         ;ld e,0
  22.         ;ld c,10
  23.         ;call XorPixInMap
  24.  
  25.        call DrawPie ;3
  26.  
  27.         call FindPlacesForGrass ;записывает в grassbuf
  28.  
  29.        call DrawPie ;4
  30.  
  31.         call MakeMaskFromMap
  32.  
  33.        call DrawPie ;5
  34.  
  35.         call TexturizeGroundInMap ;использует texture
  36.  
  37.        call DrawPie ;6
  38.  
  39.         call AddGrassInMap ;использует grassbuf
  40.  
  41.        call DrawPie ;7
  42.  
  43.    if !ATM ;TODO!!!
  44. ;add elements:
  45.       if ATM;USELMNBUF
  46.         call GenLMNList
  47.       endif
  48.         LD C,3 ;initial X
  49.       if !ATM;!USELMNBUF
  50.         ld hl,LMNGFX
  51.       else
  52.         ld hl,LMNlist ;впритык к концу параграфа
  53.       endif
  54. LMN0    LD A,10
  55.         CALL RNDA
  56.         ADD A,C
  57.         CP MASKWID-5 ;ширина элемента не более 10 знакомест
  58.         JR NC,LMNQ ;X too big - no more elements
  59.         LD C,A ;X
  60.       if ATM;USELMNBUF
  61.         ld b,(hl) ;N
  62.       endif
  63. ;LMN00
  64. ;        push bc
  65.       if ATM;USELMNBUF
  66.        push hl
  67.       endif
  68.         CALL PRLMN
  69.       if ATM;USELMNBUF
  70.        pop hl
  71.       endif
  72. ;        pop bc ;нельзя, PRLMN должен двигать C на ширину элемента
  73. ;        JR nc,LMN0
  74. ;;don't fit - next x ;а может, просто пропустить?
  75. ;        INC C ;don't fit, next x
  76. ;        LD A,C
  77. ;        CP MASKWID-5 ;ширина элемента не более 10 знакомест
  78. ;        JR C,LMN00;PRLMN00
  79.       if !ATM;!USELMNBUF
  80.         ld a,(hl)
  81.         or a ;end of gfx?
  82.       else
  83.         inc l
  84.       endif
  85.         JR nz,LMN0
  86. LMNQ
  87.     endif
  88.  
  89. ;clear table of y's (per column) usable for worms
  90.         XOR A
  91.         LD DE,TPLACES
  92.         LD (DE),A
  93.         INC E
  94.         JR NZ,$-2
  95.         LD LX,a;0
  96.         call FindUsableYsInMask ;create table of usable y's and count them in LX
  97.  
  98. ;place worms in TXY (x,y)
  99.         LD A,LX ;usable columns count
  100.        dec a
  101.         LD BC,+(Nobjects-1)*256+0xff ;B=QUANTITY OF WORMS + quantity of mines -1 (for off by 1 disivion)
  102.         INC C
  103.         SUB B
  104.         JR NC,$-2
  105.         LD A,C ;(usablecolumns-1)/(quantityofworms-1) = xstep (first worm placed in first usable column)
  106.         CP 7
  107.          jp c,nowhere ;xstep too small
  108. ;C=WIDTH OF WORM PLACE = typically 7..11
  109.         LD HL,TXY
  110.         ld e,0 ;x ;e=0 (column 0 not used)
  111.        ld b,1
  112.        jr SETXgo ;first worm in leftmost position
  113. SETX
  114.         LD B,C ;xstep
  115.         ;SRL B ;first x = xstep/2
  116. SETXgo
  117.        PUSH BC
  118. SETX0   INC E
  119.          ;ld a,e
  120.          ;cp MASKWID*4 -4
  121.          ;jr z,$ ;проверка на вшивость FIXME
  122.         LD A,(DE)
  123.         OR A
  124.         JR Z,SETX0 ;unusable column
  125.         DJNZ SETX0 ;find usable column that far
  126.         LD (HL),E ;x in TXY
  127.         INC L
  128.         LD A,(DE) ;y for this column
  129.         add a,SKYMASKHGT-4 ;мы проверяли y по маске, но маска под ногами червя, высота червя=8, в маске =4
  130.         RLCA
  131.         LD (HL),A ;y in TXY
  132.        
  133.        POP BC
  134.        ; LD A,C ;xstep
  135.        ; SUB B
  136.        ; LD B,A ;xstep-1 ;xstep - (xstep/2)
  137. SETX1  ; INC E
  138.        ; LD A,(DE)
  139.        ; OR A
  140.        ; JR Z,SETX1
  141.        ; DJNZ SETX1 ;skip so many usable columns
  142.  
  143.         INC L
  144.         JR NZ,SETX
  145.  
  146.        call DrawPie ;8
  147.  
  148.         jp SETWMS ;make worm structures from TXY (x,y coords)
  149.  
  150. MKMAPPP
  151. ;generate map contour
  152. ;out: CY=error
  153.         call ClearMap
  154.         call PrepareXorPixInMap
  155.  
  156.         LD HL,DIRECTN
  157.         LD DE,DTNTAB
  158.         LD bc,32
  159.         LDIR
  160.  
  161.         LD b,0 ;SCREEN (X) NO. -1=NOPRINT
  162.         LD C,b
  163.         CALL RND
  164.         AND 127
  165.         add a,28;48
  166.         LD e,A ;y
  167.         LD HL,DTNTAB+8   ;14
  168. MKMAP0  LD A,2;4
  169.         CALL RNDA ;direction change
  170.         CP 1;2
  171.         SBC A,0;1
  172.         ADD A,L ;+old direction
  173.         LD D,L ;old direction
  174.         LD L,A ;new direction
  175.         CALL TESTL
  176.         LD A,D ;old direction
  177.         SUB 5
  178.         LD D,A
  179.         LD A,L
  180.         SUB 5
  181.         XOR D
  182.         AND 8
  183.         CALL NZ,XorPixInMap ;e=y ;bc=x
  184.         PUSH HL
  185.         SLA L
  186.         LD A,(HL)
  187.         DEC A
  188.         POP HL
  189.         LD A,5
  190.         JP P,$+5
  191.         LD A,3
  192.         CALL RNDA
  193.         INC A
  194.         LD D,A ;steps in this direction
  195. MKMAP1  PUSH HL
  196.         SLA L
  197.         LD A,(HL)
  198.         OR A
  199.         CALL NZ,XorPixInMap ;e=y ;bc=x
  200.         LD A,(HL)
  201.         CP 128
  202.         JR C,MKMAPFW
  203.         ADD A,C
  204.         LD C,A
  205.         JR C,MKMAPBW
  206.         DEC b
  207.         JR MKMAPBW
  208. MKMAPFW CP 2
  209.         JR C,MKMAPN2
  210.         ;INC C
  211.         ;JR NZ,$+3
  212.         ;INC b
  213.         inc bc
  214.         CALL XorPixInMap ;e=y ;bc=x
  215.         LD A,1
  216. MKMAPN2 ADD A,C
  217.         LD C,A
  218.         JR NC,$+3
  219.         INC b
  220. MKMAPBW INC L
  221.         LD A,(HL)
  222.         ADD A,e
  223.         POP HL
  224.         CP 208 +TERRAINHGT-MAPHGT
  225.         JR C,MKMAPNY
  226.         LD A,17
  227.         SUB L
  228.         LD L,A
  229.         PUSH HL
  230.        SLA L
  231.        INC L
  232.         LD A,(HL)
  233.         ADD A,e
  234.         POP HL
  235. MKMAPNY LD e,A
  236.         DEC D
  237.         JR NZ,MKMAP1
  238.         LD A,b
  239.         CP 3;4 ;after LAST SCREEN
  240.         JR NZ,MKMAP0
  241.         ret
  242.  
  243. TESTL
  244.         LD A,L
  245.         CP 2
  246.         JR NC,TESTLNC
  247.         SUB -3
  248.         LD L,A
  249.         RET
  250. TESTLNC
  251.         CP 16
  252.         RET C
  253.         SUB 3
  254.         LD L,A
  255.         RET
  256.  
  257. GenLMNList
  258.        ld hl,LMNused
  259.        ld de,LMNused+1
  260.        ld bc,NLMN-1
  261.        ld (hl),0xff
  262.        ldir
  263. ;сначала генерируем список элементов, которые у нас будут использоваться (не более NLMNONMAP)
  264.         ld de,LMNlist ;впритык к концу параграфа
  265. genLMNlist0
  266. retryLMN
  267.         LD A,NLMN
  268.         CALL RNDA
  269.        ld l,a
  270.        ld h,LMNused/256
  271.        cp (hl)
  272.        jr z,retryLMN
  273.        ld (hl),a
  274.         ld (de),a
  275.         inc e
  276.         jr nz,genLMNlist0
  277.         ret
  278.  
  279. DIRECTN
  280.         DW #100,#1FF,#FF,#FF
  281.         DW -1,#FF00,#FF01,#FF02
  282.         DW 2,2,#102,#101,#100,#1FF,#FF,#FF
  283.  
  284. FindUsableYsInMask
  285. ;create table of usable y's and count them in LX
  286. ;LX=0
  287.        call SetPgMask
  288.         ld hl,MASK+MASKSZ-1 ;don't use last byte column
  289.         LD C,64
  290.         LD E,MASKWID*4-1 -4 ;don't use last byte column
  291. SETF    RLC C
  292.         RLC C
  293.         JR NC,$+3
  294.          DEC HL
  295.      if 0;ATM ;TODO fix!!!
  296.      ld b,MASKHGT-1 ;y
  297.      INC LX ;usable columns count
  298.      else
  299.         PUSH DE
  300.         PUSH HL
  301. ;снизу вверх смотрим столбец маски (бит 0,2,4 или 6 в C)
  302.         LD DE,-MASKWID
  303.         LD B,MASKHGT-1 ;y
  304. SETF0   ADD HL,DE
  305.         LD A,C
  306.         AND (HL)
  307.         JR NZ,SETF1 ;pixel in column
  308.         DJNZ SETF0
  309.         JR SETFQ ;unusable column
  310. SETF1   ADD HL,DE
  311.         DEC B
  312.         AND (HL)
  313.         JR NZ,SETF1 ;снизу вверх ищем, когда пиксели кончатся (червь будет на уступе)
  314.         INC LX ;usable columns count
  315. SETFQ   POP HL
  316.         POP DE
  317.      endif
  318.         LD A,B
  319.         LD (DE),A ;y place for this column
  320.         DEC E
  321.         JR NZ,SETF ;column 0 not used
  322.         ret
  323.