generated from sigonasr2/CPlusPlusProjectTemplate
Game over and state reloading
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
2095d32d8f
commit
3f73e7547d
@ -46,6 +46,7 @@ enum GAMESTATE{
|
|||||||
GAMEWORLD,
|
GAMEWORLD,
|
||||||
WAITING_FOR_CUTSCENE_3,
|
WAITING_FOR_CUTSCENE_3,
|
||||||
GAME_OVER,
|
GAME_OVER,
|
||||||
|
GAME_OVER_TERMINAL,
|
||||||
COLLECTED_SILICON,
|
COLLECTED_SILICON,
|
||||||
CUTSCENE_4, //First rover repaired.
|
CUTSCENE_4, //First rover repaired.
|
||||||
CUTSCENE_4_DONE,
|
CUTSCENE_4_DONE,
|
||||||
@ -335,6 +336,7 @@ class Entity{
|
|||||||
public:
|
public:
|
||||||
bool ally=false;
|
bool ally=false;
|
||||||
int hp;
|
int hp;
|
||||||
|
int startingHP;
|
||||||
int maxhp;
|
int maxhp;
|
||||||
Decal*spr;
|
Decal*spr;
|
||||||
float x;
|
float x;
|
||||||
@ -354,7 +356,7 @@ class Entity{
|
|||||||
this->x=x;
|
this->x=x;
|
||||||
this->y=y;
|
this->y=y;
|
||||||
this->maxhp=hp;
|
this->maxhp=hp;
|
||||||
this->hp=hp;
|
this->hp=this->startingHP=hp;
|
||||||
this->maxhp=maxhp;
|
this->maxhp=maxhp;
|
||||||
this->moveSet=moveset;
|
this->moveSet=moveset;
|
||||||
this->fixedTurnOrder=fixedMoveset;
|
this->fixedTurnOrder=fixedMoveset;
|
||||||
@ -978,6 +980,9 @@ public:
|
|||||||
fadeOut();
|
fadeOut();
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
case GAME_OVER_TERMINAL:{
|
||||||
|
fadeOut();
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1131,6 +1136,7 @@ public:
|
|||||||
}
|
}
|
||||||
if (GetKey(W).bPressed||GetKey(UP).bPressed||GetKey(NP8).bPressed) {
|
if (GetKey(W).bPressed||GetKey(UP).bPressed||GetKey(NP8).bPressed) {
|
||||||
PLAYER_SELECTED_TARGET=-1;
|
PLAYER_SELECTED_TARGET=-1;
|
||||||
|
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (1)\n";
|
||||||
BATTLE_STATE=battle::PLAYER_SELECTION;
|
BATTLE_STATE=battle::PLAYER_SELECTION;
|
||||||
}
|
}
|
||||||
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed) {
|
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed) {
|
||||||
@ -1233,6 +1239,15 @@ public:
|
|||||||
PlayCutscene(cutscene::IN_BED);
|
PlayCutscene(cutscene::IN_BED);
|
||||||
PLAYER_HP=PLAYER_MAXHP;
|
PLAYER_HP=PLAYER_MAXHP;
|
||||||
}break;
|
}break;
|
||||||
|
case GAME_OVER:{
|
||||||
|
GAME_STATE=GAME_OVER_TERMINAL;
|
||||||
|
fadeIn();
|
||||||
|
}break;
|
||||||
|
case GAME_OVER_TERMINAL:{
|
||||||
|
LoadPreviousPlayerState();
|
||||||
|
GAME_STATE=GAMEWORLD;
|
||||||
|
fadeIn();
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
switch (CURRENT_CUTSCENE) {
|
switch (CURRENT_CUTSCENE) {
|
||||||
case cutscene::TRANSITION_CUTSCENE:{
|
case cutscene::TRANSITION_CUTSCENE:{
|
||||||
@ -1615,7 +1630,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IN_BATTLE_ENCOUNTER) {
|
if (!IN_BATTLE_ENCOUNTER&&playerCanMove()) {
|
||||||
for (int i=0;i<ENCOUNTERS.size();i++) {
|
for (int i=0;i<ENCOUNTERS.size();i++) {
|
||||||
Encounter enc = ENCOUNTERS[i];
|
Encounter enc = ENCOUNTERS[i];
|
||||||
if (enc.map==CURRENT_MAP&&collidesWithPlayer(enc)) {
|
if (enc.map==CURRENT_MAP&&collidesWithPlayer(enc)) {
|
||||||
@ -1668,6 +1683,7 @@ public:
|
|||||||
DisplayMessageBox(22);
|
DisplayMessageBox(22);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (2)\n";
|
||||||
BATTLE_STATE = battle::PLAYER_SELECTION;
|
BATTLE_STATE = battle::PLAYER_SELECTION;
|
||||||
clearPixelEffect();
|
clearPixelEffect();
|
||||||
EFFECT_TIMER = 0;
|
EFFECT_TIMER = 0;
|
||||||
@ -1915,37 +1931,38 @@ public:
|
|||||||
if (allDead) {
|
if (allDead) {
|
||||||
IN_BATTLE_ENCOUNTER=false;
|
IN_BATTLE_ENCOUNTER=false;
|
||||||
ENCOUNTERS.erase(ENCOUNTERS.begin()+CURRENT_ENCOUNTER_IND);
|
ENCOUNTERS.erase(ENCOUNTERS.begin()+CURRENT_ENCOUNTER_IND);
|
||||||
BATTLE_CARD_SELECTION_IND=0;
|
resetBattleState();
|
||||||
PLAYER_SELECTED_TARGET=-1;
|
|
||||||
BATTLE_STATE=battle::NONE;
|
|
||||||
PLAYER_COORDS[0]=BATTLE_PLAYER_COORDS.x;
|
PLAYER_COORDS[0]=BATTLE_PLAYER_COORDS.x;
|
||||||
PLAYER_COORDS[1]=BATTLE_PLAYER_COORDS.y;
|
PLAYER_COORDS[1]=BATTLE_PLAYER_COORDS.y;
|
||||||
clearSeeds();
|
|
||||||
clearTrees();
|
|
||||||
performCropUpdate(8);
|
performCropUpdate(8);
|
||||||
if (FOOD_REGEN_TURNS>0) {
|
if (FOOD_REGEN_TURNS>0) {
|
||||||
FOOD_REGEN_TURNS=0;
|
FOOD_REGEN_TURNS=0;
|
||||||
foodCount++;
|
foodCount++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (PLAYER_HP<=0) {
|
||||||
|
GameOver();
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (!GAME_FLAGS[gameflag::ANALYSIS_X_X]&&GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]) {
|
if (!GAME_FLAGS[gameflag::ANALYSIS_X_X]&&GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]) {
|
||||||
GAME_FLAGS[gameflag::ANALYSIS_X_X]=true;
|
GAME_FLAGS[gameflag::ANALYSIS_X_X]=true;
|
||||||
DisplayMessageBox(23);
|
DisplayMessageBox(23);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (3)\n";
|
||||||
BATTLE_DROUGHT_ACTIVE=false;
|
|
||||||
std::cout<<"Drought turned off.\n";
|
|
||||||
}
|
|
||||||
BATTLE_STATE=battle::PLAYER_SELECTION;
|
BATTLE_STATE=battle::PLAYER_SELECTION;
|
||||||
PLAYER_SELECTED_TARGET=-1;
|
PLAYER_SELECTED_TARGET=-1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||||
|
BATTLE_DROUGHT_ACTIVE=false;
|
||||||
|
std::cout<<"Drought turned off.\n";
|
||||||
|
}
|
||||||
BATTLE_CURRENT_TURN_ENTITY=turnOrder.front();
|
BATTLE_CURRENT_TURN_ENTITY=turnOrder.front();
|
||||||
turnOrder.pop();
|
turnOrder.pop();
|
||||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||||
if (PLAYER_HP<=0) {
|
if (PLAYER_HP<=0) {
|
||||||
GAME_STATE=GAME_OVER;
|
GameOver();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -2253,18 +2270,8 @@ public:
|
|||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
case CUTSCENE_1:
|
case CUTSCENE_1:
|
||||||
case CUTSCENE_3:
|
case CUTSCENE_3:
|
||||||
case CUTSCENE_4:{
|
case CUTSCENE_4:
|
||||||
switch (GAME_STATE) {
|
case GAME_OVER_TERMINAL:{
|
||||||
case CUTSCENE_1:{
|
|
||||||
CONSOLE_REF_TEXT=STORY_TEXT1;
|
|
||||||
}break;
|
|
||||||
case CUTSCENE_3:{
|
|
||||||
CONSOLE_REF_TEXT=STORY_TEXT2;
|
|
||||||
}break;
|
|
||||||
case CUTSCENE_4:{
|
|
||||||
CONSOLE_REF_TEXT=STORY_TEXT3;
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
if (GAME_STATE==CUTSCENE_3&&frameCount%4!=0) {break;}
|
if (GAME_STATE==CUTSCENE_3&&frameCount%4!=0) {break;}
|
||||||
if (textInd<CONSOLE_REF_TEXT.length()) {
|
if (textInd<CONSOLE_REF_TEXT.length()) {
|
||||||
char c = CONSOLE_REF_TEXT[textInd++];
|
char c = CONSOLE_REF_TEXT[textInd++];
|
||||||
@ -2409,15 +2416,17 @@ public:
|
|||||||
if(WALK_STEPS++>60&&!IN_BATTLE_ENCOUNTER) {
|
if(WALK_STEPS++>60&&!IN_BATTLE_ENCOUNTER) {
|
||||||
PLAYER_HP=std::clamp(PLAYER_HP+1,0,PLAYER_MAXHP);
|
PLAYER_HP=std::clamp(PLAYER_HP+1,0,PLAYER_MAXHP);
|
||||||
updatePlayerState();
|
updatePlayerState();
|
||||||
|
WALK_STEPS=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawGame(){
|
void drawGame(){
|
||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
case CUTSCENE_1:
|
case CUTSCENE_1:
|
||||||
case CUTSCENE_4:{
|
case CUTSCENE_4:
|
||||||
|
case GAME_OVER_TERMINAL:{
|
||||||
DrawStringDecal({16,16},CUTSCENE_CONSOLE_TEXT,GREEN,{1,1});
|
DrawStringDecal({16,16},CUTSCENE_CONSOLE_TEXT,GREEN,{1,1});
|
||||||
if (textInd<STORY_TEXT1.length()) {
|
if (textInd<CONSOLE_REF_TEXT.length()) {
|
||||||
FillRectDecal({(float)(16+(cursorX)*8%(WIDTH-32)),(float)(8+GetTextSize(CUTSCENE_CONSOLE_TEXT).y+((cursorX==28)?8:0))},{4,8},GREEN);
|
FillRectDecal({(float)(16+(cursorX)*8%(WIDTH-32)),(float)(8+GetTextSize(CUTSCENE_CONSOLE_TEXT).y+((cursorX==28)?8:0))},{4,8},GREEN);
|
||||||
} else {
|
} else {
|
||||||
FillRectDecal({(float)(16+(cursorX)*8%(WIDTH-32)),(float)(8+GetTextSize(CUTSCENE_CONSOLE_TEXT).y+((cursorX==28)?8:0))},{4,8},Pixel(0,255,0,(0.5*sin(frameCount*4/60.0)+0.5)*256));
|
FillRectDecal({(float)(16+(cursorX)*8%(WIDTH-32)),(float)(8+GetTextSize(CUTSCENE_CONSOLE_TEXT).y+((cursorX==28)?8:0))},{4,8},Pixel(0,255,0,(0.5*sin(frameCount*4/60.0)+0.5)*256));
|
||||||
@ -2917,7 +2926,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool playerCanMove() {
|
bool playerCanMove() {
|
||||||
return GAME_STATE==GAMEWORLD&&CURRENT_CUTSCENE==cutscene::NONE&&!messageBoxVisible&&!IN_BATTLE_ENCOUNTER;
|
return PLAYER_HP>0&&GAME_STATE==GAMEWORLD&&CURRENT_CUTSCENE==cutscene::NONE&&!messageBoxVisible&&!IN_BATTLE_ENCOUNTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawCard(WEATHER_POWER*data,vf2d offset={0,0},vf2d scale={1,1},float darknessFactor=1.0) {
|
void DrawCard(WEATHER_POWER*data,vf2d offset={0,0},vf2d scale={1,1},float darknessFactor=1.0) {
|
||||||
@ -3357,6 +3366,41 @@ public:
|
|||||||
PREV_PLAYERSTATE->weatherPowerCounts[i]=WEATHER_POWERS[i]->playerOwnCount;
|
PREV_PLAYERSTATE->weatherPowerCounts[i]=WEATHER_POWERS[i]->playerOwnCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoadPreviousPlayerState() {
|
||||||
|
PLAYER_COORDS[0]=PREV_PLAYERSTATE->x;
|
||||||
|
PLAYER_COORDS[1]=PREV_PLAYERSTATE->y;
|
||||||
|
foodCount=PREV_PLAYERSTATE->foodCount;
|
||||||
|
PLAYER_HP=PREV_PLAYERSTATE->playerHP;
|
||||||
|
PLAYER_MAXHP=PREV_PLAYERSTATE->playerMaxHP;
|
||||||
|
for (int i=0;i<WEATHER_POWER_COUNT;i++) {
|
||||||
|
WEATHER_POWERS[i]->playerOwnCount=PREV_PLAYERSTATE->weatherPowerCounts[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetBattleState(){
|
||||||
|
IN_BATTLE_ENCOUNTER=false;
|
||||||
|
BATTLE_CARD_SELECTION_IND=0;
|
||||||
|
PLAYER_SELECTED_TARGET=-1;
|
||||||
|
BATTLE_STATE=battle::NONE;
|
||||||
|
std::cout<<"Battle State set to "<<BATTLE_STATE<<"\n";
|
||||||
|
BATTLE_DROUGHT_ACTIVE=false;
|
||||||
|
clearSeeds();
|
||||||
|
clearTrees();
|
||||||
|
while (!turnOrder.empty()) {
|
||||||
|
turnOrder.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameOver() {
|
||||||
|
GAME_STATE=GAME_OVER;
|
||||||
|
ResetTerminal(STORY_TEXT4+PLAYER_NAME+STORY_TEXT5);
|
||||||
|
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
|
||||||
|
CURRENT_ENCOUNTER.entities[i]->hp=CURRENT_ENCOUNTER.entities[i]->startingHP;
|
||||||
|
}
|
||||||
|
resetBattleState();
|
||||||
|
fadeOut();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
5
data.h
5
data.h
@ -28,6 +28,11 @@ GPSNAV-35 - UNABLE TO LOCATE
|
|||||||
|
|
||||||
Press any key to continue.)";
|
Press any key to continue.)";
|
||||||
|
|
||||||
|
std::string STORY_TEXT4=R"(Unable to hang on, )";
|
||||||
|
std::string STORY_TEXT5=R"( lets out their last breath before collapsing for eternity...?
|
||||||
|
|
||||||
|
Press any key to continue.)";
|
||||||
|
|
||||||
std::string STORY_DIALOG[]={R"(
|
std::string STORY_DIALOG[]={R"(
|
||||||
???
|
???
|
||||||
RAIN CYCLE COMMENCING)", //0
|
RAIN CYCLE COMMENCING)", //0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user