mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-09 19:10:38 +00:00
Merge branch 'minimap-screenshot-rect' into jgrpp
Conflicts: src/screenshot.cpp
This commit is contained in:
commit
5a8049f65b
@ -49,7 +49,6 @@ static bool _script_running; ///< Script is running (used to abort execution whe
|
|||||||
#define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[])
|
#define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[])
|
||||||
#define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo)
|
#define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo)
|
||||||
|
|
||||||
|
|
||||||
/****************
|
/****************
|
||||||
* command hooks
|
* command hooks
|
||||||
****************/
|
****************/
|
||||||
@ -1390,6 +1389,29 @@ DEF_CONSOLE_CMD(ConScreenShot)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEF_CONSOLE_CMD(ConMinimap)
|
||||||
|
{
|
||||||
|
if (argc == 0) {
|
||||||
|
IConsoleHelp("Create a flat image of the game minimap. Usage: 'minimap [owner] [file name]'");
|
||||||
|
IConsoleHelp("'owner' uses the tile owner to colour the minimap image, this is the only mode at present");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *name = NULL;
|
||||||
|
if (argc > 1) {
|
||||||
|
if (strcmp(argv[1], "owner") != 0) {
|
||||||
|
/* invalid mode */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (argc > 2) {
|
||||||
|
name = argv[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveMinimap(name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
DEF_CONSOLE_CMD(ConInfoCmd)
|
DEF_CONSOLE_CMD(ConInfoCmd)
|
||||||
{
|
{
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
@ -1920,6 +1942,7 @@ void IConsoleStdLibRegister()
|
|||||||
IConsoleCmdRegister("reset_enginepool", ConResetEnginePool, ConHookNoNetwork);
|
IConsoleCmdRegister("reset_enginepool", ConResetEnginePool, ConHookNoNetwork);
|
||||||
IConsoleCmdRegister("return", ConReturn);
|
IConsoleCmdRegister("return", ConReturn);
|
||||||
IConsoleCmdRegister("screenshot", ConScreenShot);
|
IConsoleCmdRegister("screenshot", ConScreenShot);
|
||||||
|
IConsoleCmdRegister("minimap", ConMinimap);
|
||||||
IConsoleCmdRegister("script", ConScript);
|
IConsoleCmdRegister("script", ConScript);
|
||||||
IConsoleCmdRegister("scrollto", ConScrollToTile);
|
IConsoleCmdRegister("scrollto", ConScrollToTile);
|
||||||
IConsoleCmdRegister("alias", ConAlias);
|
IConsoleCmdRegister("alias", ConAlias);
|
||||||
|
@ -69,6 +69,8 @@ struct ScreenshotFormat {
|
|||||||
ScreenshotHandlerProc *proc; ///< Function for writing the screenshot.
|
ScreenshotHandlerProc *proc; ///< Function for writing the screenshot.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MKCOLOUR(x) TO_LE32X(x)
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
**** SCREENSHOT CODE FOR WINDOWS BITMAP (.BMP)
|
**** SCREENSHOT CODE FOR WINDOWS BITMAP (.BMP)
|
||||||
*************************************************/
|
*************************************************/
|
||||||
@ -905,3 +907,83 @@ bool MakeSmallMapScreenshot(unsigned int width, unsigned int height, SmallMapWin
|
|||||||
ShowScreenshotResultMessage(ret);
|
ShowScreenshotResultMessage(ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static byte _owner_colours[OWNER_END + 1];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the colour a tile would be displayed with in the small map in mode "Owner".
|
||||||
|
*
|
||||||
|
* @param tile The tile of which we would like to get the colour.
|
||||||
|
* @return The colour of tile in the small map in mode "Owner"
|
||||||
|
*/
|
||||||
|
static inline byte GetMinimapOwnerPixels(TileIndex tile)
|
||||||
|
{
|
||||||
|
Owner o;
|
||||||
|
|
||||||
|
switch (GetTileType(tile)) {
|
||||||
|
case MP_INDUSTRY: o = OWNER_END; break;
|
||||||
|
case MP_HOUSE: o = OWNER_TOWN; break;
|
||||||
|
default: o = GetTileOwner(tile); break;
|
||||||
|
/* FIXME: For MP_ROAD there are multiple owners.
|
||||||
|
* GetTileOwner returns the rail owner (level crossing) resp. the owner of ROADTYPE_ROAD (normal road),
|
||||||
|
* even if there are no ROADTYPE_ROAD bits on the tile.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
return _owner_colours[o];
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MinimapOwnerCallback(void *userdata, void *buf, uint y, uint pitch, uint n)
|
||||||
|
{
|
||||||
|
uint8 *ubuf = (uint8 *)buf;
|
||||||
|
|
||||||
|
uint num = (pitch * n);
|
||||||
|
uint row, col;
|
||||||
|
byte val;
|
||||||
|
|
||||||
|
for (uint i=0; i < num; i++) {
|
||||||
|
row = y + (int) (i / pitch);
|
||||||
|
col = (MapSizeX()-1) - (i % pitch);
|
||||||
|
|
||||||
|
TileIndex tile = TileXY(col, row);
|
||||||
|
|
||||||
|
if (IsTileType(tile, MP_VOID)) {
|
||||||
|
val = 0x00;
|
||||||
|
} else {
|
||||||
|
val = GetMinimapOwnerPixels(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
*ubuf = (uint8) _cur_palette.palette[val].b;
|
||||||
|
ubuf += sizeof(uint8); *ubuf = (uint8) _cur_palette.palette[val].g;
|
||||||
|
ubuf += sizeof(uint8); *ubuf = (uint8) _cur_palette.palette[val].r;
|
||||||
|
ubuf += sizeof(uint8);
|
||||||
|
ubuf += sizeof(uint8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the complete savemap in a PNG-file.
|
||||||
|
*/
|
||||||
|
void SaveMinimap(const char *name)
|
||||||
|
{
|
||||||
|
/* setup owner table */
|
||||||
|
const Company *c;
|
||||||
|
|
||||||
|
/* fill with some special colours */
|
||||||
|
_owner_colours[OWNER_TOWN] = MKCOLOUR(0xB4);
|
||||||
|
_owner_colours[OWNER_NONE] = MKCOLOUR(0x54);
|
||||||
|
_owner_colours[OWNER_WATER] = MKCOLOUR(0xCA);
|
||||||
|
_owner_colours[OWNER_END] = MKCOLOUR(0x20); // industry
|
||||||
|
|
||||||
|
/* now fill with the company colours */
|
||||||
|
FOR_ALL_COMPANIES(c) {
|
||||||
|
_owner_colours[c->index] =
|
||||||
|
_colour_gradient[c->colour][5] * 0x01010101;
|
||||||
|
}
|
||||||
|
|
||||||
|
_screenshot_name[0] = '\0';
|
||||||
|
if (name != NULL) strecpy(_screenshot_name, name, lastof(_screenshot_name));
|
||||||
|
|
||||||
|
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
|
||||||
|
sf->proc(MakeScreenshotName("minimap", sf->extension), MinimapOwnerCallback, NULL, MapSizeX(), MapSizeY(), 32, _cur_palette.palette);
|
||||||
|
}
|
||||||
|
@ -32,6 +32,7 @@ void SetupScreenshotViewport(ScreenshotType t, struct ViewPort *vp);
|
|||||||
bool MakeHeightmapScreenshot(const char *filename);
|
bool MakeHeightmapScreenshot(const char *filename);
|
||||||
bool MakeSmallMapScreenshot(unsigned int width, unsigned int height, SmallMapWindow *window);
|
bool MakeSmallMapScreenshot(unsigned int width, unsigned int height, SmallMapWindow *window);
|
||||||
bool MakeScreenshot(ScreenshotType t, const char *name);
|
bool MakeScreenshot(ScreenshotType t, const char *name);
|
||||||
|
void SaveMinimap(const char *name);
|
||||||
|
|
||||||
extern char _screenshot_format_name[8];
|
extern char _screenshot_format_name[8];
|
||||||
extern uint _num_screenshot_formats;
|
extern uint _num_screenshot_formats;
|
||||||
|
Loading…
Reference in New Issue
Block a user