TODO.wiki
author Wuzzy
Thu, 25 May 2023 13:04:05 +0000
changeset 2231 f00c578955f7
parent 2179 838ab168a110
child 2253 1bd9936f6b01
permissions -rw-r--r--
LuaEvents: remove version numbers

#summary Where to find possible task, todos, fixmes and new ideas.
#labels Featured,Phase-Requirements,Phase-Design,Phase-Implementation,Phase-QA,Phase-Support

= To-do list =

<wiki:toc max_depth="2" />

== Introduction ==

Welcome! If you are reading this page you might be wondering how you can help the Hedgewars project! Fear no more, we've set up a good list of ideas that you might tackle while getting to know the sources!

As always, we'll be glad to help you in this quest! Just join our IRC channel and ask the devs directly! The possible ideas are divided by category and some might be easier than others: just pick the one you feel most confident with.

== Easy hacks ==

Just want to get your hands dirty? Pick one of your choice!

  * Perform some code cleanup, engine and frontend really need some! `Grep` for TODO and FIXME and you'll find plenty of examples. File loading, image flag handling and various little improvements just wait for you.
  * Make our AI use any weapon of your choice. Check out the `uAI*.pas` files and see how the current weapons are handled.
  * Write a simple shell script (`bash`, `ruby`, `perl`, `python`, `awk`...) to update the localization strings for iOS and propagate the diff to all the localized files. This task doesn't require coding or having an i-Device, just basic shell scripting.
  * Make a cross-platform tool (for instance a script) that identifies new phrases in our mission, training and gameplay scripts and adds them (marked untranslated) into our `Lua` localization files.
  * Run `Valgrind` on engine, report the  most used functions and optimize them so that performance increases.
  * Use the Qt macro `QtPrintable` everywhere instead of looping through various string methods.
  * Document compiler flags: just add a little comment near each flag explaining its use.
  * Add a little weapon description in the configuration page, through the `setWhatsThis()` method.
  * Document video flags, in video recording section.


== Code ==

For those not afraid of the dark, dive in and tackle a complex project!

=== AI ===
 * Teach the AI how to use:
  * Most important things
   * Hellish handgrenade
   * Napalm
  * Weapons
   * Ballgun
   * Birdy
   * Blowtorch
   * Flamethrower
   * Freezer
   * Pickhammer
  * Utilities
   * Structures
    * Girder
    * Rubber
    * Landspray
   * Movement
    * Flying saucer
    * Rope
    * Parachute
    * Portable portal device
    * Teleportation

 * Better weapon implementation needed:
  * Grenade-like weapons: Calculate bounces (currently, only direct shots without any bounces are supported)
  * Mine, dynamite: Place on ground and run away (currently, only dropping from safe height is supported)
  * Mine Strike: Calculate bounces (currently, this weapon is not used if mines time is anything but 0, to avoid unpredictable behavior)
  * RC Plane: Implement steering and dropping bombs (currently, can only fly in straight line)
  * Sine Gun: Check knockback
  * Old Limburger: Throw slightly to the left or right of target, depending on wind. Avoid poisoning friends
  * Seduction: Implement more ways to fail, be more careful with shoving friends
  * Minigun: Simulate bullets, replace RateShotgun, move aim during shooting
  * Use low gravity and invulnerable to find more spots to walk to
  * Resurrector: Improve rating system

See also: https://issues.hedgewars.org/show_bug.cgi?id=292


=== Tools ===
  * Refactor the frontend networking layer into library calls from hwengine, in a similar fashion to what's done on iOS and Android, using Qt framebuffers
  * Create an easy-to-use theme editor, outlining all the necessary files for our themes
  * Implement an handicap system allowing for increased difficulty on some teams instead of on the whole match
  * If building server fails, try running the Cabal dependencies first
  * Allow themes to have more than one music file


=== GUI improvements ===
  * Enable private messages in our lobby
  * Allow kicking with reason
  * Make the preferences that are modifiable from engine (eg. volume) update the ones specified in the frontend, using a new network message
  * Rework the draw-map functions, adding different brush sizes, brush types and something new
  * Enable some commands while in frontend: for example `/leave` ( = `/part`  - for leaving room),, `/exit` (closes hedgewars), `/addFriend`, `/removeFriend`, `/ignore`, `/unignore`
  * Add checkboxes for selecting the best rendering mode in addition to the Quality slider
  * Lazy load previews, speed up frontend launch and compute previews only when necessary


=== Graphics ===
  * Set up a wifi protocol so that tablets can draw maps and send it to the drawn maps of Hedgewars
  * Select the stereo renderer at runtime, either with a keybind or with a menu


=== Engine ===
  * Allow participants in a game to view weapon sets and schemes before starting the game. This task could be carried out by showing an overlay window when mouse is over the scheme or weapon entries
  * Change the loading screen to show participating teams/players (and maybe even all the hogs if space is available
  * Add the ability for themes to have stars high above the ground (comparable to clouds)
  * Implement a better, faster land generation: for more details, visit http://accidentalnoise.sourceforge.net/minecraftworlds.html
  * Allow for flipped maps


=== Mobile ===
  * Implement preferences/options in the Android port, basically allow the existing preferences options from the desktop version to the port using Android shared preferences
  * Better integrate CMake with the Android build, instead of using the autotools version


== Documentation ==

=== Doxygen ===

  * Add Doxygen documentation to server for the Haskell sources
  * Add Doxygen documentation to ios frontend for the Objective-C sources
  * Add Doxygen documentation to engine for the Free Pascal sources
  * Add Doxygen documentation to android port for the Java sources

=== Various ===

  * Document the interaction of engine/frontend/server network protocol
  * Document how the engine launches a game, from setting up the window, to updating the OpenGL renderer, from loading up contents, to cleaning up memory
  * Document the format of the demo and save files

== Q/A ==
=== Engine testing ===
Write Lua scripts to automatically test some engine features. See [EngineTestCases].

=== Testing framework ===
  * Add an expandable testing module so that we can trigger main server functions and check their return values
  * Add an expandable testing module so that we can trigger main frontend functions and check their return values
  * Add an expandable testing module so that we can trigger main engine functions and check their return values

=== Other tests ===

  * Unify the translation files in something more usable, reducing the number of files and the repeated phrases


== Translation ==

Pick a language of your choice! There is certainly need of an update or a revision or even a completely new language. Before each release, we generally announce a so-called “string freeze”, a period of times in which we promise not to update or change any English texts. This is the best period to translate, but you could translate earlier as well, but please keep in mind that your translations will become outdated then.

See [Translations] to learn more.

== Contact ==

The best way to get in touch with the devs is to join our IRC on Freenode (#hedgewars) and to interact with everyone there. Please be patient as not always there are discussions going on there.