Inspiration

While brainstorming game ideas, I remembered playing about with colored text in the console and methods of efficiently rendering large quantitities of colored pixels on the screen. Then "mining" popped into my head and I realised it would be very fun to attempt a mining/caving sandbox game that uses this concept, since I can put maximum effort into interesting game mechanics/world generation rather than graphics.

Has vibes of lots of games I've played, but mainly Terraria and Noita.

What it does

Generates an infinite underground cave system, with ores increasing in abundance and exponential value. You must gather ore in order to upgrade your pickaxe, and more importantly to buy explosives. You need explosives because they are awesome, and you need better pickaxes because if you dig too slowly, the cave will collapse on your head and your run will be over :( See if you can get to depth 1000.

How I built it

I wrote a simple screen class that I can draw pixel data to (characters, their color and the color behind the character). This class then detects what has changed between this frame and the previous to draw only the small amount necessary to the screen to display the data.

The rest (with some helper classes) of the game logic is in a World class which procedurally generates an underground cave system, ores, fluids and rubble/hazards to avoid.

Challenges I ran into

  • Lots of physics edge cases considering I wanted to use floating point math for gravity on the player rather than discrete tile coordinates
  • Fluid physics took about 3 iterations to get right
  • Code became too much spaghetti at the 12 hour mark for me to really get into some extension tasks like dungeons/quests/boss fights.

Accomplishments that I'm proud of

  • Happy with how the world generation turned out considering the hacky formulas for ore generation
  • Extremely pleased with the fluid modelling as I have never attempted something like it before
  • Overall happy with the visual feel of the game, especially after adding particle effects and other neat details.
  • The explosions are AWESOME

What I learned

  • How much progress I can make on this kind of game in just 7 hours, which is when I got most of the work done including the fluid dynamics, physics and most of the world generation.
  • May be worth (if I can actually make this multiplatform) actually developing a game engine using this console style. If I do it in C++ it will probably be pretty solid, and I could use it for tons of games I don't have the manpower to do detailed graphics for.

What's next for ABYSS

  • Is available on Github under MIT license for you to tinker with right now
  • I may flesh out a proper API to make it easier to extend the world with randomly generated structures, this would allow people to blow up arrangements of tiles of their choice.
  • Will probably be extended/turned into a sandbox with a lot more kinds of fluids, to make a game like Noita

Built With

  • .net
  • simplex-noise
  • windows-console
Share this project:

Updates