- New optional landscape generator (TerraGenesis Perlin)
  - Load heightmaps (either BMP or PNG)
  - Progress dialog while generating worlds (no longer a 'hanging' screen)
  - New dialogs for NewGame, Create Scenario and Play Heightmap
    - Easier to configure your landscape
    - More things to configure (tree-placer, ..)
  - Speedup of world generation
  - New console command 'restart': restart the map EXACTLY as it was when you
      first started it (needs a game made after or with this commit)
  - New console command 'getseed': get the seed of your map and share it with
      others (of course only works with generated maps)
  - Many new, world generation related, things
  - Many internal cleanups and rewrites
  Many tnx to those people who helped making this:
     Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
  Many tnx to those who helped testing:
     Arnau, Bjarni, and tokai (alfabetic)
  And to all other people who helped testing and sending comments / bugs
  Stats: 673 lines changed, 3534 new lines, 79 new strings
		
	
		
			
				
	
	
		
			243 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* $Id$ */
 | 
						|
 | 
						|
#ifndef FUNCTIONS_H
 | 
						|
#define FUNCTIONS_H
 | 
						|
 | 
						|
void DoClearSquare(TileIndex tile);
 | 
						|
void RunTileLoop(void);
 | 
						|
 | 
						|
uint GetPartialZ(int x, int y, Slope corners);
 | 
						|
uint GetSlopeZ(int x, int y);
 | 
						|
uint32 GetTileTrackStatus(TileIndex tile, TransportType mode);
 | 
						|
void GetAcceptedCargo(TileIndex tile, AcceptedCargo ac);
 | 
						|
void ChangeTileOwner(TileIndex tile, byte old_player, byte new_player);
 | 
						|
void AnimateTile(TileIndex tile);
 | 
						|
void ClickTile(TileIndex tile);
 | 
						|
void GetTileDesc(TileIndex tile, TileDesc *td);
 | 
						|
void UpdateTownMaxPass(Town *t);
 | 
						|
 | 
						|
bool IsValidTile(TileIndex tile);
 | 
						|
 | 
						|
static inline Point RemapCoords(int x, int y, int z)
 | 
						|
{
 | 
						|
#if !defined(NEW_ROTATION)
 | 
						|
	Point pt;
 | 
						|
	pt.x = (y - x) * 2;
 | 
						|
	pt.y = y + x - z;
 | 
						|
#else
 | 
						|
	Point pt;
 | 
						|
	pt.x = (x + y) * 2;
 | 
						|
	pt.y = x - y - z;
 | 
						|
#endif
 | 
						|
	return pt;
 | 
						|
}
 | 
						|
 | 
						|
static inline Point RemapCoords2(int x, int y)
 | 
						|
{
 | 
						|
	return RemapCoords(x, y, GetSlopeZ(x, y));
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* clear_land.c */
 | 
						|
void DrawHillyLandTile(const TileInfo *ti);
 | 
						|
void DrawClearLandTile(const TileInfo *ti, byte set);
 | 
						|
void DrawClearLandFence(const TileInfo *ti);
 | 
						|
void TileLoopClearHelper(TileIndex tile);
 | 
						|
 | 
						|
/* water_land.c */
 | 
						|
void DrawShipDepotSprite(int x, int y, int image);
 | 
						|
void TileLoop_Water(TileIndex tile);
 | 
						|
 | 
						|
/* players.c */
 | 
						|
bool CheckPlayerHasMoney(int32 cost);
 | 
						|
void SubtractMoneyFromPlayer(int32 cost);
 | 
						|
void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost);
 | 
						|
bool CheckOwnership(PlayerID owner);
 | 
						|
bool CheckTileOwnership(TileIndex tile);
 | 
						|
StringID GetPlayerNameString(PlayerID player, uint index);
 | 
						|
 | 
						|
/* standard */
 | 
						|
void ShowInfo(const char *str);
 | 
						|
void CDECL ShowInfoF(const char *str, ...);
 | 
						|
void NORETURN CDECL error(const char *str, ...);
 | 
						|
 | 
						|
/* openttd.c */
 | 
						|
 | 
						|
// **************
 | 
						|
// * Warning: DO NOT enable this unless you understand what it does
 | 
						|
// *
 | 
						|
// * If enabled, in a network game all randoms will be dumped to the
 | 
						|
// *  stdout if the first client joins (or if you are a client). This
 | 
						|
// *  is to help finding desync problems.
 | 
						|
// *
 | 
						|
