mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-24 13:01:48 +00:00
GZDoom is a feature centric port for all Doom engine games, based on ZDoom, adding an OpenGL renderer and powerful scripting capabilities
b7b9c72436
Merged revision(s) 3731-3734, 3736-3743, 3745-3751, 3754, 3756-3757, 3761-3766, 3774-3781, 3783-3787, 3791 from zdoom/trunk: - Added support for Eternity Engine's function pointer ACS instructions. (Note that an alternative ACS compiler is necessary to use these instructions properly.) ........ - Fixed: ACS function pointer instructions need to call GetFunction on the tagged module instead of the active behavior. ........ - Fixed: DDrawFB should not recreate all its resources when the palette changes if we were the one responsible for the palette change. - Fixed: DDrawFB::CreateSurfacesComplex() starting tries at 2 instead of 0 is not "debugging cruft" since it counts down, not up. (Partially reverts r3195) ........ - Do not set the mouse pointer if the display is 8 bit, since such displays don't support color cursors. ........ - Added Hacx 2.0 detection. ........ - Do do not disable config writing before DoGameSetup() (introduced in r3653) if the config file does not already exist. This way, we can create a default config file without removing anything from an existing config file if things go wrong early during setup. ........ - Don't use abbreviations in exception descriptions. ........ - This was not supposed to be committed as part of r3737. ........ - Fixed: Editing the player (thing #1) with DeHacked would remove its MF2_PUSHWALL flag. ........ - Fixed: The action function version of ACS_NamedExecuteWithResult only accepted three script parameters. ........ - What I didn't have this saved? ugh ........ - We don't need to keep the FloatBobOffsets[] verison of DoWaggle around. ........ - Fixed: MF6_BUMPSPECIAL only worked when bumped from X/Y movement but not Z movement. ........ - Added UsePlayerStartZ MAPINFO option to cause P_SpawnPlayer() to offset the spawned player's Z position by the MapThing's Z, just like for any other MapThing. - P_SpawnPlayer() now respects a player's SPAWNCEILING and SPAWNFLOAT flags. ........ - Fix some GCC 4.7.1 warnings. ........ - Pass playernum as a parameter to P_SpawnPlayer(). Now P_SpawnMapThing() is the only thing that uses the MapThing's type to determine the which player is spawning. ........ - Added MAPINFO flag RandomPlayerStarts. In this mode, no voodoo dolls are spawned. Instead, all player starts are added to a pool, and players spawn at a random spot. ........ - The complete FMapThing is overkill for storing player starts, so use a new minimal structure for them. ........ - Added the item flag IF_RESTRICTABSOLUTELY. When this is set, players of the wrong class cannot pickup an item at all. (For instance, normally players in Hexen can still pick up other players' weapons for ammo. With this flag set, they cannot do that either.) ........ - Fixed: PCD_SCRIPTWAITDIRECT had different semantics than PCD_SCRIPTWAIT. ........ - Added PCD_SCRIPTWAITNAMED p-code. ........ - Enumerate ZDaemon's ACSF_ values. ........ - Added compatibility options for Requiem map04 and Hell Revealed map19. ........ - Fixed type in A_Respawn. ........ - Fixed: Getting remorphed into a chicken should give you a Tome of Power so that you become a super chicken. Rawr! The PlayerPawn flag CANSUPERMORPH now enables this. ........ - Fixed: FListMenuItemPlayerDisplay could crash at various points if a class does not have a See state. ........ - Fixed: Toggling the automap could cancel out ending the level, among other things. ........ - Remove Item from StateCallData, since it isn't read anywhere. ........ - Added a 90 degree offset to all voxels, since Build's compass directions start at north rather than east. ........ - Fixed: R_ExtendSpriteFrames() would change spr.spriteframes even when it wasn't moving them around. ........ - Fixed: hud_scale is supposed use strictly integral scaling factors. ........ - Fix typo: MF6_SEEINVISIBLE is in flags6, not flags. ........ - Fixed typo: Midtextures with world panning replaced rw_midtexturemid with the rowoffset instead of adding them together. ........ - Fixed: Pain flashes were not inheritable. ........ - Fixed: player_t::settings_controller was not serialized. ........ - snd_midipatchset and fluid_patchset are now processed through NicePath() for variable substitution. In addition, on Windows, if they contain no path separator, they will automatically have $PROGDIR prepended to them. ........ - Fixed: DSBarInfo::ScreenSizeChanged() must call its supermethod. ........ - Fixed: FStateDefinitions::FinishStates() must ResolveGotoLabels before resolving labelled gotos. Otherwise, something like this fails: Goto State1 State1: Goto State2 State2: because when "Goto State1" is processed, State1 is still pointing at the string "State2" rather than State2's state, so the goto will end up pointing at a string (which will soon be freed from memory) instead of at an actual state. ........ - Fixed: The label offset has no business being involved in the positioning of the options menu cursor. Also put the cursor towards the bottom of tall small fonts. ........ - Remove LabelOffset from menus entirely and just compute things so that the console font and small font, when mixed on the same line, align at their baselines. ........ - Remove LabelOffset from menudef.txt. ........ - Fixed: menu_endgame showed no text during a netgame, nor did it block you from ending a netgame. ........ Merged revision(s) 3771, 3782 from zdoom/trunk: - Draw 1 pixel of border at the edges of the status bar to prevent imprecision HOMs (only top and bottom for non-widescreen for now). - The completeborder command is handled at the base statusbar now since it can do so more efficiently. ........ - Fixed: 1 pixel border was drawn when there was no status bar. ........ SVN r3793 (2.6) |
||
---|---|---|
bzip2 | ||
docs | ||
dumb | ||
game-music-emu | ||
gdtoa | ||
jpeg-6b | ||
lzma | ||
output_sdl | ||
specs | ||
src | ||
tools | ||
wadsrc | ||
zlib | ||
CMakeLists.txt | ||
FindFluidSynth.cmake | ||
strifehelp.acs | ||
zdoom.sln | ||
zdoom.vcproj |
README: glDOOM I never got around to do anything with respect to a Linux glDOOM port except for assembling a Linux3Dfx HOWTO (which, at that time, was a prerequisite to get permission to publicly distribute the already finished LinuxGlide port by Daryll Strauss). Linux q2test (and soon LinuxQuake2) demonstrate that Mesa with the MesaVoodoo driver is quite up to the requirements for a glDOOM port. If anybody wants to get into Linux glDOOM, please drop me a line. There is a Win32 GLDOOM port in the works, by Jim Dose. Quoting a recent posting by him: "I haven't had as much time lately to really work on the conversion. I currently have the renderer drawing the walls and floors as texture spans as the are in the software renderer. There's lighting on the walls, but not the floors, and sprites are being drawn, but not with the right texture. I figure that this is one nights work to get the game looking "normal". I haven't tested the game on less than a p200, so I'm not sure how it will perform under the average machine, but I don't expect it to be blindingly fast because of the number of spans that have to be drawn each frame. Rendering as polys is definitely the way to go. The reason I chose to do spans first was because it left the base renderer intact and I could concentrate on ironing out any Windows compatibility problems. Actually, the first version I had running was simply a blit of the 320x200 game screen through Open GL. Surprisingly, this actually was very playable, but certainly wasn't taking any advantage of 3D acceleration. Once the game was running, I started converting all the span routines over." Comment: for merging Linuxdoom with Win32, this is probably the best source for getting the Win32 environment done - before more significant changes occur. "One problem with drawing spans is that the engine doesn't calculate the texture coordinates with fractional accuracy, so the bilinear filtering works vertically, but not horizontally on the walls. I may try to fix this, but since I plan to use polys for the final version, it's not really high priority. Also, spans don't really allow for looking up and down." Comment: true looking up/down vs. Heretic-style y-shearing seems to require either a strange kind of transofrmation matrix (he probably does not use the OpenGL transformation at all), or rendering all the spans as textured rectangular slices instead of using glDrawBitmap. No, polys are the way to go. "When I tackle the conversion to polys, one big problem I'll encounter is drawing floors. Since the world is stored in a 2D bsp tree, there is no information on the shape of the floors. In fact the floors can be concave and may include holes (typically, most renderers break concave polys down into a collection of convex polys or triangles). In software, the floors are actually drawn using an algorithm that's similar to a flood fill (except that a list of open spans is kept instead of a buffer of pixels). This makes drawing the floors as polys fairly difficult." A polygon based approach will require significant changes to the data structures used in the refresh module. I recommend either separating a libref_soft.so first (a Quake2 like approach), and creating libref_gl afterwards, or abandoning the software rendering entirely. John Carmack wrote once upon a time: "... the U64 DOOM engine is much more what I would consider The Right Thing now -- it turns the subsector boundaries into polygons for the floors and ceilings ahead of time, then for rendering it walks the BSP front to back, doing visibility determination of subsectors by the one dimensional occlusion buffer and clipping sprites into subsectors, then it goes backwards through the visible subsectors, drawing floors, ceilings, walls, then sorted internal sprite fragments. It's a ton simpler and a ton faster, although it does suffer some overdraw when a high subsector overlooks a low one (but that is more than made up for by the simplicity of everything else)." Well, IMO compiling a separate list of floor/ceiling polygons after having read the WAD file, and thus introducing this as a completely separate data structure to the current code base might be the easiest thing to do. Jim Dose writes: "One method I may use to draw the floors as polys was suggested by Billy Zelsnack of Rebel Boat Rocker when we were working at 3D Realms together a few years ago. Basically, Billy was designing an engine that dealt with the world in a 2D portal format similar to the one that Build used, except that it had true looking up and down (no shearing). Since floors were basically implicit and could be concave, Billy drew them as if the walls extended downwards to infinity, but fixed the texture coordinates to appear that they were on the plane of the floor. The effect was that you could look up and down and there were no gaps or overdraw. It's a fairly clever method and allows you to store the world in a simpler data format. Had perspective texture mapping been fast enough back then, both Build and Doom could have done this in software." Perhaps the above is sufficient to get you started. Other Issues: 1. Occlusion DOOM uses a per-column lookup (top/bottom index) to do HLHSR. This works fine with span based rendering (well, getting horizontal spans of floors/ceilings into the picture is a separate story). It isn't really mindboggling with polygon based rendering. GLDOOM should abandon that. 2. Precalculated Visibility DOOM has the data used by Quake's PVS - in REJECT. During Quake development, lots of replacements for the occlusion buffer were tried, and PVS turned out to be best. I suggest usind the REJECT as PVS. There have been special effects using a utility named RMB. REJECT is a lump meant for enemy AI LoS calculation - a nonstandard REJECT will not work as a PVS, and introduce rendering errors. I suggest looking for a PVS lump in the WAD, and using REJECT if none is found. That way, it might be feasible to eat the cake and keep it. 3. Mipmaps DOOM does not have mipmapping. As we have 8bit palettized textures, OpenGL mipmapping might not give the desired results. Plus, composing textures from patches at runtime would require runtime mipmapping. Precalculated mipmaps in the WAD? 4. Sprites Partly transparent textures and sprites impose another problem related to mipmapping. Without alpha channel, this could give strange results. Precalculated, valid sprite mipmaps (w/o alpha)?