Merge branch 'master' into jgrpp

# Conflicts:
#	src/clear_cmd.cpp
#	src/main_gui.cpp
#	src/saveload/newgrf_sl.cpp
#	src/water_cmd.cpp
pull/480/head
Jonathan G Rennison 1 year ago
commit 32fe84cfdd

@ -41,7 +41,6 @@ INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 2 TAB_SIZE = 2
ALIASES = ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_FOR_FORTRAN = NO
@ -155,7 +154,6 @@ VERBATIM_HEADERS = YES
# Configuration options related to the alphabetical class index # Configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX = IGNORE_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the HTML output # Configuration options related to the HTML output
@ -224,7 +222,7 @@ LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO COMPACT_LATEX = NO
PAPER_TYPE = a4wide PAPER_TYPE = a4
EXTRA_PACKAGES = EXTRA_PACKAGES =
LATEX_HEADER = LATEX_HEADER =
LATEX_FOOTER = LATEX_FOOTER =

@ -342,7 +342,7 @@ foreach(LINE IN LISTS SOURCE_LINES)
else() else()
string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");") string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");")
endif() endif()
if(NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") if(NOT "${SUPER_CLS}" MATCHES "^ScriptEvent")
if("${CLS_PARAM_2}" STREQUAL "v") if("${CLS_PARAM_2}" STREQUAL "v")
string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);") string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);")
else() else()

@ -13,7 +13,6 @@
#include "landscape.h" #include "landscape.h"
#include "genworld.h" #include "genworld.h"
#include "viewport_func.h" #include "viewport_func.h"
#include "water.h"
#include "core/random_func.hpp" #include "core/random_func.hpp"
#include "newgrf_generic.h" #include "newgrf_generic.h"
#include "newgrf_newlandscape.h" #include "newgrf_newlandscape.h"
@ -330,14 +329,6 @@ static void TileLoopClearDesert(TileIndex tile)
static void TileLoop_Clear(TileIndex tile) static void TileLoop_Clear(TileIndex tile)
{ {
/* If the tile is at any edge flood it to prevent maps without water. */
if (_settings_game.construction.freeform_edges && DistanceFromEdge(tile) == 1) {
int z;
if (IsTileFlat(tile, &z) && z == 0) {
DoFloodTile(tile);
return;
}
}
AmbientSoundEffect(tile); AmbientSoundEffect(tile);
switch (_settings_game.game_creation.landscape) { switch (_settings_game.game_creation.landscape) {

@ -3619,6 +3619,10 @@ STR_ERROR_INVALID_SIGNAL :{WHITE}유효
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}철교 선택 STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}철교 선택
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}다리 종류를 선택하세요 STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}다리 종류를 선택하세요
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}다리 건설 - 원하는 다리 종류를 선택하세요 STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}다리 건설 - 원하는 다리 종류를 선택하세요
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :강철 현수교 STR_BRIDGE_NAME_SUSPENSION_STEEL :강철 현수교
STR_BRIDGE_NAME_GIRDER_STEEL :강철 거더교 STR_BRIDGE_NAME_GIRDER_STEEL :강철 거더교
STR_BRIDGE_NAME_CANTILEVER_STEEL :강철 캔틸레버교 STR_BRIDGE_NAME_CANTILEVER_STEEL :강철 캔틸레버교

@ -254,7 +254,7 @@ struct MainWindow : Window
nvp->InitializeViewport(this, TileXY(32, 32), ScaleZoomGUI(ZOOM_LVL_VIEWPORT)); nvp->InitializeViewport(this, TileXY(32, 32), ScaleZoomGUI(ZOOM_LVL_VIEWPORT));
this->viewport->map_type = (ViewportMapType) _settings_client.gui.default_viewport_map_mode; this->viewport->map_type = (ViewportMapType) _settings_client.gui.default_viewport_map_mode;
this->viewport->overlay = new LinkGraphOverlay(this, WID_M_VIEWPORT, 0, 0, 3); this->viewport->overlay = new LinkGraphOverlay(this, WID_M_VIEWPORT, 0, 0, 2);
this->refresh.SetInterval(LINKGRAPH_DELAY); this->refresh.SetInterval(LINKGRAPH_DELAY);
} }

@ -175,7 +175,7 @@ void AirportOverrideManager::SetEntitySpec(AirportSpec *as)
{ {
byte airport_id = this->AddEntityID(as->grf_prop.local_id, as->grf_prop.grffile->grfid, as->grf_prop.subst_id); byte airport_id = this->AddEntityID(as->grf_prop.local_id, as->grf_prop.grffile->grfid, as->grf_prop.subst_id);
if (airport_id == invalid_ID) { if (airport_id == this->invalid_id) {
grfmsg(1, "Airport.SetEntitySpec: Too many airports allocated. Ignoring."); grfmsg(1, "Airport.SetEntitySpec: Too many airports allocated. Ignoring.");
return; return;
} }
@ -183,15 +183,15 @@ void AirportOverrideManager::SetEntitySpec(AirportSpec *as)
memcpy(AirportSpec::GetWithoutOverride(airport_id), as, sizeof(*as)); memcpy(AirportSpec::GetWithoutOverride(airport_id), as, sizeof(*as));
/* Now add the overrides. */ /* Now add the overrides. */
for (int i = 0; i < max_offset; i++) { for (int i = 0; i < this->max_offset; i++) {
AirportSpec *overridden_as = AirportSpec::GetWithoutOverride(i); AirportSpec *overridden_as = AirportSpec::GetWithoutOverride(i);
if (entity_overrides[i] != as->grf_prop.local_id || grfid_overrides[i] != as->grf_prop.grffile->grfid) continue; if (this->entity_overrides[i] != as->grf_prop.local_id || this->grfid_overrides[i] != as->grf_prop.grffile->grfid) continue;
overridden_as->grf_prop.override = airport_id; overridden_as->grf_prop.override = airport_id;
overridden_as->enabled = false; overridden_as->enabled = false;
entity_overrides[i] = invalid_ID; this->entity_overrides[i] = this->invalid_id;
grfid_overrides[i] = 0; this->grfid_overrides[i] = 0;
} }
} }

@ -67,7 +67,7 @@ void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts)
{ {
StationGfx airpt_id = this->AddEntityID(airpts->grf_prop.local_id, airpts->grf_prop.grffile->grfid, airpts->grf_prop.subst_id); StationGfx airpt_id = this->AddEntityID(airpts->grf_prop.local_id, airpts->grf_prop.grffile->grfid, airpts->grf_prop.subst_id);
if (airpt_id == invalid_ID) { if (airpt_id == this->invalid_id) {
grfmsg(1, "AirportTile.SetEntitySpec: Too many airport tiles allocated. Ignoring."); grfmsg(1, "AirportTile.SetEntitySpec: Too many airport tiles allocated. Ignoring.");
return; return;
} }
@ -75,15 +75,15 @@ void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts)
memcpy(&AirportTileSpec::tiles[airpt_id], airpts, sizeof(*airpts)); memcpy(&AirportTileSpec::tiles[airpt_id], airpts, sizeof(*airpts));
/* Now add the overrides. */ /* Now add the overrides. */
for (int i = 0; i < max_offset; i++) { for (int i = 0; i < this->max_offset; i++) {
AirportTileSpec *overridden_airpts = &AirportTileSpec::tiles[i]; AirportTileSpec *overridden_airpts = &AirportTileSpec::tiles[i];
if (entity_overrides[i] != airpts->grf_prop.local_id || grfid_overrides[i] != airpts->grf_prop.grffile->grfid) continue; if (this->entity_overrides[i] != airpts->grf_prop.local_id || this->grfid_overrides[i] != airpts->grf_prop.grffile->grfid) continue;
overridden_airpts->grf_prop.override = airpt_id; overridden_airpts->grf_prop.override = airpt_id;
overridden_airpts->enabled = false; overridden_airpts->enabled = false;
entity_overrides[i] = invalid_ID; this->entity_overrides[i] = this->invalid_id;
grfid_overrides[i] = 0; this->grfid_overrides[i] = 0;
} }
} }

