diff --git a/SeasonsOfLoneliness.cpp b/SeasonsOfLoneliness.cpp index cc9f4a1..ac83d36 100644 --- a/SeasonsOfLoneliness.cpp +++ b/SeasonsOfLoneliness.cpp @@ -55,7 +55,9 @@ namespace cutscene{ WALK_TO_COMPUTER, INPUT_USERNAME, GO_OUTSIDE, - WALK_TO_ROVER + WALK_TO_ROVER, + DISPLAY_VOLCANIC_AREA, + END_VOLCANIC_AREA_CUTSCENE, }; } @@ -76,9 +78,16 @@ namespace battle{ namespace gameflag{ enum FLAG{ TUTORIAL_WALKED_OFF_FARM, + VISIT_BROKEN_ROVER, }; } +enum MOVEMENT_PRIORITY{ + HORZ_FIRST, + VERT_FIRST, + BOTH +}; + #define MAX_TERMINAL_NAME_LENGTH 6 #define WIDTH 256 #define HEIGHT 224 @@ -367,6 +376,7 @@ public: Animation POWER_SNOWSTORM_ANIMATION; Animation CONSUME_SNACK_ANIMATION; Animation CONSUME_MEAL_ANIMATION; + Animation NADO_ANIMATION; ParticleEffect*HAILSTORM_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{1,1},{4,4},{-2,0.5},{-0.5,2},Pixel(143, 242, 255,255),Pixel(255,255,255,255),300,Pixel(220, 226, 227,0)); ParticleEffect*HURRICANE_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{1,1},{2,2},{-4,1},{-1,4},Pixel(225, 248, 252,64),Pixel(255,255,255,128),300,Pixel(220, 226, 227,0)); ParticleEffect*METEOR_RAIN_EFF = new ParticleEffect({0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{3,3},{6,6},{-1,0.2},{-0.2,1},Pixel(46, 31, 31,255),Pixel(43, 31, 46,255),50,Pixel(30, 10, 36,0)); @@ -430,7 +440,8 @@ public: *PLAYER_DECAL, *WEATHERNODE_EFFECT_DECAL,*POWER_HAILSTORM_DECAL,*POWER_HURRICANE_DECAL,*POWER_METEOR_SHOWER_DECAL,*POWER_METEOR_STORM_DECAL,*POWER_SNOWSTORM_DECAL, *SPIDEY_DECAL,*TARGETING_CIRCLE,*TARGETING_RANGE_CIRCLE,*HEALTHBAR_DECAL, - *CONSUME_SNACK_DECAL,*CONSUME_MEAL_DECAL,*COMPUTER_DECAL,*BROKEN_ROVER_DECAL; + *CONSUME_SNACK_DECAL,*CONSUME_MEAL_DECAL,*COMPUTER_DECAL,*BROKEN_ROVER_DECAL, + *NADO_DECAL; std::map BASE_OBJECTS; std::vector ENCOUNTERS; Encounter ENCOUNTER_SPIDEY_1; @@ -445,7 +456,7 @@ public: SetPixelMode(Pixel::ALPHA); ConsoleCaptureStdOut(true); - #define LAYERS 2 //How many layers exist. + #define LAYERS 3 //How many layers exist. for (int i=1;iplayerOwnCount=3; HURRICANE->playerOwnCount=1; @@ -575,6 +592,7 @@ public: BASE_OBJECTS["SNOWSTORM_NODE"]=new ObjectLoadInfo(POWER_SNOWSTORM_DECAL,&POWER_SNOWSTORM_ANIMATION); BASE_OBJECTS["COMPUTER"]=new ObjectLoadInfo(COMPUTER_DECAL); BASE_OBJECTS["BROKEN_ROVER"]=new ObjectLoadInfo(BROKEN_ROVER_DECAL); + BASE_OBJECTS["NADO"]=new ObjectLoadInfo(NADO_DECAL,&NADO_ANIMATION); Zone*SILICON_DEPOSIT_ZONE = new Zone({109,7},{26,9},{0,0},{WIDTH,HEIGHT},{0,0},{WIDTH,HEIGHT},{1,1},{3,3},{-30,-3},{30,3},Pixel(133, 98, 66,180),Pixel(220, 120, 90,230),300,Pixel(87, 78, 69,64)); @@ -789,6 +807,8 @@ public: SetDrawTarget(nullptr); Clear(BLANK); SetDrawTarget(1); + Clear(BLANK); + SetDrawTarget(2); drawGame(); // called once per frame return true; @@ -814,6 +834,10 @@ public: 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); + } }break; case cutscene::TRANSITION_CUTSCENE_2:{ LoadMap("assets/maps/map2"); @@ -821,11 +845,37 @@ public: fadeIn(); EndCutscene(); }break; + case cutscene::DISPLAY_VOLCANIC_AREA:{ + TeleportToMapFileCoords(13,122); + fadeIn(); + }break; + case cutscene::END_VOLCANIC_AREA_CUTSCENE:{ + PLAYER_COORDS[0]=33; + PLAYER_COORDS[1]=34; + ClearAllTemporaryObjects(); + fadeIn(); + }break; } } void fadeInCompleted() { + switch (CURRENT_CUTSCENE) { + case cutscene::DISPLAY_VOLCANIC_AREA:{ + CUTSCENE_FLAGS[0]=true; + }break; + case cutscene::END_VOLCANIC_AREA_CUTSCENE:{ + DisplayMessageBox(10); + EndCutscene(); + }break; + } + } + + void StartCutscene(cutscene::CUTSCENE scene) { + PlayCutscene(scene); + } + void RunCutscene(cutscene::CUTSCENE scene) { + PlayCutscene(scene); } void PlayCutscene(cutscene::CUTSCENE scene) { @@ -848,6 +898,10 @@ public: applyPixelEffect(HURRICANE,GetMapFileCoords(7,11),1); CUTSCENE_TIMER=0; }break; + case cutscene::WALK_TO_ROVER:{ + CUTSCENE_OBJS[0]=CreateObject({PLAYER_COORDS[0],PLAYER_COORDS[1]},PLAYER_DECAL,{32,0},{32,32},true); + CUTSCENE_OBJS[0]->flipped=true; + }break; } for (int i=0;i<8;i++) { CUTSCENE_FLAGS[i]=false; @@ -887,6 +941,23 @@ public: anim->frame=(anim->frame+1)%anim->frames.size(); } } + + if (!IN_BATTLE_ENCOUNTER) { + bool zoneEffectActive=false; + for (int i=0;i=z->pos.x&&PLAYER_COORDS[0]<=z->pos.x+z->size.x&& + PLAYER_COORDS[1]>=z->pos.y&&PLAYER_COORDS[1]<=z->pos.y+z->size.y) { + if (PIXEL_EFFECT_TRANSPARENCY==0) { + applyPixelEffect(z->eff,{PLAYER_COORDS[0],PLAYER_COORDS[1]},0.9); + } + zoneEffectActive=true; + } + } + if (!zoneEffectActive&&PIXEL_EFFECT_TRANSPARENCY>0) { + clearPixelEffect(); + } + } if (playerCanMove()) { bool animationchanged=false; @@ -942,20 +1013,6 @@ public: if (positionModified) { playerMoved(); } - bool zoneEffectActive=false; - for (int i=0;i=z->pos.x&&PLAYER_COORDS[0]<=z->pos.x+z->size.x&& - PLAYER_COORDS[1]>=z->pos.y&&PLAYER_COORDS[1]<=z->pos.y+z->size.y) { - if (PIXEL_EFFECT_TRANSPARENCY==0) { - applyPixelEffect(z->eff,{PLAYER_COORDS[0],PLAYER_COORDS[1]},0.9); - } - zoneEffectActive=true; - } - } - if (!zoneEffectActive&&PIXEL_EFFECT_TRANSPARENCY>0) { - clearPixelEffect(); - } for (int i=0;iname.compare("HAILSTORM_NODE")==0&&collidesWithPlayer(obj)) { @@ -1311,6 +1368,47 @@ public: } } }break; + case cutscene::WALK_TO_ROVER:{ + if (MoveObjectTowardsPoint({33,36},CUTSCENE_OBJS[0],HORZ_FIRST)) { + CUTSCENE_OBJS[0]->spos={64,0}; + } + if (MoveCameraTowardsPoint({33,36})) { + if (!CUTSCENE_FLAGS[0]) { + CUTSCENE_FLAGS[0]=true; + CUTSCENE_TIMER=0; + } + if (CUTSCENE_TIMER>60) { + if (!messageBoxVisible) { + if (!CUTSCENE_FLAGS[3]) { + CUTSCENE_FLAGS[3]=true; + DisplayMessageBox(13); + } else + if (!CUTSCENE_FLAGS[1]) { + CUTSCENE_FLAGS[1]=true; + DisplayMessageBox(7); + } else + if (!CUTSCENE_FLAGS[2]) { + CUTSCENE_FLAGS[2]=true; + DisplayMessageBox(8); + } else { + PlayCutscene(cutscene::DISPLAY_VOLCANIC_AREA); + fadeOut(); + } + } + } + } + }break; + case cutscene::DISPLAY_VOLCANIC_AREA:{ + if (CUTSCENE_FLAGS[0]&&!messageBoxVisible) { + if (!CUTSCENE_FLAGS[1]) { + CUTSCENE_FLAGS[1]=true; + DisplayMessageBox(9); + } else { + fadeOut(); + PlayCutscene(cutscene::END_VOLCANIC_AREA_CUTSCENE); + } + } + }break; } switch (GAME_STATE) { @@ -1450,6 +1548,7 @@ public: DrawGameWorld(); int meterYOffset=2; if (CURRENT_CUTSCENE==cutscene::NONE) { + SetDrawTarget(nullptr); if (foodMeterVisible) { DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(foodCount)).x*1-8,meterYOffset+1},std::to_string(foodCount),BLACK,{1,1}); DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(foodCount)).x*1-7,meterYOffset+2},std::to_string(foodCount),WHITE,{1,1}); @@ -1466,6 +1565,7 @@ public: if (IN_BATTLE_ENCOUNTER&&BATTLE_ENTRY_TIMER<45) { DrawStringDecal({WIDTH/2-16+(current_playerAnim.flipped?32:0)+8,HEIGHT/2-16-sin(frameCount*12/60.0)*4-12},"!!",RED); } + SetDrawTarget(2); } }break; case CUTSCENE_3:{ @@ -1522,7 +1622,7 @@ public: } } if (PIXEL_EFFECT_TRANSPARENCY>0) { - SetDrawTarget(nullptr); + SetDrawTarget(1); for (int i=0;isize.x==1&&pixels[i]->size.y==1) { Draw(pixels[i]->pos,{pixels[i]->r,pixels[i]->g,pixels[i]->b,pixels[i]->a}); @@ -1531,9 +1631,10 @@ public: } } FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(ORIGINAL_FOREGROUND_EFFECT_COLOR.r,ORIGINAL_FOREGROUND_EFFECT_COLOR.g,ORIGINAL_FOREGROUND_EFFECT_COLOR.b,ORIGINAL_FOREGROUND_EFFECT_COLOR.a*PIXEL_EFFECT_TRANSPARENCY)); - SetDrawTarget(1); + SetDrawTarget(2); } if (messageBoxVisible) { + SetDrawTarget(nullptr); DrawDialogBox({4,HEIGHT-60},{WIDTH/2,16},Pixel(18, 0, 33,180)); DrawDialogBox({0,HEIGHT-48},{WIDTH,48},Pixel(18, 0, 33,180)); DrawStringPropDecal({8,HEIGHT-40},messageBoxText); @@ -1541,6 +1642,7 @@ public: if (messageBoxCursor==messageBoxRefText.length()) { DrawStringPropDecal({WIDTH-16-(float)sin(frameCount*8/60.0)*3,HEIGHT-8+(float)(cos(frameCount*6/60.0)*0.6)},"v",Pixel(173, 74, 255,(0.5*sin(frameCount*8/60.0)+0.5)*128+128),{(float)sin(frameCount*8/60.0),0.5}); } + SetDrawTarget(2); } switch (CURRENT_CUTSCENE) { case cutscene::NODE_COLLECT_CUTSCENE:{ @@ -1690,20 +1792,13 @@ public: fade=false; } + void StopCutscene() { + EndCutscene(); + } + void EndCutscene() { CURRENT_CUTSCENE=cutscene::NONE; - for (int i=0;i<8;i++) { - for (int j=0;jtempObj) { - OBJECTS.erase(OBJECTS.begin()+j); - std::cout<<"Erased at position "<tempObj) { - delete OBJECTS[i]; - OBJECTS.erase(OBJECTS.begin()+i--); + for (int i=0;i<8;i++) { + for (int j=0;jtempObj) { + OBJECTS.erase(OBJECTS.begin()+j); + std::cout<<"Erased at position "<x!=pos.x) { + if (obj->xx+=spd; + if (obj->x>pos.x) { + obj->x=pos.x; + } + } else { + obj->x-=spd; + if (obj->xx=pos.x; + } + } + reachedPosition=false; + } else + if (!secondRun&&movementStyle!=BOTH) { + MoveObjectTowardsPoint(pos,obj,VERT_FIRST,spd,true); + } + } + if (movementStyle==VERT_FIRST||movementStyle==BOTH) { + if (obj->y!=pos.y) { + if (obj->yy+=spd; + if (obj->y>pos.y) { + obj->y=pos.y; + } + } else { + obj->y-=spd; + if (obj->yy=pos.y; + } + } + reachedPosition=false; + } else + if (!secondRun&&movementStyle!=BOTH) { + MoveObjectTowardsPoint(pos,obj,HORZ_FIRST,spd,true); + } + } + return reachedPosition; + } }; diff --git a/Seasons_of_Loneliness b/Seasons_of_Loneliness index d915b81..7ef4af8 100755 Binary files a/Seasons_of_Loneliness and b/Seasons_of_Loneliness differ diff --git a/assets/maps/map1 b/assets/maps/map1 index 1ab5354..f645aca 100644 --- a/assets/maps/map1 +++ b/assets/maps/map1 @@ -85,4 +85,11 @@ 202;33;METEORSTORM_NODE 167;44;SNOWSTORM_NODE 20;10;HURRICANE_NODE -33;35;BROKEN_ROVER \ No newline at end of file +33;35;BROKEN_ROVER +116;8;NADO +120;9;NADO +123;7;NADO +122;10;NADO +116;11;NADO +120;11;NADO +122;13;NADO \ No newline at end of file diff --git a/assets/nado.png b/assets/nado.png new file mode 100644 index 0000000..fd5d896 Binary files /dev/null and b/assets/nado.png differ diff --git a/data.h b/data.h index 3741376..55f34c3 100644 --- a/data.h +++ b/data.h @@ -48,7 +48,7 @@ $PLAYER So those dust columns only form around large hole deposits. This is usually where volcanic activity subsides, and usually dense rich in minerals!)",//9 R"( $PLAYER -We'll head there.)",//10 +We'll head there. I recall seeing some volcanic rock North-East of here.)",//10 R"( $PLAYER What a great harvest!)",//11 diff --git a/ideas b/ideas index e8740ee..2b5e31c 100644 --- a/ideas +++ b/ideas @@ -80,4 +80,6 @@ a little baffled." "Winds" - Winds interact with Seeds and Fire. "Petal Storm" - A petal storm causes Seeds to scatter and minor damage. -"" \ No newline at end of file +"" +============== +Go the whole game nameless (Do not farm food) \ No newline at end of file