diff --git a/config/assets.yaml b/config/assets.yaml index 746c4fb..ca5ebaa 100644 --- a/config/assets.yaml +++ b/config/assets.yaml @@ -80,7 +80,6 @@ assets: # TILESETS tilesets: BITMAP: - - ${PREFIX}/data/tilesets/standard.gif - ${PREFIX}/data/tilesets/neighborhood.gif - ${PREFIX}/data/tilesets/cave.gif - ${PREFIX}/data/tilesets/collision.gif diff --git a/data/tilesets/standard.gif b/data/tilesets/standard.gif deleted file mode 100644 index 5ed1b04..0000000 Binary files a/data/tilesets/standard.gif and /dev/null differ diff --git a/source/core/resources/resource_cache.cpp b/source/core/resources/resource_cache.cpp index ad6952f..745809c 100644 --- a/source/core/resources/resource_cache.cpp +++ b/source/core/resources/resource_cache.cpp @@ -338,8 +338,11 @@ namespace Resource { } } - // Reconfigura el color transparente de algunas surfaces - getSurface("standard.gif")->setTransparentColor(16); + // Reconfigura el color transparente de las surfaces de tilesets de zona. + // Los tilesets del juego usan el índice 16 como transparente (las surfaces + // arrancan con 0 por defecto; los tilesets lo marcan a 16). + getSurface("neighborhood.gif")->setTransparentColor(16); + getSurface("cave.gif")->setTransparentColor(16); } // Carga las paletas diff --git a/source/game/editor/map_editor.cpp b/source/game/editor/map_editor.cpp index 46afc84..ba01054 100644 --- a/source/game/editor/map_editor.cpp +++ b/source/game/editor/map_editor.cpp @@ -26,6 +26,8 @@ #include "game/gameplay/item_manager.hpp" // Para ItemManager #include "game/gameplay/platform_manager.hpp" // Para PlatformManager #include "game/gameplay/room.hpp" // Para Room +#include "game/gameplay/zone.hpp" // Para Zone::Data +#include "game/gameplay/zone_manager.hpp" // Para ZoneManager #include "game/options.hpp" // Para Options #include "game/ui/console.hpp" // Para Console #include "utils/defines.hpp" // Para Tile::SIZE, PlayArea @@ -1214,7 +1216,9 @@ void MapEditor::updateStatusBarInfo() { // NOLINT(readability-function-cognitiv conv = "right"; } - line2 = "zone:" + room_data_.zone + " conv:" + conv; + std::string ts_marker = room_data_.tile_set_overridden ? " (ts*)" : ""; + std::string mu_marker = room_data_.music_overridden ? " (mu*)" : ""; + line2 = "zone:" + room_data_.zone + ts_marker + mu_marker + " conv:" + conv; line3 = "u:" + conn(room_data_.upper_room) + " d:" + conn(room_data_.lower_room) + " l:" + conn(room_data_.left_room) + " r:" + conn(room_data_.right_room) + " itm:" + std::to_string(room_data_.item_color1) + "/" + std::to_string(room_data_.item_color2); @@ -1460,15 +1464,64 @@ auto MapEditor::setRoomProperty(const std::string& property, const std::string& return "conveyor: " + val; } + if (property == "ZONE") { + const Zone::Data* zone = ZoneManager::get()->getZone(val); + if (zone == nullptr) { return "Unknown zone: " + val; } + room_data_.zone = val; + // Si no hay overrides, propagar el tileset y la música de la nueva zona + if (!room_data_.tile_set_overridden) { + room_data_.tile_set_file = zone->tile_set_file; + room_->setTileSet(zone->tile_set_file); + } + if (!room_data_.music_overridden) { + room_data_.music = zone->music; + } + autosave(); + return "zone: " + val; + } + if (property == "TILESET") { + // "reset" / "none" limpia el override y vuelve a heredar de la zona + if (val == "reset" || val == "none") { + room_data_.tile_set_overridden = false; + const Zone::Data* zone = ZoneManager::get()->getZone(room_data_.zone); + if (zone != nullptr) { + room_data_.tile_set_file = zone->tile_set_file; + room_->setTileSet(zone->tile_set_file); + } + autosave(); + return "tileset: (inherit from zone)"; + } std::string tileset = val; if (tileset.find('.') == std::string::npos) { tileset += ".gif"; } room_data_.tile_set_file = tileset; + room_data_.tile_set_overridden = true; room_->setTileSet(tileset); autosave(); return "tileset: " + tileset; } + if (property == "MUSIC") { + // "reset" / "none" limpia el override y vuelve a heredar de la zona + if (val == "reset" || val == "none") { + room_data_.music_overridden = false; + const Zone::Data* zone = ZoneManager::get()->getZone(room_data_.zone); + if (zone != nullptr) { + room_data_.music = zone->music; + } + autosave(); + return "music: (inherit from zone)"; + } + // Nota: el valor se guarda tal cual (case-sensitive). val ya está en lower. + // Usamos el value original para respetar mayúsculas del nombre del fichero. + std::string music = value; + if (music.find('.') == std::string::npos) { music += ".ogg"; } + room_data_.music = music; + room_data_.music_overridden = true; + autosave(); + return "music: " + music; + } + // Conexiones: UP, DOWN, LEFT, RIGHT if (property == "UP" || property == "DOWN" || property == "LEFT" || property == "RIGHT") { std::string connection = "0"; @@ -1567,7 +1620,7 @@ auto MapEditor::setRoomProperty(const std::string& property, const std::string& return toLower(property) + ": " + connection; } - return "Unknown property: " + property + " (use: itemcolor1, itemcolor2, conveyor, tileset, up, down, left, right)"; + return "Unknown property: " + property + " (use: zone, itemcolor1, itemcolor2, conveyor, tileset, music, up, down, left, right)"; } // Crea una nueva habitación diff --git a/source/game/editor/room_saver.cpp b/source/game/editor/room_saver.cpp index a3055d3..3527e0e 100644 --- a/source/game/editor/room_saver.cpp +++ b/source/game/editor/room_saver.cpp @@ -43,8 +43,19 @@ auto RoomSaver::buildYAML(const fkyaml::node& original_yaml, const Room::Data& r // --- Sección room --- out << "room:\n"; + // zone es siempre obligatoria + out << " zone: " << room_data.zone << "\n"; + // bgColor ya no se escribe en el YAML - out << " tileSetFile: " << room_data.tile_set_file << "\n"; + // tileSetFile solo si es override explícito del valor heredado de la zona + if (room_data.tile_set_overridden) { + out << " tileSetFile: " << room_data.tile_set_file << "\n"; + } + + // music solo si es override explícito del valor heredado de la zona + if (room_data.music_overridden) { + out << " music: " << room_data.music << "\n"; + } // Conexiones out << "\n";