Giter VIP home page Giter VIP logo

airplanes's Introduction

airplanes

License Go Report Card ActionsCI Play online

A 2D shoot 'em up game made with:

Assets by Kenney.

GitHub GameOff Disclaimer

Most of this game was created during October 2022. I wanted to take part in GitHub GameOff, but sadly didn't have enough time to create a new game.

I'm submitting this one and I hope this is still in the spirit of the competition since it was created pretty much within one month. You be the judge. :)

Status

Playable, with a long list of ideas and TODOs in the code. There are just two levels right now.

How to play

  • Player 1: WASD to move, Space to shoot
  • Player 2: to move, Enter to shoot

Shoot enemies and avoid bullets.

Collect powerups to evolve your airplane!

Playing

Play online: https://m110.github.io/airplanes/

Or local:

go run github.com/m110/airplanes@latest

Debug Mode

To enable debug mode, press the slash key (/).

Architecture

This game uses the ECS architecture provided by donburi. Parts of airplanes were ported to donburi as features.

The ECS structure is as follows:

  • component - contains all components. Components are Go structs with no behavior other than occasional helper methods.
  • system - contains all systems. Systems keep the logic of the game. Each system works on entities with a specific set of components.
  • archetype - contains helper functions for creating entities with specific sets of components.

Other packages:

  • assets - contains all assets. Assets are loaded using Go embedding, so they are compiled into the final binary (which makes it easier to distribute the game).
  • engine - helper functions for generic game logic.
  • scenes - contains all scenes.

Level Editor

You can edit the levels in the assets/levels directory using Tiled.

Levels are loaded using the level*.tmx pattern, so you can add new levels by adding new files with bigger numbers.

Supported objects are:

Object Description
enemy-airplane An enemy airplane.
enemy-tank An enemy tank shooting at the player.
enemy-turret-missiles An enemy turret shooting homing missiles.
group-spawn A group enemy spawn.

The rotation of objects is reflected in-game.

Parameters:

Parameter Description
speed Speed of the enemy, if different than default.
path Path of the enemy. If not provided, the enemy moves in the facing direction.
spawn Group spawn, if a group of enemies needs to spawn at once.

The path should point to either a polygon or a polyline object in the same layer. If a polyline is used, the enemy will follow the path and keep moving in the facing direction after the last point. Polygon paths work like loops.

Spawning

Enemies are spawned once the top camera boundary reaches their position. A group spawn spawns all connected enemies at once.

All objects despawn once they go out of screen.

airplanes's People

Contributors

m110 avatar yohamta avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

airplanes's Issues

Stuck when hit during the level end animation

I ended up in a stuck state when I got hit during the level end animation where you automatically advance beyond the top boundary. My plane respawned but I couldn't proceed to the next level.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.