Need scheme procedures to get/set the following:
- [X] position
- [X] direction
- [X] speed
- [X] accelleration
- [X] angular velocity
- [X] life
- [-] type
- [X] tile
- [X] hitbox
- [ ] blend mode (alpha or additive)
- [X] directional (rotates with the bullet)
- [ ] color
- [ ] scale
Also need:
- [X] emit-bullet procedure that accepts all properties.
- [X] Remove bullets that collide with something.
- [X] Use a callback to handle damaging enemies and killing the player.
- [X] Add Animation type
- [X] Add Animation member variable to Sprite
The intro screen with game logo that tells you to ‘Press Any Key’ or something.
- [X] User sees an intro screen with background image, game title, and a prompt to press a key
- [X] Add config option for background image
- [X] Add config option for title image
To be tasked later…
- [ ] Allow the user to specify what assets (art, music, etc.) to load
Could reduce GC runs.
SCM_VARIABLE in C, set! them in init.scm.
- [X] debug-mode
- [X] lives-per-credit
- [X] initial-credits
A good domain specific language will allow for very elegant game scripts to be written.
- [ ] define-stage
- [ ] name
- [ ] description
- [ ] map
- [ ] script
- [ ] define-player
- [ ] name
- [ ] description
- [ ] hitbox
- [ ] speed
- [ ] tileset
- [ ] animations
- [ ] define-enemy
- [ ] name
- [ ] description
- [ ] hitbox
- [ ] health
- [ ] points
- [ ] tileset
- [ ] animations
- [ ] script
- [ ] define-item
- [ ] name
- [ ] tileset
- [ ] animation
- [ ] script
Useful for cool effects like explosions and whatnot.
I don’t think there is good reason to have Player, Enemy, etc. all in a union. If anything, each of these structs should have an Entity member instead for common data.
- [X] Remove Entity union
- [X] Create new Entity type with the following member variables
- name
- position
- tileset
- animation
- sprite
- agenda
- hitbox
- [X] Refactor Player and Enemy so that they have an Entity member
- [X] BulletSystem is not an Entity, silly
- [X] Remove duplicated logic with types that have an Entity member.
Items are basically particles that execute a script when the player touches them.
- [ ] Add Item type
- name
- tileset
- animation
- script
- [ ] Add ItemSystem
- Use GArray to store items efficiently
All of these systems behave differently, but there’s some common logic and data that can be extracted, hopefully.
- [ ] DRY up common logic and data.
Stages encapsulate a game level.
- [X] Create Stage type.
- title
- description
- map
- script
We want to specify the recipe for making a particular type of enemy, and then stamp out clones of it. There needs to be some system of registering a prototype and asking for a clone to be made.
- [X] GshmupEnemyType
- [ ] GshmupPlayerType
- [X] GshmupBulletType
- [ ] Map directories to asset types
- [-] Cache asset instances
- [X] Images
- [X] Sprite Sheets
- [ ] Sound effects
- [ ] Music