0,0 → 1,376 |
;-------------------------------------------------------------- |
;DRAW BLOCK |
; |
;-------------------------------------------------------------- |
draw_block: mov eax,13 |
mov edx,[color_table+edx*4] |
|
mov ebx,[current_block_x] |
mov ecx,[current_block_y] |
mov edi,[current_block_pointer] |
|
sub ebx,BORDER_LEFT |
imul ebx,ADOBE_SIZE |
add ebx,X_LOCATION |
shl ebx,16 |
mov bx,ADOBE_SIZE |
|
sub ecx,BORDER_TOP |
imul ecx,ADOBE_SIZE |
add ecx,Y_LOCATION |
shl ecx,16 |
mov cx,ADOBE_SIZE |
|
mov dword [TMP_1],4 |
adr_122: mov dword [TMP_0],4 |
adr_121: cmp byte [edi],0 |
je adr_120 |
|
int 040h |
|
call draw_frames |
|
adr_120: inc edi |
add ebx,ADOBE_SIZE*65536 |
dec dword [TMP_0] |
jnz adr_121 |
sub ebx,4*ADOBE_SIZE*65536 |
add ecx,ADOBE_SIZE*65536 |
dec dword [TMP_1] |
jnz adr_122 |
|
ret |
|
draw_frames: |
cmp edx,0 |
jne df1 |
ret |
df1: |
pusha |
mov bx,1 |
add edx,0x282828 |
mov eax,13 |
int 0x40 |
popa |
|
pusha |
mov cx,1 |
add edx,0x282828 |
mov eax,13 |
int 0x40 |
popa |
|
pusha |
push ebx |
sub bx,1 |
add [esp+2],bx |
pop ebx |
mov bx,1 |
shr edx,1 |
and edx,0x7f7f7f |
mov eax,13 |
int 0x40 |
popa |
|
pusha |
push ecx |
sub cx,1 |
add [esp+2],cx |
pop ecx |
mov cx,1 |
shr edx,1 |
and edx,0x7f7f7f |
mov eax,13 |
int 0x40 |
popa |
|
ret |
|
;------------------------------------------------------------- |
; FIX BLOCK |
;------------------------------------------------------------- |
fix_block: mov ebx,[current_block_pointer] |
|
mov edx,[current_block_y] |
imul edx,LEN_X |
add edx,[current_block_x] ;find the offset in tetris_t |
|
add edx,table_tetris |
|
mov ecx,4 |
mov al,[current_block_color] |
|
adr_21: cmp byte [ebx],1 |
jne adr_22 |
mov [edx],al |
adr_22: inc ebx |
inc edx |
|
cmp byte [ebx],1 |
jne adr_23 |
mov [edx],al |
adr_23: inc ebx |
inc edx |
|
cmp byte [ebx],1 |
jne adr_24 |
mov [edx],al |
adr_24: inc ebx |
inc edx |
|
cmp byte [ebx],1 |
jne adr_25 |
mov [edx],al |
adr_25: inc ebx |
add edx,LEN_X-3 |
|
loop adr_21 |
ret |
|
;------------------------------------------------------------- |
;NEW BLOCK |
;------------------------------------------------------------- |
new_block: mov dword [current_block_y],1 |
mov dword [current_block_x],7 |
|
mov eax,dword [next_block_pointer] |
mov dword [current_block_pointer],eax |
|
mov eax,dword [next_block_color] |
mov dword [current_block_color],eax |
|
call random |
and al,7 |
setz ah |
add al,ah |
mov [next_block_color],al |
|
call random |
;and eax,15 |
; ---- Ivan ---- |
and eax,0xff |
@@: |
cmp eax,_MAXBLOCKS_ |
jl @f |
add eax,-(_MAXBLOCKS_) |
jmp @b |
@@: |
; ---- Ivan ---- |
mov edx,[block_table+eax*4] |
mov [next_block_pointer],edx |
|
mov dword[delay],5 |
sub dword[delay],speed |
|
ret |
|
|
;------------------------------------------------------------- |
;DRAW TITLE BLOCK |
;------------------------------------------------------------- |
draw_title_block: |
; movzx edx,byte [current_block_color] |
mov eax,13 |
|
; mov edx,[color_table+edx*4] |
|
; mov ebx,[current_block_x] |
; mov ecx,[current_block_y] |
; mov edi,[current_block_pointer] |
|
sub ebx,BORDER_LEFT |
imul ebx,ADOBE_SIZE |
add ebx,X_LOCATION |
shl ebx,16 |
mov bx,ADOBE_SIZE |
|
sub ecx,BORDER_TOP |
imul ecx,ADOBE_SIZE |
add ecx,Y_LOCATION |
shl ecx,16 |
mov cx,ADOBE_SIZE |
|
mov dword [TMP_1],5 |
call adr_122 |
|
ret |
|
;------------------------------------------------------------- |
;FIRST BLOCK |
;------------------------------------------------------------- |
first_block: call random |
and al,7 |
setz ah |
add al,ah |
mov [next_block_color],al |
|
call random |
;and eax,15 |
; ---- Ivan ---- |
and eax,0xff |
@@: |
cmp eax,_MAXBLOCKS_ |
jl @f |
add eax,-(_MAXBLOCKS_) |
jmp @b |
@@: |
; ---- Ivan ---- |
mov edx,[block_table+eax*4] |
mov [next_block_pointer],edx |
|
; call draw_next_block |
|
; mov byte [delay],5 ;19 ;!!! 15 |
ret |
ret |
|
;------------------------------------------------------------- |
;DRAW NEXT BLOCK |
;------------------------------------------------------------- |
|
draw_next_block: |
movzx edx,byte [next_block_color] |
mov eax,13 |
mov edx,[color_table+edx*4] |
|
mov ebx,LEN_X+1 |
mov ecx,5 |
mov edi,[next_block_pointer] |
|
sub ebx,BORDER_LEFT |
imul ebx,ADOBE_SIZE |
add ebx,X_LOCATION |
shl ebx,16 |
mov bx,ADOBE_SIZE |
|
sub ecx,BORDER_TOP |
imul ecx,ADOBE_SIZE |
add ecx,Y_LOCATION |
shl ecx,16 |
mov cx,ADOBE_SIZE |
|
mov dword [TMP_1],4 |
jmp adr_122 |
|
ret |
|
;------------------------------------------------------------- |
; ROTATE BLOCK |
;------------------------------------------------------------- |
|
rotate_block: |
mov edx,[current_block_pointer] |
mov edx,[edx+16] |
mov esi,[current_block_pointer] |
mov [current_block_pointer],edx |
call check_crash |
call attesa |
mov [current_block_pointer],esi |
|
ret |
|
|
;------------------------------------------------------------- |
; CHECK CRASH |
; output Z flag => OK |
; NZ flag => NO |
;------------------------------------------------------------- |
|
check_crash: mov ebx,[current_block_pointer] |
|
mov edx,[current_block_y] |
imul edx,LEN_X |
add edx,[current_block_x] ;find the offset in tetris_t |
|
add edx,table_tetris |
|
mov ecx,4 |
xor ax,ax |
|
adr_1: cmp byte [ebx],1 |
jne adr_2 |
add al,[edx] |
adc ah,0 |
adr_2: inc ebx |
inc edx |
|
cmp byte [ebx],1 |
jne adr_3 |
add al,[edx] |
adc ah,0 |
adr_3: inc ebx |
inc edx |
|
cmp byte [ebx],1 |
jne adr_4 |
add al,[edx] |
adc ah,0 |
adr_4: inc ebx |
inc edx |
|
cmp byte [ebx],1 |
jne adr_5 |
add al,[edx] |
adc ah,0 |
adr_5: inc ebx |
add edx,LEN_X-3 |
|
loop adr_1 |
or ax,ax |
ret |
|
;-------------------------------------------------------------- |
;CHECK LINE |
;-------------------------------------------------------------- |
;edx = pointer |
;ebx = contatore |
check_full_line: |
std |
mov al,0 |
mov edx,table_tetris+LEN_X*(LEN_Y-BORDER_BOTTOM)-1 |
mov ebx,(LEN_Y-BORDER_TOP-BORDER_BOTTOM-1)*LEN_X |
|
adr_5000: mov edi,edx |
mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT |
repne scasb |
jz no_full_line |
|
lea esi,[edx-LEN_X] |
mov edi,edx |
mov ecx,ebx |
rep movsb |
sub edi,BORDER_RIGHT |
mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT |
rep stosb |
|
add dword [score],100 |
add dword [lines],1 |
|
; mov esi,dword[score] |
; |
; |
; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; |
; mov esi,dword [speed] |
; imul esi,linestonewlevel |
; add esi,linestonewlevel |
; cmp dword [lines],esi |
; jne adr_5000 1 line : 100 |
; cmp dword[speed],4 2 lines: 300 |
; je adr_51 3 lines: 700 |
; inc dword[speed] 4 lines:1500 |
; jmp adr_5000 |
; adr_51: |
; mov dword[speed],0 |
; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
jmp adr_5000 |
|
no_full_line: sub edx,LEN_X |
sub ebx,LEN_X |
jnz adr_5000 |
|
ret |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |