diff --git a/SeasonsOfLoneliness.cpp b/SeasonsOfLoneliness.cpp index 8c26c8a..d3bba41 100644 --- a/SeasonsOfLoneliness.cpp +++ b/SeasonsOfLoneliness.cpp @@ -132,6 +132,7 @@ namespace gameflag{ STORY_REVIEW, NEXT_COORDS2, CHECK_ROVER_4, + LITTLESNAKES_KILLED, }; } @@ -444,6 +445,7 @@ class PlayerState{ int foodCount; std::vector weatherPowerCounts; float x,y; + bool gameFlags[128]={}; }; class SeasonsOfLoneliness : public PixelGameEngine @@ -552,7 +554,7 @@ public: 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)); + ParticleEffect*MEGAFANG_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); @@ -581,9 +583,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); + WEATHER_POWER*GLARE = new WEATHER_POWER("Glare","",POWER_SOLARFLARE_ANIMATION,POWER_SOLARFLARE_ANIMATION,1,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,1,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,1,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; @@ -800,6 +802,7 @@ public: LAUNCHPAD_HALF2_DECAL=new Decal(new Sprite("assets/launchpad_half2.png")); LAUNCHPAD_DECAL=new Decal(new Sprite("assets/launchpad_back.png")); Y_Y_DECAL=new Decal(new Sprite("assets/Y.Y.png")); + PETRIFY_DECAL=new Decal(new Sprite("assets/petrify.png")); playerAnim->spr=PLAYER_DECAL; playerAnimRight->spr=PLAYER_DECAL; @@ -937,6 +940,9 @@ public: SNOWSTORM->appliesSlow=true; HIDE->appliesHide=true; HYPERZAP->appliesSpeed=true; + PETRIFY->appliesPetrification=true; + MEGA_FANG->dealsPctDmg=true; + MEGA_FANG->pctDmg=0.49; LIGHT_STORM->lowPriority=true; @@ -1033,7 +1039,7 @@ public: 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,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,"Sidewinder",4,3,0,1065,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,0,225,MOVESET_SNAKE)); ENCOUNTER_SNAKEPACK.x=11-4; @@ -1929,6 +1935,11 @@ public: case battle::PLAYER_SELECTION:{ if (PETRIFY_TURNS>0) { setupBattleTurns(); + if (FOOD_REGEN_TURNS>0) { + FOOD_REGEN_TURNS--; + PLAYER_HP=std::clamp(PLAYER_HP+(int)((PLAYER_MAXHP*0.33)*(BATTLE_DROUGHT_ACTIVE?0.5:1)),0,PLAYER_MAXHP); + CreateDisplayNumber((int)(-PLAYER_MAXHP*0.33),CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY,frameCount); + } } if (!GAME_FLAGS[gameflag::TUTORIAL1_X_X]&&GAME_FLAGS[gameflag::ANALYSIS_X_X]) { GAME_FLAGS[gameflag::TUTORIAL1_X_X]=true; @@ -2165,6 +2176,23 @@ public: } } if (allDead) { + bool snakeFight=false; + if (!GAME_FLAGS[gameflag::LITTLESNAKES_KILLED]) { + for (int i=0;iname.compare("Sidewinder")==0) { + snakeFight=true; + break; + } + } + if (snakeFight) { + GAME_FLAGS[gameflag::LITTLESNAKES_KILLED]=true; + CURRENT_ENCOUNTER.entities[1]->hp=CURRENT_ENCOUNTER.entities[1]->maxhp; + CURRENT_ENCOUNTER.entities[2]->hp=CURRENT_ENCOUNTER.entities[2]->maxhp; + CURRENT_ENCOUNTER.entities[4]->hp=CURRENT_ENCOUNTER.entities[4]->maxhp; + DisplayMessageBox(48); + break; + } + } IN_BATTLE_ENCOUNTER=false; ENCOUNTERS.erase(ENCOUNTERS.begin()+CURRENT_ENCOUNTER_IND); resetBattleState(); @@ -3234,16 +3262,18 @@ public: } bool collidesWithPlayer(Object*obj) { - if (obj->hasAnim) { - return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+obj->anim->width/32.0&& - PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+obj->anim->height/32.0; - } else { - if (obj->spr==NULL) { - return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+1&& - PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+1; + if (!IN_BATTLE_ENCOUNTER) { + if (obj->hasAnim) { + return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+obj->anim->width/32.0&& + PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+obj->anim->height/32.0; } else { - return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+obj->spr->sprite->width/32.0&& - PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+obj->spr->sprite->height/32.0; + if (obj->spr==NULL) { + return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+1&& + PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+1; + } else { + return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+obj->spr->sprite->width/32.0&& + PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+obj->spr->sprite->height/32.0; + } } } } @@ -3747,6 +3777,9 @@ public: for (int i=0;iweatherPowerCounts[i]=WEATHER_POWERS[i]->playerOwnCount; } + for (int i=0;i<128;i++) { + PREV_PLAYERSTATE->gameFlags[i]=GAME_FLAGS[i]; + } } void LoadPreviousPlayerState() { @@ -3758,6 +3791,9 @@ public: for (int i=0;iplayerOwnCount=PREV_PLAYERSTATE->weatherPowerCounts[i]; } + for (int i=0;i<128;i++) { + GAME_FLAGS[i]=PREV_PLAYERSTATE->gameFlags[i]; + } } void resetBattleState(){ diff --git a/Seasons_of_Loneliness b/Seasons_of_Loneliness index 350c452..678f716 100755 Binary files a/Seasons_of_Loneliness and b/Seasons_of_Loneliness differ diff --git a/data.h b/data.h index fabc776..7dc3cf1 100644 --- a/data.h +++ b/data.h @@ -191,6 +191,9 @@ SIGNS INDICATE TRACES OF SILICON LOCATION ::: NORTH)",//46 R"( $PLAYER This is it. Once I collect this one we can finally get a powerful enough signal (Finally!))",//47 +R"( +$PLAYER +What? Of course there's more of them.)",//48 };