2004-08-09 17:04:08 +00:00
|
|
|
#ifndef FUNCTIONS_H
|
|
|
|
#define FUNCTIONS_H
|
|
|
|
|
|
|
|
/* vehicle.c */
|
|
|
|
|
|
|
|
/* window.c */
|
|
|
|
|
|
|
|
|
|
|
|
/* landscape.c */
|
|
|
|
void FindLandscapeHeight(TileInfo *ti, uint x, uint y);
|
|
|
|
void FindLandscapeHeightByTile(TileInfo *ti, uint tile);
|
|
|
|
uint GetTileSlope(uint tile, int *h);
|
|
|
|
int GetTileZ(uint tile);
|
|
|
|
|
|
|
|
void DoClearSquare(uint tile);
|
|
|
|
void CDECL ModifyTile(uint tile, uint flags, ...);
|
|
|
|
void SetMapExtraBits(uint tile, byte flags);
|
|
|
|
uint GetMapExtraBits(uint tile);
|
|
|
|
void RunTileLoop();
|
|
|
|
|
|
|
|
uint GetPartialZ(int x, int y, int corners);
|
|
|
|
uint GetSlopeZ(int x, int y);
|
2004-09-05 16:15:22 +00:00
|
|
|
uint32 GetTileTrackStatus(uint tile, TransportType mode);
|
2004-11-21 10:49:40 +00:00
|
|
|
void GetAcceptedCargo(uint tile, AcceptedCargo ac);
|
2004-08-09 17:04:08 +00:00
|
|
|
void ChangeTileOwner(uint tile, byte old_player, byte new_player);
|
|
|
|
void AnimateTile(uint tile);
|
|
|
|
void ClickTile(uint tile);
|
|
|
|
void GetTileDesc(uint tile, TileDesc *td);
|
|
|
|
void DrawTile(TileInfo *ti);
|
|
|
|
|
2004-08-24 12:54:37 +00:00
|
|
|
uint TileAddWrap(TileIndex tile, int addx, int addy);
|
2004-08-09 17:04:08 +00:00
|
|
|
enum {
|
|
|
|
TILE_WRAPPED = (uint)-1
|
|
|
|
};
|
|
|
|
|
|
|
|
bool IsValidTile(uint tile);
|
|
|
|
|
2004-12-03 07:43:00 +00:00
|
|
|
static inline Point RemapCoords(int x, int y, int z)
|
|
|
|
{
|
2004-08-09 17:04:08 +00:00
|
|
|
#if !defined(NEW_ROTATION)
|
2004-12-03 07:43:00 +00:00
|
|
|
Point pt = { (y - x) * 2, y + x - z };
|
2004-08-09 17:04:08 +00:00
|
|
|
#else
|
2004-12-03 07:43:00 +00:00
|
|
|
Point pt = { (x + y) * 2, x - y - z };
|
2004-08-09 17:04:08 +00:00
|
|
|
#endif
|
2004-12-03 07:43:00 +00:00
|
|
|
return pt;
|
|
|
|
}
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2004-12-03 07:43:00 +00:00
|
|
|
static inline Point RemapCoords2(int x, int y)
|
|
|
|
{
|
|
|
|
return RemapCoords(x, y, GetSlopeZ(x, y));
|
|
|
|
}
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
/* game.c */
|
|
|
|
byte *GetString(byte *buffr, uint16 string);
|
|
|
|
void InjectDparam(int amount);
|
|
|
|
|
|
|
|
int32 GetParamInt32();
|
|
|
|
int GetParamInt16();
|
|
|
|
int GetParamInt8();
|
|
|
|
int GetParamUint16();
|
|
|
|
|
|
|
|
|
|
|
|
/* clear_land.c */
|
|
|
|
void DrawHillyLandTile(TileInfo *ti);
|
|
|
|
void DrawClearLandTile(TileInfo *ti, byte set);
|
|
|
|
void DrawClearLandFence(TileInfo *ti, byte img);
|
|
|
|
void TileLoopClearHelper(uint tile);
|
|
|
|
|
|
|
|
/* station_land.c */
|
|
|
|
void StationPickerDrawSprite(int x, int y, int railtype, int image);
|
|
|
|
|
|
|
|
/* track_land.c */
|
|
|
|
void DrawTrainDepotSprite(int x, int y, int image, int railtype);
|
2004-11-14 22:10:08 +00:00
|
|
|
void DrawWaypointSprite(int x, int y, int image, int railtype);
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
/* road_land.c */
|
|
|
|
void DrawRoadDepotSprite(int x, int y, int image);
|
|
|
|
|
|
|
|
/* water_land.c */
|
|
|
|
void DrawShipDepotSprite(int x, int y, int image);
|
|
|
|
void TileLoop_Water(uint tile);
|
|
|
|
|
|
|
|
/* players.c */
|
|
|
|
bool CheckPlayerHasMoney(int32 cost);
|
|
|
|
void SubtractMoneyFromPlayer(int32 cost);
|
|
|
|
void SubtractMoneyFromPlayerFract(byte player, int32 cost);
|
|
|
|
bool CheckOwnership(byte owner);
|
|
|
|
bool CheckTileOwnership(uint tile);
|
2004-08-10 14:32:17 +00:00
|
|
|
StringID GetPlayerNameString(byte player, byte index);
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
/* standard */
|
|
|
|
void ShowInfo(const char *str);
|
|
|
|
void CDECL ShowInfoF(const char *str, ...);
|
|
|
|
void NORETURN CDECL error(const char *str, ...);
|
|
|
|
|
|
|
|
/* ttd.c */
|
2004-12-04 17:54:56 +00:00
|
|
|
|
|
|
|
// **************
|
|
|
|
// * 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
|
|
|
|
|
|
|
|
#ifdef RANDOM_DEBUG
|
|
|
|
#define Random() DoRandom(__LINE__, __FILE__)
|
|
|
|
uint32 DoRandom(uint line, char *file);
|
|
|
|
#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
|
|
|
|
uint DoRandomRange(uint max, uint line, char *file);
|
|
|
|
#else
|
|
|
|
uint32 Random();
|
|
|
|
uint RandomRange(uint max);
|
|
|
|
#endif
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2004-09-11 19:34:11 +00:00
|
|
|
void InitPlayerRandoms();
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
uint32 InteractiveRandom(); /* Used for random sequences that are not the same on the other end of the multiplayer link */
|
2004-09-13 22:49:11 +00:00
|
|
|
uint InteractiveRandomRange(uint max);
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
void SetDate(uint date);
|
|
|
|
/* facedraw.c */
|
|
|
|
void DrawPlayerFace(uint32 face, int color, int x, int y);
|
|
|
|
|
|
|
|
/* texteff.c */
|
|
|
|
void MoveAllTextEffects();
|
|
|
|
void AddTextEffect(StringID msg, int x, int y, uint16 duration);
|
|
|
|
void InitTextEffects();
|
|
|
|
void DrawTextEffects(DrawPixelInfo *dpi);
|
|
|
|
|
2004-12-04 17:54:56 +00:00
|
|
|
void InitTextMessage();
|
|
|
|
void DrawTextMessage();
|
2004-12-13 11:17:59 +00:00
|
|
|
void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
|
2004-12-04 17:54:56 +00:00
|
|
|
void UndrawTextMessage();
|
|
|
|
void TextMessageDailyLoop();
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
bool AddAnimatedTile(uint tile);
|
|
|
|
void DeleteAnimatedTile(uint tile);
|
|
|
|
void AnimateAnimatedTiles();
|
|
|
|
void InitializeAnimatedTiles();
|
|
|
|
|
|
|
|
/* tunnelbridge_cmd.c */
|
|
|
|
bool CheckTunnelInWay(uint tile, int z);
|
|
|
|
bool CheckBridge_Stuff(byte bridge_type, int bridge_len);
|
|
|
|
uint32 GetBridgeLength(TileIndex begin, TileIndex end);
|
|
|
|
int CalcBridgeLenCostFactor(int x);
|
|
|
|
|
|
|
|
typedef void CommandCallback(bool success, uint tile, uint32 p1, uint32 p2);
|
|
|
|
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
|
|
|
|
|
2004-12-04 17:54:56 +00:00
|
|
|
/* network.c */
|
|
|
|
void NetworkUDPClose(void);
|
|
|
|
void NetworkStartUp();
|
|
|
|
void NetworkShutDown(void);
|
|
|
|
void NetworkGameLoop(void);
|
|
|
|
void NetworkUDPGameLoop(void);
|
|
|
|
bool NetworkServerStart(void);
|
|
|
|
bool NetworkClientConnectGame(const byte* host, unsigned short port);
|
|
|
|
void NetworkReboot();
|
|
|
|
void NetworkDisconnect();
|
|
|
|
void NetworkSend_Command(uint32 tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback);
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
/* misc_cmd.c */
|
|
|
|
void PlaceTreesRandomly();
|
|
|
|
|
|
|
|
uint GetTileDist(TileIndex xy1, TileIndex xy2);
|
|
|
|
uint GetTileDist1D(TileIndex xy1, TileIndex xy2);
|
|
|
|
uint GetTileDist1Db(TileIndex xy1, TileIndex xy2);
|
|
|
|
uint GetTileDistAdv(TileIndex xy1, TileIndex xy2);
|
|
|
|
bool CheckDistanceFromEdge(TileIndex tile, uint distance);
|
|
|
|
|
|
|
|
void InitializeLandscapeVariables(bool only_constants);
|
|
|
|
|
|
|
|
/* misc.c */
|
|
|
|
void DeleteName(StringID id);
|
|
|
|
byte *GetName(int id, byte *buff);
|
2004-12-04 17:54:56 +00:00
|
|
|
|
|
|
|
// 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 byte *name, byte skip, bool check_double);
|
2004-08-09 17:04:08 +00:00
|
|
|
void ConvertDayToYMD(YearMonthDay *ymd, uint16 date);
|
|
|
|
uint ConvertYMDToDay(uint year, uint month, uint day);
|
|
|
|
uint ConvertIntDate(uint date);
|
2004-12-04 17:54:56 +00:00
|
|
|
void CSleep(int milliseconds);
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* misc functions */
|
|
|
|
void MarkTileDirty(int x, int y);
|
|
|
|
void MarkTileDirtyByTile(TileIndex tile);
|
|
|
|
void InvalidateWindow(byte cls, WindowNumber number);
|
|
|
|
void InvalidateWindowWidget(byte cls, WindowNumber number, byte widget_index);
|
|
|
|
void InvalidateWindowClasses(byte cls);
|
|
|
|
void DeleteWindowById(WindowClass cls, WindowNumber number);
|
|
|
|
|
|
|
|
void SetObjectToPlaceWnd(int icon, byte mode, Window *w);
|
|
|
|
void SetObjectToPlace(int icon, byte mode, byte window_class, uint16 window_num);
|
|
|
|
|
|
|
|
void ResetObjectToPlace();
|
2004-09-03 19:59:05 +00:00
|
|
|
|
|
|
|
bool ScrollWindowToTile(TileIndex tile, Window * w);
|
|
|
|
bool ScrollWindowTo(int x, int y, Window * w);
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
bool ScrollMainWindowToTile(TileIndex tile);
|
|
|
|
bool ScrollMainWindowTo(int x, int y);
|
|
|
|
void DrawSprite(uint32 img, int x, int y);
|
|
|
|
bool EnsureNoVehicle(TileIndex tile);
|
|
|
|
bool EnsureNoVehicleZ(TileIndex tile, byte z);
|
|
|
|
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
|
|
|
|
void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost);
|
|
|
|
void MarkWholeScreenDirty();
|
|
|
|
|
|
|
|
void DrawFoundation(TileInfo *ti, uint f);
|
|
|
|
|
|
|
|
bool CheckIfAuthorityAllows(uint tile);
|
|
|
|
Town *ClosestTownFromTile(uint tile, uint threshold);
|
|
|
|
void ChangeTownRating(Town *t, int add, int max);
|
|
|
|
|
|
|
|
uint GetRoadBitsByTile(TileIndex tile);
|
|
|
|
int GetTownRadiusGroup(Town *t, uint tile);
|
|
|
|
int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, byte cargo_type);
|
2004-12-04 17:54:56 +00:00
|
|
|
void ShowNetworkChatQueryWindow(byte desttype, byte dest);
|
|
|
|
void ShowNetworkGiveMoneyWindow(byte player);
|
|
|
|
void ShowNetworkNeedGamePassword();
|
|
|
|
void ShowNetworkNeedCompanyPassword();
|
2004-08-09 17:04:08 +00:00
|
|
|
void ShowRenameSignWindow(SignStruct *ss);
|
2004-11-14 13:07:07 +00:00
|
|
|
void ShowRenameWaypointWindow(Waypoint *cp);
|
2004-08-09 17:04:08 +00:00
|
|
|
int FindFirstBit(uint32 x);
|
|
|
|
void ShowHighscoreTable(int tbl);
|
|
|
|
TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng);
|
|
|
|
|
|
|
|
enum SaveOrLoadResult {
|
|
|
|
SL_OK = 0, // completed successfully
|
|
|
|
SL_ERROR = 1, // error that was caught before internal structures were modified
|
|
|
|
SL_REINIT = 2, // error that was caught in the middle of updating game state, need to clear it. (can only happen during load)
|
|
|
|
};
|
|
|
|
enum SaveOrLoadMode {
|
|
|
|
SL_INVALID = -1,
|
|
|
|
SL_LOAD = 0,
|
|
|
|
SL_SAVE = 1,
|
|
|
|
SL_OLD_LOAD = 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
int SaveOrLoad(const char *filename, int mode);
|
|
|
|
|
|
|
|
void AfterLoadTown();
|
|
|
|
void AskExitGame();
|
|
|
|
void AskExitToGameMenu();
|
|
|
|
|
|
|
|
void RedrawAutosave();
|
|
|
|
|
|
|
|
StringID RemapOldStringID(StringID s);
|
|
|
|
|
|
|
|
void UpdateViewportSignPos(ViewportSign *sign, int left, int top, StringID str);
|
|
|
|
|
|
|
|
enum {
|
|
|
|
SLD_LOAD_GAME = 0,
|
|
|
|
SLD_LOAD_SCENARIO = 1,
|
|
|
|
SLD_SAVE_GAME = 2,
|
|
|
|
SLD_SAVE_SCENARIO = 3,
|
|
|
|
SLD_NEW_GAME = 4,
|
|
|
|
};
|
|
|
|
void ShowSaveLoadDialog(int mode);
|
|
|
|
|
|
|
|
void ttd_strlcpy(char *dst, const char *src, size_t len);
|
|
|
|
|
|
|
|
// callback from drivers that is called if the game size changes dynamically
|
|
|
|
void GameSizeChanged();
|
|
|
|
bool FileExists(const char *filename);
|
|
|
|
bool ReadLanguagePack(int index);
|
|
|
|
void InitializeLanguagePacks();
|
|
|
|
byte *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
|
|
|
|
int GetLanguageList(char **languages, int max);
|
|
|
|
|
|
|
|
void CheckSwitchToEuro();
|
|
|
|
|
|
|
|
void LoadFromConfig();
|
|
|
|
void SaveToConfig();
|
|
|
|
int ttd_main(int argc, char* argv[]);
|
2004-09-12 22:03:14 +00:00
|
|
|
byte GetOSVersion();
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
void DeterminePaths();
|
|
|
|
char * CDECL str_fmt(const char *str, ...);
|
|
|
|
|
|
|
|
#endif /* FUNCTIONS_H */
|