1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
* Things To Do
** DONE Game loop
Provide a game loop structure that responds to input events,
updates the game state, renders the scene. Use a fixed update
timestep and cap the maximum FPS.
** TODO Game scenes
Games can be broken up into many chunks, called scenes. Examples
would be a main menu, a world map, a battle screen, etc.
- [ ] Create a <scene> type that encapsulates input/render/update
callbacks
- [ ] Macro for declaratively defining a scene
** TODO Input
Provide hooks to respond to keyboard, mouse, and joystick events.
Wrap SDL keycode, mouse button, etc. constants in our own
enumeration.
- [X] Keyboard
- [X] Mouse
- [X] Window (active, resize, quit)
- [ ] Joystick
** DONE Sprites
Encapsulates an image and all of its transformations: position,
rotation, scale, color, etc.
- [X] Use FreeImage
- [X] Add support for texture regions
- [X] Add support for animations
- [X] Use a sprite batch when drawing if one is currently bound
** TODO Sprite batches
Efficiently render a large number of sprites. Only change OpenGL
context when necessary. For example, don't change texture when
rendering several sprites in a row that use the same one.
- [X] Add basic batching for non-scaled, non-rotated sprites
- [X] Add transformation logic for scaling and rotating
- [X] Add support for colors
- [ ] Add support for different blending modes
** DONE Tilesets
Break an image up into many small pieces. Useful for creating maps.
** DONE Animations
Create a data type to represent an animated sequence of textures
and/or texture regions.
** TODO Tile maps
- [ ] Create a generic tilemap module
- [ ] Create a loader for Tiled .tmx map files.
** TODO Scene graph
A tree structure that is traversed when rendering a game scene.
The graph is composed of groups and nodes. Transformations are
accumulated as the tree is walked.
** DONE Scripting
Provide a way for users to easily script 2D games using coroutines
and a scheduler.
** TODO Vectors and matrices
Vectors and matrices are needed constantly for games. Provide an
easy-to-use module that provides procedures for common
vector/matrix math operations
- [X] Vectors
- [ ] Matrices
** DONE Fonts
- [X] Write wrappers for needed FTGL functions
- [X] Write font rendering procedures
** TODO Sound
Provide helpful wrappers around SDL sound procedures?
** TODO A* pathfinding
A* is a commonly used pathfinding algorithm for games. Pathfinding
is such a common task that it would be nice to provide users with
a generic implementation.
** TODO Bounding box collision detection
Most games need simple bounding box collision detection. Provide an
efficient implementation that uses quad trees.
- [X] Rect module
- [ ] Quadtree module
** TODO Particle systems
Provide a highly configurible particle simulation system.
** TODO Asset Management
Provide a generic system for loading assets (images, sounds, fonts,
etc.) and storing them in a cache. Explore using weak keys so that
assets are removed from the cache when they are no longer
referenced.
** TODO Actions
Provide a library of coroutines that perform commonly used
time-based actions such as linear interpolation. It would be nice
to have a way to make these easily composable as well.
- [ ] Make actions composable
- [ ] Linear interpolation (lerp)
- [ ] Move to/move by
** TODO Keymaps
Provide an Emacs-like way of defining key combinations to that
multi-button input is easy for users.
- [ ] Basic sequences (press A then B)
- [ ] Simultaneous key presses (press A and B at the same time)
- [ ] Timeouts (combos fail if you don't enter them quick enough)
** TODO GUI widgets
Provide a set of common graphical widgets such as buttons, scroll
bars, and sliders.
** TODO 0.1 Release
An official 0.1 alpha release with basic, minimal functionality
will provide a good place for people other than me to try out
guile-2d and perhaps even start to hack on it.
- [ ] Finish sprite batches
- [X] Font rendering with FTGL
- [ ] Resolve issues with FIGL
Can't have a broken dependency.
- [ ] Texinfo documentation
- [X] Autotools build files
|