Commit graph

1095 commits

Author SHA1 Message Date
Yamagi Burmeister
08f78ec3b5 Set SDL_EnableUNICODE() right after the window is created
This works around a bug in SDL 1.2 were the SDL_EnableUNICODE() state is
reset to false after the window is reacreated. Setting it in the render
backend ensures that no keystrokes are lost. This fixes #56.
2015-01-28 20:42:42 +01:00
Yamagi Burmeister
403d26d520 Process only keys between ASCII 32 and 126 as char events
This fixes bug #55 which ensued from special keys processed as char
and key events if SDL 1.2 was used.
2015-01-21 17:38:21 +01:00
Yamagi Burmeister
59ac327aba Solve some layer violations
- Handling of key combinations like Alt + Return or Shift + Escape
  clearly belong into the frontend. Now that the client won't clear
  the keystates any more it's save to handle them there.

- The 'force_centerview' command belongs into the client move stuff.
  I guess it was part of the backend sinces it messes with mouse
  handling. Since the renderer is now part of the client that's not
  necessary anymore.

- One can argue that +mlook and -mlook belong into client move stuff,
  too. But since we need there calculations in the backend anyway,
  leave things like they are.
2015-01-18 09:31:37 +01:00
Yamagi Burmeister
30fa1c5407 Use character events for some input subsystems
Until now Quake 2 used keysyms aka key events for everything, including
the console and the chat window. Since key events don't reflect if the
shift key is pressed, Quake 2 needed to convert the lower case chars to
upper case char through a hardcoded table. That lead to the problem that
the keyboard layout was utilised for lower case characters only.

Solve this long standing problem by refactoring both the input backend
and the frontends Key_Event() funktion to use character events for most
input subsystem. Character events are generated by SDL and send the
real character.

An example:
- On german keyboards shift and . is : but Quake 2 generated <.
- Now a character event with : is generated and used.

There are at least 3 disadvantes by this approach:
- The backend needs to tell the frontend if a normal character (ASCII
  32 to 126) or a special character is send. Only normal characters can
  be treated as character events.
- There may be some differences between the binding of a key seen
  through the console and seen by the game. If you have a german
  keyboard and bind :, the game may not react to :. This can be worked
  around by editing the config file.
- Users may need to rebind some keys.

Please note that Quake 2 can handle ASCII characters only!
2015-01-18 09:30:53 +01:00
Yamagi Burmeister
db10e0db87 Untangle the input system from the refresher
In the old times the refresher was a stand alone DLL. For performance
reasons and to avoid laggy input parts of the input system were
implemented in this DLL. Now that the renfresher is part of the main
binary and initialized at client startup we can remove most of the
abstractions between input system, refresher and client. Also the
input system can be treated as a normal subsystem.

Changes:
- Untangle the VID_* stuff and the IN_* stuff. The functions
  called by function pointers in in_state are now called directly
  and 'struct in_state' was removed.

- Remove input.h and rename the appropriate backend functions.
  There's no longer a need for an abstraction layer between the
  input backend and the input frontend.

- Move input initialization and shutdown into CL_Init(), like it's
  already done for all other subsystems.

- Remove Key_ClearStates(). I'm pretty sure that's a left over from
  the old Win 9x backends and unnecessary.

