-
Notifications
You must be signed in to change notification settings - Fork 1
/
TODO
542 lines (324 loc) · 15.2 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
Release Checklist:
~~~~~~~~~~~~~~~~~~
- make sure all important strings are translatable
- run ./extract-po.sh && ./update-po.sh
- make sure that the game still runs after "make install"
- check NEWS, README, INSTALL.*
- remove log_tmp()
- check that 'extra' and 'test' build
Make a release:
~~~~~~~~~~~~~~~
cd data/po/
./extract-po.sh
./update-po.sh
VERSION="$(cat VERSION)"
TAG="v${VERSION}"
git tag -s "${TAG}" -m "pingus ${TAG}"
# Normal Source
git archive --format=tar --prefix="pingus-${VERSION}/" ${TAG} | bzip2 -c > /tmp/pingus-${VERSION}.tar.bz2
git push --tags
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 0.8.0
=================
* finish/test SDL2 port
- OpenGL renderer is broken
-> resize doesn't work
- Delta renderer is broken
-> doesn't work correctly at all, can't use SDLFramebuffer any
more due to Renderer
-> see SDL_GetWindowSurface()
SDL_UpdateWindowSurfaceRects()
- some sound effects are broken -> convert to other format bit-depth, etc.
- fade-in/out is glitchy -> rewrite with SDL_SetRenderTarget()
- fullscreen doesn't work
- add GameController support
Roadmap for 0.7.5
=================
* add option for demo recording to option menu
Editor
======
* get rid of time completely? maybe not, but don't use it in any of the official levels
* z-pos is not taken into account when raise/lower objects, need to
sort object list by z-pos
* display help text when pressing F1
* document all new keyboard shortcuts
Roadmap for Pingus 0.8.0:
~~~~~~~~~~~~~~~~~~~~~~~~~
* use better checksum algorithm (sha1, md5, etc.)
* save checksum with savegame
[ERROR] Resource::load_surface(): exits/sortie_anim: can't load animated sprite as surface
[ERROR] Resource::load_surface(): exits/space: can't load animated sprite as surface
[ERROR] Resource::load_surface(): textures/anim_fire: can't load animated sprite as surface
* display keyboard shortcuts in the GUI (a little tricky with remapable keys)
* climber right animation is the wrong way around
* add priority to levelsets that can be used to sort them
* give better error message when datadir is not set
* check data/themes/ for any useful stuff
Code Cleanup
============
* add check for OpenGL
* banish Vector3f from the source code, along with float
* reduce global variables
* make pingu.hpp use int not float
* namespaces need some cleanup, most names are very ugly and
capitalized, get rid of namespace unless obsolutely needed
Cleanup engine/ from pingus/ dependencies
=========================================
* pingus/fps_counter.hpp move to engine (needs pingus/fonts.hpp, could
be solved by either setting the Font manually or having a dedicated
engine/system font)
* pingus/gexttext.hpp used by Screenshot, solvable by moving text output to
pingus/
* pingus/global_event.hpp used by SDLDriver, could be solved with boost::signal
* pingus/globals.hpp needs cleanup
* pingus/path_manager.hpp used in sound, could be replaced with Pathname
* pingus/resource.hpp used by Sprite
* DebugFlags are currently used for text output as well as visual
hints, should be changed, maybe use maintainer_mode instead
Beta Testing
============
* check that all levels (including playable/, testing/ and wip/)
behave the same as in Pingus0.6
* check that those things that differ between Pingus0.6 and PingusSDL
are changed for the better
* check that all translations are up to date
* find the places where translation breaks the GUI (i.e. fonts running
over GUI elements)
* check long-term play, play the game for an hour and check that
its not degrading (obvious memory leak or stuff like that)
OLPC Issues
===========
* performance goes down a lot with many Pingus -> Benchmark if its the
drawing or collision detection (likely to many rectangles -> go
Microtile array or make RectMerger suck in rects that are close together)
* music does make things very slow and then just stops working
* cursor and icons are too small
* maybe bigger font
* 1920x1200 vs 1200x900 -> height 900 close to 1200, do magic so that
we don't have vertical scrolling for small levels
* editor refreshes too much
* doesn't have FXX keys in non-fullscreen mode
"Important" Stuff and Random Notes:
===================================
* map middle button to pause
* add button bar to the demo recorder, so that used action are visible
* ChoiceBox needs a way to carry user data for items
* check that all data is overridable/addable by modifying ~/.pingus/ (levelsets seem missing)
* Valgrind results:
==11421== Conditional jump or move depends on uninitialised value(s)
==11421== at 0x080f9a56: void ((null):0)
==11421== by 0x080f9ae3: void ((null):0)
==11421== by 0x080f9ae3: void ((null):0)
==11421== by 0x080f9ae3: void ((null):0)
==11421== by 0x080fa7bf: DrawOpBuffer::render(SDLFramebuffer&, DrawOpBuffer&) (stl_algo.h:4820)
==11421== by 0x080f9666: DeltaFramebuffer::flip() (delta_framebuffer.cpp:426)
==11421== by 0x080fb1f2: Display::flip_display() (display.cpp:41)
==11421== by 0x08155c04: ScreenManager::update(float, std::vector<Input::Event, std::allocator<Input::Event> > const&) (screen_manager.cpp:286)
==11421== by 0x081560a5: ScreenManager::display() (screen_manager.cpp:223)
==11421== by 0x0809dff0: PingusMain::start_game() (pingus_main.cpp:696)
==11421== by 0x080a3ba8: PingusMain::main(int, char**) (pingus_main.cpp:726)
==11421== by 0x080a3f9b: main (pingus_main.cpp:806)
==11421==
* CollisionMask cleanup
* add "Save Demo" to the result screen
* add "Replay" to the result screen
* animate the flag or remove it for single-player
* playfield scrolling should be float
* Repaint Exit panel
* split Pingus into base and extra user contributed content
* intro/end story and credits are not properly displayed currently
* do SurfaceButton with signals
* toggle buttons for the editor toolbar would be good
_________
* replace eraser-abort with ( <- Back ) button
* drawing context defaults to display::get_width/height, need to adjust that
* clicking while the screen changes is weird
* fullscreen must use a different size then the current window size (round to nearest 'normal' resolution or so)
* input recording in the ScreenManager can't work when the underlying
savegame or screensize is different, having assert() or so to catch
that would be nice
* ScreenManager::fade_over should be integrated into
ScreenManager::update, so that the mainloop is never left
* add alternative fullscreen, screenshot and print-fps shortcuts for the OLPC, which doesn't have Fxx keys
Ctrl-f -> fullscreen, Ctrl-s screenshot, Ctrl->p printfps
* add WorldObjs that provide hint to the solution
* remove default_screen_width/height, doesn't serve any purpose and is abused in a few places, same for screen_width/height
* How to handle clipping? In DeltaFramebuffer? -> 1) do it via srcrect? 2) make it a DrawOp?
* DeltaFramebuffer issues: clipping not yet implemented, particle effects are slow (to many small rectangles)
* Integrade Input-Demo recording somewhat better, like with command line switch
* Display a note when maintainer mode is active and display what
keyboard shortcuts are available, move cheats into maintainer mode
* rewrite config file handling
* change cursor to cross with arrows when scrolling
* make "--language help" work
* the ObjectSelector in the editor is eating CPU cycles like crazy due
to lack of clipping, minimap is also eating plenty of CPU due to its high object count
* Thumbnail loading is slow (likely .png overhead)
* do not keep software backstore for MapTiles, instead record the list of surfaces needed to generate it
* keep statistic on allocated Surfaces and FramebufferSurfaces
* remove pingus_debug_flags or find some use for it
* make a more powerfull liquid type that automatically aligns itself to the bottom level border
* datasets: core/, base/, add-on/ ?
* StatManager and new Config stuff should share code
* reduce the amount of new/delete's
* StartScreen has high CPU usage in delta mode (Diff to blame!)
* Remove support for line drawing
* forest level shows bug in DeltaRenderer
New Features
============
* split screen multiplayer
* keep highscores for levels (number saved and stuff like that)
* add clickable WorldObjs, that can be triggered by the user, not by a
Pingu
Wishlist:
=========
* levelset list should resize on window resize
* particle pingu explosions are rects, should be circles
(Vel(rand()%10, rand()%10) vs Vel(angle, length))
* Change current pause/forward behaviour:
- 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)
Animation and graphic issues:
=============================
* convert all Pingu animations to a proper indexed format so that
palette swap can be used in multiplayer
* 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 (para parameter from hotspots?)
* redesign main menu
* animate the exit flag
* rework the UI, either go glas-like or use the blackbord style
* X-Mas theme needs some more polish, to be done before X-Mas '08
* create jumper animation
Bugs:
=====
* GroundMap tiles are currently RGBA, while in reality they are just
RGB with a colorkey, room for optimization
* file parsing easily crashes or asserts on incorrect files
* Translation issues:
- The suffix showing which extra skill a Pingus has (e.g. [f] for Floater or
[c] for Climber). (will be fixed by climber gfx)
- b) The big sign on the 'Tutorial Island' image
* basher follows down slopes (feature?)
* paint climber
Unsorted:
=========
* Font::draw() origin only works properly for left, right and center, breaks with multiline text
* implement xschema-like language to check for syntax errors in the level files (partly done, needs documentation and proper integration)
* trap in one tutorial level with two exits is in background, should
be foreground (???)
* Wiimote support (libcwiid)
* 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
* pregenerate thumbnails for the editor, generating them takes to long (thumbnail loading takes long as well, need pack format)
Roadmap for Pingus 0.7.3
~~~~~~~~~~~~~~~~~~~~~~~~
New Features:
=============
* implement option menu (already started, not all options work yet)
* add cheats: all actions, unlimited actions, skip level, these must
be triggerable via maintainer-mode, not via commandline switch
* 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
* test wall-jump: maybe make it smaller then a normal jump
* make climber attach to wall after jump
Bugs:
=====
* resource system needs a rewrite/implementation
* 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
Wishlist Stuff:
===============
* Liquids/water is 32, others are 64, this is causing trouble with the
collision map
Undecided stuff:
================
* implemented input/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
Suggestion:
read_int("name", name, "Error Message")
* 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
* add drag&drop scrolling
* nuke button is unclean, other buttons not so great either -> repaint
Roadmap for Pingus Editor 0.7.3:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Important:
==========
* remove support for obsolete tags:
- liquid/speed
- hotpost/speed
- hotpost/parallax (replace with para-x, para-y)
* Pack some new levels: indiana
Medium Important:
=================
* implement proper tmpfile Support (save tmp levels to ~/.pingus/tmp/
for backup purpose in case of editor crash or so)
* Dialogs: Editor Properties: user name and email
* show an error message if save fails
Less Important:
===============
* add ability to scale surfaces to the level editor and level format
* keyboard shortcuts need to be implemented with input framework, but
how without support for keymaps?
* 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)
Older Stuff:
~~~~~~~~~~~~
* 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)
* fix author in all levels
* update email addrs and missing author fields in level files
* add better load-from-file support for hotspots, backgrounds, etc.
* pingus doesn't die when out-of-screen
* 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
* 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)
* 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
====================
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
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 #