4 This is a list of tasks and issues that might be worth to implement or
5 fix. This list is however not an authorative list of things that must
6 be done, its a collection of random things that pop up during
7 development, therefore not everything in here might be well thought
8 out or worth to implement. Use your brain before implementing anything
9 on this list and always think about how useful a new feature would be
10 in the context of the whole game or if a potential performance
11 enhanchment, actually enhanchmes anything at all.
16 * make code clean: "-O2", "-g3",
27 "-Winit-self", # only works with >= -O1
28 "-Wno-unused-parameter",
30 * remove overuse of multi-inheritance
32 * remove overuse of friend'ship
34 * maybe mark interfaces as interfaces (ISerializable or SerializableInterface)
36 * split files with multiple classes into multiple files with one class each
38 * Decide what to do with magic constants of objects (static vs anonymous namespace vs lisp property)
40 * check the code with Valgrind and profilers
42 * use Vector in Physics for 'a' and 'v'
44 * replace random generator with mersenne twister and/or move to external/ (maybe use boost's random stuff)
46 * md5.hpp and random_generator.hpp could go to external/
48 * write/finish scripts to automatically:
50 - make all includes relative to top level dir
52 - sort includes (.hpp file, then system includes, then other project files)
54 - include guards proper and of the form HEADER_SUPERTUX_${PATH_TO_FILE}_HPP
59 * implement a system that allows to attach comments to specific regions in a level
61 * implement a tool to "screenshot" a complete level
63 * GameObject::RemoveListenerListEntry: Ughs, somebody trying to
64 implement a list class within in the GameObject?!
66 * add --datadir DIR (data/) and --userdir DIR (~/.supertux/), allow multiple --datadir's
68 * make gravity constant
70 * rename Vector -> Vector2f
72 * get rid of global SDL_Screen* screen variable
74 * get rid of SCREEN_WIDTH/SCREEN_HEIGHT overuse, give them a proper name at least
76 * resolution menu entry moves the wrong way around
78 * having dictionary_manager in Lisp is extremely ugly
80 * enforce proper naming of files to match their class (SomeClass -> some_class.?pp or so)
82 * file naming is inconsistent: some times we use '_' to separate
83 words, sometimes we don't
85 * collect all manager classes into globals.hpp
87 * more moving directories around?
100 for generic squirrel code
105 for scripting wrapper code
109 * implement PNG screenshot
111 * having hitbox in Sprite is fugly
113 * write decal object that doesn't have hitbox
115 * implement surface and/or sprite scaling (MipMaps?)
117 * add code that compares the last Log line with the current, if they
118 are the same reject them and just output something like:
120 * last line has been repeated X times
122 * implement: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
124 * workaround for Ubuntu pulseaudio/OpenAL brokeness:
129 * peaking up/down doesn't work properly
131 * peaking left/right should make Tux look into that direction (up/down to, needs new sprites)
133 * cleanup scripting interface
135 * replace cloud tiles with decals
137 * option menu has text overlap in "aspect ratio"
139 * jumping up from an enemy doesn't make a sound?
141 * add support for automatic scrolling backgrounds
143 * add direct reading of Vector2f to Reader/lisp
145 * replace bell with 'reset block', that starts to glow once bumped
146 into (or something different)
148 * refactor Camera code, break ugly long functions into pieces and such
150 * allow fully custom magnification levels from command line (maybe GUI
151 to if there is a proper/easy way to let the user enter numbers)
152 (--magnification or -g WIDTHxHEIGHT:ASPECTX:ASPECTY@MAGNIFICATION)
154 * use AnchorPoint in Background instead of Alignment
156 * allow gradients to parallax scroll like Background (make it optional)
158 * add multicolored gradients (see Windstille source code, which can deal with Gimp gradients)
160 * fix alpha blending in the SDL renderer, currently all sprites (Tux,
161 etc.) appear transparent
163 * position of statistics text on the worldmap doesn't scale properly with resolution it seems
165 * gluBuild2DMipmaps leads to blurriness, maybe lack of magic offset
166 (0.375f, 0.375f, 0.0f) or something else
168 * font system has blending artifacts at non-1x magnifications, need to
169 have an transparent pixel between letters
171 * add a (border #t) flag to fonts, that allows to use fonts which have
172 a 1px transparent border around glyphs, which is needed to get rid
173 of blending artifacts in OpenGL
175 * mouse cursor has blend artifact on high magnification
177 * shadow font glyphs bleed into other glyphs
179 * in DrawingRequest "void* request_data;" is only free'ed, but the
180 destructor never gets called
182 * sprite/sprite.cpp: frame should never get out of range:
184 if((int)frame >= get_frames() || (int)frame < 0)
185 log_warning << "frame out of range: " << (int)frame << "/" << get_frames() << " at " << get_name() << "/" << get_action() << std::endl;
187 * Surface::hflip() is used exactly once, should probally be part of the constructor
189 Scenegraph and Physics Engine Restructuring
190 ===========================================
192 * random idea to restructure engine stuff (might lead to nicer code
193 and easier scriptability (and a need to rewrite lots of stuff...):
195 class SomeBadGuy : public PhysicsCallbackListener // or use boost::function
202 SomeBadGuy(Engine& engine)
204 box = engine.physics().create_box(Rectf(0,0,32,32));
205 box->register_listener(this);
206 sprite = engine.graphics().create_and_add_sprite("Foobar");
209 void update(float delta)
211 // not much to do, as most stuff is done internally in the engine
214 sprite->replace_with("Foobar_dead");
219 sprite->set_pos(box->get_pos());
223 // no more draw(), done by the scene graph
225 void on_collision(CollisionData data)
234 * calculate the size of an background image that should fill the screen:
236 image_size = (1 - parallax_speed) * screen_size + level_size * parallax_speed
238 def calc(parallax, screen, tiles):
239 return (1 - parallax) * screen + parallax * tiles * 32
242 Supported Resolutions
243 =====================
245 SuperTux shall support resolutions from 640x480 to 1280x800 at a magnification of 1x.
246 For resolutions higher, such as 2560x1600, upscaling will be used.
247 For resolutions smaller, like 320x240 downscaling will be used.
249 Higher resolution graphics for 2x maginification might be provided.
250 Lower res graphics for 0.5x maginification might be provided as well.
252 Resolution and magnification can be freely configured by the user within the given limits.
254 In tiles this means we have 40x25 (=1280x800px) tiles per screen.
259 * animate cave background torch: data/images/tiles/background/backgroundtile3.png
263 * remove lightmap tiles
265 * redraw/replace data/images/tiles/waterfall/
270 Currently the music makes up a large chunk of the total tarball
271 size. Compression could fix this:
273 ,-- Size of data/music/*.ogg
275 40MB - Current quality in SVN
276 24MB - Default oggenc quality (3)
277 14MB - oggenc at 0 quality
278 10MB - oggenc at -1 quality
280 No audible difference on my sound setup. -- grumbel