|
|
|
Member 2 posts
Registered: Mar 2009
In QLive and Q3, I use in_mouse -1 and sensitivity 3.2
For some reason, these settings feel waaaay too slow in QW. Anybody know how to match them?
Member 705 posts
Registered: Feb 2006
tried the different in_mouse settings in ezQuake ? Also welcome to the forum!
Administrator 2059 posts
Registered: Jan 2006
A non-scientific way of doing it, that i use myself when reinstalling mouse drivers or Quake, is to always have some kind of reference move that normally feels comfortable. If it feels wrong after having installed Quake again then i adjust the sensitivity until i'm accurate in doing that move. I use a quick 180 degree turn myself, but for someone using a lower sensitivity it might be better with only 90 degrees or something. www.facebook.com/QuakeWorld
Member 401 posts
Registered: Mar 2006
Interesting. I use "sensitivity 2" in qw,q3,ql and tf2 and thats 13cm/360 in all of them.
Member 1435 posts
Registered: Jan 2006
Yes, ride your mouse from the left side to the right side of the mouse pad and measure how many turns you do in game. Then change the sensitivity so long after you finally get it right. Simple, works always, works everywhere.
Member 108 posts
Registered: Jun 2006
ezquake has raw mouse input (in_mouse 3, WM_INPUT), witch is the best input method but ql doesn't have it. There is a quake3.exe that implemented it with merging it with the original code from ezQuake. Also in_mouse -1 is in_mouse 1 qw, and in_mouse 1 in q3 is in_mouse 2 in qw. But i would recommend you to use in_mouse 3 since it is the best. in_mouse -1 is WM_MOUSEMOVE, in_mouse 3 is WM_INPUT The primary disadvantage to data from WM_MOUSEMOVE is that it is limited to the screen resolution. This means that if you move the mouse slightly — but not enough to cause the pointer to move to the next pixel — then no WM_MOUSEMOVE message is generated. So, using this method to read mouse movement negates the benefits of high-definition input.
The advantage to WM_MOUSEMOVE, however, is that Windows applies pointer acceleration (also known as ballistics) to the raw mouse data, which makes the mouse pointer behave as customers expect. This makes WM_MOUSEMOVE the preferred option for pointer control (over WM_INPUT or DirectInput), since it results in more natural behavior for users. While WM_MOUSEMOVE is ideal for moving mouse pointers, it is not so good for moving a first-person camera, since the high-definition precision will be lost ...
Processing WM_INPUT messages is more complicated than processing WM_MOUSEMOVE messages, but WM_INPUT messages are read directly from the Human Interface Device (HID) stack and reflect high-definition results. from http://msdn.microsoft.com/en-us/library/bb206183 info on quake3 with raw input: http://www.esreality.com/?a=post&id=1565939 If u get that exe and use in_mouse 3 in both and same yaw/pitch and sens i think it would be the same. btw should't this post be in the help section or maybe advanced configuration rather than rookies' corner?
News Writer 169 posts
Registered: Dec 2007
So what makes raw input better then direct input?
Member 401 posts
Registered: Mar 2006
In theory its better but I bet it won't improve your game.
Member 108 posts
Registered: Jun 2006
WM_INPUT
The second method of obtaining mouse data is to read WM_INPUT messages. Processing WM_INPUT messages is more complicated than processing WM_MOUSEMOVE messages, but WM_INPUT messages are read directly from the Human Interface Device (HID) stack and reflect high-definition results.
To read mouse movement data from the WM_INPUT message, the device must first be registered; the following code provides an example of this:
#ifndef HID_USAGE_PAGE_GENERIC #define HID_USAGE_PAGE_GENERIC ((USHORT) 0x01) #endif #ifndef HID_USAGE_GENERIC_MOUSE #define HID_USAGE_GENERIC_MOUSE ((USHORT) 0x02) #endif
RAWINPUTDEVICE Rid[1]; Rid[0].usUsagePage = HID_USAGE_PAGE_GENERIC; Rid[0].usUsage = HID_USAGE_GENERIC_MOUSE; Rid[0].dwFlags = RIDEV_INPUTSINK; Rid[0].hwndTarget = hWnd; RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]);
The following code handles WM_INPUT messages in the application's WinProc handler:
case WM_INPUT: { UINT dwSize = 40; static BYTE lpb[40]; GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)); RAWINPUT* raw = (RAWINPUT*)lpb; if (raw->header.dwType == RIM_TYPEMOUSE) { int xPosRelative = raw->data.mouse.lLastX; int yPosRelative = raw->data.mouse.lLastY; } break; }
The advantage to using WM_INPUT is that your game receives raw data from the mouse at the lowest level possible.
The disadvantage is that WM_INPUT has no ballistics applied to its data, so if you want to drive a cursor with this data, extra effort will be required to make the cursor behave like it does in Windows. For more information about applying pointer ballistics, see Pointer Ballistics for Windows XP
More information about WM_INPUT can be found at About Raw Input DirectInput
DirectInput is a set of API calls that abstracts input devices on the system. Internally, DirectInput creates a second thread to read WM_INPUT data, and using the DirectInput APIs will add more overhead than simply reading WM_INPUT directly. DirectInput is only useful for reading data from DirectInput joysticks; however, if you only need to support the Xbox 360 controller for Windows, then use XInput instead. Overall, using DirectInput offers no advantages when reading data from mouse or keyboard devices, and the use of DirectInput in these scenarios is discouraged.
Compare the complexity of using DirectInput, shown in the following code, to the methods previously decribed. The following set of calls are needed to create a DirectInput mouse:
LPDIRECTINPUT8 pDI; LPDIRECTINPUTDEVICE8 pMouse; hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&pDI, NULL ); if( FAILED(hr) ) return hr; hr = pDI->CreateDevice( GUID_SysMouse, &pMouse, NULL ); if( FAILED(hr) ) return hr; hr = pMouse->SetDataFormat( &c_dfDIMouse2 ); if( FAILED(hr) ) return hr; hr = pMouse->SetCooperativeLevel( hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND ); if( FAILED(hr) ) return hr; if( !bImmediate ) { DIPROPDWORD dipdw; dipdw.diph.dwSize = sizeof(DIPROPDWORD); dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); dipdw.diph.dwObj = 0; dipdw.diph.dwHow = DIPH_DEVICE; dipdw.dwData = 16; // Arbitrary buffer size if( FAILED( hr = pMouse->SetProperty( DIPROP_BUFFERSIZE, &dipdw.diph ) ) ) return hr; } pMouse->Acquire();
And then the DirectInput mouse device can be read each frame:
DIMOUSESTATE2 dims2; ZeroMemory( &dims2, sizeof(dims2) ); hr = pMouse->GetDeviceState( sizeof(DIMOUSESTATE2), &dims2 ); if( FAILED(hr) ) { hr = pMouse->Acquire(); while( hr == DIERR_INPUTLOST ) hr = pMouse->Acquire(); return S_OK; } int xPosRelative = dims2.lX; int yPosRelative = dims2.lY;
Summary
Overall, the best method to receive high-definition mouse movement data is WM_INPUT. If your users are just moving a mouse pointer, then consider using WM_MOUSEMOVE to avoid needing to perform pointer ballistics. Both of these window messages will work well even if the mouse isn't a high-definition mouse. By supporting high definition, Windows games can offer more precise control to users. guess that means less lag, (using the DirectInput APIs will add more overhead than simply reading WM_INPUT directly). Raw Input Model
Previously, the keyboard and mouse typically generated input data. The system interpreted the data coming from these devices in a way that eliminated the device-specific details of the raw information. For example, the keyboard generates the device-specific scan code but the system provides an application with the virtual key code. Besides hiding the details of the raw input, the window manager did not support all the new HIDs. To get input from the unsupported HIDs, an application had to do many things: open the device, manage the shared mode, periodically read the device or set up the I/O completion port, and so forth. The raw input model and the associated APIs were developed to allow simple access to raw input from all input devices, including the keyboard and mouse.
The raw input model is different from the original Microsoft Windows input model for the keyboard and mouse. In the original input model, an application receives device-independent input in the form of messages that are sent or posted to its windows, such as WM_CHAR, WM_MOUSEMOVE, and WM_APPCOMMAND. In contrast, for raw input an application must register the devices it wants to get data from. Also, the application gets the raw input through the WM_INPUT message.
There are several advantages to the raw input model:
* An application does not have to detect or open the input device. * An application gets the data directly from the device, and processes the data for its needs. * An application can distinguish the source of the input even if it is from the same type of device. For example, two mouse devices. * An application manages the data traffic by specifying data from a collection of devices or only specific device types. * HID devices can be used as they become available in the marketplace, without waiting for new message types or an updated OS to have new commands in WM_APPCOMMAND.
Member 2 posts
Registered: Mar 2009
Thanks! I got everything set up. btw, I'd just like to say that I'm very impressed with qworld and it seems you guys have a pretty nice community. Hope I didn't get into the game too late (although I hear some new leagues are starting up)
Member 252 posts
Registered: Dec 2006
/sensitivity is exactly the same in qw,q3,ql for me, (NOT THAT I PLAY q3 or ql) 'on 120 ping i have beaten mortuary dirtbox and reload' (tm) mz adrenalin 'i watched sting once very boring and not good at all' (tm) mz adrenalin [i]'i shoulda won all
Member 156 posts
Registered: Mar 2006
Hey dc0da. Welcome to QW and the forum. You have probably figured this out by yourself, but in case you're on IRC, check out #qwrookie on QuakeNet. Theres lots of people there to help you get started and it is also the best place to find a (more or less) equally skilled opponent. _________________________________________________________ Save a cow, crucify a christian!
|
|
|
|