// * Warning: DO NOT enable this unless you understand what it does
 | 
						|
// **************
 | 
						|
 | 
						|
//#define RANDOM_DEBUG
 | 
						|
 | 
						|
 | 
						|
// Enable this to produce higher quality random numbers.
 | 
						|
// Doesn't work with network yet.
 | 
						|
//#define MERSENNE_TWISTER
 | 
						|
 | 
						|
// Mersenne twister functions
 | 
						|
void SeedMT(uint32 seed);
 | 
						|
uint32 RandomMT(void);
 | 
						|
 | 
						|
 | 
						|
#ifdef MERSENNE_TWISTER
 | 
						|
	static inline uint32 Random(void) { return RandomMT(); }
 | 
						|
	uint RandomRange(uint max);
 | 
						|
#else
 | 
						|
 | 
						|
#ifdef RANDOM_DEBUG
 | 
						|
	#define Random() DoRandom(__LINE__, __FILE__)
 | 
						|
	uint32 DoRandom(int line, const char *file);
 | 
						|
	#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
 | 
						|
	uint DoRandomRange(uint max, int line, const char *file);
 | 
						|
#else
 | 
						|
	uint32 Random(void);
 | 
						|
	uint RandomRange(uint max);
 | 
						|
#endif
 | 
						|
#endif // MERSENNE_TWISTER
 | 
						|
 | 
						|
static inline TileIndex RandomTileSeed(uint32 r) { return TILE_MASK(r); }
 | 
						|
static inline TileIndex RandomTile(void) { return TILE_MASK(Random()); }
 | 
						|
 | 
						|
 | 
						|
uint32 InteractiveRandom(void); /* Used for random sequences that are not the same on the other end of the multiplayer link */
 | 
						|
uint InteractiveRandomRange(uint max);
 | 
						|
 | 
						|
/* facedraw.c */
 | 
						|
void DrawPlayerFace(uint32 face, int color, int x, int y);
 | 
						|
 | 
						|
/* texteff.c */
 | 
						|
void MoveAllTextEffects(void);
 | 
						|
void AddTextEffect(StringID msg, int x, int y, uint16 duration);
 | 
						|
void InitTextEffects(void);
 | 
						|
void DrawTextEffects(DrawPixelInfo *dpi);
 | 
						|
 | 
						|
void InitTextMessage(void);
 | 
						|
void DrawTextMessage(void);
 | 
						|
void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
 | 
						|
void UndrawTextMessage(void);
 | 
						|
 | 
						|
bool AddAnimatedTile(TileIndex tile);
 | 
						|
void DeleteAnimatedTile(TileIndex tile);
 | 
						|
void AnimateAnimatedTiles(void);
 | 
						|
void InitializeAnimatedTiles(void);
 | 
						|
 | 
						|
/* tunnelbridge_cmd.c */
 | 
						|
bool CheckBridge_Stuff(byte bridge_type, uint bridge_len);
 | 
						|
uint32 GetBridgeLength(TileIndex begin, TileIndex end);
 | 
						|
int CalcBridgeLenCostFactor(int x);
 | 
						|
 | 
						|
typedef void CommandCallback(bool success, TileIndex tile, uint32 p1, uint32 p2);
 | 
						|
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
 | 
						|
 | 
						|
/* network.c */
 | 
						|
void NetworkUDPClose(void);
 | 
						|
void NetworkStartUp(void);
 | 
						|
void NetworkShutDown(void);
 | 
						|
void NetworkGameLoop(void);
 | 
						|
void NetworkUDPGameLoop(void);
 | 
						|
bool NetworkServerStart(void);
 | 
						|
bool NetworkClientConnectGame(const char* host, unsigned short port);
 | 
						|
void NetworkReboot(void);
 | 
						|
void NetworkDisconnect(void);
 | 
						|
void NetworkSend_Command(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback);
 | 
						|
 | 
						|
/* misc_cmd.c */
 | 
						|
void PlaceTreesRandomly(void);
 | 
						|
 | 
						|
void InitializeLandscapeVariables(bool only_constants);
 | 
						|
 | 
						|
/* misc.c */
 | 
						|
void DeleteName(StringID id);
 | 
						|
char *GetName(int id, char *buff);
 | 
						|
 | 
						|
// AllocateNameUnique also tests if the name used is not used anywere else
 | 
						|
//  and if it is used, it returns an error.
 | 
						|
#define AllocateNameUnique(name, skip) RealAllocateName(name, skip, true)
 | 
						|
