Commit graph

707 commits

Author SHA1 Message Date
Daniel Gibson
9950a5721f Fix heap corruption when loading (broken?) .ma models
On FreeBSD, the game used to crash when loading the last level of RoE
(d3xp), while loading models/david/hell_h7.ma.
The problem could be reproduced on Linux whith #define USE_LIBC_MALLOC 1
and clang's AddressSanitizer.
Turns out that this file specifies a vertex transform for a non-existent
vertex (index 31, while we only have 0-30) and thus the bounds of
pMesh->vertexes[] are violated.
I added a check to ensure the index is within the bounds and a Warning
if it isn't.
It should work now. If however it turns out that more files have this
problem, maybe .ma is parsed incorrectly and we need a differently fix.

(Should) fix #138
2015-12-17 18:07:35 +01:00
Daniel Gibson
df90fce6a5 small improvement for handling up to 8 mouse buttons
as we do int buttonIndex = ev.button.button - SDL_BUTTON_LEFT;
it's only consistent to do if(ev.button.button < SDL_BUTTON_LEFT + 8)

it doesn't really make any difference as long as SDL_BUTTON_LEFT is 1,
but this way it's safe for SDL3 or whatever future version might break
the ABI.
2015-12-13 03:49:29 +01:00
Sébastien Noel
32feff2be1 handle up to 8 buttons with SDL2 based on https://github.com/RobertBeckebans/RBDOOM-3-BFG/pull/213
it's buggy on Linux/X11 before 2.0.4, but it works fine on other platforms
extra bonus: don't generate garbage events for unknown mouse buttons
2015-12-13 03:30:43 +01:00
Daniel Gibson
48511003b6 Unix: On failed assertion, break gracefully into debugger
__builtin_trap() causes an illegal instruction and thus the process
can't resume afterwards.
raise(SIGTRAP) only breaks into the debugger and thus allows to
"ignore" the assertion while debugging.
2015-12-13 03:30:03 +01:00
Daniel Gibson
b03fc9271a Fix crash by assert in last RoE level (and maybe elsewhere)
The assertion in idBounds::operator-(const idBounds&) was triggered
from idWeapon::Event_LaunchProjectiles() (ownerBounds - projBounds)
It only happened when using the BFG.
So I added a check to make sure calling operator- is legal.

I guess this also caused #122
2015-12-13 03:30:03 +01:00
Daniel Gibson
c5ad45368a Workaround to better support AZERTY keyboards
The first row of AZERTY-Keyboards (used in France and Belgium) doesn't
have numbers as keys but ², &, é, ", ', (, -, è, _, ç, à, ), =
(with small differences between France and Belgium).
For some of those keys we don't have keycodes - and neither does SDL2.
See also https://bugzilla.libsdl.org/show_bug.cgi?id=3188

