?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;процедуры для рисования оформления, нижнего уровня (зависят от типа экрана)
  2.  
  3. DrawPieHL
  4.  
  5. ;TODO
  6.  
  7.         ret
  8.  
  9. DrawPanel
  10. ;hl=panel
  11.         ex de,hl
  12.         call setpgsscr40008000
  13.         call SetPgTextureC000
  14.         ld bc,38*256+160
  15.         ld hl,0x4000+(40*162)
  16.        push bc
  17.        push de
  18.        push hl
  19.         call primgega_onescreen
  20.         ;call changescrpg
  21.         call setpgsscr40008000_current
  22.        pop hl
  23.        pop de
  24.        pop bc
  25.         call primgega_onescreen
  26.         ;call changescrpg
  27.         jp setpgsmain40008000
  28.  
  29. ;печать игрового сообщения
  30. DrawTitle
  31. ;hl=msg (len,text)
  32.         push hl
  33.         CALL UnDrawOldTitle
  34.         pop hl
  35.         LD A,15
  36.         LD (STCNTa),A
  37.         push hl
  38.         call setpgsscr40008000
  39.         call DrawTitle_screen
  40.         call setpgsscr40008000_current
  41.         pop hl
  42.         call DrawTitle_screen
  43.         LD (curdrawingtitle),HL
  44.         jp setpgsmain40008000
  45. DrawTitle_screen
  46.         LD C,(HL) ;len
  47.         INC L
  48.         LD A,40;32
  49.         SUB C
  50.        ;RET C
  51.         RRA ;x
  52.        SCRADDR 0,TITLEY
  53.        ld de,_
  54.        add a,e
  55.        ld e,a
  56.        jr nc,$+3
  57.        inc d
  58. MT0     LD A,(HL)
  59.         INC L
  60.         sub 32;CP 32
  61.         JR Z,MTSPC
  62.         PUSH HL
  63.         LD H,FONT88/256
  64.         add a,a
  65.         add a,a
  66.         add a,a
  67.         LD L,A
  68.         jr nc,$+3
  69.         inc h
  70.         LD B,8
  71.         call DrawCharHgtB
  72.         POP HL
  73. MTSPC   INC de ;scraddr
  74.         DEC C
  75.         JR NZ,MT0
  76.         ret
  77.  
  78. DrawCharHgtB
  79.        push de
  80. MT1
  81. ;TODO 16c font
  82. _left=1
  83. _right=8
  84.         xor a
  85.         rlc (hl)
  86.         jr nc,$+4
  87.         or _left
  88.         rlc (hl)
  89.         jr nc,$+4
  90.         or _right        
  91.         ld (de),a
  92.         ld a,d
  93.         add a,0x40
  94.         ld d,a
  95.         xor a
  96.         rlc (hl)
  97.         jr nc,$+4
  98.         or _left
  99.         rlc (hl)
  100.         jr nc,$+4
  101.         or _right        
  102.         ld (de),a
  103.         ld a,d
  104.         add a,0x20-0x40
  105.         ld d,a
  106.         xor a
  107.         rlc (hl)
  108.         jr nc,$+4
  109.         or _left
  110.         rlc (hl)
  111.         jr nc,$+4
  112.         or _right        
  113.         ld (de),a
  114.         ld a,d
  115.         add a,0x40
  116.         ld d,a
  117.         xor a
  118.         rlc (hl)
  119.         jr nc,$+4
  120.         or _left
  121.         rlc (hl)
  122.         jr nc,$+4
  123.         or _right        
  124.         ld (de),a
  125.         ld a,e
  126.         add a,40
  127.         ld e,a
  128.         ld a,d
  129.         adc a,-0x60
  130.         ld d,a
  131.         inc hl
  132.         DJNZ MT1
  133.        pop de
  134.         ret
  135.  
  136. UnDrawOldTitle
  137.         push hl
  138.        SCRADDR 8,TITLEY
  139.         ld hl,_
  140.         ld e,0 ;e=gfx byte
  141.         ld bc,8*256+24*4 ;b=hgt,c=wid (/2)
  142.         call climgega
  143.          ;TODO надрисовать панельку (её верхушки) с энергией
  144.         pop hl
  145.         ret
  146. climgega
  147. ;hl=scr
  148. ;e=gfx byte
  149. ;b=hgt,c=wid (/2)
  150.         push bc
  151.         call setpgsscr40008000
  152.         pop bc
  153.         push bc
  154.         push de
  155.         push hl
  156.         call climgega_onescreen
  157.         call setpgsscr40008000_current
  158.         pop hl
  159.         pop de
  160.         pop bc
  161.         call climgega_onescreen
  162.         jp setpgsmain40008000
  163.  
  164.        if 0
  165. climgega_xy
  166. ;h=y, l=x/2
  167. ;b=hgt,c=wid (/2)
  168. ;e=gfx byte
  169.        push bc
  170.         ld a,l
  171.         ld c,h
  172. ;a=x
  173. ;c=y
  174.         ld b,0
  175.         ld l,c ;y
  176.         srl a ;x bit 0
  177.          ld h,b;0
  178.          rl h
  179.          ;inc h
  180.         srl a ;x bit 1
  181.          rl h ;0x00/32/2 или 0x40/32/2
  182.         add hl,hl
  183.         add hl,hl
  184.         add hl,bc
  185.         add hl,hl
  186.         add hl,hl
  187.         add hl,hl ;y*40+scrbase
  188.          if scrbase&0xff
  189.          add a,scrbase&0xff
  190.          endif
  191. ;a=x/4
  192.         add a,l
  193.         ld l,a
  194.         adc a,h
  195.         sub l
  196.         ld h,a
  197.        pop bc
  198.        endif
  199. climgega_onescreen
  200. ;b=hgt,c=wid (/2)
  201. ;e=gfx byte
  202. ;hl=scr
  203. climgega0
  204.         push bc
  205.         ld hx,b
  206.         push hl
  207.         ld bc,40
  208. climgegacolumn0
  209.         ld (hl),e
  210.         add hl,bc
  211.         dec hx
  212.         jr nz,climgegacolumn0
  213.         pop hl
  214. ;0x4000,0x8000,0x6000,0xa000,0x4001
  215.         ld a,0x9f;0xa0, если не используем верхние 8 линий
  216.         cp h
  217.         ld bc,0x4000
  218.         adc hl,bc
  219.         jp pe,climgegacolumn0q ;в половине случаев
  220. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  221.          inc a ;если используем верхние 8 линий
  222.         xor h
  223.         ld h,a
  224. climgegacolumn0q
  225.         pop bc
  226.         dec c
  227.         jr nz,climgega0
  228.         ret
  229.  
  230. primgega_onescreen
  231. ;b=hgt,c=wid (/2)
  232. ;de=gfx
  233. ;hl=scr
  234.        push ix
  235. primgega0
  236.         push bc
  237.         ld hx,b
  238.         push hl
  239.         ld bc,40
  240. primgegacolumn0
  241.         ld a,(de)
  242.         inc de
  243.         ld (hl),a
  244.         add hl,bc
  245.         dec hx
  246.         jr nz,primgegacolumn0
  247.         pop hl
  248.         ld a,0x9f;0xa0
  249.         cp h
  250.         ld bc,0x4000
  251.         adc hl,bc
  252.         jp pe,primgegacolumn0q ;в половине случаев
  253. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  254.          inc a
  255.         xor h
  256.         ld h,a
  257. primgegacolumn0q
  258.         pop bc
  259.         dec c
  260.         jr nz,primgega0
  261.        pop ix
  262.         ret
  263.  
  264. windLA=0x4000+(176*40)+(165/8)+0x2000;#55B9 ;ширина 58
  265. windLAbit=0xb8;16 ;1=left;8=right
  266. windRA=0x4000+(176*40)+(255/8)+0x6000;#55B6 ;ширина 58
  267. windRAbit=0xb8;0x47;2 ;1=left;8=right
  268. windEA=0x4000+(187*40)+(165/8)+0x2000;#50F0 ;ширина 148
  269. windEAbit=0xb8;16 ;1=left;8=right
  270. windLAwid=58;47
  271. windEAwid=148;119
  272.  
  273. nrgPLOT
  274.         push bc
  275.         push af
  276.         call setpgsscr40008000
  277.         pop af
  278.         push af
  279.         call nrgPLOT_screen
  280.         call setpgsscr40008000_current
  281.         pop af
  282.         call nrgPLOT_screen
  283.         call setpgsmain40008000
  284.         pop bc
  285.         ;jr $
  286.         ;ret
  287. ;nrgGORIGHT
  288.         ld a,e
  289.         cpl;xor 2^16 ;1=left;8=right
  290.         ld e,a
  291.         rla;cp 8
  292.         ret c;nc
  293. NextColumn
  294.         ld a,h
  295.         xor 0x40^0x80
  296.         ld h,a
  297.         ret m ;>=0x80
  298.          ;bit 5,h
  299.          ;set 5,h
  300.         ld a,h
  301.         xor 0x20
  302.         ld h,a
  303.         and 0x20
  304.         ret nz
  305.          ;res 5,h
  306.         inc hl
  307.         ret
  308. nrgPLOT_screen
  309. ;CY=pix, e=mask, hl=scraddr
  310.         sbc a,a
  311.        ;and -(2*9);and 2*9
  312.        ;add a,4*9 ;color2 (dark grey)="0", color4 (light grey)="1"
  313.        and 2*9
  314.        add a,2*9 ;color2 (dark grey)="0", color4 (light grey)="1"
  315.         push hl
  316.         ld bc,40
  317.         ld d,6
  318. nrgPLOT_screen0
  319.         xor (hl)
  320.         and e
  321.         xor (hl)
  322.         ld (hl),a
  323.         add hl,bc
  324.         dec d
  325.         jr nz,nrgPLOT_screen0
  326.         pop hl
  327.         RET
  328.  
  329. DrawAttrField
  330.         RET
  331.  
  332. Hud_UnDrawTime
  333.         ;LD HL,(#5A62)
  334.         ;call Hud_ResetTimeAttrHL
  335.         ;ld de,0x3d00 ;space
  336.         ;ld b,d
  337.         ;ld c,e
  338.  
  339. ;TODO
  340.  
  341.         jr DrawTime_Go
  342. DrawTime
  343.        ld bc,(curtime)
  344.        bit 0,c
  345.        ret nz
  346.         ;LD D,61 ;ROM font FIXME
  347.       push bc
  348.        ld hl,numfont
  349.        ld c,b
  350.        ld b,0
  351.        add hl,bc
  352.        SCRADDR 1,140
  353.         ld de,_
  354.         call setpgsscr40008000
  355.         ld b,16
  356.         call DrawCharHgtB
  357.         inc de
  358.       pop bc
  359.        ld hl,numfont
  360.        ld b,0
  361.        add hl,bc
  362.         ld b,16
  363.         call DrawCharHgtB
  364.         jp setpgsmain40008000
  365.        
  366. DrawTime_Go
  367.  
  368. ;TODO
  369.  
  370.         RET
  371.  
  372. Hud_ResetTime
  373. Hud_ResetTimeAttrHL
  374.         RET
  375.  
  376. cls
  377. ;по идее не надо чистить панельку
  378. ;нельзя использовать OS_SETSCREEN - он используется в прерывании
  379.        if 1
  380.        SCRADDR 0,0
  381.         ld hl,_
  382.         ld e,0 ;e=gfx byte
  383.         ld bc,TITLEY*256+40*4 ;b=hgt,c=wid (/2)
  384.         jp climgega
  385.        else
  386.         ld e,0 ;color byte
  387.         OS_CLS
  388.         call changescrpg
  389.         halt
  390.         ld e,0 ;color byte
  391.         OS_CLS
  392.         jp changescrpg
  393.        endif
  394.  
  395. PR64
  396. ;de=scr
  397. ;a=char
  398.        push bc
  399.        push hl
  400.        push af
  401.         call setpgsscr40008000
  402.        pop af
  403.        push af
  404.         call PR64_screen
  405.         call setpgsscr40008000_current
  406.        pop af
  407.         call PR64_screen
  408.         call setpgsmain40008000
  409.         ex de,hl
  410.         call NextColumn
  411.         call NextColumn
  412.         ex de,hl
  413.        pop hl
  414.        pop bc
  415.         ret
  416. PR64_screen
  417.        push de
  418.         SUB 32
  419.         ADD A,A
  420.         ADD A,A
  421.         ADD A,A
  422.         LD L,A
  423.         LD H,FONT/256
  424.         jr nc,$+3
  425.         inc h
  426.         LD B,7
  427. PR640
  428. _left=1
  429. _right=8
  430.         xor a
  431.         rlc (hl)
  432.         jr nc,$+4
  433.         or _left
  434.         rlc (hl)
  435.         jr nc,$+4
  436.         or _right        
  437.         ld (de),a
  438.         ld a,d
  439.         add a,0x40
  440.         ld d,a
  441.         xor a
  442.         rlc (hl)
  443.         jr nc,$+4
  444.         or _left
  445.         rlc (hl)
  446.         jr nc,$+4
  447.         or _right        
  448.         ld (de),a
  449.         ld a,e
  450.         add a,40
  451.         ld e,a
  452.         ld a,d
  453.         adc a,-0x40
  454.         ld d,a
  455.         inc hl
  456.         DJNZ PR640
  457.        pop de
  458.         ret
  459.  
  460. ClearEnergyPanel ;не нужно для АТМ (на 6912 чистит грязь от генератора карты и ставит атрибуты сверху)
  461.         RET
  462.  
  463. PRSTAR
  464.  
  465. ;TODO
  466.  
  467.         RET
  468.  
  469. ENRAMKA
  470. ;hl=scr
  471.         call setpgsscr40008000
  472.        push hl
  473.         call EnRamka_onescreen
  474.         call setpgsscr40008000_current
  475.        pop hl
  476.         call EnRamka_onescreen
  477.         jp setpgsmain40008000
  478. EnRamka_onescreen
  479.         ld c,0xff
  480.         push hl
  481.         call EnRamka_horline
  482.         pop hl
  483.         ld b,RAMKAHGT-1
  484. EnRamka_onescreen0
  485.         push bc
  486.         ld de,40
  487.         add hl,de
  488.         push hl
  489.         ld a,c
  490.         and 0xb8 ;right
  491.         ld (hl),a
  492.         ld de,RAMKAWID-1
  493.         add hl,de
  494.         call NextColumn
  495.         call NextColumn
  496.         call NextColumn
  497.         ld a,c
  498.         and 0x47 ;left
  499.         ld (hl),a
  500.         pop hl
  501.         pop bc
  502.         djnz EnRamka_onescreen0
  503. EnRamka_horline
  504. ;c=color byte
  505.         ld a,c
  506.         and 0xb8 ;right
  507.         ld (hl),a
  508.         ld b,RAMKAWID*4-1
  509.         call ScrHorLine
  510.         ld a,c
  511.         and 0x47 ;left
  512.         ld (hl),a
  513.         ret
  514. ScrHorLine
  515. ;b=wid
  516. ;c=color byte
  517. EnRamka_horline0
  518.         call NextColumn
  519.         ld (hl),c
  520.         djnz EnRamka_horline0
  521.         RET
  522.  
  523. ENFAKE
  524. ;рисуем полную энергию у команды
  525. ;hl=scr
  526. ;c=color byte
  527.         push bc
  528.         call setpgsscr40008000
  529.         pop bc
  530.        push bc
  531.        push hl
  532.         call EnFake_onescreen
  533.         call setpgsscr40008000_current
  534.        pop hl
  535.        pop bc
  536.         call EnFake_onescreen
  537.         jp setpgsmain40008000
  538. EnFake_onescreen
  539.         ;ld c,0xff-((15-9)*9) ;color9 (yellow)
  540.         LD b,5
  541. ENFAKE0 push bc
  542.         PUSH HL
  543.         call NextColumn
  544.         ld a,c
  545.         and 0xb8 ;right
  546.         ld (hl),a
  547.         LD B,RAMKAWID*4-3
  548.         call ScrHorLine
  549.         ld a,c
  550.         and 0x47 ;left
  551.         ld (hl),a
  552.         POP HL
  553.         ld de,40
  554.         add hl,de
  555.         pop bc
  556.         djnz ENFAKE0
  557.         RET
  558.