Building EDuke32 on Linux: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
No edit summary
 
(116 intermediate revisions by 24 users not shown)
Line 1: Line 1:
Prelude
{{Distribution intro}}


All Linux distributions do pretty much the same things but a bit different. Below are some instructions for getting EDuke32 running on Fedora Core 6, 7, or 8.
= Compiling From Source =


== Installation Notes ==
* You need an actual copy of Duke Nukem 3D. See [[Installation and configuration]].
* 3D acceleration drivers (recommended). NVIDIA has classically had the best Linux drivers.
* A MIDI device or player for the soundtrack (optional). By default, the game uses TinySoundFont for loading sound fonts, and Nuked OPL3 for OPL emulation. It's possible to use an external MIDI device or player for Duke Nukem 3D via an ALSA MIDI port.


== Getting source files ==


== '''Building EDuke32 on Fedora Core 6''' ==
:''See [[Acquiring the EDuke32 Source Code]].''


Submitted By: Casey Mynott (bigjeep95) Jan 6, 2007 11:30pm (British Columbia, Canada)
== Prerequisites for the build ==
EDuke32 requires some development files installed before you can properly build.


Updated By: Jorge Silva (operon) Nov 9, 2007 9:58pm (Ontario, Canada)
===Packages===


Updated By: Casey Mynott (bigjeep95) December 4, 2007 10:20pm (British Columbia, Canada)
* Basic dev environment (GCC >= 6.1, GNU make, etc)
* SDL2 >= 2.0 (SDL >= 1.2.10 also supported with SDL_TARGET=1)


====Optional Packages====


This information covers:
* NASM (recommended for i686/32-bit compilation to speed up the 8-bit classic software renderer in some cases)
* libGL (required for OpenGL renderers)
* libgtk2.0 >= 2.8.0 (required for the startup window)
* libFLAC >= 1.2.1 (required for lossless music packs)
* libvpx >= 0.9.0 (required for intro videos and cutscenes in some user-created modifications)


===Distro-Specific Installation===


-Installation on Fedora Core 6, 7, and 8 with the latest EDuke32 source files
====On Debian / Ubuntu====
{| class="wikitable"
|<code>sudo apt-get install build-essential nasm libgl1-mesa-dev libsdl2-dev flac libflac-dev libvpx-dev libgtk2.0-dev freepats</code>
|}


-Adding the HRP (High Resolution Packages) <-- these are amazing and brings Duke Nukem 3d into the year 2000!
====On Fedora 22-25====
{| class="wikitable"
|<code>sudo dnf groupinstall "Development Tools"</code>
|}
{| class="wikitable"
|<code>sudo dnf install g++ nasm mesa-libGL-devel SDL2-devel alsa-lib-devel libvpx-devel gtk2-devel flac flac-devel</code>
|}
Freepats is not packaged in Fedora, you must download and install it by yourself if desired. See also the "timidity-patch-freepats" package on others RPM based distros.


-Adding sound <-- As of the eduke32_src_20070905 files that I just built, the sounds works! WOO HOO! ;)
== Build EDuke32 ==
In a terminal window move to the EDuke32 sources folder and type <code>make</code>.


=== Build options ===
It is possible to define some options during the build. Just add them before or after the 'make' command.


Example: <code>make RELEASE=0</code>


Installation Notes:  
{|class="wikitable" width="65%"
|+ <span style="text-decoration: underline">Various options</span>
|-
!width="15%"|Options!!width="70%"|Description!!width="15%"|Default value
|-
|PRETTY_OUTPUT||Use colored output.||1
|}


