Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 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