Release Checklist:
~~~~~~~~~~~~~~~~~~

- make sure all important strings are translatable

- run ./extract-po.sh && ./update-po.sh

- update ChangeLog: svn2cl --break-before-msg

- make sure that the game still runs after install.sh

- check NEWS, README, INSTALL.*

Stuff to do at all times:
~~~~~~~~~~~~~~~~~~~~~~~~~

- grep for all the FIXME's and '#if 0' and find those that might be
  important, add what you find to this TODO

Roadmap for Pingus 0.8.0:
~~~~~~~~~~~~~~~~~~~~~~~~~

- pingu explosions are rects, should be circles (Vel(rand()%10, rand()%10) vs Vel(angle, length))

- add VCR like effect for fast forward

- add slow motion button (dead, turtle, pingu, rabbit)

- move time into pingus counter

- make option menu accessible from in-game (top/left corner)

- proper waiter animation

- repaint pause and fast-forward button

- use transparent action buttons unless fast-mode is used

- add round corners to the minimap

- allow sprites as background

- add a proper option menu

- redesign main menu

- animate the exit flag

- a new worlds 

- UTF8 support with MES-1 characters (http://www.eki.ee/letter/chardata.cgi?comp1=MES-1&comp2=)

- split screen multiplayer

- rework the UI, either go glas-like or use the blackbord style 

- Font::draw() origin only works properly for left, right and center, breaks with multiline text

- file parsing easily crashes or asserts on incorrect files

- GroundMap tiles are currently RGBA, while in reality they are just
  RGB with a colorkey, room for optimization

- implement xschema-like language to check for syntax errors in the level files

- keep highscores for levels (number saved and stuff like that)

- digger follows down slopes

- trap in one tutorial level with two exits is in background, should be foreground

- worldmap pingu walks right over locked levels

- Wiimote support (libcwiid)

- Translation issues:

 * The suffix showing which extra skill a Pingus has (e.g. [f] for Floater or
   [c] for Climber).

 * b) The big sign on the 'Tutorial Island' image

- do we need z-pos for anything or does implicit object position serve
  the same purpose? Problem: Groundpieces all have the same z-level,
  the editor doesn't handle that and allows insertions inbetween

- StringFormat does line breaking TeX-style, but that isn't useful
  with the current s-expr format, which can handle explicit line
  breaks just fine

Roadmap for Pingus 0.7.3
~~~~~~~~~~~~~~~~~~~~~~~~

Important:
==========

- Levels: All levels lack description

halloween1-grumbel.pingus - circle save - finished - needs testing (easy) - demonstrates a Faller bug
halloween2-grumbel.pingus - rescue by jump - finished - needs testing (easy)
halloween3-grumbel.pingus - digg tunnel - finished - needs testing (medium)
halloween4-grumbel.pingus - wall bomb - finished - needs testing (easy/medium)
halloween5-grumbel.pingus - join-jump - finished - needs testing (hard++)
halloween6-grumbel.pingus - jump high - finished - needs testing  (easy)
halloween7-grumbel.pingus - rescue - finished - needs testing - number of pingus wrong (hard--)
halloween8-plouj.pingus - bridge broken - (hard+)

Meduim Important:
=================

- resource system needs a review/rewrite

- "core/misc/404sprite" should be returned for missing graphics

- The goal should be to provide fullscreen support for most common
  monitors:

