Particle effects for new moves

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 18c098bccb
commit f639902c1b
  1. 77
      SeasonsOfLoneliness.cpp
  2. BIN
      Seasons_of_Loneliness
  3. BIN
      assets/petrify.png

@ -153,7 +153,8 @@ namespace reasoncode{
enum Code{
SEED_GROWTH,
TREE_BURN,
DROUGHT
DROUGHT,
PETRIFIED
};
}
@ -339,6 +340,9 @@ class WEATHER_POWER{
bool appliesSlow=false; //If true, will apply slow to enemies hit.
bool appliesSpeed=false; //If true, will apply speed on use.
bool appliesHide=false; //If true, will apply hiding on use.
bool appliesPetrification=false; //Applies three turns of petrification on use.
float pctDmg=0; //
bool dealsPctDmg=false; //If set to true, uses pctDmg and deals a % health value instead.
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;
@ -546,6 +550,9 @@ public:
ParticleEffect*HIDE_EFF = new ParticleEffect({0,0},{64,64},{0,0},{64,64},{32,32},{32,32},{-1,-1},{1,1},Pixel(0, 0, 0,25),Pixel(0, 0, 0,75),5,Pixel(166, 51, 28,0));
ParticleEffect*HYPERZAP_EFF = new ParticleEffect({0,0},{64,64},{0,0},{64,64},{1,1},{6,6},{0,-2},{0,-10},Pixel(232, 2, 230,130),Pixel(250, 81, 247,210),30,Pixel(70, 158, 62,0));
ParticleEffect*POLLINATION_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{4,4},{12,12},{-20,-6},{0,-20},Pixel(130, 245, 2,130),Pixel(250, 246, 2,210),50,Pixel(199, 199, 52,64));
ParticleEffect*GLARE_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{4,4},{12,12},{-20,-6},{0,-20},Pixel(130, 245, 2,130),Pixel(250, 246, 2,210),0,Pixel(255, 255, 255,64));
ParticleEffect*PETRIFY_EFF = new ParticleEffect({0,0},{64,64},{0,0},{64,64},{2,2},{4,4},{-1,-3},{1,-8},Pixel(166, 147, 143,200),Pixel(199, 194, 193,210),30,Pixel(199, 199, 52,0));
ParticleEffect*MEGA_FANG_EFF = new ParticleEffect({0,0},{64,64},{0,0},{64,64},{1,1},{3,3},{-5,-5},{5,5},Pixel(255,255,255,200),Pixel(255,255,255,210),40,Pixel(70, 158, 62,0));
WEATHER_POWER*HAILSTORM = new WEATHER_POWER("Hailstorm","Causes a flurry of hard cold rocks to be unleashed in target area. 60+1d30",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+1d10",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 fiery space rocks to fall on target area. 50+1d50",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);
@ -574,6 +581,9 @@ public:
WEATHER_POWER*HIDE = new WEATHER_POWER("Hide","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,175,40,32,Pixel(176, 53, 37,255),Pixel(217, 98, 0,255),120,HIDE_EFF);
WEATHER_POWER*HYPERZAP = new WEATHER_POWER("Hyper Zap","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,175,40,32,Pixel(176, 53, 37,255),Pixel(217, 98, 0,255),120,HYPERZAP_EFF);
WEATHER_POWER*POLLINATION = new WEATHER_POWER("Pollination","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,-110,10,255,Pixel(176, 53, 37,255),Pixel(217, 98, 0,255),120,POLLINATION_EFF);
WEATHER_POWER*GLARE = new WEATHER_POWER("Glare","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,-110,10,255,Pixel(176, 53, 37,255),Pixel(217, 98, 0,255),120,GLARE_EFF);
WEATHER_POWER*PETRIFY = new WEATHER_POWER("Petrify","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,-110,10,255,Pixel(176, 53, 37,255),Pixel(217, 98, 0,255),120,PETRIFY_EFF);
WEATHER_POWER*MEGA_FANG = new WEATHER_POWER("Mega Fang","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,-110,10,255,Pixel(176, 53, 37,255),Pixel(217, 98, 0,255),120,MEGAFANG_EFF);
bool IN_BATTLE_ENCOUNTER = false;
int BATTLE_ENTRY_TIMER = 0;
@ -642,7 +652,8 @@ public:
*LATER_THAT_NIGHT_DECAL,*SLEEP_DECAL,*SEED_DECAL,*TREE_DECAL,*X_X_UNCHARGED_DECAL,
*SANDWORM_DECAL,*SNAKE_DECAL,*MOTH_DECAL,*FLASH_FLOOD_DECAL,*SUNNY_DAY_DECAL,*FIRESTORM_DECAL,*SOLARFLARE_DECAL,
*HP_REGEN_DECAL,*SLOWED_DECAL, *SPEED_DECAL,*HIDDEN_DECAL,*BOOK_DECAL,*BOOK2_DECAL,
*LAUNCHPAD_CLOSED_DECAL,*LAUNCHPAD_HALF1_DECAL,*LAUNCHPAD_HALF2_DECAL,*LAUNCHPAD_DECAL,*Y_Y_DECAL;
*LAUNCHPAD_CLOSED_DECAL,*LAUNCHPAD_HALF1_DECAL,*LAUNCHPAD_HALF2_DECAL,*LAUNCHPAD_DECAL,*Y_Y_DECAL,
*PETRIFY_DECAL;
std::map<std::string,ObjectLoadInfo*> BASE_OBJECTS;
std::vector<Encounter> ENCOUNTERS;
Encounter ENCOUNTER_SPIDEY_1;
@ -658,6 +669,7 @@ public:
std::vector<WEATHER_POWER*>MOVESET_X_X;
std::vector<WEATHER_POWER*>MOVESET_XMINION;
std::vector<WEATHER_POWER*>MOVESET_MEGAMOTH;
std::vector<WEATHER_POWER*>MOVESET_SIDEWINDER;
std::vector<Seed*>SEEDS;
std::vector<Seed*>TREES;
bool SOUND_IS_MUTED=false;
@ -668,6 +680,7 @@ public:
vf2d BATTLE_PLAYER_COORDS;
PlayerState*PREV_PLAYERSTATE=new PlayerState();
int WALK_STEPS=0;
int PETRIFY_TURNS=0;
Map*CURRENT_MAP=MAP_1;
@ -968,6 +981,17 @@ public:
MOVESET_XMINION.push_back(SEED_PELLET);
MOVESET_XMINION.push_back(SEED_STORM);
MOVESET_SIDEWINDER.push_back(AVALANCHE);
MOVESET_SIDEWINDER.push_back(ACID_RAIN);
MOVESET_SIDEWINDER.push_back(ACID_RAIN);
MOVESET_SIDEWINDER.push_back(TORNADO);
MOVESET_SIDEWINDER.push_back(AVALANCHE);
MOVESET_SIDEWINDER.push_back(ACID_RAIN);
MOVESET_SIDEWINDER.push_back(GLARE);
MOVESET_SIDEWINDER.push_back(PETRIFY);
MOVESET_SIDEWINDER.push_back(MEGA_FANG);
MOVESET_SIDEWINDER.push_back(MEGA_FANG);
COLLECTED_ITEMS.push_back({20,5});
COLLECTED_ITEMS.push_back({20,6});
@ -1008,10 +1032,10 @@ public:
ENCOUNTER_MEGAMOTH.map=MAP_4;
ENCOUNTERS.push_back(ENCOUNTER_MEGAMOTH);
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",1,1,225,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",3,2,225,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",4,3,225,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",3,2,0,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Sidewinder",4,3,0,225,MOVESET_SIDEWINDER,{2,2},true));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",5,3,225,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",6,1,225,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.entities.push_back(new Entity(SNAKE_DECAL,"Snake",6,1,0,225,MOVESET_SNAKE));
ENCOUNTER_SNAKEPACK.x=11-4;
ENCOUNTER_SNAKEPACK.y=5-3.5;
ENCOUNTER_SNAKEPACK.playerX=4;
@ -1903,6 +1927,9 @@ public:
}
}break;
case battle::PLAYER_SELECTION:{
if (PETRIFY_TURNS>0) {
setupBattleTurns();
}
if (!GAME_FLAGS[gameflag::TUTORIAL1_X_X]&&GAME_FLAGS[gameflag::ANALYSIS_X_X]) {
GAME_FLAGS[gameflag::TUTORIAL1_X_X]=true;
bool hasPetalStorm=false;
@ -2036,6 +2063,13 @@ public:
CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->hidden=true;
}
}
if (ref->appliesPetrification) {
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
//Not implemented for the player.
} else {
PETRIFY_TURNS=3;
}
}
if (EFFECT_TIMER>ref->effectTime) {
EFFECT_TIMER=0;
clearPixelEffect();
@ -2109,6 +2143,7 @@ public:
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
BATTLE_DROUGHT_ACTIVE=false;
std::cout<<"Drought turned off.\n";
PETRIFY_TURNS=std::clamp(PETRIFY_TURNS-1,0,3);
} else {
if (CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->lastSlowVal==CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->speed&&
CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->speed!=0&&rand()%3==0) {
@ -3343,7 +3378,12 @@ public:
}
}
} else {
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
if (power->dealsPctDmg) {
finalDamage=PLAYER_HP*power->pctDmg;
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
} else {
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
}
CreateDisplayNumber(finalDamage,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY,frameCount);
}
}
@ -3394,7 +3434,7 @@ public:
PLAYER_TURN_COMPLETE=false;
BATTLE_STATE=battle::MOVE_RESOLUTION;
//Seed Storm has prio.
if (!PLAYER_TURN_COMPLETE&&isPriorityMove(BATTLE_CARD_SELECTION)) {
if (!PLAYER_TURN_COMPLETE&&isPriorityMove(BATTLE_CARD_SELECTION)&&PETRIFY_TURNS==0) {
turnOrder.push(-1);
PLAYER_TURN_COMPLETE=true;
}
@ -3406,14 +3446,14 @@ public:
}
}
//Healing has half prio for the player.
if (rand()%2==0&&!PLAYER_TURN_COMPLETE&&isFoodMove(BATTLE_CARD_SELECTION)) {
if (rand()%2==0&&!PLAYER_TURN_COMPLETE&&isFoodMove(BATTLE_CARD_SELECTION)&&PETRIFY_TURNS==0) {
turnOrder.push(-1);
PLAYER_TURN_COMPLETE=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 (rand()%2==0&&!PLAYER_TURN_COMPLETE&&isFoodMove(BATTLE_CARD_SELECTION)) {
if (rand()%2==0&&!PLAYER_TURN_COMPLETE&&isFoodMove(BATTLE_CARD_SELECTION)&&PETRIFY_TURNS==0) {
turnOrder.push(-1);
PLAYER_TURN_COMPLETE=true;
}
@ -3423,7 +3463,7 @@ public:
ent->turnComplete=true;
}
}
if (!PLAYER_TURN_COMPLETE) {
if (!PLAYER_TURN_COMPLETE&&PETRIFY_TURNS==0) {
turnOrder.push(-1);
PLAYER_TURN_COMPLETE=true;
}
@ -3655,7 +3695,9 @@ public:
bool isBuffMove(WEATHER_POWER*power) { //ONLY Buff moves with no damaging/healing effects go in here.
return
power->name.compare("Hide")==0||
power->name.compare("Hyper Zap")==0;
power->name.compare("Hyper Zap")==0||
power->name.compare("Glare")==0||
power->name.compare("Petrify")==0;
}
bool isFoodMove(WEATHER_POWER*power) {
@ -3763,12 +3805,21 @@ public:
buffPos.x+=16;
}
} else {
vi2d buffPos={0,0};
//Draw Player's Buffs.
if (FOOD_REGEN_TURNS>0) {
DrawDecal(pos,HP_REGEN_DECAL);
std::string txt=std::to_string(FOOD_REGEN_TURNS);
DrawStringDecal({pos.x+16-GetTextSize(txt).x+1,pos.y+16-GetTextSize(txt).y+1},txt,VERY_DARK_GREEN);
DrawStringDecal({pos.x+16-GetTextSize(txt).x,pos.y+16-GetTextSize(txt).y},txt);
DrawStringDecal({pos.x+buffPos.x-GetTextSize(txt).x+1,pos.y+16-GetTextSize(txt).y+1},txt,VERY_DARK_GREEN);
DrawStringDecal({pos.x+buffPos.x-GetTextSize(txt).x,pos.y+16-GetTextSize(txt).y},txt);
buffPos.x+=16;
}
if (PETRIFY_TURNS>0) {
DrawDecal(pos,PETRIFY_DECAL);
std::string txt=std::to_string(PETRIFY_TURNS);
DrawStringDecal({pos.x+buffPos.x-GetTextSize(txt).x+1,pos.y+16-GetTextSize(txt).y+1},txt,VERY_DARK_GREEN);
DrawStringDecal({pos.x+buffPos.x-GetTextSize(txt).x,pos.y+16-GetTextSize(txt).y},txt);
buffPos.x+=16;
}
}
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Loading…
Cancel
Save