diff --git a/data/strings/en.ini b/data/strings/en.ini
index 0f8e7d60b..226e24198 100644
--- a/data/strings/en.ini
+++ b/data/strings/en.ini
@@ -1023,9 +1023,11 @@ default_new_layer_name = New Layer
new_tileset = New Tileset
grid_width = Grid Width:
grid_height = Grid Height:
-first_visible_index = First Visible Index:
-first_visible_index_tooltip = <<
-
-
-
+
+
+
diff --git a/docs/ase-file-specs.md b/docs/ase-file-specs.md
index 7f2587602..d7e7ff1b5 100644
--- a/docs/ase-file-specs.md
+++ b/docs/ase-file-specs.md
@@ -374,9 +374,12 @@ the Tags chunk.
DWORD Number of tiles
WORD Tile Width
WORD Tile Height
- SHORT Number to show in the screen from the tile with index 1 and
- so on (by default this is field is 1, so the data that is
- displayed is equivalent to the data in memory)
+ SHORT Base Index: Number to show in the screen from the tile with
+ index 1 and so on (by default this is field is 1, so the data
+ that is displayed is equivalent to the data in memory). But it
+ can be 0 to display zero-based indexing (this field isn't used
+ for the representation of the data in the file, it's just for
+ UI purposes).
BYTE[14] Reserved
STRING Name of the tileset
+ If flag 1 is set
diff --git a/src/app/commands/cmd_new_layer.cpp b/src/app/commands/cmd_new_layer.cpp
index fb06c7648..4c95ed01d 100644
--- a/src/app/commands/cmd_new_layer.cpp
+++ b/src/app/commands/cmd_new_layer.cpp
@@ -195,7 +195,7 @@ void NewLayerCommand::onExecute(Context* context)
TilesetSelector::Info tilesetInfo;
tilesetInfo.newTileset = true;
tilesetInfo.grid = context->activeSite().grid();
- tilesetInfo.firstVisibleIndex = 1;
+ tilesetInfo.baseIndex = 1;
#ifdef ENABLE_UI
// If params specify to ask the user about the name...
@@ -268,7 +268,7 @@ void NewLayerCommand::onExecute(Context* context)
tileset_index tsi;
if (tilesetInfo.newTileset) {
auto tileset = new Tileset(sprite, tilesetInfo.grid, 1);
- tileset->setFirstVisibleIndex(tilesetInfo.firstVisibleIndex);
+ tileset->setBaseIndex(tilesetInfo.baseIndex);
auto addTileset = new cmd::AddTileset(sprite, tileset);
tx(addTileset);
diff --git a/src/app/file/ase_format.cpp b/src/app/file/ase_format.cpp
index cf3a2a89e..7b4f280ff 100644
--- a/src/app/file/ase_format.cpp
+++ b/src/app/file/ase_format.cpp
@@ -1283,7 +1283,7 @@ static void ase_file_write_tileset_chunk(FILE* f, FileOp* fop,
fputl(tileset->size(), f);
fputw(tileset->grid().tileSize().w, f);
fputw(tileset->grid().tileSize().h, f);
- fputw(short(tileset->firstVisibleIndex()), f);
+ fputw(short(tileset->baseIndex()), f);
ase_file_write_padding(f, 14);
ase_file_write_string(f, tileset->name()); // tileset name
diff --git a/src/app/script/tileset_class.cpp b/src/app/script/tileset_class.cpp
index 8e2d5360d..bbbea84ff 100644
--- a/src/app/script/tileset_class.cpp
+++ b/src/app/script/tileset_class.cpp
@@ -69,18 +69,18 @@ int Tileset_get_grid(lua_State* L)
return 1;
}
-int Tileset_get_firstVisibleIndex(lua_State* L)
+int Tileset_get_baseIndex(lua_State* L)
{
auto tileset = get_docobj(L, 1);
- lua_pushinteger(L, tileset->firstVisibleIndex());
+ lua_pushinteger(L, tileset->baseIndex());
return 1;
}
-int Tileset_set_firstVisibleIndex(lua_State* L)
+int Tileset_set_baseIndex(lua_State* L)
{
auto tileset = get_docobj(L, 1);
int i = lua_tointeger(L, 2);
- tileset->setFirstVisibleIndex(i);
+ tileset->setBaseIndex(i);
return 0;
}
@@ -96,7 +96,7 @@ const luaL_Reg Tileset_methods[] = {
const Property Tileset_properties[] = {
{ "name", Tileset_get_name, Tileset_set_name },
{ "grid", Tileset_get_grid, nullptr },
- { "firstVisibleIndex", Tileset_get_firstVisibleIndex, Tileset_set_firstVisibleIndex },
+ { "baseIndex", Tileset_get_baseIndex, Tileset_set_baseIndex },
{ nullptr, nullptr, nullptr }
};
diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp
index 68aacc2f6..cbdae8a81 100644
--- a/src/app/ui/editor/editor.cpp
+++ b/src/app/ui/editor/editor.cpp
@@ -1162,7 +1162,7 @@ void Editor::drawTileNumbers(ui::Graphics* g, const Cel* cel)
+ mainTilePosition();
int ti_offset =
- static_cast(cel->layer())->tileset()->firstVisibleIndex() - 1;
+ static_cast(cel->layer())->tileset()->baseIndex() - 1;
const gfx::Rect rc = cel->bounds();
const doc::Image* image = cel->image();
diff --git a/src/app/ui/status_bar.cpp b/src/app/ui/status_bar.cpp
index 14cad9497..239e1d057 100644
--- a/src/app/ui/status_bar.cpp
+++ b/src/app/ui/status_bar.cpp
@@ -472,17 +472,17 @@ public:
}
else {
// TODO could the site came from the Indicators or StatusBar itself
- int firstVisibleIndex = 1;
+ int baseIndex = 1;
Site site = UIContext::instance()->activeSite();
if (site.tileset())
- firstVisibleIndex = site.tileset()->firstVisibleIndex();
+ baseIndex = site.tileset()->baseIndex();
doc::tile_index ti = doc::tile_geti(tile);
doc::tile_flags tf = doc::tile_getf(tile);
- if (firstVisibleIndex < 0)
- str += fmt::format("{}", ((int)ti) + firstVisibleIndex - 1);
+ if (baseIndex < 0)
+ str += fmt::format("{}", ((int)ti) + baseIndex - 1);
else
- str += fmt::format("{}", ti + firstVisibleIndex - 1);
+ str += fmt::format("{}", ti + baseIndex - 1);
if (tf) {
if (tf & doc::tile_f_flipx) str += " FlipX";
if (tf & doc::tile_f_flipy) str += " FlipY";
diff --git a/src/app/ui/tile_button.cpp b/src/app/ui/tile_button.cpp
index 34325a74e..b4d2c3247 100644
--- a/src/app/ui/tile_button.cpp
+++ b/src/app/ui/tile_button.cpp
@@ -145,11 +145,11 @@ void TileButton::onPaint(PaintEvent& ev)
// Draw text
if (m_tile != doc::notile) {
- int firstVisibleIndex = 1;
+ int baseIndex = 1;
if (site.tileset())
- firstVisibleIndex = site.tileset()->firstVisibleIndex();
+ baseIndex = site.tileset()->baseIndex();
- std::string str = fmt::format("{}", doc::tile_geti(m_tile) + firstVisibleIndex - 1);
+ std::string str = fmt::format("{}", doc::tile_geti(m_tile) + baseIndex - 1);
setTextQuiet(str.c_str());
// TODO calc a proper color for the text
diff --git a/src/app/ui/tileset_selector.cpp b/src/app/ui/tileset_selector.cpp
index f6feb6a7a..afddf551f 100644
--- a/src/app/ui/tileset_selector.cpp
+++ b/src/app/ui/tileset_selector.cpp
@@ -27,7 +27,7 @@ TilesetSelector::TilesetSelector(const doc::Sprite* sprite,
gridWidth()->setTextf("%d", info.grid.tileSize().w);
gridHeight()->setTextf("%d", info.grid.tileSize().h);
- firstVisibleIndex()->setTextf("%d", info.firstVisibleIndex);
+ baseIndex()->setTextf("%d", info.baseIndex);
doc::tileset_index tsi = 0;
for (doc::Tileset* tileset : *sprite->tilesets()) {
@@ -60,7 +60,7 @@ TilesetSelector::Info TilesetSelector::getInfo()
info.newTileset = true;
info.grid = doc::Grid::MakeRect(sz);
- info.firstVisibleIndex = firstVisibleIndex()->textInt();
+ info.baseIndex = baseIndex()->textInt();
}
else {
info.newTileset = false;
diff --git a/src/app/ui/tileset_selector.h b/src/app/ui/tileset_selector.h
index 15f0037ac..a8346f222 100644
--- a/src/app/ui/tileset_selector.h
+++ b/src/app/ui/tileset_selector.h
@@ -25,7 +25,7 @@ namespace app {
struct Info {
bool newTileset = true;
doc::Grid grid;
- int firstVisibleIndex = 1;
+ int baseIndex = 1;
doc::tileset_index tsi = 0;
};
diff --git a/src/dio/aseprite_decoder.cpp b/src/dio/aseprite_decoder.cpp
index 1270f2e6d..5337dc3fc 100644
--- a/src/dio/aseprite_decoder.cpp
+++ b/src/dio/aseprite_decoder.cpp
@@ -1068,7 +1068,7 @@ void AsepriteDecoder::readTilesetChunk(doc::Sprite* sprite,
const doc::tile_index ntiles = read32();
const int w = read16();
const int h = read16();
- const int firstVisibleIndex = short(read16());
+ const int baseIndex = short(read16());
readPadding(14);
const std::string name = readString();
@@ -1083,7 +1083,7 @@ void AsepriteDecoder::readTilesetChunk(doc::Sprite* sprite,
doc::Grid grid(gfx::Size(w, h));
auto tileset = new doc::Tileset(sprite, grid, ntiles);
tileset->setName(name);
- tileset->setFirstVisibleIndex(firstVisibleIndex);
+ tileset->setBaseIndex(baseIndex);
if (flags & ASE_TILESET_FLAG_EXTERNAL_FILE) {
const uint32_t extFileId = read32(); // filename ID in the external files chunk
diff --git a/src/doc/tileset.h b/src/doc/tileset.h
index 03cb015c9..f049de00b 100644
--- a/src/doc/tileset.h
+++ b/src/doc/tileset.h
@@ -45,8 +45,8 @@ namespace doc {
const std::string& name() const { return m_name; }
void setName(const std::string& name) { m_name = name; }
- int firstVisibleIndex() const { return m_firstVisibleIndex; }
- void setFirstVisibleIndex(int index) { m_firstVisibleIndex = index; }
+ int baseIndex() const { return m_baseIndex; }
+ void setBaseIndex(int index) { m_baseIndex = index; }
int getMemSize() const override;
@@ -124,7 +124,7 @@ namespace doc {
Tiles m_tiles;
TilesetHashTable m_hash;
std::string m_name;
- int m_firstVisibleIndex = 1;
+ int m_baseIndex = 1;
struct External {
std::string filename;
tileset_index tileset;
diff --git a/src/doc/tileset_io.cpp b/src/doc/tileset_io.cpp
index 3207448b9..488c5e602 100644
--- a/src/doc/tileset_io.cpp
+++ b/src/doc/tileset_io.cpp
@@ -71,7 +71,7 @@ Tileset* read_tileset(std::istream& is,
if (isOldVersion)
*isOldVersion = false;
- tileset->setFirstVisibleIndex(1);
+ tileset->setBaseIndex(1);
}
// Old tileset used in internal versions (this was added to recover
// old files, maybe in a future we could remove this code)
diff --git a/src/doc/util.cpp b/src/doc/util.cpp
index 2a3f3e82b..ecddec55d 100644
--- a/src/doc/util.cpp
+++ b/src/doc/util.cpp
@@ -19,14 +19,14 @@ void fix_old_tileset(
// case we can use this tileset as a new tileset without any
// conversion.
if (tileset->size() > 0 && is_empty_image(tileset->get(0).get())) {
- tileset->setFirstVisibleIndex(1);
+ tileset->setBaseIndex(1);
}
else {
// Add the empty tile in the index = 0
tileset->insert(0, tileset->makeEmptyTile());
// The tile 1 will be displayed as tile 0 in the editor
- tileset->setFirstVisibleIndex(0);
+ tileset->setBaseIndex(0);
}
}
@@ -36,7 +36,7 @@ void fix_old_tilemap(
const tile_t tileIDMask,
const tile_t tileFlagsMask)
{
- int delta = (tileset->firstVisibleIndex() == 0 ? 1: 0);
+ int delta = (tileset->baseIndex() == 0 ? 1: 0);
// Convert old empty tile (0xffffffff) to new empty tile (index 0 = notile)
transform_image(