# Todo List

Global AircraftController
  De-mystify the cur_speed values for helicopter rotors.

Global CanEnterTileOwnerCheck
  This function should be used in other places than just NPF, maybe moved to another file too.

Global CmdBuildRoadDepot
  When checking for the tile slope, distingush between "Flat land required" and "land sloped in wrong direction"

Global CmdBuildSingleSignal
  p2 should be replaced by two bits for "along" and "against" the track.

Global CmdBuildTrainDepot
  When checking for the tile slope, distingush between "Flat land required" and "land sloped in wrong direction"

Global CmdBuyCompany
  currently this only works for AI companies

Global CmdCompanyCtrl
  In the case of p1=0, create new company, the clientID of the new client is in parameter p2. This parameter is passed in at function DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND) on the server itself. First of all this is unbelievably ugly; second of all, well, it IS ugly! Someone fix this up :) So where to fix?

Global CmdRestoreOrderIndex
  Unfortunately you cannot safely restore the unitnumber or the old vehicle as far as I can see. We can store it in BackuppedOrders, and restore it, but but we have no way of seeing it has been tampered with or not, as we have no legit way of knowing what that ID was.
  If we do want to backup/restore it, just add UnitID uid to BackuppedOrders, and restore it as parameter 'y' (ugly hack I know) for example. "v->unitnumber = y;"

Global CommonRaiseLowerBigLand
  : Incorporate into game itself to allow for ingame raising/lowering of larger chunks at the same time OR remove altogether, as we have 'level land' ?

Class CompanyFinancesWindow
  money_width should be calculated dynamically.

Global CYapfCostRailT::m_max_cost
  fix maximum cost failing with caching (e.g. FS#2900)

Global DEF_SERVER_RECEIVE_COMMAND
  CMD_COMPANY_CTRL with p1 = 0 announces a new company to the server. To give the company the correct ID, the server injects p2 and executes the command. Any other p1 is prohibited. Pretty ugly and should be redone together with its function.

Global EditorTerraformClick_Dynamite
  Merge with terraform_gui.cpp (move there) after I have cooled down at its braindeadness and changed OnButtonClick to include the widget as well in the function declaration. Post 0.4.0 - Darkvater

Global MusicDriver_QtMidi::Start (const char *const *param)
  Give better error messages by inspecting error codes returned by `Gestalt()` and `EnterMovies()`. Needs changes in InitQuickTimeIfNeeded.

Global NPFHash
  Think of a better hash.

Global NWidgetCore::FindScrollbar (Window *w, bool allow_next=true) const =0
  This implementation uses the constraint that a scrollbar must be the next item in the Window::nested_array, and the scrollbar data is stored in the Window structure (Window::vscroll, Window::vscroll2, and Window::hscroll). Alternative light-weight implementations may be considered, eg by sub-classing a canvas-like widget, and/or by having an explicit link between the scrollbar and the widget being scrolled.

Class NWidgetViewport
  Class derives from NWidgetCore, but does not use colour, widget_data, or tool_tip.

Global PropertyID
  Currently the list only contains properties which are used more than once in the code. I.e. they are available for callback 0x36.

Global RailVehicleChangeInfo
  Air drag for trains.

Global SetDirtyBlocks
  The name of the function should be called like `AddDirtyBlock` as it neither set a dirty rect nor add several dirty rects although the function name is in plural. (Progman)

Global ShipVehicleChangeInfo
  Speed fractions for ships on oceans and canals

Global SlError
  this was used to have a central place to handle errors, but it is pretty ugly, and seriously interferes with any multithreaded approaches

File sprites.h
  Split the "Sprites" enum into smaller chunks and document them

File tunnelbridge_cmd.cpp
  seperate this file into two