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;
|
||||
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…
x
Reference in New Issue
Block a user