|
|
|
@ -9,11 +9,18 @@ enum GAMESTATE{ |
|
|
|
|
GAMEWORLD |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
enum TILES{ |
|
|
|
|
DIRT, |
|
|
|
|
GRASS, |
|
|
|
|
WATER |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#define WIDTH 256 |
|
|
|
|
#define HEIGHT 224 |
|
|
|
|
#define ALPHA_SCREEN1 128 |
|
|
|
|
#define ALPHA_SCREEN2 20 |
|
|
|
|
#define FADE_SPD 6 |
|
|
|
|
#define MOVE_SPD 0.01 |
|
|
|
|
|
|
|
|
|
class SeasonsOfLoneliness : public olc::PixelGameEngine |
|
|
|
|
{ |
|
|
|
@ -24,7 +31,7 @@ public: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
GAMESTATE GAME_STATE=CUTSCENE_1; |
|
|
|
|
GAMESTATE GAME_STATE=GAMEWORLD; |
|
|
|
|
int textInd=0; |
|
|
|
|
int cursorX=0; |
|
|
|
|
int transitionTime=0; |
|
|
|
@ -37,6 +44,8 @@ public: |
|
|
|
|
int**MAP=NULL; |
|
|
|
|
int MAP_WIDTH=-1; |
|
|
|
|
int MAP_HEIGHT=-1; |
|
|
|
|
olc::Decal*TILES; |
|
|
|
|
float PLAYER_COORDS[2] = {}; |
|
|
|
|
|
|
|
|
|
void LoadMap(char*mapName) { |
|
|
|
|
std::ifstream f("assets/maps/map1"); |
|
|
|
@ -71,6 +80,7 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
printf("Loaded %dx%d map:\n",MAP_WIDTH,MAP_HEIGHT); |
|
|
|
|
for (int y=0;y<MAP_HEIGHT;y++) { |
|
|
|
|
for (int x=0;x<MAP_WIDTH;x++) { |
|
|
|
|
printf("%d",MAP[y][x]); |
|
|
|
@ -84,6 +94,7 @@ public: |
|
|
|
|
SetPixelMode(olc::Pixel::ALPHA); |
|
|
|
|
//ConsoleCaptureStdOut(true);
|
|
|
|
|
// Called once at the start, so create things here
|
|
|
|
|
TILES=new olc::Decal(new olc::Sprite("assets/tiles.png")); |
|
|
|
|
LoadMap("map1"); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
@ -106,6 +117,19 @@ public: |
|
|
|
|
updateGame(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (GetKey(olc::D).bHeld||GetKey(olc::RIGHT).bHeld) { |
|
|
|
|
PLAYER_COORDS[0]=clamp(PLAYER_COORDS[0]+MOVE_SPD,0.0,(double)MAP_WIDTH); |
|
|
|
|
} |
|
|
|
|
if (GetKey(olc::A).bHeld||GetKey(olc::LEFT).bHeld) { |
|
|
|
|
PLAYER_COORDS[0]=clamp(PLAYER_COORDS[0]-MOVE_SPD,0.0,(double)MAP_WIDTH); |
|
|
|
|
} |
|
|
|
|
if (GetKey(olc::W).bHeld||GetKey(olc::UP).bHeld) { |
|
|
|
|
PLAYER_COORDS[1]=clamp(PLAYER_COORDS[1]-MOVE_SPD,0.0,(double)MAP_HEIGHT); |
|
|
|
|
} |
|
|
|
|
if (GetKey(olc::S).bHeld||GetKey(olc::DOWN).bHeld) { |
|
|
|
|
PLAYER_COORDS[1]=clamp(PLAYER_COORDS[1]+MOVE_SPD,0.0,(double)MAP_HEIGHT); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
drawGame(); |
|
|
|
|
// called once per frame
|
|
|
|
|
return true; |
|
|
|
@ -115,6 +139,9 @@ public: |
|
|
|
|
switch (GAME_STATE) { |
|
|
|
|
case CUTSCENE_1:{ |
|
|
|
|
GAME_STATE=GAMEWORLD; |
|
|
|
|
PLAYER_COORDS[0]=21; |
|
|
|
|
PLAYER_COORDS[1]=17; |
|
|
|
|
fadeIn(); |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -180,6 +207,17 @@ public: |
|
|
|
|
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2}); |
|
|
|
|
GradientFillRectDecal({WIDTH/2,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1}); |
|
|
|
|
}break; |
|
|
|
|
case GAMEWORLD:{ |
|
|
|
|
for (int y=-1;y<=HEIGHT/32;y++) { |
|
|
|
|
for (int x=-1;x<=WIDTH/32;x++) { |
|
|
|
|
float xOffset=PLAYER_COORDS[0]-(WIDTH/64); |
|
|
|
|
float yOffset=PLAYER_COORDS[1]-(HEIGHT/64); |
|
|
|
|
if (xOffset+x>=0&&xOffset+x<MAP_WIDTH&&yOffset+y>=0&&yOffset+y<MAP_HEIGHT) { |
|
|
|
|
DrawPartialDecal({(x-(PLAYER_COORDS[0]-(int)PLAYER_COORDS[0]))*32,(y-(PLAYER_COORDS[1]-(int)PLAYER_COORDS[1]))*32},{32,32},TILES,{0,0},{32,32}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
FillRectDecal({0,0},{WIDTH,HEIGHT},olc::Pixel(0,0,0,transparency)); |
|
|
|
|
} |
|
|
|
|