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 WIDTH 256
|
||||
#define HEIGHT 224
|
||||
@ -286,6 +293,8 @@ class WEATHER_POWER{
|
||||
int seedProduction=0; //Number of seeds to add to 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 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) {
|
||||
this->description=desc;
|
||||
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*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*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*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);
|
||||
@ -524,6 +534,7 @@ public:
|
||||
bool SOUND_IS_PLAYING=false;
|
||||
int MAIN_MENU_SELECTION=0;
|
||||
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,
|
||||
*PLAYER_DECAL,
|
||||
@ -724,6 +735,10 @@ public:
|
||||
|
||||
PETAL_STORM->seedProduction=2; //Produce two seeds.
|
||||
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(SEED_STORM);
|
||||
@ -1529,14 +1544,14 @@ public:
|
||||
int healPower=30;
|
||||
int healRoll=healPower+rand()%ref->damageRoll*sign(healPower);
|
||||
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 {
|
||||
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 (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 {
|
||||
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) {
|
||||
BATTLE_STATE=battle::DAMAGE_RESOLUTION;
|
||||
EFFECT_TIMER=0;
|
||||
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;
|
||||
case battle::DAMAGE_RESOLUTION:{
|
||||
@ -1617,6 +1681,7 @@ public:
|
||||
PIXEL_EFFECT_TRANSPARENCY=0;
|
||||
EFFECT_TIMER=0;
|
||||
clearSeeds();
|
||||
clearTrees();
|
||||
}
|
||||
}
|
||||
}break;
|
||||
@ -2095,8 +2160,8 @@ public:
|
||||
}break;
|
||||
case battle::PLAYER_TARGET_SELECTION:{
|
||||
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});
|
||||
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)+" 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-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});
|
||||
}
|
||||
}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)) {
|
||||
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