Merge branch 'master' into save_ext

This commit is contained in:
Jonathan G Rennison
2017-04-01 01:10:21 +01:00
7 changed files with 94 additions and 42 deletions

View File

@@ -48,7 +48,7 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom
break;
case BM_BLACK_REMAP:
colour = 0;
if (*src != 0) *dst = 0;
break;
default:

View File

@@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :terreny propiet
# About OpenTTD window
STR_ABOUT_OPENTTD :{WHITE}Quant a l'OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer. Tots els drets reservats.
STR_ABOUT_VERSION :{BLACK}OpenTTD versió {REV}
STR_ABOUT_VERSION :{BLACK}Versió {REV} de l'OpenTTD
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 L'equip de l'OpenTTD
# Save/load game/scenario
@@ -2939,7 +2939,7 @@ STR_NEWGRF_BROKEN :{WHITE}El compo
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Un vehicle '{1:ENGINE}' ha canviat el seu estat de vagó amb potència mentre estava fora de la cotxera
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Un vehicle '{1:ENGINE}' ha canviat la seva llargada mentre estava fora del dipòsit
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Un vehicle '{1:ENGINE}' ha canviat la seva capacitat mentre estava fora del dipòsit o no s'estava canviant el tipus de càrrega a transportar
STR_BROKEN_VEHICLE_LENGTH :{WHITE}El tren '{VEHICLE}' de '{COMPANY}' té una llargada invàlida, probablement a causa de problemes amb els NewGRF. La partida podria dessincronitzar-se o fallar.
STR_BROKEN_VEHICLE_LENGTH :{WHITE}El tren «{VEHICLE}» propietat de «{COMPANY}» té una llargada invàlida, probablement a causa de problemes amb els NewGRF. La partida podria dessincronitzar-se o fallar.
STR_NEWGRF_BUGGY :{WHITE}El NewGRF '{0:STRING}' està donant informació incorrecta
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}La informació de càrrega/remodelació per '{1:ENGINE}' no encaixa amb la llista de compres després de la construcció. Això podria causar un mal funcionament de autorenova/-substitueix

View File