As a workaround, just map those keys to 1, 2, ..., 9, 0 anyway, as those
are keys Quake2 already knows (and those chars are printed on the keys
too, for typing they're reachable via shift).
This workaround only works for SDL2, as SDL1.2 doesn't have Scancodes
which we need to identify the keys.

This should obsolete one part of pull request #135
2015-11-22 23:21:30 +01:00
Daniel Gibson
1680603d8c Sort vidmodes in menu, add 2880x1800
it's the native resolution of "Macbook Pro retina 15-inch mid 2014"
2015-10-30 21:41:18 +01:00
Daniel Gibson
4198f92bd5 ignore unknown SDL events
they just spam the console and don't matter anyway.
for example, on OS X you get lots of SDL_FINGER* events that spam
the console.
2015-10-23 18:19:46 +02:00
Daniel Gibson
c2c989cfb6 README: changed cmake example command line for OSX
.. to the directories that seem to be used by brew on OSX 10.11
2015-10-23 17:31:05 +02:00
Daniel Gibson
16bba7c2ff README: mention that there are still shadows
.. despite the lack of depth-fail ("Carmack's Reverse"), which doesn't really matter for that reason.

I have the impression that some people didn't get this.
2015-10-20 03:19:51 +02:00
Daniel Gibson
d4fcb27b41 README: call it "source port", mention OSX
"source port" is the usual term for this and what people will probably google for.
mentioning the tested platforms right at beginning might also be helpful for people.

also (hopefully) clarified what EFX/EAX is about, some people who wrote comments
about the release seemed confused about that.
2015-10-15 00:30:02 +02:00
Daniel Gibson
9958e3807c Win32: Don't access FILE::_file, use _fileno() instead
It has always been ugly to do that with and MSVC2015 doesn't seem to
work at all.
2015-10-11 23:32:31 +02:00
leffmann
c86e394da5 more fixes for Visual Studio 14 2015-10-11 23:27:42 +02:00
leffmann
498ef9cb83 make d3xp build with Visual Studio 14 2015-10-11 23:27:42 +02:00
leffmann
61aee9ed29 make base build with Visual Studio 14 2015-10-11 23:27:42 +02:00
leffmann
db461045bf make idlib build with Visual Studio 14 2015-10-11 00:36:25 +02:00
Daniel Gibson
999b5635f4 change version number to 1.4.1pre
so hopefully people trying code from git won't report problems (that
might be new) as bugs in 1.4.0
2015-10-11 00:36:25 +02:00
Daniel Gibson
5a146bf671 link latest release in readme 2015-10-10 00:31:00 +02:00
Daniel Gibson
5f6177839f Version 1.4.0
Thanks to all the testers!
Especially from http://idtechforums.fuzzylogicinc.com/
http://www.holarse-linuxgaming.de/ (special thanks to NoXPhasma!)
http://www.quakehaus.com/ and #iodoom3.

Also many thanks to everyone reporting bugs and sending pull requests
over the years.
And dhewg of course for starting this and doing all the hard work :-)
2015-10-09 16:06:49 +02:00
Daniel Gibson
8f4f1ca39f Get rid of "WARNING: unknown event 770" on Windows
It's an SDL_TEXTEDITING event which we seem to get on Windows whenever
the Window gains focus (or is created). I think it can be safely
ignored, so that's what I do.

I also changed how those warnings are printed - as a hex number now,
because they're defined as hex numbers in the SDL source and it's easier
to find out what kind of event it is this way.
2015-10-05 15:14:42 +02:00
Daniel Gibson
dad0eda29e Release Candiate 1 preparations, other small fixes 2015-10-03 19:14:22 +02:00
Daniel Gibson
5ab546f67d Esc should only open menu if shift isn't pressed (=> shift+esc for console)
When ingame, Shift-Esc would open the menu and another Shift-Esc the
console. Now it immediately opens the console and only Esc without
Shift opens the menu.
2015-10-03 18:58:49 +02:00
Daniel Gibson
08238d5ce0 Merge pull request #121 from svdijk/master
Win32: Add an icon to the dhewm3 executable

