This wiki has been moved to https://github.com/SuperTux/wiki into the mediawiki branch.

Difference between revisions of "TODO-List"

From SuperTux
Jump to: navigation, search
Line 43: Line 43:
 
**Font design for non latin alphabet (traditional Chinese,  Nepali, Arabic)  
 
**Font design for non latin alphabet (traditional Chinese,  Nepali, Arabic)  
  
==Previous TODO (to be sorted) ==
+
==Misc.==
===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===
 
===Coding Standard Stuff===
  
* make code clean:  
+
 
                    "-O2",  
+
* make code clean: "-O2", "-g3",
                    "-g3",
+
**"-ansi",
                    "-ansi",
+
** "-pedantic",
                    "-pedantic",
+
** "-Wall",
                    "-Wall",
+
**"-Wextra",
                    "-Wextra",
+
** "-Wnon-virtual-dtor",
                    "-Wnon-virtual-dtor",
+
**"-Weffc++",
                    "-Weffc++",
+
**"-Wconversion",
                    "-Wconversion",
+
**"-Werror",
                    "-Werror",
+
**"-Wshadow",
                    "-Wshadow",
+
**"-Wcast-qual",
                    "-Wcast-qual",
+
**"-Winit-self", # only works with >= -O1
                    "-Winit-self", # only works with >= -O1
+
**"-Wno-unused-parameter",
                    "-Wno-unused-parameter",
+
  
 
* remove overuse of multi-inheritance  
 
* remove overuse of multi-inheritance  
 
 
* remove overuse of friend'ship
 
* remove overuse of friend'ship
 
 
* maybe mark interfaces as interfaces (ISerializable or SerializableInterface)
 
* maybe mark interfaces as interfaces (ISerializable or SerializableInterface)
 
 
* split files with multiple classes into multiple files with one class each
 
* 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)
 
* Decide what to do with magic constants of objects (static vs anonymous namespace vs lisp property)
 
 
* check the code with Valgrind and profilers
 
* check the code with Valgrind and profilers
 
 
* use Vector in Physics for 'a' and 'v'
 
