No description
- GDScript 97.5%
- GDShader 2.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .vscode | ||
| godot | ||
| .gitignore | ||
| README.md | ||
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)
- Weapons
- 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)
- Shared
- 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
- Laser
- 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
- Double shot
- Weapons
- 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
- Laser -> Laser -> Rocket
RANDOM STUFF
- We should consider adding a bullet time thing while the player is live-editing their modules