generated from sigonasr2/CPlusPlusProjectTemplate
Handle logic for setting up turns.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
4da99d3a97
commit
4bedc95bcb
@ -123,13 +123,17 @@ class Entity{
|
|||||||
int y;
|
int y;
|
||||||
std::string name;
|
std::string name;
|
||||||
WEATHER_POWER*selectedMove;
|
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->spr=spr;
|
||||||
this->name=name;
|
this->name=name;
|
||||||
this->x=x;
|
this->x=x;
|
||||||
this->y=y;
|
this->y=y;
|
||||||
this->hp=hp;
|
this->hp=hp;
|
||||||
this->maxhp=maxhp;
|
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*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*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*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));
|
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;
|
bool IN_BATTLE_ENCOUNTER = false;
|
||||||
int BATTLE_ENTRY_TIMER = 0;
|
int BATTLE_ENTRY_TIMER = 0;
|
||||||
@ -228,6 +232,8 @@ public:
|
|||||||
int BATTLE_CARD_SELECTION_IND=0;
|
int BATTLE_CARD_SELECTION_IND=0;
|
||||||
int PLAYER_SELECTED_TARGET=-1;
|
int PLAYER_SELECTED_TARGET=-1;
|
||||||
|
|
||||||
|
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
||||||
|
|
||||||
|
|
||||||
Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL,
|
Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL,
|
||||||
*PLAYER_DECAL,
|
*PLAYER_DECAL,
|
||||||
@ -237,6 +243,7 @@ public:
|
|||||||
std::vector<Encounter> ENCOUNTERS;
|
std::vector<Encounter> ENCOUNTERS;
|
||||||
Encounter ENCOUNTER_SPIDEY_1;
|
Encounter ENCOUNTER_SPIDEY_1;
|
||||||
Encounter CURRENT_ENCOUNTER;
|
Encounter CURRENT_ENCOUNTER;
|
||||||
|
std::vector<int> turnOrder;
|
||||||
|
|
||||||
bool OnUserCreate() override
|
bool OnUserCreate() override
|
||||||
{
|
{
|
||||||
@ -330,9 +337,13 @@ public:
|
|||||||
HURRICANE->playerOwnCount=1;
|
HURRICANE->playerOwnCount=1;
|
||||||
METEOR_RAIN->playerOwnCount=5;
|
METEOR_RAIN->playerOwnCount=5;
|
||||||
|
|
||||||
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",2,3,80,80,false));
|
MOVESET_SPIDEY.push_back(SANDSTORM);
|
||||||
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",4,4,80,80,false));
|
MOVESET_SPIDEY.push_back(SEED_STORM);
|
||||||
ENCOUNTER_SPIDEY_1.entities.push_back(*new Entity(SPIDEY_DECAL,"Spidey",6,2,80,80,false));
|
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.x=79;
|
||||||
ENCOUNTER_SPIDEY_1.y=47;
|
ENCOUNTER_SPIDEY_1.y=47;
|
||||||
ENCOUNTERS.push_back(ENCOUNTER_SPIDEY_1);
|
ENCOUNTERS.push_back(ENCOUNTER_SPIDEY_1);
|
||||||
@ -397,6 +408,50 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}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;
|
}break;
|
||||||
case battle::PLAYER_TARGET_SELECTION:{
|
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) {
|
while (true) {
|
||||||
PLAYER_SELECTED_TARGET=(PLAYER_SELECTED_TARGET+1)%CURRENT_ENCOUNTER.entities.size();
|
PLAYER_SELECTED_TARGET=(PLAYER_SELECTED_TARGET+1)%CURRENT_ENCOUNTER.entities.size();
|
||||||
if (CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].hp>0) {
|
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) {
|
while (true) {
|
||||||
if (--PLAYER_SELECTED_TARGET<0) {
|
if (--PLAYER_SELECTED_TARGET<0) {
|
||||||
PLAYER_SELECTED_TARGET=CURRENT_ENCOUNTER.entities.size()-1;
|
PLAYER_SELECTED_TARGET=CURRENT_ENCOUNTER.entities.size()-1;
|
||||||
@ -884,6 +943,8 @@ public:
|
|||||||
if (PLAYER_SELECTED_TARGET>=0) {
|
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({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});
|
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;
|
}break;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user