Subversion Repositories Kolibri OS

Rev

Rev 31 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;--------------------------------------------------------------
  2. ;DRAW BLOCK
  3. ;
  4. ;--------------------------------------------------------------
  5. draw_block:     mov eax,13
  6.                 mov edx,[color_table+edx*4]
  7.  
  8.                 mov ebx,[current_block_x]
  9.                 mov ecx,[current_block_y]
  10.                 mov edi,[current_block_pointer]
  11.  
  12.                 sub ebx,BORDER_LEFT
  13.                 imul ebx,ADOBE_SIZE
  14.                 add ebx,X_LOCATION
  15.                 shl ebx,16
  16.                 mov bx,ADOBE_SIZE
  17.  
  18.                 sub ecx,BORDER_TOP
  19.                 imul ecx,ADOBE_SIZE
  20.                 add ecx,Y_LOCATION
  21.                 shl ecx,16
  22.                 mov cx,ADOBE_SIZE
  23.  
  24.                 mov dword [TMP_1],4
  25. adr_122:        mov dword [TMP_0],4
  26. adr_121:        cmp byte [edi],0
  27.                 je adr_120
  28.  
  29.                 int 040h
  30.  
  31.                 call draw_frames
  32.  
  33. adr_120:        inc edi
  34.                 add ebx,ADOBE_SIZE*65536
  35.                 dec dword [TMP_0]
  36.                 jnz adr_121
  37.                 sub ebx,4*ADOBE_SIZE*65536
  38.                 add ecx,ADOBE_SIZE*65536
  39.                 dec dword [TMP_1]
  40.                 jnz adr_122
  41.  
  42.                 ret
  43.  
  44. draw_frames:
  45.                  cmp edx,0
  46.                  jne df1
  47.                  ret
  48.              df1:
  49.                  pusha
  50.                  mov bx,1
  51.                  add edx,0x282828
  52.                  mov eax,13
  53.                  int 0x40
  54.                  popa
  55.  
  56.                  pusha
  57.                  mov cx,1
  58.                  add edx,0x282828
  59.                  mov eax,13
  60.                  int 0x40
  61.                  popa
  62.  
  63.                  pusha
  64.                  push ebx
  65.                  sub  bx,1
  66.                  add  [esp+2],bx
  67.                  pop  ebx
  68.                  mov  bx,1
  69.                  shr  edx,1
  70.                  and  edx,0x7f7f7f
  71.                  mov  eax,13
  72.                  int  0x40
  73.                  popa
  74.  
  75.                  pusha
  76.                  push ecx
  77.                  sub  cx,1
  78.                  add  [esp+2],cx
  79.                  pop  ecx
  80.                  mov  cx,1
  81.                  shr  edx,1
  82.                  and  edx,0x7f7f7f
  83.                  mov  eax,13
  84.                  int  0x40
  85.                  popa
  86.  
  87.                  ret
  88.  
  89. ;-------------------------------------------------------------
  90. ; FIX BLOCK
  91. ;-------------------------------------------------------------
  92. fix_block:      mov ebx,[current_block_pointer]
  93.  
  94.                 mov edx,[current_block_y]
  95.                 imul edx,LEN_X
  96.                 add edx,[current_block_x]       ;find the offset in tetris_t
  97.  
  98.                 add edx,table_tetris
  99.  
  100.                 mov ecx,4
  101.                 mov al,[current_block_color]
  102.  
  103. adr_21:         cmp byte [ebx],1
  104.                 jne adr_22
  105.                 mov [edx],al
  106. adr_22:         inc ebx
  107.                 inc edx
  108.  
  109.                 cmp byte [ebx],1
  110.                 jne adr_23
  111.                 mov [edx],al
  112. adr_23:         inc ebx
  113.                 inc edx
  114.  
  115.                 cmp byte [ebx],1
  116.                 jne adr_24
  117.                 mov [edx],al
  118. adr_24:         inc ebx
  119.                 inc edx
  120.  
  121.                 cmp byte [ebx],1
  122.                 jne adr_25
  123.                 mov [edx],al
  124. adr_25:         inc ebx
  125.                 add edx,LEN_X-3
  126.  
  127.                 loop adr_21
  128.                 ret
  129.  
  130. ;-------------------------------------------------------------
  131. ;NEW BLOCK
  132. ;-------------------------------------------------------------
  133. new_block:      mov dword [current_block_y],1
  134.                 mov dword [current_block_x],7
  135.  
  136.                 mov eax,dword [next_block_pointer]
  137.                 mov dword [current_block_pointer],eax
  138.  
  139.                 mov eax,dword [next_block_color]
  140.                 mov dword [current_block_color],eax
  141.  
  142.                 call random
  143.                 and al,7
  144.                 setz ah
  145.                 add al,ah
  146.                 mov [next_block_color],al
  147.  
  148.                 call random
  149.                 ;and eax,15
  150.             ; ---- Ivan ----
  151.                 and eax,0xff
  152.               @@:
  153.                 cmp eax,_MAXBLOCKS_
  154.                 jl  @f
  155.                 add eax,-(_MAXBLOCKS_)
  156.                 jmp @b
  157.               @@:
  158.             ; ---- Ivan ----
  159.                 mov edx,[block_table+eax*4]
  160.                 mov [next_block_pointer],edx
  161.  
  162.                 mov dword[delay],5
  163.                 sub dword[delay],speed
  164.  
  165.                 ret
  166.  
  167.  
  168. ;-------------------------------------------------------------
  169. ;DRAW TITLE BLOCK
  170. ;-------------------------------------------------------------
  171. draw_title_block:
  172. ;    movzx edx,byte [current_block_color]
  173.     mov eax,13
  174.  
  175. ;    mov edx,[color_table+edx*4]
  176.  
  177. ;    mov ebx,[current_block_x]
  178. ;    mov ecx,[current_block_y]
  179. ;    mov edi,[current_block_pointer]
  180.  
  181.     sub ebx,BORDER_LEFT
  182.     imul ebx,ADOBE_SIZE
  183.     add ebx,X_LOCATION
  184.     shl ebx,16
  185.     mov bx,ADOBE_SIZE
  186.  
  187.     sub ecx,BORDER_TOP
  188.     imul ecx,ADOBE_SIZE
  189.     add ecx,Y_LOCATION
  190.     shl ecx,16
  191.     mov cx,ADOBE_SIZE
  192.  
  193.     mov dword [TMP_1],5
  194.     call adr_122
  195.  
  196. ret
  197.  
  198. ;-------------------------------------------------------------
  199. ;FIRST BLOCK
  200. ;-------------------------------------------------------------
  201. first_block:    call random
  202.                 and al,7
  203.                 setz ah
  204.                 add al,ah
  205.                 mov [next_block_color],al
  206.  
  207.                 call random
  208.                 ;and eax,15
  209.             ; ---- Ivan ----
  210.                 and eax,0xff
  211.               @@:
  212.                 cmp eax,_MAXBLOCKS_
  213.                 jl  @f
  214.                 add eax,-(_MAXBLOCKS_)
  215.                 jmp @b
  216.               @@:
  217.             ; ---- Ivan ----
  218.                 mov edx,[block_table+eax*4]
  219.                 mov [next_block_pointer],edx
  220.  
  221. ;                call draw_next_block
  222.  
  223. ;                mov byte [delay],5 ;19 ;!!! 15
  224.                 ret
  225. ret
  226.  
  227. ;-------------------------------------------------------------
  228. ;DRAW NEXT BLOCK
  229. ;-------------------------------------------------------------
  230.  
  231. draw_next_block:
  232.                 movzx edx,byte [next_block_color]
  233.                 mov eax,13
  234.                 mov edx,[color_table+edx*4]
  235.  
  236.                 mov ebx,LEN_X+1
  237.                 mov ecx,5
  238.                 mov edi,[next_block_pointer]
  239.  
  240.                 sub ebx,BORDER_LEFT
  241.                 imul ebx,ADOBE_SIZE
  242.                 add ebx,X_LOCATION
  243.                 shl ebx,16
  244.                 mov bx,ADOBE_SIZE
  245.  
  246.                 sub ecx,BORDER_TOP
  247.                 imul ecx,ADOBE_SIZE
  248.                 add ecx,Y_LOCATION
  249.                 shl ecx,16
  250.                 mov cx,ADOBE_SIZE
  251.  
  252.                 mov dword [TMP_1],4
  253.                 jmp adr_122
  254.  
  255. ret
  256.  
  257. ;-------------------------------------------------------------
  258. ; ROTATE BLOCK
  259. ;-------------------------------------------------------------
  260.  
  261. rotate_block:
  262.                 mov  edx,[current_block_pointer]
  263.                 mov  edx,[edx+16]
  264.                 mov  esi,[current_block_pointer]
  265.                 mov  [current_block_pointer],edx
  266.                 call check_crash
  267.                 call attesa
  268.                 mov  [current_block_pointer],esi
  269.  
  270. ret
  271.  
  272.  
  273. ;-------------------------------------------------------------
  274. ; CHECK CRASH
  275. ; output        Z  flag => OK
  276. ;               NZ flag => NO
  277. ;-------------------------------------------------------------
  278.  
  279. check_crash:    mov ebx,[current_block_pointer]
  280.  
  281.                 mov edx,[current_block_y]
  282.                 imul edx,LEN_X
  283.                 add edx,[current_block_x]          ;find the offset in tetris_t
  284.  
  285.                 add edx,table_tetris
  286.  
  287.                 mov ecx,4
  288.                 xor ax,ax
  289.  
  290. adr_1:          cmp byte [ebx],1
  291.                 jne adr_2
  292.                 add al,[edx]
  293.                 adc ah,0
  294. adr_2:          inc ebx
  295.                 inc edx
  296.  
  297.                 cmp byte [ebx],1
  298.                 jne adr_3
  299.                 add al,[edx]
  300.                 adc ah,0
  301. adr_3:          inc ebx
  302.                 inc edx
  303.  
  304.                 cmp byte [ebx],1
  305.                 jne adr_4
  306.                 add al,[edx]
  307.                 adc ah,0
  308. adr_4:          inc ebx
  309.                 inc edx
  310.  
  311.                 cmp byte [ebx],1
  312.                 jne adr_5
  313.                 add al,[edx]
  314.                 adc ah,0
  315. adr_5:          inc ebx
  316.                 add edx,LEN_X-3
  317.  
  318.                 loop adr_1
  319.                 or ax,ax
  320.                 ret
  321.  
  322. ;--------------------------------------------------------------
  323. ;CHECK LINE
  324. ;--------------------------------------------------------------
  325. ;edx = pointer
  326. ;ebx = contatore
  327. check_full_line:
  328.                 std
  329.                 mov al,0
  330.                 mov edx,table_tetris+LEN_X*(LEN_Y-BORDER_BOTTOM)-1
  331.                 mov ebx,(LEN_Y-BORDER_TOP-BORDER_BOTTOM-1)*LEN_X
  332.  
  333. adr_5000:       mov edi,edx
  334.                 mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT
  335.                 repne scasb
  336.                 jz no_full_line
  337.  
  338.                 lea esi,[edx-LEN_X]
  339.                 mov edi,edx
  340.                 mov ecx,ebx
  341.                 rep movsb
  342.                 sub edi,BORDER_RIGHT
  343.                 mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT
  344.                 rep stosb
  345.  
  346.                 add dword [score],100
  347.                 add dword [lines],1
  348.  
  349. ;                mov esi,dword[score]
  350. ;
  351. ;
  352. ;
  353. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  354. ;
  355. ;                mov esi,dword [speed]
  356. ;                imul esi,linestonewlevel
  357. ;                add esi,linestonewlevel
  358. ;                cmp dword [lines],esi
  359. ;                jne  adr_5000                          1 line : 100
  360. ;                cmp dword[speed],4                     2 lines: 300
  361. ;                je  adr_51                             3 lines: 700
  362. ;                inc dword[speed]                       4 lines:1500
  363. ;                jmp adr_5000
  364. ;               adr_51:
  365. ;                mov dword[speed],0
  366. ;
  367. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  368.  
  369.  
  370.                 jmp adr_5000
  371.  
  372. no_full_line:   sub edx,LEN_X
  373.                 sub ebx,LEN_X
  374.                 jnz adr_5000
  375.  
  376.                 ret