Skip to content

FluxHarmonic/ld50-silent-syphon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Silent Syphon - A Ludum Dare 50 Compo Entry

The theme for this Ludum Dare is Delay the Inevitable!

The Concept

You are piloting a ship flying through enemy territory and your capacitors can no longer store energy. You must survive as long as you can to have any hope of escape.

To keep your ship running for longer, siphon energy from enemy ships, but be aware that movement and firing your weapon will cause energy to deplete faster!

Screenshots

https://user-images.githubusercontent.com/79405/161440969-f4d752ca-a16d-402b-b7f0-90c2cd27e7f2.png https://user-images.githubusercontent.com/79405/161441263-f9d8307e-9d44-40de-8e5b-4f8d018a1258.png

Download The Game

You can try out a development builds of the game here:

  • Linux (tested on Ubuntu 20.04)
  • Windows support coming soon!

You will need to have the following dependencies installed:

  • OpenGL
  • GLFW 3
  • libfontconfig
  • zlib

If you’re on Ubuntu, you can run the following command to install the necessary dependencies:

sudo apt-get --no-install-recommends -y install libglfw3 zlib1g libfontconfig1 mesa-utils libgl1-mesa-glx

Troubleshooting

If you have issues running the game, first try updating your system in case libraries are out of date. If you still run into trouble, please file an issue!

How To Play

The goal of the game is to last as long as you can flying between enemy ships before your ship’s energy runs out!

You can gain more energy by siphoning from other ships (hold J near another ship) or by collecting energy tank drops from felled ships.

You can also move around and fight back against ships that are in your way, but be aware that these actions cost energy and might make you deplete faster!

If you are killed by the enemies or run out of energy, you will be asked if you want to play again, so press Y to boot up a new ship to give it another try.

Here are the controls:

Movement

  • W: Fly forward
  • S: Fly backward
  • A: Fly left
  • D: Fly right

Actions

  • J: Siphon enemy energy
  • K: Fire weapon

Future Asked Questions

So why does the game look so basic?

Ran out of time to make sprites for everything! See also the next question

What’s interesting about this project?

I wrote this game using my own programming language Mesche, derived from Scheme and written in C. I also wrote the (basic) rendering and game engine library called Substratic Engine.

This game is the culmination of about 3 months of work on the Flux Harmonic YouTube channel where a lot of it was written live on stream!

I also wrote 99% of this game on streams over the two days of the Compo, here is the YouTube playlist of the recordings:

https://youtube.com/playlist?list=PLwranTcItp8tzf79DA_7ErGhxul3W1rZH

Check out future streams here:

Development Strategy

  • Get basic game mechanics working as fast as possible, it needs to be playable to be an entry!
  • After basic game mechanics (movement, shooting, siphoning, enemy spawning, etc) are working, we’ll start making sprites for everything, but at low level of quality
  • For art, possibly stick with a 16 color palette of (maybe) reds and blues with a green accent
  • After basic game loop is working, start adding new features to make it fun

Tasks

Post-Submission Bugs

Here are some tasks I’ll tackle post-submission while voting is ongoing.

Fix crash in lose state

  • State “DONE” from “TODO” [2022-04-06 Wed 09:30]

Fix GC issue causing a crash in longer games

  • State “DONE” from “TODO” [2022-04-06 Wed 09:31]

Port to Windows

Completed During Compo

Get basic player ship rendering and moving using keyboard keys

  • State “DONE” from “TODO” [2022-04-02 Sat 08:17]

Implement basic shooting (bullet particles)

  • State “DONE” from “TODO” [2022-04-02 Sat 08:50]

Add basic enemy spawning

  • State “DONE” from “TODO” [2022-04-02 Sat 09:35]

Add shield and energy meters (basic HUD)

Add bullet collision detection

  • State “DONE” from “TODO” [2022-04-02 Sat 10:42]

Add score display

  • State “DONE” from “TODO” [2022-04-02 Sat 13:28]

Update score based on kills

  • State “DONE” from “TODO” [2022-04-02 Sat 13:28]

Add basic enemy AI (shoot at player, have predefined movement pattern)

  • State “DONE” from “TODO” [2022-04-02 Sat 14:18]

Create another more interesting enemy with more shield quanity

  • State “DONE” from “TODO” [2022-04-02 Sat 14:18]

Add player shield damage

  • State “DONE” from “TODO” [2022-04-02 Sat 17:24]

Speed up the enemy spawning

  • State “DONE” from “TODO” [2022-04-02 Sat 17:24]

Set up CI for the game

  • State “DONE” from “TODO” [2022-04-03 Sun 11:43]

Produce working game builds for Ubuntu 20.04

  • State “DONE” from “TODO” [2022-04-03 Sun 11:43]

Improve ship control

  • State “DONE” from “TODO” [2022-04-03 Sun 16:03]

Add energy depletion when moving and shooting

  • State “DONE” from “TODO” [2022-04-03 Sun 16:10]

Add a time counter for how long you stayed alive

  • State “DONE” from “TODO” [2022-04-03 Sun 16:51]

Add energy siphoning (with scoring)

  • State “DONE” from “TODO” [2022-04-03 Sun 16:53]

Add a main menu with keyboard help

  • State “DONE” from “TODO” [2022-04-03 Sun 17:53]

Add indicators for shield and energy meters

  • State “DONE” from “TODO” [2022-04-03 Sun 18:04]

Post-Compo Features

Add pickup objects (shield, energy, maybe weapon?)

Add manual shielding which also depletes

Tweak configurations of existing enemies

Maybe add a third enemy?

Restrict gameplay to the visible area (sans HUD)

Make basic game sprites

The graphics look kinda huge on non-hidpi displays

Add starfield renderer

High score table with persistence

Mesche Issues

I need to investigate these issues:

Investigate heap overflow or bad tail call patching in update-player’s old incarnation

Investigate heap overflow with begin in player.msc (maybe related to above)

Heap overflow in a nested if -> begin in update-player, is the chunk too big?

Circular module reference issues with syphon player and syphon weapon

Implement better pattern for updating record field values (pass lambda to mutate)

Make it possible to set default value for keyword arguments

Record instances are not initialized correctly when keyword args are omitted