@@ -1003,7 +1003,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Velg mus
STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} ødelagt{P "" e} fil{P "" er}
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Ytterligere informasjon om det originale musikksettet
STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Mislytes med å hente en liste over støttede oppløsninger
STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Mislyktes med å hente en liste over støttede oppløsninger
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullskjermmodus mislyktes
# Custom currency window
@@ -1375,6 +1375,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Av
STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Venstre-klikk rulling: {STRING}
STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Tillat rulling av kartet ved å dra det med den venstre museknappen. Dette er spesielt nyttig når du bruker en berøringsskjerm
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Lukk vinduet med høyreklikk: {STRING}
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Lukker et vindu ved å høyreklikke i det. Deaktiverer verktøytipset med høyreklikk!
STR_CONFIG_SETTING_AUTOSAVE :Autolagring: {STRING}
STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Velg intervall mellom automatiske lagringer av spillet
@@ -1764,6 +1766,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Se etter
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Vis AI/Spillskript-innstillinger
STR_INTRO_TOOLTIP_QUIT :{BLACK}Avslutt 'OpenTTD'
STR_INTRO_BASESET :{BLACK}Det valgte innebygde grafikksettet mangler {NUM} sprite{P "" r}. Se etter oppdateringer for settet.
STR_INTRO_TRANSLATION :{BLACK}Denne oversettelsen mangler {NUM} streng{P "" er}. Vennligst hjelp til å gjøre OpenTTD bedre ved å bli med i oversettergruppen. For detaljer, sjekk readme.txt.
# Quit window
@@ -2593,6 +2596,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Flyplass
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Godtatte varer: {LTBLUE}
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Skinnetype: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Fartsgrense for jernbanespor: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Veiens fartsgrense: {LTBLUE}{VELOCITY}
@@ -2611,23 +2615,23 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbanespor me
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbanespor med utgangssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbanespor med kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbanespor med avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blokk- og forsignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbanespor med enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med blokk- og forsignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blokk- og utgangssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blokk- og kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbanespor med blokk- og kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blokk- og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blokk- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med for- og utgangssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane spor med for- og kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med for- og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbane spor med for- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor med utgangs- og kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med utgangs- og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med utgangs- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinasjon- og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinasjon- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med avanserte- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togstall
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbanespor med blokk- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med for- og utgangssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbanespor med for- og kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med forsignaler og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbanespor med for- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbanespor med utgangs- og kombinasjonssignaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbanespor med utgangs- og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbanespor med utgangs- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbanespor med kombinasjon- og avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbanespor med kombinasjon- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbanespor med avanserte- og enveis avanserte signaler
STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane-togstall
STR_LAI_ROAD_DESCRIPTION_ROAD :Vei
STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Vei med gatelykter
@@ -3296,6 +3300,11 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Trenger:
STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
############ range for requires ends
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}venter
STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING}
############ range for produces starts
STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING}
@@ -3364,6 +3373,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Fjern alle kjø
STR_GROUP_RENAME_CAPTION :{BLACK}Endre navn på gruppe
STR_GROUP_PROFIT_THIS_YEAR :Profitt i år:
STR_GROUP_PROFIT_LAST_YEAR :Profitt i fjor:
STR_GROUP_OCCUPANCY :Gjeldende bruk:
STR_GROUP_OCCUPANCY_VALUE :{NUM} %
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nye tog/vogner for jernbane
@@ -3396,6 +3409,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Alle varetyper
STR_PURCHASE_INFO_ALL_BUT :Alt utenom {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks trekkraft: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rekkevidde: {GOLD}{COMMA} ruter
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Flytype: {GOLD}{STRING}
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Liste over tog/vogner - klikk på tog/vogn for mer informasjon. Ctrl+klikk for å skjule/vise denne typen
STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Liste over kjøretøy - klikk på kjøretøy for mer informasjon. Ctrl+klikk for å skjule/vise kjøretøytypen
@@ -3530,6 +3544,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=neuter}magle
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Kostnad: {CURRENCY_LONG} Vekt: {WEIGHT_SHORT}{}Hastighet: {VELOCITY} Kraft: {POWER}{}Driftskostnader: {CURRENCY_LONG}/år{}Kapasitet: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Kostnad: {CURRENCY_LONG} Vekt: {WEIGHT_SHORT}{}Hastighet: {VELOCITY} Kraft: {POWER} Maks trekkraft: {6:FORCE}{}Vedlikehold: {4:CURRENCY_LONG}/år{}Kapasitet: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Kostnad: {CURRENCY_LONG} Maks hastighet: {VELOCITY}{}Kapasitet: {CARGO_LONG}{}Driftskostnader: {CURRENCY_LONG}/år
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Kostnad: {CURRENCY_LONG} Maks. hastighet: {VELOCITY}{}Flytype: {STRING}{}Kapasitet: {CARGO_LONG}, {CARGO_LONG}{}Driftskostnader: {CURRENCY_LONG}/år
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Kostnad: {CURRENCY_LONG} Maks. hastighet: {VELOCITY}{}Flytype: {STRING}{}Kapasitet: {CARGO_LONG}{}Driftskostnad: {CURRENCY_LONG}/år
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Kostnad: {CURRENCY_LONG} Maks. hastighet: {VELOCITY}{}Flytype: {STRING} Rekkevidde: {COMMA} ruter{}kapasitet: {CARGO_LONG}, {CARGO_LONG}{}Driftskostnader: {CURRENCY_LONG}/år
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Kostnad: {CURRENCY_LONG} Maks. hastighet: {VELOCITY}{}Flytype: {STRING} Rekkevidde: {COMMA} ruter{}Kapasitet: {CARGO_LONG}{}Driftskostnad: {CURRENCY_LONG}/år
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Erstatte {STRING} - {STRING}
@@ -3559,6 +3577,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikk de
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Veksle mellom tog- og vognerstatningsvinduet
STR_REPLACE_ENGINES :Lokomotiv
STR_REPLACE_WAGONS :Vogner
STR_REPLACE_ALL_RAILTYPE :Status: Mangler
STR_REPLACE_HELP_RAILTYPE :{BLACK}Velg jernbanetypen du vil bytte ut lokomotiv på
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Viser hvilket lokomotiv som overtar for det valgte lokomotivet på venstresiden
@@ -3651,6 +3670,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} år ({C
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} år ({COMMA})
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Maks hastighet: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. hastighet: {LTBLUE}{VELOCITY} {BLACK}Flytype: {LTBLUE}{STRING}
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Maks. hastighet: {LTBLUE}{VELOCITY} {BLACK}Flytype: {LTBLUE}{STRING} {BLACK}Rekkevidde: {LTBLUE}{COMMA} ruter
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Vekt: {LTBLUE}{WEIGHT_SHORT} {BLACK}Kraft: {LTBLUE}{POWER}{BLACK} Maks hastighet: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vekt: {LTBLUE}{WEIGHT_SHORT} {BLACK}Kraft: {LTBLUE}{POWER}{BLACK} Maks hastighet: {LTBLUE}{VELOCITY} {BLACK}Maks trekkraft: {LTBLUE}{FORCE}

View File

@@ -12,6 +12,7 @@
#include "../stdafx.h"
#include "../debug.h"
#include "../string_func.h"
#include "../core/alloc_func.hpp"
#include "../sound/sound_driver.hpp"
#include "../video/video_driver.hpp"
#include "../gfx_func.h"
@@ -42,9 +43,33 @@ const char *MusicDriver_ExtMidi::Start(const char * const * parm)
}
const char *command = GetDriverParam(parm, "cmd");
#ifndef MIDI_ARG
if (StrEmpty(command)) command = EXTERNAL_PLAYER;
#else
if (StrEmpty(command)) command = EXTERNAL_PLAYER " " MIDI_ARG;
#endif
/* Count number of arguments, but include 3 extra slots: 1st for command, 2nd for song title, and 3rd for terminating NULL. */
uint num_args = 3;
for (const char *t = command; *t != '\0'; t++) if (*t == ' ') num_args++;
this->params = CallocT<char *>(num_args);
this->params[0] = stredup(command);
/* Replace space with \0 and add next arg to params */
uint p = 1;
while (true) {
this->params[p] = strchr(this->params[p - 1], ' ');
if (this->params[p] == NULL) break;
this->params[p][0] = '\0';
this->params[p]++;
p++;
}
/* Last parameter is the song file. */
this->params[p] = this->song;
this->command = stredup(command);
this->song[0] = '\0';
this->pid = -1;
return NULL;
@@ -52,7 +77,8 @@ const char *MusicDriver_ExtMidi::Start(const char * const * parm)
void MusicDriver_ExtMidi::Stop()
{
free(command);
free(params[0]);
free(params);
this->song[0] = '\0';
this->DoStop();
}
@@ -91,11 +117,7 @@ void MusicDriver_ExtMidi::DoPlay()
close(0);
int d = open("/dev/null", O_RDONLY);
if (d != -1 && dup2(d, 1) != -1 && dup2(d, 2) != -1) {
#if defined(MIDI_ARG)
execlp(this->command, "extmidi", MIDI_ARG, this->song, (char*)0);
#else
execlp(this->command, "extmidi", this->song, (char*)0);
#endif
execvp(this->params[0], this->params);
}
_exit(1);
}