* use Vector in Physics for 'a' and 'v'
 
 
* replace random generator with mersenne twister and/or move to external/ (maybe use boost's random stuff)
 
* replace random generator with mersenne twister and/or move to external/ (maybe use boost's random stuff)
 
 
* md5.hpp and random_generator.hpp could go to external/
 
* md5.hpp and random_generator.hpp could go to external/
 
 
* write/finish scripts to automatically:
 
* 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
  
  ** make all includes relative to top level dir
+
===Suggesions===
 
+
  ** sort includes (.hpp file, then system includes, then other project files)
+
 
+
  ** include guards proper and of the form HEADER_SUPERTUX_${PATH_TO_FILE}_HPP
+
 
+
===TODO===
+
  
 
* implement a system that allows to attach comments to specific regions in a level
 
* implement a system that allows to attach comments to specific regions in a level
 
 
* implement a tool to "screenshot" a complete level
 
* implement a tool to "screenshot" a complete level
 
 
* GameObject::RemoveListenerListEntry: Ughs, somebody trying to implement a list class within in the GameObject?!
 
* GameObject::RemoveListenerListEntry: Ughs, somebody trying to implement a list class within in the GameObject?!
 
 
* add --datadir DIR (data/) and --userdir DIR (~/.supertux/), allow multiple --datadir's
 
* add --datadir DIR (data/) and --userdir DIR (~/.supertux/), allow multiple --datadir's
 
+
* make gravity constant-> To be discussed…
* make gravity constant
+
 
+
 
* rename Vector -> Vector2f
 
* rename Vector -> Vector2f
 
+
* get rid of global SDL_Screen* screen variable -> in progress
* get rid of global SDL_Screen* screen variable
+
* get rid of SCREEN_WIDTH/SCREEN_HEIGHT overuse, give them a proper name at least -> to think when upgrading to SDL2
 
+
* get rid of SCREEN_WIDTH/SCREEN_HEIGHT overuse, give them a proper name at least
+
 
+
 
* resolution menu entry moves the wrong way around
 
* resolution menu entry moves the wrong way around
 
 
* having dictionary_manager in Lisp is extremely ugly
 
* having dictionary_manager in Lisp is extremely ugly
 
 
* enforce proper naming of files to match their class (SomeClass -> some_class.?pp or so)
 
* 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
* file naming is inconsistent: some times we use '_' to separate words, sometimes we don't
+
 
+
 
* collect all manager classes into globals.hpp
 
* collect all manager classes into globals.hpp
 
* 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
 
* implement PNG screenshot
 
 
* having hitbox in Sprite is fugly
 
* having hitbox in Sprite is fugly
 
 
* write decal object that doesn't have hitbox
 
* write decal object that doesn't have hitbox
 
 
* implement surface and/or sprite scaling (MipMaps?)
 
* implement surface and/or sprite scaling (MipMaps?)
 
+
* add code that compares the last Log line with the current, if they are the same reject them and just output something like:
* 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
 
+
* last line has been repeated X times
+
 
+
 
* implement: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
 
* implement: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
 +
* workaround for Ubuntu pulseaudio/OpenAL brokeness:
  
* workaround for Ubuntu pulseaudio/OpenAL brokeness:
 
{
 
 
$ cat ~/.alsoftrc
 
$ cat ~/.alsoftrc
 
drivers = oss
 
drivers = oss
}
+
 
 
* peaking up/down doesn't work properly
 
* peaking up/down doesn't work properly
 
 
* peaking left/right should make Tux look into that direction (up/down to, needs new sprites)
 
* peaking left/right should make Tux look into that direction (up/down to, needs new sprites)
 
+
* keep possible future SDL1.3 upgrade in mind (what has changed?) -> in progress
* keep possible future SDL1.3 upgrade in mind (what has changed?)
+
 
+
 
* cleanup scripting interface
 
* cleanup scripting interface
 
 
* replace cloud tiles with decals
 
* replace cloud tiles with decals
 
 
* option menu has text overlap in "aspect ratio"
 
* option menu has text overlap in "aspect ratio"
 
 
* jumping up from an enemy doesn't make a sound?
 
* jumping up from an enemy doesn't make a sound?
 
 
* add support for automatic scrolling backgrounds
 
* add support for automatic scrolling backgrounds
 
 
* add direct reading of Vector2f to Reader/lisp
 
* add direct reading of Vector2f to Reader/lisp
 
 
* replace bell with 'reset block', that starts to glow once bumped into (or something different)
 
* replace bell with 'reset block', that starts to glow once bumped into (or something different)
 
 
* refactor Camera code, break ugly long functions into pieces and such
 
* 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)
* 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
 
* use AnchorPoint in Background instead of Alignment
 
 
* allow gradients to parallax scroll like Background (make it optional)
 
* allow gradients to parallax scroll like Background (make it optional)
 
 
* add multicolored gradients (see Windstille source code, which can deal with Gimp gradients)
 
* 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
* fix alpha blending in the SDL renderer, currently all sprites (Tux, etc.) appear transparent
+
 
+
 
* position of statistics text on the worldmap doesn't scale properly with resolution it seems
 
* position of statistics text on the worldmap doesn't scale properly with resolution it seems
 
 
* gluBuild2DMipmaps leads to blurriness, maybe lack of magic offset (0.375f, 0.375f, 0.0f) or something else
 
* gluBuild2DMipmaps leads to blurriness, maybe lack of magic offset (0.375f, 0.375f, 0.0f) or something else
 
+
* font system has blending artifacts at non-1x magnifications, need to have an transparent pixel between letters
* font system has blending artifacts at non-1x magnifications, need to have an transparent pixel between letters
+
* add a (border #t) flag to fonts, that allows to use fonts which have a 1px transparent border around glyphs, which is needed to get rid of blending artifacts in OpenGL
 
+
* add a (border #t) flag to fonts, that allows to use fonts which have a 1px transparent border around glyphs, which is needed to get rid of blending artifacts in OpenGL
+
 
+
 
* mouse cursor has blend artifact on high magnification
 
* mouse cursor has blend artifact on high magnification
 
 
* shadow font glyphs bleed into other glyphs
 
* shadow font glyphs bleed into other glyphs
 
+
* in DrawingRequest "void* request_data;" is only free'ed, but the destructor never gets called
* in DrawingRequest "void* request_data;" is only free'ed, but the destructor never gets called
+
 
+
 
* sprite/sprite.cpp: frame should never get out of range:
 
* sprite/sprite.cpp: frame should never get out of range:
  
{
 
 
   if((int)frame >= get_frames() || (int)frame < 0)
 
   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;
 
     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
 
* Surface::hflip() is used exactly once, should probally be part of the constructor
  
 
===Scenegraph and Physics Engine Restructuring===
 
===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...):
+
* 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
 
class SomeBadGuy : public PhysicsCallbackListener // or use boost::function
{
 
 
{
 
{
 
private:
 
private:
Line 262: Line 174:
 
       }
 
       }
 
};
 
};
}
+
 
===Random Notes===
+
==Random Notes==
  
 
* calculate the size of an background image that should fill the screen:
 
* calculate the size of an background image that should fill the screen:
Line 275: Line 187:
 
===Supported Resolutions===
 
===Supported Resolutions===
  
*SuperTux shall support resolutions from 640x480 to 1280x800 at a magnification of 1x.
+
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 higher, such as 2560x1600, upscaling will be used.
*For resolutions smaller, like 320x240 downscaling will be used.
+
For resolutions smaller, like 320x240 downscaling will be used.
  
*Higher resolution graphics for 2x maginification might be provided.
+
Higher resolution graphics for 2x maginification might be provided.
*Lower res graphics for 0.5x maginification might be provided as well.
+
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.
+
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.
+
In tiles this means we have 40x25 (=1280x800px) tiles per screen.
  
 
===Graphic Tasks===
 
===Graphic Tasks===
  
 
* animate cave background torch: data/images/tiles/background/backgroundtile3.png
 
* animate cave background torch: data/images/tiles/background/backgroundtile3.png
 
 
* do parallax tiles
 
* do parallax tiles
 
 
* remove lightmap tiles
 
* remove lightmap tiles
 
 
* redraw/replace data/images/tiles/waterfall/
 
* redraw/replace data/images/tiles/waterfall/
 +
* draw/redraw/replace for a ghostly word.
  
===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
 
  
  
  
 
As long as all these points haven't been fixed, Milestone 2 will not be considered as Stable, so won't be released.
 
As long as all these points haven't been fixed, Milestone 2 will not be considered as Stable, so won't be released.

Revision as of 05:58, 21 August 2013

This is the actual thing to solve before Milestone 2

Major Issue

These Issus Need particular knowledge of coding.

  • SDL2 Migration
    • Rendering
    • Control
    • Files to edit:
      • joystickkeyboardcontroller.hpp
      • joystickkeyboardcontroller.cpp
      • gl_renderer.cpp
      • sdl_renderer.cpp
      • console.cpp
      • screen_manager.cpp
      • title_screen.cpp
      • keyboard_menu.hpp
      • addon_menu.cppjoystickkeyboardcontroller.hpp
      • joystickkeyboardcontroller.cppgl_renderer.cpp
      • sdl_renderer.cppfunctions.cpp
      • physfs_sdl.cpp
      • button_group.cpp
      • button.hpp
      • button.cpp
      • firefly.cpp
    • Fix the fullscreen/windows mode management
  • Fix the editor
    • adding function/debug
    • Re-writte/Translate code in C/C++

Minor Issue

  • Non-fatal bug to fix:
    • sqapi.cpp
    • sqdebug.cpp
    • sqobject.h
    • sqfuncstate.cpp
    • sqvm.cpp
    • sqstdrex.cpp
    • brick.cpp
    • icecrusher.cpp
    • ispy.cpp
  • Localisation improve
    • Translation of menu and worlds [1]
    • Font design for non latin alphabet (traditional Chinese, Nepali, Arabic)

Misc.

Coding Standard Stuff

  • make code clean: "-O2", "-g3",
    • "-ansi",
    • "-pedantic",
    • "-Wall",
    • "-Wextra",
    • "-Wnon-virtual-dtor",
    • "-Weffc++",
    • "-Wconversion",
    • "-Werror",
    • "-Wshadow",
    • "-Wcast-qual",
    • "-Winit-self", # only works with >= -O1
    • "-Wno-unused-parameter",
  • 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 mersenne twister and/or move to external/ (maybe use boost's random 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

Suggesions

  • 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?!
  • add --datadir DIR (data/) and --userdir DIR (~/.supertux/), allow multiple --datadir's
  • make gravity constant-> To be discussed…
  • rename Vector -> Vector2f
  • get rid of global SDL_Screen* screen variable -> in progress
  • get rid of SCREEN_WIDTH/SCREEN_HEIGHT overuse, give them a proper name at least -> to think when upgrading to SDL2
  • 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
  • collect all manager classes into globals.hpp
  • implement PNG screenshot
  • having hitbox in Sprite is fugly
  • write decal object that doesn't have hitbox
  • implement surface and/or sprite scaling (MipMaps?)
  • 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

$ cat ~/.alsoftrc drivers = oss

  • peaking up/down doesn't work properly
  • peaking left/right should make Tux look into that direction (up/down to, needs new sprites)
  • keep possible future SDL1.3 upgrade in mind (what has changed?) -> in progress
  • cleanup scripting interface
  • replace cloud tiles with decals
  • option menu has text overlap in "aspect ratio"
  • jumping up from an enemy doesn't make a sound?
  • add support for automatic scrolling backgrounds
  • add direct reading of Vector2f to Reader/lisp
  • replace bell with 'reset block', that starts to glow once bumped into (or something different)
  • 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
  • position of statistics text on the worldmap doesn't scale properly with resolution it seems
  • gluBuild2DMipmaps leads to blurriness, maybe lack of magic offset (0.375f, 0.375f, 0.0f) or something else
  • font system has blending artifacts at non-1x magnifications, need to have an transparent pixel between letters
  • add a (border #t) flag to fonts, that allows to use fonts which have a 1px transparent border around glyphs, which is needed to get rid of blending artifacts in OpenGL
  • mouse cursor has blend artifact on high magnification
  • shadow font glyphs bleed into other glyphs
  • in DrawingRequest "void* request_data;" is only free'ed, but the destructor never gets called
  • 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/
  • draw/redraw/replace for a ghostly word.



As long as all these points haven't been fixed, Milestone 2 will not be considered as Stable, so won't be released.