Git Product home page Git Product logo

tftm-alien-invasion's Introduction

Tales From the Maelstrom: Alien Invasion

arc

Alien Invasion is a top-down space invader-like arcade shmup written on python 3 and arcade library based around the lore of Maelstrom Takes Toll fictional universe and its canon body of stories under Tales from the Maelstrom umbrella.

License: GPL v3 Code style: Black Ruff

Introduction


Rescently I was approached by ETE representative with a quite a job of restoring some scrambled data off the ETE-labeled and sealed hard drives. As he said, the containers, which are most of the time are shielded from a such event affecting the disks, were in fact affected by manifested nearby breach of a much higher than extected magnitude. As a result, most of the storage facilites inside the building, including the building itself were altered beyond recognition, you probably heard about it - suprisingly, no casualties only a massive property damage despite a gruesome look of it. Notably, no watchtowers forecasted such breach taking place, which is alarming to say at least. All in all since the damage was too great for a conventional restorative techniques that's were I come in: ETE says that such outsourcing is beneficial in a long run both for us due to sheer difficulty of the case, their public image, and the ETE's archival puposes, but I suppose there's more to it - Everexpanding Toybox has no less than a massive division of high-class restorative scientists working on same issues.

Anyway, they are fine with me taking time with this project as long as at least something representing the original will turn out. The source in this repository is everything I managed to recover so far and reconstruct in a cohesive more-or-less working state with a hefty amount of my own's work patched in where recovery is too risky for a time being.

I'll update the source as soon as I can recover it and throw in together some working version.

- Messer Erzhmann


External dependencies

Project is managed with poetry.

On Linux, consider installing make. For a first run execute following commands:

make install
make run

Further instructions are described in GNUmakefile.

Mechanics

Ingame mechanics are described in detail at mechanics.md.

Default controls are configured in configs/config.json at current_keymap.

Screenshots

Build from source

Linux

Install dependencies:

  • patchelf

After that run:

make build

Resulting build will be placed to ./run.dist/run.bin.

Credits

Music

Audio conversion is done through ffmpeg.

Music present is licensed under CC BY-NC 3.0:

Images

Following images present are licenced under Creative Commons | Attribution-NonCommercial 4.0 International | CC BY-NC 4.0.

GAIA Observatory Images

Following images are licensed under ESA/Rosetta/NAVCAM – CC BY-SA IGO 3.0:

Licensing text

tftm-alien-invasion's People

Contributors

ironkayman avatar

Watchers

 avatar

tftm-alien-invasion's Issues

Unify `Starship` and `Alien` basic logic

Since both Starship and Alien have:

  • capacity to be damaged (health)
  • can fire bullets
  • movement
  • states
  • ...
    create an ABC-Class which is built upon States logic (see data/aliens/.toml) and Loadout (see config/.json::starship). Consider that Info field is included into states, since states are a behavior-oriented part of an enity, which also defines the current state's loadout, (this means that default/initial state has some preset loadout, usually hidden but can be described inside a config, and is overriden by every next state if the defenition is present).

For Starship entities, which are generally conrolled by the player, tthe json-config defines only current loadout; the states are a fixed internal propery, while the Alien entity can freely define states, but currently has loadout set by same presets.

The logic and method of definition should be abstacted from entity itself excetp the fact that it is an Alien or Starship entity - methods of getting the aproppriate config-objects are outside of the entity constructor class.

outline

Bind enegry costs to ship's reactor

  • Introduce reactor item to loadout, consider its per-sec energy restoration
    • If ship's current energy capacity reches 0 or lower, disable firearms and movement until it restores

  • Primary weapon costs
    • per shot
  • Thrusters during-movement costs
    • Constant per-second energy consumption so it requires powerfull enough reactor, with same of higher energy per sec production.
    • Moving L/R causes 1.2 more energy consumption

  • Power outage scenario and item outage pipeline

During level FPS repeatedy falls below 50

Linux at 2560:1600 resolution: during runtime of a level framerate falls near 45 (mostly 53-54) FPS every 0.6-1.3 seconds.

This issue was not noticed on macOS at the same resolution, windows needs to be yet tested.

Replace arcade.Section with arcade.Scene

Sections are more input flow control oriented, while scenes are more about sprite(lists) interactions.

Stage 1

  • invasion view
    • merge player and alien sections into a single scene
      - they remain separate, added mixins
    • replace background
    • replace overlay section with scenes
  • main menu view
    • replace background section with same scene
    • section with UI buttons stays the same? - yes, section inherits info about keyboard events throught veiw.

Consider higher risk/reward mechanics of Outage mode

Currently theres no benefits of low-powered mode, the disatvantage is constant freefall fallback and shutdown of autofire. This could be n opportunity to include some AOE special/spam attack trigger on reactivation of movement and/or firing, evading mechanic?

Pre-commit setup

Requirements:

  • black
  • flake8 (or derivates) - general codestyle checks
  • docstring checker tooling (considering numpy doscstring style)

Documentation migration to Project Wiki

Since the current direction of using interconnected APIs of most in-game entities of #50, it may be more effective to migrate those '.md's to a project's wiki + current documents.

Background: Layered animated background

Currently its white window.

Theres 2 possible solutions:

Add texture and consider aerial perspective -> add layers of star dust (3) with different movement and animation speed. On z-axis hisher ones are more bright, velocity is higher and descending on layers. Patterns of dust specs can be different, mainly they should not overlap.

  1. Draw.
  2. Possibly more accurate for the vibe - using https://imagearchives.esac.esa.int/index.php?/category/1 archive photos with changed alpha-channel

Level design prototype

Reconsider and expand current level logic as of current one:

name = "1"

[[waves]]
# alien types present of a level
spawns = ['dummy_ufo', 'castle_wall_sontra']
# randomly generate enemies but their total health
# should not get bigger than that number
total_enemy_health = 400
# score/experince from killed aliens required to pass this wave
pass_score = 30
# interval in seconds before density_multplier increase
interval = 30
# how many enemies and their speed will increase at next interval
density_multiplier = 1.7

# enemy_size_restrictions

Hit particle velocity is bound to amount of aliens on-screen

This presumably is caused by the fact that every alien calls an update() mathod in their designated object on a sprite list of particles, which is shared across all active (not reaped by emiter) Alien instances so as a result we get multiple update calls per frame.

Sound test

Since most of the audio currently present is still in early stage - thematically, consder adding some sort of sound test mode shortcut from the menu.

Some states may be hidden on first run or by an xp cap

Consider hiding more difficult and aggresive states behind an XP cap, which only works only on te second+ playthrough of a level. Aliens which were defeated in their all hidden states achive eternal state. Some states my be hdden by another cnditions.

Evade movement mechanic

Double L-L / R-R movement momentarily launches ship in that direction. During it ship is made invicncible - DSs' roll iframe.

`Starship` repair skill

Pressing L + R + D prevents ship from movement, it will recieve 2x damage but starts process of repair.

Rework Starship equipment categories

Starship entity currently has these categories of equipment:

  • hull
  • weaponry
  • engine
  • thrusters

Look through and assess extensible categories and/or more parameters -> move to sql at #1

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.