src/rail_cmd.cpp
branchgamebalance
changeset 9909 dce9a6923bb7
parent 9908 0fa543611bbe
child 9911 0b8b245a2391
equal deleted inserted replaced
9908:0fa543611bbe 9909:dce9a6923bb7
   228 /* Validate functions for rail building */
   228 /* Validate functions for rail building */
   229 static inline bool ValParamTrackOrientation(Track track) {return IsValidTrack(track);}
   229 static inline bool ValParamTrackOrientation(Track track) {return IsValidTrack(track);}
   230 
   230 
   231 /** Build a single piece of rail
   231 /** Build a single piece of rail
   232  * @param tile tile  to build on
   232  * @param tile tile  to build on
       
   233  * @param flags operation to perform
   233  * @param p1 railtype of being built piece (normal, mono, maglev)
   234  * @param p1 railtype of being built piece (normal, mono, maglev)
   234  * @param p2 rail track to build
   235  * @param p2 rail track to build
   235  */
   236  */
   236 int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   237 int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   237 {
   238 {
   332 	return cost;
   333 	return cost;
   333 }
   334 }
   334 
   335 
   335 /** Remove a single piece of track
   336 /** Remove a single piece of track
   336  * @param tile tile to remove track from
   337  * @param tile tile to remove track from
       
   338  * @param flags operation to perform
   337  * @param p1 unused
   339  * @param p1 unused
   338  * @param p2 rail orientation
   340  * @param p2 rail orientation
   339  */
   341  */
   340 int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   342 int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   341 {
   343 {
   479 	return 0;
   481 	return 0;
   480 }
   482 }
   481 
   483 
   482 /** Build a stretch of railroad tracks.
   484 /** Build a stretch of railroad tracks.
   483  * @param tile start tile of drag
   485  * @param tile start tile of drag
       
   486  * @param flags operation to perform
   484  * @param p1 end tile of drag
   487  * @param p1 end tile of drag
   485  * @param p2 various bitstuffed elements
   488  * @param p2 various bitstuffed elements
   486  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
   489  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
   487  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
   490  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
   488  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   491  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   528 	return (total_cost == 0) ? CMD_ERROR : total_cost;
   531 	return (total_cost == 0) ? CMD_ERROR : total_cost;
   529 }
   532 }
   530 
   533 
   531 /** Build rail on a stretch of track.
   534 /** Build rail on a stretch of track.
   532  * Stub for the unified rail builder/remover
   535  * Stub for the unified rail builder/remover
       
   536  * @param tile start tile of drag
       
   537  * @param flags operation to perform
       
   538  * @param p1 end tile of drag
       
   539  * @param p2 various bitstuffed elements
       
   540  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
       
   541  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
       
   542  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   533  * @see CmdRailTrackHelper
   543  * @see CmdRailTrackHelper
   534  */
   544  */
   535 int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   545 int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   536 {
   546 {
   537 	return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
   547 	return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
   538 }
   548 }
   539 
   549 
   540 /** Build rail on a stretch of track.
   550 /** Build rail on a stretch of track.
   541  * Stub for the unified rail builder/remover
   551  * Stub for the unified rail builder/remover
       
   552  * @param tile start tile of drag
       
   553  * @param flags operation to perform
       
   554  * @param p1 end tile of drag
       
   555  * @param p2 various bitstuffed elements
       
   556  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
       
   557  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
       
   558  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   542  * @see CmdRailTrackHelper
   559  * @see CmdRailTrackHelper
   543  */
   560  */
   544 int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   561 int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   545 {
   562 {
   546 	return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
   563 	return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
   547 }
   564 }
   548 
   565 
   549 /** Build a train depot
   566 /** Build a train depot
   550  * @param tile position of the train depot
   567  * @param tile position of the train depot
       
   568  * @param flags operation to perform
   551  * @param p1 rail type
   569  * @param p1 rail type
   552  * @param p2 bit 0..1 entrance direction (DiagDirection)
   570  * @param p2 bit 0..1 entrance direction (DiagDirection)
   553  *
   571  *
   554  * @todo When checking for the tile slope,
   572  * @todo When checking for the tile slope,
   555  * distingush between "Flat land required" and "land sloped in wrong direction"
   573  * distingush between "Flat land required" and "land sloped in wrong direction"
   613 
   631 
   614 /** Build signals, alternate between double/single, signal/semaphore,
   632 /** Build signals, alternate between double/single, signal/semaphore,
   615  * pre/exit/combo-signals, and what-else not. If the rail piece does not
   633  * pre/exit/combo-signals, and what-else not. If the rail piece does not
   616  * have any signals, bit 4 (cycle signal-type) is ignored
   634  * have any signals, bit 4 (cycle signal-type) is ignored
   617  * @param tile tile where to build the signals
   635  * @param tile tile where to build the signals
       
   636  * @param flags operation to perform
   618  * @param p1 various bitstuffed elements
   637  * @param p1 various bitstuffed elements
   619  * - p1 = (bit 0-2) - track-orientation, valid values: 0-5 (Track enum)
   638  * - p1 = (bit 0-2) - track-orientation, valid values: 0-5 (Track enum)
   620  * - p1 = (bit 3)   - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   639  * - p1 = (bit 3)   - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   621  * - p1 = (bit 4)   - 0 = signals, 1 = semaphores
   640  * - p1 = (bit 4)   - 0 = signals, 1 = semaphores
   622  * @param p2 used for CmdBuildManySignals() to copy direction of first signal
   641  * @param p2 used for CmdBuildManySignals() to copy direction of first signal
   707 	return cost;
   726 	return cost;
   708 }
   727 }
   709 
   728 
   710 /** Build many signals by dragging; AutoSignals
   729 /** Build many signals by dragging; AutoSignals
   711  * @param tile start tile of drag
   730  * @param tile start tile of drag
       
   731  * @param flags operation to perform
   712  * @param p1  end tile of drag
   732  * @param p1  end tile of drag
   713  * @param p2 various bitstuffed elements
   733  * @param p2 various bitstuffed elements
   714  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   734  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   715  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   735  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   716  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
   736  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
   794 	return error ? CMD_ERROR : total_cost;
   814 	return error ? CMD_ERROR : total_cost;
   795 }
   815 }
   796 
   816 
   797 /** Build signals on a stretch of track.
   817 /** Build signals on a stretch of track.
   798  * Stub for the unified signal builder/remover
   818  * Stub for the unified signal builder/remover
       
   819  * @param tile start tile of drag
       
   820  * @param flags operation to perform
       
   821  * @param p1  end tile of drag
       
   822  * @param p2 various bitstuffed elements
       
   823  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
       
   824  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
       
   825  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
       
   826  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
       
   827  * - p2 = (bit 24-31) - user defined signals_density
   799  * @see CmdSignalTrackHelper
   828  * @see CmdSignalTrackHelper
   800  */
   829  */
   801 int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   830 int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   802 {
   831 {
   803 	return CmdSignalTrackHelper(tile, flags, p1, p2);
   832 	return CmdSignalTrackHelper(tile, flags, p1, p2);
   804 }
   833 }
   805 
   834 
   806 /** Remove signals
   835 /** Remove signals
   807  * @param tile coordinates where signal is being deleted from
   836  * @param tile coordinates where signal is being deleted from
   808  * @param various bitstuffed elements, only track information is used
   837  * @param flags operation to perform
   809  * - p1 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   838  * @param p1 various bitstuffed elements, only track information is used
   810  * - p1 = (bit  3)    - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   839  *           - (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   811  * - p1 = (bit  4)    - 0 = signals, 1 = semaphores
   840  *           - (bit  3)    - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
       
   841  *           - (bit  4)    - 0 = signals, 1 = semaphores
       
   842  * @param p2 unused
   812  */
   843  */
   813 int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   844 int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   814 {
   845 {
   815 	Track track = (Track)GB(p1, 0, 3);
   846 	Track track = (Track)GB(p1, 0, 3);
   816 
   847 
   846 	return _eco->GetPrice(CEconomy::REMOVE_SIGNALS);
   877 	return _eco->GetPrice(CEconomy::REMOVE_SIGNALS);
   847 }
   878 }
   848 
   879 
   849 /** Remove signals on a stretch of track.
   880 /** Remove signals on a stretch of track.
   850  * Stub for the unified signal builder/remover
   881  * Stub for the unified signal builder/remover
       
   882  * @param tile start tile of drag
       
   883  * @param flags operation to perform
       
   884  * @param p1  end tile of drag
       
   885  * @param p2 various bitstuffed elements
       
   886  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
       
   887  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
       
   888  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
       
   889  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
       
   890  * - p2 = (bit 24-31) - user defined signals_density
   851  * @see CmdSignalTrackHelper
   891  * @see CmdSignalTrackHelper
   852  */
   892  */
   853 int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   893 int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   854 {
   894 {
   855 	return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
   895 	return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
   912 extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
   952 extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
   913 
   953 
   914 /** Convert one rail type to the other. You can convert normal rail to
   954 /** Convert one rail type to the other. You can convert normal rail to
   915  * monorail/maglev easily or vice-versa.
   955  * monorail/maglev easily or vice-versa.
   916  * @param tile end tile of rail conversion drag
   956  * @param tile end tile of rail conversion drag
       
   957  * @param flags operation to perform
   917  * @param p1 start tile of drag
   958  * @param p1 start tile of drag
   918  * @param p2 new railtype to convert to
   959  * @param p2 new railtype to convert to
   919  */
   960  */
   920 int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   961 int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   921 {
   962 {
  1181 
  1222 
  1182 /**
  1223 /**
  1183  * Draw ground sprite and track bits
  1224  * Draw ground sprite and track bits
  1184  * @param ti TileInfo
  1225  * @param ti TileInfo
  1185  * @param track TrackBits to draw
  1226  * @param track TrackBits to draw
  1186  * @param earth Draw as earth
       
  1187  * @param snow Draw as snow
       
  1188  * @param flat Always draw foundation
       
  1189  */
  1227  */
  1190 static void DrawTrackBits(TileInfo* ti, TrackBits track)
  1228 static void DrawTrackBits(TileInfo* ti, TrackBits track)
  1191 {
  1229 {
  1192 	const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
  1230 	const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
  1193 	SpriteID image;
  1231 	SpriteID image;