generated from sigonasr2/CPlusPlusProjectTemplate
Restrict choices to only available cards
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
3d33b0ed49
commit
cf75aa36d0
@ -228,6 +228,8 @@ public:
|
|||||||
Animation POWER_METEOR_SHOWER_ANIMATION;
|
Animation POWER_METEOR_SHOWER_ANIMATION;
|
||||||
Animation POWER_METEOR_STORM_ANIMATION;
|
Animation POWER_METEOR_STORM_ANIMATION;
|
||||||
Animation POWER_SNOWSTORM_ANIMATION;
|
Animation POWER_SNOWSTORM_ANIMATION;
|
||||||
|
Animation CONSUME_SNACK_ANIMATION;
|
||||||
|
Animation CONSUME_MEAL_ANIMATION;
|
||||||
WEATHER_POWER*HAILSTORM = new WEATHER_POWER("Hailstorm","Causes a flurry of hard cold rocks to be unleashed in target area. 60+30d",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,60,30,160,Pixel(72, 160, 212,255),Pixel(93, 161, 163,255),120);
|
WEATHER_POWER*HAILSTORM = new WEATHER_POWER("Hailstorm","Causes a flurry of hard cold rocks to be unleashed in target area. 60+30d",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,60,30,160,Pixel(72, 160, 212,255),Pixel(93, 161, 163,255),120);
|
||||||
WEATHER_POWER*HURRICANE = new WEATHER_POWER("Hurricane","Causes heavy winds, scattering seeds, heavy rain. 20+10d",&POWER_HURRICANE_ANIMATION,&POWER_HURRICANE_ANIMATION,20,10,200,Pixel(99, 148, 132,255),Pixel(121, 132, 140,255),120);
|
WEATHER_POWER*HURRICANE = new WEATHER_POWER("Hurricane","Causes heavy winds, scattering seeds, heavy rain. 20+10d",&POWER_HURRICANE_ANIMATION,&POWER_HURRICANE_ANIMATION,20,10,200,Pixel(99, 148, 132,255),Pixel(121, 132, 140,255),120);
|
||||||
WEATHER_POWER*METEOR_RAIN = new WEATHER_POWER("Meteor Rain","Causes space rocks to fall on target area. 50+50d",&POWER_METEOR_SHOWER_ANIMATION,&POWER_METEOR_SHOWER_ANIMATION,50,50,96,Pixel(96, 86, 153,255),Pixel(170, 103, 201,255),120);
|
WEATHER_POWER*METEOR_RAIN = new WEATHER_POWER("Meteor Rain","Causes space rocks to fall on target area. 50+50d",&POWER_METEOR_SHOWER_ANIMATION,&POWER_METEOR_SHOWER_ANIMATION,50,50,96,Pixel(96, 86, 153,255),Pixel(170, 103, 201,255),120);
|
||||||
@ -236,16 +238,20 @@ public:
|
|||||||
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),120);
|
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),120);
|
||||||
WEATHER_POWER*SEED_STORM = new WEATHER_POWER("Seed Storm","",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,-10,15,30,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120);
|
WEATHER_POWER*SEED_STORM = new WEATHER_POWER("Seed Storm","",&POWER_HAILSTORM_ANIMATION,&POWER_HAILSTORM_ANIMATION,-10,15,30,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120);
|
||||||
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),120);
|
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),120);
|
||||||
|
WEATHER_POWER*CONSUME_SNACK = new WEATHER_POWER("Snack","Restores 33% health for 5 turns. If battle ends before effect ends, food is not consumed.",&CONSUME_SNACK_ANIMATION,&CONSUME_SNACK_ANIMATION,-1001,1,200,Pixel(147, 173, 66,255),Pixel(255, 188, 3,255),120);
|
||||||
|
WEATHER_POWER*CONSUME_MEAL = new WEATHER_POWER("Meal","Restores all health. Increases Maximum Health by 5.",&CONSUME_MEAL_ANIMATION,&CONSUME_MEAL_ANIMATION,-1002,1,200,Pixel(147, 173, 66,255),Pixel(255, 188, 3,255),120);
|
||||||
bool IN_BATTLE_ENCOUNTER = false;
|
bool IN_BATTLE_ENCOUNTER = false;
|
||||||
int BATTLE_ENTRY_TIMER = 0;
|
int BATTLE_ENTRY_TIMER = 0;
|
||||||
int EFFECT_TIMER = 0;
|
int EFFECT_TIMER = 0;
|
||||||
#define WEATHER_POWER_COUNT 5 //Number of powers that are in the game. Update storage array accordingly.
|
#define WEATHER_POWER_COUNT 7 //Number of powers that are in the game. Update storage array accordingly.
|
||||||
WEATHER_POWER*WEATHER_POWERS[WEATHER_POWER_COUNT] = {
|
WEATHER_POWER*WEATHER_POWERS[WEATHER_POWER_COUNT] = {
|
||||||
HAILSTORM,
|
HAILSTORM,
|
||||||
HURRICANE,
|
HURRICANE,
|
||||||
METEOR_RAIN,
|
METEOR_RAIN,
|
||||||
METEOR_STORM,
|
METEOR_STORM,
|
||||||
SNOWSTORM,};
|
SNOWSTORM,
|
||||||
|
CONSUME_SNACK,
|
||||||
|
CONSUME_MEAL};
|
||||||
battle::BATTLESTATE BATTLE_STATE=battle::NONE;
|
battle::BATTLESTATE BATTLE_STATE=battle::NONE;
|
||||||
std::vector<WEATHER_POWER*> availablePowers;
|
std::vector<WEATHER_POWER*> availablePowers;
|
||||||
WEATHER_POWER*BATTLE_CARD_SELECTION=HAILSTORM;
|
WEATHER_POWER*BATTLE_CARD_SELECTION=HAILSTORM;
|
||||||
@ -258,6 +264,7 @@ public:
|
|||||||
int RAND_CALLS=0;
|
int RAND_CALLS=0;
|
||||||
std::vector<DisplayNumber*> BATTLE_DISPLAY_NUMBERS;
|
std::vector<DisplayNumber*> BATTLE_DISPLAY_NUMBERS;
|
||||||
bool PLAYER_TURN_COMPLETE=false;
|
bool PLAYER_TURN_COMPLETE=false;
|
||||||
|
int FOOD_REGEN_TURNS=0;
|
||||||
|
|
||||||
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
||||||
|
|
||||||
@ -265,7 +272,8 @@ public:
|
|||||||
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,
|
||||||
*WEATHERNODE_EFFECT_DECAL,*POWER_HAILSTORM_DECAL,*POWER_HURRICANE_DECAL,*POWER_METEOR_SHOWER_DECAL,*POWER_METEOR_STORM_DECAL,*POWER_SNOWSTORM_DECAL,
|
*WEATHERNODE_EFFECT_DECAL,*POWER_HAILSTORM_DECAL,*POWER_HURRICANE_DECAL,*POWER_METEOR_SHOWER_DECAL,*POWER_METEOR_STORM_DECAL,*POWER_SNOWSTORM_DECAL,
|
||||||
*SPIDEY_DECAL,*TARGETING_CIRCLE,*TARGETING_RANGE_CIRCLE,*HEALTHBAR_DECAL;
|
*SPIDEY_DECAL,*TARGETING_CIRCLE,*TARGETING_RANGE_CIRCLE,*HEALTHBAR_DECAL,
|
||||||
|
*CONSUME_SNACK_DECAL,*CONSUME_MEAL_DECAL;
|
||||||
std::map<std::string,ObjectLoadInfo*> BASE_OBJECTS;
|
std::map<std::string,ObjectLoadInfo*> BASE_OBJECTS;
|
||||||
std::vector<Encounter> ENCOUNTERS;
|
std::vector<Encounter> ENCOUNTERS;
|
||||||
Encounter ENCOUNTER_SPIDEY_1;
|
Encounter ENCOUNTER_SPIDEY_1;
|
||||||
@ -290,6 +298,8 @@ public:
|
|||||||
POWER_METEOR_SHOWER_DECAL=new Decal(new Sprite("assets/meteor_shower_icon.png"));
|
POWER_METEOR_SHOWER_DECAL=new Decal(new Sprite("assets/meteor_shower_icon.png"));
|
||||||
POWER_METEOR_STORM_DECAL=new Decal(new Sprite("assets/meteor_storm.png"));
|
POWER_METEOR_STORM_DECAL=new Decal(new Sprite("assets/meteor_storm.png"));
|
||||||
POWER_SNOWSTORM_DECAL=new Decal(new Sprite("assets/snowstorm_icon.png"));
|
POWER_SNOWSTORM_DECAL=new Decal(new Sprite("assets/snowstorm_icon.png"));
|
||||||
|
CONSUME_SNACK_DECAL=new Decal(new Sprite("assets/snack.png"));
|
||||||
|
CONSUME_MEAL_DECAL=new Decal(new Sprite("assets/meal.png"));
|
||||||
SPIDEY_DECAL=new Decal(new Sprite("assets/spidey.png"));
|
SPIDEY_DECAL=new Decal(new Sprite("assets/spidey.png"));
|
||||||
TARGETING_CIRCLE=new Decal(new Sprite("assets/targetCircle.png"));
|
TARGETING_CIRCLE=new Decal(new Sprite("assets/targetCircle.png"));
|
||||||
TARGETING_RANGE_CIRCLE=new Decal(new Sprite("assets/targetRange.png"));
|
TARGETING_RANGE_CIRCLE=new Decal(new Sprite("assets/targetRange.png"));
|
||||||
@ -360,6 +370,16 @@ public:
|
|||||||
POWER_SNOWSTORM_ANIMATION.frames.push_back({32,0});
|
POWER_SNOWSTORM_ANIMATION.frames.push_back({32,0});
|
||||||
POWER_SNOWSTORM_ANIMATION.frames.push_back({64,0});
|
POWER_SNOWSTORM_ANIMATION.frames.push_back({64,0});
|
||||||
POWER_SNOWSTORM_ANIMATION.skip_frames=nodeAnimationSkipFrames;
|
POWER_SNOWSTORM_ANIMATION.skip_frames=nodeAnimationSkipFrames;
|
||||||
|
CONSUME_SNACK_ANIMATION.spr=CONSUME_SNACK_DECAL;
|
||||||
|
CONSUME_SNACK_ANIMATION.frames.push_back({0,0});
|
||||||
|
CONSUME_SNACK_ANIMATION.frames.push_back({32,0});
|
||||||
|
CONSUME_SNACK_ANIMATION.frames.push_back({64,0});
|
||||||
|
CONSUME_SNACK_ANIMATION.skip_frames=nodeAnimationSkipFrames;
|
||||||
|
CONSUME_MEAL_ANIMATION.spr=CONSUME_MEAL_DECAL;
|
||||||
|
CONSUME_MEAL_ANIMATION.frames.push_back({0,0});
|
||||||
|
CONSUME_MEAL_ANIMATION.frames.push_back({32,0});
|
||||||
|
CONSUME_MEAL_ANIMATION.frames.push_back({64,0});
|
||||||
|
CONSUME_MEAL_ANIMATION.skip_frames=nodeAnimationSkipFrames;
|
||||||
|
|
||||||
HAILSTORM->playerOwnCount=3;
|
HAILSTORM->playerOwnCount=3;
|
||||||
HURRICANE->playerOwnCount=1;
|
HURRICANE->playerOwnCount=1;
|
||||||
@ -425,7 +445,11 @@ public:
|
|||||||
}
|
}
|
||||||
switch (BATTLE_STATE) {
|
switch (BATTLE_STATE) {
|
||||||
case battle::PLAYER_SELECTION:{
|
case battle::PLAYER_SELECTION:{
|
||||||
|
if (WEATHER_POWERS[BATTLE_CARD_SELECTION_IND]->playerOwnCount>0) {
|
||||||
BATTLE_STATE=battle::PLAYER_TARGET_SELECTION;
|
BATTLE_STATE=battle::PLAYER_TARGET_SELECTION;
|
||||||
|
if (WEATHER_POWERS[BATTLE_CARD_SELECTION_IND]->name.compare("MEAL")==0||WEATHER_POWERS[BATTLE_CARD_SELECTION_IND]->name.compare("SNACK")==0) {
|
||||||
|
setupBattleTurns();
|
||||||
|
} else
|
||||||
if (PLAYER_SELECTED_TARGET==-1||CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->hp<=0) {
|
if (PLAYER_SELECTED_TARGET==-1||CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->hp<=0) {
|
||||||
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
|
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
|
||||||
Entity*ent = CURRENT_ENCOUNTER.entities[i];
|
Entity*ent = CURRENT_ENCOUNTER.entities[i];
|
||||||
@ -435,57 +459,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}break;
|
}break;
|
||||||
case battle::PLAYER_TARGET_SELECTION:{
|
case battle::PLAYER_TARGET_SELECTION:{
|
||||||
//Remove the card from inventory.
|
setupBattleTurns();
|
||||||
BATTLE_CARD_SELECTION->playerOwnCount--;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PLAYER_TURN_COMPLETE=false;
|
|
||||||
BATTLE_STATE=battle::MOVE_RESOLUTION;
|
|
||||||
//Seed Storm has prio.
|
|
||||||
if (!PLAYER_TURN_COMPLETE&&BATTLE_CARD_SELECTION->name.compare("Seed Storm")==0) {
|
|
||||||
turnOrder.push(-1);
|
|
||||||
PLAYER_TURN_COMPLETE=true;
|
|
||||||
}
|
|
||||||
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")==0) {
|
|
||||||
turnOrder.push(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(i);
|
|
||||||
ent->turnComplete=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!PLAYER_TURN_COMPLETE) {
|
|
||||||
turnOrder.push(-1);
|
|
||||||
PLAYER_TURN_COMPLETE=true;
|
|
||||||
}
|
|
||||||
//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(i);
|
|
||||||
ent->turnComplete=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BATTLE_STATE=battle::PERFORM_TURN;
|
|
||||||
BATTLE_CURRENT_TURN_ENTITY=turnOrder.top();
|
|
||||||
turnOrder.pop();
|
|
||||||
BATTLE_STATE=battle::WAIT_TURN_ANIMATION;
|
|
||||||
EFFECT_TIMER=0;
|
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -742,6 +719,11 @@ public:
|
|||||||
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 (collidesWithPlayer(enc)) {
|
if (collidesWithPlayer(enc)) {
|
||||||
|
for (int i=0;i<WEATHER_POWER_COUNT;i++) {
|
||||||
|
if (WEATHER_POWERS[i]->name.compare("Snack")==0||WEATHER_POWERS[i]->name.compare("Meal")==0) {
|
||||||
|
WEATHER_POWERS[i]->playerOwnCount=foodCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
availablePowers.erase(availablePowers.begin(),availablePowers.end());
|
availablePowers.erase(availablePowers.begin(),availablePowers.end());
|
||||||
IN_BATTLE_ENCOUNTER=true;
|
IN_BATTLE_ENCOUNTER=true;
|
||||||
CURRENT_ENCOUNTER=enc;
|
CURRENT_ENCOUNTER=enc;
|
||||||
@ -828,7 +810,17 @@ public:
|
|||||||
} else
|
} else
|
||||||
if (EFFECT_TIMER==ref->effectTime-10){
|
if (EFFECT_TIMER==ref->effectTime-10){
|
||||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||||
|
if (FOOD_REGEN_TURNS>0) {
|
||||||
|
FOOD_REGEN_TURNS--;
|
||||||
|
PLAYER_HP=std::clamp(PLAYER_HP+(int)(PLAYER_MAXHP*0.33),0,PLAYER_MAXHP);
|
||||||
|
DisplayNumber*numb = new DisplayNumber((int)(-PLAYER_MAXHP*0.33),PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
||||||
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
|
}
|
||||||
|
if (PLAYER_SELECTED_TARGET==-2) {
|
||||||
|
effectRadius({PLAYER_COORDS[0],PLAYER_COORDS[1]},ref,true);
|
||||||
|
} else {
|
||||||
effectRadius({CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y+CURRENT_ENCOUNTER.y},ref,true);
|
effectRadius({CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y+CURRENT_ENCOUNTER.y},ref,true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
effectRadius({PLAYER_COORDS[0],PLAYER_COORDS[1]},ref,false);
|
effectRadius({PLAYER_COORDS[0],PLAYER_COORDS[1]},ref,false);
|
||||||
}
|
}
|
||||||
@ -1351,12 +1343,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
GradientFillRectDecal({(WIDTH/6)*scale.x+offset.x,(HEIGHT/6)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},data->bgcol*darknessFactor,data->bgcol*darknessFactor,Pixel(72, 160, 212,0),data->bgcol*darknessFactor);
|
float dimColor=data->playerOwnCount==0?0.4:1;
|
||||||
GradientFillRectDecal({(WIDTH/6*3+1)*scale.x+offset.x,(HEIGHT/6)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},data->bgcol*darknessFactor,Pixel(72, 160, 212,0),data->bgcol*darknessFactor,data->bgcol*darknessFactor);
|
|
||||||
GradientFillRectDecal({(WIDTH/6)*scale.x+offset.x,(HEIGHT/6*3)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},data->bgcol*darknessFactor,data->bgcol*darknessFactor,data->bgcol*darknessFactor,Pixel(72, 160, 212,0));
|
|
||||||
GradientFillRectDecal({(WIDTH/6*3+1)*scale.x+offset.x,(HEIGHT/6*3)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},Pixel(72, 160, 212,0),data->bgcol*darknessFactor,data->bgcol*darknessFactor,data->bgcol*darknessFactor);
|
|
||||||
|
|
||||||
DrawPartialDecal({(WIDTH/2-data->anim->width/2*3)*scale.x+offset.x,(HEIGHT/6+16-data->anim->height/2)*scale.y+offset.y},data->anim->spr,data->anim->getCurrentFrame(),{data->anim->width,data->anim->height},{3*scale.x,3*scale.y},WHITE*darknessFactor);
|
GradientFillRectDecal({(WIDTH/6)*scale.x+offset.x,(HEIGHT/6)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},data->bgcol*darknessFactor*dimColor,data->bgcol*darknessFactor*dimColor,Pixel(72, 160, 212,0),data->bgcol*darknessFactor*dimColor);
|
||||||
|
GradientFillRectDecal({(WIDTH/6*3+1)*scale.x+offset.x,(HEIGHT/6)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},data->bgcol*darknessFactor*dimColor,Pixel(72, 160, 212,0),data->bgcol*darknessFactor*dimColor,data->bgcol*darknessFactor*dimColor);
|
||||||
|
GradientFillRectDecal({(WIDTH/6)*scale.x+offset.x,(HEIGHT/6*3)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},data->bgcol*darknessFactor*dimColor,data->bgcol*darknessFactor*dimColor,data->bgcol*darknessFactor*dimColor,Pixel(72, 160, 212,0));
|
||||||
|
GradientFillRectDecal({(WIDTH/6*3+1)*scale.x+offset.x,(HEIGHT/6*3)*scale.y+offset.y},{WIDTH/3*scale.x,HEIGHT/6*2*scale.y},Pixel(72, 160, 212,0),data->bgcol*darknessFactor*dimColor,data->bgcol*darknessFactor*dimColor,data->bgcol*darknessFactor*dimColor);
|
||||||
|
|
||||||
|
DrawPartialDecal({(WIDTH/2-data->anim->width/2*3)*scale.x+offset.x,(HEIGHT/6+16-data->anim->height/2)*scale.y+offset.y},data->anim->spr,data->anim->getCurrentFrame(),{data->anim->width,data->anim->height},{3*scale.x,3*scale.y},WHITE*darknessFactor*dimColor);
|
||||||
for (int x=-1;x<=1;x++) {
|
for (int x=-1;x<=1;x++) {
|
||||||
for (int y=-1;y<=1;y++) {
|
for (int y=-1;y<=1;y++) {
|
||||||
if (x!=0&&y!=0) {
|
if (x!=0&&y!=0) {
|
||||||
@ -1364,9 +1358,9 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawStringPropDecal({(WIDTH/6+4)*scale.x+offset.x,(HEIGHT/2+8)*scale.y+offset.y},data->name,data->textcol*darknessFactor,{2*scale.x,2*scale.y});
|
DrawStringPropDecal({(WIDTH/6+4)*scale.x+offset.x,(HEIGHT/2+8)*scale.y+offset.y},data->name,data->textcol*darknessFactor*dimColor,{2*scale.x,2*scale.y});
|
||||||
DrawWrappedPropText({(WIDTH/6+4+1)*scale.x+offset.x,(HEIGHT/2+24+1)*scale.y+offset.y},data->description,(WIDTH/3*2-8)*scale.x,BLACK,{scale.x,scale.y});
|
DrawWrappedPropText({(WIDTH/6+4+1)*scale.x+offset.x,(HEIGHT/2+24+1)*scale.y+offset.y},data->description,(WIDTH/3*2-8)*scale.x,BLACK,{scale.x,scale.y});
|
||||||
DrawWrappedPropText({(WIDTH/6+4)*scale.x+offset.x,(HEIGHT/2+24)*scale.y+offset.y},data->description,(WIDTH/3*2-8)*scale.x,Pixel(227, 245, 255,255)*darknessFactor,{scale.x,scale.y});
|
DrawWrappedPropText({(WIDTH/6+4)*scale.x+offset.x,(HEIGHT/2+24)*scale.y+offset.y},data->description,(WIDTH/3*2-8)*scale.x,Pixel(227, 245, 255,255)*darknessFactor*dimColor,{scale.x,scale.y});
|
||||||
for (int x=-1;x<=1;x++) {
|
for (int x=-1;x<=1;x++) {
|
||||||
for (int y=-1;y<=1;y++) {
|
for (int y=-1;y<=1;y++) {
|
||||||
if (x!=0&&y!=0) {
|
if (x!=0&&y!=0) {
|
||||||
@ -1374,7 +1368,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawStringPropDecal({(WIDTH/6+4+WIDTH/3*2-8-GetTextSizeProp(std::to_string(data->playerOwnCount)+" uses remaining.").x*1.5)*scale.x+offset.x,(HEIGHT/6*3+HEIGHT/6*2-GetTextSizeProp(std::to_string(data->playerOwnCount)+" uses remaining.").y*1.5-4)*scale.y+offset.y},std::to_string(data->playerOwnCount)+" uses remaining.",olc::WHITE*darknessFactor,{1.5*scale.x,1.5*scale.y});
|
DrawStringPropDecal({(WIDTH/6+4+WIDTH/3*2-8-GetTextSizeProp(std::to_string(data->playerOwnCount)+" uses remaining.").x*1.5)*scale.x+offset.x,(HEIGHT/6*3+HEIGHT/6*2-GetTextSizeProp(std::to_string(data->playerOwnCount)+" uses remaining.").y*1.5-4)*scale.y+offset.y},std::to_string(data->playerOwnCount)+" uses remaining.",olc::WHITE*darknessFactor*dimColor,{1.5*scale.x,1.5*scale.y});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1384,6 +1378,18 @@ public:
|
|||||||
if (finalDamage<0) {
|
if (finalDamage<0) {
|
||||||
//This is a healing effect.
|
//This is a healing effect.
|
||||||
if (playerForce) {
|
if (playerForce) {
|
||||||
|
if (power->damage==-1002) {
|
||||||
|
//Instead heal for their max health.
|
||||||
|
PLAYER_MAXHP+=5;
|
||||||
|
int finalDamage=-PLAYER_MAXHP;
|
||||||
|
foodCount--;
|
||||||
|
} else
|
||||||
|
if (power->damage==-1001) {
|
||||||
|
//Instead heal for their max health.
|
||||||
|
FOOD_REGEN_TURNS=4;
|
||||||
|
int finalDamage=-PLAYER_MAXHP*0.33;
|
||||||
|
foodCount--;
|
||||||
|
}
|
||||||
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
|
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
|
||||||
DisplayNumber*numb = new DisplayNumber(finalDamage,PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
DisplayNumber*numb = new DisplayNumber(finalDamage,PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
||||||
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
@ -1433,6 +1439,58 @@ public:
|
|||||||
srand(time(NULL)+RAND_CALLS++);
|
srand(time(NULL)+RAND_CALLS++);
|
||||||
return std::rand();
|
return std::rand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setupBattleTurns() {
|
||||||
|
//Remove the card from inventory.
|
||||||
|
BATTLE_CARD_SELECTION->playerOwnCount--;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PLAYER_TURN_COMPLETE=false;
|
||||||
|
BATTLE_STATE=battle::MOVE_RESOLUTION;
|
||||||
|
//Seed Storm has prio.
|
||||||
|
if (!PLAYER_TURN_COMPLETE&&BATTLE_CARD_SELECTION->name.compare("Seed Storm")==0) {
|
||||||
|
turnOrder.push(-1);
|
||||||
|
PLAYER_TURN_COMPLETE=true;
|
||||||
|
}
|
||||||
|
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")==0) {
|
||||||
|
turnOrder.push(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(i);
|
||||||
|
ent->turnComplete=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!PLAYER_TURN_COMPLETE) {
|
||||||
|
turnOrder.push(-1);
|
||||||
|
PLAYER_TURN_COMPLETE=true;
|
||||||
|
}
|
||||||
|
//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(i);
|
||||||
|
ent->turnComplete=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BATTLE_STATE=battle::PERFORM_TURN;
|
||||||
|
BATTLE_CURRENT_TURN_ENTITY=turnOrder.top();
|
||||||
|
turnOrder.pop();
|
||||||
|
BATTLE_STATE=battle::WAIT_TURN_ANIMATION;
|
||||||
|
EFFECT_TIMER=0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
BIN
assets/meal.png
Normal file
BIN
assets/meal.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/snack.png
Normal file
BIN
assets/snack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Loading…
x
Reference in New Issue
Block a user