Handle logic for setting up turns.

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 4da99d3a97
commit 4bedc95bcb
  1. 75
      SeasonsOfLoneliness.cpp
  2. BIN
      Seasons_of_Loneliness

@ -123,13 +123,17 @@ class Entity{
int y;
std::string name;
WEATHER_POWER*selectedMove;
Entity(Decal*spr,std::string name,int x,int y,int hp,int maxhp,bool isAlly=false) {
std::vector<WEATHER_POWER*> moveSet;
bool turnComplete=false;
bool slowed=false;
Entity(Decal*spr,std::string name,int x,int y,int hp,int maxhp,std::vector<WEATHER_POWER*>moveset) {
this->spr=spr;
this->name=name;
this->x=x;
this->y=y;
this->hp=hp;
this->maxhp=maxhp;
this->moveSet=moveSet;
}
};
@ -210,7 +214,7 @@ public:
WEATHER_POWER*METEOR_STORM = new WEATHER_POWER("Meteor Storm","Larger space rocks. 120+60d",&POWER_METEOR_STORM_ANIMATION,&POWER_METEOR_STORM_ANIMATION,120,60,140,Pixel(89, 4, 33,255),Pixel(130, 56, 1,255));
WEATHER_POWER*SNOWSTORM = new WEATHER_POWER("Snowstorm","Slows down targets and causes rapid temperature drops. 15+10d",&POWER_SNOWSTORM_ANIMATION,&POWER_SNOWSTORM_ANIMATION,15,10,140,Pixel(183, 196, 194,255),Pixel(222, 255, 254,255));
WEATHER_POWER*SANDSTORM = new WEATHER_POWER("Sandstorm","",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,5,10,64,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255));
WEATHER_POWER*PETAL_BLOSSOM = new WEATHER_POWER("Petal Blossom","",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,8,20,164,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255));
WEATHER_POWER*SEED_STORM = new WEATHER_POWER("Seed Storm","",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,8,20,164,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255));
WEATHER_POWER*AVALANCHE = new WEATHER_POWER("Avalanche","",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,15,10,200,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255));
bool IN_BATTLE_ENCOUNTER = false;
int BATTLE_ENTRY_TIMER = 0;
@ -228,6 +232,8 @@ public:
int BATTLE_CARD_SELECTION_IND=0;
int PLAYER_SELECTED_TARGET=-1;
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL,
*PLAYER_DECAL,
@ -237,6 +243,7 @@ public:
std::vector<Encounter> ENCOUNTERS;
Encounter ENCOUNTER_SPIDEY_1;
Encounter CURRENT_ENCOUNTER;
std::vector<int> turnOrder;
bool OnUserCreate() override
{
@ -330,9 +337,13 @@ public:
HURRICANE->playerOwnCount=1;
METEOR_RAIN->playerOwnCount=5;
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",2,3,80,80,false));
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",4,4,80,80,false));
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",6,2,80,80,false));
MOVESET_SPIDEY.push_back(SANDSTORM);
MOVESET_SPIDEY.push_back(SEED_STORM);
MOVESET_SPIDEY.push_back(AVALANCHE);
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",2,3,80,80,MOVESET_SPIDEY));
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",4,4,80,80,MOVESET_SPIDEY));
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",6,2,80,80,MOVESET_SPIDEY));
ENCOUNTER_SPIDEY_1.x=79;
ENCOUNTER_SPIDEY_1.y=47;
ENCOUNTERS.push_back(ENCOUNTER_SPIDEY_1);
@ -397,6 +408,50 @@ public:
}
}
}break;
case battle::PLAYER_TARGET_SELECTION:{
BATTLE_STATE=battle::ENEMY_SELECTION;
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
if (CURRENT_ENCOUNTER.entities[i].hp>0) {
CURRENT_ENCOUNTER.entities[i].selectedMove=CURRENT_ENCOUNTER.entities[i].moveSet[rand()%CURRENT_ENCOUNTER.entities[i].moveSet.size()];
CURRENT_ENCOUNTER.entities[i].turnComplete=false;
}
}
BATTLE_STATE=battle::MOVE_RESOLUTION;
//Seed Storm has prio.
if (BATTLE_CARD_SELECTION_IND!=-1&&BATTLE_CARD_SELECTION->name.compare("Seed Storm")==0) {
turnOrder.push_back(-1);
BATTLE_CARD_SELECTION_IND=-1;
}
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
if (CURRENT_ENCOUNTER.entities[i].hp>0&&!CURRENT_ENCOUNTER.entities[i].turnComplete&&
CURRENT_ENCOUNTER.entities[i].selectedMove->name.compare("Seed Storm")) {
turnOrder.push_back(i);
CURRENT_ENCOUNTER.entities[i].turnComplete=true;
}
}
//Otherwise, every enemy has a chance to go before the player unless they are slowed, then they always go after.
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
Entity ent = CURRENT_ENCOUNTER.entities[i];
if (ent.hp>0&&!ent.turnComplete&&
!ent.slowed&&rand()%2==0) {
turnOrder.push_back(i);
ent.turnComplete=true;
}
}
if (BATTLE_CARD_SELECTION_IND!=-1) {
turnOrder.push_back(-1);
BATTLE_CARD_SELECTION_IND=-1;
}
//Finally, any enemies that haven't gone will now go.
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
Entity ent = CURRENT_ENCOUNTER.entities[i];
if (ent.hp>0&&!ent.turnComplete) {
turnOrder.push_back(i);
ent.turnComplete=true;
}
}
BATTLE_STATE=battle::PERFORM_TURN;
}break;
}
}
@ -456,7 +511,7 @@ public:
}
}break;
case battle::PLAYER_TARGET_SELECTION:{
if (GetKey(D).bPressed||GetKey(RIGHT).bPressed||GetKey(NP6).bPressed||GetKey(W).bReleased||GetKey(UP).bReleased||GetKey(NP8).bReleased) {
if (GetKey(D).bPressed||GetKey(RIGHT).bPressed||GetKey(NP6).bPressed) {
while (true) {
PLAYER_SELECTED_TARGET=(PLAYER_SELECTED_TARGET+1)%CURRENT_ENCOUNTER.entities.size();
if (CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].hp>0) {
@ -464,7 +519,11 @@ public:
}
}
}
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed||GetKey(S).bReleased||GetKey(DOWN).bReleased||GetKey(NP5).bReleased||GetKey(NP2).bReleased) {
if (GetKey(W).bPressed||GetKey(UP).bPressed||GetKey(NP8).bPressed) {
PLAYER_SELECTED_TARGET=-1;
BATTLE_STATE=battle::PLAYER_SELECTION;
}
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed) {
while (true) {
if (--PLAYER_SELECTED_TARGET<0) {
PLAYER_SELECTED_TARGET=CURRENT_ENCOUNTER.entities.size()-1;
@ -884,6 +943,8 @@ public:
if (PLAYER_SELECTED_TARGET>=0) {
DrawWrappedText({5,5},"Target "+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].name+" "+(char)('A'+PLAYER_SELECTED_TARGET)+" with "+BATTLE_CARD_SELECTION->name,WIDTH-8,BLACK,{2,2});
DrawWrappedText({4,4},"Target "+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].name+" "+(char)('A'+PLAYER_SELECTED_TARGET)+" with "+BATTLE_CARD_SELECTION->name,WIDTH-8,WHITE,{2,2});
DrawStringDecal({WIDTH-GetTextSize("<UP> Back").x-1,HEIGHT-GetTextSize("<UP> Back").y-1},"<UP> Back",BLACK,{1,1});
DrawStringDecal({WIDTH-GetTextSize("<UP> Back").x-2,HEIGHT-GetTextSize("<UP> Back").y-2},"<UP> Back",GREEN,{1,1});
}
}break;
}

Binary file not shown.
Loading…
Cancel
Save