![doom level editor player start doom level editor player start](https://www.gamingonlinux.com/cache/youtube_thumbs/06ab8cfc618f41e46ca2eb63eaaf9e8a.jpg)
Clipping libraries are designed to perform the boolean operations, as shown here:įinally, when shapes were output from the clipping operation, there wasn’t an easy way to link them to the input. The first and primary issue was that the Doom builder output (shown above) wasn’t something that it could produce in a single pass. The clipping plugin worked exactly as intended, but I ran into several issues for our use case. This also was the input taken by the clipping library. It was also convenient to be able to compare two vertices directly without having to rely on a floating point tolerance, and they were easily hashable. I decided on this direction, because it mirrors how the original Doom works (although I believe they may use shorts instead of ints, because of memory limitations at the time development). There were 32 possible level editor units per Unity unit. I won’t go into the nitty gritty details of how this was all implemented, but I will mention a few key details that will be relevant later… Implementation:Įach sector’s vertices were defined by an int2 (x and y), so there were no floating point values. In my spare time, over the course of a few months, I implemented the level editor as a tool designed to be used inside the Unity editor scene view. After some research, I was able to find a C# library that performed Shape Clipping, called ClipperLib.
![doom level editor player start doom level editor player start](https://fileinfo.com/img/ss/lg/wad_1520.png)
The algorithms to produce this type of result are generally known as “Shape Clipping”.
#DOOM LEVEL EDITOR PLAYER START SERIES#
Each map is composed of a series of two dimensional polygons, called Sectors, and each Sector represents a room with a floor height, a ceiling height, and an arbitrary amount of walls. Every Doom map could be played top-down, as there are no overlapping floors (bridges, underground tunnels, etc.). A few basics to get started…įor those who are unfamiliar, Doom is actually a 2D game basically extruded upwards to give the illusion of being 3D. I then got started by figuring out the best way to accomplish this. Instead, we decided to develop a Doom-style level editor in Unity, since we were already using it at work together and were familiar with the platform.
![doom level editor player start doom level editor player start](https://www.escapistmagazine.com/wp-content/uploads/2019/02/Doom_Esc_article2-1200x741.jpg)
Pat suggested we might be able to use the Doom engine to accomplish this, since it is open source, though its features proved to be limited. We thought it might be interesting to apply the same Dark Souls level design principles to a first person shooter - think, a giant labyrinthian Doom level where you are moving from bonfire to bonfire, with limited healing and ammo in between, leveling up your weapons and gear in order to progress. There have been about a million indie clones of Dark Souls (although, there weren’t as many when we started our project), but they have all stuck to the same basic formula of either 3rd person or 2D side scrolling melee-based combat. Having to manage limited resources in order to progress.ĭark theming and sometimes intense levels of difficulty. Winding, non-linear levels that loop back on themselves. Classic shooters like Doom and Dark Souls actually share a lot of common design themes: chapter 1: doom soulsīack in 2015, my coworker Pat and I were discussing game ideas, and we thought it might be fun to do a game in the style of Doom and with progression like Dark Souls.
![doom level editor player start doom level editor player start](https://eev.ee/media/2015-12/slade04-line-props.png)
This may seem like a random project, so let me provide a little bit of history and more context by starting at the beginning. For the past year, while stuck at home, my quarantine project has been developing a standalone Doom-style level editor in Unity, using the new ECS architecture.