Monitor Resolutions:
--------------------
  1920×1200 (WUXGA)
  1920x1080 (HD-TV)
  1680x1050
  1600x1200
  1400x1050 (Widescreen LCD)
  1440x900
  1280x1024 (19" LCD)
  1152x864
  1024x768

-> 1920x1200 means fullscreen for almost anything today and would work
   for all halloween levels, not so much for tutorial levels

Level Resolutions:
------------------
Minimal-Horizantal: 1000
Maximal-Horizantal: 2500

Minimal-Veritcal:  600
Maximal-Veritcal: 1200

data/levels/halloween/halloween1-grumbel.pingus:       (levelsize 1400  950)
data/levels/halloween/halloween2-grumbel.pingus:       (levelsize 1700 1000)
data/levels/halloween/halloween3-grumbel.pingus:       (levelsize 1600  800)
data/levels/halloween/halloween4-grumbel.pingus:       (levelsize 1900 1000)
data/levels/halloween/halloween5-grumbel.pingus:       (levelsize 1700 1000)
data/levels/halloween/halloween6-grumbel.pingus:       (levelsize 2000 1000)
data/levels/halloween/halloween7-grumbel.pingus:       (levelsize 2500 1000)
data/levels/halloween/halloween8-plouj.pingus:         (levelsize 1500  900)

data/levels/tutorial/basher-tutorial-grumbel.pingus:   (levelsize 1900  700)
data/levels/tutorial/bomber-tutorial2-grumbel.pingus:  (levelsize 1200 1000)
data/levels/tutorial/digger-tutorial2-grumbel.pingus:  (levelsize 1400  700)
data/levels/tutorial/floater-tutorial-grumbel.pingus:  (levelsize 1230  900)
data/levels/tutorial/jumper-tutorial-grumbel.pingus:   (levelsize 1200  600)
data/levels/tutorial/miner-tutorial2-grumbel.pingus:   (levelsize 1000 1100)
data/levels/tutorial/snow10-grumbel.pingus:            (levelsize 1400 1200)
data/levels/tutorial/snow11-grumbel.pingus:            (levelsize 1200  600)
data/levels/tutorial/snow12-grumbel.pingus:            (levelsize 1300  800)
data/levels/tutorial/snow14-grumbel.pingus:            (levelsize 1200 1000)
data/levels/tutorial/snow15-grumbel.pingus:            (levelsize 1400  600)
data/levels/tutorial/snow16-grumbel.pingus:            (levelsize 1270  600)
data/levels/tutorial/snow17-grumbel.pingus:            (levelsize 1700  600)
data/levels/tutorial/snow19-grumbel.pingus:            (levelsize 2100 1000)
data/levels/tutorial/snow20-grumbel.pingus:            (levelsize 2000  600)
data/levels/tutorial/snow21-grumbel.pingus:            (levelsize 1400  600)
data/levels/tutorial/snow22-grumbel.pingus:            (levelsize 1400 1200)
data/levels/tutorial/snow7-grumbel.pingus:             (levelsize 1824  600)
data/levels/tutorial/snow8-grumbel.pingus:             (levelsize 1216 1000)
data/levels/tutorial/snow9-grumbel.pingus:             (levelsize 1500  600)
data/levels/tutorial/solid-tutorial-grumbel.pingus:    (levelsize 1000  700)

- start_pos is missing in editor (worked around by centering the view
  on the entrances)

- implement option menu

- Regenerate Courier fonts for latin-1/2/9

### Loading font file: system://data/images/fonts/courier_small-iso-8859-9.font
Font: datadir://images/fonts/courier_small-iso-8859-9.png
  Error: glyphs found: 188, expected 189
  Format: bpp: 32

- integrate install command into scons (maybe), use 'install' instead of 'cp'

- FPS: issues: 

  - Editor:     27fps - 20%
  - Main Menu:  30fps - 50%
  - Worldmap:   50fps - 22%
  - Starscreen: 19fps - 14%
  - Game:       32fps - 14%
  - EndScreen:  50fps - 19%

- Loading data/levels/playable/chouser02.pingus in Editor and saving
  it again causes the background to be at the wrong position (caused
  by level lacking position and editor setting a different fallback
  then in-game) [Currently worked around in editor code, should be
  fixed in the converter]

- frameskip seems broken

- remove verbose

- add dynamic resize for the game

- main menu crashes when you click a little wildely:

  decide whether to ignore cached_action != CA_NONE in
  ScreenManager::pop_screen. This causes the game to crash if [ESC] is
  quickly pressed repeatedly

  currently worked around by:
  assert (cached_action == CA_NONE || cached_action == CA_POP);

  but the menu still acts funky if one clicks heavily (i.e. two
  screens get added instead of one or stuff like that)

- rewrite Config file support, make game automatically write a default
  config file, use s-expr

- level converter has a bug that causes some object types to be
  ignored (startpos and likely the other more excotic worldobj things)

- level converter writes 0/1 instead of #t/#f

- bridging gets more complicated has graphical error (background?!)
  surface background doesn't handle larger res due to the Playfield
  being offsetted (might be solvable with new DrawingContext that
  features Rect)

- rework command line parsing so that it actually works properly and
  doesn't depend so much on the order (setting datadir causes trouble
  with translation, since translation need datadir to work)

