Giter Club home page Giter Club logo

edge-classic's Introduction

circle_logo5

EDGE-Classic is a Doom source port that provides advanced features, ease of modding, and attractive visuals while keeping hardware requirements very modest. It is a revival of the EDGE 1.35 codebase for modern systems.

EMUS, the EDGE Modder's Utility Suite, has also been updated to stay current with EDGE-Classic's new features, and is an excellent all-in-one tool for both the beginning and experienced modder.

Here are some mods that showcase EDGE-Classic's flexibility and power:

Operation: Arctic Wolf Revisited

Operation: Arctic Wolf Revisited is an update/extension of Laz Rojas' classic DOOM 2 mod with improved gameplay, all new weapons, enemies, new mechanics, more interactivity, more immersion, scripting, updated textures, level fixes, etc. making it essentially a whole new game.

arcticre

Download from ModDB here.

Astral Pathfinder

pathfinder

Astral Pathfinder by RunSaber/Chutzcraft is an EDGE exclusive partial conversion of Doom II, with an otherworldy setting and Quake-style weaponry. Three vast levels packed with exploring, secret-hunting and of course, hellish spawn from several dimensions, including three boss fights for the player to contend against.

Download from ModDB here.

Heathen

heathen (2)

A Hexen/Heretic-inspired gameplay mod for Doom. New enemies, weapons, items, and attacks.

Download from ModDB here.

Duke it out in DOOM

dukeitout

An action-packed gameplay mod that puts you in the boots of the political incorrect but lovable ass-kicking macho-man Duke Nukem. Crammed full of of 80's/90's action movie throwbacks and pop culture references. Featuring an impressive arsenal of super deadly, sneaky and devastating weapons and a colorful and humorous collection of power-ups and pickups. Full of witty one-liners from Duke himself and plenty of blood, guts and gore.

Download from ModDB here.

Aliens: Stranded

aem

A Total Conversion themed on the Aliens movies. New weapons, enemies, music, textures etc. Heavy use of 3D models.

Download from ModDB here. The load order of the included WADs is D3tex.wad, AEM.wad, and AEM_Mapset.wad.

DarkForces Doom

darkforces

A Star Wars/Dark Forces themed gameplay mod by CeeJay for EDGE-Classic. Weapons, items, enemies and new gameplay mechanics.

Download from ModDB here.

An optional texture pack to enhance the experience can be found here.

Notable Improvements over EDGE 1.35

  • UDMF map support
  • DEHEXTRA compatibility
  • A soundfont-capable MIDI player (SF2 support)
  • OPL emulation with external OP2/AIL/TMB instrument support
  • Support for MP3 music and sound effects
  • UMAPINFO compatibility
  • Migration from SDL1 to SDL2 (longevity and potential new features)
  • Improved support for gamepads
  • Expanded DDF, RTS, and COAL features
  • Full support for the Chex Quest 1, HacX 1.2, Harmony and REKKR IWADs
  • Greatly improved Heretic/Blasphemer IWAD compatibility
  • Enhanced support for the Freedoom 1/2 IWADs
  • Widescreen statusbar, intermission, and title screens
  • Replaced GLBSP with AJBSP as the internal nodebuilder
  • Inventory system
  • Autoload folder
  • New Liquid animation (SMMU, SMMU+Swirl and Parallax)
  • Many more music formats (OGG, FLAC, IT/S3M/XM/MOD/RAD Tracker music and even C64 SID!)
  • Optional Dynamic Sound Reverb
  • Optional Pistol Start feature
  • Support for image/spritesheet and TrueType fonts
  • A load of longstanding bugs fixed (see full changelog)

Bugfixes and detailed changes can be found in CHANGELOG.txt

Currently Supported Platforms

  • Windows 32/64-bit (x86 architecture), Vista or later
    • Windows XP support has been deprecated; build instructions are in COMPILING.md but are not guaranteed to work with future versions
  • Web Browsers (Desktop browsers are supported, mobile browsers require future touch and gamepad input work)
  • Linux 32/64-bit (x86 and ARM architecture - ARM tested with Raspberry Pi OS on a Pi 4B)
  • BSD 32/64-bit (x86 and ARM64 architecture - tested with FreeBSD 13.1; ARM64 tested on a Pi 4B but not recommended unless proper video acceleration is available as playable framerates are too difficult to achieve otherwise)
  • Mac 64-bit (x86 and M1 architecture)

