Cover Image

Galactic Harvesters

Galactic Harvesters: The Canister Crusade

For those who'd rather not run the software from the source, I've uploaded separate binaries for Windows. Additionally, I've bundled the embedded-python-zip alongside the source, and provided shortcuts to launch the game with various options. Rest assured, there's no compiled code from my side. (I did not mark it final so you have to click on the title to see all files)

While instructions for running the software from source are documented in the README, I'll reiterate them here for your convenience:

Installation & Setup:

To install the necessary packages:

pip install -r requirements.txt

For Linux users:

sudo apt-get install libgl1-mesa-dev libopenal-dev
pip install modernal==0.9.0

To launch the game:

python run_game.py

Command Line Arguments:

--no-fullscreen: Launch the game in windowed mode.
--no-audio: Mute the game audio.

Game Controls Without a Mouse:

Move: W A S D

Turn: Q E

Shoot: CTRL

However, I strongly recommend playing with a mouse, as it offers a vastly different and immersive experience.

Additional Tip:

If you find yourself wanting to explore all the ships but don't want to grind through the game, feel free to modify the score.txt.

Deleting it will reset the game. Enjoy!


Story:

In the year 3077,
the Milky Way Galaxy is in the midst of an energy crisis.

The primary source of energy, a rare crystalline element called "Dark Matter" is nearing depletion.
Dark Matter is primarily stored in canisters that have been scattered throughout space over centuries
due to space wars, trading routes, and exploration mishaps.

Captain Neil Starbreaker is the fearless pilot of the spacecraft "Nebula Harvester".
Neil used to be a space pirate but has since reformed after witnessing
the dire effects of the energy crisis on his home planet, Noverra.

Join Captain Starbreaker on the "Nebula Harvester" and help save the galaxy.

github.com/szabolcsdombi/pyweek-36

Awards


The Super Rocket award for the best rocket fight game (individual)
Presented by PyNon

The "Neil Armstrong" award for space piloting awesomeness.
Presented by ntoll

Give this entry an award

Scores

Ratings (show detail)

Overall: 3.9
Fun: 3.7
Production: 4.6
Innovation: 3.4

Respondents: 16

Files

File Uploader Date
Galactic-Harvesters-Source.zipfinal
Final Release
cprogrammer1994 2023/09/23 14:27
Galactic-Harvesters-Windows-x64.zip
Windows x64 Build
cprogrammer1994 2023/09/23 14:26
cover-image.png
Cover Image
cprogrammer1994 2023/09/22 19:49
game-over.png
Game Over
cprogrammer1994 2023/09/22 19:49
laser-beams.png
Laser Beams
cprogrammer1994 2023/09/22 19:49
upgraded-ship.png
Upgraded Ship
cprogrammer1994 2023/09/22 19:45
base.png
Base
cprogrammer1994 2023/09/22 19:45
into.png
Intro
cprogrammer1994 2023/09/22 19:45

Diary Entries

Day 1 - Work in Progress

Day 1 - Preview

Add a comment

Day 2 - Work In Progress

Day 2 - Preview

So far, most of the game logic is working.

  • Canisters can be collected, they jump to the user when close enough
  • Enemy ships wander randomly and can collect canisters by luck
  • The user can select the unlocked Space Ships
  • Particle animations for ship smoke trails, levitation wind, and explosion (well I tried, I know it is really far from an explosion)

Still missing:

  • Laser beams to shoot down the other ships
  • Background stars and planets
  • The rocket assets are not yet used
  • Better than just lambertian shader (yes, shading right now is just a dot product)

I actually expected the list above to be complete by the end of Today.

I spent most of my time bike shedding the base and smoke animations. My project, my fun.

Add a comment

Day 3 - Work In Progress

Day 3 - Preview


FInished the background, added beams and the story is mostly complete.

Add a comment

Day 4 - Work In Progress


Audio is working, (sort of).
The game is already fullscreen and most of the work was put into the audio, no GIF this time.
The intro is complete (music, animation, timing).

Add a comment

Day 5 - First Release

Video demo: https://youtu.be/04alBvihDqk


Added an interactive tutorial scene, polished the rest.
I wanted to finish a day earlier in case something goes wrong.
Everything went as planned and I am happy with the outcome.


Add a comment

Day 6 - Bug Hunt

Yesterday, I rolled out a release and confidently labeled it as "final" (oh, the irony of that "final" tag).

Today, while testing the code across different platforms, I discovered a significant audio glitch that affected Linux users. It resulted in lags and, in some instances, outright crashes. I promptly turned to the pyglet documentation and adjusted my code, hoping that letting pyglet handle the main loop would solve the issue.

Alas, it didn’t. Tweaking the audio backend offered no relief. And pivoting to pygame.mixer? Not a feasible solution.

In the end, I had to resort to a less-than-elegant quick fix, inserting an ad-hoc patch specifically tailored for the affected platform.


Allocating an extra day before the deadline proved invaluable. The fix was implemented successfully 10 hours before the deadline.
While I uncovered numerous bugs in my dependencies, in reality, these are minor inconveniences. They include:

  • I could not record video of the pyglet fullscreen window on windows (it should be borderless fullscreen, no option for that).
  • I could not make an audio loop with pyglet.media
  • I had to do my audio handler, for some reason audio was playing out of range. To detect such I had to look for playing time > audio length.
  • I had to hack wav format on raw data to play it with pyglet.
  • PyGLM objects are not immutable.
  • PyGLM quaternions passed to GLSL has a messed up x, y, z, w components


After testing on multiple platforms, I had the impression that a linux environment is hostile to gamedev.
From my perspective all the issues I found are really easy to fix, maybe just no one addressed them before.

Having learned from this experience, I feel motivated to create an out-of-the-box solution for the window + audio.

Add a comment

Release

Hello there,

I'd greatly appreciate any feedback regarding potential bugs or suggestions. If you have any insights, please visit the linked GitHub repository to share your thoughts.

For those who'd rather not run the software from the source, I've uploaded separate binaries for Windows. Additionally, I've bundled the embedded-python-zip alongside the source, and provided shortcuts to launch the game with various options. Rest assured, there's no compiled code from my side.

While instructions for running the software from source are documented in the README, I'll reiterate them here for your convenience:

Installation & Setup:

To install the necessary packages:

pip install -r requirements.txt

For Linux users:

sudo apt-get install libopenal-dev
pip install modernal==0.9.0

To launch the game:

python run_game.py

Command Line Arguments:

--no-fullscreen: Launch the game in windowed mode.
--no-audio: Mute the game audio.

Game Controls Without a Mouse:

Move: W A S D
Turn: Q E
Shoot: CTRL

However, I strongly recommend playing with a mouse, as it offers a vastly different and immersive experience.

Additional Tip:

If you find yourself wanting to explore all the ships but don't want to grind through the game, feel free to modify the score.txt.
Deleting it will reset the game. Enjoy!

3 comments