Project Overview

Huh


Features

(direct link)

Priorities

  • Top-down 2D graphics, with line-of-sight mechanics, as well as lights and shadows. Flashlights, flares, or NVGs needed in the dark.
  • Procedurally generated world. Static diamond-shaped layout of sections of the world, semi-random rules for the types of sections, as well as the rooms they're composed from. Loading screens occur between sections. No backtracking, can't go back to a previously visited section. Start at the top of the diamond, goal to reach the bottom section.
  • Multiplayer cooperative play. No PVP or the like planned.
  • Physics. Knockback during a brawl, tripping on furniture. Throwing objects, small like grenades or rocks, bigger like chairs or cardboard boxes. Also 0G movement in times where there's no gravity.
  • Varied types of enemies, depending on the section, with different attitudes towards the player. Swarms, runners, turrets, gunners, booby traps.
  • Sound system aware of walls and distance. For simplicity, probably no echoes or sounds bouncing off of surfaces.

Would be nice

  • Alternative sensory systems. Radar, sonar, infrared, spectrometer gun (!), biomass detector, wifi scanner.
  • Alternative output systems. Can't connect your eyes to the radar dish. Phosphor screens with long afterimage, slowly-updating electron gun screens, cheap greyscale ink, single-color pixel LCD, analog radar/sonar display.
  • Parts-based health and armor system. Unprotected limbs are harder. Ammunitions with different characteristics, like big knockback, or guaranteed bleeding. Because 2D, no headshots?
  • Rich equipment and crafting system. Can't carry heavy things, or too many things. Can combine things to make better things.

Story

(direct link)

You wake up in your sleeping quarters, awoken by some deafeningly loud alert. Is it time for the flip-and-burn and change in trajectory? No, you're just coasting a non-impulsive at 1G somewhere near Hydrophobia, the gas giant, and the screen shows nothing. Other than a flashing "Code Zeta"... evacuation in progress. That's a new one.


You put on gray assistant's jumpsuit, get your anti-burn stimulant cocktail packet, and of course your headset and minimum clearance ID. This was supposed to be a calm and easy seven-cycle, as the crew rotation is soon, and there's really nothing to do anyway, except chilling and partying. In fact, you're still hungover, and the alert is not helping. Hope it's just a test or an error.


There's nobody in the hallways, though...


...


Milestones / Checklist

(direct link)

Basics / Priorities

  • general project structure
    • server and client binaries
    • client state machine
    • loading the config from arguments
    • reactive threading
  • graphics
    • text
    • debug/dev gui (imgui)
    • post-processing shader effects
    • on the fly shader reloading
    • rendering the world to a square view
    • world coords to screen coords transform
  • networking
    • local system
    • LAN
    • NAT punching
  • physics
    • collision with walls
    • soft-collision with furniture
    • throwables
  • graphics
    • line of sight
    • static lights
    • dynamic lights
    • light/shadow/visibility check
  • sound
    • ?
  • scripting (?)
  • first actual gameplay - ARENA
    • statically loaded levels from Tiled
    • guns
    • 1v1 over the network
  • ...

Down the line

  • rough feature parity to Teleglitch
    sight, lights, physics
  • world generation
    • ...
    • navmesh calculation
  • NPC
    • dumb swarmer
    • melee
    • gunner
    • ...
  • interaction with the world
    • doors
    • light and switches
    • throwable boxes
    • ...
  • ...

Far future

  • world generation
    • sections
    • section layout
    • rooms
    • hallways
  • 0G movement
    • fire extinguishers
  • ...
  • ...
  • ...
  • ...

Inspirations

(direct link)

Teleglitch

Nuclear Throne

Space Station 13

The Expanse

And many other media


Tools and libraries used

(direct link)

Languages

  • rust - main/native
  • rhai - scripting language

Environment

  • github - version control
  • jetbrains clion - main IDE
  • visual studio code - secondary IDE
  • visual studio - cpu/memory profiling
  • optick - cpu profiling (?)
  • renderdoc - gpu profiling
  • rust-analyzer - static analysis / language server
  • tiled - level/scene editor

Rust libraries

(that I directly depend on)

Graphics, windowing, gui:

  • winit - windowing, input
  • wgpu - graphics
  • wgpu_glyph - text
  • iced - gui (?)
  • imgui - dev/debug gui
  • imgui-wgpu - imgui integration
  • imgui-winit-support - imgui integration
  • image - image processing
  • shaderc - shader compilation
  • palette - color manipulation

Architecture:

  • rapier - physics
  • laminar/quinn - networking (?)
  • crossbeam - channels
  • cgmath - math

Data:

  • hecs - entity component system
  • serde - serialization interface
  • ron - serialization format (human-readable)
  • bincode - serialization format (binary)
  • bytemuck - data/bytes manipulation

Instrumentation, configuration:

  • log - logging facade
  • fern - logger framework
  • profiling - profiling abstraction
  • puffin - integrated profiler
  • puffin-imgui - profiler imgui integration
  • structopt - argument parsing
  • toml - configuration format/parsing

Other:

  • rand - randomness
  • chrono - time

That's about it.