Y
Archive · 09 / 15 Oct 2019 — Dec 2019

Doom E1M1 Clone

Role
Game Designer · Programmer
Engine · Genre
Unity · First-Person Shooter
Context
Student Project · 7-week sprint
Link
Itch Page ↗
Doom E1M1 Clone gameplay

Overview

A seven-week recreation of the first level of id Software's 1993 Doom. Our team built original assets mirroring the initial textures, sounds, and code while preserving the spirit and atmosphere of the original level — down to its hidden secrets.

My responsibilities covered the head-bob and player movement systems, plus the pixelization post-processing effect.

Contributions

  1. Head-bob system — sine-wave camera motion tied to player input, tuned per-camera.
  2. Player movement — keyboard-only feel faithful to the 1993 original.
  3. Pixelization shader — a camera post-process that mimics Doom's low-res period look.
Chapter 01

Head Bobbing

Head bobbing implementation

Head-bob implementation

Sine wave, tied to input

A "head-bob" feature enhances immersion by simulating natural up-and-down motion in the viewpoint during movement. The effect revolves around three core variables — bobbingSpeed (pace), bobbingHeight (intensity), and midpoint (base position). An isHeadBobbing flag triggers a rhythmic bobbing synchronized with player input, drawing a sine wave.

Our version runs two cameras — one for the viewpoint, one for the weapon — both driven by the same script with different settings, keeping the keyboard-only feel of the original.

HeadBob.cs

The update loop collects horizontal and vertical input, advances a timer when the player is moving, and draws a sine wave whose amplitude scales with total axis input. The vertical offset writes to localPosition.y around midpoint — zero allocation, no state beyond a single float.

Chapter 02

Pixelization Post-Process

Pixelization post-processing

Pixelization — camera shader

Cheap period look

The pixelization post-processing simulates the graphic style of the original. Doom's engine displayed 3D environments derived from 2D floor plans, producing low-resolution visuals with graphic aliasing baked in.

Using Unity and custom assets, we applied a camera shader to replicate that look — a cost-effective approach that mirrors the period feel without reconstructing the renderer.

Next · 10 / 15 VECT0R Level Design →