@ -41,25 +41,14 @@
*/ */
OverrideManagerBase::OverrideManagerBase(uint16 offset, uint16 maximum, uint16 invalid) OverrideManagerBase::OverrideManagerBase(uint16 offset, uint16 maximum, uint16 invalid)
{ {
max_offset = offset; this->max_offset = offset;
max_new_entities = maximum; this->max_entities = maximum;
invalid_ID = invalid; this->invalid_id = invalid;
mapping_ID = CallocT<EntityIDMapping>(max_new_entities); this->mappings.resize(this->max_entities);
entity_overrides = MallocT<uint16>(max_offset); this->entity_overrides.resize(this->max_offset);
for (size_t i = 0; i < max_offset; i++) entity_overrides[i] = invalid; std::fill(this->entity_overrides.begin(), this->entity_overrides.end(), this->invalid_id);
grfid_overrides = CallocT<uint32>(max_offset); this->grfid_overrides.resize(this->max_offset);
}
/**
* Destructor of the generic class.
* Frees allocated memory of constructor
*/
OverrideManagerBase::~OverrideManagerBase()
{
free(mapping_ID);
free(entity_overrides);
free(grfid_overrides);
} }
/** /**
@ -72,26 +61,24 @@ OverrideManagerBase::~OverrideManagerBase()
*/ */
void OverrideManagerBase::Add(uint8 local_id, uint32 grfid, uint entity_type) void OverrideManagerBase::Add(uint8 local_id, uint32 grfid, uint entity_type)
{ {
assert(entity_type < max_offset); assert(entity_type < this->max_offset);
/* An override can be set only once */ /* An override can be set only once */
if (entity_overrides[entity_type] != invalid_ID) return; if (this->entity_overrides[entity_type] != this->invalid_id) return;
entity_overrides[entity_type] = local_id; this->entity_overrides[entity_type] = local_id;
grfid_overrides[entity_type] = grfid; this->grfid_overrides[entity_type] = grfid;
} }
/** Resets the mapping, which is used while initializing game */ /** Resets the mapping, which is used while initializing game */
void OverrideManagerBase::ResetMapping() void OverrideManagerBase::ResetMapping()
{ {
memset(mapping_ID, 0, (max_new_entities - 1) * sizeof(EntityIDMapping)); std::fill(this->mappings.begin(), this->mappings.end(), EntityIDMapping{});
} }
/** Resets the override, which is used while initializing game */ /** Resets the override, which is used while initializing game */
void OverrideManagerBase::ResetOverride() void OverrideManagerBase::ResetOverride()
{ {
for (uint16 i = 0; i < max_offset; i++) { std::fill(this->entity_overrides.begin(), this->entity_overrides.end(), this->invalid_id);
entity_overrides[i] = invalid_ID; std::fill(this->grfid_overrides.begin(), this->grfid_overrides.end(), uint32());
grfid_overrides[i] = 0;
}
} }
/** /**
@ -102,16 +89,14 @@ void OverrideManagerBase::ResetOverride()
*/ */
uint16 OverrideManagerBase::GetID(uint8 grf_local_id, uint32 grfid) const uint16 OverrideManagerBase::GetID(uint8 grf_local_id, uint32 grfid) const
{ {
const EntityIDMapping *map; for (uint16 id = 0; id < this->max_entities; id++) {
const EntityIDMapping *map = &this->mappings[id];
for (uint16 id = 0; id < max_new_entities; id++) {
map = &mapping_ID[id];
if (map->entity_id == grf_local_id && map->grfid == grfid) { if (map->entity_id == grf_local_id && map->grfid == grfid) {
return id; return id;
} }
} }
return invalid_ID; return this->invalid_id;
} }
/** /**
@ -124,19 +109,16 @@ uint16 OverrideManagerBase::GetID(uint8 grf_local_id, uint32 grfid) const
uint16 OverrideManagerBase::AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id) uint16 OverrideManagerBase::AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id)
{ {
uint16 id = this->GetID(grf_local_id, grfid); uint16 id = this->GetID(grf_local_id, grfid);
EntityIDMapping *map;
/* Look to see if this entity has already been added. This is done /* Look to see if this entity has already been added. This is done
* separately from the loop below in case a GRF has been deleted, and there * separately from the loop below in case a GRF has been deleted, and there
* are any gaps in the array. * are any gaps in the array.
*/ */
if (id != invalid_ID) { if (id != this->invalid_id) return id;
return id;
}
/* This entity hasn't been defined before, so give it an ID now. */ /* This entity hasn't been defined before, so give it an ID now. */
for (id = max_offset; id < max_new_entities; id++) { for (id = this->max_offset; id < this->max_entities; id++) {
map = &mapping_ID[id]; EntityIDMapping *map = &this->mappings[id];
if (CheckValidNewID(id) && map->entity_id == 0 && map->grfid == 0) { if (CheckValidNewID(id) && map->entity_id == 0 && map->grfid == 0) {
map->entity_id = grf_local_id; map->entity_id = grf_local_id;
@ -146,7 +128,7 @@ uint16 OverrideManagerBase::AddEntityID(byte grf_local_id, uint32 grfid, byte su
} }
} }
return invalid_ID; return this->invalid_id;
} }
/** /**
@ -156,7 +138,7 @@ uint16 OverrideManagerBase::AddEntityID(byte grf_local_id, uint32 grfid, byte su
*/ */
uint32 OverrideManagerBase::GetGRFID(uint16 entity_id) const uint32 OverrideManagerBase::GetGRFID(uint16 entity_id) const
{ {
return mapping_ID[entity_id].grfid; return this->mappings[entity_id].grfid;
} }
/** /**
@ -166,7 +148,7 @@ uint32 OverrideManagerBase::GetGRFID(uint16 entity_id) const
*/ */
uint16 OverrideManagerBase::GetSubstituteID(uint16 entity_id) const uint16 OverrideManagerBase::GetSubstituteID(uint16 entity_id) const
{ {
return mapping_ID[entity_id].substitute_id; return this->mappings[entity_id].substitute_id;
} }
/** /**
@ -178,7 +160,7 @@ void HouseOverrideManager::SetEntitySpec(const HouseSpec *hs)
{ {
HouseID house_id = this->AddEntityID(hs->grf_prop.local_id, hs->grf_prop.grffile->grfid, hs->grf_prop.subst_id); HouseID house_id = this->AddEntityID(hs->grf_prop.local_id, hs->grf_prop.grffile->grfid, hs->grf_prop.subst_id);
if (house_id == invalid_ID) { if (house_id == this->invalid_id) {
grfmsg(1, "House.SetEntitySpec: Too many houses allocated. Ignoring."); grfmsg(1, "House.SetEntitySpec: Too many houses allocated. Ignoring.");
return; return;
} }
@ -186,14 +168,14 @@ void HouseOverrideManager::SetEntitySpec(const HouseSpec *hs)
MemCpyT(HouseSpec::Get(house_id), hs); MemCpyT(HouseSpec::Get(house_id), hs);
/* Now add the overrides. */ /* Now add the overrides. */
for (int i = 0; i != max_offset; i++) { for (int i = 0; i < this->max_offset; i++) {
HouseSpec *overridden_hs = HouseSpec::Get(i); HouseSpec *overridden_hs = HouseSpec::Get(i);
if (entity_overrides[i] != hs->grf_prop.local_id || grfid_overrides[i] != hs->grf_prop.grffile->grfid) continue; if (this->entity_overrides[i] != hs->grf_prop.local_id || this->grfid_overrides[i] != hs->grf_prop.grffile->grfid) continue;
overridden_hs->grf_prop.override = house_id; overridden_hs->grf_prop.override = house_id;
entity_overrides[i] = invalid_ID; this->entity_overrides[i] = this->invalid_id;
grfid_overrides[i] = 0; this->grfid_overrides[i] = 0;
} }
} }
@ -206,14 +188,14 @@ void HouseOverrideManager::SetEntitySpec(const HouseSpec *hs)
uint16 IndustryOverrideManager::GetID(uint8 grf_local_id, uint32 grfid) const uint16 IndustryOverrideManager::GetID(uint8 grf_local_id, uint32 grfid) const
{ {
uint16 id = OverrideManagerBase::GetID(grf_local_id, grfid); uint16 id = OverrideManagerBase::GetID(grf_local_id, grfid);
if (id != invalid_ID) return id; if (id != this->invalid_id) return id;
/* No mapping found, try the overrides */ /* No mapping found, try the overrides */
for (id = 0; id < max_offset; id++) { for (id = 0; id < this->max_offset; id++) {
if (entity_overrides[id] == grf_local_id && grfid_overrides[id] == grfid) return id; if (this->entity_overrides[id] == grf_local_id && this->grfid_overrides[id] == grfid) return id;
} }
return invalid_ID; return this->invalid_id;
} }
/** /**
@ -226,9 +208,9 @@ uint16 IndustryOverrideManager::GetID(uint8 grf_local_id, uint32 grfid) const
uint16 IndustryOverrideManager::AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id) uint16 IndustryOverrideManager::AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id)
{ {
/* This entity hasn't been defined before, so give it an ID now. */ /* This entity hasn't been defined before, so give it an ID now. */
for (uint16 id = 0; id < max_new_entities; id++) { for (uint16 id = 0; id < this->max_entities; id++) {
/* Skip overridden industries */ /* Skip overridden industries */
if (id < max_offset && entity_overrides[id] != invalid_ID) continue; if (id < this->max_offset && this->entity_overrides[id] != this->invalid_id) continue;
/* Get the real live industry */ /* Get the real live industry */
const IndustrySpec *inds = GetIndustrySpec(id); const IndustrySpec *inds = GetIndustrySpec(id);
@ -237,7 +219,7 @@ uint16 IndustryOverrideManager::AddEntityID(byte grf_local_id, uint32 grfid, byt
* And it must not already be used by a grf (grffile == nullptr). * And it must not already be used by a grf (grffile == nullptr).
* So reserve this slot here, as it is the chosen one */ * So reserve this slot here, as it is the chosen one */
if (!inds->enabled && inds->grf_prop.grffile == nullptr) { if (!inds->enabled && inds->grf_prop.grffile == nullptr) {
EntityIDMapping *map = &mapping_ID[id]; EntityIDMapping *map = &this->mappings[id];
if (map->entity_id == 0 && map->grfid == 0) { if (map->entity_id == 0 && map->grfid == 0) {
/* winning slot, mark it as been used */ /* winning slot, mark it as been used */
@ -249,7 +231,7 @@ uint16 IndustryOverrideManager::AddEntityID(byte grf_local_id, uint32 grfid, byt
} }
} }
return invalid_ID; return this->invalid_id;
} }
/** /**
@ -263,16 +245,16 @@ void IndustryOverrideManager::SetEntitySpec(IndustrySpec *inds)
/* First step : We need to find if this industry is already specified in the savegame data. */ /* First step : We need to find if this industry is already specified in the savegame data. */
IndustryType ind_id = this->GetID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid); IndustryType ind_id = this->GetID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid);
if (ind_id == invalid_ID) { if (ind_id == this->invalid_id) {
/* Not found. /* Not found.
* Or it has already been overridden, so you've lost your place. * Or it has already been overridden, so you've lost your place.
* Or it is a simple substitute. * Or it is a simple substitute.
* We need to find a free available slot */ * We need to find a free available slot */
ind_id = this->AddEntityID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid, inds->grf_prop.subst_id); ind_id = this->AddEntityID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid, inds->grf_prop.subst_id);
inds->grf_prop.override = invalid_ID; // make sure it will not be detected as overridden inds->grf_prop.override = this->invalid_id; // make sure it will not be detected as overridden
} }
if (ind_id == invalid_ID) { if (ind_id == this->invalid_id) {
grfmsg(1, "Industry.SetEntitySpec: Too many industries allocated. Ignoring."); grfmsg(1, "Industry.SetEntitySpec: Too many industries allocated. Ignoring.");
return; return;
} }
@ -287,7 +269,7 @@ void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
{ {
IndustryGfx indt_id = this->AddEntityID(its->grf_prop.local_id, its->grf_prop.grffile->grfid, its->grf_prop.subst_id); IndustryGfx indt_id = this->AddEntityID(its->grf_prop.local_id, its->grf_prop.grffile->grfid, its->grf_prop.subst_id);
if (indt_id == invalid_ID) { if (indt_id == this->invalid_id) {
grfmsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring."); grfmsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring.");
return; return;
} }
@ -295,15 +277,15 @@ void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
memcpy(&_industry_tile_specs[indt_id], its, sizeof(*its)); memcpy(&_industry_tile_specs[indt_id], its, sizeof(*its));
/* Now add the overrides. */ /* Now add the overrides. */
for (int i = 0; i < max_offset; i++) { for (int i = 0; i < this->max_offset; i++) {
IndustryTileSpec *overridden_its = &_industry_tile_specs[i]; IndustryTileSpec *overridden_its = &_industry_tile_specs[i];
if (entity_overrides[i] != its->grf_prop.local_id || grfid_overrides[i] != its->grf_prop.grffile->grfid) continue; if (this->entity_overrides[i] != its->grf_prop.local_id || this->grfid_overrides[i] != its->grf_prop.grffile->grfid) continue;
overridden_its->grf_prop.override = indt_id; overridden_its->grf_prop.override = indt_id;
overridden_its->enabled = false; overridden_its->enabled = false;
entity_overrides[i] = invalid_ID; this->entity_overrides[i] = this->invalid_id;
grfid_overrides[i] = 0; this->grfid_overrides[i] = 0;
} }
} }
@ -318,7 +300,7 @@ void ObjectOverrideManager::SetEntitySpec(ObjectSpec *spec)
/* First step : We need to find if this object is already specified in the savegame data. */ /* First step : We need to find if this object is already specified in the savegame data. */
ObjectType type = this->GetID(spec->grf_prop.local_id, spec->grf_prop.grffile->grfid); ObjectType type = this->GetID(spec->grf_prop.local_id, spec->grf_prop.grffile->grfid);
if (type == invalid_ID) { if (type == this->invalid_id) {
/* Not found. /* Not found.
* Or it has already been overridden, so you've lost your place. * Or it has already been overridden, so you've lost your place.
* Or it is a simple substitute. * Or it is a simple substitute.
@ -326,7 +308,7 @@ void ObjectOverrideManager::SetEntitySpec(ObjectSpec *spec)
type = this->AddEntityID(spec->grf_prop.local_id, spec->grf_prop.grffile->grfid, OBJECT_TRANSMITTER); type = this->AddEntityID(spec->grf_prop.local_id, spec->grf_prop.grffile->grfid, OBJECT_TRANSMITTER);
} }
if (type == invalid_ID) { if (type == this->invalid_id) {
grfmsg(1, "Object.SetEntitySpec: Too many objects allocated. Ignoring."); grfmsg(1, "Object.SetEntitySpec: Too many objects allocated. Ignoring.");
return; return;
} }

@ -191,20 +191,20 @@ struct EntityIDMapping {
class OverrideManagerBase { class OverrideManagerBase {
protected: protected:
uint16 *entity_overrides; std::vector<uint16> entity_overrides;
uint32 *grfid_overrides; std::vector<uint32> grfid_overrides;
uint16 max_offset; ///< what is the length of the original entity's array of specs uint16 max_offset; ///< what is the length of the original entity's array of specs
uint16 max_new_entities; ///< what is the amount of entities, old and new summed uint16 max_entities; ///< what is the amount of entities, old and new summed
uint16 invalid_ID; ///< ID used to detected invalid entities; uint16 invalid_id; ///< ID used to detected invalid entities;
virtual bool CheckValidNewID(uint16 testid) { return true; } virtual bool CheckValidNewID(uint16 testid) { return true; }
public: public:
EntityIDMapping *mapping_ID; ///< mapping of ids from grf files. Public out of convenience std::vector<EntityIDMapping> mappings; ///< mapping of ids from grf files. Public out of convenience
OverrideManagerBase(uint16 offset, uint16 maximum, uint16 invalid); OverrideManagerBase(uint16 offset, uint16 maximum, uint16 invalid);
virtual ~OverrideManagerBase(); virtual ~OverrideManagerBase() {}
void ResetOverride(); void ResetOverride();
void ResetMapping(); void ResetMapping();
@ -216,8 +216,8 @@ public:
uint16 GetSubstituteID(uint16 entity_id) const; uint16 GetSubstituteID(uint16 entity_id) const;
virtual uint16 GetID(uint8 grf_local_id, uint32 grfid) const; virtual uint16 GetID(uint8 grf_local_id, uint32 grfid) const;
inline uint16 GetMaxMapping() const { return max_new_entities; } inline uint16 GetMaxMapping() const { return this->max_entities; }
inline uint16 GetMaxOffset() const { return max_offset; } inline uint16 GetMaxOffset() const { return this->max_offset; }
}; };
@ -267,7 +267,7 @@ public:
struct AirportTileSpec; struct AirportTileSpec;
class AirportTileOverrideManager : public OverrideManagerBase { class AirportTileOverrideManager : public OverrideManagerBase {
protected: protected:
virtual bool CheckValidNewID(uint16 testid) { return testid != 0xFF; } virtual bool CheckValidNewID(uint16 testid) override { return testid != 0xFF; }
public: public:
AirportTileOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) : AirportTileOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
OverrideManagerBase(offset, maximum, invalid) {} OverrideManagerBase(offset, maximum, invalid) {}
@ -278,7 +278,7 @@ public:
struct ObjectSpec; struct ObjectSpec;
class ObjectOverrideManager : public OverrideManagerBase { class ObjectOverrideManager : public OverrideManagerBase {
protected: protected:
virtual bool CheckValidNewID(uint16 testid) { return testid != 0xFF; } virtual bool CheckValidNewID(uint16 testid) override { return testid != 0xFF; }
public: public:
ObjectOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) : ObjectOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
OverrideManagerBase(offset, maximum, invalid) {} OverrideManagerBase(offset, maximum, invalid) {}

@ -30,11 +30,11 @@ static const SaveLoad _newgrf_mapping_desc[] = {
void Save_NewGRFMapping(const OverrideManagerBase &mapping) void Save_NewGRFMapping(const OverrideManagerBase &mapping)
{ {
for (uint i = 0; i < mapping.GetMaxMapping(); i++) { for (uint i = 0; i < mapping.GetMaxMapping(); i++) {
if (mapping.mapping_ID[i].grfid == 0 && if (mapping.mappings[i].grfid == 0 &&
mapping.mapping_ID[i].entity_id == 0) continue; mapping.mappings[i].entity_id == 0) continue;
SlSetArrayIndex(i); SlSetArrayIndex(i);
SlSetLength(4 + 1 + 1); SlSetLength(4 + 1 + 1);
SlObjectSaveFiltered(&mapping.mapping_ID[i], _newgrf_mapping_desc); // _newgrf_mapping_desc has no conditionals SlObjectSaveFiltered(const_cast<EntityIDMapping *>(&mapping.mappings[i]), _newgrf_mapping_desc); // _newgrf_mapping_desc has no conditionals
} }
} }
@ -53,7 +53,7 @@ void Load_NewGRFMapping(OverrideManagerBase &mapping)
int index; int index;
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
if (unlikely((uint)index >= max_id)) SlErrorCorrupt("Too many NewGRF entity mappings"); if (unlikely((uint)index >= max_id)) SlErrorCorrupt("Too many NewGRF entity mappings");
SlObjectLoadFiltered(&mapping.mapping_ID[index], _newgrf_mapping_desc); // _newgrf_mapping_desc has no conditionals SlObjectLoadFiltered(&mapping.mappings[index], _newgrf_mapping_desc); // _newgrf_mapping_desc has no conditionals
} }
} }

@ -34,10 +34,10 @@ void NewGRFMappingChunkHandler::Save() const
SlTableHeader(_newgrf_mapping_desc); SlTableHeader(_newgrf_mapping_desc);
for (uint i = 0; i < this->mapping.GetMaxMapping(); i++) { for (uint i = 0; i < this->mapping.GetMaxMapping(); i++) {
if (this->mapping.mapping_ID[i].grfid == 0 && if (this->mapping.mappings[i].grfid == 0 &&
this->mapping.mapping_ID[i].entity_id == 0) continue; this->mapping.mappings[i].entity_id == 0) continue;
SlSetArrayIndex(i); SlSetArrayIndex(i);
SlObject(&this->mapping.mapping_ID[i], _newgrf_mapping_desc); SlObject(&this->mapping.mappings[i], _newgrf_mapping_desc);
} }
} }
@ -57,7 +57,7 @@ void NewGRFMappingChunkHandler::Load() const
int index; int index;
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
if ((uint)index >= max_id) SlErrorCorrupt("Too many NewGRF entity mappings"); if ((uint)index >= max_id) SlErrorCorrupt("Too many NewGRF entity mappings");
SlObject(&this->mapping.mapping_ID[index], slt); SlObject(&this->mapping.mappings[index], slt);
} }
} }

@ -121,7 +121,6 @@ VERBATIM_HEADERS = NO
# configuration options related to the alphabetical class index # configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX = IGNORE_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the HTML output # configuration options related to the HTML output
@ -151,7 +150,7 @@ LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO COMPACT_LATEX = NO
PAPER_TYPE = a4wide PAPER_TYPE = a4
EXTRA_PACKAGES = EXTRA_PACKAGES =
LATEX_HEADER = LATEX_HEADER =
PDF_HYPERLINKS = NO PDF_HYPERLINKS = NO

@ -121,7 +121,6 @@ VERBATIM_HEADERS = NO
# configuration options related to the alphabetical class index # configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX = IGNORE_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the HTML output # configuration options related to the HTML output
@ -151,7 +150,7 @@ LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO COMPACT_LATEX = NO
PAPER_TYPE = a4wide PAPER_TYPE = a4
EXTRA_PACKAGES = EXTRA_PACKAGES =
LATEX_HEADER = LATEX_HEADER =
PDF_HYPERLINKS = NO PDF_HYPERLINKS = NO

@ -50,7 +50,7 @@ public:
* @param station_id The basestation to set the name of. * @param station_id The basestation to set the name of.
* @param name The new name of the station (can be either a raw string, or a ScriptText object). * @param name The new name of the station (can be either a raw string, or a ScriptText object).
* @pre IsValidBaseStation(station_id). * @pre IsValidBaseStation(station_id).
* @pre name != nullptr && len(name) != 0. * @pre name != null && len(name) != 0.
* @game @pre Valid ScriptCompanyMode active in scope. * @game @pre Valid ScriptCompanyMode active in scope.
* @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE
* @return True if the name was changed. * @return True if the name was changed.

@ -5,7 +5,7 @@
* 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/>. * 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 script_clientlist.hpp List all the TODO. */ /** @file script_clientlist.hpp List all the clients in a game or in a company. */
#ifndef SCRIPT_CLIENTLIST_HPP #ifndef SCRIPT_CLIENTLIST_HPP
#define SCRIPT_CLIENTLIST_HPP #define SCRIPT_CLIENTLIST_HPP
@ -32,7 +32,7 @@ public:
class ScriptClientList_Company : public ScriptList { class ScriptClientList_Company : public ScriptList {
public: public:
/** /**
* @param company_id The company to list clients for. * @param company The company to list clients for.
*/ */
ScriptClientList_Company(ScriptCompany::CompanyID company); ScriptClientList_Company(ScriptCompany::CompanyID company);
}; };

@ -138,7 +138,7 @@ public:
/** /**
* Set the name of your company. * Set the name of your company.
* @param name The new name of the company (can be either a raw string, or a ScriptText object). * @param name The new name of the company (can be either a raw string, or a ScriptText object).
* @pre name != nullptr && len(name) != 0. * @pre name != null && len(name) != 0.
* @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE
* @return True if the name was changed. * @return True if the name was changed.
*/ */
@ -155,7 +155,7 @@ public:
/** /**
* Set the name of your president. * Set the name of your president.
* @param name The new name of the president (can be either a raw string, or a ScriptText object). * @param name The new name of the president (can be either a raw string, or a ScriptText object).
* @pre name != nullptr && len(name) != 0. * @pre name != null && len(name) != 0.
* @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE
* @return True if the name was changed. * @return True if the name was changed.
*/ */

@ -61,6 +61,7 @@ public:
/** /**
* Constructor of ScriptEvent, to get the type of event. * Constructor of ScriptEvent, to get the type of event.
* @param type The type of event to construct.
*/ */
ScriptEvent(ScriptEvent::ScriptEventType type) : ScriptEvent(ScriptEvent::ScriptEventType type) :
type(type) type(type)

@ -33,6 +33,7 @@ public:
CRASH_FLOODED, ///< Vehicle was flooded CRASH_FLOODED, ///< Vehicle was flooded
}; };
#ifndef DOXYGEN_API
/** /**
* @param vehicle The vehicle that crashed. * @param vehicle The vehicle that crashed.
* @param crash_site Where the vehicle crashed. * @param crash_site Where the vehicle crashed.
@ -44,6 +45,7 @@ public:
vehicle(vehicle), vehicle(vehicle),
crash_reason(crash_reason) crash_reason(crash_reason)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -82,6 +84,7 @@ private:
*/ */
class ScriptEventSubsidyOffer : public ScriptEvent { class ScriptEventSubsidyOffer : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param subsidy_id The index of this subsidy in the _subsidies array. * @param subsidy_id The index of this subsidy in the _subsidies array.
*/ */
@ -89,6 +92,7 @@ public:
ScriptEvent(ET_SUBSIDY_OFFER), ScriptEvent(ET_SUBSIDY_OFFER),
subsidy_id(subsidy_id) subsidy_id(subsidy_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -113,6 +117,7 @@ private:
*/ */
class ScriptEventSubsidyOfferExpired : public ScriptEvent { class ScriptEventSubsidyOfferExpired : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param subsidy_id The index of this subsidy in the _subsidies array. * @param subsidy_id The index of this subsidy in the _subsidies array.
*/ */
@ -120,6 +125,7 @@ public:
ScriptEvent(ET_SUBSIDY_OFFER_EXPIRED), ScriptEvent(ET_SUBSIDY_OFFER_EXPIRED),
subsidy_id(subsidy_id) subsidy_id(subsidy_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -144,6 +150,7 @@ private:
*/ */
class ScriptEventSubsidyAwarded : public ScriptEvent { class ScriptEventSubsidyAwarded : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param subsidy_id The index of this subsidy in the _subsidies array. * @param subsidy_id The index of this subsidy in the _subsidies array.
*/ */
@ -151,6 +158,7 @@ public:
ScriptEvent(ET_SUBSIDY_AWARDED), ScriptEvent(ET_SUBSIDY_AWARDED),
subsidy_id(subsidy_id) subsidy_id(subsidy_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -175,6 +183,7 @@ private:
*/ */
class ScriptEventSubsidyExpired : public ScriptEvent { class ScriptEventSubsidyExpired : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param subsidy_id The index of this subsidy in the _subsidies array. * @param subsidy_id The index of this subsidy in the _subsidies array.
*/ */
@ -182,6 +191,7 @@ public:
ScriptEvent(ET_SUBSIDY_EXPIRED), ScriptEvent(ET_SUBSIDY_EXPIRED),
subsidy_id(subsidy_id) subsidy_id(subsidy_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -208,6 +218,7 @@ private:
*/ */
class ScriptEventEnginePreview : public ScriptEvent { class ScriptEventEnginePreview : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param engine The engine offered to test. * @param engine The engine offered to test.
*/ */
@ -215,6 +226,7 @@ public:
ScriptEvent(ET_ENGINE_PREVIEW), ScriptEvent(ET_ENGINE_PREVIEW),
engine(engine) engine(engine)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -297,6 +309,7 @@ private:
*/ */
class ScriptEventCompanyNew : public ScriptEvent { class ScriptEventCompanyNew : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param owner The new company. * @param owner The new company.
*/ */
@ -304,6 +317,7 @@ public:
ScriptEvent(ET_COMPANY_NEW), ScriptEvent(ET_COMPANY_NEW),
owner((ScriptCompany::CompanyID)owner) owner((ScriptCompany::CompanyID)owner)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -329,6 +343,7 @@ private:
*/ */
class ScriptEventCompanyInTrouble : public ScriptEvent { class ScriptEventCompanyInTrouble : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param owner The company that is in trouble. * @param owner The company that is in trouble.
*/ */
@ -336,6 +351,7 @@ public:
ScriptEvent(ET_COMPANY_IN_TROUBLE), ScriptEvent(ET_COMPANY_IN_TROUBLE),
owner((ScriptCompany::CompanyID)owner) owner((ScriptCompany::CompanyID)owner)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -360,6 +376,7 @@ private:
*/ */
class ScriptEventCompanyAskMerger : public ScriptEvent { class ScriptEventCompanyAskMerger : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param owner The company that can be bought. * @param owner The company that can be bought.
* @param value The value/costs of buying the company. * @param value The value/costs of buying the company.
@ -369,6 +386,7 @@ public:
owner((ScriptCompany::CompanyID)owner), owner((ScriptCompany::CompanyID)owner),
value(value) value(value)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -408,6 +426,7 @@ private:
*/ */
class ScriptEventCompanyMerger : public ScriptEvent { class ScriptEventCompanyMerger : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param old_owner The company bought off. * @param old_owner The company bought off.
* @param new_owner The company that bought owner. * @param new_owner The company that bought owner.
@ -417,6 +436,7 @@ public:
old_owner((ScriptCompany::CompanyID)old_owner), old_owner((ScriptCompany::CompanyID)old_owner),
new_owner((ScriptCompany::CompanyID)new_owner) new_owner((ScriptCompany::CompanyID)new_owner)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -451,6 +471,7 @@ private:
*/ */
class ScriptEventCompanyBankrupt : public ScriptEvent { class ScriptEventCompanyBankrupt : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param owner The company that has gone bankrupt. * @param owner The company that has gone bankrupt.
*/ */
@ -458,6 +479,7 @@ public:
ScriptEvent(ET_COMPANY_BANKRUPT), ScriptEvent(ET_COMPANY_BANKRUPT),
owner((ScriptCompany::CompanyID)owner) owner((ScriptCompany::CompanyID)owner)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -482,6 +504,7 @@ private:
*/ */
class ScriptEventVehicleLost : public ScriptEvent { class ScriptEventVehicleLost : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param vehicle_id The vehicle that is lost. * @param vehicle_id The vehicle that is lost.
*/ */
@ -489,6 +512,7 @@ public:
ScriptEvent(ET_VEHICLE_LOST), ScriptEvent(ET_VEHICLE_LOST),
vehicle_id(vehicle_id) vehicle_id(vehicle_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -513,6 +537,7 @@ private:
*/ */
class ScriptEventVehicleWaitingInDepot : public ScriptEvent { class ScriptEventVehicleWaitingInDepot : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param vehicle_id The vehicle that is waiting in a depot. * @param vehicle_id The vehicle that is waiting in a depot.
*/ */
@ -520,6 +545,7 @@ public:
ScriptEvent(ET_VEHICLE_WAITING_IN_DEPOT), ScriptEvent(ET_VEHICLE_WAITING_IN_DEPOT),
vehicle_id(vehicle_id) vehicle_id(vehicle_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -544,6 +570,7 @@ private:
*/ */
class ScriptEventVehicleUnprofitable : public ScriptEvent { class ScriptEventVehicleUnprofitable : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param vehicle_id The vehicle that was unprofitable. * @param vehicle_id The vehicle that was unprofitable.
*/ */
@ -551,6 +578,7 @@ public:
ScriptEvent(ET_VEHICLE_UNPROFITABLE), ScriptEvent(ET_VEHICLE_UNPROFITABLE),
vehicle_id(vehicle_id) vehicle_id(vehicle_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -575,6 +603,7 @@ private:
*/ */
class ScriptEventIndustryOpen : public ScriptEvent { class ScriptEventIndustryOpen : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param industry_id The new industry. * @param industry_id The new industry.
*/ */
@ -582,6 +611,7 @@ public:
ScriptEvent(ET_INDUSTRY_OPEN), ScriptEvent(ET_INDUSTRY_OPEN),
industry_id(industry_id) industry_id(industry_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -606,6 +636,7 @@ private:
*/ */
class ScriptEventIndustryClose : public ScriptEvent { class ScriptEventIndustryClose : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param industry_id The new industry. * @param industry_id The new industry.
*/ */
@ -613,6 +644,7 @@ public:
ScriptEvent(ET_INDUSTRY_CLOSE), ScriptEvent(ET_INDUSTRY_CLOSE),
industry_id(industry_id) industry_id(industry_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -637,6 +669,7 @@ private:
*/ */
class ScriptEventEngineAvailable : public ScriptEvent { class ScriptEventEngineAvailable : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param engine The engine that is available. * @param engine The engine that is available.
*/ */
@ -644,6 +677,7 @@ public:
ScriptEvent(ET_ENGINE_AVAILABLE), ScriptEvent(ET_ENGINE_AVAILABLE),
engine(engine) engine(engine)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -668,6 +702,7 @@ private:
*/ */
class ScriptEventStationFirstVehicle : public ScriptEvent { class ScriptEventStationFirstVehicle : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param station The station visited for the first time. * @param station The station visited for the first time.
* @param vehicle The vehicle visiting the station. * @param vehicle The vehicle visiting the station.
@ -677,6 +712,7 @@ public:
station(station), station(station),
vehicle(vehicle) vehicle(vehicle)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -708,6 +744,7 @@ private:
*/ */
class ScriptEventDisasterZeppelinerCrashed : public ScriptEvent { class ScriptEventDisasterZeppelinerCrashed : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param station The station containing the affected airport * @param station The station containing the affected airport
*/ */
@ -715,6 +752,7 @@ public:
ScriptEvent(ET_DISASTER_ZEPPELINER_CRASHED), ScriptEvent(ET_DISASTER_ZEPPELINER_CRASHED),
station(station) station(station)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -739,6 +777,7 @@ private:
*/ */
class ScriptEventDisasterZeppelinerCleared : public ScriptEvent { class ScriptEventDisasterZeppelinerCleared : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param station The station containing the affected airport * @param station The station containing the affected airport
*/ */
@ -746,6 +785,7 @@ public:
ScriptEvent(ET_DISASTER_ZEPPELINER_CLEARED), ScriptEvent(ET_DISASTER_ZEPPELINER_CLEARED),
station(station) station(station)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -770,6 +810,7 @@ private:
*/ */
class ScriptEventTownFounded : public ScriptEvent { class ScriptEventTownFounded : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param town The town that was created. * @param town The town that was created.
*/ */
@ -777,6 +818,7 @@ public:
ScriptEvent(ET_TOWN_FOUNDED), ScriptEvent(ET_TOWN_FOUNDED),
town(town) town(town)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -803,6 +845,7 @@ private:
*/ */
class ScriptEventAircraftDestTooFar : public ScriptEvent { class ScriptEventAircraftDestTooFar : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param vehicle_id The aircraft whose destination is too far away. * @param vehicle_id The aircraft whose destination is too far away.
*/ */
@ -810,6 +853,7 @@ public:
ScriptEvent(ET_AIRCRAFT_DEST_TOO_FAR), ScriptEvent(ET_AIRCRAFT_DEST_TOO_FAR),
vehicle_id(vehicle_id) vehicle_id(vehicle_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -834,10 +878,12 @@ private:
*/ */
class ScriptEventAdminPort : public ScriptEvent { class ScriptEventAdminPort : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param json The JSON string which got sent. * @param json The JSON string which got sent.
*/ */
ScriptEventAdminPort(const std::string &json); ScriptEventAdminPort(const std::string &json);
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -846,10 +892,19 @@ public:
*/ */
static ScriptEventAdminPort *Convert(ScriptEvent *instance) { return (ScriptEventAdminPort *)instance; } static ScriptEventAdminPort *Convert(ScriptEvent *instance) { return (ScriptEventAdminPort *)instance; }
#ifndef DOXYGEN_API
/** /**
* Get the information that was sent to you back as Squirrel object. * The GetObject() wrapper from Squirrel.
*/ */
SQInteger GetObject(HSQUIRRELVM vm); SQInteger GetObject(HSQUIRRELVM vm);
#else
/**
* Get the information that was sent to you back as Squirrel object.
* @return The object.
*/
SQObject GetObject();
#endif /* DOXYGEN_API */
private: private:
std::string json; ///< The JSON string. std::string json; ///< The JSON string.
@ -882,6 +937,7 @@ private:
*/ */
class ScriptEventWindowWidgetClick : public ScriptEvent { class ScriptEventWindowWidgetClick : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param window The windowclass that was clicked. * @param window The windowclass that was clicked.
* @param number The windownumber that was clicked. * @param number The windownumber that was clicked.
@ -893,6 +949,7 @@ public:
number(number), number(number),
widget(widget) widget(widget)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -903,16 +960,19 @@ public:
/** /**
* Get the class of the window that was clicked. * Get the class of the window that was clicked.
* @return The clicked window class.
*/ */
ScriptWindow::WindowClass GetWindowClass() { return this->window; } ScriptWindow::WindowClass GetWindowClass() { return this->window; }
/** /**
* Get the number of the window that was clicked. * Get the number of the window that was clicked.
* @return The clicked identifying number of the widget within the class.
*/ */
uint32 GetWindowNumber() { return this->number; } uint32 GetWindowNumber() { return this->number; }
/** /**
* Get the number of the widget that was clicked. * Get the number of the widget that was clicked.
* @return The number of the clicked widget.
*/ */
uint8 GetWidgetNumber() { return this->widget; } uint8 GetWidgetNumber() { return this->widget; }
@ -930,6 +990,7 @@ private:
*/ */
class ScriptEventGoalQuestionAnswer : public ScriptEvent { class ScriptEventGoalQuestionAnswer : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param uniqueid The uniqueID you have given this question. * @param uniqueid The uniqueID you have given this question.
* @param company The company that is replying. * @param company The company that is replying.
@ -941,6 +1002,7 @@ public:
company(company), company(company),
button(button) button(button)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -951,16 +1013,19 @@ public:
/** /**
* Get the unique id of the question. * Get the unique id of the question.
* @return The unique id.
*/ */
uint16 GetUniqueID() { return this->uniqueid; } uint16 GetUniqueID() { return this->uniqueid; }
/** /**
* Get the company that pressed a button. * Get the company that pressed a button.
* @return The company.
*/ */
ScriptCompany::CompanyID GetCompany() { return this->company; } ScriptCompany::CompanyID GetCompany() { return this->company; }
/** /**
* Get the button that got pressed. * Get the button that got pressed.
* @return The button.
*/ */
ScriptGoal::QuestionButton GetButton() { return this->button; } ScriptGoal::QuestionButton GetButton() { return this->button; }
@ -976,6 +1041,7 @@ private:
*/ */
class ScriptEventCompanyTown : public ScriptEvent { class ScriptEventCompanyTown : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param event The eventtype. * @param event The eventtype.
* @param company The company. * @param company The company.
@ -986,6 +1052,7 @@ public:
company(company), company(company),
town(town) town(town)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1018,6 +1085,7 @@ private:
*/ */
class ScriptEventExclusiveTransportRights : public ScriptEventCompanyTown { class ScriptEventExclusiveTransportRights : public ScriptEventCompanyTown {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param company The company. * @param company The company.
* @param town The town. * @param town The town.
@ -1025,6 +1093,7 @@ public:
ScriptEventExclusiveTransportRights(ScriptCompany::CompanyID company, TownID town) : ScriptEventExclusiveTransportRights(ScriptCompany::CompanyID company, TownID town) :
ScriptEventCompanyTown(ET_EXCLUSIVE_TRANSPORT_RIGHTS, company, town) ScriptEventCompanyTown(ET_EXCLUSIVE_TRANSPORT_RIGHTS, company, town)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1041,6 +1110,7 @@ public:
*/ */
class ScriptEventRoadReconstruction : public ScriptEventCompanyTown { class ScriptEventRoadReconstruction : public ScriptEventCompanyTown {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param company The company. * @param company The company.
* @param town The town. * @param town The town.
@ -1048,6 +1118,7 @@ public:
ScriptEventRoadReconstruction(ScriptCompany::CompanyID company, TownID town) : ScriptEventRoadReconstruction(ScriptCompany::CompanyID company, TownID town) :
ScriptEventCompanyTown(ET_ROAD_RECONSTRUCTION, company, town) ScriptEventCompanyTown(ET_ROAD_RECONSTRUCTION, company, town)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1063,6 +1134,7 @@ public:
*/ */
class ScriptEventVehicleAutoReplaced : public ScriptEvent { class ScriptEventVehicleAutoReplaced : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param old_id The vehicle that has been replaced. * @param old_id The vehicle that has been replaced.
* @param new_id The vehicle that has been created in replacement. * @param new_id The vehicle that has been created in replacement.
@ -1072,6 +1144,7 @@ public:
old_id(old_id), old_id(old_id),
new_id(new_id) new_id(new_id)
{} {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1103,6 +1176,7 @@ private:
*/ */
class ScriptEventStoryPageButtonClick : public ScriptEvent { class ScriptEventStoryPageButtonClick : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param company_id Which company triggered the event. * @param company_id Which company triggered the event.
* @param page_id Which page was the clicked button on. * @param page_id Which page was the clicked button on.
@ -1113,7 +1187,8 @@ public:
company_id((ScriptCompany::CompanyID)company_id), company_id((ScriptCompany::CompanyID)company_id),
page_id(page_id), page_id(page_id),
element_id(element_id) element_id(element_id)
{ } {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1122,13 +1197,22 @@ public:
*/ */
static ScriptEventStoryPageButtonClick *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageButtonClick *)instance; } static ScriptEventStoryPageButtonClick *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageButtonClick *)instance; }
/** Get the CompanyID of the player that selected a tile. */ /**
* Get the CompanyID of the player that selected a tile.
* @return The ID of the company.
*/
ScriptCompany::CompanyID GetCompanyID() { return this->company_id; } ScriptCompany::CompanyID GetCompanyID() { return this->company_id; }
/** Get the StoryPageID of the storybook page the clicked button is located on. */ /**
* Get the StoryPageID of the storybook page the clicked button is located on.
* @return The ID of the page in the story book the click was on.
*/
StoryPageID GetStoryPageID() { return this->page_id; } StoryPageID GetStoryPageID() { return this->page_id; }
/** Get the StoryPageElementID of the button element that was clicked. */ /**
* Get the StoryPageElementID of the button element that was clicked.
* @return The ID of the element that was clicked.
*/
StoryPageElementID GetElementID() { return this->element_id; } StoryPageElementID GetElementID() { return this->element_id; }
private: private:
@ -1143,6 +1227,7 @@ private:
*/ */
class ScriptEventStoryPageTileSelect : public ScriptEvent { class ScriptEventStoryPageTileSelect : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param company_id Which company triggered the event. * @param company_id Which company triggered the event.
* @param page_id Which page is the used selection button on. * @param page_id Which page is the used selection button on.
@ -1155,7 +1240,8 @@ public:
page_id(page_id), page_id(page_id),
element_id(element_id), element_id(element_id),
tile_index(tile_index) tile_index(tile_index)
{ } {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1164,16 +1250,28 @@ public:
*/ */
static ScriptEventStoryPageTileSelect *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageTileSelect *)instance; } static ScriptEventStoryPageTileSelect *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageTileSelect *)instance; }
/** Get the CompanyID of the player that selected a tile. */ /**
* Get the CompanyID of the player that selected a tile.
* @return The company that selected the tile.
*/
ScriptCompany::CompanyID GetCompanyID() { return this->company_id; } ScriptCompany::CompanyID GetCompanyID() { return this->company_id; }
/** Get the StoryPageID of the storybook page the used selection button is located on. */ /**
* Get the StoryPageID of the storybook page the used selection button is located on.
* @return The ID of the story page selection was done from.
*/
StoryPageID GetStoryPageID() { return this->page_id; } StoryPageID GetStoryPageID() { return this->page_id; }
/** Get the StoryPageElementID of the selection button used to select the tile. */ /**
* Get the StoryPageElementID of the selection button used to select the tile.
* @return The ID of the element that was used to select the tile.
*/
StoryPageElementID GetElementID() { return this->element_id; } StoryPageElementID GetElementID() { return this->element_id; }
/** Get the TileIndex of the tile the player selected */ /**
* Get the TileIndex of the tile the player selected.
* @return The selected tile.
*/
TileIndex GetTile() { return this->tile_index; } TileIndex GetTile() { return this->tile_index; }
private: private:
@ -1189,6 +1287,7 @@ private:
*/ */
class ScriptEventStoryPageVehicleSelect : public ScriptEvent { class ScriptEventStoryPageVehicleSelect : public ScriptEvent {
public: public:
#ifndef DOXYGEN_API
/** /**
* @param company_id Which company triggered the event. * @param company_id Which company triggered the event.
* @param page_id Which page is the used selection button on. * @param page_id Which page is the used selection button on.
@ -1201,7 +1300,8 @@ public:
page_id(page_id), page_id(page_id),
element_id(element_id), element_id(element_id),
vehicle_id(vehicle_id) vehicle_id(vehicle_id)
{ } {}
#endif /* DOXYGEN_API */
/** /**
* Convert an ScriptEvent to the real instance. * Convert an ScriptEvent to the real instance.
@ -1210,16 +1310,28 @@ public:
*/ */
static ScriptEventStoryPageVehicleSelect *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageVehicleSelect *)instance; } static ScriptEventStoryPageVehicleSelect *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageVehicleSelect *)instance; }
/** Get the CompanyID of the player that selected a tile. */ /**
* Get the CompanyID of the player that selected a tile.
* @return The company's ID.
*/
ScriptCompany::CompanyID GetCompanyID() { return this->company_id; } ScriptCompany::CompanyID GetCompanyID() { return this->company_id; }
/** Get the StoryPageID of the storybook page the used selection button is located on. */ /**
* Get the StoryPageID of the storybook page the used selection button is located on.
* @return The ID of the storybook page the selected element is on.
*/
StoryPageID GetStoryPageID() { return this->page_id; } StoryPageID GetStoryPageID() { return this->page_id; }
/** Get the StoryPageElementID of the selection button used to select the vehicle. */ /**
* Get the StoryPageElementID of the selection button used to select the vehicle.
* @return The ID of the selected element of the story page.
*/
StoryPageElementID GetElementID() { return this->element_id; } StoryPageElementID GetElementID() { return this->element_id; }
/** Get the VehicleID of the vehicle the player selected */ /**
* Get the VehicleID of the vehicle the player selected.
* @return The ID of the vehicle.
*/
VehicleID GetVehicleID() { return this->vehicle_id; } VehicleID GetVehicleID() { return this->vehicle_id; }
private: private:

@ -53,6 +53,7 @@ public:
/** /**
* Get the current landscape. * Get the current landscape.
* @return The type of landscape.
*/ */
static LandscapeType GetLandscape(); static LandscapeType GetLandscape();

@ -97,7 +97,7 @@ public:
* @param destination The destination of the \a type type. * @param destination The destination of the \a type type.
* @return The new GoalID, or GOAL_INVALID if it failed. * @return The new GoalID, or GOAL_INVALID if it failed.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre goal != nullptr && len(goal) != 0. * @pre goal != null && len(goal) != 0.
* @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID.
* @pre if type is GT_STORY_PAGE, the company of the goal and the company of the story page need to match: * @pre if type is GT_STORY_PAGE, the company of the goal and the company of the story page need to match:
* \li Global goals can only reference global story pages. * \li Global goals can only reference global story pages.
@ -120,7 +120,7 @@ public:
* @param goal The new goal text (can be either a raw string, or a ScriptText object). * @param goal The new goal text (can be either a raw string, or a ScriptText object).
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre goal != nullptr && len(goal) != 0. * @pre goal != null && len(goal) != 0.
* @pre IsValidGoal(goal_id). * @pre IsValidGoal(goal_id).
*/ */
static bool SetText(GoalID goal_id, Text *goal); static bool SetText(GoalID goal_id, Text *goal);
@ -131,7 +131,7 @@ public:
* the progress string short. * the progress string short.
* @param goal_id The goal to update. * @param goal_id The goal to update.
* @param progress The new progress text for the goal (can be either a raw string, * @param progress The new progress text for the goal (can be either a raw string,
* or a ScriptText object). To clear the progress string you can pass nullptr or an * or a ScriptText object). To clear the progress string you can pass null or an
* empty string. * empty string.
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
@ -167,7 +167,7 @@ public:
* @param buttons Any combinations (at least 1, up to 3) of buttons defined in QuestionButton. Like BUTTON_YES + BUTTON_NO. * @param buttons Any combinations (at least 1, up to 3) of buttons defined in QuestionButton. Like BUTTON_YES + BUTTON_NO.
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre question != nullptr && len(question) != 0. * @pre question != null && len(question) != 0.
* @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID.
* @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3. * @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3.
* @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer. * @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer.
@ -185,7 +185,7 @@ public:
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre ScriptGame::IsMultiplayer() * @pre ScriptGame::IsMultiplayer()
* @pre question != nullptr && len(question) != 0. * @pre question != null && len(question) != 0.
* @pre ResolveClientID(client) != CLIENT_INVALID. * @pre ResolveClientID(client) != CLIENT_INVALID.
* @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3. * @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3.
* @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer. * @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer.

@ -69,7 +69,7 @@ public:
* @param group_id The group to set the name for. * @param group_id The group to set the name for.
* @param name The name for the group (can be either a raw string, or a ScriptText object). * @param name The name for the group (can be either a raw string, or a ScriptText object).
* @pre IsValidGroup(group_id). * @pre IsValidGroup(group_id).
* @pre name != nullptr && len(name) != 0 * @pre name != null && len(name) != 0
* @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE
* @return True if and only if the name was changed. * @return True if and only if the name was changed.
*/ */
@ -232,6 +232,7 @@ public:
* @param group_id The group id to set the colour of. * @param group_id The group id to set the colour of.
* @param colour Colour to set. * @param colour Colour to set.
* @pre IsValidGroup(group_id). * @pre IsValidGroup(group_id).
* @return True iff the colour was set successfully.
*/ */
static bool SetPrimaryColour(GroupID group_id, ScriptCompany::Colours colour); static bool SetPrimaryColour(GroupID group_id, ScriptCompany::Colours colour);
@ -240,6 +241,7 @@ public:
* @param group_id The group id to set the colour of. * @param group_id The group id to set the colour of.
* @param colour Colour to set. * @param colour Colour to set.
* @pre IsValidGroup(group_id). * @pre IsValidGroup(group_id).
* @return True iff the colour was set successfully.
*/ */
static bool SetSecondaryColour(GroupID group_id, ScriptCompany::Colours colour); static bool SetSecondaryColour(GroupID group_id, ScriptCompany::Colours colour);
@ -247,6 +249,7 @@ public:
* Get primary colour of a group. * Get primary colour of a group.
* @param group_id The group id to get the colour of. * @param group_id The group id to get the colour of.
* @pre IsValidGroup(group_id). * @pre IsValidGroup(group_id).
* @return The primary colour of the group.
*/ */
static ScriptCompany::Colours GetPrimaryColour(GroupID group_id); static ScriptCompany::Colours GetPrimaryColour(GroupID group_id);
@ -254,6 +257,7 @@ public:
* Get secondary colour for a group. * Get secondary colour for a group.
* @param group_id The group id to get the colour of. * @param group_id The group id to get the colour of.
* @pre IsValidGroup(group_id). * @pre IsValidGroup(group_id).
* @return The secondary colour of the group.
*/ */
static ScriptCompany::Colours GetSecondaryColour(GroupID group_id); static ScriptCompany::Colours GetSecondaryColour(GroupID group_id);
}; };

@ -184,7 +184,7 @@ public:
/** /**
* Get a specific industry-type from a grf. * Get a specific industry-type from a grf.
* @param grf_id The ID of the NewGRF. * @param grfid The ID of the NewGRF.
* @param grf_local_id The ID of the industry, local to the NewGRF. * @param grf_local_id The ID of the industry, local to the NewGRF.
* @pre 0x00 <= grf_local_id < NUM_INDUSTRYTYPES_PER_GRF. * @pre 0x00 <= grf_local_id < NUM_INDUSTRYTYPES_PER_GRF.
* @return the industry-type ID, local to the current game (this diverges from the grf_local_id). * @return the industry-type ID, local to the current game (this diverges from the grf_local_id).

@ -68,9 +68,11 @@ public:
/** /**
* Create a new league table. * Create a new league table.
* @param title League table title (can be either a raw string, or ScriptText object). * @param title League table title (can be either a raw string, or ScriptText object).
* @param header The optional header text for the table (null is allowed).
* @param footer The optional footer text for the table (null is allowed).
* @return The new LeagueTableID, or LEAGUE_TABLE_INVALID if it failed. * @return The new LeagueTableID, or LEAGUE_TABLE_INVALID if it failed.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre title != nullptr && len(title) != 0. * @pre title != null && len(title) != 0.
*/ */
static LeagueTableID New(Text *title, Text *header, Text *footer); static LeagueTableID New(Text *title, Text *header, Text *footer);
@ -86,8 +88,8 @@ public:
* @return The new LeagueTableElementID, or LEAGUE_TABLE_ELEMENT_INVALID if it failed. * @return The new LeagueTableElementID, or LEAGUE_TABLE_ELEMENT_INVALID if it failed.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre IsValidLeagueTable(table). * @pre IsValidLeagueTable(table).
* @pre text != nullptr && len(text) != 0. * @pre text != null && len(text) != 0.
* @pre score != nullptr && len(score) != 0. * @pre score != null && len(score) != 0.
* @pre IsValidLink(Link(link_type, link_target)). * @pre IsValidLink(Link(link_type, link_target)).
*/ */
static LeagueTableElementID NewElement(LeagueTableID table, int64 rating, ScriptCompany::CompanyID company, Text *text, Text *score, LinkType link_type, LinkTargetID link_target); static LeagueTableElementID NewElement(LeagueTableID table, int64 rating, ScriptCompany::CompanyID company, Text *text, Text *score, LinkType link_type, LinkTargetID link_target);
@ -102,7 +104,7 @@ public:
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre IsValidLeagueTableElement(element). * @pre IsValidLeagueTableElement(element).
* @pre text != nullptr && len(text) != 0. * @pre text != null && len(text) != 0.
* @pre IsValidLink(Link(link_type, link_target)). * @pre IsValidLink(Link(link_type, link_target)).
*/ */
static bool UpdateElementData(LeagueTableElementID element, ScriptCompany::CompanyID company, Text *text, LinkType link_type, LinkTargetID link_target); static bool UpdateElementData(LeagueTableElementID element, ScriptCompany::CompanyID company, Text *text, LinkType link_type, LinkTargetID link_target);
@ -115,7 +117,7 @@ public:
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre IsValidLeagueTableElement(element). * @pre IsValidLeagueTableElement(element).
* @pre score != nullptr && len(score) != 0. * @pre score != null && len(score) != 0.
*/ */
static bool UpdateElementScore(LeagueTableElementID element, int64 rating, Text *score); static bool UpdateElementScore(LeagueTableElementID element, int64 rating, Text *score);

@ -196,7 +196,7 @@ public:
/** /**
* Remove everything that is in the given list from this list (same item index that is). * Remove everything that is in the given list from this list (same item index that is).
* @param list the list of items to remove. * @param list the list of items to remove.
* @pre list != nullptr * @pre list != null
*/ */
void RemoveList(ScriptList *list); void RemoveList(ScriptList *list);
@ -240,7 +240,7 @@ public:
/** /**
* Keeps everything that is in the given list from this list (same item index that is). * Keeps everything that is in the given list from this list (same item index that is).
* @param list the list of items to keep. * @param list the list of items to keep.
* @pre list != nullptr * @pre list != null
*/ */
void KeepList(ScriptList *list); void KeepList(ScriptList *list);

@ -48,7 +48,7 @@ public:
* Get the name of a loaded NewGRF. * Get the name of a loaded NewGRF.
* @param grfid The NewGRF to query. * @param grfid The NewGRF to query.
* @pre ScriptNewGRF::IsLoaded(grfid). * @pre ScriptNewGRF::IsLoaded(grfid).
* @return The name of the NewGRF or nullptr if no name is defined. * @return The name of the NewGRF or null if no name is defined.
*/ */
static char *GetName(uint32 grfid); static char *GetName(uint32 grfid);
}; };

@ -59,7 +59,7 @@ public:
* - For #NR_TOWN this parameter should be a valid townID (ScriptTown::IsValidTown). * - For #NR_TOWN this parameter should be a valid townID (ScriptTown::IsValidTown).
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre type must be #NT_ECONOMY, #NT_SUBSIDIES, or #NT_GENERAL. * @pre type must be #NT_ECONOMY, #NT_SUBSIDIES, or #NT_GENERAL.
* @pre text != nullptr. * @pre text != null.
* @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID.
* @pre The \a reference condition must be fulfilled. * @pre The \a reference condition must be fulfilled.
*/ */

@ -55,7 +55,7 @@ public:
/** /**
* Get a specific object-type from a grf. * Get a specific object-type from a grf.
* @param grf_id The ID of the NewGRF. * @param grfid The ID of the NewGRF.
* @param grf_local_id The ID of the object, local to the NewGRF. * @param grf_local_id The ID of the object, local to the NewGRF.
* @pre 0x00 <= grf_local_id < NUM_OBJECTS_PER_GRF. * @pre 0x00 <= grf_local_id < NUM_OBJECTS_PER_GRF.
* @return the object-type ID, local to the current game (this diverges from the grf_local_id). * @return the object-type ID, local to the current game (this diverges from the grf_local_id).

@ -61,6 +61,7 @@ public:
/** /**
* Check if an items is already included in the queue. * Check if an items is already included in the queue.
* @param item The item to check whether it's already in this queue.
* @return true if the items is already in the queue. * @return true if the items is already in the queue.
* @note Performance is O(n), use only when absolutely required. * @note Performance is O(n), use only when absolutely required.
*/ */

@ -160,7 +160,7 @@ public:
/** /**
* Check if a road vehicle built for a road type can run on another road type. * Check if a road vehicle built for a road type can run on another road type.
* @param engine_road_type The road type the road vehicle is built for. * @param engine_road_type The road type the road vehicle is built for.
* @param track_road_type The road type you want to check. * @param road_road_type The road type you want to check.
* @pre ScriptRoad::IsRoadTypeAvailable(engine_road_type). * @pre ScriptRoad::IsRoadTypeAvailable(engine_road_type).
* @pre ScriptRoad::IsRoadTypeAvailable(road_road_type). * @pre ScriptRoad::IsRoadTypeAvailable(road_road_type).
* @return Whether a road vehicle built for 'engine_road_type' can run on 'road_road_type'. * @return Whether a road vehicle built for 'engine_road_type' can run on 'road_road_type'.
@ -405,7 +405,6 @@ public:
* one-way in the other direction, it's made a 'no'-way road (it's * one-way in the other direction, it's made a 'no'-way road (it's
* forbidden to enter the tile from any direction). * forbidden to enter the tile from any direction).
* @param start The start tile of the road. * @param start The start tile of the road.
* @param start The start tile of the road.
* @param end The end tile of the road. * @param end The end tile of the road.
* @pre 'start' is not equal to 'end'. * @pre 'start' is not equal to 'end'.
* @pre ScriptMap::IsValidTile(start). * @pre ScriptMap::IsValidTile(start).

@ -43,7 +43,7 @@ public:
* @param sign_id The sign to set the name for. * @param sign_id The sign to set the name for.
* @param name The name for the sign (can be either a raw string, or a ScriptText object). * @param name The name for the sign (can be either a raw string, or a ScriptText object).
* @pre IsValidSign(sign_id). * @pre IsValidSign(sign_id).
* @pre name != nullptr && len(name) != 0. * @pre name != null && len(name) != 0.
* @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE
* @return True if and only if the name was changed. * @return True if and only if the name was changed.
*/ */
@ -79,7 +79,7 @@ public:
* @param location The place to build the sign. * @param location The place to build the sign.
* @param name The text to place on the sign (can be either a raw string, or a ScriptText object). * @param name The text to place on the sign (can be either a raw string, or a ScriptText object).
* @pre ScriptMap::IsValidTile(location). * @pre ScriptMap::IsValidTile(location).
* @pre name != nullptr && len(name) != 0. * @pre name != null && len(name) != 0.
* @exception ScriptSign::ERR_SIGN_TOO_MANY_SIGNS * @exception ScriptSign::ERR_SIGN_TOO_MANY_SIGNS
* @return The SignID of the build sign (use IsValidSign() to check for validity). * @return The SignID of the build sign (use IsValidSign() to check for validity).
* In test-mode it returns 0 if successful, or any other value to indicate * In test-mode it returns 0 if successful, or any other value to indicate

@ -202,7 +202,7 @@ public:
* @return The new StoryPageElementID, or STORY_PAGE_ELEMENT_INVALID if it failed. * @return The new StoryPageElementID, or STORY_PAGE_ELEMENT_INVALID if it failed.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre IsValidStoryPage(story_page). * @pre IsValidStoryPage(story_page).
* @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != nullptr && len(text) != 0). * @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != null && len(text) != 0).
* @pre type != SPET_LOCATION || ScriptMap::IsValidTile(reference). * @pre type != SPET_LOCATION || ScriptMap::IsValidTile(reference).
* @pre type != SPET_GOAL || ScriptGoal::IsValidGoal(reference). * @pre type != SPET_GOAL || ScriptGoal::IsValidGoal(reference).
* @pre if type is SPET_GOAL and story_page is a global page, then referenced goal must be global. * @pre if type is SPET_GOAL and story_page is a global page, then referenced goal must be global.
@ -217,7 +217,7 @@ public:
* @return True if the action succeeded. * @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope. * @pre No ScriptCompanyMode may be in scope.
* @pre IsValidStoryPage(story_page). * @pre IsValidStoryPage(story_page).
* @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != nullptr && len(text) != 0). * @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != null && len(text) != 0).
* @pre type != SPET_LOCATION || ScriptMap::IsValidTile(reference). * @pre type != SPET_LOCATION || ScriptMap::IsValidTile(reference).
* @pre type != SPET_GOAL || ScriptGoal::IsValidGoal(reference). * @pre type != SPET_GOAL || ScriptGoal::IsValidGoal(reference).
* @pre if type is SPET_GOAL and story_page is a global page, then referenced goal must be global. * @pre if type is SPET_GOAL and story_page is a global page, then referenced goal must be global.
@ -315,6 +315,7 @@ public:
/** /**
* Create a reference value for SPET_BUTTON_PUSH element parameters. * Create a reference value for SPET_BUTTON_PUSH element parameters.
* @param colour The colour for the face of the button. * @param colour The colour for the face of the button.
* @param flags The formatting and layout flags for the button.
* @return A reference value usable with the #NewElement and #UpdateElement functions. * @return A reference value usable with the #NewElement and #UpdateElement functions.
*/ */
static StoryPageButtonFormatting MakePushButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags); static StoryPageButtonFormatting MakePushButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags);
@ -322,6 +323,7 @@ public:
/** /**
* Create a reference value for SPET_BUTTON_TILE element parameters. * Create a reference value for SPET_BUTTON_TILE element parameters.
* @param colour The colour for the face of the button. * @param colour The colour for the face of the button.
* @param flags The formatting and layout flags for the button.
* @param cursor The mouse cursor to use when the player clicks the button and the game is ready for the player to select a tile. * @param cursor The mouse cursor to use when the player clicks the button and the game is ready for the player to select a tile.
* @return A reference value usable with the #NewElement and #UpdateElement functions. * @return A reference value usable with the #NewElement and #UpdateElement functions.
*/ */
@ -330,6 +332,7 @@ public:
/** /**
* Create a reference value for SPET_BUTTON_VEHICLE element parameters. * Create a reference value for SPET_BUTTON_VEHICLE element parameters.
* @param colour The colour for the face of the button. * @param colour The colour for the face of the button.
* @param flags The formatting and layout flags for the button.
* @param cursor The mouse cursor to use when the player clicks the button and the game is ready for the player to select a vehicle. * @param cursor The mouse cursor to use when the player clicks the button and the game is ready for the player to select a vehicle.
* @param vehtype The type of vehicle that will be selectable, or \c VT_INVALID to allow all types. * @param vehtype The type of vehicle that will be selectable, or \c VT_INVALID to allow all types.
* @return A reference value usable with the #NewElement and #UpdateElement functions. * @return A reference value usable with the #NewElement and #UpdateElement functions.

@ -400,7 +400,7 @@ public:
* @param size The town size of the new town. * @param size The town size of the new town.
* @param city True if the new town should be a city. * @param city True if the new town should be a city.
* @param layout The town layout of the new town. * @param layout The town layout of the new town.
* @param name The name of the new town. Pass nullptr to use a random town name. * @param name The name of the new town. Pass null to use a random town name.
* @game @pre no company mode in scope || ScriptSettings.GetValue("economy.found_town") != 0. * @game @pre no company mode in scope || ScriptSettings.GetValue("economy.found_town") != 0.
* @ai @pre ScriptSettings.GetValue("economy.found_town") != 0. * @ai @pre ScriptSettings.GetValue("economy.found_town") != 0.
* @game @pre no company mode in scope || size != TOWN_SIZE_LARGE. * @game @pre no company mode in scope || size != TOWN_SIZE_LARGE.

@ -113,7 +113,7 @@ public:
* @param vehicle_id The vehicle to set the name for. * @param vehicle_id The vehicle to set the name for.
* @param name The name for the vehicle (can be either a raw string, or a ScriptText object). * @param name The name for the vehicle (can be either a raw string, or a ScriptText object).
* @pre IsValidVehicle(vehicle_id). * @pre IsValidVehicle(vehicle_id).
* @pre name != nullptr && len(name) != 0. * @pre name != null && len(name) != 0.
* @game @pre Valid ScriptCompanyMode active in scope. * @game @pre Valid ScriptCompanyMode active in scope.
* @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE
* @return True if and only if the name was changed. * @return True if and only if the name was changed.

@ -35,6 +35,7 @@ public:
* @param tile The tile to put in the center of the screen. * @param tile The tile to put in the center of the screen.
* @pre ScriptObject::GetCompany() == OWNER_DEITY * @pre ScriptObject::GetCompany() == OWNER_DEITY
* @pre ScriptMap::IsValidTile(tile) * @pre ScriptMap::IsValidTile(tile)
* @return True iff the command was executed successfully.
*/ */
static bool ScrollEveryoneTo(TileIndex tile); static bool ScrollEveryoneTo(TileIndex tile);
@ -46,6 +47,7 @@ public:
* @pre ScriptObject::GetCompany() == OWNER_DEITY * @pre ScriptObject::GetCompany() == OWNER_DEITY
* @pre ScriptMap::IsValidTile(tile) * @pre ScriptMap::IsValidTile(tile)
* @pre ResolveCompanyID(company) != COMPANY_INVALID * @pre ResolveCompanyID(company) != COMPANY_INVALID
* @return True iff the command was executed successfully.
*/ */
static bool ScrollCompanyClientsTo(ScriptCompany::CompanyID company, TileIndex tile); static bool ScrollCompanyClientsTo(ScriptCompany::CompanyID company, TileIndex tile);
@ -58,6 +60,7 @@ public:
* @pre ScriptObject::GetCompany() == OWNER_DEITY * @pre ScriptObject::GetCompany() == OWNER_DEITY
* @pre ScriptMap::IsValidTile(tile) * @pre ScriptMap::IsValidTile(tile)
* @pre ResolveClientID(client) != CLIENT_INVALID * @pre ResolveClientID(client) != CLIENT_INVALID
* @return True iff the command was executed successfully.
*/ */
static bool ScrollClientTo(ScriptClient::ClientID client, TileIndex tile); static bool ScrollClientTo(ScriptClient::ClientID client, TileIndex tile);
}; };

@ -468,13 +468,9 @@ void VideoDriver_Allegro::InputLoop()
_ctrl_pressed = !!(key_shifts & KB_CTRL_FLAG) != _invert_ctrl; _ctrl_pressed = !!(key_shifts & KB_CTRL_FLAG) != _invert_ctrl;
_shift_pressed = !!(key_shifts & KB_SHIFT_FLAG) != _invert_shift; _shift_pressed = !!(key_shifts & KB_SHIFT_FLAG) != _invert_shift;
#if defined(_DEBUG)
this->fast_forward_key_pressed = _shift_pressed;
#else
/* Speedup when pressing tab, except when using ALT+TAB /* Speedup when pressing tab, except when using ALT+TAB
* to switch to another application. */ * to switch to another application. */
this->fast_forward_key_pressed = key[KEY_TAB] && (key_shifts & KB_ALT_FLAG) == 0; this->fast_forward_key_pressed = key[KEY_TAB] && (key_shifts & KB_ALT_FLAG) == 0;
#endif
/* Determine which directional keys are down. */ /* Determine which directional keys are down. */
_dirkeys = _dirkeys =

@ -484,11 +484,7 @@ void VideoDriver_Cocoa::InputLoop()
_ctrl_pressed = ((cur_mods & ( _settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSEventModifierFlagControl : NSEventModifierFlagCommand)) != 0) != _invert_ctrl; _ctrl_pressed = ((cur_mods & ( _settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSEventModifierFlagControl : NSEventModifierFlagCommand)) != 0) != _invert_ctrl;
_shift_pressed = ((cur_mods & NSEventModifierFlagShift) != 0) != _invert_shift; _shift_pressed = ((cur_mods & NSEventModifierFlagShift) != 0) != _invert_shift;
#if defined(_DEBUG)
this->fast_forward_key_pressed = _shift_pressed;
#else
this->fast_forward_key_pressed = _tab_is_down; this->fast_forward_key_pressed = _tab_is_down;
#endif
if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged(); if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged();
if (old_shift_pressed != _shift_pressed) HandleShiftChanged(); if (old_shift_pressed != _shift_pressed) HandleShiftChanged();

@ -916,13 +916,9 @@ void VideoDriver_SDL_Base::InputLoop()
_ctrl_pressed = !!(mod & KMOD_CTRL) != _invert_ctrl; _ctrl_pressed = !!(mod & KMOD_CTRL) != _invert_ctrl;
_shift_pressed = !!(mod & KMOD_SHIFT) != _invert_shift; _shift_pressed = !!(mod & KMOD_SHIFT) != _invert_shift;
#if defined(_DEBUG)
this->fast_forward_key_pressed = _shift_pressed;
#else
/* Speedup when pressing tab, except when using ALT+TAB /* Speedup when pressing tab, except when using ALT+TAB
* to switch to another application. */ * to switch to another application. */
this->fast_forward_key_pressed = keys[SDL_SCANCODE_TAB] && (mod & KMOD_ALT) == 0; this->fast_forward_key_pressed = keys[SDL_SCANCODE_TAB] && (mod & KMOD_ALT) == 0;
#endif /* defined(_DEBUG) */
/* Determine which directional keys are down. */ /* Determine which directional keys are down. */
_dirkeys = _dirkeys =

@ -632,13 +632,9 @@ void VideoDriver_SDL::InputLoop()
_ctrl_pressed = !!(mod & KMOD_CTRL) != _invert_ctrl; _ctrl_pressed = !!(mod & KMOD_CTRL) != _invert_ctrl;
_shift_pressed = !!(mod & KMOD_SHIFT) != _invert_shift; _shift_pressed = !!(mod & KMOD_SHIFT) != _invert_shift;
#if defined(_DEBUG)
this->fast_forward_key_pressed = _shift_pressed;
#else
/* Speedup when pressing tab, except when using ALT+TAB /* Speedup when pressing tab, except when using ALT+TAB
* to switch to another application. */ * to switch to another application. */
this->fast_forward_key_pressed = keys[SDLK_TAB] && (mod & KMOD_ALT) == 0; this->fast_forward_key_pressed = keys[SDLK_TAB] && (mod & KMOD_ALT) == 0;
#endif /* defined(_DEBUG) */
/* Determine which directional keys are down. */ /* Determine which directional keys are down. */
_dirkeys = _dirkeys =

@ -850,13 +850,9 @@ void VideoDriver_Win32Base::InputLoop()
_ctrl_pressed = (this->has_focus && GetAsyncKeyState(VK_CONTROL) < 0) != _invert_ctrl; _ctrl_pressed = (this->has_focus && GetAsyncKeyState(VK_CONTROL) < 0) != _invert_ctrl;
_shift_pressed = (this->has_focus && GetAsyncKeyState(VK_SHIFT) < 0) != _invert_shift; _shift_pressed = (this->has_focus && GetAsyncKeyState(VK_SHIFT) < 0) != _invert_shift;
#if defined(_DEBUG)
this->fast_forward_key_pressed = _shift_pressed;
#else
/* Speedup when pressing tab, except when using ALT+TAB /* Speedup when pressing tab, except when using ALT+TAB
* to switch to another application. */ * to switch to another application. */
this->fast_forward_key_pressed = this->has_focus && GetAsyncKeyState(VK_TAB) < 0 && GetAsyncKeyState(VK_MENU) >= 0; this->fast_forward_key_pressed = this->has_focus && GetAsyncKeyState(VK_TAB) < 0 && GetAsyncKeyState(VK_MENU) >= 0;
#endif
/* Determine which directional keys are down. */ /* Determine which directional keys are down. */
if (this->has_focus) { if (this->has_focus) {

@ -12,6 +12,7 @@
#include "command_func.h" #include "command_func.h"
#include "viewport_func.h" #include "viewport_func.h"
#include "slope_func.h" #include "slope_func.h"
#include "water.h"
#include "table/strings.h" #include "table/strings.h"
#include "table/sprites.h" #include "table/sprites.h"
@ -53,7 +54,8 @@ static void GetTileDesc_Void(TileIndex tile, TileDesc *td)
static void TileLoop_Void(TileIndex tile) static void TileLoop_Void(TileIndex tile)
{ {
/* not used */ /* Floods adjacent edge tile to prevent maps without water. */
TileLoop_Water(tile);
} }
static void ChangeTileOwner_Void(TileIndex tile, Owner old_owner, Owner new_owner) static void ChangeTileOwner_Void(TileIndex tile, Owner old_owner, Owner new_owner)

@ -1164,6 +1164,9 @@ FloodingBehaviour GetFloodingBehaviour(TileIndex tile)
case MP_OBJECT: case MP_OBJECT:
return (GetObjectGroundType(tile) == OBJECT_GROUND_SHORE ? FLOOD_DRYUP : ((GetWaterClass(tile) == WATER_CLASS_SEA) ? FLOOD_ACTIVE : FLOOD_NONE)); return (GetObjectGroundType(tile) == OBJECT_GROUND_SHORE ? FLOOD_DRYUP : ((GetWaterClass(tile) == WATER_CLASS_SEA) ? FLOOD_ACTIVE : FLOOD_NONE));
case MP_VOID:
return FLOOD_ACTIVE;
default: default:
return FLOOD_NONE; return FLOOD_NONE;
} }
@ -1353,7 +1356,7 @@ void TileLoop_Water(TileIndex tile)
Slope slope_here = GetFoundationSlope(tile) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP; Slope slope_here = GetFoundationSlope(tile) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP;
for (uint dir : SetBitIterator(_flood_from_dirs[slope_here])) { for (uint dir : SetBitIterator(_flood_from_dirs[slope_here])) {
TileIndex dest = tile + TileOffsByDir((Direction)dir); TileIndex dest = tile + TileOffsByDir((Direction)dir);
if (!IsValidTile(dest)) continue; if (dest >= MapSize()) continue;
FloodingBehaviour dest_behaviour = GetFloodingBehaviour(dest); FloodingBehaviour dest_behaviour = GetFloodingBehaviour(dest);
if ((dest_behaviour == FLOOD_ACTIVE) || (dest_behaviour == FLOOD_PASSIVE)) return; if ((dest_behaviour == FLOOD_ACTIVE) || (dest_behaviour == FLOOD_PASSIVE)) return;
@ -1392,7 +1395,7 @@ void ConvertGroundTilesIntoWaterTiles()
for (uint dir : SetBitIterator(_flood_from_dirs[slope & ~SLOPE_STEEP])) { for (uint dir : SetBitIterator(_flood_from_dirs[slope & ~SLOPE_STEEP])) {
TileIndex dest = TileAddByDir(tile, (Direction)dir); TileIndex dest = TileAddByDir(tile, (Direction)dir);
Slope slope_dest = GetTileSlope(dest) & ~SLOPE_STEEP; Slope slope_dest = GetTileSlope(dest) & ~SLOPE_STEEP;
if (slope_dest == SLOPE_FLAT || IsSlopeWithOneCornerRaised(slope_dest)) { if (slope_dest == SLOPE_FLAT || IsSlopeWithOneCornerRaised(slope_dest) || IsTileType(dest, MP_VOID)) {
MakeShore(tile); MakeShore(tile);
break; break;
} }

Loading…
Cancel
Save