diff --git a/src/mainwindow_scriptapi.cpp b/src/mainwindow_scriptapi.cpp index cb37560e..5875bb08 100644 --- a/src/mainwindow_scriptapi.cpp +++ b/src/mainwindow_scriptapi.cpp @@ -794,6 +794,23 @@ QList MainWindow::getMetatileLayerOrder() { void MainWindow::setMetatileLayerOrder(QList order) { if (!this->editor || !this->editor->map) return; + + const int numLayers = 3; + int size = order.size(); + if (size < numLayers) { + logError(QString("Metatile layer order has insufficient elements (%1), needs at least %2.").arg(size).arg(numLayers)); + return; + } + bool invalid = false; + for (int i = 0; i < numLayers; i++) { + int layer = order.at(i); + if (layer < 0 || layer >= numLayers) { + logError(QString("'%1' is not a valid metatile layer order value, must be in range 0-%2.").arg(layer).arg(numLayers - 1)); + invalid = true; + } + } + if (invalid) return; + this->editor->map->metatileLayerOrder = order; this->refreshAfterPalettePreviewChange(); } diff --git a/src/ui/imageproviders.cpp b/src/ui/imageproviders.cpp index 95d40ce6..200d478b 100644 --- a/src/ui/imageproviders.cpp +++ b/src/ui/imageproviders.cpp @@ -56,7 +56,7 @@ QImage getMetatileImage( for (int layer = 0; layer < numLayers; layer++) for (int y = 0; y < 2; y++) for (int x = 0; x < 2; x++) { - int l = layerOrder.size() >= numLayers ? (layerOrder[layer] % numLayers) : layer; + int l = layerOrder.size() >= numLayers ? layerOrder[layer] : layer; int bottomLayer = layerOrder.size() >= numLayers ? layerOrder[0] : 0; // Get the tile to render next