ArtsTech engine development log

(Adam Parrott) #1

Welcome to the development blog for my current Haxe project, the ArtsTech engine!


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.


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


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


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:


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!



No longer able to edit old posts
(Aleksandr Kuzmenko) #2

Do you have the sources published somewhere?


(Adam Parrott) #3

Not publicly. I may eventually open source the engine at some point in the future, but for now, the source is still being developed in secret. :slight_smile:


(Patrick Joseph Flannery) #4

Looking fantastic! Just to clarify too, neither source code or the public release of the engine itself, are available for perusal?

Super great looking, awesome work.

1 Like

(Adam Parrott) #5

Thanks, Patrick!

Correct. I’m actually planning to use the engine in some commercial game projects, so it could be awhile before I would be ready and able to publicly open source the engine itself.

That said, I’m more than happy to answer any questions that people may have about the engine, so if you’re curious about some aspect of the architecture or implementation, feel free to ask away! :slight_smile:


(Adam Parrott) #6

After posting numerous updates elsewhere about the past few releases, I thought it was high time that I also post a detailed update in this thread, so here goes!

A few weeks ago, I completed the 0.9.0 release, which primarily focused on adding support for vertical split and vertical sliding doors to the engine. With those additions, the engine now supports four different types of doors:

  • Horizontal split doors
  • Horizontal sliding doors
  • Vertical split doors
  • Vertical sliding doors

This release also saw the addition of a proper multi-depth view buffer in the renderer, which then made it possible to add support for true transparent walls and to properly display multiple transparent objects or walls in each screen column.

The next big update was the 0.10.0 release, which primarily focused on adding support for two related items:

  • Traditional secret “pushwalls”
  • Multi-directional moving walls

The neat thing about these two items is that they share much of the same code; the main difference here is in how they operate, with the pushwall stopping as soon as it hits another wall while the movewalls simply keep bouncing around in a continuous loop until commanded to stop.

Additionally, while pushwalls can only travel in the same direction as their initial “push” by the player, the movewalls can move in any of four major cardinal directions (north, south, east, and west). Individual push/movewalls can also define their own speed, so each wall can move at it’s own rate independent of the other pushwalls and movewalls in the current level map.

The latest update is 0.11.0, which adds animation support to the existing object system, giving us the ability to display multi-sided and animated objects in our game world! Although this was one of easier features to implement, I think it helps add another helpful dimension of interactivity and realism to the engine.

In the meantime, work has continued this past week to add the last of the “essential” features I feel are needed to make the engine usable in an actual game project. Among those still-to-be-added features are:

  • Animated and moving actors
  • Basic title screen and menu system
  • Basic sound playback for interactive elements

Once I have some of these new features implemented, I’ll post another update with more details.

Stay tuned!