This wiki has been moved to into the mediawiki branch.


From SuperTux
Revision as of 11:16, 17 February 2014 by Giby (Talk | contribs)

Jump to: navigation, search

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
      • scr/supertux/main.cpp
      • options_menu.cpp
    • Fix the fullscreen/windows mode management
  • Fix the editor
    • Quartz support
    • adding function/debug
    • Re-writte/Translate code in C/C++
    • See if anything is usefull in Editor_Ideas
Why? If you want a C++ editor use flexlay.

Minor Issue

  • Non-fatal bug to fix:
    • sqapi.cpp
    • sqdebug.cpp
    • sqobject.h (103:23: note: expanded from macro '_integer',120:22: note: expanded from macro '_rawval')
    • sqfuncstate.cpp (82:41: warning: format specifies type 'int' but the argument has type 'SQInteger' (aka 'long'), 84:51: warning: format specifies type 'void *' but the argument has type 'SQRawObjectVal' (aka 'unsigned long') )
    • sqvm.cpp (52:51: warning: format specifies type 'int' but the argument has type 'SQInteger' (aka 'long'),252:51: warning: format specifies type 'int' but the argument has type 'SQInteger' (aka 'long') ,649:37: warning: '&&' within '||' [-Wlogical-op-parentheses])
    • sqstdrex.cpp(486:23: warning: '&&' within '||' [-Wlogical-op-parentheses], 486:23: note: place parentheses around the '&&' expression to silence this warning,500:3: warning: expression result unused [-Wunused-value],506:4: warning: expression result unused [-Wunused-value],512:4: warning: expression result unused [-Wunused-value], 518:3: warning: expression result unused [-Wunused-value], 608:3: warning: expression result unused [-Wunused-value])
    • brick.cpp
    • icecrusher.cpp (288:79: warning: operator '?:' has lower precedence than '*'; '*' will be evaluated first [-Wparentheses])
    • ispy.cpp
    • sqlexer.cpp.o
  • Localisation improve
    • Translation of menu and worlds [1]
    • Font design for non latin alphabet (traditional Chinese, Nepali, Arabic)

Graphic Tasks

  • animate cave background torch: data/images/tiles/background/backgroundtile3.png
Are that tiles really useful? --Hume 13:14, 31 August 2013 (UTC)
  • do parallax tiles (done, I think)
  • remove lightmap tiles
  • redraw/replace data/images/tiles/waterfall/
  • draw/redraw/replace for a ghostly word.
  • Frozen enemies
  • Improve fish
it also looks weird when fish disappears in transparent water
start of the jump should depend on top of water- i.e. be dynamic for moving water tiles
  • Animated explosion with particles (pop for short_fuse)
  • A finished owl
Can owl drop bombs? have to check, could then make skydive splat
Owl could probably drop game objects if this is not already set up
The editor will need to support owl objects
  • Consolidate/cleanup/organize image files and tilesets
  • Find a way to make the menu border work
  • A waterfall to match the new water look
  • Fix tiling issues
crystal cave tiles
brown castle tiles
some blue castle tiles
ice mountain
arcticskies background (not tiling, but a line artifact)
  • Fill out some of the new tilesets or remove (e.g. blue mtn.)
  • Separate out some tilesets (ice/forest/castle/etc.)
  • Animate some badguy deaths
  • LiveFire final sprite
  • Alternative candle sprites (animated background torches, glowing crystals, maybe a brazier/open flame, maybe a light bulb)
  • Need parallax versions of backgrounds
  • Visual effects for willowisp warp and level flip
  • Fix Tux graphics ugliness (floating debris outside of Tux and transparent holes inside)
  • Replace airarrow with one that is both visible and isn't confusing (maybe a glowing sprite w/o Tux)
  • General icons for jump and action buttons, can be used on billboards and in keybinding menu
the backflip billboard doesn't work if "jump with up" is not selected

To reimplant after SDL2 migration

Some good effects had to be removed because of some bug of SDL…

  • Smoke effect of bombs
  • Frame in main menu
  • Splash effect when falling in water


From previous TODO list, some point should be rethink, or may have been corrected …

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


  • 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;


     SomeBadGuy(Engine& engine)  
        box    = engine.physics().create_box(Rectf(0,0,32,32));
        sprite ="Foobar");
     void update(float delta)
        // not much to do, as most stuff is done internally in the engine
        if (dead)
     // 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

Whats the point in adding new features while the existing features and badguys can't be used due to lack of images or animations?

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