Convert MAP_DATA to an unordered safe map to guard against accidental insertions for level data. Release Build 12701.
Some checks failed
Emscripten Build / Build_and_Deploy_Web_Build (push) Failing after 2m48s

This commit is contained in:
sigonasr2 2026-02-24 02:16:50 -06:00
parent 2f62366380
commit 2ccf58f938
14 changed files with 483 additions and 121 deletions

View File

@ -455,8 +455,8 @@ bool AiL::OnConsoleCommand(const std::string& sCommand){
}else
if(args[0]=="/generatecache"){
ConsoleOut()<<"Generating map caches."<<std::endl;
for(auto&[levelName,mapData]:MAP_DATA){
if(!levelName.starts_with("STORY"))TileGroupDataFile::AddToMapCacheQueue(levelName);
for(auto&map:MAP_DATA){
if(!map.GetMapName().starts_with("STORY"))TileGroupDataFile::AddToMapCacheQueue(map.GetMapName());
}
GameState::ChangeState(States::GAME_RUN);
}else{
@ -1358,19 +1358,21 @@ void AiL::RenderWorld(float fElapsedTime){
}
for(TileRenderData&tile:group.GetTiles()){
tile.tileOpacity=group.fadeFactor;
tile.group=&group;
if(Unlock::IsUnlocked(GetCurrentMap().GetLayers()[tile.layerID].unlockCondition)){
tile.tileOpacity=group.fadeFactor;
tile.group=&group;
#pragma region Unhiding tile detection
auto it=MAP_TILESETS.at(tile.tileSheet.tilesetName).foregroundTiles.find(tile.tileID); //We're looking for tiles that are marked as should not be faded away by a tile group.
if(it!=MAP_TILESETS.at(tile.tileSheet.tilesetName).foregroundTiles.end()){
if(!(*it).second.hide)tile.tileOpacity=0.f;
#pragma region Unhiding tile detection
auto it=MAP_TILESETS.at(tile.tileSheet.tilesetName).foregroundTiles.find(tile.tileID); //We're looking for tiles that are marked as should not be faded away by a tile group.
if(it!=MAP_TILESETS.at(tile.tileSheet.tilesetName).foregroundTiles.end()){
if(!(*it).second.hide)tile.tileOpacity=0.f;
}
#pragma endregion
if(MAP_TILESETS.at(tile.tileSheet.tilesetName).collision.find(tile.tileID)!=MAP_TILESETS.at(tile.tileSheet.tilesetName).collision.end()){
tilesWithCollision.push_back(&tile);
}else{
tilesWithoutCollision.push_back(&tile); //Tiles without collision are assumed to always be in the foreground. They don't have any depth rules.
}
#pragma endregion
if(MAP_TILESETS.at(tile.tileSheet.tilesetName).collision.find(tile.tileID)!=MAP_TILESETS.at(tile.tileSheet.tilesetName).collision.end()){
tilesWithCollision.push_back(&tile);
}else{
tilesWithoutCollision.push_back(&tile); //Tiles without collision are assumed to always be in the foreground. They don't have any depth rules.
}
}
}
@ -2535,76 +2537,74 @@ void AiL::_PrepareLevel(MapName map,MusicChange changeMusic){
for(int y=0;y<GetCurrentMapData().height;y++){
int layerID=0;
for(LayerTag&layer:MAP_DATA[currentLevel].LayerData){
if(Unlock::IsUnlocked(layer.unlockCondition)){
int tileID=layer.tiles[y][x]-1;
if(tileID!=-1){
TilesheetData tileSheet=GetTileSheet(currentLevel,tileID);
int tileSheetWidth=MAP_TILESETS.at(tileSheet.tilesetName).tileset->Sprite()->width/MAP_TILESETS.at(tileSheet.tilesetName).tilewidth;
int tileSheetHeight=MAP_TILESETS.at(tileSheet.tilesetName).tileset->Sprite()->height/MAP_TILESETS.at(tileSheet.tilesetName).tileheight;
int tileSheetIndex=tileID-(tileSheet.firstgid-1);
int realTileSheetIndex=(tileID%1000000)-(tileSheet.firstgid-1);
int tileSheetX=realTileSheetIndex%tileSheetWidth;
int tileSheetY=realTileSheetIndex/tileSheetWidth;
int checkTileIndex=tileID;
int checkTileID=tileSheetIndex;
#pragma region TileGroupShenanigans
auto SetupTileGroups=[&](std::function<bool(TilesheetData,int)>IsForeground,TileRenderData tile,std::set<vi2d>&foregroundTilesIncluded,std::vector<TileGroup>&groups){
if(foregroundTilesIncluded.find({x,y})==foregroundTilesIncluded.end()&&IsForeground(tileSheet,tileSheetIndex)){
std::queue<vi2d>tileGroupChecks;
TileGroup group;
foregroundTilesIncluded.insert({x,y});
group.InsertTile(tile);
if(x>0&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{-1,0})==foregroundTilesIncluded.end())tileGroupChecks.push({x-1,y});
if(x<GetCurrentMapData().width-1&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{1,0})==foregroundTilesIncluded.end())tileGroupChecks.push({x+1,y});
if(y>0&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{0,-1})==foregroundTilesIncluded.end())tileGroupChecks.push({x,y-1});
if(y<GetCurrentMapData().height-1&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{0,1})==foregroundTilesIncluded.end())tileGroupChecks.push({x,y+1});
auto IterateThroughOtherLayers=[&](vi2d pos,bool loopAll=false){
int layer2ID=0;
bool hadForeground=false;
for(LayerTag&layer2:MAP_DATA[currentLevel].LayerData){
if(!loopAll&&&layer==&layer2){layer2ID++;continue;};
int tileID=layer2.tiles[pos.y][pos.x]-1;
TilesheetData tileSheet=GetTileSheet(currentLevel,tileID%1000000);
int tileSheetWidth=MAP_TILESETS.at(tileSheet.tilesetName).tileset->Sprite()->width/MAP_TILESETS.at(tileSheet.tilesetName).tilewidth;
int tileSheetHeight=MAP_TILESETS.at(tileSheet.tilesetName).tileset->Sprite()->height/MAP_TILESETS.at(tileSheet.tilesetName).tileheight;
int tileSheetIndex=tileID-(tileSheet.firstgid-1);
int realTileSheetIndex=(tileID%1000000)-(tileSheet.firstgid-1);
int tileSheetX=realTileSheetIndex%tileSheetWidth;
int tileSheetY=realTileSheetIndex/tileSheetWidth;
TileRenderData tile={tileSheet,vi2d{pos.x,pos.y}*game->GetCurrentMapData().tilewidth,vi2d{tileSheetX,tileSheetY}*game->GetCurrentMapData().tilewidth,realTileSheetIndex,layer2ID};
if(IsForeground(tileSheet,tileSheetIndex)){
foregroundTilesIncluded.insert({pos.x,pos.y});
group.InsertTile(tile);
hadForeground=true;
}
layer2ID++;
int tileID=layer.tiles[y][x]-1;
if(tileID!=-1){
TilesheetData tileSheet=GetTileSheet(currentLevel,tileID);
int tileSheetWidth=MAP_TILESETS[tileSheet.tilesetName].tileset->Sprite()->width/MAP_TILESETS.at(tileSheet.tilesetName).tilewidth;
int tileSheetHeight=MAP_TILESETS[tileSheet.tilesetName].tileset->Sprite()->height/MAP_TILESETS.at(tileSheet.tilesetName).tileheight;
int tileSheetIndex=tileID-(tileSheet.firstgid-1);
int realTileSheetIndex=(tileID%1000000)-(tileSheet.firstgid-1);
int tileSheetX=realTileSheetIndex%tileSheetWidth;
int tileSheetY=realTileSheetIndex/tileSheetWidth;
int checkTileIndex=tileID;
int checkTileID=tileSheetIndex;
#pragma region TileGroupShenanigans
auto SetupTileGroups=[&](std::function<bool(TilesheetData,int)>IsForeground,TileRenderData tile,std::set<vi2d>&foregroundTilesIncluded,std::vector<TileGroup>&groups){
if(foregroundTilesIncluded.find({x,y})==foregroundTilesIncluded.end()&&IsForeground(tileSheet,tileSheetIndex)){
std::queue<vi2d>tileGroupChecks;
TileGroup group;
foregroundTilesIncluded.insert({x,y});
group.InsertTile(tile);
if(x>0&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{-1,0})==foregroundTilesIncluded.end())tileGroupChecks.push({x-1,y});
if(x<GetCurrentMapData().width-1&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{1,0})==foregroundTilesIncluded.end())tileGroupChecks.push({x+1,y});
if(y>0&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{0,-1})==foregroundTilesIncluded.end())tileGroupChecks.push({x,y-1});
if(y<GetCurrentMapData().height-1&&foregroundTilesIncluded.find(vi2d{x,y}+vi2d{0,1})==foregroundTilesIncluded.end())tileGroupChecks.push({x,y+1});
auto IterateThroughOtherLayers=[&](vi2d pos,bool loopAll=false){
int layer2ID=0;
bool hadForeground=false;
for(LayerTag&layer2:MAP_DATA[currentLevel].LayerData){
if(!loopAll&&&layer==&layer2){layer2ID++;continue;};
int tileID=layer2.tiles[pos.y][pos.x]-1;
TilesheetData tileSheet=GetTileSheet(currentLevel,tileID%1000000);
int tileSheetWidth=MAP_TILESETS.at(tileSheet.tilesetName).tileset->Sprite()->width/MAP_TILESETS.at(tileSheet.tilesetName).tilewidth;
int tileSheetHeight=MAP_TILESETS.at(tileSheet.tilesetName).tileset->Sprite()->height/MAP_TILESETS.at(tileSheet.tilesetName).tileheight;
int tileSheetIndex=tileID-(tileSheet.firstgid-1);
int realTileSheetIndex=(tileID%1000000)-(tileSheet.firstgid-1);
int tileSheetX=realTileSheetIndex%tileSheetWidth;
int tileSheetY=realTileSheetIndex/tileSheetWidth;
TileRenderData tile={tileSheet,vi2d{pos.x,pos.y}*game->GetCurrentMapData().tilewidth,vi2d{tileSheetX,tileSheetY}*game->GetCurrentMapData().tilewidth,realTileSheetIndex,layer2ID};
if(IsForeground(tileSheet,tileSheetIndex)){
foregroundTilesIncluded.insert({pos.x,pos.y});
group.InsertTile(tile);
hadForeground=true;
}
return hadForeground;
};
IterateThroughOtherLayers({x,y});
while(!tileGroupChecks.empty()){
vi2d&pos=tileGroupChecks.front();
if(IterateThroughOtherLayers(pos,true)){
foregroundTilesIncluded.insert({pos.x,pos.y}); //Regardless of if we found a foreground tile or not, we need to add this to not get stuck in an infinite loop.
vi2d targetPos=pos+vi2d{-1,0};
if(pos.x>0&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
targetPos=pos+vi2d{1,0};
if(pos.x<GetCurrentMapData().width-1&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
targetPos=pos+vi2d{0,-1};
if(pos.y>0&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
targetPos=pos+vi2d{0,1};
if(pos.y<GetCurrentMapData().height-1&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
}
tileGroupChecks.pop();
layer2ID++;
}
groups.push_back(group);
return hadForeground;
};
IterateThroughOtherLayers({x,y});
while(!tileGroupChecks.empty()){
vi2d&pos=tileGroupChecks.front();
if(IterateThroughOtherLayers(pos,true)){
foregroundTilesIncluded.insert({pos.x,pos.y}); //Regardless of if we found a foreground tile or not, we need to add this to not get stuck in an infinite loop.
vi2d targetPos=pos+vi2d{-1,0};
if(pos.x>0&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
targetPos=pos+vi2d{1,0};
if(pos.x<GetCurrentMapData().width-1&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
targetPos=pos+vi2d{0,-1};
if(pos.y>0&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
targetPos=pos+vi2d{0,1};
if(pos.y<GetCurrentMapData().height-1&&foregroundTilesIncluded.find(targetPos)==foregroundTilesIncluded.end()){tileGroupChecks.push(targetPos);foregroundTilesIncluded.insert(targetPos);}
}
tileGroupChecks.pop();
}
};
TileRenderData tile={tileSheet,vi2d{x,y}*game->GetCurrentMapData().tilewidth,vi2d{tileSheetX,tileSheetY}*game->GetCurrentMapData().tilewidth,realTileSheetIndex,layerID};
SetupTileGroups([&](TilesheetData sheet,int tileID){return IsForegroundTile(sheet,tileID);},tile,foregroundTilesAdded,foregroundTileGroups);
SetupTileGroups([&](TilesheetData sheet,int tileID){return IsUpperForegroundTile(tileID);},tile,upperForegroundTilesAdded,upperForegroundTileGroups);
#pragma endregion
}
groups.push_back(group);
}
};
TileRenderData tile={tileSheet,vi2d{x,y}*game->GetCurrentMapData().tilewidth,vi2d{tileSheetX,tileSheetY}*game->GetCurrentMapData().tilewidth,realTileSheetIndex,layerID};
SetupTileGroups([&](TilesheetData sheet,int tileID){return IsForegroundTile(sheet,tileID);},tile,foregroundTilesAdded,foregroundTileGroups);
SetupTileGroups([&](TilesheetData sheet,int tileID){return IsUpperForegroundTile(tileID);},tile,upperForegroundTilesAdded,upperForegroundTileGroups);
#pragma endregion
}
layerID++;
}
@ -3360,9 +3360,9 @@ bool AiL::OnUserDestroy(){
SteamAPI_Shutdown();
#endif
GFX.Reset();
for(auto&[key,value]:MAP_DATA){
if(MAP_DATA[key].optimizedTile!=nullptr){
delete MAP_DATA[key].optimizedTile;
for(auto&map:MAP_DATA){
if(map.optimizedTile!=nullptr){
delete map.optimizedTile;
}
}
for(auto&[key,value]:MAP_TILESETS){
@ -3399,7 +3399,7 @@ void AiL::InitializeLevels(){
if(VisualNovel::storyLevelData.count(cp.map)){ //Visual novel story data for story levels.
cp.levelDataExists=true;
}
if(MAP_DATA.find(cp.map)!=MAP_DATA.end()){
if(MAP_DATA.count(cp.map)){
MAP_DATA[cp.map].name=cp.name;
//Boss arena map zone check.
@ -3855,8 +3855,8 @@ void AiL::ValidateGameStatus(){
if(ItemDrop::gravity!="ItemDrop.Item Drop Gravity"_F){
ERR("WARNING! Gravity constant for item drops was not initialized to "<<"Item Drop Gravity"_F<<". Actual value: "<<ItemDrop::gravity);
}
for(auto&[name,map]:MAP_DATA){
for(EnvironmentalAudio&audio:map.environmentalAudioData){
for(auto&map:MAP_DATA){
for(const EnvironmentalAudio&audio:map.environmentalAudioData){
if(EnvironmentalAudio::SOUND_DATA.find(audio.audioName)==EnvironmentalAudio::SOUND_DATA.end())ERR(std::format("WARNING! Could not find environmental audio data {} for Map {}. Check audio/environmentalaudio.txt configuration!",audio.audioName,map.name));
}
}
@ -3871,10 +3871,10 @@ void AiL::ValidateGameStatus(){
#pragma region Map Spawn Statistics
if("display_spawn_report"_I){
for(auto&[map,data]:MAP_DATA){
for(auto&map:MAP_DATA){
std::map<std::string,long>monsterCounts;
for(auto&[key,value]:MAP_DATA[map].SpawnerData){
SpawnerTag&spawnData=MAP_DATA[map].SpawnerData[key];
for(auto&[key,value]:map.SpawnerData){
SpawnerTag&spawnData=map.SpawnerData[key];
vf2d spawnerRadius=vf2d{spawnData.ObjectData.GetFloat("width"),spawnData.ObjectData.GetFloat("height")}/2;
for(XMLTag&monster:spawnData.monsters){
@ -3882,7 +3882,7 @@ void AiL::ValidateGameStatus(){
monsterCounts[monsterName]++;
}
}
LOG("Spawns Report for "<<map<<":");
LOG("Spawns Report for "<<map.GetMapDisplayName()<<":");
for(auto&[monster,count]:monsterCounts){
LOG("\t"<<count<<"x "<<monster);
}
@ -4776,18 +4776,18 @@ void AiL::PrecacheNewLevels(){
datafile cacheTimestampsData;
const std::string precacheConfigurationFilepath{std::format("{}{}","config_path"_S,"map_precache_timestamp_config"_S)};
if(std::filesystem::exists(precacheConfigurationFilepath))datafile::Read(cacheTimestampsData,precacheConfigurationFilepath);
for(auto&[map,size]:MAP_DATA){
const std::string mapFileName{std::format("assets/Campaigns/{}",DATA["Levels"][map]["Map File"].GetString())};
const std::string mapCacheFileName{std::format("assets/cache/foregroundTileData_{}.data",map)};
for(auto&map:MAP_DATA){
const std::string mapFileName{std::format("assets/Campaigns/{}",DATA["Levels"][map.GetMapName()]["Map File"].GetString())};
const std::string mapCacheFileName{std::format("assets/cache/foregroundTileData_{}.data",map.GetMapName())};
const std::string lastWriteTimestamp{std::format("{}",std::filesystem::last_write_time(mapFileName))};
const bool PrecacheFileExists{game->gamepack.FileExists(mapCacheFileName)};
const bool CacheTimestampDiffersFromLastWriteTime{!cacheTimestampsData.HasProperty(map)||cacheTimestampsData[map].GetString()!=lastWriteTimestamp};
const bool MapCacheOutOfDate{!cacheTimestampsData.HasProperty(map)||CacheTimestampDiffersFromLastWriteTime};
const bool CacheTimestampDiffersFromLastWriteTime{!cacheTimestampsData.HasProperty(map.GetMapName())||cacheTimestampsData[map.GetMapName()].GetString()!=lastWriteTimestamp};
const bool MapCacheOutOfDate{!cacheTimestampsData.HasProperty(map.GetMapName())||CacheTimestampDiffersFromLastWriteTime};
if(!PrecacheFileExists||MapCacheOutOfDate){
cacheTimestampsData[map].SetString(lastWriteTimestamp);
TileGroupDataFile::AddToMapCacheQueue(map);
cacheTimestampsData[map.GetMapName()].SetString(lastWriteTimestamp);
TileGroupDataFile::AddToMapCacheQueue(map.GetMapName());
}
}
datafile::Write(cacheTimestampsData,precacheConfigurationFilepath);

View File

@ -59,6 +59,7 @@ All rights reserved.
#include "Minimap.h"
#include "Overlay.h"
#include <variant>
#include"safemap.h"
#undef KEY_MENU
#undef KEY_SELECT
@ -169,7 +170,7 @@ public:
static float SIZE_CHANGE_SPEED;
double levelTime=0.;
Camera2D camera;
std::unordered_map<MapName,Map>MAP_DATA;
safeunorderedmap<MapName,Map>MAP_DATA;
ResourcePack gamepack;
public:

View File

@ -47,7 +47,7 @@ using MapName=std::string;
class MapHelper{
public:
static Map&MapFromString(std::string mapName);
static const Map&MapFromString(std::string mapName);
};
struct TileCollisionData{

View File

@ -40,9 +40,7 @@ All rights reserved.
#include "Menu.h"
#include "AdventuresInLestoria.h"
void State_Story::OnStateChange(GameState*prevState){
Menu::CloseAllMenus();
};
void State_Story::OnStateChange(GameState*prevState){}
void State_Story::OnLevelLoad(){}
void State_Story::OnUserUpdate(AiL*game){
VisualNovel::novel.Update();

View File

@ -56,14 +56,14 @@ void Test::RunMapTests(){
is("There are two LowerBridgeCollision zones in Campaign I-I",
game->GetZones("CAMPAIGN_1_1").count("LowerBridgeCollision")
&&game->GetZones("CAMPAIGN_1_1").at("LowerBridgeCollision").size()>=2);
for(auto&[key,value]:game->MAP_DATA){
if(value.GetMapType()==Map::MapType::DUNGEON){
is("There is an EndZone in Dungeon "+key,
game->GetZones(key).count("EndZone"));
for(auto&map:game->MAP_DATA){
if(map.GetMapType()==Map::MapType::DUNGEON){
is("There is an EndZone in Dungeon "+std::string{map.GetMapDisplayName()},
game->GetZones(map.GetMapName()).count("EndZone"));
}
for(const ZoneData&endZone:value.GetZones().at("EndZone")){
if(endZone.isUpper&&(!value.GetZones().count("UpperZone")||value.GetZones().at("UpperZone").size()==0))ERR(std::format("WARNING! An End Zone was found in map {} with the upper flag when no upper transition zones have been defined in a stage!",value.GetMapDisplayName()));
for(const ZoneData&endZone:map.GetZones().at("EndZone")){
if(endZone.isUpper&&(!map.GetZones().count("UpperZone")||map.GetZones().at("UpperZone").size()==0))ERR(std::format("WARNING! An End Zone was found in map {} with the upper flag when no upper transition zones have been defined in a stage!",map.GetMapDisplayName()));
}
}

View File

@ -49,7 +49,7 @@ uint8_t TileGroup::FADE_AMT=160;
std::map<BackdropName,Renderable>BACKDROP_DATA;
std::map<BackdropName,Renderable>FOREDROP_DATA;
Map&MapHelper::MapFromString(std::string mapName){
const Map&MapHelper::MapFromString(std::string mapName){
return game->MAP_DATA.at(mapName);
}

View File

@ -74,7 +74,7 @@ void Unlock::UnlockArea(std::string mapName){
)
unlocks.insert(mapName);
}
bool Unlock::IsUnlocked(std::string mapName){
bool Unlock::IsUnlocked(const std::string&mapName){
return unlocks.count(mapName)||mapName.length()==0;
}

View File

@ -52,7 +52,7 @@ public:
static void UnlockArea(std::string mapName);
//Uses the current map as the unlock criteria.
static void UnlockCurrentMap();
static bool IsUnlocked(std::string mapName);
static bool IsUnlocked(const std::string&mapName);
static bool IsUnlocked(ConnectionPoint&cp);
static void IncreaseKillCount();
};

View File

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_PATCH 0
#define VERSION_BUILD 12678
#define VERSION_BUILD 12701
#define stringify(a) stringify_(a)
#define stringify_(a) #a

View File

@ -7,6 +7,132 @@ group0
group1
{
data = 528, 528, 12, 12, 0.000000, 0.000000, 0.000000, 0.000000, 528, 528, 540, 540
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -13859400, 528.000000, 528.000000, 0, 228, 931, 3
}
group2
{
data = 240, 540, 12, 12, 0.000000, 0.000000, 0.000000, 0.000000, 240, 540, 252, 552
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -13859400, 240.000000, 540.000000, 0, 228, 931, 2
}
group3
{
data = 696, 0, 24, 48, 706.000000, 36.000000, 5.000000, 8.000000, 696, 0, 720, 48
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 696.000000, 0.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 0.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 696.000000, 12.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 12.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 696.000000, 24.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 24.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 696.000000, 36.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 36.000000, 324, 216, 909, 5
}
group4
{
data = 732, 0, 24, 48, 742.000000, 36.000000, 5.000000, 8.000000, 732, 0, 756, 48
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 732.000000, 0.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 0.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 732.000000, 12.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 12.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 732.000000, 24.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 24.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 732.000000, 36.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 36.000000, 324, 216, 909, 5
}
group5
{
data = 768, 0, 24, 48, 778.000000, 36.000000, 5.000000, 8.000000, 768, 0, 792, 48
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 768.000000, 0.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 0.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 768.000000, 12.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 12.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 768.000000, 24.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 24.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 768.000000, 36.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 36.000000, 324, 216, 909, 5
}
group6
{
data = 804, 0, 24, 48, 814.000000, 36.000000, 5.000000, 8.000000, 804, 0, 828, 48
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 804.000000, 0.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 0.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 804.000000, 12.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 12.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 804.000000, 24.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 24.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 804.000000, 36.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 36.000000, 324, 216, 909, 5
}
group7
{
data = 696, 48, 24, 48, 706.000000, 84.000000, 5.000000, 8.000000, 696, 48, 720, 96
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 696.000000, 48.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 48.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 696.000000, 60.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 60.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 696.000000, 72.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 72.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 696.000000, 84.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 708.000000, 84.000000, 324, 216, 909, 5
}
group8
{
data = 732, 48, 24, 48, 742.000000, 84.000000, 5.000000, 8.000000, 732, 48, 756, 96
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 732.000000, 48.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 48.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 732.000000, 60.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 60.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 732.000000, 72.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 72.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 732.000000, 84.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 744.000000, 84.000000, 324, 216, 909, 5
}
group9
{
data = 768, 48, 24, 48, 778.000000, 84.000000, 5.000000, 8.000000, 768, 48, 792, 96
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 768.000000, 48.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 48.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 768.000000, 60.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 60.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 768.000000, 72.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 72.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 768.000000, 84.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 780.000000, 84.000000, 324, 216, 909, 5
}
group10
{
data = 804, 48, 24, 48, 814.000000, 84.000000, 5.000000, 8.000000, 804, 48, 828, 96
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 804.000000, 48.000000, 312, 180, 761, 5
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 48.000000, 324, 180, 762, 5
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 804.000000, 60.000000, 312, 192, 810, 5
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 60.000000, 324, 192, 811, 5
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14855287, 804.000000, 72.000000, 312, 204, 859, 5
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 72.000000, 324, 204, 860, 5
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 804.000000, 84.000000, 312, 216, 908, 5
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 816.000000, 84.000000, 324, 216, 909, 5
}
group11
{
data = 444, 0, 72, 120, 472.000000, 100.000000, 18.000000, 12.000000, 444, 0, 516, 120
tileRenderData0 = assets/maps/Decorations_c1_No_Shadow24x24as12x12.tsx, 14220, 0, 444.000000, 0.000000, 432, 96, 756, 1
@ -68,7 +194,7 @@ group1
}
group2
group12
{
data = 48, 12, 72, 120, 76.000000, 112.000000, 18.000000, 12.000000, 48, 12, 120, 132
tileRenderData0 = assets/maps/Decorations_c1_No_Shadow24x24as12x12.tsx, 14220, 0, 48.000000, 12.000000, 432, 96, 756, 1
@ -130,7 +256,7 @@ group2
}
group3
group13
{
data = 408, 276, 72, 60, 415.000000, 307.000000, 56.000000, 24.000000, 408, 276, 480, 336
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14607288, 432.000000, 276.000000, 24, 216, 884, 1
@ -157,7 +283,7 @@ group3
}
group4
group14
{
data = 360, 312, 48, 48, 372.000000, 342.000000, 24.000000, 10.000000, 360, 312, 408, 360
tileRenderData0 = assets/maps/64x64px_No_Shadow_Campfire_12x12.tsx, 13756, 0, 360.000000, 312.000000, 0, 0, 0, 1
@ -179,7 +305,93 @@ group4
}
group5
group15
{
data = 312, 384, 48, 48, 317.000000, 420.000000, 37.000000, 6.000000, 312, 384, 360, 432
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 312.000000, 384.000000, 336, 96, 420, 2
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10851464, 324.000000, 384.000000, 348, 96, 421, 2
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 336.000000, 384.000000, 360, 96, 422, 2
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 384.000000, 372, 96, 423, 2
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 312.000000, 396.000000, 336, 108, 469, 2
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12038302, 324.000000, 396.000000, 348, 108, 470, 2
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14864285, 336.000000, 396.000000, 360, 108, 471, 2
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 396.000000, 372, 108, 472, 2
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 312.000000, 408.000000, 336, 120, 518, 2
tileRenderData9 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -13028276, 324.000000, 408.000000, 348, 120, 519, 2
tileRenderData10 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 336.000000, 408.000000, 360, 120, 520, 2
tileRenderData11 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 408.000000, 372, 120, 521, 2
tileRenderData12 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 312.000000, 420.000000, 336, 132, 567, 2
tileRenderData13 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 324.000000, 420.000000, 348, 132, 568, 2
tileRenderData14 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 336.000000, 420.000000, 360, 132, 569, 2
tileRenderData15 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 420.000000, 372, 132, 570, 2
}
group16
{
data = 252, 408, 84, 72, 256.000000, 447.000000, 69.000000, 27.000000, 252, 408, 336, 480
tileRenderData0 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 252.000000, 408.000000, 0, 0, 0, 2
tileRenderData1 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -13686200, 264.000000, 408.000000, 12, 0, 1, 2
tileRenderData2 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -13025185, 276.000000, 408.000000, 24, 0, 2, 2
tileRenderData3 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 288.000000, 408.000000, 36, 0, 3, 2
tileRenderData4 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12228481, 252.000000, 420.000000, 0, 12, 56, 2
tileRenderData5 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12232852, 264.000000, 420.000000, 12, 12, 57, 2
tileRenderData6 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -13686200, 276.000000, 420.000000, 24, 12, 58, 2
tileRenderData7 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 288.000000, 420.000000, 36, 12, 59, 2
tileRenderData8 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12232852, 252.000000, 432.000000, 0, 24, 112, 2
tileRenderData9 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12228481, 264.000000, 432.000000, 12, 24, 113, 2
tileRenderData10 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12228481, 276.000000, 432.000000, 24, 24, 114, 2
tileRenderData11 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 288.000000, 432.000000, 36, 24, 115, 2
tileRenderData12 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -14847578, 300.000000, 432.000000, 48, 24, 116, 2
tileRenderData13 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -14847578, 312.000000, 432.000000, 60, 24, 117, 2
tileRenderData14 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 324.000000, 432.000000, 72, 24, 118, 2
tileRenderData15 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12232852, 252.000000, 444.000000, 0, 36, 168, 2
tileRenderData16 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -15069386, 264.000000, 444.000000, 12, 36, 169, 2
tileRenderData17 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -13686200, 276.000000, 444.000000, 24, 36, 170, 2
tileRenderData18 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12232852, 288.000000, 444.000000, 36, 36, 171, 2
tileRenderData19 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -14855287, 300.000000, 444.000000, 48, 36, 172, 2
tileRenderData20 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -11434335, 312.000000, 444.000000, 60, 36, 173, 2
tileRenderData21 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 324.000000, 444.000000, 72, 36, 174, 2
tileRenderData22 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -13686200, 252.000000, 456.000000, 0, 48, 224, 2
tileRenderData23 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -11164996, 264.000000, 456.000000, 12, 48, 225, 2
tileRenderData24 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, -12232852, 276.000000, 456.000000, 24, 48, 226, 2
tileRenderData25 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 288.000000, 456.000000, 36, 48, 227, 2
tileRenderData26 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 300.000000, 456.000000, 48, 48, 228, 2
tileRenderData27 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 312.000000, 456.000000, 60, 48, 229, 2
tileRenderData28 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 324.000000, 456.000000, 72, 48, 230, 2
tileRenderData29 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 252.000000, 468.000000, 0, 60, 280, 2
tileRenderData30 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 264.000000, 468.000000, 12, 60, 281, 2
tileRenderData31 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 276.000000, 468.000000, 24, 60, 282, 2
tileRenderData32 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 288.000000, 468.000000, 36, 60, 283, 2
tileRenderData33 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 300.000000, 468.000000, 48, 60, 284, 2
tileRenderData34 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 312.000000, 468.000000, 60, 60, 285, 2
tileRenderData35 = assets/maps/112x96_Forge_No_Shadow_12x12.tsx, 13884, 0, 324.000000, 468.000000, 72, 60, 286, 2
}
group17
{
data = 336, 432, 48, 48, 343.000000, 456.000000, 34.000000, 19.000000, 336, 432, 384, 480
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 336.000000, 432.000000, 384, 96, 424, 2
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12038302, 348.000000, 432.000000, 396, 96, 425, 2
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12038302, 360.000000, 432.000000, 408, 96, 426, 2
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 372.000000, 432.000000, 420, 96, 427, 2
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -7041641, 336.000000, 444.000000, 384, 108, 473, 2
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -4998460, 348.000000, 444.000000, 396, 108, 474, 2
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 360.000000, 444.000000, 408, 108, 475, 2
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 372.000000, 444.000000, 420, 108, 476, 2
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 336.000000, 456.000000, 384, 120, 522, 2
tileRenderData9 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 348.000000, 456.000000, 396, 120, 523, 2
tileRenderData10 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 360.000000, 456.000000, 408, 120, 524, 2
tileRenderData11 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 372.000000, 456.000000, 420, 120, 525, 2
tileRenderData12 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 336.000000, 468.000000, 384, 132, 571, 2
tileRenderData13 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 468.000000, 396, 132, 572, 2
tileRenderData14 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 360.000000, 468.000000, 408, 132, 573, 2
tileRenderData15 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 372.000000, 468.000000, 420, 132, 574, 2
}
group18
{
data = 0, 408, 72, 120, 28.000000, 508.000000, 18.000000, 12.000000, 0, 408, 72, 528
tileRenderData0 = assets/maps/Decorations_c1_No_Shadow24x24as12x12.tsx, 14220, 0, 0.000000, 408.000000, 432, 96, 756, 1
@ -241,7 +453,139 @@ group5
}
group6
group19
{
data = 288, 504, 24, 24, 291.000000, 516.000000, 17.000000, 9.000000, 288, 504, 312, 528
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -7041641, 288.000000, 504.000000, 312, 120, 516, 2
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 300.000000, 504.000000, 324, 120, 517, 2
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 288.000000, 516.000000, 312, 132, 565, 2
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 300.000000, 516.000000, 324, 132, 566, 2
}
group20
{
data = 264, 504, 24, 24, 266.000000, 516.000000, 20.000000, 10.000000, 264, 504, 288, 528
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -13859400, 264.000000, 504.000000, 168, 96, 406, 2
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 276.000000, 504.000000, 180, 96, 407, 2
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 264.000000, 516.000000, 168, 108, 455, 2
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 276.000000, 516.000000, 180, 108, 456, 2
}
group21
{
data = 432, 492, 48, 48, 439.000000, 516.000000, 34.000000, 19.000000, 432, 492, 480, 540
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 432.000000, 492.000000, 384, 96, 424, 3
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12038302, 444.000000, 492.000000, 396, 96, 425, 3
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12038302, 456.000000, 492.000000, 408, 96, 426, 3
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 468.000000, 492.000000, 420, 96, 427, 3
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -7041641, 432.000000, 504.000000, 384, 108, 473, 3
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -4998460, 444.000000, 504.000000, 396, 108, 474, 3
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 456.000000, 504.000000, 408, 108, 475, 3
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 468.000000, 504.000000, 420, 108, 476, 3
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 432.000000, 516.000000, 384, 120, 522, 3
tileRenderData9 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 444.000000, 516.000000, 396, 120, 523, 3
tileRenderData10 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 456.000000, 516.000000, 408, 120, 524, 3
tileRenderData11 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 468.000000, 516.000000, 420, 120, 525, 3
tileRenderData12 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 432.000000, 528.000000, 384, 132, 571, 3
tileRenderData13 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 444.000000, 528.000000, 396, 132, 572, 3
tileRenderData14 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 456.000000, 528.000000, 408, 132, 573, 3
tileRenderData15 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 468.000000, 528.000000, 420, 132, 574, 3
}
group22
{
data = 324, 516, 36, 36, 327.000000, 534.000000, 29.000000, 12.000000, 324, 516, 360, 552
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 324.000000, 516.000000, 276, 156, 660, 2
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 336.000000, 516.000000, 288, 156, 661, 2
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 516.000000, 300, 156, 662, 2
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 324.000000, 528.000000, 276, 168, 709, 2
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 336.000000, 528.000000, 288, 168, 710, 2
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 528.000000, 300, 168, 711, 2
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 324.000000, 540.000000, 276, 180, 758, 2
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 336.000000, 540.000000, 288, 180, 759, 2
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 348.000000, 540.000000, 300, 180, 760, 2
}
group23
{
data = 528, 516, 72, 60, 535.000000, 547.000000, 56.000000, 24.000000, 528, 516, 600, 576
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14607288, 552.000000, 516.000000, 24, 216, 884, 3
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 564.000000, 516.000000, 36, 216, 885, 3
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 576.000000, 516.000000, 48, 216, 886, 3
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12489076, 540.000000, 528.000000, 12, 228, 932, 3
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -8408375, 552.000000, 528.000000, 24, 228, 933, 3
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12489076, 564.000000, 528.000000, 36, 228, 934, 3
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 576.000000, 528.000000, 48, 228, 935, 3
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 528.000000, 540.000000, 0, 240, 980, 3
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 540.000000, 540.000000, 12, 240, 981, 3
tileRenderData9 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 552.000000, 540.000000, 24, 240, 982, 3
tileRenderData10 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 564.000000, 540.000000, 36, 240, 983, 3
tileRenderData11 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 576.000000, 540.000000, 48, 240, 984, 3
tileRenderData12 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 588.000000, 540.000000, 60, 240, 985, 3
tileRenderData13 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 528.000000, 552.000000, 0, 252, 1029, 3
tileRenderData14 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 540.000000, 552.000000, 12, 252, 1030, 3
tileRenderData15 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 552.000000, 552.000000, 24, 252, 1031, 3
tileRenderData16 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 564.000000, 552.000000, 36, 252, 1032, 3
tileRenderData17 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 576.000000, 552.000000, 48, 252, 1033, 3
tileRenderData18 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 588.000000, 552.000000, 60, 252, 1034, 3
tileRenderData19 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 552.000000, 564.000000, 24, 264, 1080, 3
tileRenderData20 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 564.000000, 564.000000, 36, 264, 1081, 3
}
group24
{
data = 432, 540, 60, 36, 439.000000, 561.000000, 47.000000, 10.000000, 432, 540, 492, 576
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 432.000000, 540.000000, 432, 0, 36, 3
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 444.000000, 540.000000, 444, 0, 37, 3
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 456.000000, 540.000000, 456, 0, 38, 3
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 468.000000, 540.000000, 468, 0, 39, 3
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 480.000000, 540.000000, 480, 0, 40, 3
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 432.000000, 552.000000, 432, 12, 85, 3
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 444.000000, 552.000000, 444, 12, 86, 3
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 456.000000, 552.000000, 456, 12, 87, 3
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 468.000000, 552.000000, 468, 12, 88, 3
tileRenderData9 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 480.000000, 552.000000, 480, 12, 89, 3
tileRenderData10 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 432.000000, 564.000000, 432, 24, 134, 3
tileRenderData11 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 444.000000, 564.000000, 444, 24, 135, 3
tileRenderData12 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 456.000000, 564.000000, 456, 24, 136, 3
tileRenderData13 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 468.000000, 564.000000, 468, 24, 137, 3
tileRenderData14 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 480.000000, 564.000000, 480, 24, 138, 3
}
group25
{
data = 240, 528, 72, 60, 247.000000, 559.000000, 56.000000, 24.000000, 240, 528, 312, 588
tileRenderData0 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14607288, 264.000000, 528.000000, 24, 216, 884, 2
tileRenderData1 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 276.000000, 528.000000, 36, 216, 885, 2
tileRenderData2 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 288.000000, 528.000000, 48, 216, 886, 2
tileRenderData3 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12489076, 252.000000, 540.000000, 12, 228, 932, 2
tileRenderData4 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -8408375, 264.000000, 540.000000, 24, 228, 933, 2
tileRenderData5 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -12489076, 276.000000, 540.000000, 36, 228, 934, 2
tileRenderData6 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 288.000000, 540.000000, 48, 228, 935, 2
tileRenderData7 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -14847578, 240.000000, 552.000000, 0, 240, 980, 2
tileRenderData8 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15069386, 252.000000, 552.000000, 12, 240, 981, 2
tileRenderData9 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 264.000000, 552.000000, 24, 240, 982, 2
tileRenderData10 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 276.000000, 552.000000, 36, 240, 983, 2
tileRenderData11 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -15187336, 288.000000, 552.000000, 48, 240, 984, 2
tileRenderData12 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 300.000000, 552.000000, 60, 240, 985, 2
tileRenderData13 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 240.000000, 564.000000, 0, 252, 1029, 2
tileRenderData14 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 252.000000, 564.000000, 12, 252, 1030, 2
tileRenderData15 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, -10317396, 264.000000, 564.000000, 24, 252, 1031, 2
tileRenderData16 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 276.000000, 564.000000, 36, 252, 1032, 2
tileRenderData17 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 288.000000, 564.000000, 48, 252, 1033, 2
tileRenderData18 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 300.000000, 564.000000, 60, 252, 1034, 2
tileRenderData19 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 264.000000, 576.000000, 24, 264, 1080, 2
tileRenderData20 = assets/maps/16x16px_grid_Props_No_Shadow_12x12.tsx, 11649, 0, 276.000000, 576.000000, 36, 264, 1081, 2
}
group26
{
data = 708, 492, 72, 120, 736.000000, 592.000000, 18.000000, 12.000000, 708, 492, 780, 612
tileRenderData0 = assets/maps/Decorations_c1_No_Shadow24x24as12x12.tsx, 14220, 0, 708.000000, 492.000000, 432, 96, 756, 1

View File

@ -1,4 +1,4 @@
INTRO_MAP = 2024-09-13 21:28:58.8931211
INTRO_MAP = 2026-02-23 21:02:53.4861099
HUB = 2024-09-13 21:41:17.0093533
TEST_MAP = 2026-01-26 20:40:12.7201277
BOSS_1 = 2026-02-23 20:43:43.6912540

View File

@ -40,6 +40,7 @@ All rights reserved.
#include <functional>
#include <map>
#include <unordered_map>
#include<algorithm>
//A class that has an initialization lock so that when the lock is activated, any further gets that are missing items in it will report themselves for easier debugging detection.
template<typename T,typename O>
@ -65,6 +66,9 @@ public:
O&at(T key){
return map.at(key);
}
const O&at(T key)const{
return map.at(key);
}
auto insert(T key,O obj){
return map.insert({key,obj});
}
@ -134,7 +138,10 @@ public:
}
}
O&at(T key){
return items[map.at(key)];
return items.at(map.at(key));
}
const O&at(T key)const{
return items.at(map.at(key));
}
size_t count(T key){
return map.count(key);
@ -151,16 +158,28 @@ public:
map.clear();
items.clear();
}
auto begin(){
return items.begin();
}
auto end(){
return items.end();
}
auto begin()const{
return items.begin();
}
auto end()const{
return items.end();
}
auto contains(const T&key)const{
return map.contains(key);
auto contains(O&obj){
return std::ranges::contains(items,obj);
}
auto contains(const O&obj){
return std::ranges::contains(items,obj);
}
void insert(T key,O obj){
(*this)[key]=obj;
}
auto find(const O&obj)const{
return std::find(items.begin(),items.end(),obj);
}
};