View File

@@ -16,7 +16,7 @@
class MusicDriver_ExtMidi : public MusicDriver {
private:
char *command;
char **params;
char song[MAX_PATH];
pid_t pid;

View File

@@ -313,6 +313,15 @@ struct NewsWindow : Window {
{
StringID str = STR_NULL;
switch (widget) {
case WID_N_CAPTION: {
/* Caption is not a real caption (so that the window cannot be moved)
* thus it doesn't get the default sizing of a caption. */
Dimension d2 = GetStringBoundingBox(STR_NEWS_MESSAGE_CAPTION);
d2.height += WD_CAPTIONTEXT_TOP + WD_CAPTIONTEXT_BOTTOM;
*size = maxdim(*size, d2);
return;
}
case WID_N_MGR_FACE:
*size = maxdim(*size, GetSpriteSize(SPR_GRADIENT));
break;

View File

@@ -104,20 +104,20 @@ typedef TinyEnumT<Trackdir> TrackdirByte;
* direction (corresponding to the Track enum) and 8-13 in the other direction.
*/
enum TrackdirBits {
TRACKDIR_BIT_NONE = 0x0000, ///< No track build
TRACKDIR_BIT_X_NE = 0x0001, ///< Track x-axis, direction north-east
TRACKDIR_BIT_Y_SE = 0x0002, ///< Track y-axis, direction south-east
TRACKDIR_BIT_UPPER_E = 0x0004, ///< Track upper, direction east
TRACKDIR_BIT_LOWER_E = 0x0008, ///< Track lower, direction east
TRACKDIR_BIT_LEFT_S = 0x0010, ///< Track left, direction south
TRACKDIR_BIT_RIGHT_S = 0x0020, ///< Track right, direction south
TRACKDIR_BIT_NONE = 0U, ///< No track build
TRACKDIR_BIT_X_NE = 1U << TRACKDIR_X_NE, ///< Track x-axis, direction north-east
TRACKDIR_BIT_Y_SE = 1U << TRACKDIR_Y_SE, ///< Track y-axis, direction south-east
TRACKDIR_BIT_UPPER_E = 1U << TRACKDIR_UPPER_E, ///< Track upper, direction east
TRACKDIR_BIT_LOWER_E = 1U << TRACKDIR_LOWER_E, ///< Track lower, direction east
TRACKDIR_BIT_LEFT_S = 1U << TRACKDIR_LEFT_S, ///< Track left, direction south
TRACKDIR_BIT_RIGHT_S = 1U << TRACKDIR_RIGHT_S, ///< Track right, direction south
/* Again, note the two missing values here. This enables trackdir -> track conversion by doing (trackdir & 0xFF) */
TRACKDIR_BIT_X_SW = 0x0100, ///< Track x-axis, direction south-west
TRACKDIR_BIT_Y_NW = 0x0200, ///< Track y-axis, direction north-west
TRACKDIR_BIT_UPPER_W = 0x0400, ///< Track upper, direction west
TRACKDIR_BIT_LOWER_W = 0x0800, ///< Track lower, direction west
TRACKDIR_BIT_LEFT_N = 0x1000, ///< Track left, direction north
TRACKDIR_BIT_RIGHT_N = 0x2000, ///< Track right, direction north
TRACKDIR_BIT_X_SW = 1U << TRACKDIR_X_SW, ///< Track x-axis, direction south-west
TRACKDIR_BIT_Y_NW = 1U << TRACKDIR_Y_NW, ///< Track y-axis, direction north-west
TRACKDIR_BIT_UPPER_W = 1U << TRACKDIR_UPPER_W, ///< Track upper, direction west
TRACKDIR_BIT_LOWER_W = 1U << TRACKDIR_LOWER_W, ///< Track lower, direction west
TRACKDIR_BIT_LEFT_N = 1U << TRACKDIR_LEFT_N, ///< Track left, direction north
TRACKDIR_BIT_RIGHT_N = 1U << TRACKDIR_RIGHT_N, ///< Track right, direction north
TRACKDIR_BIT_MASK = 0x3F3F, ///< Bitmask for bit-operations
INVALID_TRACKDIR_BIT = 0xFFFF, ///< Flag for an invalid trackdirbit value
};