'=+=+=+=+= S E T T I N G S =+=+=+=+= SENSITIVITY=0.125* 0.75 'FACTOR BETWEEN 0.5 AND 3 CENTER=1.5 '=+=+=+=+= S E T U P =+=+=+=+= BG COPY 0,0,20,16 TO 0,0 TOUCHSCREEN X0=0 Y0=0 X=0 Y=0 TX=0 TY=0 ACTIVE=0 C=0 '=+=+=+=+= L O O P =+=+=+=+= DO CALL TOUCH_PREPARE(C) CALL GEAR_SHIFTER(SENSITIVITY,CENTER,TX,TY,X0,Y0,X,Y,ACTIVE,C) WAIT VBL LOOP '=+=+=+=+= S U B P R O G R A M S =+=+=+=+= SUB TOUCH_PREPARE(C) CX=TOUCH.X\8 CY=TOUCH.Y\8 C=CELL.C(CX,CY) END SUB SUB GEAR_SHIFTER(SENSITIVITY,CENTER,TX,TY,X0,Y0,X,Y,ACTIVE,C) 'BEFORE EACH TOUCH IF TAP AND C>=2 AND C<=8 THEN 'SET TOUCH ORIGIN, ACTIVATE GUI ELEMENT TX=TOUCH.X TY=TOUCH.Y ACTIVE=1 'AFTER EACH TOUCH ELSE IF NOT(TOUCH) THEN 'SNAP X=INT(X+0.5) Y=INT(Y+0.5) 'FREE GEAR MOVES TO CENTER IF Y=0 THEN X=0 'SET THE ORIGIN POSITION X0=X Y0=Y 'REFRESH SPRITE SPRITE 0,X*8+14*8,Y*8+10*8,1 'DEACTIVATE GUI ELEMENT ACTIVE=0 END IF IF ACTIVE=1 THEN 'IF Y IS CLOSE TO THE CENTER (NO GEAR) IF INT(Y*CENTER+0.5)=0 THEN 'FREE X AND Y MOTION, BOTH CLAMPED BETWEEN +1 AND -1 X=X0+(TOUCH.X-TX)*SENSITIVITY Y=Y0+(TOUCH.Y-TY)*SENSITIVITY CALL CLAMP(X,-1,1) CALL CLAMP(Y,-1,1) 'SPRING: MOVE X TO ZERO X0=X0*0.9 'IN GEAR ELSE 'ONLY Y MOTION ALLOWED, CLAMPED BETWEEN +1 AND -1 Y=Y0+(TOUCH.Y-TY)*SENSITIVITY CALL CLAMP(Y,-1,1) 'X CHOOSES A PATH (VALUE IS ROUNDED) X=INT(X+0.5) 'SET THE ORIGIN X POSITION FOR THE SPRING TO WORK PROPERLY X0=X 'REMOVE INVISIBLE MOTION (SO THAT IT DOESN'T SHOOT) TX=TOUCH.X END IF 'REFRESH THE SPRITE SPRITE 0,X*8+14*8,Y*8+10*8,1 END IF END SUB SUB CLAMP(V,L,H) V=MIN(H,MAX(L,V)) END SUB #1:MAIN PALETTES 293F302000381500003C0C00003F3C00 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 00060F1F1F3F3E3C3C7EFFFFFFFF7E3C 00000000000000001818181F1F181818 0000000000000000181818FFFF181818 00000000000000001818181818181818 0000000000000000001F3F7F78707070 000000000000000000FFFFFF00000000 00000000000000007070707070707070 00000C04203000000000000000000000 #3:MAIN BG 00001410000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000800080008000800 08000800080008000800080000000000 00000000000000000000000000000000 08000800080008000800080008000800 08000800000000000000000000000000 00000000000000000800080008000800 08000800080008000800080000000000 00000000000000000000000000000000 08000800080008000800080008000800 08000800000000000000000000000000 00000000000000000800080005010601 06010601050908000800080000000000 00000000000000000000000000000000 08000800070104090409040907090800 08000800000000000000000000000000 00000000000000000800080007010201 03010209070908000800080000000000 00000000000000000000000000000000 08000800070104090409040907090800 08000800000000000000000000000000 00000000000000000800080005110611 06110611051908000800080000000000 00000000000000000000000000000000 08000800080008000800080008000800 08000800000000000000000000000000 00000000000000000800080008000800 08000800080008000800080000000000 00000000000000000000000000000000 08000800080008000800080008000800 08000800