{|class="wikitable" width="65%"
|+ <span style="text-decoration: underline">Engine options</span>
|-
!width="15%"|Options!!width="70%"|Description!!width="15%"|Default value
|-
|USE_OPENGL||Enable basic OpenGL Polymost renderer.||1
|-
|POLYMER||Enable modern Polymer renderer for great justice.||1
|-
|NOASM||Disable the use of the ASM code for the classic renderer. Should be enabled on 32-bit [http://en.wikipedia.org/wiki/Pentium_compatible_processor Pentium compatible processors] only.||0 (ASM is disabled for x86_64 automatically because the ASM is 32-bit.)
|-
|HAVE_GTK2||Enable run-time linkage to GTK+.||1
|-
|STARTUP_WINDOW||Enable the startup window.||1
|-
|USE_LIBVPX||VP8 video codec used as an alternative to the ANM file format (only works if compiled with the OpenGL support).||1
|}


1. You need an actual copy of Duke Nukem 3D. The shareware vesion can be found here. [http://www.3drealms.com/duke3d/]
{|class="wikitable" width="65%"
|+ <span style="text-decoration: underline">Debugging and Build options</span>
|-
!width="15%"|Options!!width="70%"|Description!!width="15%"|Default value
|-
|CLANG||Use the Clang compiler instead of the default GCC.||0
|-
|RELEASE||No debugging.||1
|-
|FORCEDEBUG||Include debug symbols even when generating release code.<br/>Additionally, with RELEASE=0, the following arrays are allocated statically: spriteext, spritesmooth, sector, wall, sprite, tsprite, while necessarily disabling the clipshape feature (because it relies on setting sector/wall to different malloc'd block temporarily). Really only useful with CC=clang.||0
|-
|KRANDDEBUG||Include logging of krand() calls for debugging the demo system.||0
|-
|MICROPROFILE||Include a profiler that is connected to the CON VM. Provides statistics on how much processing time different CON events took in a specific time interval. To use it, launch the game and open a browser to the address "localhost:1338". This will display a snapshot of the last N milliseconds of measurements that were taken just before the page was requested. See also: https://github.com/zeux/microprofile ||0
|}


2. I had HUGE problems using my 128mb ATI graphics card. After I switched to an older 64mb nvidia card and used the LIVNA drivers life was great. So, use an NVIDIA graphics card and use the LIVNA repo to get your drivers. Maybe one day ATI and Linux will be friends but that day is not here.
{|class="wikitable" width="65%"
|+ <span style="text-decoration: underline">Optimization options</span>
|-
!width="15%"|Options!!width="70%"|Description!!width="15%"|Default value
|-
|OPTLEVEL||GCC optimization strategy. Values above 2 can cause crashes.||2
|-
|LTO||Enable link-time optimization, for GCC 4.5 and up.||1
|-
|OPTOPT||Define options specific to the CPU architecture.||empty (except for i686)
|-
|CUSTOMOPT||Custom options or optimizations, parameters defined here, are sent to both compiler and linker.||empty
|-
|}


== Confirm successful compile ==
These files should now be present in the EDuke32 directory:
* eduke32, the binary to launch the game.
* mapster32, the binary to launch the maps editor.


'''Step #1 - You need to acquire and unzip the source packages for EDuke32. '''
= Run the game! =
You need to have the original Duke Nukem 3D files and the newly created EDuke32 executables in the same place. So, you could create a new folder (example eduke32_linux) and copy the original game files and the newly created EDuke32 executables there.


You need both the eduke32 source and txbuild source files. Download them to your desktop from [http://www.eduke32.com/downloads here]. Once you have download them, you must unzip them into the same directory, as a result, you will have two folders: "eduke32_src_xxxx" and "txbuild_src_xxxx".
To run the game open up a terminal window, move to the proper directory and type :


<pre>./eduke32</pre>
* To use the [http://hrp.duke4.net Polymost High Resolution Pack] you can pass the -grp parameter :
<pre>./eduke32 -grp duke3d_hrp.zip polymost_hrp_update-*.zip</pre>


'''Step #2 - Rename folders on your desktop.'''
* To use the [http://hrp.duke4.net Polymer HRP] you can pass the -grp parameter :
<pre>./eduke32 -grp polymer_hrp.zip polymer_upd.zip</pre>
Note that ''polymer_upd.zip'' may not be available. It is also possbile to add additional packs such as remade music and Z-Pack.


Rename the "eduke32_src_xxxx" folder to "duke3d" and the "txbuild_src_xxx" folder to "build". Why these names? Well, when you build the required EDuke32 files from the "duke3d" folder it looks into the "build" folder for required information.
* Using the autoload folder :
Copy mods or HRP files in the ''$HOME/.eduke32/autoload'' folder and it will be automaticaly loaded without additional parameters.


= Installing EDuke32 globally =


'''Step #3 - Prepare Fedora Core 6 for the build process'''
== Why ==
Installing EDuke32 as an application that you could run anywhere brings some useful advantages and is surprisingly easy to do.


Fedora needs some packages installed before you can properly build the required files. So, what files do you need? Under Yum Extender GUI or in a terminal window you need to install these files. Here's the list:
EDuke32 will use the directory you are currently in as the directory to work in, as well as ~/.config/eduke32 (/home/<username>/.config/eduke32). This means that you could have a directory, copy a Duke Nukem TC (or mod) in there, cd to that directory and run the global EDuke32 binary without having to make even more copies of the same EDuke32 binaries. EDuke32 will adapt to use the GAME/USER.CON files it finds in the CURRENT directory.


# SDL <-- I just installed SDL* (anything with the name SDL) to be safe and the sound seems to be working great!
== How ==
# nasm
All you'll have to do to get EDuke32 to run from anywhere is copy the eduke32 and mapster32 binaries to /usr/local/bin. After doing this, copy the ''duke3d.grp'' file to /usr/local/share/games/eduke32 or ~/.config/eduke32 (it's hidden, so try to cd to it or show hidden files). After this you'll be able to run EDuke32 from any directory on your hard disk!
# libstdc++


= Notes =
== Lowercase/Uppercase problems ==
<!-- '''Shareware'''
If you are using the Shareware files located on the 3D Realms website, after you build and combine all the files into one folder and try to run the game you will get an error about the TABLES.DAT file. To correct the error simply rename the DUKE3D.GRP to all lowercase letter. After that the game should run. This isn't necessary anymore -->


'''Step #4 - Building the EDuke32 files.'''
'''Maps with extra resources'''
Some maps that include extra resources might have trouble finding these new files (for example, an older version of Duke Plus won't be able to find Step#.wav and Grate#.wav sounds). The EDuke32 log will output a "file not found" error every time this happens. To fix this, change the names of these files to match the exact case given in EDuke32's log (for example, GRATE#.wav instead of Grate#.wav).


In a terminal window move to the "duke3d" folder and type <code>make</code>.
'''ART file inconsistency'''
While most standard resources are referred to as UPPERCASE by EDuke32 (for example, GAME.CON), ART files are not as consistent and should be renamed to lowercase if you want to use custom art (tiles014.art instead of TILES014.ART).


== Running with HRP Notes ==
If you want to run Polymer with the HRP you will need to provide the path to polymer_hrp.zip (even if its installed globally):
<code>eduke32 -g/path/to/polymer_hrp.zip</code>.


'''Step #5 - Confirm that the following files were created.'''
Running EDuke32 with an ATI card is slow for some users.
One user has had success with a Radeon 4850 and Fedora 12 with the open source default driver plus the latest Mesa experimental - the game runs smooth and pretty fast.


# mapster32.map
[[Category:Distribution documentation]]
# mapster32.sym
# mapster32 (executable)
# eduke32.map
# eduke32.sym
# eduke32 (exectuable)
 
 
'''Step #6 - Combine all the files.'''
 
You need to have the original Duke Nukem files and the newly created EDuke32 files in the same place. So, you could create a new folder on your desktop (example eduke32_linux) and copy the original game files and the newly created EDuke32 files there.
 
 
'''Step #7 - Run the game!'''
 
To run the game open up a terminal window, move to the proper directory and type:
 
<code>./eduke32</code>
 
If you have done everything correctly then the game should run great.
 
 
 
Error Note:
 
If you are using the Shareware files located on the 3D Realms website, after you build and combine all the files into one folder and try to run the game you will get an error about the TABLES.DAT file. To correct the error simply rename the DUKE3D.GRP to all lowercase letter. After that the game should run.
 
 
Running with HRP Notes:
 
A WIP kind of like DNF. ;)

Latest revision as of 18:45, 2 June 2022

EDuke32 Distribution

Download · Source Code · APT repository · Packages
Building from source on: Linux · Windows · macOS


Compiling From Source

Installation Notes

  • You need an actual copy of Duke Nukem 3D. See Installation and configuration.
  • 3D acceleration drivers (recommended). NVIDIA has classically had the best Linux drivers.
  • A MIDI device or player for the soundtrack (optional). By default, the game uses TinySoundFont for loading sound fonts, and Nuked OPL3 for OPL emulation. It's possible to use an external MIDI device or player for Duke Nukem 3D via an ALSA MIDI port.

Getting source files

See Acquiring the EDuke32 Source Code.

Prerequisites for the build

EDuke32 requires some development files installed before you can properly build.

Packages

  • Basic dev environment (GCC >= 6.1, GNU make, etc)
  • SDL2 >= 2.0 (SDL >= 1.2.10 also supported with SDL_TARGET=1)

Optional Packages

  • NASM (recommended for i686/32-bit compilation to speed up the 8-bit classic software renderer in some cases)
  • libGL (required for OpenGL renderers)
  • libgtk2.0 >= 2.8.0 (required for the startup window)
  • libFLAC >= 1.2.1 (required for lossless music packs)
  • libvpx >= 0.9.0 (required for intro videos and cutscenes in some user-created modifications)

Distro-Specific Installation

On Debian / Ubuntu

sudo apt-get install build-essential nasm libgl1-mesa-dev libsdl2-dev flac libflac-dev libvpx-dev libgtk2.0-dev freepats

On Fedora 22-25

sudo dnf groupinstall "Development Tools"
sudo dnf install g++ nasm mesa-libGL-devel SDL2-devel alsa-lib-devel libvpx-devel gtk2-devel flac flac-devel

Freepats is not packaged in Fedora, you must download and install it by yourself if desired. See also the "timidity-patch-freepats" package on others RPM based distros.

Build EDuke32

In a terminal window move to the EDuke32 sources folder and type make.

Build options

It is possible to define some options during the build. Just add them before or after the 'make' command.

Example: make RELEASE=0

Various options
Options Description Default value
PRETTY_OUTPUT Use colored output. 1
Engine options
Options Description Default value
USE_OPENGL Enable basic OpenGL Polymost renderer. 1
POLYMER Enable modern Polymer renderer for great justice. 1
NOASM Disable the use of the ASM code for the classic renderer. Should be enabled on 32-bit Pentium compatible processors only. 0 (ASM is disabled for x86_64 automatically because the ASM is 32-bit.)
HAVE_GTK2 Enable run-time linkage to GTK+. 1
STARTUP_WINDOW Enable the startup window. 1
USE_LIBVPX VP8 video codec used as an alternative to the ANM file format (only works if compiled with the OpenGL support). 1
Debugging and Build options
Options Description Default value
CLANG Use the Clang compiler instead of the default GCC. 0
RELEASE No debugging. 1
FORCEDEBUG Include debug symbols even when generating release code.
Additionally, with RELEASE=0, the following arrays are allocated statically: spriteext, spritesmooth, sector, wall, sprite, tsprite, while necessarily disabling the clipshape feature (because it relies on setting sector/wall to different malloc'd block temporarily). Really only useful with CC=clang.
0
KRANDDEBUG Include logging of krand() calls for debugging the demo system. 0
MICROPROFILE Include a profiler that is connected to the CON VM. Provides statistics on how much processing time different CON events took in a specific time interval. To use it, launch the game and open a browser to the address "localhost:1338". This will display a snapshot of the last N milliseconds of measurements that were taken just before the page was requested. See also: https://github.com/zeux/microprofile 0
Optimization options
Options Description Default value
OPTLEVEL GCC optimization strategy. Values above 2 can cause crashes. 2
LTO Enable link-time optimization, for GCC 4.5 and up. 1
OPTOPT Define options specific to the CPU architecture. empty (except for i686)
CUSTOMOPT Custom options or optimizations, parameters defined here, are sent to both compiler and linker. empty

Confirm successful compile

These files should now be present in the EDuke32 directory:

  • eduke32, the binary to launch the game.
  • mapster32, the binary to launch the maps editor.

Run the game!

You need to have the original Duke Nukem 3D files and the newly created EDuke32 executables in the same place. So, you could create a new folder (example eduke32_linux) and copy the original game files and the newly created EDuke32 executables there.

To run the game open up a terminal window, move to the proper directory and type :

./eduke32
./eduke32 -grp duke3d_hrp.zip polymost_hrp_update-*.zip
  • To use the Polymer HRP you can pass the -grp parameter :
./eduke32 -grp polymer_hrp.zip polymer_upd.zip

Note that polymer_upd.zip may not be available. It is also possbile to add additional packs such as remade music and Z-Pack.

  • Using the autoload folder :

Copy mods or HRP files in the $HOME/.eduke32/autoload folder and it will be automaticaly loaded without additional parameters.

Installing EDuke32 globally

Why

Installing EDuke32 as an application that you could run anywhere brings some useful advantages and is surprisingly easy to do.

EDuke32 will use the directory you are currently in as the directory to work in, as well as ~/.config/eduke32 (/home/<username>/.config/eduke32). This means that you could have a directory, copy a Duke Nukem TC (or mod) in there, cd to that directory and run the global EDuke32 binary without having to make even more copies of the same EDuke32 binaries. EDuke32 will adapt to use the GAME/USER.CON files it finds in the CURRENT directory.

How

All you'll have to do to get EDuke32 to run from anywhere is copy the eduke32 and mapster32 binaries to /usr/local/bin. After doing this, copy the duke3d.grp file to /usr/local/share/games/eduke32 or ~/.config/eduke32 (it's hidden, so try to cd to it or show hidden files). After this you'll be able to run EDuke32 from any directory on your hard disk!

Notes

Lowercase/Uppercase problems

Maps with extra resources Some maps that include extra resources might have trouble finding these new files (for example, an older version of Duke Plus won't be able to find Step#.wav and Grate#.wav sounds). The EDuke32 log will output a "file not found" error every time this happens. To fix this, change the names of these files to match the exact case given in EDuke32's log (for example, GRATE#.wav instead of Grate#.wav).

ART file inconsistency While most standard resources are referred to as UPPERCASE by EDuke32 (for example, GAME.CON), ART files are not as consistent and should be renamed to lowercase if you want to use custom art (tiles014.art instead of TILES014.ART).

Running with HRP Notes

If you want to run Polymer with the HRP you will need to provide the path to polymer_hrp.zip (even if its installed globally): eduke32 -g/path/to/polymer_hrp.zip.

Running EDuke32 with an ATI card is slow for some users. One user has had success with a Radeon 4850 and Fedora 12 with the open source default driver plus the latest Mesa experimental - the game runs smooth and pretty fast.