| 
					
				 | 
			
			
				@@ -528,32 +528,17 @@ PAL_JoystickEventFilter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          // X axis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         if (lpEvent->jaxis.value > 20000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         if (lpEvent->jaxis.value > 3200) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (g_InputState.dir != kDirEast) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.dwKeyPress |= kKeyRight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.dir = kDirEast; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.axisX = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         else if (lpEvent->jaxis.value < -20000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         else if (lpEvent->jaxis.value < -3200) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (g_InputState.dir != kDirWest) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.dwKeyPress |= kKeyLeft; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.dir = kDirWest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.axisX = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (g_InputState.prevdir != kDirEast && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.prevdir != kDirWest) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.dir = g_InputState.prevdir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.prevdir = kDirUnknown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.axisX = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -561,37 +546,64 @@ PAL_JoystickEventFilter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          // Y axis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         if (lpEvent->jaxis.value > 20000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         if (lpEvent->jaxis.value > 3200) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (g_InputState.dir != kDirSouth) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.dwKeyPress |= kKeyDown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.dir = kDirSouth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.axisY = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         else if (lpEvent->jaxis.value < -20000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         else if (lpEvent->jaxis.value < -3200) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (g_InputState.dir != kDirNorth) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.dwKeyPress |= kKeyUp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.dir = kDirNorth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.axisY = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (g_InputState.prevdir != kDirNorth && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.prevdir != kDirSouth) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               g_InputState.dir = g_InputState.prevdir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            g_InputState.prevdir = kDirUnknown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.axisY = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   case SDL_JOYHATMOTION: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Pressed the joystick hat button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      switch (lpEvent->jhat.value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_LEFTUP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dir = kDirWest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dwKeyPress = kKeyLeft; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_RIGHTDOWN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dir = kDirEast; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dwKeyPress = kKeyRight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_UP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_RIGHTUP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dir = kDirNorth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dwKeyPress = kKeyUp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_DOWN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_LEFTDOWN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dir = kDirSouth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dwKeyPress = kKeyDown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         case SDL_HAT_CENTERED: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.prevdir = (gpGlobals->fInBattle ? kDirUnknown : g_InputState.dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dir = kDirUnknown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            g_InputState.dwKeyPress = kKeyNone; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    case SDL_JOYBUTTONDOWN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // Pressed the joystick button 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -611,6 +623,58 @@ PAL_JoystickEventFilter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static VOID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+PAL_UpdateJoyStickState( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+VOID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ Purpose: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ Poll & update joystick state. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ Parameters: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ None. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ Return value: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ None. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ --*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   if( g_InputState.axisX == 1 && g_InputState.axisY >= 0 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dir = kDirEast; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dwKeyPress |= kKeyRight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   else if( g_InputState.axisX == -1 && g_InputState.axisY <= 0 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dir = kDirWest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dwKeyPress |= kKeyLeft; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   else if( g_InputState.axisY == 1 && g_InputState.axisX <= 0 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dir = kDirSouth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dwKeyPress |= kKeyDown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   else if( g_InputState.axisY == -1 && g_InputState.axisX >= 0 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dir = kDirNorth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dwKeyPress |= kKeyUp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.prevdir = g_InputState.dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      g_InputState.dir = kDirUnknown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if(!input_event_filter) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         g_InputState.dwKeyPress = kKeyNone; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if PAL_HAS_TOUCH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define  TOUCH_NONE    0 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1115,6 +1179,9 @@ PAL_ProcessEvent( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    while (PAL_PollEvent(NULL)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    PAL_UpdateKeyboardState(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if PAL_HAS_JOYSTICKS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   PAL_UpdateJoyStickState(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if PAL_HAS_TOUCH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    PAL_TouchRepeatCheck(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 |