A downloadable game for Windows and Linux

Default Controls:

    W/S/A/D:    Move around
    Mouse:        Look around
    LMB:        Fire weapon
    C:            Crouch/Uncrouch, Ground Slide (while running)
    Shift:        Run (while moving)
    Spacebar:    Jump
    Capslock:    Toggle Always Run
    F12:        Take screenshot
    F:            Use/frob
    ~:            Open developer console (hardcoded)
    F5            Quick Save
    F9            Quick Load
    Mousewheel    Cycle available weapons
    Number Keys    Select available weapons

Now featuring a projectile enemy, new rocket launcher (both modeled by Theonian), and a VERY incomplete level 3.

Remember the "frob" key (default F) - you use it to toggle switches and open
doors. You'll know if you can "frob" something if you see the orange corners
of a reticle on your screen. This isn't Quake, you can't open doors just by
touching them!

You have multiple saving options, with a dedicated "quick" save slot, along
with 3 hard saves, selectable in the main/pause menus. By default, F5 will
quick save and F9 will quick load.

Screenshots and the config file are stored in your user folder along with saves.
On Windows, the user folder <username>/AppData/Roaming/Coal. On Linux, this will be set to XDG_DATA_HOME if it exists, then fall back to "<HOME>/.local/shar /Coal" if it doesn't. People with non-ASCII OS languages/usernames, let me know if these saves appear in the right place!

The lowest recommended resolution is 1024x768. Lower ones technically work, but menu elements will be clipped.

Certain menus like the game options and bindings menus have a scroll bar
to view more. You can use your mousewheel or click on the bar to move up
and down.

Warning: Map 3 has some (optional) swimming, but the physics still aren't perfect.
You may clip out of the world by accident.

Published May 04, 2018
StatusIn development
PlatformsWindows, Linux
Tags3D, FPS

Install instructions

Windows: Extract coal_dd20_win.zip and run coal.exe.

Linux: coal_dd20_lin.tar.gz and run coal.sh. For fun, I also  included a 64-bit binary with my early Vulkan renderer. You can run it from the parent directory with ./x86_64/coal-vulkan.x86_64. May break in horrible ways!


coal_dd20_win.zip 38 MB
coal_dd20_lin.tar.gz 39 MB


Log in with itch.io to leave a comment.

do enemies have perfect accuracy?

Right now, projectile enemies will always their angles to face you, even while making the "aiming" animation. I plan to introduce ways to make them less accurate, such as adding spread to their shots, as well as locking their ability to turn once committing to a shot.

(1 edit)

Nice to see this still coming together, the new skybox makes up for all the tear-inducing acne on the third level. Somehow I can only ever do the jumping puzzle on my first try, every following attempt always screws me up.

How are you doing your mouselook though? It moves in these nasty sharp increments that get worse the higher you set the sensitivity. I usually have each pixel of OS movement translate to 0.1f degrees each to keep the increments really small, with sensitivity being a multiplier on that (1x at default).

EDIT: Having now played the Linux version, I can say it's a lot smoother on that, the increments are only perceptible at super-high sensitivity.

Thanks for playing. People have complained about mouse sensitivity issues in previous Demo Days, so I'll look into addressing this for the next one. For mouse movement, I get relative mouse movement (as integers) from SDL_MOUSEMOTION events. When updating the camera, I increment the pitch/yaw angles with the relative integers multiplied by sensitivity AND delta time, casted to a float. The issue may be appearing due to how I handle timestep.

Yeah, removing the dependency on the timestep would be a good idea, SDL would be giving you the total distance moved across the entire last timestep so there's no need to scale it by deltaTime as well, just removing that would probably fix it all.

Integers are what each mouse itself gives you so that's normal, I'd just multiply by sensitivity and 0.1 instead of sensitivity and deltatime, I usually get good results from that. You may end up needing to tweak the magic number  a bit to get it to feel right but it's usually pretty solid.

So I really love the feel and look of the game, very '90s. But one notable aspect of that era was the the slow projectile speed of weapons making damage very manageable if you were paying attention. I got wrecked over and over on the first level of this since it seems like the enemy projectiles maybe have a thee or four frame travel time with pinpoint tracking, effectively making them hitscan. It doesn't pair well with the current health system. Awesome name though! ^_^