[Scummvm-cvs-logs] SF.net SVN: scummvm:[47708] scummvm/trunk/backends/platform/n64

Hkz at users.sourceforge.net Hkz at users.sourceforge.net
Sat Jan 30 13:53:08 CET 2010


Revision: 47708
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47708&view=rev
Author:   Hkz
Date:     2010-01-30 12:53:08 +0000 (Sat, 30 Jan 2010)

Log Message:
-----------
N64: Better analog nub acceleration, and added -mhard-float in CXXFLAGS when building

Modified Paths:
--------------
    scummvm/trunk/backends/platform/n64/Makefile
    scummvm/trunk/backends/platform/n64/osys_n64.h
    scummvm/trunk/backends/platform/n64/osys_n64_events.cpp

Modified: scummvm/trunk/backends/platform/n64/Makefile
===================================================================
--- scummvm/trunk/backends/platform/n64/Makefile	2010-01-30 11:59:05 UTC (rev 47707)
+++ scummvm/trunk/backends/platform/n64/Makefile	2010-01-30 12:53:08 UTC (rev 47708)
@@ -34,7 +34,7 @@
 
 LIBS += -lm -lstdc++ -lc -lgcc -lz -lnosys 
 
-CXXFLAGS = -g -mno-extern-sdata -O2 -fomit-frame-pointer -march=vr4300 -mtune=vr4300 -fno-rtti -fno-exceptions -Wno-multichar -Wshadow -I$(LIBN64PATH) -I$(TOOLPATH)/include -I./ -I$(srcdir) -I$(srcdir)/engines
+CXXFLAGS = -g -mno-extern-sdata -O2 -fomit-frame-pointer -march=vr4300 -mtune=vr4300 -mhard-float -fno-rtti -fno-exceptions -Wno-multichar -Wshadow -I$(LIBN64PATH) -I$(TOOLPATH)/include -I./ -I$(srcdir) -I$(srcdir)/engines
 LDFLAGS = -g -march=vr4300 -mtune=vr4300 -nodefaultlibs -nostartfiles -mno-crt0 -L$(LIBN64PATH) -L$(TOOLPATH)/lib $(LIBS) -T n64ld_cpp.x -Xlinker -Map -Xlinker scummvm.map
 
 TARGET = scummvm

Modified: scummvm/trunk/backends/platform/n64/osys_n64.h
===================================================================
--- scummvm/trunk/backends/platform/n64/osys_n64.h	2010-01-30 11:59:05 UTC (rev 47707)
+++ scummvm/trunk/backends/platform/n64/osys_n64.h	2010-01-30 12:53:08 UTC (rev 47708)
@@ -115,7 +115,7 @@
 
 	bool _mouseVisible;
 	volatile int _mouseX, _mouseY;
-	volatile int _tempMouseX, _tempMouseY;
+	volatile float _tempMouseX, _tempMouseY;
 	volatile int _mouseMaxX, _mouseMaxY;
 	int _mouseHotspotX, _mouseHotspotY;
 

Modified: scummvm/trunk/backends/platform/n64/osys_n64_events.cpp
===================================================================
--- scummvm/trunk/backends/platform/n64/osys_n64_events.cpp	2010-01-30 11:59:05 UTC (rev 47707)
+++ scummvm/trunk/backends/platform/n64/osys_n64_events.cpp	2010-01-30 12:53:08 UTC (rev 47708)
@@ -25,6 +25,8 @@
 
 #include "osys_n64.h"
 
+#include <math.h>
+
 // Pad buttons
 #define START_BUTTON(a) (a & 0x1000)
 #define A_BUTTON(a)     (a & 0x8000)
@@ -48,7 +50,7 @@
 #define CD_BUTTON(a)    (a & 0x0004)
 
 #define MOUSE_DEADZONE 0
-#define PAD_DEADZONE 0
+#define PAD_DEADZONE 1
 #define PAD_ACCELERATION 15
 #define PAD_CHECK_TIME 40
 
@@ -72,14 +74,20 @@
 		pad_mouseY = (_ctrlData.c[_mousePort].throttle >> 0) & 0xFF;
 	}
 
-	int32 mx = _tempMouseX;
-	int32 my = _tempMouseY;
+	float mx = _tempMouseX;
+	float my = _tempMouseY;
 
+	if (pad_analogX > 60) pad_analogX = 60;
+	else if (pad_analogX < -60) pad_analogX = -60;
+
+	if (pad_analogY > 60) pad_analogY = 60;
+	else if (pad_analogY < -60) pad_analogY = -60;
+
 	if (abs(pad_analogX) > PAD_DEADZONE)
-		mx += pad_analogX / (PAD_ACCELERATION - (abs(pad_analogX) / 20));
+		mx += tan(pad_analogX * (PI / 140));
 
 	if (abs(pad_analogY) > PAD_DEADZONE)
-		my -= pad_analogY / (PAD_ACCELERATION - (abs(pad_analogY) / 20));
+		my -= tan(pad_analogY * (PI / 140));
 
 	if (abs(pad_mouseX) > MOUSE_DEADZONE)
 		mx += pad_mouseX;
@@ -274,8 +282,8 @@
 	if ((curTime - _lastPadCheck) > PAD_CHECK_TIME) {
 		_lastPadCheck = curTime;
 
-		int32 mx = _tempMouseX;
-		int32 my = _tempMouseY;
+		float mx = _tempMouseX;
+		float my = _tempMouseY;
 
 		if (left_digital || right_digital || up_digital || down_digital) {
 			if (left_digital)
@@ -303,8 +311,8 @@
 		if ((mx != _mouseX) || (my != _mouseY)) {
 
 			event.type = Common::EVENT_MOUSEMOVE;
-			event.mouse.x = _tempMouseX = _mouseX = mx;
-			event.mouse.y = _tempMouseY = _mouseY = my;
+			event.mouse.x = _mouseX = _tempMouseX = mx;
+			event.mouse.y = _mouseY = _tempMouseY = my;
 
 			_dirtyOffscreen = true;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list