Free off-screen bullets back to the bullet pool Create a bullet data type that wraps the bullet system and bullet id into one data structure Create a BulletRef struct with member variables bullet and bullet_system Change all bullet methods to take BulletRef as an argument instead of a bullet system and bullet index Create some sane subdirectories for source and data files Open port for a REPL so the program can be modified as it is running Allow many types of bullet sprites Create a sprite sheet struct with Guile bindings Add a sprite sheet member variable to bullet system Use sub-bitmaps of the sprite sheet to set bullet bitmaps Add angular velocity to bullets Add a bounding box to the bullet system that specifies the bounds of the game area Bullets outside of this box are killed but right now it is hard-coded in remove_out_of_bounds_bullet Add a bounding box struct Add a counter to bullet system that counts active bullets Rotate bullet sprites in the direction they are moving Break Scheme code into modules Coroutine module Scheduler module Bullet pattern primitives module Yield functions module Create some macros Coroutine macro Add keyboard event callbacks Map allegro key codes to scheme symbols in a hash table Add player and enemies No need for C here, this can be done on the Scheme side Add collision detection Collision between player and enemy bullets Collision between player bullets and enemies Develop actual gameplay :P Refactor game loop into several smaller functions Control FPS rendering from Scheme It’s hard-coded in the game loop right now Create font smob Pick a C code formatting style and STICK TO IT FFS I keep switching brace styles for no good reason… Get rid of those annoying compiler warnings for scm_c_define_gsubr Need to talk to the folks on #guile about this Improve bullet pool code Use a more efficient method to find unused bullets in the pool. Search for free bullets starting from the last index a free bullet was found + 1. Refactor scheduler Use the srfi-9 records module Add GPL snippet to every source file Implement reference counting for bullets to prevent weird bugs Write unit tests Need a good way to do this with Guile Animated sprites Expand font bindings Bind more of Allegro’s font functions with Guile. Add bindings for Allegro audio addon Need some minimal bindings for background music and short sound effects Sound effects Audio streams Custom window resolutions and fullscreen mode Specify window size and fullscreen mode when initializing Allow user to change screen size and fullscreen mode after initializing Scenes Separate game screens into units 2D scene graph Add Director module A concept lifted from cocos2d. the director manages the scenes in the game. Prefix all C functions with gnumaku_ I was lazy and didn’t do this, but now Gnumaku is a shared lib so it’s necessary. Level format A proc + a Level record Add a register procedure to bullet-types module Allow user to register bullet types instead of having hardcoded ones Switch to frame-based timing Every time the update hook is called, a timer should be incremented by one and the game should use this to time events. Time agenda events by frames Time game object motion by frames Use GOOPS OOP will be nice for generic interfaces Docstrings for EVERYTHING I have been doing a terrible job at documenting this code. Add event emitter class Must support multiple listeners per event type. UI Widgets some ideas. some are necessary, others are likely not Text label Text input field Menu Text menu item Text input menu item Option cycle menu item Toggle menu item Container Layout strategies Manual Vertical Horizontal Table (m x n) Bullet System optimization Only create a bullet ref when the user wants to script the bullets. Fix bullet pool code Gamma correction http://www.geeks3d.com/20101001/tutorial-gamma-correction-a-story-of-linearity/ Improve coroutines Write a define-coroutine macro Generic particle system Define Scheme modules in the C code.