|
|
@ -4,19 +4,21 @@ |
|
|
|
#define OLC_PGEX_SPLASHSCREEN |
|
|
|
#define OLC_PGEX_SPLASHSCREEN |
|
|
|
#include "splash.h" |
|
|
|
#include "splash.h" |
|
|
|
#include <queue> |
|
|
|
#include <queue> |
|
|
|
|
|
|
|
#define OLC_SOUNDWAVE |
|
|
|
|
|
|
|
#include "soundwaveEngine.h" |
|
|
|
|
|
|
|
|
|
|
|
using namespace olc; |
|
|
|
using namespace olc; |
|
|
|
|
|
|
|
|
|
|
|
//#define TEST_MAP1 //Toggle to just play around on map 1.
|
|
|
|
//#define TEST_MAP1 //Toggle to just play around on map 1.
|
|
|
|
//#define TEST_MAP2 //Toggle on to just play around on map 2.
|
|
|
|
//#define TEST_MAP2 //Toggle on to just play around on map 2.
|
|
|
|
|
|
|
|
|
|
|
|
#define SKIP_INTRO true |
|
|
|
#define SKIP_INTRO false |
|
|
|
#define SKIP_CHAPTER1 true |
|
|
|
#define SKIP_CHAPTER1 false |
|
|
|
#define SKIP_CHAPTER2 false |
|
|
|
#define SKIP_CHAPTER2 false |
|
|
|
#define SKIP_CHAPTER3 false |
|
|
|
#define SKIP_CHAPTER3 false |
|
|
|
|
|
|
|
|
|
|
|
#define STARTING_MAP "assets/maps/map1" |
|
|
|
#define STARTING_MAP "assets/maps/map1" |
|
|
|
#define STARTING_STATE CUTSCENE_1 |
|
|
|
#define STARTING_STATE CUTSCENE_3 |
|
|
|
#define MOVE_SPD 0.075 |
|
|
|
#define MOVE_SPD 0.075 |
|
|
|
#define PLAYER_X 14 |
|
|
|
#define PLAYER_X 14 |
|
|
|
#define PLAYER_Y 4 |
|
|
|
#define PLAYER_Y 4 |
|
|
@ -368,6 +370,7 @@ public: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
|
public: |
|
|
|
|
|
|
|
sound::WaveEngine engine; |
|
|
|
GAMESTATE GAME_STATE=STARTING_STATE; |
|
|
|
GAMESTATE GAME_STATE=STARTING_STATE; |
|
|
|
int textInd=0; |
|
|
|
int textInd=0; |
|
|
|
int cursorX=0; |
|
|
|
int cursorX=0; |
|
|
@ -503,6 +506,7 @@ public: |
|
|
|
Zone*ACTIVE_ZONE=nullptr; |
|
|
|
Zone*ACTIVE_ZONE=nullptr; |
|
|
|
std::vector<vi2d>REPAIRED_ROVERS; |
|
|
|
std::vector<vi2d>REPAIRED_ROVERS; |
|
|
|
std::string CONSOLE_REF_TEXT; |
|
|
|
std::string CONSOLE_REF_TEXT; |
|
|
|
|
|
|
|
bool SOUND_IS_PLAYING=false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL, |
|
|
|
Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL, |
|
|
@ -521,6 +525,9 @@ public: |
|
|
|
std::vector<WEATHER_POWER*>MOVESET_X_X; |
|
|
|
std::vector<WEATHER_POWER*>MOVESET_X_X; |
|
|
|
std::vector<WEATHER_POWER*>MOVESET_XMINION; |
|
|
|
std::vector<WEATHER_POWER*>MOVESET_XMINION; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sound::Wave SONG_MAIN; |
|
|
|
|
|
|
|
|
|
|
|
std::queue<int> turnOrder; |
|
|
|
std::queue<int> turnOrder; |
|
|
|
|
|
|
|
|
|
|
|
#define MAX_PIXELS 500 |
|
|
|
#define MAX_PIXELS 500 |
|
|
@ -530,6 +537,7 @@ public: |
|
|
|
{ |
|
|
|
{ |
|
|
|
SetPixelMode(Pixel::ALPHA); |
|
|
|
SetPixelMode(Pixel::ALPHA); |
|
|
|
ConsoleCaptureStdOut(true); |
|
|
|
ConsoleCaptureStdOut(true); |
|
|
|
|
|
|
|
engine.InitialiseAudio(); |
|
|
|
|
|
|
|
|
|
|
|
#define LAYERS 3 //How many layers exist.
|
|
|
|
#define LAYERS 3 //How many layers exist.
|
|
|
|
for (int i=1;i<LAYERS;i++) { |
|
|
|
for (int i=1;i<LAYERS;i++) { |
|
|
@ -554,6 +562,9 @@ public: |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SONG_MAIN = sound::Wave("./assets/SeasonsOfLoneliness.wav"); |
|
|
|
|
|
|
|
|
|
|
|
//ConsoleShow(F1,false);
|
|
|
|
//ConsoleShow(F1,false);
|
|
|
|
// Called once at the start, so create things here
|
|
|
|
// Called once at the start, so create things here
|
|
|
|
TILES=new Decal(new Sprite("assets/tiles.png")); |
|
|
|
TILES=new Decal(new Sprite("assets/tiles.png")); |
|
|
@ -1208,7 +1219,7 @@ public: |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
HAILSTORM->playerOwnCount+=amountGained; |
|
|
|
HAILSTORM->playerOwnCount+=amountGained; |
|
|
|
std::cout<<"Increased HAILSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
std::cout<<"Increased HAILSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
performCropUpdate(8); |
|
|
|
performCropUpdate(8); |
|
|
@ -1218,7 +1229,7 @@ public: |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
HURRICANE->playerOwnCount+=amountGained; |
|
|
|
HURRICANE->playerOwnCount+=amountGained; |
|
|
|
std::cout<<"Increased HURRICANE power inventory count by "<<amountGained<<".\n"; |
|
|
|
std::cout<<"Increased HURRICANE power inventory count by "<<amountGained<<".\n"; |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
performCropUpdate(8); |
|
|
|
performCropUpdate(8); |
|
|
@ -1228,7 +1239,7 @@ public: |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
METEOR_RAIN->playerOwnCount+=amountGained; |
|
|
|
METEOR_RAIN->playerOwnCount+=amountGained; |
|
|
|
std::cout<<"Increased METEORSHOWER power inventory count by "<<amountGained<<".\n"; |
|
|
|
std::cout<<"Increased METEORSHOWER power inventory count by "<<amountGained<<".\n"; |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
performCropUpdate(8); |
|
|
|
performCropUpdate(8); |
|
|
@ -1238,7 +1249,7 @@ public: |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
METEOR_STORM->playerOwnCount+=amountGained; |
|
|
|
METEOR_STORM->playerOwnCount+=amountGained; |
|
|
|
std::cout<<"Increased METEORSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
std::cout<<"Increased METEORSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
performCropUpdate(8); |
|
|
|
performCropUpdate(8); |
|
|
@ -1248,7 +1259,7 @@ public: |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
SNOWSTORM->playerOwnCount+=amountGained; |
|
|
|
SNOWSTORM->playerOwnCount+=amountGained; |
|
|
|
std::cout<<"Increased SNOWSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
std::cout<<"Increased SNOWSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
performCropUpdate(8); |
|
|
|
performCropUpdate(8); |
|
|
@ -1258,7 +1269,7 @@ public: |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
int amountGained=rand()%4+2; |
|
|
|
PETAL_STORM->playerOwnCount+=amountGained; |
|
|
|
PETAL_STORM->playerOwnCount+=amountGained; |
|
|
|
std::cout<<"Increased PETALSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
std::cout<<"Increased PETALSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
performCropUpdate(8); |
|
|
|
performCropUpdate(8); |
|
|
@ -1267,7 +1278,7 @@ public: |
|
|
|
if (obj->name.compare("SILICON_PIECE")==0&&collidesWithPlayer(obj)) { |
|
|
|
if (obj->name.compare("SILICON_PIECE")==0&&collidesWithPlayer(obj)) { |
|
|
|
GAME_STATE=COLLECTED_SILICON; |
|
|
|
GAME_STATE=COLLECTED_SILICON; |
|
|
|
DisplayMessageBox(14); |
|
|
|
DisplayMessageBox(14); |
|
|
|
COLLECTED_ITEMS.push_back({obj->x,obj->y}); |
|
|
|
COLLECTED_ITEMS.push_back({(int)obj->x,(int)obj->y}); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
delete obj; |
|
|
|
delete obj; |
|
|
|
} else |
|
|
|
} else |
|
|
@ -1694,6 +1705,12 @@ public: |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (GAME_STATE==CUTSCENE_3&&!SOUND_IS_PLAYING) { |
|
|
|
|
|
|
|
engine.SetOutputVolume(1); |
|
|
|
|
|
|
|
engine.PlayWaveform(&SONG_MAIN,true); |
|
|
|
|
|
|
|
SOUND_IS_PLAYING=true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
switch (GAME_STATE) { |
|
|
|
switch (GAME_STATE) { |
|
|
|
case CUTSCENE_1: |
|
|
|
case CUTSCENE_1: |
|
|
|
case CUTSCENE_3: |
|
|
|
case CUTSCENE_3: |
|
|
@ -1877,6 +1894,10 @@ public: |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
FillRectDecal({(float)(48+(cursorX)*16%(WIDTH-32)),(float)(GetTextSize(CUTSCENE_CONSOLE_TEXT).y*2+((cursorX==28)?16:0))},{4*2,8*2},Pixel(100, 10, 255,(0.5*sin(frameCount*4/60.0)+0.5)*256)); |
|
|
|
FillRectDecal({(float)(48+(cursorX)*16%(WIDTH-32)),(float)(GetTextSize(CUTSCENE_CONSOLE_TEXT).y*2+((cursorX==28)?16:0))},{4*2,8*2},Pixel(100, 10, 255,(0.5*sin(frameCount*4/60.0)+0.5)*256)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
DrawStringDecal({(float)(WIDTH/2-GetTextSize("NEW GAME").x*2/2),(float)(HEIGHT/2-GetTextSize("NEW GAME").y*2)},"NEW GAME",WHITE,{2,2}); |
|
|
|
|
|
|
|
DrawStringDecal({(float)(WIDTH/2-GetTextSize("CONTINUE").x*2/2),(float)(HEIGHT/2-GetTextSize("CONTINUE").y*2+32)},"CONTINUE",WHITE,{2,2}); |
|
|
|
|
|
|
|
DrawStringDecal({(float)(WIDTH/2-GetTextSize("MUTE SOUND").x*2/2),(float)(HEIGHT/2-GetTextSize("MUTE SOUND").y*2+64)},"MUTE SOUND",WHITE,{2,2}); |
|
|
|
|
|
|
|
DrawStringDecal({(float)(WIDTH/2-GetTextSize("EXIT").x*2/2),(float)(HEIGHT/2-GetTextSize("EXIT").y*2+96)},"EXIT",WHITE,{2,2}); |
|
|
|
GradientFillRectDecal({0,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
GradientFillRectDecal({0,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
GradientFillRectDecal({WIDTH/2,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
GradientFillRectDecal({WIDTH/2,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2}); |
|
|
|
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2}); |
|
|
@ -1884,7 +1905,7 @@ public: |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
case LATER_THAT_NIGHTFADEIN: |
|
|
|
case LATER_THAT_NIGHTFADEIN: |
|
|
|
case LATER_THAT_NIGHTFADEOUT:{ |
|
|
|
case LATER_THAT_NIGHTFADEOUT:{ |
|
|
|
DrawDecal({WIDTH/2-LATER_THAT_NIGHT_DECAL->sprite->width/2,HEIGHT/2-LATER_THAT_NIGHT_DECAL->sprite->height/2},LATER_THAT_NIGHT_DECAL); |
|
|
|
DrawDecal({(float)(WIDTH/2-LATER_THAT_NIGHT_DECAL->sprite->width/2),(float)(HEIGHT/2-LATER_THAT_NIGHT_DECAL->sprite->height/2)},LATER_THAT_NIGHT_DECAL); |
|
|
|
}break; |
|
|
|
}break; |
|
|
|
} |
|
|
|
} |
|
|
|
switch (BATTLE_STATE) { |
|
|
|
switch (BATTLE_STATE) { |
|
|
|