+ changes to CMakeLists.txt to make it possible by preventing that all kinds of C/C++ compiler flags
are set for windres which doesn't like them
2015-10-03 16:20:46 +02:00
svdijk
dd082b78de Win32: Add an icon to the dhewm3 executable 2015-10-03 09:17:30 +02:00
Daniel Gibson
1b18eefaf7 Update README: Use Homebrew instead of MacPorts for dependencies on OS X
I heard MacPorts is dead and the cool kids use Homebrew now.
2015-10-01 01:46:12 +02:00
Daniel Gibson
61d3efec98 Fix mouse cursor moving to fast in fullscreen GUIs (main menu, PDA)
The fullscreen guis pretend to be 640x480 internally, also for the mouse
cursor position. So adding the actually moved pixels (when playing the
game at a higher resolution) to the GUIs cursor position makes it move
too fast.
To fix that I detect (hopefully that check is reliable!) if the
idUserInterfaceLocal instance is a fullscreen GUI and if so scale the
reported mouse moved pixels with 640/actual_window_width and
480/actual_window_height.
2015-09-30 18:38:27 +02:00
Daniel Gibson
412dad6758 Sys_GetEvent(): Don't return res_none when more events are available
If res_none (event with .evType == EV_NONE) is returned,
idEventLoop::RunEventLoop() will assume there are no more events this
frame => pending events will be delayed til next frame (or later if
again res_none is returned in the meantime).
So res_none shouldn't be returned just because there was an SDL event
we didn't care about or we did care about but don't generate a doom3
event for (but toggle fullscreen or something).
Instead we should just fetch and handle the next SDL event.
2015-09-30 15:58:50 +02:00
Daniel Gibson
66f7b6aa87 no allocation per SDL_TEXTINPUT event
those event have a max size (SDL_TEXTINPUTEVENT_TEXT_SIZE) so we can
just use a static buffer.
2015-09-30 15:41:14 +02:00
Francisco Magalhães
32afbca7c1 Add support for brazilian keyboard layout 2015-09-30 15:12:10 +02:00
Daniel Gibson
c333a46373 Linux: Fix fallback to look for gamedata in /usr/local/games/doom3/
Before checking there I look for gamedata next to the executable, but
the check was broken: I got the directory the executable is in and
checked if it exists.. well.. of course it does, but that doesn't mean
there's game data in it..
So now I check if that directory actually has a "base/" subdirectory
(or whatever is #defined in BASE_GAMEDIR) and if that fails
/usr/local/games/doom3/ is tried instead.

Thanks chungy for pointing the bug out in #97 !
2015-09-30 15:07:51 +02:00
Daniel Gibson
6ba1b71fb1 Change default values for some video and sound (EAX) CVars
* r_mode defaults to 5 (1024x768), I think that's more sane than 640x480
* r_fullscreen defaults to 0 (=> windowed mode) because fullscreen in
  the wrong resolution sucks.. let people do their initial configuration
  in windowed mode
* r_swapInterval defaults to 1 (=> VSync active by default) because that
  makes the game feel more smooth and most PCs should be able to 60fps
  in this 11years old game anyway

* s_useEAXReverb defaults to 1 (=> use EAX/EFX effects by default),
  because OpenAL-soft supports them on all platforms/hardware and if
  for some reason the used OpenAL implementation doesn't support it,
  it's deactivated automatically anyway.

All these things can be configured in the Options Menu.
2015-09-29 21:14:45 +02:00
Daniel Gibson
c0e8e20628 Nasty hack to show more default resolutions in menu
the resolutions are really hardcoded in an ugly combination of the
values r_mode supports, a string in strings/*.lang ("#str_04222")
describing the resolutions r_mode supports
("640x480;800x600;1024x768;1152x864;1280x1024;1600x1200")
and a string in mainmenu.gui with the corresponding r_mode values
("3;4;5;6;7;8").. as neither the strings nor mainmenu.gui are GPL'ed
I can't really redistribute a changed version of them.

So I added lots of resolutions to r_vidModes and wrote two functions
that generate the resolutions list string and r_mode value
string for the GUI.
Then I added a hack in the code that detects when the "window" for the
system options ("choiceDef OS2Primary") is created and overwrites the
hardcoded strings with custom ones from my new functions.

This is tested with both the main game and the official d3xp
(Resurrection of Evil) Addon.
No idea if it works with other mods, depends on whether they just copied
that part of the menu or wrote their own.
2015-09-28 16:01:18 +02:00
Daniel Gibson
0327a42ad9 Fix input on Windows with SDL2 (fix #100)
Seems like the ::SetFocus() in main() screwed it up.
2015-09-28 15:35:57 +02:00
Daniel Gibson
51f3acd21a Fix Windows Build with SDL2
for some reason neo/tools/compilers/dmap/optimize.cpp included windows.h
and GL/gl.h before including dmap.h, which indirectly includes qgl.h.

This made things in qgl.h explode - seems like APIENTRYP in the
QGLPROC() macro expanded to bullshit because of some APIENTRYP or
APIENTRY definition in windows.h or GL/gl.h

Those includes are totally unnecessary, dmap.h -> qgl.h already includes
GL/gl.h, indirectly via SDL_opengl.h and in that setup things somehow
are fine.
2015-09-28 04:02:33 +02:00
Daniel Gibson
cf8695bb0f Shift+Escape should also open the console
If one doesn't want to fuck around with in_kbd or uses an unsupported
keyboard layout.
2015-09-27 21:09:19 +02:00
Daniel Gibson
5c99ff4657 make "./dhewm3 +set in_tty 0" actually work
the problem was that the CVar was initialized from the commandline
*after* Posix_InitConsoleInput() is called, so it was too late.
common->StartupVariable() seems to be the right way to initialize a
CVar early.
2015-09-27 18:14:06 +02:00
Daniel Gibson
da63c4f41c print "dhewm 3 1.4.0" in the console, not "dhewm 1.4.0"
Thanks for pointing this out, svdijk!
2015-09-27 18:13:42 +02:00
Daniel Gibson
1de6ab0d50 Fix some compiler warnings (wrong types, superfluous checks, printf-fuckup) 2015-09-27 18:12:16 +02:00
Daniel Gibson
275d890e01 (Hopefully) fix crashes in MP if r_aspectRatio = -1, fix #70
While I couldn't reproduce the crash, according to the bugreport it
happens if renderSystem->GetScreenWidth()/Height() returned 0 - and
that is indeed the only plausible reason I can imagine for it.

So I check for that case and handle it gracefully by defaulting to
4:3 FOV values.
2015-09-27 04:16:47 +02:00
Daniel Gibson
d0e8f3bb55 Prepare for 1.4.0 release, make SDL2 default, update README
The version will be 1.4.0 because it's not compatible with
Doom3 1.3.1 mod DLLs.

(Note that this commit doesn't mean 1.4.0 is done, I might do some
 minor changes before tagging the Release!)
2015-09-27 03:08:30 +02:00
Daniel Gibson
51a0663328 Merge pull request #118 from jmtd/patch-1
small spelling corrections
2015-07-23 15:59:47 +02:00
Jonathan Dowland
bdaee57b03 small spelling corrections 2015-07-23 14:49:14 +01:00
Daniel Gibson
657ad99bf1 Remove jpeg_memory_src hack that worked around old libjpeg versions
Because Debian Squeeze's libjpeg6 didn't have jpeg_mem_src(), we added
jpeg_memory_src() to provide the functionality.
This shouldn't be needed anymore and without it we can drop libjpeg code
from our repo.

Fixes #110
2015-03-22 16:49:26 +01:00
Daniel Gibson
555d233867 Window Icon, make in_nograb work with SDL2 2015-03-02 00:03:30 +01:00
Daniel Gibson
660edd9d62 Merge pull request #108 from coldtobi/master
Fixing some spelling errors: s/unkown/unknown, s/seperate/separate.
2015-02-25 22:04:27 +01:00
Tobias Frost
73fa334c2a Fixing some spelling errors: s/unkown/unknown, s/seperate/separate. (#107) 2015-02-25 22:01:00 +01:00
Daniel Gibson
6d8108c508 Merge pull request #88 from waldheinz/drop-minizip-of-usage
Fix building on Gentoo by providing OF() macro if necessary

.. I hope this time it works for everyone.
2013-09-17 14:04:31 -07:00
Matthias Treydte
56d53004d5 Fix building with Gentoo's patched zlib. 2013-09-17 21:52:08 +02:00
Daniel Gibson
f19247957d Merge pull request #76 from bk138/master
Enable loading of original DOOM 3 save games (by accepting the original game name "DOOM 3"
2013-08-31 12:25:09 -07:00
Daniel Gibson
40ac4d7c5a Fix compilation on Gentoo
For some reason Gentoo renamed zlibs OF() macro to _Z_OF
Our minizip uses OF(), so add a #define for it in case
_Z_OF is defined.

Thanks to salamanderrake for the fix
2013-08-31 20:07:07 +02:00