ArtsTech engine development log


(Adam Parrott) #1

ArtsTech engine development log

This thread aims to serve as a more central locale for the numerous updates related to my current Haxe project, the ArtsTech game 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 some modern engine and gameplay features.

As a result, the engine will be largely limited to creating worlds with “blocky” orthogonal walls on a grid-like map; limiting wall and player heights to only one level of scaled height (with multi-height worlds and player movement being added later on); and using traditional flat sprites for all objects, enemies, and other actors.


With that in mind, the primary goals 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 retro games influences
  • Flexible enough to incorporate additional modern features


The following table provides a summary of the majority of planned engine features.

Group Feature Complete? Version
Walls Solid textured walls 🗸 alpha
Walls Transparent walls 🗸 0.9.0
Walls Inset walls 🗸 0.9.0
Walls Interactive wall tiles -
Walls Pushwalls 🗸 0.10.0
Walls Moving walls 🗸 0.10.0
Ceilings Textured ceilings 🗸 alpha
Ceilings Parallaxed backgrounds 🗸 alpha
Ceilings Animated ceiling tiles -
Floors Textured floors 🗸 alpha
Floors Animated floor tiles -
Floors Teleporting map cells -
Floors Touchplates / action floor tiles -
Doors Horizontal split doors 🗸 alpha
Doors Horizontal sliding doors 🗸 alpha
Doors Vertical sliding doors 🗸 0.9.0
Doors Vertical split doors 🗸 0.9.0
Objects Static single-sided objects 🗸 0.3.0
Objects Static multi-sided objects 🗸 0.4.0
Objects Animated objects 🗸 0.11.0
Actors Multi-sided actors 🗸 0.4.0
Actors Animated actors -
Actors Moving actors -
Multi-height Multi-height walls of all types -
Multi-height Moving platforms up and down -
Multi-height Ability to “look” up and down -
Multi-height Ability to jump or fly up and down -
Dialogs Basic dialog support with nine-patch UIs 🗸 0.5.0
Dialogs Debug dialog for current key mapping 🗸 0.5.1
Dialogs Debug dialog for current session variables 🗸 0.5.1
Dialogs Debug dialog for current game textures 🗸 0.5.1
. - Single texture view mode (page left/right) 🗸 0.5.1
. - Overview / grid view mode of all textures -
Dialogs Debug dialog for current game objects -
. - Single object view mode (page left/right) 🗸 0.5.1
. - Overview / grid view mode of all objects -
Dialogs Debug dialog for current game palette(s) 🗸 0.7.1
Dialogs Debug dialog for current game font(s) 🗸 0.7.0
Dialogs Dialog for current level map 🗸 0.6.0
Dialogs Message box with optional confirm actions -
Miscellaneous Adjustable volumetric lighting 🗸 alpha
Miscellaneous Record and playback deterministic demos -
Miscellaneous Configurable HUD / on-screen display -
Miscellaneous Configurable title / transitional screens -
Miscellaneous Configurable menu system -
Miscellaneous Retro DOS mode on startup and shutdown -
Miscellaneous Basic debugging console -
Editing suite Map / level editor
. - Clone one map cell to another cell 🗸 0.8.0
. - Clone one map cell to multiple cells 🗸 0.10.1
. - Update current map properties 🗸 0.10.1
. - Update properties for single map cell 🗸 0.8.0
. - Update properties for multiple map cells 🗸 0.10.1
Editing suite Object / actor editor -
Editing suite Palette editor -
Editing suite Project editor -
Editing suite Menu system -
Editing suite Debugging console -


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!


In the meantime, 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!


(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.

(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!