- parallax scrolling is funky where background tiles are small. When
  scrolling right, the leftmost column of tiles gets overlapped by the
  next column a little bit. See the last tutorial level for an
  example. (likely rounding error float/int)

- CollisionMask can't handle RGBA images and likely shouldn't (due to
  them being animated and stuff like that), we however don't have
  seperate colmask for those images

- convert all levels and check all classic levels for issues (run
  branches/pingus_sdl/contribl/levelconvert.sh from SVN toplevel dir)

Less Important:
===============

- implemented ComboButton for Shift+Tab combinations

- add something like FileReader::must_read_int() for cases where a
  value isn't optional, something that can figure out values that
  havn't be used would be nice as well

- fix verdana11 for latin2 and latin9 or go UTF-8

- Liquids/water is 32, others are 64, this is causing trouble with the
  collision map

- some people like auto-scrolling in window mode, in 0.6.0 it worked
  even when completly out of the window, in SDL the mouse coords don't
  get updated when the mouse isn't in the window (need to switch from
  event to polling?!)

- action-axis doesn't handle analog (do we even need this or could we do with axis-button?)

- remove SceneContext from Credits, replace with DrawingContext

- sv.po, Swedish is incomplete, lacks level and story text

- story graphics have a missing vertical line (due to age old gimp scaling bug)
 
- add drag&drop scrolling

- nuke button is unclean, other buttons not so great either -> repaint

- walker speed looks wrong, other actions might need fine tuning as well

- hurry-up should be removed and replaced by something less heavy
  (isn't used in tutorial island, since those levels don't have time)
  (have a blinking clock and tick sound or so)

- write a README.input

- LANG=sr ./pingus|grep language shows "English" but ingame text is not English

- using some languages (sr, cs, tr) causes some kind of font mapping errors

- replace "magic" numbers such as default screen size (800 and 600) with macros/globals or whatever is good programming practice

Roadmap for Pingus Editor 0.7.3:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Important:
==========


Medium Important:
=================

- shrinking the editor window to much causes a crash (limit size as temporary fix)

- implement proper tmpfile Support (save tmp levels to ~/.pingus/tmp/
  for backup purpose in case of editor crash or so)

- add yes/no question when creating a new level

- add overwrite warning to file dialog

- add pixel perfect object selection

- add icons to filedialog

- Dialogs: Editor Properties: user name and email

- show an error message if save fails

Less Important:
===============

- make inputbox handle text longer then the rect size as well as
  multiline text

- keyboard shortcuts need to be implemented with input framework, but
  how without support for keymaps?

- ObjectSelector need to support more object types, missing types:
  all kinds of traps, weather, special objects

- add type conversion (important to convert groundpieces in hotspots and visa verse)

- add options to show/hide hidden files and filter stuff

- could/should rotate around object center

- write a color select widget (Hue, Saturation.Value)

- object raising doesn't work for group


Older Stuff:
~~~~~~~~~~~~

- hint system via herring or flower (it should show the path to walk)

- smasher doesn't correctly check the y-coordinate

- all working actions in default level

