Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1806 yogev_ezra 1
LP_levelp:
2
		mcall 40,100111b
3
		inc  [drag_flag]
4
		lodsb
5
		lodsw
6
    mov  byte[fx],al
7
    mov  byte[fy],ah
8
		and  dword[player],0
9
		and  dword[finish],0
10
    call get_xy_sf.count
11
    call erase_field
12
;    mov  [levptr],esi
13
	.bit2:
14
    mov  edx,8/2
15
    mov  edi,field
16
    lodsb
17
    mov  ecx,[cell_count]
18
  .lp:
19
  	mov  bl,al
20
  	rol  al,2
21
  	and  bl,11000000b
22
  	mov  [edi],bl
23
  	inc  edi
24
  	dec  edx
25
  	test edx,edx
26
  	jnz  .nxt
27
    mov  edx,8/2
28
		lodsb
29
	.nxt:
30
		loop .lp
31
    ret
32
 
33
LP_key:
34
		cmp  eax,0
35
		jl   LP_mouse
36
		cmp  eax,8
37
		jne  .nobsp
38
		cmp  [stepptr],0
39
		jne  .no1st
40
		mov  [jump],run.game
41
		ret
42
	.no1st:
43
		mov  [win_flag],0
44
		sub  [cur_step],2
45
		mov  esi,[cur_step]
46
		mov  edi,[finish]
47
		mov  eax,3
48
		movzx ebx,byte[esi]
49
		sub  eax,ebx
50
		movzx ecx,byte[esi+1]
51
	.lp0:
52
		and  byte[field+edi],0
53
		add  edi,[dirs+eax*4]
54
		loop .lp0
55
		mov  [finish],edi
56
		dec  [stepptr]
57
		ret
58
	.nobsp:
59
    cmp  eax,176
60
    jb   .ex
61
    cmp  eax,179
62
    ja   .ex
63
    sub  eax,176
64
  .ex:
65
    ret
66
 
67
LP_drawm:
68
		and  [pause_time],0
69
    mov  ecx,[cell_count]
70
  .lp:
71
    push ecx
72
    mov  bl,byte[field+ecx-1]
73
    push ebx
74
    lea  eax,[ecx-1]
75
    mov  ecx,eax
76
    call get_xy
77
 
78
    mov  al,bl
79
    and  al,0xf
80
    test bl,11000000b
81
    jnz  .noempty
82
    mov  esi,LP_aw
83
    mov  ecx,11
84
    call LP_draw_alert
85
    jmp  .no
86
  .noempty:
87
    mov  edx,0
88
    test bl,10000000b
89
    je   .stable
90
    mov  edx,0xffffff
91
    mov  esi,LP_aw
92
    mov  ecx,7
93
    jmp  .d13
94
  .stable:
95
    mov  esi,LP_em
96
    mov  ecx,9
97
	.d13:
98
    call LP_draw_alert
99
    mcall 13,[lx],[ly]
100
  .no:
101
  	mov  esi,[esp+4]
102
  	dec  esi
103
  	mov  edi,esi
104
  	mov  edx,0x0000FF
105
  ; ecx - cell #
106
  	test byte[esp],10b
107
  	je   .no_dn
108
  	add  edi,[dirs+4*1]
109
  	call getline
110
  .no_dn:
111
  	test byte[esp],1000b
112
  	je   .no_right
113
  	mov  edi,esi
114
  	add  edi,[dirs+4*3]
115
  	call getline
116
	.no_right:
117
  	pop  ebx
118
    pop  ecx
119
  .valid:
120
    loop .lp2
121
    jmp  .exlp
122
  .lp2:
123
  	jmp  .lp
124
  .exlp:
125
 
126
    mov  esi,[player]
127
    mov  edi,[finish]
128
    cmp  esi,edi
129
    je   .ex
130
    mov  edx,0x7777FF
131
    call getline
132
  .ex:
133
  	cmp  [pause_time],0
134
  	jne   .ex2
135
  	xor  ecx,ecx
136
  	xor  ebx,ebx
137
  	mov  edx,5
138
; eax - cur cell content, ebx - cell #, ecx - cell counter, edx - dir
139
	.chwin:
140
  	movzx eax,byte[field+ebx]
141
  	and  eax,0xf
142
  	btr  eax,edx
143
  	bsf  edx,eax
144
  	je   .ex3
145
  	inc  ecx
146
  	add  ebx,[dirs+edx*4]
147
  	jz   .ex3
148
  	xor  edx,11b
149
  	jmp  .chwin
150
  .ex3:
151
  	cmp  ecx,[cell_count]
152
  	jne  .ex2
153
  	mov  [win_flag],1
154
  .ex2:
155
    ret
156
 
157
LP_mouse:
158
		cmp  [win_flag],1
159
		je   .ex
160
    mov  [jump],still
161
    mov  edx,eax
162
		call get_last_mclick
163
    cmp  edx,-2
164
    jne  .no1st
165
		test eax,eax
166
		jnz  .noempty
167
		mov  eax,[player]
168
		mov  ebx,[finish]
169
		call get_offset
170
		mov  ecx,eax
171
		mov  edx,0x101
172
		shl  dl,cl
173
		xor  ecx,11b
174
		shl  dh,cl
175
		mov  ecx,ebx
176
		jecxz LP_drawm.ex2
177
		mov  esi,[player]
178
	.lp:
179
		xor  [field+esi],dl
180
		add  esi,[dirs+eax*4]
181
		xor  [field+esi],dh
182
		loop .lp
183
		xor  ebx,ebx
184
	.noempty:
185
		mov  [player],ebx
186
    jmp  .exx
187
  .no1st:
188
		test eax,eax
189
		jz   .ex
190
		mov  eax,[player]
191
		push ebx
192
		call get_offset
193
		pop  ebx
194
		cmp  eax,-1
195
		je   .ex
196
	.exx:
197
		mov  [finish],ebx
198
    mov  [jump],drw
199
;		ud2
200
	.ex:
201
		ret
202
 
203
 
204
LP_aw db 1001b,0110b
205
LP_em db 0000b,0001b,0010b,0100b,1000b
206
LP_ab	db 0011b,0101b,1100b,1010b,1001b,0110b
207
 
208
LP_draw_alert:
209
; al-cell, esi - ptr,ecx - len
210
	.lp:
211
		cmp  al,[esi]
212
		je   .ex
213
		inc  esi
214
		loop .lp
215
		pusha
216
		mov  ebx,[lx]
217
		mov  ecx,[ly]
218
		add  ebx,4-2 shl 16
219
		add  ecx,4-2 shl 16
220
		mcall 13,,,0xFFAAAA
221
		mov  [pause_time],eax
222
		popa
223
	.ex:
224
		ret
225
 
226
LP_level:
227
file 'loops.bin'
228
 
229
if lang eq ru
230
	LP_help mstr \
231
	'Через все клетки прямоугольника необходимо',\
232
	'провести замкнутую ломаную. Проходя через черный',\
233
	'кружок, ломаная обязана повернуть, а проходя',\
234
	'через белый кружок, ломаная поворачивать не',\
235
	'может. В пустых же клетках ломаная ведет себя как',\
236
	'захочет.','',\
237
	'http://puzzleprograms.narod.ru'
238
else
239
	LP_help mstr \
240
	'You have to draw closed line over every grid',\
241
	'cell. On black square line must turn, and it must',\
242
	'go straight when over white square. The line may',\
243
	'behave anyhow elsewhere.','',\
244
	'http://puzzleprograms.narod.ru'
245
end if