Loading
#openttdcoop - Paste
Archives
Trending
Docs
Login
ABAP
ActionScript
ActionScript 3
Ada
AIMMS3
ALGOL 68
Apache configuration
AppleScript
Apt sources
ARM ASSEMBLER
ASM
ASP
asymptote
Autoconf
Autohotkey
AutoIt
AviSynth
awk
BASCOM AVR
Bash
Basic4GL
BibTeX
BlitzBasic
bnf
Boo
Brainfuck
C
C#
C (LoadRunner)
C (Mac)
C (WinAPI)
C++
C++ (Qt)
C++ (WinAPI)
CAD DCL
CAD Lisp
CFDG
ChaiScript
Chapel
CIL
Clojure
CMake
COBOL
CoffeeScript
ColdFusion
CSS
Cuesheet
D
Dart
DCL
DCPU-16 Assembly
DCS
Delphi
Diff
DIV
DOS
dot
E
ECMAScript
Eiffel
eMail (mbox)
EPC
Erlang
Euphoria
EZT
F#
Falcon
FO (abas-ERP)
Formula One
Fortran
FreeBasic
FreeSWITCH
GADV 4CS
GAMBAS
GDB
genero
Genie
glSlang
GML
GNU/Octave
GNU Gettext
GNU make
Gnuplot
Go
Groovy
GwBasic
Haskell
Haxe
HicEst
HQ9+
HTML
HTML5
Icon
INI
Inno
INTERCAL
Io
ISPF Panel
J
Java
Java(TM) 2 Platform Standard Edition 5.0
Javascript
JCL
jQuery
KiXtart
KLone C
KLone C++
LaTeX
LDIF
Liberty BASIC
Lisp
LLVM Intermediate Representation
Locomotive Basic
Logtalk
LOLcode
Lotus Notes @Formulas
LotusScript
LScript
LSL2
Lua
MagikSF
MapBasic
Matlab M
Microchip Assembler
Microsoft Registry
mIRC Scripting
MMIX
Modula-2
Modula-3
MOS 6502 (6510) ACME Cross Assembler format
MOS 6502 (6510) Kick Assembler format
MOS 6502 (6510) TASM/64TASS 1.46 Assembler format
Motorola 68000 - HiSoft Devpac ST 2 Assembler format
Motorola 68000 Assembler
MXML
MySQL
Nagios
NetRexx
newlisp
nginx
Nimrod
NML NewGRF Meta Language
NSIS
Oberon-2
Objeck Programming Language
Objective-C
OCaml
OCaml (brief)
ooRexx
OpenBSD Packet Filter
OpenOffice.org Basic
Oracle 8 SQL
Oracle 11 SQL
Oxygene
OZ
ParaSail
PARI/GP
Pascal
PCRE
per
Perl
Perl 6
PHP
PHP (brief)
PIC16
Pike
Pixel Bender 1.0
PL/I
PL/SQL
PostgreSQL
PostScript
POVRAY
PowerBuilder
PowerShell
ProFTPd configuration
Progress
Prolog
PROPERTIES
ProvideX
Puppet
PureBasic
Python
Python for S60
q/kdb+
QBasic/QuickBASIC
QML
R / S+
Racket
Rails
RBScript
REBOL
rexx
robots.txt
RPM Specification File
Ruby
Rust
SAS
Scala
Scheme
SciLab
SCL
sdlBasic
Smalltalk
Smarty
SPARK
SPARQL
SQL
Squirrel Script
Squirrel Script with OpenTTD AI/GS
StandardML
StoneScript
SystemVerilog
T-SQL
TCL
Tera Term Macro
Text
thinBasic
TypoScript
Unicon (Unified Extended Dialect of Icon)
Uno Idl
Unreal Script
UPC
Urbi
Vala
vb.net
VBScript
Vedit macro language
Verilog
VHDL
Vim Script
Visual Basic
Visual Fox Pro
Visual Prolog
Whitespace
Whois (RPSL format)
Winbatch
X++
XBasic
XML
Xorg configuration
YAML
ZiLOG Z80 Assembler
ZXBasic
Index: source.list =================================================================== --- source.list (revision 22430) +++ source.list (working copy) @@ -302,6 +302,7 @@ rail_gui.h rail_type.h rev.h +road.h road_cmd.h road_func.h road_gui.h @@ -659,6 +660,7 @@ table/pricebase.h table/railtypes.h table/road_land.h +table/roadtypes.h table/roadveh_movement.h ../objs/settings/table/settings.h table/sprites.h Index: src/bridge_map.h =================================================================== --- src/bridge_map.h (revision 22431) +++ src/bridge_map.h (working copy) @@ -116,30 +116,30 @@ SetBit(_m[t].type, 2 + a); } -/** - * Set wether a bridge has a catenary or not. - * @param t the tile with the bridge - * @pre IsBridgeTile(t) - */ -static inline void SetBridgeRoadTramCatenary(TileIndex t, bool b) -{ - assert(IsBridgeTile(t)); - SB(_m[t].m1, 7, 1, b ? 1 : 0); -} - -/** - * Checks if given bridge has catenary bit. - * @param t the bridge ramp tile - * @pre IsBridgeTile(t) - * @return True if bridge has catenary bit set - */ -static inline bool HasBridgeRoadTramCatenary(TileIndex t) -{ - assert(IsBridgeTile(t)); - return GB(_m[t].m1, 7, 1) != 0; +/** + * Set wether a bridge has a catenary or not. + * @param t the tile with the bridge + * @pre IsBridgeTile(t) + */ +static inline void SetBridgeRoadTramCatenary(TileIndex t, bool b) +{ + assert(IsBridgeTile(t)); + SB(_m[t].m1, 7, 1, b ? 1 : 0); } /** + * Checks if given bridge has catenary bit. + * @param t the bridge ramp tile + * @pre IsBridgeTile(t) + * @return True if bridge has catenary bit set + */ +static inline bool HasBridgeRoadTramCatenary(TileIndex t) +{ + assert(IsBridgeTile(t)); + return GB(_m[t].m1, 7, 1) != 0; +} + +/** * Generic part to make a bridge ramp for both roads and rails. * @param t the tile to make a bridge ramp * @param o the new owner of the bridge ramp Index: src/engine_type.h =================================================================== --- src/engine_type.h (revision 22430) +++ src/engine_type.h (working copy) @@ -14,6 +14,7 @@ #include "economy_type.h" #include "rail_type.h" +#include "road_type.h" #include "cargo_type.h" #include "date_type.h" #include "sound_type.h" @@ -123,6 +124,7 @@ uint8 air_drag; ///< Coefficient of air drag byte visual_effect; ///< Bitstuffed NewGRF visual effect data byte shorten_factor; ///< length on main map for this type is 8 - shorten_factor + RoadTypeByte roadtype; }; /** Index: src/lang/english.txt =================================================================== --- src/lang/english.txt (revision 22430) +++ src/lang/english.txt (working copy) @@ -2407,6 +2407,9 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Toggle build/remove for road construction STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Toggle build/remove for tramway construction +STR_ROAD_NAME_ROAD :Road +STR_ROAD_NAME_TRAM :Tramway + # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Road Depot Orientation STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Select road vehicle depot orientation Index: src/road.cpp =================================================================== --- src/road.cpp (revision 22430) +++ src/road.cpp (working copy) @@ -152,3 +152,29 @@ return rt; } + +/** + * Get the road type for a given label. + * @param label the roadtype label. + * @param allow_alternate_labels Search in the alternate label lists as well. + * @return the roadtype. + */ +RoadType GetRoadTypeByLabel(RoadTypeLabel label, bool allow_alternate_labels) +{ + /* Loop through each road type until the label is found */ + for (RoadType r = ROADTYPE_BEGIN; r != ROADTYPE_END; r++) { + const RoadtypeInfo *rti = GetRoadTypeInfo(r); + if (rti->label == label) return r; + } + + if (allow_alternate_labels) { + /* Test if any road type defines the label as an alternate. */ + for (RoadType r = ROADTYPE_BEGIN; r != ROADTYPE_END; r++) { + const RoadtypeInfo *rti = GetRoadTypeInfo(r); + if (rti->alternate_labels.Contains(label)) return r; + } + } + + /* No matching label was found, so it is invalid */ + return INVALID_ROADTYPE; +} Index: src/road.h =================================================================== --- src/road.h (nonexistent) +++ src/road.h (working copy) @@ -0,0 +1,175 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file road.h Road specific functions. */ + +#ifndef ROAD_H +#define ROAD_H + +#include "road_type.h" + +/** Roadtype flags. Starts with RO instead of R because R is used for roads */ +enum RoadTypeFlags { + ROTF_CATENARY = 7, ///< Bit number for adding catenary + + ROTFB_NONE = 0, ///< All flags cleared. + ROTFB_CATENARY = 1 << ROTF_CATENARY, ///< Value for drawing a catenary. +}; +DECLARE_ENUM_AS_BIT_SET(RoadTypeFlags) + +/** List of road type labels. */ +typedef SmallVector<RoadTypeLabel, 4> RoadTypeLabelList; + +struct RoadtypeInfo { + struct { + StringID name; ///< Name of this rail type. + StringID toolbar_caption; ///< Caption in the construction toolbar GUI for this rail type. + StringID menu_text; ///< Name of this rail type in the main toolbar dropdown. + StringID build_caption; ///< Caption of the build vehicle GUI for this rail type. + StringID replace_text; ///< Text used in the autoreplace GUI. + StringID new_loco; ///< Name of an engine for this type of rail in the engine preview GUI. + } strings; ///< Strings associated with the rail type. + + + /** bitmask to the OTHER roadtypes on which a vehicle of THIS roadtype generates power */ + RoadTypes powered_roadtypes; + + /** bitmask to the OTHER roadtypes on which a vehicle of THIS roadtype can physically travel */ + RoadTypes compatible_roadtypes; + + /** + * Bridge offset + */ + SpriteID bridge_offset; + + /** + * Original roadtype number to use when drawing non-newgrf roadtypes, or when drawing stations. + */ + byte fallback_roadtype; + + /** + * Multiplier for curve maximum speed advantage + */ + byte curve_speed; + + /** + * Bit mask of road type flags + */ + RoadTypeFlags flags; + + /** + * Cost multiplier for building this road type + */ + uint16 cost_multiplier; + + /** + * Cost multiplier for maintenance of this road type + */ + uint16 maintenance_multiplier; + + /** + * Maximum speed for vehicles travelling on this road type + */ + uint16 max_speed; + + /** + * Unique 32 bit road type identifier + */ + RoadTypeLabel label; + + /** + * Road type labels this type provides in addition to the main label. + */ + RoadTypeLabelList alternate_labels; + + /** + * Colour on mini-map + */ + byte map_colour; + + /** + * Introduction date. + * When #INVALID_DATE or a vehicle using this roadtype gets introduced earlier, + * the vehicle's introduction date will be used instead for this roadtype. + * The introduction at this date is furthermore limited by the + * #introduction_required_types. + */ + Date introduction_date; + + /** + * Bitmask of roadtypes that are required for this roadtype to be introduced + * at a given #introduction_date. + */ + RoadTypes introduction_required_roadtypes; + + /** + * Bitmask of which other roadtypes are introduced when this roadtype is introduced. + */ + RoadTypes introduces_roadtypes; + + /** + * The sorting order of this roadtype for the toolbar dropdown. + */ + byte sorting_order; +}; + +/** + * Returns a pointer to the Roadtype information for a given roadtype + * @param roadtype the road type which the information is requested for + * @return The pointer to the RoadtypeInfo + */ +static inline const RoadtypeInfo *GetRoadTypeInfo(RoadType roadtype) +{ + extern RoadtypeInfo _roadtypes[ROADTYPE_END]; + assert(roadtype < ROADTYPE_END); + return &_roadtypes[roadtype]; +} + +/** + * Checks if an engine of the given RoadType can drive on a tile with a given + * RoadType. This would normally just be an equality check, but for electrified + * roads (which also support non-electric vehicles). + * @return Whether the engine can drive on this tile. + * @param vehicletype The RoadType of the engine we are considering. + * @param tiletype The RoadType of the tile we are considering. + */ +static inline bool IsCompatibleRoad(RoadType vehicletype, RoadType tiletype) +{ + return HasBit(GetRoadTypeInfo(vehicletype)->compatible_roadtypes, tiletype); +} + +/** + * Checks if an engine of the given RoadType got power on a tile with a given + * RoadType. This would normally just be an equality check, but for electrified + * roads (which also support non-electric vehicles). + * @return Whether the engine got power on this tile. + * @param vehicletype The RoadType of the engine we are considering. + * @param tiletype The RoadType of the tile we are considering. + */ +static inline bool HasPowerOnRoad(RoadType vehicletype, RoadType tiletype) +{ + return HasBit(GetRoadTypeInfo(vehicletype)->powered_roadtypes, tiletype); +} + +RoadType GetRoadTypeByLabel(RoadTypeLabel label, bool allow_alternate_labels = true); + +void ResetRoadTypes(); +void InitRoadTypes(); +RoadType AllocateRoadType(RoadTypeLabel label); + +extern RoadType _sorted_roadtypes[ROADTYPE_END]; +extern uint8 _sorted_roadtypes_size; + +/** + * Loop header for iterating over roadtypes, sorted by sortorder. + * @param var Roadtype. + */ +#define FOR_ALL_SORTED_ROADTYPES(var) for (uint8 index = 0; index < _sorted_roadtypes_size && (var = _sorted_roadtypes[index], true) ; index++) + +#endif /* ROAD_H */ Index: src/road_cmd.cpp =================================================================== --- src/road_cmd.cpp (revision 22431) +++ src/road_cmd.cpp (working copy) @@ -37,10 +37,96 @@ #include "company_gui.h" #include "table/strings.h" +#include "table/roadtypes.h" #include "safeguards.h" + +RoadtypeInfo _roadtypes[ROADTYPE_END]; +RoadType _sorted_roadtypes[ROADTYPE_END]; +uint8 _sorted_roadtypes_size; + +assert_compile(sizeof(_original_roadtypes) <= sizeof(_roadtypes)); + /** + * Reset all road type information to its default values. + */ +void ResetRoadTypes() +{ + memset(_roadtypes, 0, sizeof(_roadtypes)); + memcpy(_roadtypes, _original_roadtypes, sizeof(_original_roadtypes)); +} + +/** + * Compare roadtypes based on their sorting order. + * @param first The roadtype to compare to. + * @param second The roadtype to compare. + * @return True iff the first should be sorted before the second. + */ +static int CDECL CompareRoadTypes(const RoadType *first, const RoadType *second) +{ + return GetRoadTypeInfo(*first)->sorting_order - GetRoadTypeInfo(*second)->sorting_order; +} + +/** + * Resolve sprites of custom road types + * TODO: Sprite structure + */ +void InitRoadTypes() +{ + //for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { + // RoadtypeInfo *rti = &_roadtypes[rt]; + // ResolveRoadTypeGUISprites(rti); + //} + + _sorted_roadtypes_size = 0; + for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { + if (_roadtypes[rt].label != 0) { + _sorted_roadtypes[_sorted_roadtypes_size++] = rt; + } + } + QSortT(_sorted_roadtypes, _sorted_roadtypes_size, CompareRoadTypes); +} + +/** + * Allocate a new road type label + * TODO: newgrf.cpp function RoadTypeReserveInfo + */ +RoadType AllocateRoadType(RoadTypeLabel label) +{ + for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { + RoadtypeInfo *rti = &_roadtypes[rt]; + + if (rti->label == 0) { + /* Set up new road type */ + memcpy(rti, &_roadtypes[ROADTYPE_ROAD], sizeof(*rti)); + rti->label = label; + /* Clear alternate label list. Can't use Reset() here as that would free + * the data pointer of ROADTYPE_ROAD and not our new road type. */ + new (&rti->alternate_labels) RoadTypeLabelList; + + /* Make us compatible with ourself. */ + rti->powered_roadtypes = (RoadTypes)(1 << rt); + rti->compatible_roadtypes = (RoadTypes)(1 << rt); + + /* We also introduce ourself. */ + rti->introduces_roadtypes = (RoadTypes)(1 << rt); + + /* Default sort order; order of allocation, but with some + * offsets so it's easier for NewGRF to pick a spot without + * changing the order of other (original) road types. + * The << is so you can place other roadtypes in between the + * other roadtypes, the 7 is to be able to place something + * before the first (default) road type. */ + rti->sorting_order = rt << 4 | 7; + return rt; + } + } + + return INVALID_ROADTYPE; +} + +/** * Verify whether a road vehicle is available. * @return \c true if at least one road vehicle is available, \c false if not */ Index: src/road_gui.cpp =================================================================== --- src/road_gui.cpp (revision 22430) +++ src/road_gui.cpp (working copy) @@ -29,6 +29,7 @@ #include "hotkeys.h" #include "road_gui.h" #include "zoom_func.h" +#include "engine_base.h" #include "widgets/road_widget.h" @@ -1116,3 +1117,46 @@ _road_depot_orientation = DIAGDIR_NW; _road_station_picker_orientation = DIAGDIR_NW; } + +/** + * Create a drop down list for all the road types of the local company. + * @param for_replacement Whether this list is for the replacement window. + * @return The populated and sorted #DropDownList. + * + * TODO: see rail_gui.cpp/GetRailTypeDropDownList() to complete the features for this function + */ +DropDownList *GetRoadTypeDropDownList(bool for_replacement) +{ + /*** Test only, move to NewGRF spec! ***/ + ResetRoadTypes(); + InitRoadTypes(); + /*** Test only, move to NewGRF spec! ***/ + + const Company *c = Company::Get(_local_company); + DropDownList *list = new DropDownList(); + + RoadTypes used_roadtypes = ROADTYPES_NONE; + Engine *e; + FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; + + used_roadtypes |= GetRoadTypeInfo(HasBit(e->info.misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD)->introduces_roadtypes; + break; + } + + RoadType rt; + FOR_ALL_SORTED_ROADTYPES(rt) { + /* If it's not used ever, don't show it to the user. */ + if (!HasBit(used_roadtypes, rt)) continue; + + const RoadtypeInfo *rti = GetRoadTypeInfo(rt); + + StringID str = for_replacement ? rti->strings.replace_text : (rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING); + DropDownListParamStringItem *item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_roadtypes, rt)); + item->SetParam(0, rti->strings.menu_text); + item->SetParam(1, rti->max_speed); + *list->Append() = item; + } + + return list; +} Index: src/road_gui.h =================================================================== --- src/road_gui.h (revision 22430) +++ src/road_gui.h (working copy) @@ -15,9 +15,11 @@ #include "road_type.h" #include "tile_type.h" #include "direction_type.h" +#include "widgets/dropdown_type.h" struct Window *ShowBuildRoadToolbar(RoadType roadtype); struct Window *ShowBuildRoadScenToolbar(); void ConnectRoadToStructure(TileIndex tile, DiagDirection direction); +DropDownList *GetRoadTypeDropDownList(bool for_replacement = false); #endif /* ROAD_GUI_H */ Index: src/road_map.h =================================================================== --- src/road_map.h (revision 22431) +++ src/road_map.h (working copy) @@ -17,6 +17,7 @@ #include "rail_type.h" #include "road_func.h" #include "tile_map.h" +#include "road.h" /** The different types of road tiles. */ @@ -305,7 +306,7 @@ */ static inline bool HasCatenary(TileIndex t) { - return GB(_m[t].m1, 7, 1) != 0; + return GB(_m[t].m1, ROTF_CATENARY, 1) != 0; } /** Index: src/road_type.h =================================================================== --- src/road_type.h (revision 22430) +++ src/road_type.h (working copy) @@ -14,6 +14,11 @@ #include "core/enum_type.hpp" +typedef uint32 RoadTypeLabel; + +static const RoadTypeLabel ROAD_TYPE_ROAD = 'ROAD'; +static const RoadTypeLabel ROAD_TYPE_TRAM = 'TRAM'; + /** * The different roadtypes we support * @@ -28,6 +33,7 @@ }; DECLARE_POSTFIX_INCREMENT(RoadType) template <> struct EnumPropsT<RoadType> : MakeEnumPropsT<RoadType, byte, ROADTYPE_BEGIN, ROADTYPE_END, INVALID_ROADTYPE, 2> {}; +typedef TinyEnumT<RoadType> RoadTypeByte; /** * The different roadtypes we support, but then a bitmask of them Index: src/table/engines.h =================================================================== --- src/table/engines.h (revision 22430) +++ src/table/engines.h (working copy) @@ -653,104 +653,109 @@ * @param f capacity (persons, bags, tons, pieces, items, cubic metres, ...) * @param g weight (1/4 ton) * @param h power (10 hp) + * @param i roadtype * Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76 * Air drag value depends on the top speed of the vehicle. */ -#define ROV(a, b, c, d, e, f, g, h) { a, b, c, PR_RUNNING_ROADVEH, d, e, f, g, h, 76, 0, VE_DEFAULT, 0 } +#define ROV(a, b, c, d, e, f, g, h, i) { a, b, c, PR_RUNNING_ROADVEH, d, e, f, g, h, 76, 0, VE_DEFAULT, 0, i } +#define R ROADTYPE_ROAD +#define T ROADTYPE_TRAM static const RoadVehicleInfo _orig_road_vehicle_info[] = { /* image_index sfx max_speed power - * | cost_factor | | capacity | - * | | running_cost | | weight - * | | | | | | | |*/ - ROV( 0, 120, 91, SND_19_BUS_START_PULL_AWAY, 112, 31, 42, 9), // 0 MPS Regal Bus - ROV( 17, 140, 128, SND_1C_TRUCK_START_2, 176, 35, 60, 12), // 1 Hereford Leopard Bus - ROV( 17, 150, 178, SND_1B_TRUCK_START, 224, 37, 70, 15), // 2 Foster Bus - ROV( 34, 160, 240, SND_1B_TRUCK_START, 255, 40, 100, 25), // 3 Foster MkII Superbus - ROV( 51, 120, 91, SND_3C_COMEDY_CAR, 112, 30, 42, 9), // 4 Ploddyphut MkI Bus - ROV( 51, 140, 171, SND_3E_COMEDY_CAR_2, 192, 35, 60, 15), // 5 Ploddyphut MkII Bus - ROV( 51, 160, 240, SND_3C_COMEDY_CAR, 240, 38, 90, 25), // 6 Ploddyphut MkIII Bus - ROV( 1, 108, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12), // 7 Balogh Coal Truck - ROV( 18, 128, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 8 Uhl Coal Truck - ROV( 35, 138, 240, SND_19_BUS_START_PULL_AWAY, 224, 28, 69, 45), // 9 DW Coal Truck - ROV( 2, 115, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12), // 10 MPS Mail Truck - ROV( 19, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 28, 48, 22), // 11 Reynard Mail Truck - ROV( 36, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, 69, 45), // 12 Perry Mail Truck - ROV( 57, 115, 90, SND_3E_COMEDY_CAR_2, 96, 22, 38, 12), // 13 MightyMover Mail Truck - ROV( 57, 135, 168, SND_3C_COMEDY_CAR, 176, 28, 48, 22), // 14 Powernaught Mail Truck - ROV( 57, 145, 240, SND_3E_COMEDY_CAR_2, 224, 30, 69, 45), // 15 Wizzowow Mail Truck - ROV( 3, 110, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, 38, 12), // 16 Witcombe Oil Tanker - ROV( 20, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 17 Foster Oil Tanker - ROV( 37, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 18 Perry Oil Tanker - ROV( 4, 105, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, 38, 12), // 19 Talbott Livestock Van - ROV( 21, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, 48, 22), // 20 Uhl Livestock Van - ROV( 38, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, 69, 45), // 21 Foster Livestock Van - ROV( 5, 107, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, 38, 12), // 22 Balogh Goods Truck - ROV( 22, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, 48, 22), // 23 Craighead Goods Truck - ROV( 39, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, 69, 45), // 24 Goss Goods Truck - ROV( 6, 114, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12), // 25 Hereford Grain Truck - ROV( 23, 133, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 26 Thomas Grain Truck - ROV( 40, 143, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, 69, 45), // 27 Goss Grain Truck - ROV( 7, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12), // 28 Witcombe Wood Truck - ROV( 24, 137, 168, SND_19_BUS_START_PULL_AWAY, 176, 22, 48, 22), // 29 Foster Wood Truck - ROV( 41, 147, 240, SND_19_BUS_START_PULL_AWAY, 224, 24, 69, 45), // 30 Moreland Wood Truck - ROV( 8, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12), // 31 MPS Iron Ore Truck - ROV( 25, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 32 Uhl Iron Ore Truck - ROV( 42, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 33 Chippy Iron Ore Truck - ROV( 9, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, 38, 12), // 34 Balogh Steel Truck - ROV( 26, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, 48, 22), // 35 Uhl Steel Truck - ROV( 43, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, 69, 45), // 36 Kelling Steel Truck - ROV( 10, 145, 90, SND_19_BUS_START_PULL_AWAY, 96, 12, 38, 12), // 37 Balogh Armoured Truck - ROV( 27, 170, 168, SND_19_BUS_START_PULL_AWAY, 176, 15, 48, 22), // 38 Uhl Armoured Truck - ROV( 44, 180, 240, SND_19_BUS_START_PULL_AWAY, 224, 16, 69, 45), // 39 Foster Armoured Truck - ROV( 11, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, 38, 12), // 40 Foster Food Van - ROV( 28, 134, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, 48, 22), // 41 Perry Food Van - ROV( 45, 144, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, 69, 45), // 42 Chippy Food Van - ROV( 12, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, 38, 12), // 43 Uhl Paper Truck - ROV( 29, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, 48, 22), // 44 Balogh Paper Truck - ROV( 46, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, 69, 45), // 45 MPS Paper Truck - ROV( 13, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12), // 46 MPS Copper Ore Truck - ROV( 30, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 47 Uhl Copper Ore Truck - ROV( 47, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 48 Goss Copper Ore Truck - ROV( 14, 111, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, 38, 12), // 49 Uhl Water Tanker - ROV( 31, 141, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 50 Balogh Water Tanker - ROV( 48, 151, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 51 MPS Water Tanker - ROV( 15, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 18, 38, 12), // 52 Balogh Fruit Truck - ROV( 32, 148, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, 48, 22), // 53 Uhl Fruit Truck - ROV( 49, 158, 240, SND_19_BUS_START_PULL_AWAY, 224, 23, 69, 45), // 54 Kelling Fruit Truck - ROV( 16, 117, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, 38, 12), // 55 Balogh Rubber Truck - ROV( 33, 147, 168, SND_19_BUS_START_PULL_AWAY, 176, 19, 48, 22), // 56 Uhl Rubber Truck - ROV( 50, 157, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, 69, 45), // 57 RMT Rubber Truck - ROV( 52, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 58 MightyMover Sugar Truck - ROV( 52, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 59 Powernaught Sugar Truck - ROV( 52, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 60 Wizzowow Sugar Truck - ROV( 53, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 61 MightyMover Cola Truck - ROV( 53, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 62 Powernaught Cola Truck - ROV( 53, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 63 Wizzowow Cola Truck - ROV( 54, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 64 MightyMover Candyfloss Truck - ROV( 54, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 65 Powernaught Candyfloss Truck - ROV( 54, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 66 Wizzowow Candyfloss Truck - ROV( 55, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 67 MightyMover Toffee Truck - ROV( 55, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 68 Powernaught Toffee Truck - ROV( 55, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 69 Wizzowow Toffee Truck - ROV( 56, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 70 MightyMover Toy Van - ROV( 56, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 71 Powernaught Toy Van - ROV( 56, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 72 Wizzowow Toy Van - ROV( 58, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 73 MightyMover Sweet Truck - ROV( 58, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 74 Powernaught Sweet Truck - ROV( 58, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 75 Wizzowow Sweet Truck - ROV( 59, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 76 MightyMover Battery Truck - ROV( 59, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 77 Powernaught Battery Truck - ROV( 59, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 78 Wizzowow Battery Truck - ROV( 60, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 79 MightyMover Fizzy Drink Truck - ROV( 60, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 80 Powernaught Fizzy Drink Truck - ROV( 60, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 81 Wizzowow Fizzy Drink Truck - ROV( 61, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 82 MightyMover Plastic Truck - ROV( 61, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 83 Powernaught Plastic Truck - ROV( 61, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 84 Wizzowow Plastic Truck - ROV( 62, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 85 MightyMover Bubble Truck - ROV( 62, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 86 Powernaught Bubble Truck - ROV( 62, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 87 Wizzowow Bubble Truck + * | cost_factor | | capacity | roadtype + * | | running_cost | | weight | + * | | | | | | | | |*/ + ROV( 0, 120, 91, SND_19_BUS_START_PULL_AWAY, 112, 31, 42, 9, R), // 0 MPS Regal Bus + ROV( 17, 140, 128, SND_1C_TRUCK_START_2, 176, 35, 60, 12, R), // 1 Hereford Leopard Bus + ROV( 17, 150, 178, SND_1B_TRUCK_START, 224, 37, 70, 15, R), // 2 Foster Bus + ROV( 34, 160, 240, SND_1B_TRUCK_START, 255, 40, 100, 25, R), // 3 Foster MkII Superbus + ROV( 51, 120, 91, SND_3C_COMEDY_CAR, 112, 30, 42, 9, R), // 4 Ploddyphut MkI Bus + ROV( 51, 140, 171, SND_3E_COMEDY_CAR_2, 192, 35, 60, 15, R), // 5 Ploddyphut MkII Bus + ROV( 51, 160, 240, SND_3C_COMEDY_CAR, 240, 38, 90, 25, R), // 6 Ploddyphut MkIII Bus + ROV( 1, 108, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12, R), // 7 Balogh Coal Truck + ROV( 18, 128, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22, R), // 8 Uhl Coal Truck + ROV( 35, 138, 240, SND_19_BUS_START_PULL_AWAY, 224, 28, 69, 45, R), // 9 DW Coal Truck + ROV( 2, 115, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12, R), // 10 MPS Mail Truck + ROV( 19, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 28, 48, 22, R), // 11 Reynard Mail Truck + ROV( 36, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, 69, 45, R), // 12 Perry Mail Truck + ROV( 57, 115, 90, SND_3E_COMEDY_CAR_2, 96, 22, 38, 12, R), // 13 MightyMover Mail Truck + ROV( 57, 135, 168, SND_3C_COMEDY_CAR, 176, 28, 48, 22, R), // 14 Powernaught Mail Truck + ROV( 57, 145, 240, SND_3E_COMEDY_CAR_2, 224, 30, 69, 45, R), // 15 Wizzowow Mail Truck + ROV( 3, 110, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, 38, 12, R), // 16 Witcombe Oil Tanker + ROV( 20, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22, R), // 17 Foster Oil Tanker + ROV( 37, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45, R), // 18 Perry Oil Tanker + ROV( 4, 105, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, 38, 12, R), // 19 Talbott Livestock Van + ROV( 21, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, 48, 22, R), // 20 Uhl Livestock Van + ROV( 38, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, 69, 45, R), // 21 Foster Livestock Van + ROV( 5, 107, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, 38, 12, R), // 22 Balogh Goods Truck + ROV( 22, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, 48, 22, R), // 23 Craighead Goods Truck + ROV( 39, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, 69, 45, R), // 24 Goss Goods Truck + ROV( 6, 114, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12, R), // 25 Hereford Grain Truck + ROV( 23, 133, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22, R), // 26 Thomas Grain Truck + ROV( 40, 143, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, 69, 45, R), // 27 Goss Grain Truck + ROV( 7, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12, R), // 28 Witcombe Wood Truck + ROV( 24, 137, 168, SND_19_BUS_START_PULL_AWAY, 176, 22, 48, 22, R), // 29 Foster Wood Truck + ROV( 41, 147, 240, SND_19_BUS_START_PULL_AWAY, 224, 24, 69, 45, R), // 30 Moreland Wood Truck + ROV( 8, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12, R), // 31 MPS Iron Ore Truck + ROV( 25, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22, R), // 32 Uhl Iron Ore Truck + ROV( 42, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45, R), // 33 Chippy Iron Ore Truck + ROV( 9, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, 38, 12, R), // 34 Balogh Steel Truck + ROV( 26, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, 48, 22, R), // 35 Uhl Steel Truck + ROV( 43, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, 69, 45, R), // 36 Kelling Steel Truck + ROV( 10, 145, 90, SND_19_BUS_START_PULL_AWAY, 96, 12, 38, 12, R), // 37 Balogh Armoured Truck + ROV( 27, 170, 168, SND_19_BUS_START_PULL_AWAY, 176, 15, 48, 22, R), // 38 Uhl Armoured Truck + ROV( 44, 180, 240, SND_19_BUS_START_PULL_AWAY, 224, 16, 69, 45, R), // 39 Foster Armoured Truck + ROV( 11, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, 38, 12, R), // 40 Foster Food Van + ROV( 28, 134, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, 48, 22, R), // 41 Perry Food Van + ROV( 45, 144, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, 69, 45, R), // 42 Chippy Food Van + ROV( 12, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, 38, 12, R), // 43 Uhl Paper Truck + ROV( 29, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, 48, 22, R), // 44 Balogh Paper Truck + ROV( 46, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, 69, 45, R), // 45 MPS Paper Truck + ROV( 13, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12, R), // 46 MPS Copper Ore Truck + ROV( 30, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22, R), // 47 Uhl Copper Ore Truck + ROV( 47, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45, R), // 48 Goss Copper Ore Truck + ROV( 14, 111, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, 38, 12, R), // 49 Uhl Water Tanker + ROV( 31, 141, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22, R), // 50 Balogh Water Tanker + ROV( 48, 151, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45, R), // 51 MPS Water Tanker + ROV( 15, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 18, 38, 12, R), // 52 Balogh Fruit Truck + ROV( 32, 148, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, 48, 22, R), // 53 Uhl Fruit Truck + ROV( 49, 158, 240, SND_19_BUS_START_PULL_AWAY, 224, 23, 69, 45, R), // 54 Kelling Fruit Truck + ROV( 16, 117, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, 38, 12, R), // 55 Balogh Rubber Truck + ROV( 33, 147, 168, SND_19_BUS_START_PULL_AWAY, 176, 19, 48, 22, R), // 56 Uhl Rubber Truck + ROV( 50, 157, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, 69, 45, R), // 57 RMT Rubber Truck + ROV( 52, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12, R), // 58 MightyMover Sugar Truck + ROV( 52, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22, R), // 59 Powernaught Sugar Truck + ROV( 52, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45, R), // 60 Wizzowow Sugar Truck + ROV( 53, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12, R), // 61 MightyMover Cola Truck + ROV( 53, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22, R), // 62 Powernaught Cola Truck + ROV( 53, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45, R), // 63 Wizzowow Cola Truck + ROV( 54, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12, R), // 64 MightyMover Candyfloss Truck + ROV( 54, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22, R), // 65 Powernaught Candyfloss Truck + ROV( 54, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45, R), // 66 Wizzowow Candyfloss Truck + ROV( 55, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12, R), // 67 MightyMover Toffee Truck + ROV( 55, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22, R), // 68 Powernaught Toffee Truck + ROV( 55, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45, R), // 69 Wizzowow Toffee Truck + ROV( 56, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12, R), // 70 MightyMover Toy Van + ROV( 56, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22, R), // 71 Powernaught Toy Van + ROV( 56, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45, R), // 72 Wizzowow Toy Van + ROV( 58, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12, R), // 73 MightyMover Sweet Truck + ROV( 58, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22, R), // 74 Powernaught Sweet Truck + ROV( 58, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45, R), // 75 Wizzowow Sweet Truck + ROV( 59, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12, R), // 76 MightyMover Battery Truck + ROV( 59, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22, R), // 77 Powernaught Battery Truck + ROV( 59, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45, R), // 78 Wizzowow Battery Truck + ROV( 60, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12, R), // 79 MightyMover Fizzy Drink Truck + ROV( 60, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22, R), // 80 Powernaught Fizzy Drink Truck + ROV( 60, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45, R), // 81 Wizzowow Fizzy Drink Truck + ROV( 61, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12, R), // 82 MightyMover Plastic Truck + ROV( 61, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22, R), // 83 Powernaught Plastic Truck + ROV( 61, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45, R), // 84 Wizzowow Plastic Truck + ROV( 62, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12, R), // 85 MightyMover Bubble Truck + ROV( 62, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22, R), // 86 Powernaught Bubble Truck + ROV( 62, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45, R), // 87 Wizzowow Bubble Truck }; #undef ROV +#undef R +#undef T #endif /* ENGINES_H */ Index: src/table/roadtypes.h =================================================================== --- src/table/roadtypes.h (nonexistent) +++ src/table/roadtypes.h (working copy) @@ -0,0 +1,142 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @file roadtypes.h + * All the roadtype-specific information is stored here. + */ + +#ifndef ROADTYPES_H +#define ROADTYPES_H + +/** + * Global Roadtype definition + */ +static const RoadtypeInfo _original_roadtypes[] = { + /** Road */ + { + { + STR_ROAD_NAME_ROAD, + STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION, + STR_ROAD_MENU_ROAD_CONSTRUCTION, + STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION, + STR_REPLACE_VEHICLE_ROAD_VEHICLE, + STR_ENGINE_PREVIEW_ROAD_VEHICLE, + }, + + /* Powered roadtypes */ + ROADTYPES_ROAD | ROADTYPES_TRAM, + + /* Compatible roadtypes */ + ROADTYPES_ROAD, + + /* bridge offset */ + 0, + + /* fallback_roadtype */ + 0, + + /* curve speed advantage (multiplier) */ + 0, + + /* flags */ + ROTFB_NONE, + + /* cost multiplier */ + 8, + + /* maintenance cost multiplier */ + 8, + + /* max speed */ + 0, + + /* road type label */ + 'ROAD', + + /* alternate labels */ + RoadTypeLabelList(), + + /* map colour */ + 0x0A, + + /* introduction date */ + INVALID_DATE, + + /* roadtypes required for this to be introduced */ + ROADTYPES_NONE, + + /* introduction road types */ + ROADTYPES_ROAD, + + /* sort order */ + 0 << 4 | 7, + }, + /** Tram */ + { + { + STR_ROAD_NAME_TRAM, + STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION, + STR_ROAD_MENU_TRAM_CONSTRUCTION, + STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION, + STR_REPLACE_VEHICLE_ROAD_VEHICLE, + STR_ENGINE_PREVIEW_ROAD_VEHICLE, + }, + + /* Powered roadtypes */ + ROADTYPES_ROAD | ROADTYPES_TRAM, + + /* Compatible roadtypes */ + ROADTYPES_TRAM, + + /* bridge offset */ + 0, + + /* fallback_roadtype */ + 0, + + /* curve speed advantage (multiplier) */ + 0, + + /* flags */ + ROTFB_NONE, + + /* cost multiplier */ + 8, + + /* maintenance cost multiplier */ + 8, + + /* max speed */ + 0, + + /* road type label */ + 'TRAM', + + /* alternate labels */ + RoadTypeLabelList(), + + /* map colour */ + 0x0A, + + /* introduction date */ + INVALID_DATE, + + /* roadtypes required for this to be introduced */ + ROADTYPES_NONE, + + /* introduction road types */ + ROADTYPES_TRAM, + + /* sort order */ + 1 << 4 | 7, + }, +}; + +#endif /* ROADTYPES_H */ Index: src/toolbar_gui.cpp =================================================================== --- src/toolbar_gui.cpp (revision 22430) +++ src/toolbar_gui.cpp (working copy) @@ -887,22 +887,7 @@ static CallBackFunction ToolbarBuildRoadClick(Window *w) { - const Company *c = Company::Get(_local_company); - DropDownList *list = new DropDownList(); - - /* Road is always visible and available. */ - *list->Append() = new DropDownListStringItem(STR_ROAD_MENU_ROAD_CONSTRUCTION, ROADTYPE_ROAD, false); - - /* Tram is only visible when there will be a tram, and available when that has been introduced. */ - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { - if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; - if (!HasBit(e->info.misc_flags, EF_ROAD_TRAM)) continue; - - *list->Append() = new DropDownListStringItem(STR_ROAD_MENU_TRAM_CONSTRUCTION, ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM)); - break; - } - ShowDropDownList(w, list, _last_built_roadtype, WID_TN_ROADS, 140, true, true); + ShowDropDownList(w, GetRoadTypeDropDownList(), _last_built_roadtype, WID_TN_ROADS, 140, true, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; }
Mark as private
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
forever