<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hendricks266</id>
	<title>EDukeWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hendricks266"/>
	<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/wiki/Special:Contributions/Hendricks266"/>
	<updated>2026-04-04T10:42:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0-alpha</generator>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15094</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15094"/>
		<updated>2026-03-19T15:48:42Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]] for the communities I am a part of, the roles in which I serve, and my accomplishments. (For a more formal CV, see my LinkedIn below.)&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***faithful music replacement packs for EDuke32&lt;br /&gt;
****&#039;&#039;Duke Nukem 3D&#039;&#039; for Sega Saturn Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; PlayStation Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem 64&#039;&#039; Music Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Developer on &#039;&#039;Duke Nukem 3D: Hail to the King Collection&#039;&#039; (canceled)&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully facilitated releases for &#039;&#039;Blood&#039;&#039;, &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Created [https://forums.duke4.net/topic/9922-/ a tool that can extract and decompile the CON bytecode from all known versions of Duke Nukem 64 and Duke Nukem: Total Meltdown]&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Cobbled together [https://hendricks266.duke4.net/flappywang/ FlappyWang]&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
**[https://www.mobygames.com/person/602625/evan-ramos/ I have a MobyGames page apparently.]&lt;br /&gt;
*Stuff I&#039;ve done for other game communities:&lt;br /&gt;
**Helped my friend [https://fallout.wiki/wiki/Mod:RoyBatty RoyBatty] build the [https://www.nexusmods.com/newvegas/mods/55061 4GB FNV Updated Loader] for &#039;&#039;Fallout: New Vegas&#039;&#039;&lt;br /&gt;
***The mod entry on NexusMods with my credit attached is still in the top 50 all-time downloaded mods for the game despite the fact that I&#039;ve never played it!&lt;br /&gt;
**Created the initial version of the [https://forum.starmen.net/forum/Games/Mother3/MOTHER-3-Ultimate-Music-Rip MOTHER 3 Ultimate Music Rip], since supplanted by [https://forum.starmen.net/forum/Games/Mother3/The-NEW-Ultimate-Music-Rip-for-MOTHER-3 an update by JumpmanFR]&lt;br /&gt;
**Constructed a .vgm pack for [https://www.smspower.org/Music/ShiningForceGaidenFinalConflict-GG Shining Force Gaiden ~Final Conflict~]&lt;br /&gt;
***Also contributed one track to the [https://vgmrips.net/packs/author/hendricks266 Sonic 3 &amp;amp; Knuckles VGM rip] from the [https://hiddenpalace.org/Sonic_3C_(May_17,_1994_prototype) Sonic 3C 0517 Prototype]&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Utilities&amp;diff=15093</id>
		<title>Utilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Utilities&amp;diff=15093"/>
		<updated>2026-03-11T04:24:23Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: /* Palettes (.DAT) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When modding EDuke32, there are some files you will need to edit certain aspects of the game.&lt;br /&gt;
Here we will cover the needed programs for each aspect.&lt;br /&gt;
&lt;br /&gt;
== Data Files ==&lt;br /&gt;
&lt;br /&gt;
=== Group Files (.GRP) ===&lt;br /&gt;
They hold all of the relevant files for the game, and keep your folders tidy. There are several programs available for use.&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
The preeminent command-line programs for this purpose, and what the original developers used, are kextract and kgroup, part of the [[Build tool]]s.&lt;br /&gt;
&lt;br /&gt;
We can find a program called grpextract [svn://svn.icculus.org/duke3d/trunk here]. To build it, just do:&lt;br /&gt;
&lt;br /&gt;
 gcc grpextract.c -o grpextract&lt;br /&gt;
&lt;br /&gt;
While lacking a GUI, they get the job done.&lt;br /&gt;
&lt;br /&gt;
==== GUI ====&lt;br /&gt;
There are other programs which can view art files inside the .GRP and play sound bytes. Other programs include Jonah Bishop&#039;s [https://dukeworld.com/2001-current/rtcm/duke3d-tools-grp/gfs31.zip Group File Studio] and Roma Loom&#039;s [[:File:GViewer.zip|GRPViewer]]&lt;br /&gt;
&lt;br /&gt;
For your own mods, it is highly recommended to use either .zip files or folders in conjunction with the -j command line parameter instead of GRP files.&lt;br /&gt;
&lt;br /&gt;
=== Zip Files (.zip) ===&lt;br /&gt;
&lt;br /&gt;
For zip files, there are no better than [http://www.7-zip.org/ 7-Zip] (GUI) and [http://advsys.net/ken/utils.htm KZIP] (CLI).&lt;br /&gt;
&lt;br /&gt;
For novelty, the .pk3 and .pk4 file extensions are also supported.&lt;br /&gt;
&lt;br /&gt;
=== Control Files (.CON) ===&lt;br /&gt;
.CON files hold most of the important code for the game. Since they are source code, they are simply text files and can be opened in any text editor. [http://notepad-plus-plus.org/ Notepad++] and [http://www.emeraldeditor.com/ Emerald Editor (aka Crimson Editor)] are recommended.&lt;br /&gt;
&lt;br /&gt;
=== Maps (.MAP) ===&lt;br /&gt;
.MAP files are levels. To edit maps, use Mapster32, which comes with EDuke32.&lt;br /&gt;
&lt;br /&gt;
== 8-Bit Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Art Files (.ART) ===&lt;br /&gt;
.ART files hold all the raw art data in a tidy manner. Once again, there are numerous programs available which can edit the .ART files. The most commonly used program is the one that came with Duke Nukem 3D: EditArt. It is a 16-bit DOS program, so the use of DOSBox is recommended. Other programs include [https://m210.duke4.net/index.php/downloads/download/8-java/41-build-art-files-editor BAFed (Recommended)], [http://archive.dukertcm.com/knowledge-base/downloads-rtcm/duke3d-tools-editart/bastART.zip bastART] and [http://archive.dukertcm.com/knowledge-base/downloads-rtcm/duke3d-tools-editart/dukeresART.zip DukeResART]&lt;br /&gt;
&lt;br /&gt;
The [[Build tool]] &#039;&#039;&#039;arttool&#039;&#039;&#039; is handy for constructing ART files in a simple and well-defined manner, but be warned that it causes corruption of your art files in some circumstances that has yet to be debugged.&lt;br /&gt;
&lt;br /&gt;
There are two command line utilities called art2tga and tga2art that allow management of art files. NB: They contain some amount of hardcoded behavior to fit the art and palette of the game &#039;&#039;Blood&#039;&#039;. [http://hendricks266.duke4.net/stuff/rebuild-bin-win32-101229-h266.7z Win32 binaries], [http://hendricks266.duke4.net/stuff/rebuild-src-101229-h266.7z source code], [http://blood.sourceforge.net/snapshots.php#rebuild-section origin]&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a replacement for art2tga/tga2art being written by [[User:Kraigose|Kraigose]] based on their codebase which aims to replace these tools using the more well known PNG format with the simplicity of the TGA tools INI file syntax. A precompiled Win32 build and source can be found [http://www.kraigosestudios.com/programming/eduke32-art-tools/ here] at Kraigose&#039;s website. A readme file is included in the download, as well as color tables for Adobe Photoshop. Images must be 256-color PNGs at the moment, but that&#039;ll be fixed soon. It&#039;s usage syntax is similar to art2tga and tga2art, but it supports by default doing &#039;&#039;all&#039;&#039; ART files in batch. More development is expected.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to finaggle with .art files and their tools, you can use PNG files directly and define them in the DEF language using &amp;quot;tilefromtexture&amp;quot; and related commands. See: [[DEF Language#8-Bit .ART File Replacements]]&lt;br /&gt;
&lt;br /&gt;
=== Animations (.ANM) ===&lt;br /&gt;
.ANM files hold raw .PCX files, which are added together and then played as an animation. In the game these are the animations you see at the end of a boss fight. The sounds for the animations are not included in the .ANM. One of the few .ANM compiling programs is [http://dukeworld.duke4.net/rtcm/duke3d-tools-editart/anim2pcx.zip Animation File Maker]&lt;br /&gt;
&lt;br /&gt;
[http://www.ffmpeg.org FFmpeg], since version 0.6,  can also decode and play anm files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Some examples:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Play the &#039;foo&#039; animation file:&lt;br /&gt;
&lt;br /&gt;
 ffplay foo.anm&lt;br /&gt;
&lt;br /&gt;
Extract all frames from the &#039;foo&#039; animation file into the PNG format (works also with PCX, and a number of other formats)&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i foo.anm bar%03d.png&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible to encode into ANM format with FFmpeg.&lt;br /&gt;
&lt;br /&gt;
=== Voxels (.KVX) ===&lt;br /&gt;
Voxels are simple 3D shapes made out of three-dimensional cubes. While no voxels were ever included in any commercial versions of Duke Nukem 3D, its fellow BUILD games Shadow Warrior and Blood have many. EDuke32 supports voxels as well.&lt;br /&gt;
&lt;br /&gt;
To create and edit voxels, use [http://advsys.net/ken/download.htm Ken Silverman&#039;s SLAB6].&lt;br /&gt;
&lt;br /&gt;
=== Palettes (.DAT) ===&lt;br /&gt;
The PALETTE.DAT and LOOKUP.DAT files hold the palettes, palettes swaps, shade and translucency (blending) tables for the game.&lt;br /&gt;
&lt;br /&gt;
This is one of the most loathed and untouched editable features of Duke3D. While incredibly difficult, it can come to good effect. The [[Build tools]] &#039;&#039;&#039;bsuite&#039;&#039;&#039;, &#039;&#039;&#039;mkpalette&#039;&#039;&#039;, and &#039;&#039;&#039;transpal&#039;&#039;&#039; can help you in this regard.&lt;br /&gt;
&lt;br /&gt;
However, the modern def syntax of [[basepalette (DEF)|basepalette]], [[palookup (DEF)|palookup]], and [[blendtable (DEF)|blendtable]] is simpler and superior than dealing with these old formats and tools.&lt;br /&gt;
&lt;br /&gt;
For further information, see: [[palette data files]]&lt;br /&gt;
&lt;br /&gt;
=== Sounds (.VOC/.WAV) ===&lt;br /&gt;
&lt;br /&gt;
You are likely going to want to use [[#Audio (.ogg/.flac)|a modern audio format]].&lt;br /&gt;
&lt;br /&gt;
The best tool for the job of the legacy sound formats is [http://www.goldwave.com/ GoldWave]. Save them as 8-bit or 16-bit unsigned PCM, without any form of compression.&lt;br /&gt;
&lt;br /&gt;
=== Music (.MID) ===&lt;br /&gt;
&lt;br /&gt;
As with sounds, you are likely going to want to use [[#Audio (.ogg/.flac)|a modern audio format]].&lt;br /&gt;
&lt;br /&gt;
Composing MIDI files is beyond the scope of this article. However, [http://openmidiproject.sourceforge.jp/Sekaiju_en.html Sekaiju] is useful utility for examining and making objective modifications. [http://musescore.org/ MuseScore] may also be of some use.&lt;br /&gt;
&lt;br /&gt;
A section on MIDI would not be complete without mentioning [http://timidity.sourceforge.net/ TiMidity++].&lt;br /&gt;
&lt;br /&gt;
A very technical description of EMIDI, proprietary extensions to the MIDI format designed for the Apogee Sound System and used in the Duke Nukem 3D MIDI data files, can be found [http://hendricks266.duke4.net/databases/midi/sw/1.2%20Registered%20CD/Emidi11.txt here]. The foo_midi component for foobar2000 can play back EMIDI correctly. Note that EMIDI only works on Windows builds of EDuke32.&lt;br /&gt;
&lt;br /&gt;
== Modern Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Textures (.png/.jpg/.tga/.dds) ===&lt;br /&gt;
EDuke32 supports true color textures. These can be made in any image editing program, including Adobe Photoshop, Corel Paint Shop Pro, and [http://www.gimp.org/ The GNU Image Manipulation Program (GIMP)]&lt;br /&gt;
&lt;br /&gt;
Keep in mind that JPEG and DDS are forms of [[Wikipedia:lossy compression|lossy compression]]. Be sure to back up your image in two ways: one, in a PNG-exported final copy, and two, if applicable, in your image editor&#039;s source file (PSD/XCF/PSP).&lt;br /&gt;
&lt;br /&gt;
==== PNG Optimization ====&lt;br /&gt;
&lt;br /&gt;
[http://hendricks266.duke4.net/stuff/png_optimize.7z Hendricks266&#039;s PNG Optimization Package] contains Windows binaries of the following programs, along with an install script that copies them to system32 and adds right-click entries for optimization scripts to the registry entries of PNG files.&lt;br /&gt;
&lt;br /&gt;
*[http://advsys.net/ken/utils.htm PNGOUT]&lt;br /&gt;
*[http://psydk.org/PngOptimizer.php PngOptimizerCL]&lt;br /&gt;
&lt;br /&gt;
=== 3D Models (.md3) ===&lt;br /&gt;
&lt;br /&gt;
==== Programs ====&lt;br /&gt;
&lt;br /&gt;
This is a list of 3D modelling programs which can be used to create and edit 3D models for use with EDuke32.&lt;br /&gt;
&lt;br /&gt;
*[http://www.blender.org Blender], open source 3D modeler can be used for UV unwrapping, texturing, rigging, water simulations, skinning, animating, rendering, particle and other simulations. (Import/Export MD3 scripts for Blender [http://hendricks266.duke4.net/stuff/new_blender_md3.zip 2.43 (up to 2.49)], [http://forums.duke4.net/topic/5358-blender-26-md3-export-script 2.6x+ (by Drek)]. [http://www.katsbits.com/tools See also katsbits.com], they provide several exporters for different versions of Blender.)&lt;br /&gt;
*[http://www.misfitcode.com/misfitmodel3d Misfit Model 3D], open source and OpenGL-based 3D model editor that works with triangle-based models (on Debian based distros, package is called mm3d).&lt;br /&gt;
*[http://www.turbosquid.com/gmax Gmax], video game modeling tool (Windows, freeware). (MD3 exporter plugin for Gmax can be found [http://www.katsbits.com/tools here].)&lt;br /&gt;
*[http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=5659302 3DS Max], 3D modeler (Windows, commercial). (MD3 export script for 3DS Max [http://www.katsbits.com/tools v4.2/v5] and [http://www.katsbits.com/tools v6].)&lt;br /&gt;
*[http://chumbalum.swissquake.ch Milkshape 3D], 3D modeler (Windows, commercial).&lt;br /&gt;
&lt;br /&gt;
==== Tools ====&lt;br /&gt;
&lt;br /&gt;
These are small tools which may prove useful when working with MD3 models.&lt;br /&gt;
&lt;br /&gt;
*[http://www.gamers.org/pub/idgames2/planetquake/q2pmp/NMD3C.zip NPherno&#039;s MD3 Compiler]&lt;br /&gt;
*[http://automagically.de/g3dviewer/ G3DViewer], open source and OpenGL models viewer, support formats 3D Studio, Quake 2, Quake 3 and many others.&lt;br /&gt;
&lt;br /&gt;
=== Movies (.ivf) ===&lt;br /&gt;
IVF files are an alternative to the ANM format utilizing a VP8 video stream, the same used in the WebM format but without the Vorbis audio stream.&lt;br /&gt;
&lt;br /&gt;
To play it in-game, place the ivf file in a place EDuke32 will see and give it the same name as the .anm file that we want to replace (eg &#039;&#039;logo.ivf&#039;&#039; for the animation logo when the game starts).&lt;br /&gt;
&lt;br /&gt;
To encode video, including an uncompressed raw one, to IVF, use this command line syntax with [http://www.ffmpeg.org FFmpeg]:&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i &amp;lt;input&amp;gt; -an -vcodec libvpx -crf 8 -b:v 2M &amp;lt;output&amp;gt;.ivf&lt;br /&gt;
&lt;br /&gt;
See the [https://trac.ffmpeg.org/wiki/Encode/VP8 FFmpeg Encode/VP8 wiki page] for more information about fine-tuning a VP8 encode.&lt;br /&gt;
&lt;br /&gt;
To extract VP8 video tracks from a WebM file into an IVF file, you can use:&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i &amp;lt;input&amp;gt;.webm -an -vcodec copy &amp;lt;output&amp;gt;.ivf&lt;br /&gt;
&lt;br /&gt;
[http://ffmpeg.zeranoe.com/builds/ Windows binaries of FFmpeg] are available.&lt;br /&gt;
&lt;br /&gt;
=== Audio (.ogg/.flac) ===&lt;br /&gt;
&lt;br /&gt;
EDuke32 supports the following modern formats for both sounds and music:&lt;br /&gt;
&lt;br /&gt;
*[http://www.vorbis.com/ Ogg Vorbis]&lt;br /&gt;
*[http://flac.sourceforge.net/ FLAC]&lt;br /&gt;
&lt;br /&gt;
Constructing your own sounds and music is beyond the scope of this article, but the following tools may be helpful in processing the audio data into the supported formats:&lt;br /&gt;
&lt;br /&gt;
*Encoders&lt;br /&gt;
**Ogg Vorbis&lt;br /&gt;
***[http://www.geocities.jp/aoyoume/aotuv/ aoTuv]&lt;br /&gt;
***[http://www.rarewares.org/ogg-oggenc.php oggenc2]&lt;br /&gt;
**FLAC&lt;br /&gt;
***[http://flac.sourceforge.net/documentation_tools.html flac]&lt;br /&gt;
*Editors&lt;br /&gt;
**[http://www.ffmpeg.org FFmpeg]&lt;br /&gt;
**[http://sox.sourceforge.net/ Sound eXchange (SoX)]&lt;br /&gt;
**[http://www.goldwave.com/ GoldWave]&lt;br /&gt;
**[http://audacity.sourceforge.net/ Audacity]&lt;br /&gt;
&lt;br /&gt;
If you use Vorbis, keep in mind that it is a form of [[Wikipedia:lossy audio compression|lossy audio compression]]. Be sure to back up your source material in FLAC format.&lt;br /&gt;
&lt;br /&gt;
====Looping====&lt;br /&gt;
&lt;br /&gt;
Loops are controlled by three tags in the audio metadata. All values are in &#039;&#039;&#039;PCM samples&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;LOOP_START&#039;&#039;&#039; holds the beginning of the loop, the position to which playback returns at the end of the loop.&lt;br /&gt;
*&#039;&#039;&#039;LOOP_END&#039;&#039;&#039; is optional; it holds the end of the loop, after which the game seeks to LOOP_START. If undefined, the end of the file is the end of the loop. The primary purpose of LOOP_END is if you want to give your file a proper ending for listening outside the game.&lt;br /&gt;
*&#039;&#039;&#039;LOOP_LENGTH&#039;&#039;&#039; is another method to define the end of a loop. Internally, LOOP_START + LOOP_LENGTH = LOOP_END. LOOP_END takes precedence over LOOP_LENGTH.&lt;br /&gt;
&lt;br /&gt;
The underscores in all three are optional. All three tags are case-insensitive.&lt;br /&gt;
&lt;br /&gt;
To tag your audio files, use the CLI program [http://www.synthetic-soul.co.uk/tag/ Tag] or the GUI program [http://www.mp3tag.de/en/ Mp3tag].&lt;br /&gt;
    &lt;br /&gt;
To preview a looped Ogg you have assembled, give it a &amp;quot;.logg&amp;quot; extension and play it using the vgmstream plugin for Winamp or foobar2000. Note that vgmstream only appears to support LOOP_START, not LOOP_LENGTH and LOOP_END. No known program outside of EDuke32 supports looped FLAC.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://dukertcm.com/ R.T.C.M.]&lt;br /&gt;
* [http://dukerepository.com/utilities.php Duke Nukem Repository Utility Page]&lt;br /&gt;
* [http://www.gamers.org/pub/games/duke3d/other/build/ Gamers.org Archive Utility Page]&lt;br /&gt;
* [http://forums.duke4.net/topic/798-tutorials-resources The Tutorials &amp;amp; Resources thread on the forum]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Blendtable_(DEF)&amp;diff=15092</id>
		<title>Blendtable (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Blendtable_(DEF)&amp;diff=15092"/>
		<updated>2026-03-11T04:20:08Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blendtable&#039;&#039;&#039; &amp;lt;blendtable&amp;gt; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loads a blend table from a [[raw image file]].&lt;br /&gt;
&lt;br /&gt;
The image file MUST contain a 256 color table of its own. Each pixel will have their matching color in the table converted in the blend table.&lt;br /&gt;
&lt;br /&gt;
A single image file may contain multiple base palettes, and &#039;&#039;&#039;offset&#039;&#039;&#039; can used to locate it.&lt;br /&gt;
&lt;br /&gt;
ID 0 is reserved for the base game&#039;s original table of 33% transparency.&lt;br /&gt;
&lt;br /&gt;
A package for [[Duke Nukem 3D]] with blend tables generated to the same specification as [[Ion Fury]] is available and permitted for use in projects with credit to the author: [[file:duke3d blend package.7z]]&lt;br /&gt;
&lt;br /&gt;
See also [[numalphatables (DEF)|numalphatables]].&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;raw&#039;&#039;&#039; { [...] }&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; &amp;lt;filename&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;offset&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;glblend&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;forward&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;reverse&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;both&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;src&#039;&#039;&#039; &amp;lt;factor&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;sfactor&#039;&#039;&#039; / &#039;&#039;&#039;top&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
:::: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;dst&#039;&#039;&#039; &amp;lt;factor&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;dfactor&#039;&#039;&#039; / &#039;&#039;&#039;bottom&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
:::: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:::: See [[#Factors|below]].&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;alpha&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:::: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;copy&#039;&#039;&#039; &amp;lt;blendtable&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;undef&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
== Factors ==&lt;br /&gt;
&lt;br /&gt;
[[File:GL blend chart.jpg|thumb|200px|right|Chart explaining the combination of blend modes available in OpenGL.]]&lt;br /&gt;
&lt;br /&gt;
* ZERO&lt;br /&gt;
* ONE&lt;br /&gt;
* SRC_COLOR&lt;br /&gt;
* ONE_MINUS_SRC_COLOR&lt;br /&gt;
* SRC_ALPHA&lt;br /&gt;
* ONE_MINUS_SRC_ALPHA&lt;br /&gt;
* DST_ALPHA&lt;br /&gt;
* ONE_MINUS_DST_ALPHA&lt;br /&gt;
* DST_COLOR&lt;br /&gt;
* ONE_MINUS_DST_COLOR&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
The following PNG image contains the blend table in Duke Nukem 3D v1.5:&lt;br /&gt;
&lt;br /&gt;
[[File:Duke3d transpal.png]]&lt;br /&gt;
&lt;br /&gt;
This example will load 3 blend tables in the same file:&lt;br /&gt;
&lt;br /&gt;
 blendtable 0 { raw { file &amp;quot;blend.raw&amp;quot; } }&lt;br /&gt;
 blendtable 1 { raw { file &amp;quot;blend.raw&amp;quot; offset 65536 } }&lt;br /&gt;
 blendtable 2 { raw { file &amp;quot;blend.raw&amp;quot; offset 131072 } }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Numalphatables_(DEF)&amp;diff=15091</id>
		<title>Numalphatables (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Numalphatables_(DEF)&amp;diff=15091"/>
		<updated>2026-03-11T04:18:52Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;numalphatables&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines the number of blend tables to be used by [[alpha]].&lt;br /&gt;
&lt;br /&gt;
The IDs for the alpha tables start from 1, because ID 0 is reserved to 33% transparency.&lt;br /&gt;
&lt;br /&gt;
The transparency of the alpha tables should range from 0% to 50%. The second half will be generated by reversing the first half.&lt;br /&gt;
&lt;br /&gt;
Valid values are powers of two, or powers of two minus one. The two variations apply slightly different calculations, with the latter being slightly more accurate and efficient in data storage. (TODO: Explain further and add the actual math formulas.)&lt;br /&gt;
&lt;br /&gt;
For example, if you define &#039;&#039;&#039;numalphatables&#039;&#039;&#039; as 16, you should import table ids 1-16 using [[blendtable (DEF)|blendtable]], and in-game there will be 32 steps of transparency. [[Ion Fury]] uses a value of 31 for 64 steps of transparency with the more accurate calculations.&lt;br /&gt;
&lt;br /&gt;
A package for [[Duke Nukem 3D]] with blend tables generated in this ideal manner is available and permitted for use in projects with credit to the author: [[file:duke3d blend package.7z]]&lt;br /&gt;
&lt;br /&gt;
You can import up to 128 tables, which would provide a table for every value of alpha. However a value so high is probably not necessary, since the palette of a game won&#039;t have enough steps for a color to justify such a value. Additionally, such a large lookup table would overflow the caches of most CPUs, wrecking performance. It would be more reasonable to use a value similar to the shade table, which in Duke 3D case is 32, so a value of 16 for &#039;&#039;&#039;numalphatables&#039;&#039;&#039; would be more logical.&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=File:Duke3d_blend_package.7z&amp;diff=15090</id>
		<title>File:Duke3d blend package.7z</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=File:Duke3d_blend_package.7z&amp;diff=15090"/>
		<updated>2026-03-11T04:15:53Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Duke Nukem 3D extended blend tables&lt;br /&gt;
// by Hendricks266&lt;br /&gt;
// generated in the same way as Ion Fury&#039;s blend tables&lt;br /&gt;
// use in projects permitted with credit&lt;br /&gt;
&lt;br /&gt;
// assuming basepalette, shade table, and blend table #0 provided in base game&#039;s PALETTE.DAT&lt;br /&gt;
&lt;br /&gt;
// Alpha (X/64)&lt;br /&gt;
blendtable 1 { raw { file &amp;quot;blendtable_001.raw&amp;quot; } }&lt;br /&gt;
blendtable 2 { raw { file &amp;quot;blendtable_002.raw&amp;quot; } }&lt;br /&gt;
blendtable 3 { raw { file &amp;quot;blendtable_003.raw&amp;quot; } }&lt;br /&gt;
blendtable 4 { raw { file &amp;quot;blendtable_004.raw&amp;quot; } }&lt;br /&gt;
blendtable 5 { raw { file &amp;quot;blendtable_005.raw&amp;quot; } }&lt;br /&gt;
blendtable 6 { raw { file &amp;quot;blendtable_006.raw&amp;quot; } }&lt;br /&gt;
blendtable 7 { raw { file &amp;quot;blendtable_007.raw&amp;quot; } }&lt;br /&gt;
blendtable 8 { raw { file &amp;quot;blendtable_008.raw&amp;quot; } }&lt;br /&gt;
blendtable 9 { raw { file &amp;quot;blendtable_009.raw&amp;quot; } }&lt;br /&gt;
blendtable 10 { raw { file &amp;quot;blendtable_010.raw&amp;quot; } }&lt;br /&gt;
blendtable 11 { raw { file &amp;quot;blendtable_011.raw&amp;quot; } }&lt;br /&gt;
blendtable 12 { raw { file &amp;quot;blendtable_012.raw&amp;quot; } }&lt;br /&gt;
blendtable 13 { raw { file &amp;quot;blendtable_013.raw&amp;quot; } }&lt;br /&gt;
blendtable 14 { raw { file &amp;quot;blendtable_014.raw&amp;quot; } }&lt;br /&gt;
blendtable 15 { raw { file &amp;quot;blendtable_015.raw&amp;quot; } }&lt;br /&gt;
blendtable 16 { raw { file &amp;quot;blendtable_016.raw&amp;quot; } }&lt;br /&gt;
blendtable 17 { raw { file &amp;quot;blendtable_017.raw&amp;quot; } }&lt;br /&gt;
blendtable 18 { raw { file &amp;quot;blendtable_018.raw&amp;quot; } }&lt;br /&gt;
blendtable 19 { raw { file &amp;quot;blendtable_019.raw&amp;quot; } }&lt;br /&gt;
blendtable 20 { raw { file &amp;quot;blendtable_020.raw&amp;quot; } }&lt;br /&gt;
blendtable 21 { raw { file &amp;quot;blendtable_021.raw&amp;quot; } }&lt;br /&gt;
blendtable 20 { raw { file &amp;quot;blendtable_020.raw&amp;quot; } }&lt;br /&gt;
blendtable 21 { raw { file &amp;quot;blendtable_021.raw&amp;quot; } }&lt;br /&gt;
blendtable 22 { raw { file &amp;quot;blendtable_022.raw&amp;quot; } }&lt;br /&gt;
blendtable 23 { raw { file &amp;quot;blendtable_023.raw&amp;quot; } }&lt;br /&gt;
blendtable 24 { raw { file &amp;quot;blendtable_024.raw&amp;quot; } }&lt;br /&gt;
blendtable 25 { raw { file &amp;quot;blendtable_025.raw&amp;quot; } }&lt;br /&gt;
blendtable 26 { raw { file &amp;quot;blendtable_026.raw&amp;quot; } }&lt;br /&gt;
blendtable 27 { raw { file &amp;quot;blendtable_027.raw&amp;quot; } }&lt;br /&gt;
blendtable 28 { raw { file &amp;quot;blendtable_028.raw&amp;quot; } }&lt;br /&gt;
blendtable 29 { raw { file &amp;quot;blendtable_029.raw&amp;quot; } }&lt;br /&gt;
blendtable 30 { raw { file &amp;quot;blendtable_030.raw&amp;quot; } }&lt;br /&gt;
blendtable 31 { raw { file &amp;quot;blendtable_031.raw&amp;quot; } }&lt;br /&gt;
numalphatables 31&lt;br /&gt;
&lt;br /&gt;
// Screen&lt;br /&gt;
blendtable 129&lt;br /&gt;
{&lt;br /&gt;
    raw { file &amp;quot;blendtable_129.raw&amp;quot; }&lt;br /&gt;
    glblend { both { src ONE dst ONE_MINUS_SRC_COLOR } }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Multiply&lt;br /&gt;
blendtable 130&lt;br /&gt;
{&lt;br /&gt;
    raw { file &amp;quot;blendtable_130.raw&amp;quot; }&lt;br /&gt;
    glblend { both { src ZERO dst SRC_COLOR } }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Additive (100% intensity)&lt;br /&gt;
blendtable 255&lt;br /&gt;
{&lt;br /&gt;
    raw { file &amp;quot;blendtable_255.raw&amp;quot; }&lt;br /&gt;
    glblend { both { src ONE dst ONE } }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retrieved from https://hendricks266.duke4.net/stuff/duke3d_blend_package.7z&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=File:Duke3d_blend_package.7z&amp;diff=15089</id>
		<title>File:Duke3d blend package.7z</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=File:Duke3d_blend_package.7z&amp;diff=15089"/>
		<updated>2026-03-11T04:14:58Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &amp;lt;pre&amp;gt;
// Duke Nukem 3D extended blend tables
// by Hendricks266
// generated in the same way as Ion Fury&amp;#039;s blend tables
// use in projects permitted with credit

// assuming basepalette, shade table, and blend table #0 provided in base game&amp;#039;s PALETTE.DAT

// Alpha (X/64)
blendtable 1 { raw { file &amp;quot;blendtable_001.raw&amp;quot; } }
blendtable 2 { raw { file &amp;quot;blendtable_002.raw&amp;quot; } }
blendtable 3 { raw { file &amp;quot;blendtable_003.raw&amp;quot; } }
blendtable 4 { raw { file &amp;quot;blendtable_004.raw&amp;quot; } }
blendtable 5 { raw {...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Duke Nukem 3D extended blend tables&lt;br /&gt;
// by Hendricks266&lt;br /&gt;
// generated in the same way as Ion Fury&#039;s blend tables&lt;br /&gt;
// use in projects permitted with credit&lt;br /&gt;
&lt;br /&gt;
// assuming basepalette, shade table, and blend table #0 provided in base game&#039;s PALETTE.DAT&lt;br /&gt;
&lt;br /&gt;
// Alpha (X/64)&lt;br /&gt;
blendtable 1 { raw { file &amp;quot;blendtable_001.raw&amp;quot; } }&lt;br /&gt;
blendtable 2 { raw { file &amp;quot;blendtable_002.raw&amp;quot; } }&lt;br /&gt;
blendtable 3 { raw { file &amp;quot;blendtable_003.raw&amp;quot; } }&lt;br /&gt;
blendtable 4 { raw { file &amp;quot;blendtable_004.raw&amp;quot; } }&lt;br /&gt;
blendtable 5 { raw { file &amp;quot;blendtable_005.raw&amp;quot; } }&lt;br /&gt;
blendtable 6 { raw { file &amp;quot;blendtable_006.raw&amp;quot; } }&lt;br /&gt;
blendtable 7 { raw { file &amp;quot;blendtable_007.raw&amp;quot; } }&lt;br /&gt;
blendtable 8 { raw { file &amp;quot;blendtable_008.raw&amp;quot; } }&lt;br /&gt;
blendtable 9 { raw { file &amp;quot;blendtable_009.raw&amp;quot; } }&lt;br /&gt;
blendtable 10 { raw { file &amp;quot;blendtable_010.raw&amp;quot; } }&lt;br /&gt;
blendtable 11 { raw { file &amp;quot;blendtable_011.raw&amp;quot; } }&lt;br /&gt;
blendtable 12 { raw { file &amp;quot;blendtable_012.raw&amp;quot; } }&lt;br /&gt;
blendtable 13 { raw { file &amp;quot;blendtable_013.raw&amp;quot; } }&lt;br /&gt;
blendtable 14 { raw { file &amp;quot;blendtable_014.raw&amp;quot; } }&lt;br /&gt;
blendtable 15 { raw { file &amp;quot;blendtable_015.raw&amp;quot; } }&lt;br /&gt;
blendtable 16 { raw { file &amp;quot;blendtable_016.raw&amp;quot; } }&lt;br /&gt;
blendtable 17 { raw { file &amp;quot;blendtable_017.raw&amp;quot; } }&lt;br /&gt;
blendtable 18 { raw { file &amp;quot;blendtable_018.raw&amp;quot; } }&lt;br /&gt;
blendtable 19 { raw { file &amp;quot;blendtable_019.raw&amp;quot; } }&lt;br /&gt;
blendtable 20 { raw { file &amp;quot;blendtable_020.raw&amp;quot; } }&lt;br /&gt;
blendtable 21 { raw { file &amp;quot;blendtable_021.raw&amp;quot; } }&lt;br /&gt;
blendtable 20 { raw { file &amp;quot;blendtable_020.raw&amp;quot; } }&lt;br /&gt;
blendtable 21 { raw { file &amp;quot;blendtable_021.raw&amp;quot; } }&lt;br /&gt;
blendtable 22 { raw { file &amp;quot;blendtable_022.raw&amp;quot; } }&lt;br /&gt;
blendtable 23 { raw { file &amp;quot;blendtable_023.raw&amp;quot; } }&lt;br /&gt;
blendtable 24 { raw { file &amp;quot;blendtable_024.raw&amp;quot; } }&lt;br /&gt;
blendtable 25 { raw { file &amp;quot;blendtable_025.raw&amp;quot; } }&lt;br /&gt;
blendtable 26 { raw { file &amp;quot;blendtable_026.raw&amp;quot; } }&lt;br /&gt;
blendtable 27 { raw { file &amp;quot;blendtable_027.raw&amp;quot; } }&lt;br /&gt;
blendtable 28 { raw { file &amp;quot;blendtable_028.raw&amp;quot; } }&lt;br /&gt;
blendtable 29 { raw { file &amp;quot;blendtable_029.raw&amp;quot; } }&lt;br /&gt;
blendtable 30 { raw { file &amp;quot;blendtable_030.raw&amp;quot; } }&lt;br /&gt;
blendtable 31 { raw { file &amp;quot;blendtable_031.raw&amp;quot; } }&lt;br /&gt;
numalphatables 31&lt;br /&gt;
&lt;br /&gt;
// Screen&lt;br /&gt;
blendtable 129&lt;br /&gt;
{&lt;br /&gt;
    raw { file &amp;quot;blendtable_129.raw&amp;quot; }&lt;br /&gt;
    glblend { both { src ONE dst ONE_MINUS_SRC_COLOR } }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Multiply&lt;br /&gt;
blendtable 130&lt;br /&gt;
{&lt;br /&gt;
    raw { file &amp;quot;blendtable_130.raw&amp;quot; }&lt;br /&gt;
    glblend { both { src ZERO dst SRC_COLOR } }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Additive (100% intensity)&lt;br /&gt;
blendtable 255&lt;br /&gt;
{&lt;br /&gt;
    raw { file &amp;quot;blendtable_255.raw&amp;quot; }&lt;br /&gt;
    glblend { both { src ONE dst ONE } }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retrieved from https://hendricks266.duke4.net/stuff/duke3d_blend_package.7z&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette_(environment)&amp;diff=15088</id>
		<title>Palette (environment)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette_(environment)&amp;diff=15088"/>
		<updated>2026-03-11T04:09:51Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is an exhaustive listing of the 8-bit palette swaps in Duke Nukem 3D.&lt;br /&gt;
&lt;br /&gt;
The data controlling them can be found and modified in the [[palette data files]].&lt;br /&gt;
&lt;br /&gt;
==Colors of the base palette==&lt;br /&gt;
&lt;br /&gt;
The following plot shows the red, green and blue color intensities of Duke3D&#039;s base palette on a 0--1 scale.&lt;br /&gt;
&lt;br /&gt;
[[image:basepal0_rgb.png|alt=Base palette colors]]&lt;br /&gt;
&lt;br /&gt;
It can be seen that it contains six ramps (sequences in which R, G and B all increase monotonically) of 32 colors, three blocks of 16 colors (two of which are ramps), and 16 remaining fullbright colors. Rearranging consecutive blocks of 16 colors by the permutation [0 1 2 3 5 4 6 7 8 13 10 11 12 9 14 15] makes this stand out more clearly:&lt;br /&gt;
&lt;br /&gt;
[[image:basepal0_rgb_reord.png|alt=Rearranged base palette colors]]&lt;br /&gt;
&lt;br /&gt;
==Global Palettes==&lt;br /&gt;
For use with [[setgamepalette]]:&lt;br /&gt;
{| {{simpletable}}&lt;br /&gt;
! ID !! Palette !! Image&lt;br /&gt;
|- valign=top&lt;br /&gt;
|0&lt;br /&gt;
|Normal&lt;br /&gt;
| [[image:pala.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|1&lt;br /&gt;
|Underwater&lt;br /&gt;
| [[image:palb.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|2&lt;br /&gt;
|Night Vision Goggles &amp;lt;br /&amp;gt; Submersible Slime&lt;br /&gt;
| [[image:palc.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|3&lt;br /&gt;
|3D Realms Logo (changed in v1.4).&lt;br /&gt;
| [[image:pale.png|48px|v1.3D]] [[image:palf.png|48px|v1.4+]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|4&lt;br /&gt;
|Title Screen&lt;br /&gt;
| [[image:pald.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|5&lt;br /&gt;
|Episode 1 Ending&lt;br /&gt;
| [[image:palg.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|6&lt;br /&gt;
|Temporary slot for self-contained [[ANM]] palettes. Example provided is LOGO.ANM.&lt;br /&gt;
| [[image:palh.png|48px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Palette Swaps==&lt;br /&gt;
For use with [[spritepal]], [[pal]], et cetera:&lt;br /&gt;
{| {{simpletable}}&lt;br /&gt;
! ID !! Image !! Effect !! Description&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 0 &amp;lt;br /&amp;gt; 3 &amp;lt;br /&amp;gt; 9 &amp;lt;br /&amp;gt; [[#Empty Slots|empty]]&lt;br /&gt;
| [[image:pala.png|48px]]&lt;br /&gt;
| Normal&lt;br /&gt;
| Default color &amp;lt;br /&amp;gt; Player 1 (ID 9)&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 1&lt;br /&gt;
| [[image:pal1.png|48px]]&lt;br /&gt;
| All blue&lt;br /&gt;
| Frozen creatures &amp;lt;br /&amp;gt; Unavailable menu option &amp;lt;br /&amp;gt; Blue lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 2&lt;br /&gt;
| [[image:pal2.png|48px]]&lt;br /&gt;
| All red&lt;br /&gt;
| Blood pool &amp;lt;br /&amp;gt;Red lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 4&lt;br /&gt;
| [[image:pal4.png|48px]]&lt;br /&gt;
| Full black (including fullbrights)&lt;br /&gt;
| Shadows&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 5&lt;br /&gt;
| [[image:pal5.png|48px]]&lt;br /&gt;
| Red to brown&lt;br /&gt;
| Brown Team (Duke-Tag) Exit Level Nuke&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 6&lt;br /&gt;
| [[image:pal6.png|48px]]&lt;br /&gt;
| All reverse green&lt;br /&gt;
| Night Vision Goggles heat &amp;lt;br /&amp;gt; Protozoid Slimer, Protector Drone, and Alien Queen gibs&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 7&lt;br /&gt;
| [[image:pal7.png|48px]]&lt;br /&gt;
| All yellow&lt;br /&gt;
| Slime splash, FECES puddle &amp;lt;br /&amp;gt; Yellow/Brown lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 8&lt;br /&gt;
| [[image:pal8.png|48px]]&lt;br /&gt;
| All green&lt;br /&gt;
| Green lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 10&lt;br /&gt;
| [[image:pal10.png|48px]]&lt;br /&gt;
| Blue to dark red&lt;br /&gt;
| Player 2&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 11 &amp;lt;br /&amp;gt; 22&lt;br /&gt;
| [[image:pal11.png|48px]]&lt;br /&gt;
| Blue to green&lt;br /&gt;
| Player 3 (ID 11) &amp;lt;br /&amp;gt; Assault Trooper (ID 22)&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 12 &amp;lt;br /&amp;gt; 18&lt;br /&gt;
| [[image:pal12.png|48px]]&lt;br /&gt;
| Blue to gray&lt;br /&gt;
| Player 4 (ID 12)&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 13&lt;br /&gt;
| [[image:pal13.png|48px]]&lt;br /&gt;
| Blue and red to dark gray&lt;br /&gt;
| Player 5&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 14&lt;br /&gt;
| [[image:pal14.png|48px]]&lt;br /&gt;
| Blue and red to dark green&lt;br /&gt;
| Player 6 &amp;lt;br /&amp;gt; Secret Exit Level Nuke&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 15&lt;br /&gt;
| [[image:pal15.png|48px]]&lt;br /&gt;
| Blue to brown&lt;br /&gt;
| Player 7&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 16&lt;br /&gt;
| [[image:pal16.png|48px]]&lt;br /&gt;
| Blue to dark blue&lt;br /&gt;
| Player 8&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 17&lt;br /&gt;
| [[image:pal17.png|48px]]&lt;br /&gt;
| Brown, green, orange and purple to blue &amp;lt;br /&amp;gt; Blue to green&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 19&lt;br /&gt;
| [[image:pal19.png|48px]]&lt;br /&gt;
| Brown, green, orange and purple to red &amp;lt;br /&amp;gt; Blue to green&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 20&lt;br /&gt;
| [[image:pal20.png|48px]]&lt;br /&gt;
| Brown, green, orange and purple to blue &amp;lt;br /&amp;gt; Blue to gray&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 21&lt;br /&gt;
| [[image:pal21.png|48px]]&lt;br /&gt;
| Blue to red&lt;br /&gt;
| Red Key Card &amp;lt;br /&amp;gt; Assault Captain &amp;lt;br /&amp;gt; Battlelord Sentry&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 23&lt;br /&gt;
| [[image:pal23.png|48px]]&lt;br /&gt;
| Blue to yellow&lt;br /&gt;
| Yellow Key Card&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 24&lt;br /&gt;
| [[image:pal24.png|48px]]&lt;br /&gt;
| Gray to red &amp;lt;br /&amp;gt; Red to gray&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 25&lt;br /&gt;
| [[image:pal25.png|48px]]&lt;br /&gt;
| Green to red&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Fog Palettes==&lt;br /&gt;
EDuke32 includes four [[DEF Language#fogpal|fog palettes]] starting at palette index 26.&lt;br /&gt;
&lt;br /&gt;
Note that lookup.dat can be modified to support more than 25 palette remaps for 8-bit sprites; in this case, the included fog palettes start wherever the first unused palette position is.  For example, a modified copy of lookup.dat with 30 remaps instead of 25 would result in the fog palettes occupying indexes 31, 32, 33, and 34 instead of 26, 27, 28, and 29.&lt;br /&gt;
&lt;br /&gt;
They are:&lt;br /&gt;
 fogpal 26 63 63 63&lt;br /&gt;
 fogpal 27 63 0 0&lt;br /&gt;
 fogpal 28 0 63 0&lt;br /&gt;
 fogpal 29 0 0 63&lt;br /&gt;
This gives the fog colors of white (26), red (27), green (28) and blue (29).&lt;br /&gt;
&lt;br /&gt;
==Empty Slots==&lt;br /&gt;
&lt;br /&gt;
All empty palette swaps, including those without [[DEF Language#fogpal|fog palettes]], default to pal 0.&lt;br /&gt;
&lt;br /&gt;
If you are using [[DEF Language|defs]] to add additional skins or variations to empty palette slots of a model or texture which do not correspond to any palette swap, or [[DEF Language#fogpal|fog palettes]], it is &#039;&#039;&#039;very highly recommended&#039;&#039;&#039; to begin the indices for your custom variations at palette value #133. This is because modified [[Palette data files|LOOKUP.DAT and PALETTE.DAT]] files such as [http://lzg.duke4.net/extclut.htm ExtCLUT] can contain up to 128 palette entries. These additional values may conflict with your custom feature. The extra four spaces are to account for the [[#Fog Palettes|predefined fogpals]] explained above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=File:Basepal0_rgb_reord.png&amp;diff=15087</id>
		<title>File:Basepal0 rgb reord.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=File:Basepal0_rgb_reord.png&amp;diff=15087"/>
		<updated>2026-03-11T04:08:02Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: Image by User:Helixhorned

Retrieved from &amp;lt;code&amp;gt;http://lunatic.eduke32.com/basepal0_rgb_reord.png&amp;lt;/code&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Image by [[User:Helixhorned]]&lt;br /&gt;
&lt;br /&gt;
Retrieved from &amp;lt;code&amp;gt;http://lunatic.eduke32.com/basepal0_rgb_reord.png&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=File:Basepal0_rgb.png&amp;diff=15086</id>
		<title>File:Basepal0 rgb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=File:Basepal0_rgb.png&amp;diff=15086"/>
		<updated>2026-03-11T04:07:17Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Image by [[User:Helixhorned]]&lt;br /&gt;
&lt;br /&gt;
Retrieved from &amp;lt;code&amp;gt;http://lunatic.eduke32.com/basepal0_rgb.png&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=File:Basepal0_rgb.png&amp;diff=15085</id>
		<title>File:Basepal0 rgb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=File:Basepal0_rgb.png&amp;diff=15085"/>
		<updated>2026-03-11T04:07:06Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: Image by User:Helixhorned
Retrived from &amp;lt;code&amp;gt;http://lunatic.eduke32.com/basepal0_rgb.png&amp;lt;/code&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Image by [[User:Helixhorned]]&lt;br /&gt;
Retrived from &amp;lt;code&amp;gt;http://lunatic.eduke32.com/basepal0_rgb.png&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Fogpal_(DEF)&amp;diff=15084</id>
		<title>Fogpal (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Fogpal_(DEF)&amp;diff=15084"/>
		<updated>2026-03-11T04:02:19Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;fogpal&#039;&#039;&#039; &amp;lt;palette number&amp;gt; &amp;lt;red&amp;gt; &amp;lt;green&amp;gt; &amp;lt;blue&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fogpal&#039;&#039;&#039; defines a palette a sector-based fog effect. To use it, change the pal of your sector to the pal defined with &#039;&#039;&#039;fogpal&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Intensities range from 0-63. Palettes 26, 27, 28 and 29 are pre-defined for you as white, red, green and blue respectively. Sector visibility controls fog density.&lt;br /&gt;
&lt;br /&gt;
The [[palookup (DEF)|palookup]] token has a subtoken also named &#039;&#039;fogpal&#039;&#039; which offers the same or more functionality, but as part of an overall more powerful command.&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Makepalookup_(DEF)&amp;diff=15083</id>
		<title>Makepalookup (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Makepalookup_(DEF)&amp;diff=15083"/>
		<updated>2026-03-11T04:01:51Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;makepalookup&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface to creating palette lookups containing both color index remapping (only in effect for non-hightile textures) and fog. This is in contrast to [[fogpal (DEF)]], which always resets the remapping to the identity mapping (&amp;quot;pal 0&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The [[palookup (DEF)|palookup]] token has a subtoken also named &#039;&#039;makepalookup&#039;&#039; which offers the same or more functionality, but as part of an overall more powerful command.&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;pal&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The palette number, must be from 1 to 250.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;red&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;r&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;green&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;g&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blue&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;b&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Specifies a color component value, in the range of 0 to 63. Unspecified components are assumed to be 0 and any out of range values are clamped to the maximum or minimum as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;remappal&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The palette number to take the index remapping from, i.e. 21 for blue -&amp;gt; red.  When absent, defaults to 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;remapself&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same as &#039;&#039;&#039;remappal&#039;&#039;&#039; &#039;&#039;&amp;lt;palnum&amp;gt;&#039;&#039;, where &#039;&#039;&amp;lt;palnum&amp;gt;&#039;&#039; is the number provided for the &#039;&#039;&#039;pal&#039;&#039;&#039; token.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
This creates palookup 200 with a fog of (30,0,0) and a blue-to-yellow remapping (assuming it has not been changed before):&lt;br /&gt;
 makepalookup { pal 200  red 30  remappal 23 }&lt;br /&gt;
&lt;br /&gt;
This &#039;fogifies&#039; palookup 21 with a red fog:&lt;br /&gt;
 makepalookup { pal 21  red 30  remapself }&lt;br /&gt;
&lt;br /&gt;
This overwrites palookup 21 with a red fog, but clears the blue-to-red remapping:&lt;br /&gt;
 makepalookup { pal 21  red 30 }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Template:Tint&amp;diff=15082</id>
		<title>Template:Tint</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Template:Tint&amp;diff=15082"/>
		<updated>2026-03-11T03:58:43Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{Template}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following values are used by [[tint (DEF)|tint]].&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Value!!Label!!Description!!&lt;br /&gt;
|-&lt;br /&gt;
| 1 || HICTINT_GRAYSCALE || Convert to grayscale.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HICTINT_INVERT || Invert colors.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || HICTINT_COLORIZE || This enables the &amp;quot;colorize&amp;quot; color mode. This mode is similar to &amp;quot;multiply&amp;quot;, except the end result will make the pixels 4x brighter. A value of 64 has no effect.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || HICTINT_USEONART || Applies the tint instead of lookup palette on 8-bit tile.&lt;br /&gt;
|-&lt;br /&gt;
| 16 || HICTINT_APPLYOVERPALSWAP || &lt;br /&gt;
|-&lt;br /&gt;
| 32 || HICTINT_APPLYOVERALTPAL || &lt;br /&gt;
|-&lt;br /&gt;
| 64 || HICTINT_BLEND_SCREEN || This enables the &amp;quot;screen&amp;quot; color mode. This mode increases the colors proportionally. A value of zero has no effect.&lt;br /&gt;
|-&lt;br /&gt;
| 128 || HICTINT_BLEND_OVERLAY || Enables the &amp;quot;overlay&amp;quot; color mode. This mode increases or decreases the colors of the pixels from the middle. A value of 128 has no effect.&lt;br /&gt;
|-&lt;br /&gt;
| 64 + 128 || HICTINT_BLEND_HARDLIGHT || Same as overlay, but changes the priority between texture or color during the calculation.&lt;br /&gt;
|-&lt;br /&gt;
| 256 || HICTINT_ALWAYSUSEART || Force 8-bit texture to be displayed even if a hightile was defined.&lt;br /&gt;
|-&lt;br /&gt;
| 512 || HICTINT_NOFOGSHADE || Force an even visibility on the texture. Can be set for all palettes with GLOBAL_NO_GL_FOGSHADE on [[globalflags]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Templates]]&lt;br /&gt;
[[Category:Palette editing]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Pages with templates]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Definetint_(DEF)&amp;diff=15081</id>
		<title>Definetint (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Definetint_(DEF)&amp;diff=15081"/>
		<updated>2026-03-11T03:57:37Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Deprecated}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;definetint&#039;&#039;&#039; &amp;lt;palnum&amp;gt; &amp;lt;red&amp;gt; &amp;lt;green&amp;gt; &amp;lt;blue&amp;gt; &amp;lt;flags&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines a Hightile texture tint to simulate palette effects normally used on ART-file tiles. &amp;lt;red&amp;gt;, &amp;lt;green&amp;gt;, and &amp;lt;blue&amp;gt; are numbers in the range 0 to 255 which specify the color the tint should look like. &amp;lt;flags&amp;gt; specifies any processing effects to use.&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
&lt;br /&gt;
{{Template:Tint}}&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Shadefactor_(DEF)&amp;diff=15080</id>
		<title>Shadefactor (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Shadefactor_(DEF)&amp;diff=15080"/>
		<updated>2026-03-11T03:57:33Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;shadefactor&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Controls the level of shading in GL modes. It is set to the shade at which all colors are pitch black.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;shadefactor&#039;&#039;&#039; is pre-calculated based on the game palette. In the case of Duke 3D, the value is 30.&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Tint_(DEF)&amp;diff=15079</id>
		<title>Tint (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Tint_(DEF)&amp;diff=15079"/>
		<updated>2026-03-11T03:57:21Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;tint&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Define a color modifier that applies to art assets in hardware-accelerated renderers.&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;pal&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The palette number the tint applies to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;red&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;r&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;green&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;g&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blue&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;b&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Specifies a color component value, in the range of 0 to 255.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;shadered&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;sr&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;shadegreen&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;sg&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;shadeblue&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;sb&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Specifies a color of the shade, in the range of 0 to 255.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;flags&#039;&#039;&#039; &amp;lt;flags&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specifies any special processing effects to use for the tint. The value of flags may be the sum of any of these values.&lt;br /&gt;
&lt;br /&gt;
== Tint flags ==&lt;br /&gt;
&lt;br /&gt;
Note: By default, the &amp;lt;red&amp;gt;, &amp;lt;green&amp;gt; and &amp;lt;blue&amp;gt; parameters will use the &amp;quot;multiply&amp;quot; color mode. This mode decreases the colors proportionally. A value of 255 has no effect.&lt;br /&gt;
&lt;br /&gt;
{{Template:Tint}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
 tint { pal 1 red 127 green 127 blue 255 flags 0 }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Makepalookup_(DEF)&amp;diff=15078</id>
		<title>Makepalookup (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Makepalookup_(DEF)&amp;diff=15078"/>
		<updated>2026-03-11T03:56:22Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;makepalookup&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface to creating palette lookups containing both color index remapping (only in effect for non-hightile textures) and fog. This is in contrast to &#039;&#039;&#039;fogpal&#039;&#039;&#039;, which always resets the remapping to the identity mapping (&amp;quot;pal 0&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;pal&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The palette number, must be from 1 to 250.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;red&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;r&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;green&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;g&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blue&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;b&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Specifies a color component value, in the range of 0 to 63. Unspecified components are assumed to be 0 and any out of range values are clamped to the maximum or minimum as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;remappal&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The palette number to take the index remapping from, i.e. 21 for blue -&amp;gt; red.  When absent, defaults to 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;remapself&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same as &#039;&#039;&#039;remappal&#039;&#039;&#039; &#039;&#039;&amp;lt;palnum&amp;gt;&#039;&#039;, where &#039;&#039;&amp;lt;palnum&amp;gt;&#039;&#039; is the number provided for the &#039;&#039;&#039;pal&#039;&#039;&#039; token.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
This creates palookup 200 with a fog of (30,0,0) and a blue-to-yellow remapping (assuming it has not been changed before):&lt;br /&gt;
 makepalookup { pal 200  red 30  remappal 23 }&lt;br /&gt;
&lt;br /&gt;
This &#039;fogifies&#039; palookup 21 with a red fog:&lt;br /&gt;
 makepalookup { pal 21  red 30  remapself }&lt;br /&gt;
&lt;br /&gt;
This overwrites palookup 21 with a red fog, but clears the blue-to-red remapping:&lt;br /&gt;
 makepalookup { pal 21  red 30 }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Undefpalookuprange_(DEF)&amp;diff=15077</id>
		<title>Undefpalookuprange (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Undefpalookuprange_(DEF)&amp;diff=15077"/>
		<updated>2026-03-11T03:56:17Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;undefpalookuprange&#039;&#039;&#039; &amp;lt;start palnum&amp;gt; &amp;lt;end palnum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Undefines the [[palookup (DEF)|lookup palette]] within the specified range.&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Highpalookup&amp;diff=15076</id>
		<title>Highpalookup</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Highpalookup&amp;diff=15076"/>
		<updated>2026-03-11T03:56:13Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A high-palette look-up table (abbreviated &amp;quot;highpalookup&amp;quot; or just &amp;quot;highpal&amp;quot;) is used by the [[Polymer]] renderer to replicate the software renderer&#039;s 8-bit [[palette (environment)|palette swaps]] on 32-bit assets such as models and high resolution textures.&lt;br /&gt;
&lt;br /&gt;
==SAMPLE CODE==&lt;br /&gt;
&lt;br /&gt;
 // SLIMEPAL (and night vision)&lt;br /&gt;
 &lt;br /&gt;
 highpalookup { basepal 2 pal 0 file &amp;quot;highpal/pal_00n.png&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
This line of code is from the [http://hrp.duke4.net/ HRP]. It declares the basic night vision palette. More examples can be seen [http://svn.eduke32.com/polymer_hrp/highpal/highpal.def here].&lt;br /&gt;
&lt;br /&gt;
==THE MAKING OF==&lt;br /&gt;
&lt;br /&gt;
This is an advanced modding project. As such, it requires understanding of some basic concepts.&lt;br /&gt;
&lt;br /&gt;
===REQUIRED READING===&lt;br /&gt;
&lt;br /&gt;
*[[Wikipedia:HSL and HSV]]&lt;br /&gt;
*http://forums.duke4.net/topic/3191-new-polymer-feature-highpalookup-maps/&lt;br /&gt;
*http://advsys.net/ken/evaltut/evaldraw_tut.htm&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[DEF Language]]&lt;br /&gt;
&lt;br /&gt;
===REQUIRED TOOLS===&lt;br /&gt;
*[http://advsys.net/ken/download.htm EVALDRAW]&lt;br /&gt;
*[http://lzg.duke4.net/clutstat.zip EVALDRAW Highpal Generation Script]&lt;br /&gt;
*[[build tools|BUILD Customization Suite (bsuite)]], outputs palettes in Paint Shop Pro .pal plain-text format&lt;br /&gt;
*[http://www.gimp.org/downloads/ The GIMP], reads .pal and is open source FTW&lt;br /&gt;
&lt;br /&gt;
===TUTORIAL===&lt;br /&gt;
&#039;&#039;&#039;The making of: Highpal lookup tables&#039;&#039;&#039;&lt;br /&gt;
*[[File:highpal_tutorial.7z|highpal_tutorial.7z]] PDF file&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Lookup.dat&amp;diff=15075</id>
		<title>Lookup.dat</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Lookup.dat&amp;diff=15075"/>
		<updated>2026-03-11T03:55:45Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[palette data files]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette.dat&amp;diff=15074</id>
		<title>Palette.dat</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette.dat&amp;diff=15074"/>
		<updated>2026-03-11T03:55:41Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[palette data files]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Nofullbrightrange_(DEF)&amp;diff=15073</id>
		<title>Nofullbrightrange (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Nofullbrightrange_(DEF)&amp;diff=15073"/>
		<updated>2026-03-11T03:55:15Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;nofullbrightrange&#039;&#039;&#039; &amp;lt;start tilenum&amp;gt; &amp;lt;end tilenum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable fullbright colors for a range of tiles. Note that this only applies to OpenGL rendering modes with palette emulation &#039;&#039;disabled&#039;&#039;. With 8-bit software rendering or with [[palette emulation]], this token has no effect. Instead, you need to edit the shade lookup tables, which are stored in &amp;lt;code&amp;gt;PALETTE.DAT&amp;lt;/code&amp;gt; in the original game, and can also be redefined using the [[palookup (DEF)|palookup]] def token.&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Getclosestcol&amp;diff=15072</id>
		<title>Getclosestcol</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Getclosestcol&amp;diff=15072"/>
		<updated>2026-03-11T03:55:09Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;getclosestcol&#039;&#039;&#039; &amp;lt;[[RETURN]]&amp;gt; &amp;lt;color&amp;gt; &amp;lt;limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finds the closest palette index to the &amp;lt;color&amp;gt; given.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;color&amp;gt; is encoded the same as [[PROJ_FLASH_COLOR]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;limit&amp;gt; is the index of the last palette color that should be considered. Use 255 for the whole palette, 254 to exclude the transparent color, 239 to exclude Duke 3D&#039;s fullbrights, etc.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palookup_(DEF)&amp;diff=15071</id>
		<title>Palookup (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palookup_(DEF)&amp;diff=15071"/>
		<updated>2026-03-11T03:53:44Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;palookup&#039;&#039;&#039; &amp;lt;palnum&amp;gt; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loads a [[pal|lookup palette]] from a [[raw image file]].&lt;br /&gt;
&lt;br /&gt;
The image file MUST contain a 256 color table of its own. Each pixel will have their matching color in the table converted in the lookup table.&lt;br /&gt;
&lt;br /&gt;
A single image file may contain multiple lookup palettes, and &#039;&#039;&#039;offset&#039;&#039;&#039; can used to locate it.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[basepalette (DEF)|base palette]]. See also [[shadefactor (DEF)|shadefactor]] and [[Palette (environment)#Global Palettes|palette listing]].&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;raw&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; &amp;lt;filename&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;offset&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;noshades&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;copy&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;undef&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;fogpal&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;red&#039;&#039;&#039; &amp;lt;red&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;green&#039;&#039;&#039; &amp;lt;green&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blue&#039;&#039;&#039; &amp;lt;blue&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;makepalookup&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;red&#039;&#039;&#039; &amp;lt;red&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;green&#039;&#039;&#039; &amp;lt;green&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blue&#039;&#039;&#039; &amp;lt;blue&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;remappal&#039;&#039;&#039; &amp;lt;palnum&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;remapself&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;floorpal&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;nofloorpal&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
The following PNG image contains the shade table in Duke Nukem 3D v1.5:&lt;br /&gt;
&lt;br /&gt;
[[File:Duke3d shade.png]]&lt;br /&gt;
&lt;br /&gt;
The following PNG image contains the palette swaps in Duke Nukem 3D v1.5:&lt;br /&gt;
&lt;br /&gt;
[[File:Duke3d pals.png]]&lt;br /&gt;
&lt;br /&gt;
This example will load a shade table with 32 steps:&lt;br /&gt;
&lt;br /&gt;
 palookup 0 { raw { file &amp;quot;shade.raw&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
This example will load 3 lookup palettes in the same file:&lt;br /&gt;
&lt;br /&gt;
 palookup 1 { raw { file &amp;quot;pals.raw&amp;quot; noshades } }&lt;br /&gt;
 palookup 2 { raw { file &amp;quot;pals.raw&amp;quot; offset 256 noshades } }&lt;br /&gt;
 palookup 3 { raw { file &amp;quot;pals.raw&amp;quot; offset 512 noshades } }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Basepalette_(DEF)&amp;diff=15070</id>
		<title>Basepalette (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Basepalette_(DEF)&amp;diff=15070"/>
		<updated>2026-03-11T03:53:39Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;basepalette&#039;&#039;&#039; &amp;lt;basepal&amp;gt; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loads a [[palette|base palette]] from a [[raw image file]].&lt;br /&gt;
&lt;br /&gt;
The image file must NOT contain a 256 color table of its own. Each pixel from the image will be converted to a color in the base palette.&lt;br /&gt;
&lt;br /&gt;
A single image file may contain multiple base palettes, and &#039;&#039;&#039;offset&#039;&#039;&#039; can used to locate it.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[palookup (DEF)|lookup palette]]. See also [[Palette (environment)#Global Palettes|palette listing]].&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;raw&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; &amp;lt;filename&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;offset&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;shiftleft&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;copy&#039;&#039;&#039; &amp;lt;basepal&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;undef&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
The following PNG image contains all base palettes in Duke Nukem 3D v1.5:&lt;br /&gt;
&lt;br /&gt;
[[File:Duke3d basepal.png]]&lt;br /&gt;
&lt;br /&gt;
This example will load them:&lt;br /&gt;
&lt;br /&gt;
 basepalette 0 { raw { file &amp;quot;basepal.raw&amp;quot; } }&lt;br /&gt;
 basepalette 1 { raw { file &amp;quot;basepal.raw&amp;quot; offset 768 } }&lt;br /&gt;
 basepalette 2 { raw { file &amp;quot;basepal.raw&amp;quot; offset 1536 } }&lt;br /&gt;
 basepalette 3 { raw { file &amp;quot;basepal.raw&amp;quot; offset 2304 } }&lt;br /&gt;
 basepalette 4 { raw { file &amp;quot;basepal.raw&amp;quot; offset 3072 } }&lt;br /&gt;
 basepalette 5 { raw { file &amp;quot;basepal.raw&amp;quot; offset 3840 } }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Raw_image_file&amp;diff=15069</id>
		<title>Raw image file</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Raw_image_file&amp;diff=15069"/>
		<updated>2026-03-11T03:53:23Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When image data is stored on disk as pure pixel values with no header information whatsoever, it is a &amp;quot;raw&amp;quot; image. This is not to be confused with RAW format photographs produced by DSLR cameras.&lt;br /&gt;
&lt;br /&gt;
If storing a [[basepalette (DEF)|basepalette]], the file should be saved as 24bpp RGB with any dimensions that multiply to 256, such as 16x16, 32x8, or 256x1. The resulting file should be 256 indexes x 3 color channels = 768 bytes in length.&lt;br /&gt;
&lt;br /&gt;
For a [[palookup (DEF)|palookup]], the file should be saved as 8bpp indexed, again with dimensions that multiply to 256. The resulting files should be 256 bytes. If you are loading a palookup that includes a shade table, multiply these values by the number of shades you are using, usually 32.&lt;br /&gt;
&lt;br /&gt;
For a [[blendtable (DEF)|blendtable]], the file should also be 8bpp indexed, with dimensions of 256 by 256, and the file should be exactly 65536 bytes. &lt;br /&gt;
&lt;br /&gt;
You can use [https://www.irfanview.com/ IrfanView] to load and save raw images.&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Setgamepalette&amp;diff=15068</id>
		<title>Setgamepalette</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Setgamepalette&amp;diff=15068"/>
		<updated>2026-03-11T03:52:44Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Deprecated}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;setgamepalette&#039;&#039;&#039; &amp;lt;pal_ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switches between the special palettes that Duke Nukem 3D uses. The palettes are located in LOOKUP.DAT. This command can take values between 0 and 6.&lt;br /&gt;
&lt;br /&gt;
See the [[Palette (environment)#Global Palettes|palette listing]] for previews and [[palette]] for the player structure member that this command modifies.&lt;br /&gt;
&lt;br /&gt;
== Values ==&lt;br /&gt;
&lt;br /&gt;
{{Basepals}}&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Game manipulation]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette&amp;diff=15067</id>
		<title>Palette</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette&amp;diff=15067"/>
		<updated>2026-03-11T03:52:34Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The player structure member &amp;lt;code&amp;gt;palette&amp;lt;/code&amp;gt; contains the ID of the &#039;&#039;basepalette&#039;&#039; currently in use. The screen palette determines the overall look of the scene, such as underwater, night vision, etc.&lt;br /&gt;
&lt;br /&gt;
In older versions of EDuke32, it was necessary to use [[setgamepalette]] to change &#039;&#039;&#039;palette&#039;&#039;&#039;. This is no longer necessary.&lt;br /&gt;
&lt;br /&gt;
Changing this value too often (e.g. every tic) is undesirable, so check the value before doing so.&lt;br /&gt;
&lt;br /&gt;
See the [[Palette (environment)#Global Palettes|palette listing]] for how a palette will effect the look of the scene. See also [[palfrom]].&lt;br /&gt;
&lt;br /&gt;
== Values ==&lt;br /&gt;
&lt;br /&gt;
{{Basepals}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Player structure members]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette_(environment)&amp;diff=15066</id>
		<title>Palette (environment)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette_(environment)&amp;diff=15066"/>
		<updated>2026-03-11T03:50:55Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is an exhaustive listing of the 8-bit palette swaps in Duke Nukem 3D.&lt;br /&gt;
&lt;br /&gt;
The data controlling them can be found and modified in the [[palette data files]].&lt;br /&gt;
&lt;br /&gt;
==Colors of the base palette==&lt;br /&gt;
&lt;br /&gt;
The following plot shows the red, green and blue color intensities of Duke3D&#039;s base palette on a 0--1 scale.&lt;br /&gt;
[http://lunatic.eduke32.com/basepal0_rgb.png Base palette colors]&lt;br /&gt;
&lt;br /&gt;
It can be seen that it contains six ramps (sequences in which R, G and B all increase monotonically) of 32 colors, three blocks of 16 colors (two of which are ramps), and 16 remaining fullbright colors. Rearranging consecutive blocks of 16 colors by the permutation [0 1 2 3 5 4 6 7 8 13 10 11 12 9 14 15] makes this stand out more clearly:&lt;br /&gt;
[http://lunatic.eduke32.com/basepal0_rgb_reord.png Rearranged base palette colors]&lt;br /&gt;
&lt;br /&gt;
==Global Palettes==&lt;br /&gt;
For use with [[setgamepalette]]:&lt;br /&gt;
{| {{simpletable}}&lt;br /&gt;
! ID !! Palette !! Image&lt;br /&gt;
|- valign=top&lt;br /&gt;
|0&lt;br /&gt;
|Normal&lt;br /&gt;
| [[image:pala.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|1&lt;br /&gt;
|Underwater&lt;br /&gt;
| [[image:palb.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|2&lt;br /&gt;
|Night Vision Goggles &amp;lt;br /&amp;gt; Submersible Slime&lt;br /&gt;
| [[image:palc.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|3&lt;br /&gt;
|3D Realms Logo (changed in v1.4).&lt;br /&gt;
| [[image:pale.png|48px|v1.3D]] [[image:palf.png|48px|v1.4+]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|4&lt;br /&gt;
|Title Screen&lt;br /&gt;
| [[image:pald.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|5&lt;br /&gt;
|Episode 1 Ending&lt;br /&gt;
| [[image:palg.png|48px]]&lt;br /&gt;
|- valign=top&lt;br /&gt;
|6&lt;br /&gt;
|Temporary slot for self-contained [[ANM]] palettes. Example provided is LOGO.ANM.&lt;br /&gt;
| [[image:palh.png|48px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Palette Swaps==&lt;br /&gt;
For use with [[spritepal]], [[pal]], et cetera:&lt;br /&gt;
{| {{simpletable}}&lt;br /&gt;
! ID !! Image !! Effect !! Description&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 0 &amp;lt;br /&amp;gt; 3 &amp;lt;br /&amp;gt; 9 &amp;lt;br /&amp;gt; [[#Empty Slots|empty]]&lt;br /&gt;
| [[image:pala.png|48px]]&lt;br /&gt;
| Normal&lt;br /&gt;
| Default color &amp;lt;br /&amp;gt; Player 1 (ID 9)&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 1&lt;br /&gt;
| [[image:pal1.png|48px]]&lt;br /&gt;
| All blue&lt;br /&gt;
| Frozen creatures &amp;lt;br /&amp;gt; Unavailable menu option &amp;lt;br /&amp;gt; Blue lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 2&lt;br /&gt;
| [[image:pal2.png|48px]]&lt;br /&gt;
| All red&lt;br /&gt;
| Blood pool &amp;lt;br /&amp;gt;Red lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 4&lt;br /&gt;
| [[image:pal4.png|48px]]&lt;br /&gt;
| Full black (including fullbrights)&lt;br /&gt;
| Shadows&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 5&lt;br /&gt;
| [[image:pal5.png|48px]]&lt;br /&gt;
| Red to brown&lt;br /&gt;
| Brown Team (Duke-Tag) Exit Level Nuke&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 6&lt;br /&gt;
| [[image:pal6.png|48px]]&lt;br /&gt;
| All reverse green&lt;br /&gt;
| Night Vision Goggles heat &amp;lt;br /&amp;gt; Protozoid Slimer, Protector Drone, and Alien Queen gibs&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 7&lt;br /&gt;
| [[image:pal7.png|48px]]&lt;br /&gt;
| All yellow&lt;br /&gt;
| Slime splash, FECES puddle &amp;lt;br /&amp;gt; Yellow/Brown lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 8&lt;br /&gt;
| [[image:pal8.png|48px]]&lt;br /&gt;
| All green&lt;br /&gt;
| Green lights&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 10&lt;br /&gt;
| [[image:pal10.png|48px]]&lt;br /&gt;
| Blue to dark red&lt;br /&gt;
| Player 2&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 11 &amp;lt;br /&amp;gt; 22&lt;br /&gt;
| [[image:pal11.png|48px]]&lt;br /&gt;
| Blue to green&lt;br /&gt;
| Player 3 (ID 11) &amp;lt;br /&amp;gt; Assault Trooper (ID 22)&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 12 &amp;lt;br /&amp;gt; 18&lt;br /&gt;
| [[image:pal12.png|48px]]&lt;br /&gt;
| Blue to gray&lt;br /&gt;
| Player 4 (ID 12)&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 13&lt;br /&gt;
| [[image:pal13.png|48px]]&lt;br /&gt;
| Blue and red to dark gray&lt;br /&gt;
| Player 5&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 14&lt;br /&gt;
| [[image:pal14.png|48px]]&lt;br /&gt;
| Blue and red to dark green&lt;br /&gt;
| Player 6 &amp;lt;br /&amp;gt; Secret Exit Level Nuke&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 15&lt;br /&gt;
| [[image:pal15.png|48px]]&lt;br /&gt;
| Blue to brown&lt;br /&gt;
| Player 7&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 16&lt;br /&gt;
| [[image:pal16.png|48px]]&lt;br /&gt;
| Blue to dark blue&lt;br /&gt;
| Player 8&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 17&lt;br /&gt;
| [[image:pal17.png|48px]]&lt;br /&gt;
| Brown, green, orange and purple to blue &amp;lt;br /&amp;gt; Blue to green&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 19&lt;br /&gt;
| [[image:pal19.png|48px]]&lt;br /&gt;
| Brown, green, orange and purple to red &amp;lt;br /&amp;gt; Blue to green&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 20&lt;br /&gt;
| [[image:pal20.png|48px]]&lt;br /&gt;
| Brown, green, orange and purple to blue &amp;lt;br /&amp;gt; Blue to gray&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 21&lt;br /&gt;
| [[image:pal21.png|48px]]&lt;br /&gt;
| Blue to red&lt;br /&gt;
| Red Key Card &amp;lt;br /&amp;gt; Assault Captain &amp;lt;br /&amp;gt; Battlelord Sentry&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 23&lt;br /&gt;
| [[image:pal23.png|48px]]&lt;br /&gt;
| Blue to yellow&lt;br /&gt;
| Yellow Key Card&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 24&lt;br /&gt;
| [[image:pal24.png|48px]]&lt;br /&gt;
| Gray to red &amp;lt;br /&amp;gt; Red to gray&lt;br /&gt;
|&lt;br /&gt;
|- valign=top&lt;br /&gt;
| 25&lt;br /&gt;
| [[image:pal25.png|48px]]&lt;br /&gt;
| Green to red&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Fog Palettes==&lt;br /&gt;
EDuke32 includes four [[DEF Language#fogpal|fog palettes]] starting at palette index 26.&lt;br /&gt;
&lt;br /&gt;
Note that lookup.dat can be modified to support more than 25 palette remaps for 8-bit sprites; in this case, the included fog palettes start wherever the first unused palette position is.  For example, a modified copy of lookup.dat with 30 remaps instead of 25 would result in the fog palettes occupying indexes 31, 32, 33, and 34 instead of 26, 27, 28, and 29.&lt;br /&gt;
&lt;br /&gt;
They are:&lt;br /&gt;
 fogpal 26 63 63 63&lt;br /&gt;
 fogpal 27 63 0 0&lt;br /&gt;
 fogpal 28 0 63 0&lt;br /&gt;
 fogpal 29 0 0 63&lt;br /&gt;
This gives the fog colors of white (26), red (27), green (28) and blue (29).&lt;br /&gt;
&lt;br /&gt;
==Empty Slots==&lt;br /&gt;
&lt;br /&gt;
All empty palette swaps, including those without [[DEF Language#fogpal|fog palettes]], default to pal 0.&lt;br /&gt;
&lt;br /&gt;
If you are using [[DEF Language|defs]] to add additional skins or variations to empty palette slots of a model or texture which do not correspond to any palette swap, or [[DEF Language#fogpal|fog palettes]], it is &#039;&#039;&#039;very highly recommended&#039;&#039;&#039; to begin the indices for your custom variations at palette value #133. This is because modified [[Palette data files|LOOKUP.DAT and PALETTE.DAT]] files such as [http://lzg.duke4.net/extclut.htm ExtCLUT] can contain up to 128 palette entries. These additional values may conflict with your custom feature. The extra four spaces are to account for the [[#Fog Palettes|predefined fogpals]] explained above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette_data_files&amp;diff=15065</id>
		<title>Palette data files</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette_data_files&amp;diff=15065"/>
		<updated>2026-03-11T03:50:32Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Palettes&#039;&#039;&#039;, &#039;&#039;&#039;palette mapping&#039;&#039;&#039;, &#039;&#039;&#039;shading tables&#039;&#039;&#039;, and &#039;&#039;&#039;transparancy data&#039;&#039;&#039; are stored in two files, &#039;&#039;PALETTE.DAT&#039;&#039; and &#039;&#039;LOOKUP.DAT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== PALETTE.DAT ==&lt;br /&gt;
&lt;br /&gt;
PALETTE.DAT contains the basic palette, shading info, and transparency information. It is a binary format file, and is used by all common Build engine games, including Blood, Duke Nukem 3D, and Shadow Warrior.&lt;br /&gt;
&lt;br /&gt;
=== Display Palette ===&lt;br /&gt;
&#039;&#039;(byte 0 through byte 767)&#039;&#039;&lt;br /&gt;
This contains 768 bytes of game palette data, alternating between R and G and B, for a total of 256 RGB colors. The colors range from 0 to 63, so scaling will be required for acceptable display on a modern operating system. This is because of DOS-based memory constraints that don&#039;t exist in modern systems. Scale up by 4x.&lt;br /&gt;
&lt;br /&gt;
=== Shade Tables Amount ===&lt;br /&gt;
&#039;&#039;(byte 768 and byte 769)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two Bytes [[http://en.wikipedia.org/wiki/Endianness little endian]] integer containing the number of shading tables. This is used to make art look darker, and defines the amount of shade tables.&lt;br /&gt;
&lt;br /&gt;
=== Shade Tables ===&lt;br /&gt;
&#039;&#039;(byte 770 through byte (769 + (shade_number * 256))&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An array of shade tables. These simply point to an index in the Display Palette (0-255) for each entry.&lt;br /&gt;
&lt;br /&gt;
=== Translucency Blending Table ===&lt;br /&gt;
&#039;&#039;(remaining 65536 bytes)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Essentially a 2D array which takes two color indexes and returns a color index to display. The original games used this for 33% translucency, which doubles as 66% when the two colors are swapped.&lt;br /&gt;
&lt;br /&gt;
=== Garbage Data ===&lt;br /&gt;
&lt;br /&gt;
A properly formed PALETTE.DAT will be exactly 74,498 bytes long. However, Duke Nukem 3D&#039;s instance of this file harmlessly contains an extra 8,192 bytes for a total of 82,690. The extra data is not that interesting: It is nothing more than several overlapping copies of the ending portion of the blend table.&lt;br /&gt;
&lt;br /&gt;
=== EDuke32 extension ===&lt;br /&gt;
&lt;br /&gt;
EDuke32 adds support for additional blending tables, though a further improved version of this functionality is available through the [[Blendtable (DEF)|blendtable def syntax]].&lt;br /&gt;
&lt;br /&gt;
To distinguish from the aforementioned garbage data, the engine first looks for the string &amp;lt;code&amp;gt;MoreBlendTab&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pseudocode for the rest:&lt;br /&gt;
&lt;br /&gt;
 char magic[12] = &amp;quot;MoreBlendTab&amp;quot;;&lt;br /&gt;
 uint8_t numAdditionalBlendTabs;&lt;br /&gt;
 struct {&lt;br /&gt;
     uint8_t blendnum;  // the .blend index&lt;br /&gt;
     uint8_t blendTab[256][256];&lt;br /&gt;
 } additionalBlendTabs[numAdditionalBlendTabs];&lt;br /&gt;
&lt;br /&gt;
== LOOKUP.DAT ==&lt;br /&gt;
&lt;br /&gt;
LOOKUP.DAT contains the palette range swaps (25 of them in Duke Nukem 3D using the default LOOKUP.DAT), as well as alternate palettes used for things like the title screen. This is used by Duke Nukem 3D and it&#039;s derivatives only. It too, like PALETTE.DAT, is a binary file.&lt;br /&gt;
&lt;br /&gt;
=== Number of Palette Swaps ===&lt;br /&gt;
&#039;&#039;(byte 0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Number of spritepals (hereon out known as palette_swaps). This is the number of &amp;quot;recolor&amp;quot; abilities.&lt;br /&gt;
&lt;br /&gt;
=== Palette Swap Tables ===&lt;br /&gt;
&#039;&#039;(byte 1)&#039;&#039;&lt;br /&gt;
The tables for palettes are made up of this structure:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;palette_swap_index&#039;&#039; - an index number for the table to follow. This is important, as analysis of the LOOKUP.DAT reveals not all palette swaps are in order.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;palette_swap_table[256]&#039;&#039; - an array of 256 bytes (a byte in this context is a data ranging 0 through 255, aka an &#039;&#039;&#039;unsigned 8-bit int&#039;&#039;&#039;) pointing to the color index in PALETTE.DAT&#039;s main palette to remap to, or in some cases the alternate display palettes below. For example, if palette_swap_table[0] through palette_swap_table[255] are all equal to 0, the whole palette for that object/art/etc is remapped to the color at 0 (in Duke 3D&#039;s palette, it&#039;s pitch black). This is the case for [[Palette_(environment)#Palette_Swaps | palette swap #4.]]&lt;br /&gt;
&lt;br /&gt;
There is one index+table for each number of palette swaps. The total amount of data should be ((1 byte + 256 bytes) * palette_swaps).&lt;br /&gt;
&lt;br /&gt;
=== Alternate Display Palettes ===&lt;br /&gt;
&lt;br /&gt;
Right after the Palette Swap Tables, the rest of the data is an array of 768 byte blocks for alternate palettes. Unlike the display palette in PALETTE.DAT, these are used for specific purposes and are quite different than the palette swap tables in that the actual color data is different for these, while the palette swap tables are just remapping existing color indexes to other indexes or ranges..&lt;br /&gt;
&lt;br /&gt;
For more information on the default palettes see [[Palette_(environment)#Global_Palettes | Palettes]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Blendtable_(DEF)&amp;diff=15064</id>
		<title>Blendtable (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Blendtable_(DEF)&amp;diff=15064"/>
		<updated>2026-03-11T03:42:12Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;blendtable&#039;&#039;&#039; &amp;lt;blendtable&amp;gt; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loads a blend table from a [[raw image file]].&lt;br /&gt;
&lt;br /&gt;
The image file MUST contain a 256 color table of its own. Each pixel will have their matching color in the table converted in the blend table.&lt;br /&gt;
&lt;br /&gt;
A single image file may contain multiple base palettes, and &#039;&#039;&#039;offset&#039;&#039;&#039; can used to locate it.&lt;br /&gt;
&lt;br /&gt;
The first ID is reserved to the 33% transparency.&lt;br /&gt;
&lt;br /&gt;
See also [[numalphatables (DEF)|numalphatables]].&lt;br /&gt;
&lt;br /&gt;
== Tokens ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;raw&#039;&#039;&#039; { [...] }&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; &amp;lt;filename&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;offset&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;glblend&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;forward&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;reverse&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;both&#039;&#039;&#039; { [...] }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;src&#039;&#039;&#039; &amp;lt;factor&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;sfactor&#039;&#039;&#039; / &#039;&#039;&#039;top&#039;&#039;&#039;)&amp;lt;br /&amp;gt;&lt;br /&gt;
:::: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;dst&#039;&#039;&#039; &amp;lt;factor&amp;gt;&amp;lt;/span&amp;gt; (or &#039;&#039;&#039;dfactor&#039;&#039;&#039; / &#039;&#039;&#039;bottom&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
:::: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
:::: See [[#Factors|below]].&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;alpha&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:::: DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;copy&#039;&#039;&#039; &amp;lt;blendtable&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;undef&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
== Factors ==&lt;br /&gt;
&lt;br /&gt;
[[File:GL blend chart.jpg|thumb|200px|right|Chart explaining the combination of blend modes available in OpenGL.]]&lt;br /&gt;
&lt;br /&gt;
* ZERO&lt;br /&gt;
* ONE&lt;br /&gt;
* SRC_COLOR&lt;br /&gt;
* ONE_MINUS_SRC_COLOR&lt;br /&gt;
* SRC_ALPHA&lt;br /&gt;
* ONE_MINUS_SRC_ALPHA&lt;br /&gt;
* DST_ALPHA&lt;br /&gt;
* ONE_MINUS_DST_ALPHA&lt;br /&gt;
* DST_COLOR&lt;br /&gt;
* ONE_MINUS_DST_COLOR&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
The following PNG image contains the blend table in Duke Nukem 3D v1.5:&lt;br /&gt;
&lt;br /&gt;
[[File:Duke3d transpal.png]]&lt;br /&gt;
&lt;br /&gt;
This example will load 3 blend tables in the same file:&lt;br /&gt;
&lt;br /&gt;
 blendtable 0 { raw { file &amp;quot;blend.raw&amp;quot; } }&lt;br /&gt;
 blendtable 1 { raw { file &amp;quot;blend.raw&amp;quot; offset 65536 } }&lt;br /&gt;
 blendtable 2 { raw { file &amp;quot;blend.raw&amp;quot; offset 131072 } }&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Numalphatables_(DEF)&amp;diff=15063</id>
		<title>Numalphatables (DEF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Numalphatables_(DEF)&amp;diff=15063"/>
		<updated>2026-03-11T03:41:54Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;numalphatables&#039;&#039;&#039; &amp;lt;value&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines the number of blend tables to be used by [[alpha]].&lt;br /&gt;
&lt;br /&gt;
The IDs for the alpha tables start from 1, because ID 0 is reserved to 33% transparency.&lt;br /&gt;
&lt;br /&gt;
The transparency of the alpha tables should range from 0% to 50%. The second half will be generated by reversing the first half.&lt;br /&gt;
&lt;br /&gt;
Valid values are powers of two, or powers of two minus one. The two variations apply slightly different calculations, with the latter being slightly more accurate and efficient in data storage. (TODO: Explain further and add the actual math formulas.)&lt;br /&gt;
&lt;br /&gt;
For example, if you define &#039;&#039;&#039;numalphatables&#039;&#039;&#039; as 16, you should import table ids 1-16 using [[blendtable (DEF)|blendtable]], and in-game there will be 32 steps of transparency. [[Ion Fury]] uses a value of 31 for 64 steps of transparency with the more accurate calculations.&lt;br /&gt;
&lt;br /&gt;
You can import up to 128 tables, which would provide a table for every value of alpha. However a value so high is probably not necessary, since the palette of a game won&#039;t have enough steps for a color to justify such a value. Additionally, such a large lookup table would overflow the caches of most CPUs, wrecking performance. It would be more reasonable to use a value similar to the shade table, which in Duke 3D case is 32, so a value of 16 for &#039;&#039;&#039;numalphatables&#039;&#039;&#039; would be more logical.&lt;br /&gt;
&lt;br /&gt;
[[Category:DEF commands]]&lt;br /&gt;
[[Category:Palette editing]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Mouse_support_improvements&amp;diff=15062</id>
		<title>Mouse support improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Mouse_support_improvements&amp;diff=15062"/>
		<updated>2026-02-24T23:09:36Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How is mouse support improved in [[EDuke32]] over the original release of [[Duke Nukem 3D]]?&lt;br /&gt;
&lt;br /&gt;
#The original input code contains a strange condition that prevents motion along more than one axis at a time. EDuke32 removes this limitation. (This is fixable even in DOS through use of an external input driver or patch, such as [https://bitbucket.org/rwesterlund/smouse/ sMouse], [https://ctpax-cheater.losthost.org/htmldocs/trouble.htm#buildmfx buildmfx], or [https://swisscm.duke4.net/mine.html bMouse].)&lt;br /&gt;
#This original input code also contains a bug where motion along one direction of each axis is completely dropped if movement is too slow. This is caused by right-shifting where a division operation should have been used. Even [[Duke Nukem 3D: 20th Anniversary World Tour]] has this bug. EDuke32 fixed it long ago.&lt;br /&gt;
#EDuke32 binds &#039;&#039;next weapon&#039;&#039; and &#039;&#039;previous weapon&#039;&#039; to the mousewheel, as is standard. The original game requires the player to wait for the switching animation to complete for one weapon before the next can be requested. The port fixes this weapon switching behavior so it is possible to advance the mousewheel additional stops at any point during a weapon switching animation that is already in progress and have them count toward the user&#039;s selection.&lt;br /&gt;
#Our default modern control scheme does not bind any key to the Toggle [Vertical] Mouse Aiming function, to prevent confusion caused by this mostly useless option. By default vertical aiming is enabled as opposed to moving you forward and backward, and the option to hold the key to aim instead of being a toggle is disabled. That way everything Just Works out of the box.&lt;br /&gt;
#The original games store aim position in integers that directly correspond to the [[ang]] and [[horiz]] values controlling the camera&#039;s yaw angle (2048 units for a full circle) and the tangent of its pitch angle (399 units for a vertical viewing range mostly up to mostly down) respectively. This results in a noticeable stair-step effect in mouse aiming at higher resolutions. EDuke32 now uses fixed point arithmetic to represent these values, allowing for high precision aiming without this quantization error.&lt;br /&gt;
#Since the original renderer achieved vertical mouselook by the &amp;quot;fake&amp;quot; method of [[Y-shearing]], it was natural to control the shearing using the tangent of the vertical angle, which directly corresponds to the extent of shearing applied to the viewport. Since the mouse used these values directly, it resulted in less vertical rotation per unit of physical mouse movement the closer you were to the high or low extents of the aim range. EDuke32 now processes mouse input in the domain of vertical angle instead of angle tangent, eliminating this artifact and ensuring consistent spherical mouse aiming.&lt;br /&gt;
#Originally, input polling took place only at the 30 Hz game world timer and was interpolated for frames in between. This gave mouse aiming a laggy, floaty feeling. EDuke32 implements a new method which polls input at the framerate instead and performs no interpolation. This fixes the floatiness, and could result in less input lag than even modern shooters.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 project information]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15061</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15061"/>
		<updated>2026-02-14T00:07:50Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]] for the communities I am a part of, the roles in which I serve, and my accomplishments. (For a more formal CV, see my LinkedIn below.)&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***faithful music replacement packs for EDuke32&lt;br /&gt;
****&#039;&#039;Duke Nukem 3D&#039;&#039; for Sega Saturn Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; PlayStation Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem 64&#039;&#039; Music Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Developer on &#039;&#039;Duke Nukem 3D: Hail to the King Collection&#039;&#039; (canceled)&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Created [https://forums.duke4.net/topic/9922-/ a tool that can extract and decompile the CON bytecode from all known versions of Duke Nukem 64 and Duke Nukem: Total Meltdown]&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Cobbled together [https://hendricks266.duke4.net/flappywang/ FlappyWang]&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
**[https://www.mobygames.com/person/602625/evan-ramos/ I have a MobyGames page apparently.]&lt;br /&gt;
*Stuff I&#039;ve done for other game communities:&lt;br /&gt;
**Helped my friend [https://fallout.wiki/wiki/Mod:RoyBatty RoyBatty] build the [https://www.nexusmods.com/newvegas/mods/55061 4GB FNV Updated Loader] for &#039;&#039;Fallout: New Vegas&#039;&#039;&lt;br /&gt;
***The mod entry on NexusMods with my credit attached is still in the top 50 all-time downloaded mods for the game despite the fact that I&#039;ve never played it!&lt;br /&gt;
**Created the initial version of the [https://forum.starmen.net/forum/Games/Mother3/MOTHER-3-Ultimate-Music-Rip MOTHER 3 Ultimate Music Rip], since supplanted by [https://forum.starmen.net/forum/Games/Mother3/The-NEW-Ultimate-Music-Rip-for-MOTHER-3 an update by JumpmanFR]&lt;br /&gt;
**Constructed a .vgm pack for [https://www.smspower.org/Music/ShiningForceGaidenFinalConflict-GG Shining Force Gaiden ~Final Conflict~]&lt;br /&gt;
***Also contributed one track to the [https://vgmrips.net/packs/author/hendricks266 Sonic 3 &amp;amp; Knuckles VGM rip] from the [https://hiddenpalace.org/Sonic_3C_(May_17,_1994_prototype) Sonic 3C 0517 Prototype]&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15059</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15059"/>
		<updated>2025-10-25T01:19:54Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]] for all of the above. (For a more formal CV, see my LinkedIn below.)&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***faithful music replacement packs for EDuke32&lt;br /&gt;
****&#039;&#039;Duke Nukem 3D&#039;&#039; for Sega Saturn Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; PlayStation Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem 64&#039;&#039; Music Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Developer on &#039;&#039;Duke Nukem 3D: Hail to the King Collection&#039;&#039; (canceled)&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Created [https://forums.duke4.net/topic/9922-/ a tool that can extract and decompile the CON bytecode from all known versions of Duke Nukem 64 and Duke Nukem: Total Meltdown]&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Cobbled together [https://hendricks266.duke4.net/flappywang/ FlappyWang]&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
**[https://www.mobygames.com/person/602625/evan-ramos/ I have a MobyGames page apparently.]&lt;br /&gt;
*Stuff I&#039;ve done for other game communities:&lt;br /&gt;
**Helped my friend [https://fallout.wiki/wiki/Mod:RoyBatty RoyBatty] build the [https://www.nexusmods.com/newvegas/mods/55061 4GB FNV Updated Loader] for &#039;&#039;Fallout: New Vegas&#039;&#039;&lt;br /&gt;
***The mod entry on NexusMods with my credit attached is still in the top 50 all-time downloaded mods for the game despite the fact that I&#039;ve never played it!&lt;br /&gt;
**Created the initial version of the [https://forum.starmen.net/forum/Games/Mother3/MOTHER-3-Ultimate-Music-Rip MOTHER 3 Ultimate Music Rip], since supplanted by [https://forum.starmen.net/forum/Games/Mother3/The-NEW-Ultimate-Music-Rip-for-MOTHER-3 an update by JumpmanFR]&lt;br /&gt;
**Constructed a .vgm pack for [https://www.smspower.org/Music/ShiningForceGaidenFinalConflict-GG Shining Force Gaiden ~Final Conflict~]&lt;br /&gt;
***Also contributed one track to the [https://vgmrips.net/packs/author/hendricks266 Sonic 3 &amp;amp; Knuckles VGM rip] from the [https://hiddenpalace.org/Sonic_3C_(May_17,_1994_prototype) Sonic 3C 0517 Prototype]&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Development_principles&amp;diff=15058</id>
		<title>Development principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Development_principles&amp;diff=15058"/>
		<updated>2025-10-17T02:24:44Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What is important about the [[EDuke32 Project Family]] of [[Wikipedia:source port|source port]]s and what value do they provide to players?&lt;br /&gt;
&lt;br /&gt;
*User Experience (#1 priority)&lt;br /&gt;
**Whether you&#039;re technically minded or not, the port should give the player a great experience right out of the box.&lt;br /&gt;
**Installations of supported games purchased digitally, such as from Steam, GOG, or ZOOM Platform, are detected without any manual setup.&lt;br /&gt;
**The default settings should be the best ones.&lt;br /&gt;
***Texture filtering on pixel art is turned &#039;&#039;&#039;off&#039;&#039;&#039; by default.&lt;br /&gt;
***A modern WSAD-based control scheme is the default. (The original MS-DOS keyboard layout is also available.)&lt;br /&gt;
***The user&#039;s screen resolution and refresh rate are automatically detected to provide the best presentation and make the most of their hardware.&lt;br /&gt;
**Options menus should be simple and clear to avoid confusing new users, while allowing advanced customization through [[console commands]].&lt;br /&gt;
**Widescreen resolutions are supported natively with a &#039;&#039;horiz-plus&#039;&#039; field of view, extending what the player can see to the sides, rather than the lazy approach of &#039;&#039;vert-minus&#039;&#039;, cropping off the top and bottom of the screen, frequently seen even in commercially released games of the 2000s.&lt;br /&gt;
**Hundreds of bugs and crashes have been eliminated.&lt;br /&gt;
*Accuracy &amp;amp; Authenticity&lt;br /&gt;
**Gameplay accuracy: The game logic state machine and world physics should be able to replicate the behavior of the original EXE file, which is demonstrated when playback of [[Wikipedia:attract mode|attract mode]] demos synchronize (&#039;&#039;demo-accurate&#039;&#039;). With that ground truth documented, conscious fixes to bugs can be applied as the conservator of a painting would.&lt;br /&gt;
***Translation: You are playing the same game!&lt;br /&gt;
**Visual aesthetic accuracy:&lt;br /&gt;
***The shading and tint of the game world are preserved even when running with modern hardware-accelerated graphics, which is vital in order to present the game&#039;s atmosphere true to its creators&#039; original intent. This technique is called [[palette emulation]].&lt;br /&gt;
****This shade and tint information is incorporated directly into the graphics rendering pipeline logic, rather than clamped on at the end as an inaccurate approximation such as &amp;quot;tonemapping&amp;quot;.&lt;br /&gt;
***The classic software renderer is fully supported.&lt;br /&gt;
**Sound &amp;amp; music accuracy:&lt;br /&gt;
***The ports use the games&#039; original sound mixing library, providing full support for [[EMIDI]] functionality used by the music, and the so-called &amp;quot;reverb&amp;quot; effect used for in-game worldbuilding.&lt;br /&gt;
***The original games primarily used low-quality sound effects (8-11 KHz) lacking the higher frequencies necessary to be perceived as crisp and clear, paired with simple &#039;&#039;linear interpolation&#039;&#039; that technically introduced artifacts in these higher ranges, but had the positive side effect of giving them more apparent detail. Modern computers are now capable of performing &#039;&#039;[[Wikipedia:sinc|sinc]] interpolation&#039;&#039; approaching mathematical perfection, avoiding these artifacts, but also exposing the formerly obscured low quality. Not accounting for this is why releases like the Xbox and PlayStation ports of [[Duke Nukem 3D: 20th Anniversary World Tour]] still have muffled sound to this day.&lt;br /&gt;
***The included Adlib/SoundBlaster FM synthesis emulation provided by [[Nuked-OPL3]] is &#039;&#039;sample-accurate&#039;&#039;, meaning it is capable of producing output identical to the real hardware.&lt;br /&gt;
*Feature Set&lt;br /&gt;
**Hardware-accelerated graphics are a prominent feature provided by the ports. Just take a look at some screenshots to see what our [[Polymost]] and [[Polymer]] renderers are capable of.&lt;br /&gt;
**Many options for presenting MIDI music are available to suit your own taste, or download a pack of custom renditions in OGG Vorbis or FLAC formats.&lt;br /&gt;
**The [[BUILD Engine]]&#039;s level editor, [[Mapster32]], is [[Wikipedia:WYSIWYG|WYSIWYG]], linked directly with the actual rendering engine. 3D game engines before and since do not provide such a thing!&lt;br /&gt;
*Extensibility&lt;br /&gt;
**The CON scripting language has been significantly augmented, featuring actual variables that do not require hacking an inventory item, screen drawing, weapon and projectile customization, math calculations, and event interception. This allows gameplay mods and total conversions that rival even modern games.&lt;br /&gt;
**Mods can use true-color textures, 3D models, and modern audio formats, all packaged in standard .zip files.&lt;br /&gt;
*Performance&lt;br /&gt;
**Mouse input is considerably refined, allowing butter-smooth motion with minimal latency. See: [[mouse support improvements]]&lt;br /&gt;
**High refresh rate displays such as 144 Hz are fully supported.&lt;br /&gt;
**Code is written (and original code is re-written) to account for algorithmic complexity as well as the practical nature of computing hardware such as data locality in CPU cache lines.&lt;br /&gt;
**The limiting factor of modern computing performance tends to be [[Wikipedia:von Neumann bottleneck|the cost of moving data around]]. In a game, that can mean from disk into memory when loading assets, and from the CPU to the GPU in the course of drawing a frame, just to name two examples.&lt;br /&gt;
***We refactored our texture system to read all the pixel art in the game into a texture atlas and send it to the GPU once at the beginning of execution so that performance would not be interrupted by unnecessary synchronization points in the course of gameplay.&lt;br /&gt;
***We replaced our [[palette emulation|emulation of indexed shading lookup tables]]: while previously we generated a separate texture for each shade index, we now perform the lookup on the GPU with a shader program, drastically reducing our video memory footprint.&lt;br /&gt;
**The ports are [[Wikipedia:code generation (compiler)|compiled]] to [[Wikipedia:machine code|machine code]], and not run as an interpreted language such as Java.&lt;br /&gt;
*Portability&lt;br /&gt;
**All modern operating systems and hardware architectures are supported. 32- or 64-bit, big- or little-endian, it doesn&#039;t matter, it just works.&lt;br /&gt;
**This even extends to homebrew on game consoles, such as [[EDuke32 Wii]].&lt;br /&gt;
**The source code is buildable using many state of the art compilers, including GCC, Clang, and Visual Studio.&lt;br /&gt;
**The developers abhor compiler warnings and maintain a clean build at all times.&lt;br /&gt;
*Maintainability &amp;amp; Sustainability&lt;br /&gt;
**The source code to the ports is publicly accessible by everyone.&lt;br /&gt;
**The project welcomes contributions from anyone, sometimes called &#039;&#039;merge requests&#039;&#039; or &#039;&#039;pull requests&#039;&#039;.&lt;br /&gt;
**There is a distinction between port and mod: Changes like artistic revisionism and tweaking the game balance are not the job of a port. Instead, the port provides a platform for modifications to do these things, clearly communicated to the player.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 project information]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Development_principles&amp;diff=15057</id>
		<title>Development principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Development_principles&amp;diff=15057"/>
		<updated>2025-10-16T07:43:29Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What is important about the [[EDuke32 Project Family]] of [[Wikipedia:source port|source port]]s and what value do they provide to players?&lt;br /&gt;
&lt;br /&gt;
*User Experience (#1 priority)&lt;br /&gt;
**Whether you&#039;re technically minded or not, the port should give the player a great experience right out of the box.&lt;br /&gt;
**Installations of supported games purchased digitally, such as from Steam, GOG, or ZOOM Platform, are detected without any manual setup.&lt;br /&gt;
**The default settings should be the best ones.&lt;br /&gt;
***Texture filtering on pixel art is turned &#039;&#039;&#039;off&#039;&#039;&#039; by default.&lt;br /&gt;
***A modern WSAD-based control scheme is the default. (The original MS-DOS keyboard layout is also available.)&lt;br /&gt;
***The user&#039;s screen resolution and refresh rate are automatically detected to provide the best presentation and make the most of their hardware.&lt;br /&gt;
**Options menus should be simple and clear to avoid confusing new users, while allowing advanced customization through [[console commands]].&lt;br /&gt;
**Widescreen resolutions are supported natively with a &#039;&#039;horiz-plus&#039;&#039; field of view, extending what the player can see to the sides, rather than the lazy approach of &#039;&#039;vert-minus&#039;&#039;, cropping off the top and bottom of the screen, frequently seen even in commercially released games of the 2000s.&lt;br /&gt;
**Hundreds of bugs and crashes have been eliminated.&lt;br /&gt;
*Accuracy &amp;amp; Authenticity&lt;br /&gt;
**Gameplay accuracy: The game logic state machine and world physics should be able to replicate the behavior of the original EXE file, which is demonstrated when playback of [[Wikipedia:attract mode|attract mode]] demos synchronize (&#039;&#039;demo-accurate&#039;&#039;). With that ground truth documented, conscious fixes to bugs can be applied as the conservator of a painting would.&lt;br /&gt;
***Translation: You are playing the same game!&lt;br /&gt;
**Visual aesthetic accuracy:&lt;br /&gt;
***The shading and tint of the game world are preserved even when running with modern hardware-accelerated graphics, which is vital in order to present the game&#039;s atmosphere true to its creators&#039; original intent. This technique is called [[palette emulation]].&lt;br /&gt;
****This shade and tint information is incorporated directly into the graphics rendering pipeline logic, rather than clamped on at the end as an inaccurate approximation.&lt;br /&gt;
***The classic software renderer is fully supported.&lt;br /&gt;
**Sound &amp;amp; music accuracy:&lt;br /&gt;
***The ports use the games&#039; original sound mixing library, providing full support for [[EMIDI]] functionality used by the music, and the so-called &amp;quot;reverb&amp;quot; effect used for in-game worldbuilding.&lt;br /&gt;
***The original games primarily used low-quality sound effects (8-11 KHz) lacking the higher frequencies necessary to be perceived as crisp and clear, paired with simple &#039;&#039;linear interpolation&#039;&#039; that technically introduced artifacts in these higher ranges, but had the positive side effect of giving them more apparent detail. Modern computers are now capable of performing &#039;&#039;[[Wikipedia:sinc|sinc]] interpolation&#039;&#039; approaching mathematical perfection, avoiding these artifacts, but also exposing the formerly obscured low quality. Not accounting for this is why releases like the Xbox and PlayStation ports of [[Duke Nukem 3D: 20th Anniversary World Tour]] still have muffled sound to this day.&lt;br /&gt;
***The included Adlib/SoundBlaster FM synthesis emulation provided by [[Nuked-OPL3]] is &#039;&#039;sample-accurate&#039;&#039;, meaning it is capable of producing output identical to the real hardware.&lt;br /&gt;
*Feature Set&lt;br /&gt;
**Hardware-accelerated graphics are a prominent feature provided by the ports. Just take a look at some screenshots to see what our [[Polymost]] and [[Polymer]] renderers are capable of.&lt;br /&gt;
**Many options for presenting MIDI music are available to suit your own taste, or download a pack of custom renditions in OGG Vorbis or FLAC formats.&lt;br /&gt;
**The [[BUILD Engine]]&#039;s level editor, [[Mapster32]], is [[Wikipedia:WYSIWYG|WYSIWYG]], linked directly with the actual rendering engine. 3D game engines before and since do not provide such a thing!&lt;br /&gt;
*Extensibility&lt;br /&gt;
**The CON scripting language has been significantly augmented, featuring actual variables that do not require hacking an inventory item, screen drawing, weapon and projectile customization, math calculations, and event interception. This allows gameplay mods and total conversions that rival even modern games.&lt;br /&gt;
**Mods can use true-color textures, 3D models, and modern audio formats, all packaged in standard .zip files.&lt;br /&gt;
*Performance&lt;br /&gt;
**Mouse input is considerably refined, allowing butter-smooth motion with minimal latency. See: [[mouse support improvements]]&lt;br /&gt;
**High refresh rate displays such as 144 Hz are fully supported.&lt;br /&gt;
**Code is written (and original code is re-written) to account for algorithmic complexity as well as the practical nature of computing hardware such as data locality in CPU cache lines.&lt;br /&gt;
**The limiting factor of modern computing performance tends to be [[Wikipedia:von Neumann bottleneck|the cost of moving data around]]. In a game, that can mean from disk into memory when loading assets, and from the CPU to the GPU in the course of drawing a frame, just to name two examples.&lt;br /&gt;
***We refactored our texture system to read all the pixel art in the game into a texture atlas and send it to the GPU once at the beginning of execution so that performance would not be interrupted by unnecessary synchronization points in the course of gameplay.&lt;br /&gt;
***We replaced our [[palette emulation|emulation of indexed shading lookup tables]]: while previously we generated a separate texture for each shade index, we now perform the lookup on the GPU with a shader program, drastically reducing our video memory footprint.&lt;br /&gt;
**The ports are [[Wikipedia:code generation (compiler)|compiled]] to [[Wikipedia:machine code|machine code]], and not run as an interpreted language such as Java.&lt;br /&gt;
*Portability&lt;br /&gt;
**All modern operating systems and hardware architectures are supported. 32- or 64-bit, big- or little-endian, it doesn&#039;t matter, it just works.&lt;br /&gt;
**This even extends to homebrew on game consoles, such as [[EDuke32 Wii]].&lt;br /&gt;
**The source code is buildable using many state of the art compilers, including GCC, Clang, and Visual Studio.&lt;br /&gt;
**The developers abhor compiler warnings and maintain a clean build at all times.&lt;br /&gt;
*Maintainability &amp;amp; Sustainability&lt;br /&gt;
**The source code to the ports is publicly accessible by everyone.&lt;br /&gt;
**The project welcomes contributions from anyone, sometimes called &#039;&#039;merge requests&#039;&#039; or &#039;&#039;pull requests&#039;&#039;.&lt;br /&gt;
**There is a distinction between port and mod: Changes like artistic revisionism and tweaking the game balance are not the job of a port. Instead, the port provides a platform for modifications to do these things, clearly communicated to the player.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 project information]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Development_principles&amp;diff=15056</id>
		<title>Development principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Development_principles&amp;diff=15056"/>
		<updated>2025-10-16T06:26:44Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What is important about the [[EDuke32 Project Family]] of [[Wikipedia:source port|source port]]s and what value do they provide to players?&lt;br /&gt;
&lt;br /&gt;
*User Experience (#1 priority)&lt;br /&gt;
**Whether you&#039;re technically minded or not, the port should give the player a great experience right out of the box.&lt;br /&gt;
**Installations of supported games purchased digitally, such as from Steam, GOG, or ZOOM Platform, are detected without any manual setup.&lt;br /&gt;
**The default settings should be the best ones.&lt;br /&gt;
***Texture filtering on pixel art is turned &#039;&#039;&#039;off&#039;&#039;&#039; by default.&lt;br /&gt;
***A modern WSAD-based control scheme is the default. (The original MS-DOS keyboard layout is also available.)&lt;br /&gt;
**Options menus should be simple and clear to avoid confusing new users, while allowing advanced customization through [[console commands]].&lt;br /&gt;
**Widescreen resolutions are supported natively with a &#039;&#039;horiz-plus&#039;&#039; field of view, extending what the player can see to the sides, rather than the lazy approach of &#039;&#039;vert-minus&#039;&#039;, cropping off the top and bottom of the screen, frequently seen even in commercially released games of the 2000s.&lt;br /&gt;
**Hundreds of bugs and crashes have been eliminated.&lt;br /&gt;
*Accuracy &amp;amp; Authenticity&lt;br /&gt;
**Gameplay accuracy: The game logic state machine and world physics should be able to replicate the behavior of the original EXE file, which is demonstrated when playback of [[Wikipedia:attract mode|attract mode]] demos synchronize (&#039;&#039;demo-accurate&#039;&#039;). With that ground truth documented, conscious fixes to bugs can be applied as the conservator of a painting would.&lt;br /&gt;
***Translation: You are playing the same game!&lt;br /&gt;
**Visual aesthetic accuracy:&lt;br /&gt;
***The shading and tint of the game world are preserved even when running with modern hardware-accelerated graphics, which is vital to present the game&#039;s atmosphere true to its creators&#039; original intent. This technique is called [[palette emulation]].&lt;br /&gt;
***The classic software renderer is still supported.&lt;br /&gt;
**Sound &amp;amp; music accuracy:&lt;br /&gt;
***The ports use the games&#039; original sound mixing library, providing full support for [[EMIDI]] functionality used by the music, and the so-called &amp;quot;reverb&amp;quot; effect used for in-game worldbuilding.&lt;br /&gt;
***The original games primarily used low-quality sound effects (8-11 KHz) lacking the higher frequencies necessary to be perceived as crisp and clear, paired with simple &#039;&#039;linear interpolation&#039;&#039; that technically introduced artifacts in these higher ranges, but had the positive side effect of giving them more apparent detail. Modern computers are now capable of performing &#039;&#039;[[Wikipedia:sinc|sinc]] interpolation&#039;&#039; approaching mathematical perfection, avoiding these artifacts, but also exposing the formerly obscured low quality. Not accounting for this is why releases like the Xbox and PlayStation ports of [[Duke Nukem 3D: 20th Anniversary World Tour]] still have muffled sound to this day.&lt;br /&gt;
***The included Adlib/SoundBlaster FM synthesis emulation provided by [[Nuked-OPL3]] is &#039;&#039;sample-accurate&#039;&#039;, meaning it is capable of producing output identical to the real hardware.&lt;br /&gt;
*Feature Set&lt;br /&gt;
**Hardware-accelerated graphics are a prominent feature provided by the ports. Just take a look at some screenshots to see what our [[Polymost]] and [[Polymer]] renderers are capable of.&lt;br /&gt;
**Many options for presenting MIDI music are available to suit your own taste, or download a pack of custom renditions in OGG Vorbis or FLAC formats.&lt;br /&gt;
**The [[BUILD Engine]]&#039;s level editor, [[Mapster32]], is [[Wikipedia:WYSIWYG|WYSIWYG]], linked directly with the actual rendering engine. 3D game engines before and since do not provide such a thing!&lt;br /&gt;
*Extensibility&lt;br /&gt;
**The CON scripting language has been significantly augmented, featuring actual variables that do not require hacking an inventory item, screen drawing, weapon and projectile customization, math calculations, and event interception. This allows gameplay mods and total conversions that rival even modern games.&lt;br /&gt;
**Mods can use true-color textures, 3D models, and modern audio formats, all packaged in standard .zip files.&lt;br /&gt;
*Performance&lt;br /&gt;
**Mouse input is considerably refined, allowing butter-smooth motion with minimal latency. See: [[mouse support improvements]]&lt;br /&gt;
**High refresh rate displays such as 144 Hz are fully supported.&lt;br /&gt;
**Code is written (and original code is re-written) to account for algorithmic complexity as well as the practical nature of computing hardware such as data locality in CPU cache lines.&lt;br /&gt;
**The limiting factor of modern computing performance tends to be [[Wikipedia:von Neumann bottleneck|the cost of moving data around]]. In a game, that can mean from disk into memory when loading assets, and from the CPU to the GPU in the course of drawing a frame, just to name two examples.&lt;br /&gt;
***We refactored our texture system to read all the pixel art in the game into a texture atlas and send it to the GPU once at the beginning of execution so that performance would not be interrupted by unnecessary synchronization points in the course of gameplay.&lt;br /&gt;
***We replaced our emulation of indexed shading lookup tables: while previously we generated a separate texture for each shade index, we now perform the lookup on the GPU with a shader program, drastically reducing our video memory footprint.&lt;br /&gt;
**The ports are [[Wikipedia:code generation (compiler)|compiled]] to [[Wikipedia:machine code|machine code]], and not run as an interpreted language such as Java.&lt;br /&gt;
*Portability&lt;br /&gt;
**All modern operating systems and hardware architectures are supported. 32- or 64-bit, big- or little-endian, it doesn&#039;t matter, it just works.&lt;br /&gt;
**This even extends to homebrew on game consoles, such as [[EDuke32 Wii]].&lt;br /&gt;
**The source code is buildable using many state of the art compilers, including GCC, Clang, and Visual Studio.&lt;br /&gt;
**The developers abhor compiler warnings and maintain a clean build at all times.&lt;br /&gt;
*Maintainability &amp;amp; Sustainability&lt;br /&gt;
**The source code to the ports is publicly accessible by everyone.&lt;br /&gt;
**The project welcomes contributions from anyone, sometimes called &#039;&#039;merge requests&#039;&#039; or &#039;&#039;pull requests&#039;&#039;.&lt;br /&gt;
**There is a distinction between port and mod: Changes like artistic revisionism and tweaking the game balance are not the job of a port. Instead, the port provides a platform for modifications to do these things, clearly communicated to the player.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 project information]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15049</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15049"/>
		<updated>2025-10-10T04:44:58Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]] for all of the above. (For a more formal CV, see my LinkedIn below.)&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***faithful music replacement packs for EDuke32&lt;br /&gt;
****&#039;&#039;Duke Nukem 3D&#039;&#039; for Sega Saturn Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; PlayStation Music Pack&lt;br /&gt;
****&#039;&#039;Duke Nukem 64&#039;&#039; Music Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Developer on &#039;&#039;Duke Nukem 3D: Hail to the King Collection&#039;&#039; (canceled)&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Cobbled together [https://hendricks266.duke4.net/flappywang/ FlappyWang]&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
**[https://www.mobygames.com/person/602625/evan-ramos/ I have a MobyGames page apparently.]&lt;br /&gt;
*Stuff I&#039;ve done for other game communities:&lt;br /&gt;
**Helped my friend [https://fallout.wiki/wiki/Mod:RoyBatty RoyBatty] build the [https://www.nexusmods.com/newvegas/mods/55061 4GB FNV Updated Loader] for &#039;&#039;Fallout: New Vegas&#039;&#039;&lt;br /&gt;
***The mod entry on NexusMods with my credit attached is still in the top 50 all-time downloaded mods for the game despite the fact that I&#039;ve never played it!&lt;br /&gt;
**Created the initial version of the [https://forum.starmen.net/forum/Games/Mother3/MOTHER-3-Ultimate-Music-Rip MOTHER 3 Ultimate Music Rip], since supplanted by [https://forum.starmen.net/forum/Games/Mother3/The-NEW-Ultimate-Music-Rip-for-MOTHER-3 an update by JumpmanFR]&lt;br /&gt;
**Constructed a .vgm pack for [https://www.smspower.org/Music/ShiningForceGaidenFinalConflict-GG Shining Force Gaiden ~Final Conflict~]&lt;br /&gt;
***Also contributed one track to the [https://vgmrips.net/packs/author/hendricks266 Sonic 3 &amp;amp; Knuckles VGM rip] from the [https://hiddenpalace.org/Sonic_3C_(May_17,_1994_prototype) Sonic 3C 0517 Prototype]&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15046</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15046"/>
		<updated>2025-09-10T08:45:19Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]] for all of the above. (For a more formal CV, see my LinkedIn below.)&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Cobbled together [https://hendricks266.duke4.net/flappywang/ FlappyWang]&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
**[https://www.mobygames.com/person/602625/evan-ramos/ I have a MobyGames page apparently.]&lt;br /&gt;
*Stuff I&#039;ve done for other game communities:&lt;br /&gt;
**Helped my friend [https://fallout.wiki/wiki/Mod:RoyBatty RoyBatty] build the [https://www.nexusmods.com/newvegas/mods/55061 4GB FNV Updated Loader] for &#039;&#039;Fallout: New Vegas&#039;&#039;&lt;br /&gt;
***The mod entry on NexusMods with my credit attached is still in the top 50 all-time downloaded mods for the game despite the fact that I&#039;ve never played it!&lt;br /&gt;
**Created the initial version of the [https://forum.starmen.net/forum/Games/Mother3/MOTHER-3-Ultimate-Music-Rip MOTHER 3 Ultimate Music Rip], since supplanted by [https://forum.starmen.net/forum/Games/Mother3/The-NEW-Ultimate-Music-Rip-for-MOTHER-3 an update by JumpmanFR]&lt;br /&gt;
**Constructed a .vgm pack for [https://www.smspower.org/Music/ShiningForceGaidenFinalConflict-GG Shining Force Gaiden ~Final Conflict~]&lt;br /&gt;
***Also contributed one track to the [https://vgmrips.net/packs/author/hendricks266 Sonic 3 &amp;amp; Knuckles VGM rip] from the [https://hiddenpalace.org/Sonic_3C_(May_17,_1994_prototype) Sonic 3C 0517 Prototype]&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15045</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15045"/>
		<updated>2025-09-10T08:27:22Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]] for all of the above. (For a more formal CV, see my LinkedIn below.)&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Cobbled together [https://hendricks266.duke4.net/flappywang/ FlappyWang]&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
**[https://www.mobygames.com/person/602625/evan-ramos/ I have a MobyGames page apparently.]&lt;br /&gt;
*Stuff I&#039;ve done for other game communities:&lt;br /&gt;
**Helped my friend [https://fallout.wiki/wiki/Mod:RoyBatty RoyBatty] build the [https://www.nexusmods.com/newvegas/mods/55061 4GB FNV Updated Patcher] for &#039;&#039;Fallout: New Vegas&#039;&#039;&lt;br /&gt;
***The mod entry on NexusMods with my credit attached is still in the top 50 all-time downloaded mods for the game despite the fact that I&#039;ve never played it!&lt;br /&gt;
**Created the initial version of the [https://forum.starmen.net/forum/Games/Mother3/MOTHER-3-Ultimate-Music-Rip MOTHER 3 Ultimate Music Rip], since supplanted by [https://forum.starmen.net/forum/Games/Mother3/The-NEW-Ultimate-Music-Rip-for-MOTHER-3 an update by JumpmanFR]&lt;br /&gt;
**Constructed a .vgm pack for [https://www.smspower.org/Music/ShiningForceGaidenFinalConflict-GG Shining Force Gaiden ~Final Conflict~]&lt;br /&gt;
***Also contributed one track to the [https://vgmrips.net/packs/author/hendricks266 Sonic 3 &amp;amp; Knuckles VGM rip] from the [https://hiddenpalace.org/Sonic_3C_(May_17,_1994_prototype) Sonic 3C 0517 Prototype]&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15044</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15044"/>
		<updated>2025-09-10T04:29:43Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014. This page is my [[Wikipedia:curriculum vitae|CV]].&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Additional highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15043</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15043"/>
		<updated>2025-09-10T03:35:20Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan.&lt;br /&gt;
&lt;br /&gt;
I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014.&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Additional highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and [https://www.zoom-platform.com/product/duke-nukem-3d-atomic-edition ZOOM Platform]&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15042</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15042"/>
		<updated>2025-09-10T03:26:06Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan.&lt;br /&gt;
&lt;br /&gt;
I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014.&lt;br /&gt;
&lt;br /&gt;
🇵🇷🇵🇱🇺🇸&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**[[Voidpoint]] Co-Founder&lt;br /&gt;
**&#039;&#039;[[Ion Fury]]&#039;&#039; Technical Director&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**[https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; Restoration Director]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Additional highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and ZOOM Platform&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15041</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15041"/>
		<updated>2025-09-01T02:56:51Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. 🇵🇷🇵🇱🇺🇸&lt;br /&gt;
&lt;br /&gt;
I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014.&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**Co-Founder of [[Voidpoint]]&lt;br /&gt;
**Technical Director of &#039;&#039;[[Ion Fury]]&#039;&#039;&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**Director of [https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; restoration project]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Additional highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Shadow Warrior&#039;&#039; High Resolution Pack&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and ZOOM Platform&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=15040</id>
		<title>Action</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=15040"/>
		<updated>2025-08-27T02:54:26Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The command &#039;&#039;&#039;action&#039;&#039;&#039; refers to both the declaration that defines the animation for an [[actor]], and to the command that changes the animation of an [[actor]] at runtime.&lt;br /&gt;
== Declaration ==&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;action&#039;&#039;&#039; &amp;lt;name&amp;gt; &amp;lt;startframe&amp;gt; &amp;lt;frames&amp;gt; &amp;lt;viewtype&amp;gt; &amp;lt;incvalue&amp;gt; &amp;lt;delay&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement must be placed outside of any code blocks.&lt;br /&gt;
&lt;br /&gt;
==== Arguments ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/span&amp;gt;: Defines the name of the action, to be used with the runtime statement.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;startframe&amp;gt;&amp;lt;/span&amp;gt;: Defines the starting frame number (relative to the main sprite of the [[actor]]).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;frames&amp;gt;&amp;lt;/span&amp;gt;: Defines the total number of frames in the animation, after which it will loop. Must be at least 1.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;viewtype&amp;gt;&amp;lt;/span&amp;gt;: Defines the number of sides drawn for the actor.  Prior to 3D models, this method was used to simulate a 3D appearance for sprites.  Valid values are: &lt;br /&gt;
:&#039;&#039;&#039;1&#039;&#039;&#039; - The sprite will appear the same regardless of the angle at which it is viewed.&lt;br /&gt;
:&#039;&#039;&#039;2&#039;&#039;&#039; - The sprite will have 8 angles built from only 2 art tiles.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::In this case it uses a simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 1, 2, 1, 2, 1, 2&lt;br /&gt;
:&#039;&#039;&#039;3&#039;&#039;&#039; or &#039;&#039;&#039;4&#039;&#039;&#039; - The sprite will have 16 angles built from only 4 art tiles. A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows, with 1, 2, 3, and 4 being the order of the four tiles used, and M denoting that the tile is mirrored: &amp;lt;span {{code}}&amp;gt;1M, 2M, 3M, 4M, 4, 3, 2, 1, 1M, 2M, 3M, 4M, 4, 3, 2, 1 &amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;5&#039;&#039;&#039; - The sprite will have 8 angles constructed from 5 art tiles, three of which are mirrored.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 4M, 3M, 2M &amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;7&#039;&#039;&#039; - The sprite will have 12 angles constructed from 7 art tiles, five of which are mirrored.  A new frame is drawn every 30 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 6M, 5M, 4M, 3M, 2M&amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;8&#039;&#039;&#039; - The sprite will have 8 angles constructed from 8 art tiles.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::In this case it uses a simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8&lt;br /&gt;
:&#039;&#039;&#039;9&#039;&#039;&#039; - The sprite will have 16 angles constructed from 9 art tiles, seven of which are mirrored.  A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 8M, 7M, 6M, 5M, 4M, 3M, 2M&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;12&#039;&#039;&#039; - The sprite will have 12 angles constructed from 12 art tiles.  A new frame is drawn every 30 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::The simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12&lt;br /&gt;
:&#039;&#039;&#039;16&#039;&#039;&#039; - The sprite will have 16 angles constructed from 16 art tiles.  A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::The simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16&lt;br /&gt;
&lt;br /&gt;
:View type 1 is generally used for pickups and environmental objects like fire hydrants. &lt;br /&gt;
:View type 3 is useful only for very symmetrical actors but it does give the most angles.&lt;br /&gt;
:View types 5 and 7 are for actors which have a single axis of symmetry and which need to face directions other than directly towards the player. &lt;br /&gt;
:View type 8 is for objects with little in the way of symmetry.&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;incvalue&amp;gt;&amp;lt;/span&amp;gt;: Defines by how many frames the animation should advance in each step. If negative, the animation will play in reverse.&lt;br /&gt;
: Note that it is possible to define increments greater than 1 or smaller than -1.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt; &amp;lt;delay&amp;gt; &amp;lt;/span&amp;gt;: Defines the delay between frames, where the value needs to be a multiple of 4. Any values inbetween result in the same delay as the nearest multiple rounded down.&lt;br /&gt;
: The delay is not proportional to the value, i.e. a delay of 16 does not result in double the time between frames as a delay of 8. &lt;br /&gt;
: Much rather, the calculation is as follows: &lt;br /&gt;
::* [0,3] is the minimum delay, equal to the [[ifcount|tic]] counter. &lt;br /&gt;
::* [4,7] is 1/2 of the tic counter delay&lt;br /&gt;
::* [8,11] is 1/3 of the tic counter delay&lt;br /&gt;
::* [12,15] is 1/4; [16,19] is 1/5; etc.&lt;br /&gt;
&lt;br /&gt;
== Runtime Command ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt; &#039;&#039;&#039;action&#039;&#039;&#039; &amp;lt;name&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the actor&#039;s current action when called from within the [[actor]] code. Note that calling this statement from within an [[event]] has no effect.&lt;br /&gt;
&lt;br /&gt;
Note: Every frame advance adds 1 to [[actioncount]]. To reset an animation, either call the action again or use [[resetactioncount]]. Starting a new animation will also reset [[actioncount]] to 0.&lt;br /&gt;
&lt;br /&gt;
[[Category:Duke3D 1.3/1.5 commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=15039</id>
		<title>Action</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=15039"/>
		<updated>2025-08-27T02:52:25Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The command &#039;&#039;&#039;action&#039;&#039;&#039; refers to both the declaration that defines the animation for an [[actor]], and to the command that changes the animation of an [[actor]] at runtime.&lt;br /&gt;
== Declaration ==&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt;&#039;&#039;&#039;action&#039;&#039;&#039; &amp;lt;name&amp;gt; &amp;lt;startframe&amp;gt; &amp;lt;frames&amp;gt; &amp;lt;viewtype&amp;gt; &amp;lt;incvalue&amp;gt; &amp;lt;delay&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement must be placed outside of any code blocks.&lt;br /&gt;
&lt;br /&gt;
==== Arguments ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/span&amp;gt;: Defines the name of the action, to be used with the runtime statement.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;startframe&amp;gt;&amp;lt;/span&amp;gt;: Defines the starting frame number (relative to the main sprite of the [[actor]]).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;frames&amp;gt;&amp;lt;/span&amp;gt;: Defines the total number of frames in the animation, after which it will loop. Must be at least 1.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;viewtype&amp;gt;&amp;lt;/span&amp;gt;: Defines the number of sides drawn for the actor.  Prior to 3D models, this method was used to simulate a 3D appearance for sprites.  Valid values are: &lt;br /&gt;
:&#039;&#039;&#039;1&#039;&#039;&#039; - The sprite will appear the same regardless of the angle at which it is viewed.&lt;br /&gt;
:&#039;&#039;&#039;2&#039;&#039;&#039; - The sprite will have 8 angles built from only 2 art tiles.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::In this case it uses a simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 1, 2, 1, 2, 1, 2&lt;br /&gt;
:&#039;&#039;&#039;3&#039;&#039;&#039; or &#039;&#039;&#039;4&#039;&#039;&#039; - The sprite will have 16 angles built from only 4 art tiles. A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows, with 1, 2, 3, and 4 being the order of the four tiles used, and M denoting that the tile is mirrored: &amp;lt;span {{code}}&amp;gt;1M, 2M, 3M, 4M, 4, 3, 2, 1, 1M, 2M, 3M, 4M, 4, 3, 2, 1 &amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;5&#039;&#039;&#039; - The sprite will have 8 angles constructed from 5 art tiles, three of which are mirrored.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 4M, 3M, 2M &amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;7&#039;&#039;&#039; - The sprite will have 12 angles constructed from 7 art tiles, five of which are mirrored.  A new frame is drawn every 30 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 6M, 5M, 4M, 3M, 2M&amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;8&#039;&#039;&#039; - The sprite will have 8 angles constructed from 8 art tiles.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::In this case it uses a simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8&lt;br /&gt;
:&#039;&#039;&#039;9&#039;&#039;&#039; - The sprite will have 16 angles constructed from 9 art tiles, seven of which are mirrored.  A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite.&lt;br /&gt;
::The pattern is as follows: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 8M, 7M 6M, 5M, 4M, 3M, 2M&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;12&#039;&#039;&#039; - The sprite will have 12 angles constructed from 12 art tiles.  A new frame is drawn every 30 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::The simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12&lt;br /&gt;
:&#039;&#039;&#039;16&#039;&#039;&#039; - The sprite will have 16 angles constructed from 16 art tiles.  A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite. &lt;br /&gt;
::The simple pattern: &amp;lt;span {{code}}&amp;gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16&lt;br /&gt;
,&lt;br /&gt;
:View type 1 is generally used for pickups and environmental objects like fire hydrants. &lt;br /&gt;
:View type 3 is useful only for very symmetrical actors but it does give the most angles.&lt;br /&gt;
:View types 5 and 7 are for actors which have a single axis of symmetry and which need to face directions other than directly towards the player. &lt;br /&gt;
:View type 8 is for objects with little in the way of symmetry.&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt;&amp;lt;incvalue&amp;gt;&amp;lt;/span&amp;gt;: Defines by how many frames the animation should advance in each step. If negative, the animation will play in reverse.&lt;br /&gt;
: Note that it is possible to define increments greater than 1 or smaller than -1.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span {{code}}&amp;gt; &amp;lt;delay&amp;gt; &amp;lt;/span&amp;gt;: Defines the delay between frames, where the value needs to be a multiple of 4. Any values inbetween result in the same delay as the nearest multiple rounded down.&lt;br /&gt;
: The delay is not proportional to the value, i.e. a delay of 16 does not result in double the time between frames as a delay of 8. &lt;br /&gt;
: Much rather, the calculation is as follows: &lt;br /&gt;
::* [0,3] is the minimum delay, equal to the [[ifcount|tic]] counter. &lt;br /&gt;
::* [4,7] is 1/2 of the tic counter delay&lt;br /&gt;
::* [8,11] is 1/3 of the tic counter delay&lt;br /&gt;
::* [12,15] is 1/4; [16,19] is 1/5; etc.&lt;br /&gt;
&lt;br /&gt;
== Runtime Command ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span {{code}}&amp;gt; &#039;&#039;&#039;action&#039;&#039;&#039; &amp;lt;name&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the actor&#039;s current action when called from within the [[actor]] code. Note that calling this statement from within an [[event]] has no effect.&lt;br /&gt;
&lt;br /&gt;
Note: Every frame advance adds 1 to [[actioncount]]. To reset an animation, either call the action again or use [[resetactioncount]]. Starting a new animation will also reset [[actioncount]] to 0.&lt;br /&gt;
&lt;br /&gt;
[[Category:Duke3D 1.3/1.5 commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15038</id>
		<title>User:Hendricks266</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Hendricks266&amp;diff=15038"/>
		<updated>2025-08-26T22:38:52Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My name is Evan. 🇵🇷🇵🇱🇺🇸&lt;br /&gt;
&lt;br /&gt;
I have been a member of Duke4.net since 2009, a developer of EDuke32 since 2011, and I co-founded Voidpoint in 2014.&lt;br /&gt;
&lt;br /&gt;
*Roles:&lt;br /&gt;
**Computer Engineer by day&lt;br /&gt;
**Co-Founder of [[Voidpoint]]&lt;br /&gt;
**Technical Director of &#039;&#039;[[Ion Fury]]&#039;&#039;&lt;br /&gt;
**[[EDuke32 Project Family|EDuke32 (+ VoidSW + NBlood + ...)]] Senior Developer&lt;br /&gt;
**Director of [https://forums.duke4.net/topic/9316-/ &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039; restoration project]&lt;br /&gt;
**Admin at Duke4.net ([https://forums.duke4.net Forums] &amp;amp; [https://discord.gg/FQkMQ7r Discord])&lt;br /&gt;
**Staff at [https://discord.gg/V9fY5wE &#039;&#039;Blood&#039;&#039; Community Discord]&lt;br /&gt;
*Additional highlights of my involvement:&lt;br /&gt;
**Helped with high-profile mods for [[EDuke32]] by implementing vital source port functionality and contributing to their construction&lt;br /&gt;
***&#039;&#039;Duke Nukem 64&#039;&#039; Mod&lt;br /&gt;
***&#039;&#039;Duke Nukem: Total Meltdown&#039;&#039; Mod&lt;br /&gt;
***Duke Hard&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D&#039;&#039; High Resolution Pack&lt;br /&gt;
****&#039;&#039;Duke Caribbean: Life&#039;s a Beach&#039;&#039; Plus&lt;br /&gt;
****&#039;&#039;Duke: Nuclear Winter&#039;&#039; Plus&lt;br /&gt;
***&#039;&#039;Duke Nukem 3D: 20th Anniversary World Tour&#039;&#039; Stopgap Compatibility Layer for EDuke32&lt;br /&gt;
**Spearheaded [[VoidSW]], the preeminent source port for &#039;&#039;[[Shadow Warrior]]&#039;&#039;&lt;br /&gt;
**Credited in &#039;&#039;Duke Nukem 3D: Megaton Edition&#039;&#039; and &#039;&#039;Shadow Warrior Classic Redux&#039;&#039;&lt;br /&gt;
**Entrusted with Apogee &amp;amp; 3D Realms prototypes/betas&lt;br /&gt;
***Successfully organized releases for &#039;&#039;Shadow Warrior&#039;&#039;, &#039;&#039;Strife&#039;&#039;, &#039;&#039;Major Stryker&#039;&#039;, &#039;&#039;Bio Menace&#039;&#039;, &#039;&#039;Halloween Harry&#039;&#039;&lt;br /&gt;
***Authored the 3D Realms Beta Trailer&lt;br /&gt;
***Broke copy protections on 100+ .zip and .exe files&lt;br /&gt;
***Extended the [https://hendricks266.duke4.net/stuff/fakedate2.7z FakeDate] [[Wikipedia:terminate-and-stay-resident program|TSR]] by Lee Killough to accept an arbitrary date as a command line parameter&lt;br /&gt;
**Packaged new canonical versions of the Duke 3D expansions for the &#039;&#039;3D Realms Anthology&#039;&#039; and ZOOM Platform&lt;br /&gt;
**Recovered and restoring &#039;&#039;Shadow Warrior: Deadly Kiss&#039;&#039;&lt;br /&gt;
**Formalized our [[development principles]]&lt;br /&gt;
*Media:&lt;br /&gt;
**[https://www.youtube.com/watch?v=MHQv4mSG7_I DF Retro Extra - Ion Fury Tech Interview] (2018) - I was interviewed by John Linneman from Digital Foundry about the creation of Ion Fury and the experience of working with the Build Engine in modern times from a technical perspective. I was joined by Frederik Schreiber, VP of our publisher, 3D Realms.&lt;br /&gt;
**[https://www.indieretronews.com/2021/04/cola-powered-gamer-with-exclusive.html Cola Powered Gamer exclusive interview with Ion Fury team] (2021) - I spoke with Indie Retro News about the background of Ion Fury and the experience of serving as Technical Director on the project. My colleague Max Ylitalo, Lead Level Designer, joined me for the second half.&lt;br /&gt;
*Contact:&lt;br /&gt;
**email: &amp;lt;code&amp;gt;hendricks266+edukewiki&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;gmail&amp;lt;/code&amp;gt; dot &amp;lt;code&amp;gt;com&amp;lt;/code&amp;gt;&lt;br /&gt;
**X (née Twitter): https://x.com/Hendricks266&lt;br /&gt;
**Bluesky: https://bsky.app/profile/hendricks266.bsky.social&lt;br /&gt;
**GitHub: https://github.com/Hendricks266&lt;br /&gt;
**LinkedIn: https://www.linkedin.com/in/evanramos/&lt;br /&gt;
**Linktree: https://linktr.ee/Hendricks266&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{EDuke32 Developer}}&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Aim_mode&amp;diff=15037</id>
		<title>Aim mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Aim_mode&amp;diff=15037"/>
		<updated>2025-08-20T13:33:44Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;aim_mode is a [[bitfield]].&lt;br /&gt;
&lt;br /&gt;
* If bit 0 is set (1), then mouse aiming is on.&lt;br /&gt;
* If bit 1 is set (2), then gamepad recentering is active.&lt;br /&gt;
* If bit 2 is set (4), then aim assist (for gamepads) is active.&lt;br /&gt;
&lt;br /&gt;
[[Category:Player structure members]]&lt;br /&gt;
[[Category:Bitfields]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Newgamecustomopen&amp;diff=15036</id>
		<title>Newgamecustomopen</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Newgamecustomopen&amp;diff=15036"/>
		<updated>2025-08-20T13:33:30Z</updated>

		<summary type="html">&lt;p&gt;Hendricks266: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bitfield]] where each bit corresponds to a [[DEF Language#newgamechoices|newgamechoices]] menu entry of the top-layer menu.&lt;br /&gt;
&lt;br /&gt;
If a bit is set, it disables the &#039;&#039;&#039;locked&#039;&#039;&#039; and &#039;&#039;&#039;hidden&#039;&#039;&#039; flag for the corresponding menu entry.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 setu .newgamecustomopen 0x10  // disables flags on the fifth menu entry&lt;br /&gt;
&lt;br /&gt;
[[Category:Userdef structure members]]&lt;br /&gt;
[[Category:Bitfields]]&lt;/div&gt;</summary>
		<author><name>Hendricks266</name></author>
	</entry>
</feed>