@ -91,7 +91,7 @@ bool Crawler::OnUserCreate(){
camera = Camera2D { WINDOW_SIZE } ;
camera = Camera2D { WINDOW_SIZE } ;
camera . SetMode ( olc : : utils : : Camera2D : : Mode : : LazyFollow ) ;
camera . SetMode ( olc : : utils : : Camera2D : : Mode : : LazyFollow ) ;
camera . SetTarget ( player - > GetPos ( ) ) ;
camera . SetTarget ( player - > GetPos ( ) ) ;
camera . SetWorldBoundary ( { 0 , 0 } , WORLD_SIZE * 24 ) ;
camera . SetWorldBoundary ( { 0 , 0 } , GetCurrentMap ( ) . MapSize * 24 ) ;
camera . EnableWorldBoundary ( false ) ;
camera . EnableWorldBoundary ( false ) ;
InitializeGraphics ( ) ;
InitializeGraphics ( ) ;
@ -612,7 +612,7 @@ void Crawler::RenderWorld(float fElapsedTime){
SetDecalMode ( DecalMode : : ADDITIVE ) ;
SetDecalMode ( DecalMode : : ADDITIVE ) ;
float reflectionHeight = ( float ( player - > GetFrame ( ) . GetSourceRect ( ) . size . y ) - 8 ) * player - > GetSizeMult ( ) ;
float reflectionHeight = ( float ( player - > GetFrame ( ) . GetSourceRect ( ) . size . y ) - 8 ) * player - > GetSizeMult ( ) ;
float reflectionBottom = player - > GetPos ( ) . y + reflectionHeight ;
float reflectionBottom = player - > GetPos ( ) . y + reflectionHeight ;
float cutOff = reflectionBottom - WORLD_SIZE . y * 24 ;
float cutOff = reflectionBottom - GetCurrentMap ( ) . height * 24 ;
float multiplierX = 0.9 ;
float multiplierX = 0.9 ;
multiplierX * = ( 1 - abs ( sin ( reflectionStepTime ) ) * " water_reflection_scale_factor " _F ) ;
multiplierX * = ( 1 - abs ( sin ( reflectionStepTime ) ) * " water_reflection_scale_factor " _F ) ;
multiplierX * = ( 1 - abs ( cos ( 1.5 * reflectionStepTime ) ) * " water_reflection_scale_factor " _F ) ;
multiplierX * = ( 1 - abs ( cos ( 1.5 * reflectionStepTime ) ) * " water_reflection_scale_factor " _F ) ;
@ -625,7 +625,7 @@ void Crawler::RenderWorld(float fElapsedTime){
}
}
for ( int x = view . GetTopLeftTile ( ) . x / 24 - 1 ; x < = view . GetBottomRightTile ( ) . x / 24 ; x + + ) {
for ( int x = view . GetTopLeftTile ( ) . x / 24 - 1 ; x < = view . GetBottomRightTile ( ) . x / 24 ; x + + ) {
for ( int y = view . GetTopLeftTile ( ) . y / 24 - 1 ; y < = view . GetBottomRightTile ( ) . y / 24 ; y + + ) {
for ( int y = view . GetTopLeftTile ( ) . y / 24 - 1 ; y < = view . GetBottomRightTile ( ) . y / 24 ; y + + ) {
if ( x > = 0 & & x < WORLD_SIZE . x & & y > = 0 & & y < WORLD_SIZE . y ) {
if ( x > = 0 & & x < GetCurrentMap ( ) . width & & y > = 0 & & y < GetCurrentMap ( ) . height ) {
switch ( mode ) {
switch ( mode ) {
case RenderMode : : NORMAL_TILES : {
case RenderMode : : NORMAL_TILES : {
for ( LayerTag & layer : MAP_DATA [ currentLevel ] . LayerData ) {
for ( LayerTag & layer : MAP_DATA [ currentLevel ] . LayerData ) {
@ -696,7 +696,8 @@ void Crawler::RenderWorld(float fElapsedTime){
}
}
} break ;
} break ;
}
}
} else {
view . FillRectDecal ( vi2d { x , y } * 24 , { 24 , 24 } , { 100 , 180 , 100 } ) ;
}
}
}
}
}
}
@ -842,7 +843,7 @@ void Crawler::RenderWorld(float fElapsedTime){
if ( bridgeLayer ! = nullptr ) {
if ( bridgeLayer ! = nullptr ) {
for ( int x = view . GetTopLeftTile ( ) . x / 24 - 1 ; x < = view . GetBottomRightTile ( ) . x / 24 ; x + + ) {
for ( int x = view . GetTopLeftTile ( ) . x / 24 - 1 ; x < = view . GetBottomRightTile ( ) . x / 24 ; x + + ) {
for ( int y = view . GetTopLeftTile ( ) . y / 24 - 1 ; y < = view . GetBottomRightTile ( ) . y / 24 ; y + + ) {
for ( int y = view . GetTopLeftTile ( ) . y / 24 - 1 ; y < = view . GetBottomRightTile ( ) . y / 24 ; y + + ) {
if ( x > = 0 & & x < WORLD_SIZE . x & & y > = 0 & & y < WORLD_SIZE . y ) {
if ( x > = 0 & & x < GetCurrentMap ( ) . width & & y > = 0 & & y < GetCurrentMap ( ) . height ) {
int tileID = bridgeLayer - > tiles [ y ] [ x ] - 1 ;
int tileID = bridgeLayer - > tiles [ y ] [ x ] - 1 ;
if ( tileID ! = - 1 ) {
if ( tileID ! = - 1 ) {
TilesheetData tileSheet = GetTileSheet ( currentLevel , tileID ) ;
TilesheetData tileSheet = GetTileSheet ( currentLevel , tileID ) ;
@ -1150,7 +1151,6 @@ void Crawler::LoadLevel(MapName map){
SPAWNER_LIST . clear ( ) ;
SPAWNER_LIST . clear ( ) ;
foregroundTileGroups . clear ( ) ;
foregroundTileGroups . clear ( ) ;
currentLevel = map ;
currentLevel = map ;
WORLD_SIZE = { MAP_DATA [ map ] . MapData . width , MAP_DATA [ map ] . MapData . height } ;
levelTime = 0 ;
levelTime = 0 ;
bossName = " " ;
bossName = " " ;
encounterDuration = 0 ;
encounterDuration = 0 ;
@ -1204,8 +1204,8 @@ void Crawler::LoadLevel(MapName map){
# pragma region Foreground and Upper Foreground Tile Fade Group Setup
# pragma region Foreground and Upper Foreground Tile Fade Group Setup
std : : set < vi2d > foregroundTilesAdded , upperForegroundTilesAdded ;
std : : set < vi2d > foregroundTilesAdded , upperForegroundTilesAdded ;
for ( int x = 0 ; x < WORLD_SIZE . x ; x + + ) {
for ( int x = 0 ; x < GetCurrentMap ( ) . width ; x + + ) {
for ( int y = 0 ; y < WORLD_SIZE . y ; y + + ) {
for ( int y = 0 ; y < GetCurrentMap ( ) . height ; y + + ) {
int layerID = 0 ;
int layerID = 0 ;
for ( LayerTag & layer : MAP_DATA [ currentLevel ] . LayerData ) {
for ( LayerTag & layer : MAP_DATA [ currentLevel ] . LayerData ) {
int tileID = layer . tiles [ y ] [ x ] - 1 ;
int tileID = layer . tiles [ y ] [ x ] - 1 ;
@ -1225,9 +1225,9 @@ void Crawler::LoadLevel(MapName map){
foregroundTilesIncluded . insert ( { x , y } ) ;
foregroundTilesIncluded . insert ( { x , y } ) ;
group . InsertTile ( tile ) ;
group . InsertTile ( tile ) ;
if ( x > 0 & & foregroundTilesIncluded . find ( vi2d { x , y } + vi2d { - 1 , 0 } ) = = foregroundTilesIncluded . end ( ) ) tileGroupChecks . push ( { x - 1 , y } ) ;
if ( x > 0 & & foregroundTilesIncluded . find ( vi2d { x , y } + vi2d { - 1 , 0 } ) = = foregroundTilesIncluded . end ( ) ) tileGroupChecks . push ( { x - 1 , y } ) ;
if ( x < WORLD_SIZE . x - 1 & & foregroundTilesIncluded . find ( vi2d { x , y } + vi2d { 1 , 0 } ) = = foregroundTilesIncluded . end ( ) ) tileGroupChecks . push ( { x + 1 , y } ) ;
if ( x < GetCurrentMap ( ) . 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 > 0 & & foregroundTilesIncluded . find ( vi2d { x , y } + vi2d { 0 , - 1 } ) = = foregroundTilesIncluded . end ( ) ) tileGroupChecks . push ( { x , y - 1 } ) ;
if ( y < WORLD_SIZE . y - 1 & & foregroundTilesIncluded . find ( vi2d { x , y } + vi2d { 0 , 1 } ) = = foregroundTilesIncluded . end ( ) ) tileGroupChecks . push ( { x , y + 1 } ) ;
if ( y < GetCurrentMap ( ) . height - 1 & & foregroundTilesIncluded . find ( vi2d { x , y } + vi2d { 0 , 1 } ) = = foregroundTilesIncluded . end ( ) ) tileGroupChecks . push ( { x , y + 1 } ) ;
auto IterateThroughOtherLayers = [ & ] ( vi2d pos , bool loopAll = false ) {
auto IterateThroughOtherLayers = [ & ] ( vi2d pos , bool loopAll = false ) {
int layer2ID = 0 ;
int layer2ID = 0 ;
bool hadForeground = false ;
bool hadForeground = false ;
@ -1259,11 +1259,11 @@ void Crawler::LoadLevel(MapName map){
vi2d targetPos = pos + vi2d { - 1 , 0 } ;
vi2d targetPos = pos + vi2d { - 1 , 0 } ;
if ( pos . x > 0 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
if ( pos . x > 0 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
targetPos = pos + vi2d { 1 , 0 } ;
targetPos = pos + vi2d { 1 , 0 } ;
if ( pos . x < WORLD_SIZE . x - 1 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
if ( pos . x < GetCurrentMap ( ) . width - 1 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
targetPos = pos + vi2d { 0 , - 1 } ;
targetPos = pos + vi2d { 0 , - 1 } ;
if ( pos . y > 0 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
if ( pos . y > 0 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
targetPos = pos + vi2d { 0 , 1 } ;
targetPos = pos + vi2d { 0 , 1 } ;
if ( pos . y < WORLD_SIZE . y - 1 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
if ( pos . y < GetCurrentMap ( ) . height - 1 & & foregroundTilesIncluded . find ( targetPos ) = = foregroundTilesIncluded . end ( ) ) { tileGroupChecks . push ( targetPos ) ; foregroundTilesIncluded . insert ( targetPos ) ; }
}
}
tileGroupChecks . pop ( ) ;
tileGroupChecks . pop ( ) ;
}
}
@ -1312,10 +1312,6 @@ void Crawler::LoadLevel(MapName map){
pathfinder . Initialize ( ) ;
pathfinder . Initialize ( ) ;
}
}
vi2d Crawler : : GetWorldSize ( ) {
return WORLD_SIZE ;
}
bool Crawler : : IsUpperForegroundTile ( int tileID ) {
bool Crawler : : IsUpperForegroundTile ( int tileID ) {
return tileID > = 1000000 ;
return tileID > = 1000000 ;
}
}
@ -1356,7 +1352,7 @@ bool Crawler::IsBridgeLayer(LayerTag&layer){
}
}
geom2d : : rect < int > Crawler : : GetTileCollision ( MapName map , vf2d pos , bool upperLevel ) {
geom2d : : rect < int > Crawler : : GetTileCollision ( MapName map , vf2d pos , bool upperLevel ) {
if ( pos . x < 0 | | pos . y < 0 | | pos . x > = WORLD_SIZE . x * 24 | | pos . y > = WORLD_SIZE . y * 24 ) return NO_COLLISION ;
if ( pos . x < 0 | | pos . y < 0 | | pos . x > = GetCurrentMap ( ) . width * 24 | | pos . y > = GetCurrentMap ( ) . height * 24 ) return NO_COLLISION ;
# pragma region Lower Bridge Collision Check
# pragma region Lower Bridge Collision Check
if ( ! upperLevel ) { //We are looking for lower bridge collisions.
if ( ! upperLevel ) { //We are looking for lower bridge collisions.
for ( geom2d : : rect < int > & zone : MAP_DATA [ map ] . ZoneData [ " LowerBridgeCollision " ] ) {
for ( geom2d : : rect < int > & zone : MAP_DATA [ map ] . ZoneData [ " LowerBridgeCollision " ] ) {
@ -1738,4 +1734,8 @@ void Crawler::InitializeGraphics(){
std : : cout < < Menu : : themes . size ( ) < < " themes have been loaded. " < < std : : endl ;
std : : cout < < Menu : : themes . size ( ) < < " themes have been loaded. " < < std : : endl ;
GFX . SetInitialized ( ) ;
GFX . SetInitialized ( ) ;
std : : cout < < GFX . size ( ) < < " images have been loaded. " < < std : : endl ;
std : : cout < < GFX . size ( ) < < " images have been loaded. " < < std : : endl ;
}
MapTag Crawler : : GetCurrentMap ( ) {
return MAP_DATA [ GetCurrentLevel ( ) ] . MapData ;
}
}