generated from sigonasr2/CPlusPlusProjectTemplate
Implement new combo battle mechanics.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
2d2761540d
commit
6e6a1eb32c
@ -119,6 +119,13 @@ class Seed{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace reasoncode{
|
||||||
|
enum Code{
|
||||||
|
SEED_GROWTH,
|
||||||
|
TREE_BURN
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#define MAX_TERMINAL_NAME_LENGTH 6
|
#define MAX_TERMINAL_NAME_LENGTH 6
|
||||||
#define WIDTH 256
|
#define WIDTH 256
|
||||||
#define HEIGHT 224
|
#define HEIGHT 224
|
||||||
@ -286,6 +293,8 @@ class WEATHER_POWER{
|
|||||||
int seedProduction=0; //Number of seeds to add to field.
|
int seedProduction=0; //Number of seeds to add to field.
|
||||||
float seedScatter=1; //Multiplier of current seeds on field.
|
float seedScatter=1; //Multiplier of current seeds on field.
|
||||||
bool growSeeds=false; //If set to true, will trigger a growth of all seeds.
|
bool growSeeds=false; //If set to true, will trigger a growth of all seeds.
|
||||||
|
bool burnTrees=false; //If set to true, will trigger a burning of trees.
|
||||||
|
float treeBurnChance=1; //% chance of trees getting burned by this attack.
|
||||||
WEATHER_POWER(std::string name,std::string desc,Animation*icon,Animation*effect,int dmg,int dmgRoll,int range,Pixel bgcol,Pixel textcol,int effectTime,ParticleEffect*parteff) {
|
WEATHER_POWER(std::string name,std::string desc,Animation*icon,Animation*effect,int dmg,int dmgRoll,int range,Pixel bgcol,Pixel textcol,int effectTime,ParticleEffect*parteff) {
|
||||||
this->description=desc;
|
this->description=desc;
|
||||||
this->name=name;
|
this->name=name;
|
||||||
@ -463,6 +472,7 @@ public:
|
|||||||
ParticleEffect*SEED_PELLET_EFF = new ParticleEffect({0,0},{64,64},{0,0},{WIDTH,HEIGHT},{1,1},{1,1},{-3,-3},{3,3},Pixel(138, 255, 153,200),Pixel(193, 245, 200,210),10,Pixel(70, 158, 62,0));
|
ParticleEffect*SEED_PELLET_EFF = new ParticleEffect({0,0},{64,64},{0,0},{WIDTH,HEIGHT},{1,1},{1,1},{-3,-3},{3,3},Pixel(138, 255, 153,200),Pixel(193, 245, 200,210),10,Pixel(70, 158, 62,0));
|
||||||
ParticleEffect*SUMMON_MINION_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{4,4},{12,12},{0,-6},{0,-20},Pixel(223, 242, 0,130),Pixel(223, 255, 114,210),50,Pixel(70, 158, 62,0));
|
ParticleEffect*SUMMON_MINION_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{4,4},{12,12},{0,-6},{0,-20},Pixel(223, 242, 0,130),Pixel(223, 255, 114,210),50,Pixel(70, 158, 62,0));
|
||||||
ParticleEffect*SEED_OF_LIFE_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{2,2},{2,2},{-1,-2},{1,-0.2},Pixel(65, 98, 66,210),Pixel(65, 117, 60,255),140,Pixel(70, 158, 62,0));
|
ParticleEffect*SEED_OF_LIFE_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{2,2},{2,2},{-1,-2},{1,-0.2},Pixel(65, 98, 66,210),Pixel(65, 117, 60,255),140,Pixel(70, 158, 62,0));
|
||||||
|
ParticleEffect*FIRESTORM_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{4,4},{12,12},{-12,-8},{12,-4},Pixel(209, 90, 69,130),Pixel(209, 141, 69,255),140,Pixel(255, 0, 0,32));
|
||||||
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,HAILSTORM_EFF);
|
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,HAILSTORM_EFF);
|
||||||
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,HURRICANE_EFF);
|
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,HURRICANE_EFF);
|
||||||
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,METEOR_STORM_EFF);
|
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,METEOR_STORM_EFF);
|
||||||
@ -524,6 +534,7 @@ public:
|
|||||||
bool SOUND_IS_PLAYING=false;
|
bool SOUND_IS_PLAYING=false;
|
||||||
int MAIN_MENU_SELECTION=0;
|
int MAIN_MENU_SELECTION=0;
|
||||||
std::string MENU_OPTIONS[4]={"NEW GAME","CONTINUE","MUTE SOUND","EXIT"};
|
std::string MENU_OPTIONS[4]={"NEW GAME","CONTINUE","MUTE SOUND","EXIT"};
|
||||||
|
int BATTLE_REASON_CODE=-1;
|
||||||
|
|
||||||
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,
|
||||||
@ -724,6 +735,10 @@ public:
|
|||||||
|
|
||||||
PETAL_STORM->seedProduction=2; //Produce two seeds.
|
PETAL_STORM->seedProduction=2; //Produce two seeds.
|
||||||
HURRICANE->seedScatter=2;
|
HURRICANE->seedScatter=2;
|
||||||
|
HURRICANE->growSeeds=true;
|
||||||
|
METEOR_STORM->burnTrees=true;
|
||||||
|
METEOR_RAIN->burnTrees=true;
|
||||||
|
METEOR_RAIN->treeBurnChance=0.5;
|
||||||
|
|
||||||
MOVESET_SPIDEY.push_back(SANDSTORM);
|
MOVESET_SPIDEY.push_back(SANDSTORM);
|
||||||
MOVESET_SPIDEY.push_back(SEED_STORM);
|
MOVESET_SPIDEY.push_back(SEED_STORM);
|
||||||
@ -1529,14 +1544,14 @@ public:
|
|||||||
int healPower=30;
|
int healPower=30;
|
||||||
int healRoll=healPower+rand()%ref->damageRoll*sign(healPower);
|
int healRoll=healPower+rand()%ref->damageRoll*sign(healPower);
|
||||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||||
effectRadius({(int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1]},ref,-healRoll,true);
|
effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,-healRoll,true);
|
||||||
} else {
|
} else {
|
||||||
effectRadius({CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y},ref,-healRoll,false);
|
effectRadius({CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y},ref,-healRoll,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (EFFECT_TIMER==30&&ref->name.compare("Seed Storm")==0) {
|
if (EFFECT_TIMER==30&&ref->name.compare("Seed Storm")==0) {
|
||||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||||
effectRadius({(int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1]},ref,true);
|
effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,true);
|
||||||
} else {
|
} else {
|
||||||
effectRadius({CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y},ref,false);
|
effectRadius({CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y},ref,false);
|
||||||
}
|
}
|
||||||
@ -1566,9 +1581,58 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (EFFECT_TIMER>ref->effectTime) {
|
if (EFFECT_TIMER>ref->effectTime) {
|
||||||
BATTLE_STATE=battle::DAMAGE_RESOLUTION;
|
|
||||||
EFFECT_TIMER=0;
|
EFFECT_TIMER=0;
|
||||||
clearPixelEffect();
|
clearPixelEffect();
|
||||||
|
if (ref->growSeeds&&SEEDS.size()>0) {
|
||||||
|
BATTLE_REASON_CODE=reasoncode::SEED_GROWTH;
|
||||||
|
BATTLE_STATE=battle::WAIT_TURN_ANIMATION2;
|
||||||
|
} else
|
||||||
|
if (ref->burnTrees&&TREES.size()>0&&ref->treeBurnChance>range(0,1)){
|
||||||
|
BATTLE_REASON_CODE=reasoncode::TREE_BURN;
|
||||||
|
BATTLE_STATE=battle::WAIT_TURN_ANIMATION2;
|
||||||
|
} else {
|
||||||
|
BATTLE_REASON_CODE=-1;
|
||||||
|
BATTLE_STATE=battle::DAMAGE_RESOLUTION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case battle::WAIT_TURN_ANIMATION2:{
|
||||||
|
EFFECT_TIMER++;
|
||||||
|
|
||||||
|
if (EFFECT_TIMER==10) {
|
||||||
|
switch (BATTLE_REASON_CODE) {
|
||||||
|
case reasoncode::SEED_GROWTH:{
|
||||||
|
applyPixelEffect(SEED_STORM,BATTLE_PLAYER_COORDS,0);
|
||||||
|
}break;
|
||||||
|
case reasoncode::TREE_BURN:{
|
||||||
|
applyPixelEffect(FIRESTORM_EFF,BATTLE_PLAYER_COORDS,0);
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (EFFECT_TIMER==60) {
|
||||||
|
switch (BATTLE_REASON_CODE) {
|
||||||
|
case reasoncode::SEED_GROWTH:{
|
||||||
|
int healAmt=-10*SEEDS.size();
|
||||||
|
CreateDisplayNumber(healAmt,BATTLE_PLAYER_COORDS.x,BATTLE_PLAYER_COORDS.y,frameCount);
|
||||||
|
PLAYER_HP=std::clamp(PLAYER_HP+healAmt*-1,0,PLAYER_MAXHP);
|
||||||
|
addTrees(SEEDS.size());
|
||||||
|
clearSeeds();
|
||||||
|
}break;
|
||||||
|
case reasoncode::TREE_BURN:{
|
||||||
|
int dmgAmt=10*TREES.size();
|
||||||
|
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
|
||||||
|
if (CURRENT_ENCOUNTER.entities[i]->hp>0) {
|
||||||
|
CreateDisplayNumber(dmgAmt,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[i]->x,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[i]->y,frameCount);
|
||||||
|
CURRENT_ENCOUNTER.entities[i]->hp=std::clamp(CURRENT_ENCOUNTER.entities[i]->hp-dmgAmt,0,CURRENT_ENCOUNTER.entities[i]->maxhp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clearTrees();
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (EFFECT_TIMER==120) {
|
||||||
|
BATTLE_REASON_CODE=-1;
|
||||||
|
BATTLE_STATE=battle::DAMAGE_RESOLUTION;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case battle::DAMAGE_RESOLUTION:{
|
case battle::DAMAGE_RESOLUTION:{
|
||||||
@ -1617,6 +1681,7 @@ public:
|
|||||||
PIXEL_EFFECT_TRANSPARENCY=0;
|
PIXEL_EFFECT_TRANSPARENCY=0;
|
||||||
EFFECT_TIMER=0;
|
EFFECT_TIMER=0;
|
||||||
clearSeeds();
|
clearSeeds();
|
||||||
|
clearTrees();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@ -2095,8 +2160,8 @@ public:
|
|||||||
}break;
|
}break;
|
||||||
case battle::PLAYER_TARGET_SELECTION:{
|
case battle::PLAYER_TARGET_SELECTION:{
|
||||||
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)+" uses "+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)+" uses "+BATTLE_CARD_SELECTION->name,WIDTH-8,WHITE,{2,2});
|
||||||
DrawStringDecal({(float)(WIDTH-GetTextSize("<UP> Back").x-1),(float)(HEIGHT-GetTextSize("<UP> Back").y-1)},"<UP> Back",BLACK,{1,1});
|
DrawStringDecal({(float)(WIDTH-GetTextSize("<UP> Back").x-1),(float)(HEIGHT-GetTextSize("<UP> Back").y-1)},"<UP> Back",BLACK,{1,1});
|
||||||
DrawStringDecal({(float)(WIDTH-GetTextSize("<UP> Back").x-2),(float)(HEIGHT-GetTextSize("<UP> Back").y-2)},"<UP> Back",GREEN,{1,1});
|
DrawStringDecal({(float)(WIDTH-GetTextSize("<UP> Back").x-2),(float)(HEIGHT-GetTextSize("<UP> Back").y-2)},"<UP> Back",GREEN,{1,1});
|
||||||
}
|
}
|
||||||
@ -2108,6 +2173,18 @@ public:
|
|||||||
DrawWrappedText({4,4},CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->name+" "+(char)('A'+BATTLE_CURRENT_TURN_ENTITY)+" with "+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove->name,WIDTH-8,WHITE,{2,2});
|
DrawWrappedText({4,4},CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->name+" "+(char)('A'+BATTLE_CURRENT_TURN_ENTITY)+" with "+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove->name,WIDTH-8,WHITE,{2,2});
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
case battle::WAIT_TURN_ANIMATION2:{
|
||||||
|
switch (BATTLE_REASON_CODE) {
|
||||||
|
case reasoncode::SEED_GROWTH:{
|
||||||
|
DrawWrappedText({5,5},"The seeds grow into lush trees!",WIDTH-8,DARK_GREEN,{2,2});
|
||||||
|
DrawWrappedText({4,4},"The seeds grow into lush trees!",WIDTH-8,WHITE,{2,2});
|
||||||
|
}break;
|
||||||
|
case reasoncode::TREE_BURN:{
|
||||||
|
DrawWrappedText({5,5},"The trees cause rampaging fires!",WIDTH-8,DARK_RED,{2,2});
|
||||||
|
DrawWrappedText({4,4},"The trees cause rampaging fires!",WIDTH-8,WHITE,{2,2});
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
if (IN_BATTLE_ENCOUNTER||(GAME_STATE==GAMEWORLD&&!CUTSCENE_ACTIVE&&PLAYER_HP!=PLAYER_MAXHP)) {
|
if (IN_BATTLE_ENCOUNTER||(GAME_STATE==GAMEWORLD&&!CUTSCENE_ACTIVE&&PLAYER_HP!=PLAYER_MAXHP)) {
|
||||||
DrawStringDecal({4+1,(float)(HEIGHT-10-GetTextSize("HP:").y+1)},"HP: "+std::to_string(PLAYER_HP),BLACK);
|
DrawStringDecal({4+1,(float)(HEIGHT-10-GetTextSize("HP:").y+1)},"HP: "+std::to_string(PLAYER_HP),BLACK);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user