/heirs-of-nyx

A procedurally-generated adventure game in 32KB

Primary LanguageCGNU General Public License v3.0GPL-3.0

Heirs of Nyx

Pirates once circled the world's waters, commanding the seas and seizing its bounty. But the tides of fortune shifted when they began hunting for Greek treasure. Hidden within the island of Crete, Pandora's infamous box lurked, but it appeared pure and tempting like a small case of jewels. The pirates greedily opened this box, and Pandora's evils poured across the land.

Travel through vast terrains, searching for ancient evils while defeating pirates, forming friendships, and plundering treasures. Restore peace, so trade routes prosper and provide livelihood for hardworking thieving pirates.

Game

File Structure

  1. src/ contains source code for building the game

  2. res/ stores visual resources in the game

  3. tools/ clones various development tools:

Bank           Range             Size   Used   Used%  Free   Free% 
----------     ----------------  -----  -----  -----  -----  -----
ROM            0x0000 -> 0x3FFF  16384  16002    97%    382     2% |░███████████████████████████|
ROM_0          0x4000 -> 0x7FFF  16384  12124    73%   4260    26% |████████████████████▒_______|
WRAM           0xC000 -> 0xCFFF   4096    918    22%   3178    77% |_▓█████░____________________|
  1. build/ has the most recent ROMs for different systems

Installation

  1. To play the game, move the release or build/gb/Heirs of Nyx.gb ROM into your emulator / flash cart.

  2. To build it from source, follow GBDK's guide.

  3. Run export GBDK_HOME=/path/to/gbdk-2020

Once the environment has been built, run:

make gb

There should now be a new Heirs of Nyx.gb file in the build/gb/ directory.

Alternatively, you can upload the ROM to an emulator site like @Juchi's GameBoy emulator and run it. To use Emulicious.jar, install the Java runtime (openjdk-*-jre) and run java -jar Emulicious.jar.

Features

Features:

  • Custom tileset
    • Color palette
    • Super Game Boy Background
  • 16×16 Metatiles (sprites and backgrounds)
  • Procedurally-generated map
    • 16-bit generation
  • Menu
  • Start screen
  • Items
    • Gold / Maps
    • Weapons
    • Equipment
  • Enemies
  • Music

Generation

This game uses xorshift noise to generate its landscapes. The algorithm is based on Hugo Elias' tutorial.

Here is an example of the map array generated. Using unsigned 16-bit integers, (x, y), as seeds means that there are 2^16 x 2^16 tiles of landscape. The map is so large, in fact, that walking from one end to the other takes over 3 hours.

I'm using a global function found in noise.c, so much like No Man's Sky, everyone can see the same world; however, the starting positions can be varied. Additionally, everything from enemies to items are spawned via the same algorithm. This is useful since optimizing noise.c further will lead to an entirely faster game.

Please enjoy the grand adventure this game offers in only 32KB!