Welcome to the development blog for my current Haxe project, the ArtsTech engine!
Description
The ArtsTech engine is a “2.5D” first-person game engine, written completely in Haxe, which aims to mirror both the style and functionality of the Wolfenstein 3D-based games (including Wolfenstein 3D and Spear of Destiny, Blake Stone: Aliens of Gold and Blake Stone: Planet Strike, and Rise of the Triad: Dark War) while also incorporating more modern gameplay features.
As an in-house research project under active development, the goal is to eventually use this engine as the basis for other projects, including demos, game jam entries, and commercial game products. In sharing highlights of the development process in this thread, I hope to not only elicit feedback from the broader gaming community but also inspire others to create something themselves using any one of the many game development tools available to us today.
Features
The primary features of this engine are to be:
- Cross-platform, with desktop and consoles the primary targets
- Written in 100% pure Haxe with minimal dependencies
- Modular and self-contained
- Highly performant on a wide array of machines
- Similar in function and style to it’s original retro influences
- Flexible enough to incorporate additional modern features
Roadmap
The following table provides a general roadmap of planned engine features.
Group | Feature | Complete? | Version |
---|---|---|---|
Actors | Animated actors | Y | 0.12.0 |
-
| Moving actors | Y | 0.12.0
-
| Multi-sided actors | Y | 0.4.0
Audio | Actor sound effects | N | [0.17.0]
-
| Music tracks per level | N | [0.17.0]
-
| Music tracks per state | N | [0.17.0]
-
| Player sound effects | N | [0.17.0]
Ceilings | Animated ceiling tiles | N | [0.18.0]
-
| Parallaxed backgrounds | Y | 0.1.0
-
| Solid colored ceilings | Y | 0.1.0
-
| Textured mapped ceilings | Y | 0.1.0
Doors | Horizontal sliding doors | Y | 0.1.0
-
| Horizontal split doors | Y | 0.1.0
-
| Vertical sliding doors | Y | 0.9.0
-
| Vertical split doors | Y | 0.9.0
Editor | Actor editor | N | ?
-
| Basic level editor | Y | 0.8.0
-
| Clone multiple map cells | Y | 0.10.1
-
| Clone single map cells | Y | 0.8.0
-
| Debugging console | N | ?
-
| Menu system | N | ?
-
| Object editor | N | ?
-
| Palette editor | N | ?
-
| Project editor | N | ?
-
| Update current map properties | Y | 0.10.1
-
| Update multiple map cell properties | Y | 0.10.1
-
| Update single map cell properties | Y | 0.8.0
Engine | Basic debugging console | N | ?
-
| Configurable menu system | N | [0.16.0]
-
| Configurable title / transitional screens | N | [0.16.0]
-
| Playback deterministic demos | N | ?
-
| Project configuration file support | N | [0.15.0]
-
| Project group file support | N | [0.15.0]
-
| Record deterministic demos | N | ?
-
| Retro DOS terminal output | N | ?
Floors | Animated floor tiles | N | [0.18.0]
-
| Solid colored floors | Y | 0.1.0
-
| Textured mapped floors | Y | 0.1.0
Objects | Animated objects | Y | 0.11.0
-
| Multi-sided objects | Y | 0.4.0
-
| Single-sided objects | Y | 0.3.0
Player | Flying up and down | N | [0.20.0]
-
| Jumping up an down | N | [0.20.0]
-
| Looking up and down | N | [0.20.0]
UI | Basic message box | N | [0.16.0]
-
| Basic nine-patch dialogs | Y | 0.5.0
-
| Configurable HUD / on-screen display | N | [0.16.0]
-
| Debug dialog for current session | Y | 0.5.1
-
| Debug dialog for game fonts | Y | 0.7.0
-
| Debug dialog for game objects | Y | 0.5.1
-
| Debug dialog for game palettes | Y | 0.7.1
-
| Debug dialog for game textures | Y | 0.5.1
-
| Debug dialog for key mappings | Y | 0.5.1
-
| Level map dialog | Y | 0.6.0
Walls | Inset walls | Y | 0.9.0
-
| Interactive wall tiles | N | [0.18.0]
-
| Moving walls | Y | 0.10.0
-
| Multi-height walls | N | [0.20.0]
-
| Pushwalls | Y | 0.10.0
-
| Solid colored walls | Y | 0.1.0
-
| Texture mapped walls | Y | 0.1.0
-
| Transparent walls | Y | 0.9.0
World | Moving platforms | N | [0.20.0]
-
| Teleporters | N | [0.18.0]
-
| Touchplates | N | [0.18.0]
-
| Volumetric lighting | Y | 0.1.0
Updates
When additional features are added to the engine, I plan to post both short- and long-form updates to this thread which should provide additional insight behind some of the implementation and design decisions that were made to support each new engine feaure. I also plan to update the feature sumamry table in this initial post with the latest information as it comes available.
As always, comments and feedback are welcome!
Frequently Asked Questions
Q: Will this engine eventually be a free or paid product I can use myself?
A: While I have no plans to develop or release the engine as third-party product itself, I do plan to open source the code at some point in the future. Once that happens, you will be free to view, build, and modify the engine in whatever way(s) you see fit.
Q: Is the engine code available somewhere I can see, use, or modify myself?
A: Not yet! As I noted in the previous answer: while I plan to eventually release the code for this project into the public domain, we’re simply not there yet. In the meantime, feel free to check out these related resources for inspiration:
-
Wolfentext3D
Text-based 2.5D fun in your terminal window! Written in Ruby. -
Strata (Ludum Dare 35 entry)
This entry for the Ludum Dare 35 game jam actually provided the initial code that formed the basis for the early versions of the ArtsTech engine. Written in Haxe. -
Wolfenstein 3D source code
Original source code for the game that arguably started it all! -
Blake Stone source code
Source port of the second standalone game based on the Wolf3D engine. -
Rise of the Triad source code
Original source code for the last game based on a heavily-modified Wolf3D engine. -
Fabien Sanglard’s engine code reviews
An excellent resource for learning about the inner workings of various 3D game engines.
Examples
Here are a few videos that demonstrate some of the current engine features:
(More videos can be found at the project’s YouTube playlist here.)
Thanks for reading, and enjoy!
Adam