Currently Supported IWADs

  • The Ultimate Doom/Doom 1/Freedoom Phase 1
  • Doom 2/Freedoom Phase 2
  • Chex Quest 1
  • Heretic/Blasphemer
  • HacX 1.2
  • Harmony
  • REKKR

To learn more about EDGE-Classic, DDF, RTS, or COAL, please visit our wiki.

edge-classic's People

Contributors

akaagar avatar andwj avatar atsb avatar dashodanger avatar denisbelmondo avatar loboeire avatar pbdot avatar phytolizer avatar yazgoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

edge-classic's Issues

Building 1.1 on macOS

So clang on -std=c++17 does not like the below:

p_user.cc:988:72: error: cannot pass object of non-trivial type 'epi::strent_c' through variadic function; call will abort at runtime [-Wnon-pod-varargs]
                I_Warning("WEAPON %s has no sprites and will not be added!\n", info->name);

For myself, I stubbed it as it isn't anything critical. Something to look at I suppose.

Leverage DDF/RTS to implement more flexible cheats

As support for other games (like Heretic) improves, it might be worth it to move the effect of various cheats outside of the C++ realm (except for the responder which needs to match the input string). This will allow for some of the more complex or unique cheats to be done via scripting in keeping with the spirit of customization/flexibility that EC has.

Sky Texture Issue on M1 builds

As reported by @atsb , the sky texture seems to be clamped starting at a vertical line in the middle of the player's viewpoint. I've attached a version of r_sky.cc with explicit GL_REPEAT flags added for testing.
r_sky.zip

Complete DDFIMAGE COMPOSE implementation

There is an initial degree of DDF parsing support for this option, which is essentially a DDF-ized method of doing something like TEXTURE1/2/PNAMES. Need to put it through its paces to see what remains to be done.

MacOS BigSur / M1 Monterey build failures

[  6%] Building CXX object source_files/ddf/CMakeFiles/edge_ddf.dir/anim.cc.o
In file included from /Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:22:
In file included from /Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/local.h:22:
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/../epi/epi.h:48:37: error: expected function body after function declarator
void I_Error(const char *error,...) GCCATTR((format(printf, 1, 2)));
                                    ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/../epi/epi.h:49:41: error: expected function body after function declarator
void I_Warning(const char *warning,...) GCCATTR((format(printf, 1, 2)));
                                        ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/../epi/epi.h:50:40: error: expected function body after function declarator
void I_Printf(const char *message,...) GCCATTR((format(printf, 1, 2)));
                                       ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/../epi/epi.h:51:40: error: expected function body after function declarator
void I_Debugf(const char *message,...) GCCATTR((format(printf, 1, 2)));
                                       ^
In file included from /Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:22:
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/local.h:242:42: error: expected function body after function declarator
void DDF_Error    (const char *err, ...) GCCATTR((format (printf,1,2)));
                                         ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/local.h:243:42: error: expected function body after function declarator
void DDF_Warning  (const char *err, ...) GCCATTR((format (printf,1,2)));
                                         ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/local.h:244:42: error: expected function body after function declarator
