diff --git a/SeasonsOfLoneliness.cpp b/SeasonsOfLoneliness.cpp index b5041a7..fa796a7 100644 --- a/SeasonsOfLoneliness.cpp +++ b/SeasonsOfLoneliness.cpp @@ -14,6 +14,7 @@ using namespace olc; #define SKIP_INTRO true #define SKIP_CHAPTER1 true +#define SKIP_BOSS true #define SKIP_CHAPTER2 false #define SKIP_CHAPTER3 false @@ -77,6 +78,7 @@ namespace cutscene{ SHAKE, INVESTIGATE_X_X, CHECK_COORDS, + SPAWN_WORMS, }; } @@ -109,6 +111,7 @@ namespace gameflag{ TUTORIAL2_X_X, CHECK_ROVER, NEXT_COORDS, + COLLECTED_SILICON_2, }; } @@ -129,7 +132,8 @@ class Seed{ namespace reasoncode{ enum Code{ SEED_GROWTH, - TREE_BURN + TREE_BURN, + DROUGHT }; } @@ -578,9 +582,11 @@ public: int MAIN_MENU_SELECTION=0; std::string MENU_OPTIONS[4]={"NEW GAME","CONTINUE","MUTE SOUND","EXIT"}; int BATTLE_REASON_CODE=-1; + bool BATTLE_DROUGHT_ACTIVE=false; Map*MAP_1=new Map("map1"); Map*MAP_2=new Map("map2"); + Map*MAP_3=new Map("map3"); Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL, *PLAYER_DECAL, @@ -594,6 +600,7 @@ public: std::vector ENCOUNTERS; Encounter ENCOUNTER_SPIDEY_1; Encounter ENCOUNTER_X_X; + Encounter ENCOUNTER_SANDWORM_1; Encounter CURRENT_ENCOUNTER; std::vectorMOVESET_SPIDEY; std::vectorMOVESET_SANDWORM; @@ -649,6 +656,14 @@ public: if (SKIP_CHAPTER3) { } + if (SKIP_BOSS) { + GAME_FLAGS[gameflag::SLEEP]=true; + GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]=true; + GAME_FLAGS[gameflag::ANALYSIS_X_X]=true; + GAME_FLAGS[gameflag::TUTORIAL1_X_X]=true; + GAME_FLAGS[gameflag::TUTORIAL2_X_X]=true; + GAME_STATE=GAMEWORLD; + } SONG_MAIN = sound::Wave("./assets/SeasonsOfLoneliness.wav"); @@ -882,6 +897,14 @@ public: ENCOUNTER_X_X.playerX=3; ENCOUNTER_X_X.playerY=2; ENCOUNTER_X_X.map=MAP_1; + ENCOUNTER_SANDWORM_1.entities.push_back(new Entity(SANDWORM_DECAL,"Sandworm",2,1,165,165,MOVESET_SANDWORM)); + ENCOUNTER_SANDWORM_1.entities.push_back(new Entity(SANDWORM_DECAL,"Sandworm",3,4,165,165,MOVESET_SANDWORM)); + ENCOUNTER_SANDWORM_1.entities.push_back(new Entity(SANDWORM_DECAL,"Sandworm",6,3,165,165,MOVESET_SANDWORM)); + ENCOUNTER_SANDWORM_1.x=20-4; + ENCOUNTER_SANDWORM_1.y=73-3.5; + ENCOUNTER_SANDWORM_1.playerX=4; + ENCOUNTER_SANDWORM_1.playerY=3.5; + ENCOUNTER_SANDWORM_1.map=MAP_3; //ENCOUNTERS.push_back(ENCOUNTER_X_X); //Activate at beginning of Chapter 2. BASE_OBJECTS["DOME"]=new ObjectLoadInfo(DOME_DECAL); @@ -1200,11 +1223,19 @@ public: } switch (CURRENT_CUTSCENE) { case cutscene::TRANSITION_CUTSCENE:{ - LoadMap(MAP_1); - PLAYER_COORDS[0]=40.5; - PLAYER_COORDS[1]=37.5; - fadeIn(); - EndCutscene(); + if (GAME_FLAGS[gameflag::CHECK_ROVER]) { + LoadMap(MAP_3); + PLAYER_COORDS[0]=40.5; + PLAYER_COORDS[1]=37.5; + fadeIn(); + EndCutscene(); + } else { + LoadMap(MAP_1); + PLAYER_COORDS[0]=40.5; + PLAYER_COORDS[1]=37.5; + fadeIn(); + EndCutscene(); + } if (!GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]) { GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]=true; PlayCutscene(cutscene::WALK_TO_ROVER); @@ -1737,7 +1768,7 @@ public: PIXEL_EFFECT_TRANSPARENCY=(0.5*cos(((M_PI/(30.0*(ref->effectTime/120.0)))/2)*EFFECT_TIMER-M_PI)+0.5); if (EFFECT_TIMER==30&&ref->name.compare("Petal Storm")==0) { int healPower=30; - int healRoll=healPower+rand()%ref->damageRoll*sign(healPower); + int healRoll=healPower+rand()%ref->damageRoll*sign(healPower)*(BATTLE_DROUGHT_ACTIVE?0.5:1); if (BATTLE_CURRENT_TURN_ENTITY==-1) { effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,-healRoll,true); } else { @@ -1757,7 +1788,7 @@ public: 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); + 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); } @@ -1797,6 +1828,10 @@ public: if (ref->burnTrees&&TREES.size()>0&&ref->treeBurnChance>range(0,1)){ BATTLE_REASON_CODE=reasoncode::TREE_BURN; BATTLE_STATE=battle::WAIT_TURN_ANIMATION2; + } else + if (ref==DROUGHT) { + BATTLE_REASON_CODE=reasoncode::DROUGHT; + BATTLE_STATE=battle::WAIT_TURN_ANIMATION2; } else { BATTLE_REASON_CODE=-1; BATTLE_STATE=battle::DAMAGE_RESOLUTION; @@ -1814,12 +1849,15 @@ public: case reasoncode::TREE_BURN:{ applyPixelEffect(FIRESTORM_EFF,BATTLE_PLAYER_COORDS,0); }break; + case reasoncode::DROUGHT:{ + applyPixelEffect(DROUGHT_EFF,BATTLE_PLAYER_COORDS,0); + }break; } } if (EFFECT_TIMER==60) { switch (BATTLE_REASON_CODE) { case reasoncode::SEED_GROWTH:{ - int healAmt=-10*SEEDS.size(); + int healAmt=-10*SEEDS.size()*(BATTLE_DROUGHT_ACTIVE?0.5:1); 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()); @@ -2153,6 +2191,35 @@ public: } } }break; + case cutscene::SPAWN_WORMS:{ + if (CUTSCENE_TIMER<60) { + if (frameCount%4==0) { + PLAYER_COORDS[1]+=0.25; + } else + if (frameCount%4==1) { + PLAYER_COORDS[1]+=0.25; + } else + if (frameCount%4==2) { + PLAYER_COORDS[1]-=0.25; + } else + if (frameCount%4==3) { + PLAYER_COORDS[1]-=0.25; + } + } else { + if (!messageBoxVisible) { + if (!CUTSCENE_FLAGS[0]) { + CUTSCENE_FLAGS[0]=true; + CUTSCENE_OBJS[1]=CreateObject({PLAYER_COORDS[0]-2,PLAYER_COORDS[1]-3},SANDWORM_DECAL,true); + CUTSCENE_OBJS[2]=CreateObject({PLAYER_COORDS[0]-3,PLAYER_COORDS[1]+1},SANDWORM_DECAL,true); + CUTSCENE_OBJS[3]=CreateObject({PLAYER_COORDS[0]+0,PLAYER_COORDS[1]-1},SANDWORM_DECAL,true); + DisplayMessageBox(30); + } else { + EndCutscene(); + ENCOUNTERS.push_back(ENCOUNTER_SANDWORM_1); + } + } + } + }break; } if (GAME_STATE==CUTSCENE_3&&!SOUND_IS_PLAYING) { @@ -2223,11 +2290,22 @@ public: }break; case COLLECTED_SILICON:{ if (!messageBoxVisible) { - if (!GAME_FLAGS[gameflag::COLLECTED_SILICON_1]) { - GAME_FLAGS[gameflag::COLLECTED_SILICON_1]=true; - DisplayMessageBox(15); + if (CURRENT_MAP==MAP_3) { + if (!GAME_FLAGS[gameflag::COLLECTED_SILICON_2]) { + GAME_FLAGS[gameflag::COLLECTED_SILICON_2]=true; + DisplayMessageBox(29); + } else { + GAME_STATE=GAMEWORLD; + StartCutscene(cutscene::SPAWN_WORMS); + CUTSCENE_OBJS[0]=CreateObject({PLAYER_COORDS[0],PLAYER_COORDS[1]},PLAYER_DECAL,playerAnimDown,true); + } } else { - GAME_STATE=GAMEWORLD; + if (!GAME_FLAGS[gameflag::COLLECTED_SILICON_1]) { + GAME_FLAGS[gameflag::COLLECTED_SILICON_1]=true; + DisplayMessageBox(15); + } else { + GAME_STATE=GAMEWORLD; + } } } }break; @@ -2410,6 +2488,10 @@ public: 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; + case reasoncode::DROUGHT:{ + DrawWrappedText({5,5},"A drought is active, causing healing to be reduced!",WIDTH-8,DARK_MAGENTA,{2,2}); + DrawWrappedText({4,4},"A drought is active, causing healing to be reduced!",WIDTH-8,WHITE,{2,2}); + }break; } }break; } @@ -2859,9 +2941,8 @@ public: foodCount--; } else if (power->damage==-1001) { - //Instead heal for their max health. FOOD_REGEN_TURNS=4; - finalDamage=-PLAYER_MAXHP*0.33; + finalDamage=-PLAYER_MAXHP*0.33*(BATTLE_DROUGHT_ACTIVE?0.5:1); foodCount--; } PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP); @@ -3075,7 +3156,7 @@ public: PLAYER_COORDS[1]=teleLoc.y+0.5; } - Object*CreateObject(vf2d pos,Decal*spr,int ,bool temporary=false) { + Object*CreateObject(vf2d pos,Decal*spr,bool temporary=false) { Object*newobj; OBJECTS.push_back(newobj=new Object(spr)); newobj->x=pos.x; diff --git a/Seasons_of_Loneliness b/Seasons_of_Loneliness index 131c821..f1be824 100755 Binary files a/Seasons_of_Loneliness and b/Seasons_of_Loneliness differ diff --git a/assets/maps/map3 b/assets/maps/map3 index 9c26051..dd35ff3 100644 --- a/assets/maps/map3 +++ b/assets/maps/map3 @@ -107,4 +107,5 @@ 116;11;NADO 120;11;NADO 122;13;NADO -121;9;SILICON_PIECE \ No newline at end of file +121;9;SILICON_PIECE +20;73;SILICON_PIECE \ No newline at end of file diff --git a/data.h b/data.h index 9968602..9f57e9c 100644 --- a/data.h +++ b/data.h @@ -115,6 +115,12 @@ SIGNS INDICATE TRACES OF SILICON LOCATION ::: SOUTHWEST)",//27 R"( $PLAYER Perfect! We can improve the tracking ability by collecting more of these! Then hopefully the signal will become strong enough...)",//28 +R"( +$PLAYER +Well that was simpl-... Eh?)",//29 +R"( +$PLAYER +Worms? Don't think they're here to play either.)",//30 };