diff --git a/Adventures in Lestoria/Adventures in Lestoria.tiled-project b/Adventures in Lestoria/Adventures in Lestoria.tiled-project index e4af0314..44efd58e 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.tiled-project +++ b/Adventures in Lestoria/Adventures in Lestoria.tiled-project @@ -7,6 +7,8 @@ "folders": [ "." ], + "properties": [ + ], "propertyTypes": [ { "color": "#ff3af8eb", @@ -90,6 +92,30 @@ "layer" ] }, + { + "color": "#ffa0a0a4", + "drawFill": true, + "id": 41, + "members": [ + { + "name": "TileRepeatFactor X", + "type": "int", + "value": 1 + }, + { + "name": "TileRepeatFactor Y", + "type": "int", + "value": 1 + } + ], + "name": "CustomTile", + "type": "class", + "useAs": [ + "property", + "tile", + "project" + ] + }, { "color": "#ffbdc34c", "drawFill": true, diff --git a/Adventures in Lestoria/AdventuresInLestoria.cpp b/Adventures in Lestoria/AdventuresInLestoria.cpp index 6d927949..85cef9c4 100644 --- a/Adventures in Lestoria/AdventuresInLestoria.cpp +++ b/Adventures in Lestoria/AdventuresInLestoria.cpp @@ -940,9 +940,21 @@ void AiL::RenderTile(vi2d pos,TilesheetData tileSheet,int tileSheetIndex,vi2d ti int tileSheetWidth=tileSheet.tileset->tileset->Sprite()->width/tileSheet.tileset->tilewidth; int tileSheetX=animatedIndex%tileSheetWidth; int tileSheetY=animatedIndex/tileSheetWidth; - view.DrawPartialDecal(pos*game->GetCurrentMapData().tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*tileSheet.tileset->tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tempCol); + if(tileSheet.tileset->tileRepeatData.count(tileSheetIndex)){ + for(int y=0;ytileRepeatData[tileSheetIndex].y;y++){ + for(int x=0;xtileRepeatData[tileSheetIndex].x;x++){ + view.DrawPartialDecal(pos*game->GetCurrentMapData().tilewidth+vf2d{float(x),float(y)}*game->GetCurrentMapData().tilewidth/vf2d{tileSheet.tileset->tileRepeatData[tileSheetIndex]},vf2d{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)}/vf2d{tileSheet.tileset->tileRepeatData[tileSheetIndex]},tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*tileSheet.tileset->tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tempCol); + } + } + }else view.DrawPartialDecal(pos*game->GetCurrentMapData().tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*tileSheet.tileset->tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tempCol); }else{ - view.DrawPartialDecal(pos*game->GetCurrentMapData().tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tileSheet.tileset->tileset->Decal(),tileSheetPos*tileSheet.tileset->tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tempCol); + if(tileSheet.tileset->tileRepeatData.count(tileSheetIndex)){ + for(int y=0;ytileRepeatData[tileSheetIndex].y;y++){ + for(int x=0;xtileRepeatData[tileSheetIndex].x;x++){ + view.DrawPartialDecal(pos*game->GetCurrentMapData().tilewidth+vi2d{x,y}*game->GetCurrentMapData().tilewidth/tileSheet.tileset->tileRepeatData[tileSheetIndex],{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tileSheet.tileset->tileset->Decal(),tileSheetPos*tileSheet.tileset->tilewidth,vf2d{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)}/tileSheet.tileset->tileRepeatData[tileSheetIndex],tempCol); + } + } + }else view.DrawPartialDecal(pos*game->GetCurrentMapData().tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tileSheet.tileset->tileset->Decal(),tileSheetPos*tileSheet.tileset->tilewidth,{float(tileSheet.tileset->tilewidth),float(tileSheet.tileset->tileheight)},tempCol); } } @@ -953,9 +965,21 @@ void AiL::RenderTile(TileRenderData&tileSheet,Pixel col){ int tileSheetWidth=tileSheet.tileSheet.tileset->tileset->Sprite()->width/tileSheet.tileSheet.tileset->tilewidth; int tileSheetX=animatedIndex%tileSheetWidth; int tileSheetY=animatedIndex/tileSheetWidth; - view.DrawPartialDecal(tileSheet.pos,{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},tileSheet.tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*vf2d{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},col); + if(tileSheet.tileSheet.tileset->tileRepeatData.count(animatedIndex)){ + for(int y=0;ytileRepeatData[animatedIndex].y;y++){ + for(int x=0;xtileRepeatData[animatedIndex].x;x++){ + view.DrawPartialDecal(tileSheet.pos+vi2d{x,y}*game->GetCurrentMapData().tilewidth/tileSheet.tileSheet.tileset->tileRepeatData[animatedIndex],{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},tileSheet.tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*vf2d{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},vf2d{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)}/tileSheet.tileSheet.tileset->tileRepeatData[animatedIndex],col); + } + } + }else view.DrawPartialDecal(tileSheet.pos,{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},tileSheet.tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*vf2d{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},col); }else{ - view.DrawPartialDecal(tileSheet.pos,{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},tileSheet.tileSheet.tileset->tileset->Decal(),tileSheet.tileSheetPos,{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},col); + if(tileSheet.tileSheet.tileset->tileRepeatData.count(tileSheet.tileID)){ + for(int y=0;ytileRepeatData[tileSheet.tileID].y;y++){ + for(int x=0;xtileRepeatData[tileSheet.tileID].x;x++){ + view.DrawPartialDecal(tileSheet.pos+vi2d{x,y}*game->GetCurrentMapData().tilewidth/tileSheet.tileSheet.tileset->tileRepeatData[tileSheet.tileID],{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},tileSheet.tileSheet.tileset->tileset->Decal(),tileSheet.tileSheetPos,vf2d{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)}/tileSheet.tileSheet.tileset->tileRepeatData[tileSheet.tileID],col); + } + } + }else view.DrawPartialDecal(tileSheet.pos,{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},tileSheet.tileSheet.tileset->tileset->Decal(),tileSheet.tileSheetPos,{float(tileSheet.tileSheet.tileset->tilewidth),float(tileSheet.tileSheet.tileset->tileheight)},col); } } @@ -2012,6 +2036,7 @@ void AiL::InitializeLevel(std::string mapFile,MapName map){ MAP_TILESETS["assets/maps/"+baseSourceDir].staircaseTiles=tileset.GetData().StaircaseData; MAP_TILESETS["assets/maps/"+baseSourceDir].animationData=tileset.GetData().AnimationData; MAP_TILESETS["assets/maps/"+baseSourceDir].reflectiveData=tileset.GetData().ReflectiveData; + MAP_TILESETS["assets/maps/"+baseSourceDir].tileRepeatData=tileset.GetData().TileRepeatData; MAP_TILESETS["assets/maps/"+baseSourceDir].isTerrain=tileset.GetData().isTerrain; MAP_TILESETS["assets/maps/"+baseSourceDir].collision.SetInitialized(); LOG("assets/maps/"+baseSourceDir<<" Animation Data Size: "<foregroundTiles; - std::mapupperForegroundTiles; + std::unordered_mapforegroundTiles; + std::unordered_mapupperForegroundTiles; safemapcollision; - std::mapstaircaseTiles; - std::map>animationData; + std::unordered_mapstaircaseTiles; + std::unordered_map>animationData; + std::unordered_maptileRepeatData; std::setreflectiveData; std::vectortilecols; }; diff --git a/Adventures in Lestoria/TSXParser.h b/Adventures in Lestoria/TSXParser.h index 0f359f75..50940e76 100644 --- a/Adventures in Lestoria/TSXParser.h +++ b/Adventures in Lestoria/TSXParser.h @@ -49,12 +49,13 @@ struct Tileset{ int tilewidth=0,tileheight=0; int imagewidth=0,imageheight=0; bool isTerrain=false; - std::map ForegroundTileData; - std::map UpperForegroundTileData; + std::unordered_map ForegroundTileData; + std::unordered_map UpperForegroundTileData; safemap CollisionData; - std::map StaircaseData; - std::map> AnimationData; + std::unordered_map StaircaseData; + std::unordered_map> AnimationData; std::set ReflectiveData; + std::unordered_map TileRepeatData; friend std::ostream& operator << (std::ostream& os, Tileset& rhs); }; @@ -158,10 +159,20 @@ class TSXParser{ parsedTilesetInfo.UpperForegroundTileData[newTag.GetInteger("id")].tag=newTag.tag; parsedTilesetInfo.UpperForegroundTileData[newTag.GetInteger("id")].data=newTag.data; } else + if (newTag.tag=="property"&&newTag.data["name"]=="TileRepeatFactor X"){ + parsedTilesetInfo.TileRepeatData[previousTagID].x=newTag.GetInteger("value"); + }else + if (newTag.tag=="property"&&newTag.data["name"]=="TileRepeatFactor Y"){ + parsedTilesetInfo.TileRepeatData[previousTagID].y=newTag.GetInteger("value"); + }else if (newTag.tag=="property"&&newTag.data["name"]=="Hide?"){ if(currentTileTag==nullptr)ERR("WARNING! Cannot set hide value for a nullptr currentTileTag! THIS SHOULD NOT BE HAPPENING!"); currentTileTag->hide=newTag.GetBool("value"); }else + if (newTag.tag=="tile"&&newTag.data["type"]=="CustomTile"){ + previousTag=newTag.tag; + previousTagID=newTag.GetInteger("id"); + } else if (newTag.tag=="tile"&&newTag.data["type"]=="Staircase"){ previousTag=newTag.tag; staircaseTag=newTag.tag; diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h index dfaaffa9..7c20e76e 100644 --- a/Adventures in Lestoria/Version.h +++ b/Adventures in Lestoria/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 1 #define VERSION_MINOR 1 #define VERSION_PATCH 0 -#define VERSION_BUILD 8902 +#define VERSION_BUILD 8917 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Adventures in Lestoria/assets/gamepack.pak b/Adventures in Lestoria/assets/gamepack.pak index 70643b89..a2204bc7 100644 Binary files a/Adventures in Lestoria/assets/gamepack.pak and b/Adventures in Lestoria/assets/gamepack.pak differ diff --git a/Adventures in Lestoria/assets/maps/chapter2-props.png b/Adventures in Lestoria/assets/maps/chapter2-props.png index 782b88c6..7c0e891c 100644 Binary files a/Adventures in Lestoria/assets/maps/chapter2-props.png and b/Adventures in Lestoria/assets/maps/chapter2-props.png differ diff --git a/Adventures in Lestoria/assets/maps/objects.tsx b/Adventures in Lestoria/assets/maps/objects.tsx index 390644af..359c495a 100644 --- a/Adventures in Lestoria/assets/maps/objects.tsx +++ b/Adventures in Lestoria/assets/maps/objects.tsx @@ -1,9 +1,19 @@ - + + - + + + + + + + + + + diff --git a/x64/Release/Adventures in Lestoria.exe b/x64/Release/Adventures in Lestoria.exe index 9cb372cd..b96dd3b7 100644 Binary files a/x64/Release/Adventures in Lestoria.exe and b/x64/Release/Adventures in Lestoria.exe differ