SuperTux TODO ============= This is a list of tasks and issues that might be worth to implement or fix. This list is however not an authorative list of things that must be done, its a collection of random things that pop up during development, therefore not everything in here might be well thought out or worth to implement. Use your brain before implementing anything on this list and always think about how useful a new feature would be in the context of the whole game or if a potential performance enhanchment, actually enhanchmes anything at all. Coding Standard Stuff ===================== * remove overuse of multi-inheritance * remove overuse of friend'ship * maybe mark interfaces as interfaces (ISerializable or SerializableInterface) * split files with multiple classes into multiple files with one class each * Decide what to do with magic constants of objects (static vs anonymous namespace vs lisp property) * check the code with Valgrind and profilers * use Vector in Physics for 'a' and 'v' * replace random generator with C++11 stuff * md5.hpp and random_generator.hpp could go to external/ * write/finish scripts to automatically: - make all includes relative to top level dir - sort includes (.hpp file, then system includes, then other project files) - include guards proper and of the form HEADER_SUPERTUX_${PATH_TO_FILE}_HPP - remove trailing whitespace TODO ==== * implement a system that allows to attach comments to specific regions in a level * implement a tool to "screenshot" a complete level * GameObject::RemoveListenerListEntry: Ughs, somebody trying to implement a list class within in the GameObject?! * make gravity constant * rename Vector -> Vector2f * get rid of SCREEN_WIDTH/SCREEN_HEIGHT overuse, give them a proper name at least * resolution menu entry moves the wrong way around * having dictionary_manager in Lisp is extremely ugly * enforce proper naming of files to match their class (SomeClass -> some_class.?pp or so) * file naming is inconsistent: some times we use '_' to separate words, sometimes we don't * more moving directories around? addon/ audio/ control/ gui/ lisp/ math/ physfs/ sprite/ util/ video/ squirrel/ for generic squirrel code supertux/ worldmap/ trigger/ scripting/ for scripting wrapper code badguy/ object/ * implement PNG screenshot * having hitbox in Sprite is fugly * add code that compares the last Log line with the current, if they are the same reject them and just output something like: * last line has been repeated X times * implement: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html * peaking up/down doesn't work properly * peaking left/right should make Tux look into that direction (up/down to, needs new sprites) * cleanup scripting interface * replace cloud tiles with decals * add support for automatic scrolling backgrounds * add direct reading of Vector2f to Reader/lisp * refactor Camera code, break ugly long functions into pieces and such * allow fully custom magnification levels from command line (maybe GUI to if there is a proper/easy way to let the user enter numbers) (--magnification or -g WIDTHxHEIGHT:ASPECTX:ASPECTY@MAGNIFICATION) * use AnchorPoint in Background instead of Alignment * allow gradients to parallax scroll like Background (make it optional) * add multicolored gradients (see Windstille source code, which can deal with Gimp gradients) * fix alpha blending in the SDL renderer, currently all sprites (Tux, etc.) appear transparent * shadow font glyphs bleed into other glyphs * sprite/sprite.cpp: frame should never get out of range: if((int)frame >= get_frames() || (int)frame < 0) log_warning << "frame out of range: " << (int)frame << "/" << get_frames() << " at " << get_name() << "/" << get_action() << std::endl; * Surface::hflip() is used exactly once, should probally be part of the constructor Scenegraph and Physics Engine Restructuring =========================================== * random idea to restructure engine stuff (might lead to nicer code and easier scriptability (and a need to rewrite lots of stuff...): class SomeBadGuy : public PhysicsCallbackListener // or use boost::function { private: PhysicsPtr box; SpritePtr sprite; public: SomeBadGuy(Engine& engine) { box = engine.physics().create_box(Rectf(0,0,32,32)); box->register_listener(this); sprite = engine.graphics().create_and_add_sprite("Foobar"); } void update(float delta) { // not much to do, as most stuff is done internally in the engine if (dead) { sprite->replace_with("Foobar_dead"); } else { sprite->hide(); sprite->set_pos(box->get_pos()); } } // no more draw(), done by the scene graph void on_collision(CollisionData data) { // respond } }; Random Notes ============ * calculate the size of an background image that should fill the screen: image_size = (1 - parallax_speed) * screen_size + level_size * parallax_speed def calc(parallax, screen, tiles): return (1 - parallax) * screen + parallax * tiles * 32 Supported Resolutions ===================== SuperTux shall support resolutions from 640x480 to 1280x800 at a magnification of 1x. For resolutions higher, such as 2560x1600, upscaling will be used. For resolutions smaller, like 320x240 downscaling will be used. Higher resolution graphics for 2x maginification might be provided. Lower res graphics for 0.5x maginification might be provided as well. Resolution and magnification can be freely configured by the user within the given limits. In tiles this means we have 40x25 (=1280x800px) tiles per screen. Graphic Tasks ============= * animate cave background torch: data/images/tiles/background/backgroundtile3.png * do parallax tiles * remove lightmap tiles * redraw/replace data/images/tiles/waterfall/ Music Recode ============ Currently the music makes up a large chunk of the total tarball size. Compression could fix this: ,-- Size of data/music/*.ogg V 40MB - Current quality in SVN 24MB - Default oggenc quality (3) 14MB - oggenc at 0 quality 10MB - oggenc at -1 quality No audible difference on my sound setup. -- grumbel # EOF #