void DDF_WarnError(const char *err, ...) GCCATTR((format (printf,1,2)));
                                         ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:82:3: error: use of undeclared identifier 'DDF_WarnError'
                DDF_WarnError("New anim entry is missing a name!");
                ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:91:4: error: use of undeclared identifier 'DDF_Error'
                        DDF_Error("Unknown animdef to extend: %s\n", name);
                        ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:120:2: error: use of undeclared identifier 'DDF_WarnError'
        DDF_WarnError("Unknown anims.ddf command: %s\n", field);
        ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:127:3: error: use of undeclared identifier 'DDF_WarnError'
                DDF_WarnError("Bad TICS value for anim: %d\n", dynamic_anim->speed);
                ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:136:4: error: use of undeclared identifier 'DDF_Error'
                        DDF_Error("Missing animation sequence.\n");
                        ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:140:4: error: use of undeclared identifier 'DDF_Error'
                        DDF_Error("TYPE=GRAPHIC animations must use the SEQUENCE command.\n");
                        ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:203:2: error: use of undeclared identifier 'I_Error'
        SYS_ASSERT(storage);
        ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/../epi/asserts.h:41:20: note: expanded from macro 'SYS_ASSERT'
        ((cond)? (void)0 :I_Error("Assertion '%s' failed in %s (%s:%d).\n",  \
                          ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:215:3: error: use of undeclared identifier 'DDF_WarnError'
                DDF_WarnError("Unknown animation type: %s\n", info);
                ^
/Users/ats/Downloads/EDGE-classic-Preview-1/source_files/ddf/anim.cc:244:3: error: use of undeclared identifier 'I_Debugf'
                I_Debugf("- ANIMATED LUMP: start '%s' : end '%s'\n", first, last);
                ^
16 errors generated.

Clang Target:

Apple clang version 13.0.0 (clang-1300.0.29.3)
Target: x86_64-apple-darwin20.6.0
Thread model: posix

SDL2/GLEW etc.. are all correctly resolved and identified via CMake.

file_c::ReadText allocation optimization

file_c::ReadText allocates a local std::string which is returned and then copied to a new string in assignment. It would be better to pass a std::string reference to receive the value

Boom wall scrollers

Hi, congrats for adding support for Boom displacement and accelerative scrollers.

However, with Boom wall scrollers 249, 218 and 254 the walls won't always move to the direction where they should.

249 scroll tagged wall when control sector height changes
218 accelerate tagged wall when control sector height changes
254 scroll tagged wall, the action line sets the speed and direction

Here's a test wad for Doom2 map01 with 249 scrollers. There are four switches to scroll the opposite walls. All sets are otherways identical except roteted by 45/90 degrees. All the walls should have the same scrolling result. The arrows indicate in which direction each part of the wall should move.

boom_249_scroller.zip

An other concern is that the walls desync. Although in this case the 249 lines are in a lift which will return to it's original height the walls do gain a small offset change in the process.

DOOMWADDIR not working

DOOMWADDIR and DOOMWADPATH support is not working, since the results of FS_ReadDir() are relative to the path it is given, but you don't do a FS_Join() to get the full path of those filenames.

I suggest updating FS_ReadDir() to always join the given path onto the results, since most usages of FS_ReadDir() need it anyway. The one case I noticed to fixed is CMD_Dir (in console code) would need a PATH_GetFilename() on the results to keep the output nice.

Another thing I suggest is treating both these environment vars in a uniform way, namely that once you convert DOOMWADPATH into a list of directories, simply add DOOMWADDIR to this list (assuming it exists).

Teleporter zipping

Easier to understand by seeing in-action, but teleporting things appear to be visible as they are moved to their new location, causing it to have a "zipping" effect

GLES2: Crash in fpe_glDrawArrays

Opening first door in Aliens Stranded get a reproducible crash in fpe_glDrawArrays, have not yet run under address sanitizing to see if can catch first bad access.

crash

Callstack

libGLESv2.dll!00007ff845d88313() (Unknown Source:0)
libGLESv2.dll!00007ff845d5dc6a() (Unknown Source:0)
libGLESv2.dll!00007ff845af6add() (Unknown Source:0)
edge-classic.exe!fpe_glDrawArrays(unsigned int mode, int first, int count) Line 803 (c:\Dev\EDGE-classic\libraries\gl4es\src\gl\fpe.c:803)
edge-classic.exe!draw_renderlist(_renderlist_t * list) Line 801 (c:\Dev\EDGE-classic\libraries\gl4es\src\gl\listdraw.c:801)
edge-classic.exe!gl4es_flush(...) Line 1013 (c:\Dev\EDGE-classic\libraries\gl4es\src\gl\gl4es.c:1013)
edge-classic.exe!gl4es_glColorMask(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) Line 1128 (c:\Dev\EDGE-classic\libraries\gl4es\src\gl\gl4es.c:1128)
edge-classic.exe!RGL_FinishSky() Line 715 (c:\Dev\EDGE-classic\source_files\edge\r_sky.cc:715)
edge-classic.exe!RGL_RenderTrueBSP() Line 3183 (c:\Dev\EDGE-classic\source_files\edge\r_render.cc:3183)
edge-classic.exe!R_Render(int x, int y, int w, int h, mobj_s * camera, bool full_height, float expand_w) Line 3379 (c:\Dev\EDGE-classic\source_files\edge\r_render.cc:3379)
edge-classic.exe!HUD_RenderWorld(float x, float y, float w, float h, mobj_s * camera, int flags) Line 1330 (c:\Dev\EDGE-classic\source_files\edge\hu_draw.cc:1330)
edge-classic.exe!HD_render_world(coal::vm_c * vm, int argc) Line 606 (c:\Dev\EDGE-classic\source_files\edge\vm_hud.cc:606)
edge-classic.exe!coal::real_vm_c::EnterNative(int func, int argc) Line 334 (c:\Dev\EDGE-classic\source_files\coal\c_execute.cc:334)```

macOS build

So I've gotten another one and I'm starting to recompile this on macOS.

A few things:

  • i_sdlinc.h - the current SDL2/SDL.h headers fail if using MacPorts instead of Homebrew. For MacPorts, I had to modify it like so:
#ifdef _MSC_VER
#include "SDL.h"
#elif __APPLE__
#include <SDL.h>
#else
#include <SDL2/SDL.h>
#endif

Since MacPorts points to the SDL2 headers inside the SDL2/ directory unless the -I parameter is modified.

  • the dependent files (edge-defs, config files etc..) currently point either to a directory using -ewad etc.. or to a self-defined directory in the current location. For macOS bundles, this poses a problem as users cannot easily set the path via the terminal (unless they are technical users) and that the macOS bundle see's itself as 'the current root directory'.

To solve this, I suggest adding APPLE directives for SDL_GetPrefPath - this would place all these files into /Users/user/Library/Application Support/edge directory and would read/write them from here, allowing the bundle to be self-contained.

Add a SCALE() state action for THINGS/ATTACKS.DDF

This could be used for various effects (pulsing smoke, etc) without needing to create specific images or DDFIMAGE entries with the sizes in question. Could also help in transformations that change the size of the thing that culminate in it BECOME()-ing something else.

Some Edge issues with boomedit!.wad

The screenshots show the problem and how it should look like as shown in a screenshot from doomretro
boomedit
boomedit2
correct

pic 2 is when standing on risen stair sector 43.

The game cannot find support files by looking alongside executable

I am trying EC for the first time and built it on Linux Mint 21; then copied the files and directories mentioned in the wiki into /usr/games as /usr/games/edge-classic:

drwxr-xr-x 13 root root    4096 Aug 30 23:23 autoload
drwxr-xr-x  2 root root    4096 Aug 30 23:23 edge_base
-rwxr-xr-x  1 root root 4058704 Aug 30 23:23 edge-classic
-rw-r--r--  1 root root 1505324 Aug 30 23:23 edge-defs.wad
drwxr-xr-x  2 root root    4096 Aug 30 23:23 edge_fixes
drwxr-xr-x  2 root root    4096 Aug 30 23:23 soundfont

If I run the game from within that directory, specifying the iwad on the command line, it works fine; however, if I run the game from outside the directory, it fails to find edge-defs.wad and other files; it's as if it expects the game to be run from the game files directory and nowhere else; there seems to be no clean separation between where the engine and support files are located and where it might be run from.

Surely one should not, with any modern program, have to cd into the directory the executable is located in, in order to run it; especially as one might be loading wad files from a directory where they are kept?

priorities for chosen IWAD

This is not a major thing, but I think when searching for an IWAD to load, certain ones should be preferred, in particular DOOM2.WAD since most mods tend to use that IWAD as their base and may fail with DOOM.WAD (etc).

So instead of stopping at the first usable IWAD, give each one a score based on their name and pick the highest score. I suggest "DOOM2" should have the highest score, then maybe "FREEDOOM2" since it is highly compatible with it, then "TNT" and "PLUTONIA", etc...

Add DDF special to autocolor image/dynamic lights based on the average color of a reference image

This would help with liquid splashes, fireballs, etc, where the flat or sprite in question has changed in appearance from its vanilla form.

For example, if imp fireballs are recolored to green, the dynamic light would still be red/orange unless the DDF for the fireball attack were updated as well. If the dynamic light could be 'told' to use the fireball sprite's average color as a reference, then in theory the light color should be updated automagically.

Issues with Boom displacement and accelerative scrollers

Hi, the Boom displacement and accelerative scrollers (scroll/accelerate when control sector's height changes) do not always work right.

The examples from Boomedit.wad do work right. In those the control sector is always a lift; the scrolling or acceleration starts when the lift is lowered/scrolled back or deaccelerated when the lift returns back. But for other type of control sector movements the results are mixed.

Here's a test wad for Doom2 map01. It has ten scrolling tracks with different setups of control sectors. In all tracks when the A-switch is triggered the medikit should scroll away from the player. On displacement scrollers the srolling should stop when the control sector stops moving. One accelerative scrolers the scrolling should continue. When the B-switch is triggered the medikits should scroll back or the scrolling should deaccelerate and stop to a stand still.

https://www.dropbox.com/s/ckil8870o6m1jxp/scrollers.zip?dl=1

Awakening of monster spawner's monsters

Not fully sure of this but it looks like that monsters spawned by the monster spawner ignore if the player has fired a weapon in the area.

Here's a test wad for Doom2 MAP01. The player is in a west side room and the monster spawner is in the east behind a window. The spawned monsters will appear in the middle and always face direction 0 to the east.
monsterspawner.zip

If the player shoots the pistol the monster spawner awakes. In vanilla Doom all the spawned monsters start chasing the player right from the start was player in sight or not. In Edge Classic the spawned monsters start to chase only if the player is in sight (in the moment of monster's appearance) or makes more noise. If the player is not in sight the spawned monsters just stand still.

If the monster spawner is awakened silently by player going to the window it works the same way both in vanilla Doom and in Edge Classic. When the player hides away from the window the spawned monsters stand still and won't wake up if the player comes back to the window.

Floor and ceiling changers

With the Boom generalized floor and ceiling changers the numeric and trigger modes seem to be swapped. If the line trigger is set up to use the numeric mode it currently uses the trigger mode instead and vice versa. This happens with the Boom generalized actions only. Regular Doom/Boom actions such as in Doom E2M1 do use the correct modes.

However it also seems that all numeric mode changers take the sector behind the highest numbered 2s line as the target when it should be the sector behind the lowest numbered 2s line instead. Full explanation on lines 356-359 in here: https://github.com/fragglet/mbf/blob/master/boomref.txt?plain=1#L358

And if the tagged floor or ceiling is at the target height already the texture and type are not changed.

Here's a test wad for Doom2 map01.
floor+ceilingchangers.zip

Music Issues on macOS

Hi,

I noticed you're using glatter (which is not compatible with Macs). Currently it is now impossible to build a Mac version.

I suppose this change is permanent?

Resolution scaling on Mac

So on Version 1.1, increasing the resolution slowly pushes the image off to the right side of the screen
screen

High DPI/Desktop Scaling behavior issues

EC currently is not High-DPI/Scaling aware; resolution lists are either not created properly or display values inconsistent with what the user expects (i.e., if the OS scaling is set to 150%, the native resolution of the display will be listed as the native resolution divided by 1.5)

Master branch fails to build on Linux

The 1.1 tag builds fine on Linux, but the master branch does not. I looked into why this is happening. Here's my make log for the failing git build: make.log

In the last few lines, I noticed that it said:

.../source_files/edge/umapinfo.cc:399:22: error: 'stricmp' was not declared in this scope; did you mean ‘strncmp’?

So, I just looked up "stricmp linux" (thinking maybe I need to install a dependency or something) and I see a lot of people with the same "not declared" problem. I think this is what is causing the issue. stricmp is apparently not POSIX.

Certain BOOM preserving teleport types are quite wonky

Some obvious examples are Ancient Aliens MAP01 and Firerainbow MAP01. For those that preserve speed and the player is carried through by scrollers, they get an unwanted speed boost when exiting. The angle preservation is also weird.

Memory leak in DetailSlope_BoundIt

Leak in source_files/edge/p_spec.cc was line 1153 though probably different now post formatting
slope_plane_t *result = new slope_plane_t;

Animate default intro graphic

Would be fun but also in the pause betwen the intro graphic and the first title/music playing it would help avoid the impression that something is locked up or delayed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.