Добра этому дому.
Вот такой код:
[spoiler]
while(1)
	
	logwrite("cyc1")
	keypress(75)
	
	while(1)
		getscreen
		$l = pxlxor(1023, 1008, 1045, 1010)
		if($l ! 5921370)
			keypress(76)
			WAIT(2)
			goto(lDone)
		end_if
		WAITMS(30)
	end_cyc
	lDone:
	logwrite("lDone")
																							
	getscreen
	$Q = pxlxor (850,1006, 852, 1008)
	$E = pxlxor (897, 1012, 899, 1014)
	$R = pxlxor (935, 1006, 937, 1008)
	logwrite($Q)               //  3552822
	logwrite($E)               //  2960685 
	logwrite($R)               //  2763306
			
	if( ($Q ! 3552822) & ($E ! 2960685) & ($R ! 2763306) )    // åñëè áóòûëü
		logwrite("QER")
		QERsub()
	end_if
	
	$check = 0
	while($check = 0)
		logwrite("cyc2 ", $check)
	
		getscreen
		$Q = pxlxor (850,1006, 852, 1008)
		$E = pxlxor (897, 1012, 899, 1014)
		$R = pxlxor (935, 1006, 937, 1008)
		logwrite($Q)               //  3552822
		logwrite($E)               //  2960685 
		logwrite($R)               //  2763306
		
		if($Q ! 3552822)
			logwrite("Q")
			Qsub()
			logwrite("Qen")
			getscreen
			$1 = pxlxor (908, 940, 910, 942)
			logwrite($1)
			if($1 ! 5658198)
				logwrite("1")
				keypress(76)
				$check = 1
				goto(Ret)
			end_if
		else
			if($E ! 2960685)
				logwrite("E")
				Esub()
				logwrite("Een")
				getscreen
				$1 = pxlxor (908, 940, 910, 942)
				logwrite($1)
				if($1 ! 5658198)
					logwrite("1")
					keypress(76)
					$check = 1
					goto(Ret)
				end_if
			else
				if($R ! 2763306)
					logwrite("R")
					Rsub()
					logwrite("Ren")
					getscreen
					$1 = pxlxor (908, 940, 910, 942)
					logwrite($1)
					if($1 ! 5658198)
						logwrite("1")
						keypress(76)
						$check = 1
						goto(Ret)
					end_if
				end_if
			end_if
		end_if		
		WAITMS(30)
		Ret:
		logwrite("yeah ", $check)
	end_cyc			          
	logwrite("nope")				
end_cyc				
[/spoiler]
Выдает лог:
23:09:07 cyc1
23:09:29 lDone
23:09:29 3552822
23:09:29 2960685
23:09:29 7551502
23:09:30 cyc2 0
23:09:30 3552822
23:09:30 2960685
23:09:30 7551502
23:09:30 R
23:09:30 Rfu
23:09:31 Rlabel
23:09:31 Ren
23:09:32 5658198
23:09:32 yeah 1
23:09:33 nope
Видно, что программа заходит в "R-условие", Rfu  и Rlabel печатаются внутри функции Rsub, затем проверяется условие, что некторорая кнопка "1" горит (если 56..., то тусклая), кнопка оказывается тусклой, внутрь условной конструкции не заходит, доходит до конца цикла, при этом, $check с помощью какой-то магии оказался 1. 
Почему? У меня есть только одна гипотеза: интерпретатор переприсваивает $check значение даже если не заходит в условие. Но это очень странный подход. В чем моя ошибка?
P.S
Вообще, грустно без привычных сердцу "return", "continue" и "break"  (