- General cleanup.
2015-01-16 18:23:39 +01:00
Daniel Gibson
5e33152f6a One entity shooting another should work even if friendly fire is off
In rogue's RHANGAR1 the turret didn't blow up the ceiling when friendly fire
was off, because in ClientTeam() both entities were set to "" (no team),
but OnSameTeam() just did a strcmp() instead of checking this special
case (no team).
We check this now and thus it works. Hooray.
I also refactored ClientTeam() to take the buffer instead of using a
static one and to be static (it's only called by OnSameTeam() anyway).

The savegame table entry for this function was invalid, but it doesn't
need to be saved anyway, so I just deleted it from the table.
2014-11-30 17:58:18 +01:00
Yamagi Burmeister
47634e64e8 Rename the 'ogg volume' functions to 'ogg enable'
These functions never set the OGG volume, the just enables or disabled
OGG playback. Rename them to match their purpose.
2014-10-25 09:40:13 +02:00
Yamagi Burmeister
4d5cb5686d Rename the "cdvolume" functions to "cdenable"
Historicaly this functions were used to adjust the cd music volume. In
YQ2 they were converted to enable or disable the cd music. Change their
name to match their current purpose.
2014-10-25 09:31:44 +02:00
Yamagi Burmeister
7742cd4893 Fix indention 2014-08-24 10:26:50 +02:00
Yamagi Burmeister
bffed68b2c Simplify preprocessor magic and fix dedicated server build 2014-08-24 10:24:05 +02:00
Yamagi
637aae9021 Merge pull request #50 from bibendovsky/lpf
Fix underwater sfx in demos
2014-08-23 16:42:07 +02:00
bibendovsky
120bb86458 Simplify PM_CalculateWaterLevelForDemo 2014-08-18 19:21:45 +03:00
bibendovsky
74c8c60e38 Turn off underwater sfx on disconnect 2014-08-17 18:58:26 +03:00
bibendovsky
1a514560da Fix underwater sfx in demos 2014-08-03 19:32:56 +03:00
Yamagi Burmeister
0ac4fdccfc A comparision "array != NULL" is always true 2014-08-03 11:10:22 +02:00
Yamagi Burmeister
f6a48b44bf Use the correct abs() flavor 2014-08-03 10:49:33 +02:00
Yamagi Burmeister
c0b27a8bb4 Revert "OpenGL-ES converstion"
This reverts commit 70eef55ab5.

It was premature to merge this commit into HEAD. Maybe we'll try again
one day, but only if a complete and fully working patch with build
system integartion is provided.
2014-08-03 09:34:32 +02:00
Rohit Nirmal
77492cd2f1 Fix some typos. 2014-07-30 20:58:09 -05:00
Yamagi Burmeister
5a7950683d Rewrite COM_FileExtention()
COM_FileExtension() was parsing strings from beginning to end, bailing
out as soon as '.' was found and treating everything thereafter as the
file extension. That behavior caused problem with relatives pathes like
models/monsters/tank/../ctank/skin.pcx. The new implementation uses
strrchr() to determine the last '.'.

This fixes issue #48. The bug was introduced in e07294b which replaced
hand rolled code with COM_FileExtention().
2014-07-24 21:03:00 +02:00
Yamagi Burmeister
3fc549ca42 Implement scaling of several non-menu elements
- The loading plaque
- The pause plaque
- The "Quit Screen"
2014-06-24 19:39:18 +02:00
Yamagi Burmeister
af70f276a9 Implement scaling of the menu
This commit has some drawbacks:
- It's rather hacky. The Quake II menu is crap and was never intended
  to be scaled. My approach was to add scaling to most of the generic
  functions and handle all the special cases in the non generic parts
  of the menu. A better solution would require to rewrite at least
  parts of the menu. And like it's said in qmenu.c: I won't do that.
- Some menu elements are aligned to the right, others to the left. In
  many places magic numbers are used to align elements by hand. This
  makes it very hard to impossible to implement a scaling logic which
  works in all situations. With this approach most menus look good up
  to at least a scaling factor of 3. Especially the "Player Setup"
  menu is very problematic at small disalignements are unavoidable.

Please note, that only the menu system itself is scaled. Some elements
like the the "Quit Screen" or the loading plaque are still missing. They
will be done in a later commit.
2014-06-24 19:39:10 +02:00
Yamagi Burmeister
2795088e86 Initialize the screen handling code before the renderer
This change is needed to break a otherwise fatal cycle:
- The renderer calls VID_MenuInit()
- VID_MenuInit() calls SCR_GetMenuScale()
- SCR_GetMenuScale() relies on gl_menuscale which is still
  uninitialized at this time.
2014-06-24 19:11:53 +02:00
Yamagi Burmeister
97139029b0 Implement gl_menuscale 2014-06-24 19:11:46 +02:00
Yamagi Burmeister
61667bd03d Decouple gl_hudscale and gl_consolescale 2014-06-23 08:09:01 +02:00
Yamagi Burmeister
869ce24922 Hide console scaling behin gl_consolescale
With this change it's possible to scale the HUD but not the console.
And vice versa.
2014-06-21 18:54:57 +02:00
Yamagi Burmeister
074891a8a2 Implement gl_hudscale for the console
After this change the HUD scaling is applied to the console and notify
messages. This was requested by many users.
2014-06-21 18:17:12 +02:00
bibendovsky
c1a3526a67 Add underwater sfx for SDL backend 2014-06-16 08:45:39 +03:00
bibendovsky
1dc71dbd97 Remove static keyword on some variables (these actually not static)
Caused by 1e52d35e84
2014-06-13 15:43:34 +03:00
bibendovsky
e4bb8b25a3 Fix compiling under Visual C++ when OggVorbis playback enabled 2014-06-13 14:07:56 +03:00
bibendovsky
8a28470a7a Enable TGA sky textures when retexturing is disabled 2014-06-10 10:45:49 +03:00
bibendovsky
1e52d35e84 Do not update mouse cursor position when paused, in menu, etc 2014-06-10 10:43:53 +03:00
bibendovsky
5d4c165b19 Stop Visual C++ to complain about uninitialized variable 2014-06-10 10:42:44 +03:00
bibendovsky
1ee09e3c20 Fix compiling under Visual C++ 2014-06-10 10:35:28 +03:00
bibendovsky
a53f321bed Use proper API to get pointers to OpenAL EFX extensions 2014-06-10 10:23:43 +03:00
Yamagi Burmeister
6c3fb38721 Merge remote-tracking branch 'opengles/master'
This integrates the backends for the pandora, gcw and gph written by
Scott "Pickle" Smith. Only the code itself is supplied, but no build
system integration.
2014-06-09 14:37:09 +02:00
Yamagi Burmeister
a0e7c67597 Bump version to 5.23 2014-05-08 17:24:09 +02:00
svdijk
013ad4aa45 screen: simplify SCR_GetHUDScale. 2014-05-08 04:12:39 +02:00
svdijk
9ae8192f04 video: revert commit 97e149ba9e, implement a better fix for this. 2014-05-07 18:21:12 +02:00
svdijk
6ced6809c6 savegame: update gamefunc_{decs,list}.h, for completeness sake. 2014-05-06 22:03:08 +02:00
svdijk
2b66ce0372 screen: move the SCR_DrawCrosshair declaration to the header. 2014-05-06 19:55:43 +02:00
svdijk
1d81f2e2b6 screen: auto-scale the HUD when gl_hudscale < 0. 2014-05-06 19:45:11 +02:00
svdijk
9be6a7ec46 videomenu: minor tweak regarding the aniso filtering option. 2014-05-05 18:31:08 +02:00
svdijk
092e7e1888 SCR_ExecuteLayoutString: also apply scale to xl and yt to avoid overlap. 2014-05-04 21:07:23 +02:00
svdijk
d823940370 Also apply gl_hudscale cvar to the inventory. 2014-05-04 21:05:56 +02:00
svdijk
ba16e501d2 videomenu: minor cvar ordering change. 2014-05-04 20:47:52 +02:00
svdijk
4e8a5565a9 videomenu: remove obsolete options, some cleanup. 2014-05-04 20:44:29 +02:00
svdijk
af852ea5bd videomenu: add an "aniso filtering" option. 2014-05-04 20:26:12 +02:00
svdijk
97e149ba9e video: avoid artefacts when resizing the viewsize when paused. 2014-05-04 16:05:32 +02:00
svdijk
6b79e31d8d videomenu: correct the "screensize" slider range. 2014-05-04 13:39:05 +02:00
svdijk
a7edd7c466 video: apply changes to gl_anisotropic immediately. 2014-05-01 21:20:00 +02:00
svdijk
3bb9f49f19 videomenu: readd 16x MSAA option, check what we got after setting mode. 2014-05-01 20:52:25 +02:00
Daniel Gibson
7ace8c9116 Implementing gl_hudscale cvar to scale the HUD
because it's so small in high resolutions and I'm an old man with bad
eyes.
2014-04-25 21:24:26 +02:00
svdijk
a2b6f1b7af videomenu.c: remove unsupported "16x" option from MSAA list. 2014-04-20 03:12:13 +02:00
svdijk
a0ca33901e videomenu.c: minor fix regarding the multisampling option. 2014-04-19 13:00:12 +02:00
svdijk
0973c1de10 videomenu.c: consistent capitalization. 2014-04-17 20:25:39 +02:00
svdijk
5b6f351e67 refresh.c: some minor tuning/cleaning. 2014-04-17 20:14:42 +02:00
svdijk
04c5b881a2 Video menu: add msaa option. 2014-04-16 22:47:23 +02:00
svdijk
d089159ab9 VID: Implement a fallback when MSAA is not supported. 2014-04-16 21:51:36 +02:00
svdijk
ec8edb5d3b Video menu: add vsync option. 2014-04-12 15:03:40 +02:00
svdijk
4d201b3ff0 OpenAL: fix lagging audio when leaving the menu. 2014-04-12 14:27:10 +02:00
svdijk
3d2ff6795d R_ScreenShot: set GL_PACK_ALIGNMENT to 1 for glReadPixels. 2014-03-30 17:30:58 +02:00
svdijk
1fd8a853d1 R_ScreenShot: add another sanity check. 2014-03-30 16:32:36 +02:00
svdijk
ded9ed51ea R_ScreenShot: abort if malloc fails. 2014-03-29 19:52:24 +01:00
svdijk
e86aabc949 Menu: make sure spincontrols don't start out of range. 2014-03-29 18:50:48 +01:00
svdijk
219882dafa Make default video mode consistent, some comment/whitespace changes. 2014-03-28 21:12:15 +01:00
svdijk
503eefc301 Simplify the mouse grabbing/relative mode setting code. 2014-03-26 21:13:07 +01:00
svdijk
5338566852 Fix broken mouse release while in menu/console. 2014-03-26 20:51:02 +01:00
svdijk
69661e7cbd Implement a different workaround for when SDL_SetRelativeMouseMode() doesn't work.
This fixes the "stuttering mouse" reported in issue #38.
2014-03-26 20:34:19 +01:00
Yamagi Burmeister
5ce3a266e9 Force OpenGL path for light primitives
This fixes a long standing and until now unnoticed bug with negative
colored dynamic lights. Since we never set the OpenGL renderer as out
renderer, remaining softrenderer code was executed and the corresponding
effects never rendered. This manifested itself in missing darkness
around the "gravity well" in rogue.
2014-02-12 19:39:23 +01:00
Yamagi Burmeister
37dd396f36 Bump version to 5.22 2014-02-08 10:14:24 +01:00
Yamagi Burmeister
d0d81cf3ac Revert "Define HAVE_BOOLEAN on Windows"
This reverts commit 5e1419e6ba. It was a
bad idea, breaking 64 bit compatiblity on Windows. It should have never
been committed...
2014-01-28 08:13:21 +01:00
Yamagi Burmeister
eb879bb9b6 Rename VERSION to YQ2VERSION to prevent collisions
Newer jpeg versions (I guess starting with 9) define an macro
"VERSION", colliding with ours. While wie could #undef it, take
the less hacky route and rename it.
2014-01-27 18:14:36 +01:00
Yamagi Burmeister
5e1419e6ba Define HAVE_BOOLEAN on Windows
Without this define newer versions of jpeg define a type "bool" as char,
while the MinGW headers define it as "unsigned short". Automake should
have detected that, but...
2014-01-27 17:28:59 +01:00
Yamagi Burmeister
93b38c6312 Define macros needed by 26bbfea.
The code used build fine on my workstation, since Mesa3D has the
required macros since ever. But on Windows gl.h is still limited
to OpenGL 1 (really?).
2014-01-27 17:26:33 +01:00
Yamagi Burmeister
26bbfead45 Add support for MSAA.
MSAA was a long wanted and often requested feature. Just set set the
desired number of samples with gl_msaa_samples and do a vid_restart.
This code is based upon work done in Hecatomb.
2014-01-26 09:53:10 +01:00
Yamagi Burmeister
825a53009a Provide a workaround if SDL_GetRelativeMouseState() is disfunctional
On some systems SDL_SetRelativeMouseMode() can fail under several
circumstances. For example:
 - Security software is blocking acces to raw input.
 - XInput 2 is unavailable.
 - SDL2s configure script has messed up.
Detect those situations and reposition the mouse manually to the
window center after having read it's current state. This fixes
issue #34 an #35.
2014-01-25 15:46:55 +01:00
Yamagi Burmeister
68d3da29e8 Destroy the window after the GL context.
The GL context is bound to a window, so destroy it before the window and
not after it. While here update the header comment.
2014-01-23 17:23:16 +01:00
svdijk
98a83e2322 Minor input grabbing cleanup. 2014-01-11 19:01:04 +01:00
svdijk
b33c895d56 Whitespace 2014-01-05 20:32:18 +01:00
svdijk
50e1bf16fe Fix key-repeats in the console (for instance the backspace key) 2014-01-05 20:22:34 +01:00
Yamagi Burmeister
84a1766702 Merge input backend init and keyboard init
Now that the refresher is part of the client, there's no need to init
the backend before the refresher and the keyboard after it.
2014-01-05 18:58:52 +01:00
Yamagi Burmeister
e8239291a7 Remove unnecessary IN_Close()
Having a special function to close the input devices is unnecessary. The
backend should close them at shutdown, when IN_BackendShutdown() is
called.
2014-01-05 18:53:03 +01:00
Yamagi Burmeister
18733b68ce Do not allow input devices to write to command buffer
Input devices should send key events and nothing more. The ability to
add commands into the input buffer was used by the joystick code
(removed long time ago) and as a dirty hack to work around limitations
of DirectInput.
2014-01-05 18:51:27 +01:00
Yamagi Burmeister
f80e02ffd9 Refactor the SDL input backend once again.
- Remove the keyq. This linked list was used to work around limitations
  of the good, old DirectInput API. It's not necessary with SDL.
- Inline some functions to others where apropriate and remove unused
  or unnecessary functions.
- Reorder functions into groups.
- Update comments.

This commits still misses necessary changes to the frontend. They'll be
done in subsequential commits.
2014-01-05 18:40:24 +01:00
svdijk
7111f735f7 Fix a (harmless) off-by-one in a SDL_VideoDriverName() call 2014-01-05 17:44:29 +01:00
Yamagi Burmeister
a6b911a9a8 Bump version number to 5.21 2014-01-01 11:25:36 +01:00
Yamagi Burmeister
be14aea08d Add an signal handler for SIGINT and SIGTERM
This allows the user to shut the client down by pressing ctrl-c in it's
terminal or by sendig SIGTERM.
2014-01-01 11:17:28 +01:00
Yamagi Burmeister
fd1e55d18d Do not set the FPU to single precision on Windows
We had dual precision since ever on 64 bit unixoid systems and it "just
worked". So there should be no reason to still force Windows down to
single precision.  The performance impact should be negligible.
2013-12-31 13:18:05 +01:00
Yamagi Burmeister
8102e1a021 Move entitycmpfnc() to cl_view.c an reimplement it
This function is only used in cl_view.c, so no need for external
declaration. Reimplement it in a sane and on all platform 64 bit
clean way. This allows us to finally remove the horible INT macro.
2013-12-31 12:47:18 +01:00
Yamagi
78b974d3ca Merge pull request #28 from alericoveri/qgl_cleanup
QGL renundancy cleanup
2013-12-31 03:14:55 -08:00
Daniel Gibson
3afe57b8f2 Fix #29 by simplifying mouse button handling
Pressing two mouse buttons at the same time didn't work properly, only
one had effect, e.g. when pressing LMB to walk forward and RMB to shoot
(when bound like that...)

Not sure why that was, but the old mouse button handling (inherited from
the super-old win32 backend where it was supposed to work around bugs in
WinAPI or whatever, where sometimes there were two mouse button presses
in one event or something) was unnecessarily complicated anyway so I
replaced it with something simpler.
2013-11-26 19:22:29 +01:00
Alejandro Ricoveri
1cfb5c67d5 QGL renundancy cleanup
Despite QGL is only handling GL extensions, there was a little code renundancy.
QGL_EXT_Reset sets all extension pointers to NULL.
2013-11-22 08:17:34 -04:30
Yamagi Burmeister
64a39ce09e Bump version number to 5.20 2013-11-14 18:13:35 +01:00
Yamagi Burmeister
0f9dcba9ed Apply some cleanup to the input backend
Make non global functions static, give some better names to variables,
remove unneccessary special cases and remove some superflous functions.
Form most - if not all - users this changes should be a no-op.
2013-11-10 10:10:43 +01:00
Yamagi Burmeister
e7ac0653b2 Merge branch 'sdl2' 2013-11-09 13:21:39 +01:00
Scott Smith
70eef55ab5 OpenGL-ES converstion
Specific device options for pandora, gcw, gph
2013-10-12 12:31:20 -04:00
Yamagi Burmeister
82f3fa84a9 Use "directsound" as sounddriver when using SDL2 on Windows 2013-10-12 12:13:33 +02:00
Yamagi Burmeister
5c5a9beba5 Rename CreateWindow() to CreateSDLWindow()
CreateWindow() is a symbol internal to Windows. We can't use it in out
code or it will collide.
2013-10-12 11:07:05 +02:00
Yamagi Burmeister
5e85fbc8b9 Allow arbitrary screen sizes.
Without this change the width of the render windows was required to be a
multiple of 8, making it unable to use strange resolutions like 1366x768.
This change is based upon an idea submitted by "tmcp" in pull request
27.
2013-10-12 09:29:19 +02:00
Daniel Gibson
d1ca122955 Add -DSDL2 for Win32/OSX support (untested), print SDL2 usage on startup
The quake2 binary now gets -DSDL2 in the CFLAGS, so Win32/OSX can
use different #include paths accordingly.
This is also (ab)used to print which SDL version is used on startup.
Don't use this for anything else, use
#if SDL_VERSION_ATLEAST(2, 0, 0)
instead.

I haven't tested building on/for Win32 or OSX, there may be more
work to do.

Furthermore I added Copyright-Info about CalculateGammaRamp()
in refresh.c (it's from SDL2)
2013-09-01 14:19:33 +02:00