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,
|
||||
WAITING_FOR_CUTSCENE_3,
|
||||
GAME_OVER,
|
||||
GAME_OVER_TERMINAL,
|
||||
COLLECTED_SILICON,
|
||||
CUTSCENE_4, //First rover repaired.
|
||||
CUTSCENE_4_DONE,
|
||||
@ -335,6 +336,7 @@ class Entity{
|
||||
public:
|
||||
bool ally=false;
|
||||
int hp;
|
||||
int startingHP;
|
||||
int maxhp;
|
||||
Decal*spr;
|
||||
float x;
|
||||
@ -354,7 +356,7 @@ class Entity{
|
||||
this->x=x;
|
||||
this->y=y;
|
||||
this->maxhp=hp;
|
||||
this->hp=hp;
|
||||
this->hp=this->startingHP=hp;
|
||||
this->maxhp=maxhp;
|
||||
this->moveSet=moveset;
|
||||
this->fixedTurnOrder=fixedMoveset;
|
||||
@ -978,6 +980,9 @@ public:
|
||||
fadeOut();
|
||||
}
|
||||
}break;
|
||||
case GAME_OVER_TERMINAL:{
|
||||
fadeOut();
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1131,6 +1136,7 @@ public:
|
||||
}
|
||||
if (GetKey(W).bPressed||GetKey(UP).bPressed||GetKey(NP8).bPressed) {
|
||||
PLAYER_SELECTED_TARGET=-1;
|
||||
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (1)\n";
|
||||
BATTLE_STATE=battle::PLAYER_SELECTION;
|
||||
}
|
||||
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed) {
|
||||
@ -1233,6 +1239,15 @@ public:
|
||||
PlayCutscene(cutscene::IN_BED);
|
||||
PLAYER_HP=PLAYER_MAXHP;
|
||||
}break;
|
||||
case GAME_OVER:{
|
||||
GAME_STATE=GAME_OVER_TERMINAL;
|
||||
fadeIn();
|
||||
}break;
|
||||
case GAME_OVER_TERMINAL:{
|
||||
LoadPreviousPlayerState();
|
||||
GAME_STATE=GAMEWORLD;
|
||||
fadeIn();
|
||||
}break;
|
||||
}
|
||||
switch (CURRENT_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++) {
|
||||
Encounter enc = ENCOUNTERS[i];
|
||||
if (enc.map==CURRENT_MAP&&collidesWithPlayer(enc)) {
|
||||
@ -1668,6 +1683,7 @@ public:
|
||||
DisplayMessageBox(22);
|
||||
break;
|
||||
}
|
||||
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (2)\n";
|
||||
BATTLE_STATE = battle::PLAYER_SELECTION;
|
||||
clearPixelEffect();
|
||||
EFFECT_TIMER = 0;
|
||||
@ -1915,37 +1931,38 @@ public:
|
||||
if (allDead) {
|
||||
IN_BATTLE_ENCOUNTER=false;
|
||||
ENCOUNTERS.erase(ENCOUNTERS.begin()+CURRENT_ENCOUNTER_IND);
|
||||
BATTLE_CARD_SELECTION_IND=0;
|
||||
PLAYER_SELECTED_TARGET=-1;
|
||||
BATTLE_STATE=battle::NONE;
|
||||
resetBattleState();
|
||||
PLAYER_COORDS[0]=BATTLE_PLAYER_COORDS.x;
|
||||
PLAYER_COORDS[1]=BATTLE_PLAYER_COORDS.y;
|
||||
clearSeeds();
|
||||
clearTrees();
|
||||
performCropUpdate(8);
|
||||
if (FOOD_REGEN_TURNS>0) {
|
||||
FOOD_REGEN_TURNS=0;
|
||||
foodCount++;
|
||||
}
|
||||
} else {
|
||||
if (PLAYER_HP<=0) {
|
||||
GameOver();
|
||||
break;
|
||||
}
|
||||
if (!GAME_FLAGS[gameflag::ANALYSIS_X_X]&&GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]) {
|
||||
GAME_FLAGS[gameflag::ANALYSIS_X_X]=true;
|
||||
DisplayMessageBox(23);
|
||||
break;
|
||||
}
|
||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||
BATTLE_DROUGHT_ACTIVE=false;
|
||||
std::cout<<"Drought turned off.\n";
|
||||
}
|
||||
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (3)\n";
|
||||
BATTLE_STATE=battle::PLAYER_SELECTION;
|
||||
PLAYER_SELECTED_TARGET=-1;
|
||||
}
|
||||
} else {
|
||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||
BATTLE_DROUGHT_ACTIVE=false;
|
||||
std::cout<<"Drought turned off.\n";
|
||||
}
|
||||
BATTLE_CURRENT_TURN_ENTITY=turnOrder.front();
|
||||
turnOrder.pop();
|
||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||
if (PLAYER_HP<=0) {
|
||||
GAME_STATE=GAME_OVER;
|
||||
GameOver();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@ -2253,18 +2270,8 @@ public:
|
||||
switch (GAME_STATE) {
|
||||
case CUTSCENE_1:
|
||||
case CUTSCENE_3:
|
||||
case CUTSCENE_4:{
|
||||
switch (GAME_STATE) {
|
||||
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;
|
||||
}
|
||||
case CUTSCENE_4:
|
||||
case GAME_OVER_TERMINAL:{
|
||||
if (GAME_STATE==CUTSCENE_3&&frameCount%4!=0) {break;}
|
||||
if (textInd<CONSOLE_REF_TEXT.length()) {
|
||||
char c = CONSOLE_REF_TEXT[textInd++];
|
||||
@ -2409,15 +2416,17 @@ public:
|
||||
if(WALK_STEPS++>60&&!IN_BATTLE_ENCOUNTER) {
|
||||
PLAYER_HP=std::clamp(PLAYER_HP+1,0,PLAYER_MAXHP);
|
||||
updatePlayerState();
|
||||
WALK_STEPS=0;
|
||||
}
|
||||
}
|
||||
|
||||
void drawGame(){
|
||||
switch (GAME_STATE) {
|
||||
case CUTSCENE_1:
|
||||
case CUTSCENE_4:{
|
||||
case CUTSCENE_4:
|
||||
case GAME_OVER_TERMINAL:{
|
||||
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);
|
||||
} 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));
|
||||
@ -2917,7 +2926,7 @@ public:
|
||||
}
|
||||
|
||||
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) {
|
||||
@ -3357,6 +3366,41 @@ public:
|
||||
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.)";
|
||||
|
||||
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"(
|
||||
???
|
||||
RAIN CYCLE COMMENCING)", //0
|
||||
|
Loading…
x
Reference in New Issue
Block a user