Healing reduction due to drought

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent ffdc088e24
commit 6a05a3e323
  1. 113
      SeasonsOfLoneliness.cpp
  2. BIN
      Seasons_of_Loneliness
  3. 3
      assets/maps/map3
  4. 6
      data.h

@ -14,6 +14,7 @@ using namespace olc;
#define SKIP_INTRO true #define SKIP_INTRO true
#define SKIP_CHAPTER1 true #define SKIP_CHAPTER1 true
#define SKIP_BOSS true
#define SKIP_CHAPTER2 false #define SKIP_CHAPTER2 false
#define SKIP_CHAPTER3 false #define SKIP_CHAPTER3 false
@ -77,6 +78,7 @@ namespace cutscene{
SHAKE, SHAKE,
INVESTIGATE_X_X, INVESTIGATE_X_X,
CHECK_COORDS, CHECK_COORDS,
SPAWN_WORMS,
}; };
} }
@ -109,6 +111,7 @@ namespace gameflag{
TUTORIAL2_X_X, TUTORIAL2_X_X,
CHECK_ROVER, CHECK_ROVER,
NEXT_COORDS, NEXT_COORDS,
COLLECTED_SILICON_2,
}; };
} }
@ -129,7 +132,8 @@ class Seed{
namespace reasoncode{ namespace reasoncode{
enum Code{ enum Code{
SEED_GROWTH, SEED_GROWTH,
TREE_BURN TREE_BURN,
DROUGHT
}; };
} }
@ -578,9 +582,11 @@ public:
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; int BATTLE_REASON_CODE=-1;
bool BATTLE_DROUGHT_ACTIVE=false;
Map*MAP_1=new Map("map1"); Map*MAP_1=new Map("map1");
Map*MAP_2=new Map("map2"); Map*MAP_2=new Map("map2");
Map*MAP_3=new Map("map3");
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,
@ -594,6 +600,7 @@ public:
std::vector<Encounter> ENCOUNTERS; std::vector<Encounter> ENCOUNTERS;
Encounter ENCOUNTER_SPIDEY_1; Encounter ENCOUNTER_SPIDEY_1;
Encounter ENCOUNTER_X_X; Encounter ENCOUNTER_X_X;
Encounter ENCOUNTER_SANDWORM_1;
Encounter CURRENT_ENCOUNTER; Encounter CURRENT_ENCOUNTER;
std::vector<WEATHER_POWER*>MOVESET_SPIDEY; std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
std::vector<WEATHER_POWER*>MOVESET_SANDWORM; std::vector<WEATHER_POWER*>MOVESET_SANDWORM;
@ -649,6 +656,14 @@ public:
if (SKIP_CHAPTER3) { 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"); SONG_MAIN = sound::Wave("./assets/SeasonsOfLoneliness.wav");
@ -882,6 +897,14 @@ public:
ENCOUNTER_X_X.playerX=3; ENCOUNTER_X_X.playerX=3;
ENCOUNTER_X_X.playerY=2; ENCOUNTER_X_X.playerY=2;
ENCOUNTER_X_X.map=MAP_1; 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. //ENCOUNTERS.push_back(ENCOUNTER_X_X); //Activate at beginning of Chapter 2.
BASE_OBJECTS["DOME"]=new ObjectLoadInfo(DOME_DECAL); BASE_OBJECTS["DOME"]=new ObjectLoadInfo(DOME_DECAL);
@ -1200,11 +1223,19 @@ public:
} }
switch (CURRENT_CUTSCENE) { switch (CURRENT_CUTSCENE) {
case cutscene::TRANSITION_CUTSCENE:{ case cutscene::TRANSITION_CUTSCENE:{
LoadMap(MAP_1); if (GAME_FLAGS[gameflag::CHECK_ROVER]) {
PLAYER_COORDS[0]=40.5; LoadMap(MAP_3);
PLAYER_COORDS[1]=37.5; PLAYER_COORDS[0]=40.5;
fadeIn(); PLAYER_COORDS[1]=37.5;
EndCutscene(); 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]) { if (!GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]) {
GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]=true; GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]=true;
PlayCutscene(cutscene::WALK_TO_ROVER); 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); 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) { if (EFFECT_TIMER==30&&ref->name.compare("Petal Storm")==0) {
int healPower=30; 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) { if (BATTLE_CURRENT_TURN_ENTITY==-1) {
effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,-healRoll,true); effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,-healRoll,true);
} else { } else {
@ -1757,7 +1788,7 @@ public:
if (BATTLE_CURRENT_TURN_ENTITY==-1) { if (BATTLE_CURRENT_TURN_ENTITY==-1) {
if (FOOD_REGEN_TURNS>0) { if (FOOD_REGEN_TURNS>0) {
FOOD_REGEN_TURNS--; 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); 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)){ if (ref->burnTrees&&TREES.size()>0&&ref->treeBurnChance>range(0,1)){
BATTLE_REASON_CODE=reasoncode::TREE_BURN; BATTLE_REASON_CODE=reasoncode::TREE_BURN;
BATTLE_STATE=battle::WAIT_TURN_ANIMATION2; BATTLE_STATE=battle::WAIT_TURN_ANIMATION2;
} else
if (ref==DROUGHT) {
BATTLE_REASON_CODE=reasoncode::DROUGHT;
BATTLE_STATE=battle::WAIT_TURN_ANIMATION2;
} else { } else {
BATTLE_REASON_CODE=-1; BATTLE_REASON_CODE=-1;
BATTLE_STATE=battle::DAMAGE_RESOLUTION; BATTLE_STATE=battle::DAMAGE_RESOLUTION;
@ -1814,12 +1849,15 @@ public:
case reasoncode::TREE_BURN:{ case reasoncode::TREE_BURN:{
applyPixelEffect(FIRESTORM_EFF,BATTLE_PLAYER_COORDS,0); applyPixelEffect(FIRESTORM_EFF,BATTLE_PLAYER_COORDS,0);
}break; }break;
case reasoncode::DROUGHT:{
applyPixelEffect(DROUGHT_EFF,BATTLE_PLAYER_COORDS,0);
}break;
} }
} }
if (EFFECT_TIMER==60) { if (EFFECT_TIMER==60) {
switch (BATTLE_REASON_CODE) { switch (BATTLE_REASON_CODE) {
case reasoncode::SEED_GROWTH:{ 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); CreateDisplayNumber(healAmt,BATTLE_PLAYER_COORDS.x,BATTLE_PLAYER_COORDS.y,frameCount);
PLAYER_HP=std::clamp(PLAYER_HP+healAmt*-1,0,PLAYER_MAXHP); PLAYER_HP=std::clamp(PLAYER_HP+healAmt*-1,0,PLAYER_MAXHP);
addTrees(SEEDS.size()); addTrees(SEEDS.size());
@ -2153,6 +2191,35 @@ public:
} }
} }
}break; }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) { if (GAME_STATE==CUTSCENE_3&&!SOUND_IS_PLAYING) {
@ -2223,11 +2290,22 @@ public:
}break; }break;
case COLLECTED_SILICON:{ case COLLECTED_SILICON:{
if (!messageBoxVisible) { if (!messageBoxVisible) {
if (!GAME_FLAGS[gameflag::COLLECTED_SILICON_1]) { if (CURRENT_MAP==MAP_3) {
GAME_FLAGS[gameflag::COLLECTED_SILICON_1]=true; if (!GAME_FLAGS[gameflag::COLLECTED_SILICON_2]) {
DisplayMessageBox(15); 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 { } 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; }break;
@ -2410,6 +2488,10 @@ public:
DrawWrappedText({5,5},"The trees cause rampaging fires!",WIDTH-8,DARK_RED,{2,2}); 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}); DrawWrappedText({4,4},"The trees cause rampaging fires!",WIDTH-8,WHITE,{2,2});
}break; }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; }break;
} }
@ -2859,9 +2941,8 @@ public:
foodCount--; foodCount--;
} else } else
if (power->damage==-1001) { if (power->damage==-1001) {
//Instead heal for their max health.
FOOD_REGEN_TURNS=4; FOOD_REGEN_TURNS=4;
finalDamage=-PLAYER_MAXHP*0.33; finalDamage=-PLAYER_MAXHP*0.33*(BATTLE_DROUGHT_ACTIVE?0.5:1);
foodCount--; foodCount--;
} }
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP); PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
@ -3075,7 +3156,7 @@ public:
PLAYER_COORDS[1]=teleLoc.y+0.5; 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; Object*newobj;
OBJECTS.push_back(newobj=new Object(spr)); OBJECTS.push_back(newobj=new Object(spr));
newobj->x=pos.x; newobj->x=pos.x;

Binary file not shown.

@ -107,4 +107,5 @@
116;11;NADO 116;11;NADO
120;11;NADO 120;11;NADO
122;13;NADO 122;13;NADO
121;9;SILICON_PIECE 121;9;SILICON_PIECE
20;73;SILICON_PIECE

@ -115,6 +115,12 @@ SIGNS INDICATE TRACES OF SILICON LOCATION ::: SOUTHWEST)",//27
R"( R"(
$PLAYER $PLAYER
Perfect! We can improve the tracking ability by collecting more of these! Then hopefully the signal will become strong enough...)",//28 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
}; };

Loading…
Cancel
Save