No description
  • GDScript 97.5%
  • GDShader 2.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-02 20:50:54 -04:00
.vscode good luck shalin 2026-08-02 16:26:51 -04:00
godot add remaining modules to test with 2026-08-02 20:50:54 -04:00
.gitignore Add template .gitignore file 2026-08-02 06:38:49 -04:00
README.md add initial module config UI 2026-08-02 19:52:49 -04:00

Noisteroids

  • The classic game of Asteroids with the weapon system of Noita

Gameplay

Basic loop

  • Each level has a certain number of enemies (asteroids, eventually enemy ships) that must be destroyed
  • Once all enemies are cleared, the player is prompted to upgrade their ship
  • After upgrading, the next level begins
  • Incremental gameplay, more enemies, different (more resiliant) enemies, complex enemies, "boss" rounds every X levels

Movement

  • It's asteroids
  • Should the movement be upgradable? Maybe in future

Firing system

  • The ship has one "firing system" (more in future?)
  • The firing system is a list (the "deck") of "modules", which have two types:
    • Weapons
      • These are the actual projectiles that will end up damaging enemies
    • Modifiers
      • These modify the first weapon found after itself with some effect (e.g. a deck like: module -> module -> weapon, would have both modules modify the weapon)
  • Each of these modules has base stats
    • Shared
      • Delay (how much time is applied before the next weapon fires)
    • Weapon specific
      • Speed
      • Damage
      • Lifetime (how long it lasts before expiring)
      • Spread (how accurate is it)
      • Radius (optional: if the weapon is AOE)
  • When the user press "shoot", starting at the beginning of the deck:
    • Calculate the total delay by parsing the whole deck, and apply it before the next shot is taken
    • If the current module is a weapon
      • Apply any modifiers that have been encountered, in order
      • Fire the weapon, sending the remainder of the deck with it
      • When that weapon expires (Lifetime) or makes contact, continue executing the deck from it's location
    • If the current module is a modifier
      • Track it's effect, go next

Examples

  • Let's say the following weapons and modifiers exist with some non-specific stats:
    • Weapons
      • Laser
        • Delay: short
        • Speed: fast
        • Damage: medium
        • Lifetime: short
        • Spread: small
        • Radius: none
      • Rocket
        • Delay: long
        • Speed: slow
        • Damage: high
        • Lifetime: long
        • Spread: medium
        • Radius: medium
      • Lightning
        • Delay: very short
        • Speed: very fast
        • Damage: high
        • Lifetime: very short
        • Spread: high
        • Radius: none
    • Modifiers
      • Double shot
        • Delay: short
        • Effect: the weapon fires 2 parallel projectiles
      • Double scatter
        • Delay: short
        • Effect: the weapon fires 2 projectiles in a spread pattern
      • Pentagon formation
        • Delay: medium
        • Effect: the weapon fires 5 projectiles is a pentagon pattern
  • Lets go through what happens with some example dekcs when the player presses shoot
    • Laser -> Laser -> Rocket
      • A laser comes out of the players ship, with a small random deviation from the direction the ship is pointed
      • When the laser hits an enemy or expires, another laser is fired with a small random deviation from the direction of the first laser
      • When that laser hits an enemy or expires, a rocket is fired with a medium random deviation from the direction of the second laser
      • When that rocket hits an enemy or expires, because it has a radius, and explosion with the given radius
    • Double scatter -> Laser -> Pentagon formation -> Rocket
      • 2 lasers come out of the players ship in a spread pattern
      • When either of those lasers hit an enemy or expire, 5 rockets are shot in a pentagon formation

RANDOM STUFF

  • We should consider adding a bullet time thing while the player is live-editing their modules