- seperate colmap and gfx remover surfaces for digger, miner, etc. would be nice
  the current ones don't work very good since the remove path is too smooth
  - keep_trans,alpha blitters would also be very nice (darken the border of a digging path or something like that)

- diggers leave a small pixel barier when finished with there digging,
  which can be abused as a step

- replace all '9000' time levels with '-1' time or correct time

- fix author in all levels

- update email addrs and missing author fields in level files

- floater and jumper don't work together

- hint system via herring or flower (it should show the path to walk)

- smasher doesn't correctly check the y-coordinate

- console is bound to the wrong keys and keys for it are not documented

- music and sound should be up and running and included in the game [important - release critical]

- playable and non-playable levels should be sorted

- add better load-from-file support for hotspots, backgrounds, etc.

- pingus doesn't die when out-of-screen

- result screens

- html like behaviour for level descriptions

- description screen and result screen must be reworked

- thumbnail handling should be reviewed

- Floaters shouldn't float until they've fallen the minimum distance
  it'd take for a regular Pingu to splat. That way, you wouldn't have to
  worry about floaters moving so slowly a lot of the time, when
  unnecessary

- Bashers cut in circles, so their last two or three swipes should be
  square when breaking through to an open space, since they currently
  can trap Pingu in, requiring another one or two bashes. This is
  especially obvious when bashing through wells. They can also bash
  through metal, which they shouldn't be able to.

- All entrances should have graphics and be animated

- Bridgers seem to move backwards when they first start stacking (I
  think that their graphic may be more to the left in its square than
  the walker graphic, and also a little smaller than the walker
  graphic - probably because it's confined to a square of the same
  size - maybe give special workers slightly larger graphic sizes, so
  they can appear to be the same size as walkers)

- Sometimes diggers can't be changed into miners.

- If enough Pingu are saved and all that are left are blockers, end
  level before time runs out, with a win

- "Hurry up!" wayyy too late. Maybe at 1 minute left, or so.

- At least one kind of water (the kind in Evil in the Dark) doesn't
  kill Pingu

- In space levels, Pingu that fall off of a cliff into space don't
  die, though they should just like in water or lava.

Missing Groundpieces
====================

Desert Theme:
 - all bocks need to be available as solid in addition to the
   non-solid blocks, some level already abuse the non-solid blocks as
   solid.

Sortie Theme:
 - this theme needs 'normal' groundpieces which can be used to dig
   throught and things like that, it currently only has horizontal and
   vertical bars, which make building levels quite difficult

Wishlist
========

0.3.0
~~~~~
* ColMaps for hotspot objects (see the objects in the water in level9)
* A better MessageBox
* caching for level prviews
* more ground gfx's
* Better music support
* colmap manipulation for liquid
* right/left/random/left'n'right for entrances
* Support for animated exits and entrances
* More Backgrounds (tileable/fullscreen/resized)
* Creating some sound effects
* Integrading Demo recording/playing to the menu    
* snow particles
* A ground smashing animation

0.4.0
~~~~~
* Collisions between water/lava and particles
* Parallax scrolling backgrounds
* All standard actions fine tuned working actions

1.0.0
~~~~~
* Full Animated backgrounds, like Plasma and Fire effects
* Dynamic loadable backgrounds, actions and traps
* All memory leaks fixed

Other Wishes:
~~~~~~~~~~~~~
- Water, Lava, Snake, Spike, Electric pits
- Cursor follow mode
- Pingus able to swim

> Man koennte Tueren, Treppen, Bruecken, Lifte, Teleporter...
> einbauen ("Extra pingu actions"), die sich auf konventionelle
> Weise nicht oeffnen/begehen/ausfahren/aktivieren lassen, sondern
> erst durch einen "Hacker-Pingu" freigeschaltet werden muessen,
> der sich an einem nahegelegenen Terminal an die Arbeit macht. Um
> ihn da wegzubekommen, muesste man ihn natuerlich sprengen (wie im
> echten Leben *grins*).

# EOF #