#define AllocateName(name, skip) RealAllocateName(name, skip, false)
 | 
						|
StringID RealAllocateName(const char *name, byte skip, bool check_double);
 | 
						|
 | 
						|
/* misc functions */
 | 
						|
void MarkTileDirty(int x, int y);
 | 
						|
void MarkTileDirtyByTile(TileIndex tile);
 | 
						|
void InvalidateWindow(WindowClass cls, WindowNumber number);
 | 
						|
void InvalidateWindowWidget(WindowClass cls, WindowNumber number, byte widget_index);
 | 
						|
void InvalidateWindowClasses(WindowClass cls);
 | 
						|
void DeleteWindowById(WindowClass cls, WindowNumber number);
 | 
						|
void DeleteWindowByClass(WindowClass cls);
 | 
						|
 | 
						|
void SetObjectToPlaceWnd(CursorID icon, byte mode, Window *w);
 | 
						|
void SetObjectToPlace(CursorID icon, byte mode, WindowClass window_class, WindowNumber window_num);
 | 
						|
 | 
						|
void ResetObjectToPlace(void);
 | 
						|
 | 
						|
bool ScrollWindowTo(int x, int y, Window * w);
 | 
						|
 | 
						|
bool ScrollMainWindowToTile(TileIndex tile);
 | 
						|
bool ScrollMainWindowTo(int x, int y);
 | 
						|
void DrawSprite(uint32 img, int x, int y);
 | 
						|
bool EnsureNoVehicle(TileIndex tile);
 | 
						|
bool EnsureNoVehicleOnGround(TileIndex tile);
 | 
						|
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
 | 
						|
void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost);
 | 
						|
void ShowFeederIncomeAnimation(int x, int y, int z, int32 cost);
 | 
						|
 | 
						|
void DrawFoundation(TileInfo *ti, uint f);
 | 
						|
 | 
						|
bool CheckIfAuthorityAllows(TileIndex tile);
 | 
						|
Town *ClosestTownFromTile(TileIndex tile, uint threshold);
 | 
						|
void ChangeTownRating(Town *t, int add, int max);
 | 
						|
 | 
						|
uint GetTownRadiusGroup(const Town* t, TileIndex tile);
 | 
						|
void ShowNetworkChatQueryWindow(byte desttype, byte dest);
 | 
						|
void ShowNetworkGiveMoneyWindow(byte player);
 | 
						|
void ShowNetworkNeedGamePassword(void);
 | 
						|
void ShowNetworkNeedCompanyPassword(void);
 | 
						|
int FindFirstBit(uint32 x);
 | 
						|
void ShowHighscoreTable(int difficulty, int8 rank);
 | 
						|
TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng);
 | 
						|
 | 
						|
void AfterLoadTown(void);
 | 
						|
void UpdatePatches(void);
 | 
						|
void AskExitGame(void);
 | 
						|
void AskExitToGameMenu(void);
 | 
						|
 | 
						|
void RedrawAutosave(void);
 | 
						|
 | 
						|
StringID RemapOldStringID(StringID s);
 | 
						|
 | 
						|
void UpdateViewportSignPos(ViewportSign *sign, int left, int top, StringID str);
 | 
						|
 | 
						|
enum {
 | 
						|
	SLD_LOAD_GAME,
 | 
						|
	SLD_LOAD_SCENARIO,
 | 
						|
	SLD_SAVE_GAME,
 | 
						|
	SLD_SAVE_SCENARIO,
 | 
						|
	SLD_LOAD_HEIGHTMAP,
 | 
						|
	SLD_NEW_GAME,
 | 
						|
};
 | 
						|
void ShowSaveLoadDialog(int mode);
 | 
						|
 | 
						|
// callback from drivers that is called if the game size changes dynamically
 | 
						|
void GameSizeChanged(void);
 | 
						|
bool FileExists(const char *filename);
 | 
						|
bool ReadLanguagePack(int index);
 | 
						|
void InitializeLanguagePacks(void);
 | 
						|
const char *GetCurrentLocale(const char *param);
 | 
						|
void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
 | 
						|
 | 
						|
void LoadFromConfig(void);
 | 
						|
void SaveToConfig(void);
 | 
						|
void CheckConfig(void);
 | 
						|
int ttd_main(int argc, char* argv[]);
 | 
						|
 | 
						|
void DeterminePaths(void);
 | 
						|
 | 
						|
void CSleep(int milliseconds);
 | 
						|
#endif /* FUNCTIONS_H */
 |