From 95d0f85cffed26a2e5c9dabb3e6da6def1d7d324 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Tue, 30 Aug 2022 19:34:25 -0500 Subject: [PATCH] Zone effects Co-authored-by: sigonasr2 --- SeasonsOfLoneliness.cpp | 77 +++++++++++++++++++++++++++++++++------- assets/brokenROVER.png | Bin 0 -> 964 bytes assets/maps/map1 | 59 +++++++++++++++--------------- data.h | 3 ++ 4 files changed, 98 insertions(+), 41 deletions(-) create mode 100644 assets/brokenROVER.png diff --git a/SeasonsOfLoneliness.cpp b/SeasonsOfLoneliness.cpp index 53e7b55..ce7665f 100644 --- a/SeasonsOfLoneliness.cpp +++ b/SeasonsOfLoneliness.cpp @@ -55,6 +55,7 @@ namespace cutscene{ WALK_TO_COMPUTER, INPUT_USERNAME, GO_OUTSIDE, + WALK_TO_ROVER }; } @@ -264,6 +265,18 @@ class Encounter{ std::vector turnOrder; }; +class Zone{ + public: + vi2d pos; //In tile coordinates. + vi2d size; //In tile coordinates. + ParticleEffect*eff; + Zone(vi2d pos,vi2d size,vf2d effectPos,vf2d effectSize,vf2d pos_low,vf2d pos_high,vf2d size_low,vf2d size_high,vf2d spd_low,vf2d spd_high,olc::Pixel col_low,olc::Pixel col_high,int amt,olc::Pixel foregroundColor) { + this->pos=pos; + this->size=size; + this->eff=new ParticleEffect(effectPos,effectSize,pos_low,pos_high,size_low,size_high,spd_low,spd_high,col_low,col_high,amt,foregroundColor); + } +}; + namespace effect { class Pixel{ public: @@ -410,13 +423,14 @@ public: int TERMINAL_SELECTED_CHAR=0; std::string TERMINAL_INPUT=""; std::string PLAYER_NAME="..."; + std::vectorZONES; Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL, *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; + *CONSUME_SNACK_DECAL,*CONSUME_MEAL_DECAL,*COMPUTER_DECAL,*BROKEN_ROVER_DECAL; std::map BASE_OBJECTS; std::vector ENCOUNTERS; Encounter ENCOUNTER_SPIDEY_1; @@ -458,6 +472,7 @@ public: TARGETING_RANGE_CIRCLE=new Decal(new Sprite("assets/targetRange.png")); HEALTHBAR_DECAL=new Decal(new Sprite("assets/healthbar.png")); COMPUTER_DECAL=new Decal(new Sprite("assets/computerSystem.png")); + BROKEN_ROVER_DECAL=new Decal(new Sprite("assets/brokenROVER.png")); current_playerAnim.spr=PLAYER_DECAL; playerAnim.spr=PLAYER_DECAL; @@ -559,6 +574,11 @@ public: BASE_OBJECTS["METEORSTORM_NODE"]=new ObjectLoadInfo(POWER_METEOR_STORM_DECAL,&POWER_METEOR_STORM_ANIMATION); 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); + + 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)); + + ZONES.push_back(SILICON_DEPOSIT_ZONE); 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)) { @@ -1030,6 +1061,7 @@ public: int TARGET_COORDS_Y=CURRENT_ENCOUNTER.y+HEIGHT/32/2; if (PLAYER_COORDS[0]==TARGET_COORDS_X&&PLAYER_COORDS[1]==TARGET_COORDS_Y) { BATTLE_STATE = battle::PLAYER_SELECTION; + clearPixelEffect(); EFFECT_TIMER = 0; } else if (PLAYER_COORDS[0]!=TARGET_COORDS_X) { @@ -1065,15 +1097,15 @@ public: PIXEL_EFFECT_TRANSPARENCY=0; if (BATTLE_CURRENT_TURN_ENTITY==-1) { if (PLAYER_SELECTED_TARGET==-2) { - applyPixelEffect(BATTLE_CARD_SELECTION,{PLAYER_COORDS[0],PLAYER_COORDS[1]}); + applyPixelEffect(BATTLE_CARD_SELECTION,{PLAYER_COORDS[0],PLAYER_COORDS[1]},0); } else { - applyPixelEffect(BATTLE_CARD_SELECTION,{CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y}); + applyPixelEffect(BATTLE_CARD_SELECTION,{CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y},0); } } else { if (CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove->damage<0) { - applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y}); + applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y},0); } else { - applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{PLAYER_COORDS[0],PLAYER_COORDS[1]}); + applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{PLAYER_COORDS[0],PLAYER_COORDS[1]},0); } } } @@ -2008,7 +2040,27 @@ public: CUTSCENE_DISPLAYED_CARD=POWER; } - void applyPixelEffect(WEATHER_POWER*power,vf2d pos) { + void applyPixelEffect(ParticleEffect*effect,vf2d pos,float startingTransparency) { + SetDrawTarget(nullptr); + Clear(BLANK); + SetDrawTarget(1); + applyPixelEffect( + {(pos.x-PLAYER_COORDS[0])*32+WIDTH/2-16-effect->effectSize.x/2,(pos.y-PLAYER_COORDS[1])*32+HEIGHT/2-16-effect->effectSize.y/2}, + effect->effectSize, + effect->pos_low, + effect->pos_high, + effect->size_low, + effect->size_high, + effect->spd_low, + effect->spd_high, + effect->col_low, + effect->col_high, + effect->amt, + effect->foregroundColor,startingTransparency + ); + } + + void applyPixelEffect(WEATHER_POWER*power,vf2d pos,float startingTransparency) { SetDrawTarget(nullptr); Clear(BLANK); SetDrawTarget(1); @@ -2024,11 +2076,11 @@ public: power->effect->col_low, power->effect->col_high, power->effect->amt, - power->effect->foregroundColor + power->effect->foregroundColor,startingTransparency ); } - void applyPixelEffect(vf2d effectPos,vf2d effectSize,vf2d pos_low,vf2d pos_high,vf2d size_low,vf2d size_high,vf2d spd_low,vf2d spd_high,olc::Pixel col_low,olc::Pixel col_high,int amt,olc::Pixel foregroundColor) { + void applyPixelEffect(vf2d effectPos,vf2d effectSize,vf2d pos_low,vf2d pos_high,vf2d size_low,vf2d size_high,vf2d spd_low,vf2d spd_high,olc::Pixel col_low,olc::Pixel col_high,int amt,olc::Pixel foregroundColor,float startingTransparency) { for (int i=0;ipos={range(pos_low.x,pos_high.x),range(pos_low.y,pos_high.y)}; pixels[i]->size={range(size_low.x,size_high.x),range(size_low.y,size_high.y)}; @@ -2044,6 +2096,7 @@ public: PIXEL_POS=effectPos; PIXEL_SIZE=effectSize; PIXEL_LIMIT=amt; + PIXEL_EFFECT_TRANSPARENCY=startingTransparency; } void clearPixelEffect() { diff --git a/assets/brokenROVER.png b/assets/brokenROVER.png new file mode 100644 index 0000000000000000000000000000000000000000..31468ae9dc8d090c50707747eaa5cf7a221c9f5a GIT binary patch literal 964 zcmV;#13UbQP)EX>4Tx04R}tkv&MmP!xqvQ>8^J4i*#<$xxjvh!%0wDionYs1;guFnQ@8G-*gu zTpR`0f`dPcRR6lU)@9uLxoU15`1YS;m|sCE>Zg?&0J6U6f~e-}`g*syT}RK9P8q8KzCVK|H-_ z8=Uuv!>lN)#OK80CN)U>$aTf#H_nA73p_Jyrc?98VPdh+!Ab|SqNx$bh$E_|Q@)UK zS>?RNSu0mrt55#IP)=W2<~r3d5?I6%B#2N@MG0lth|;c;Vj)H6aS#7c(=U-rAy)~E z91EyGgWU9k|H1FsTKTC-Hz^bcx?ddUV-yJN0*#vEd>=bb;{@k8{ps& z7%Ncry2rbNopby5PHTQY)Qob@yDrMd00006VoOIv08s#I0CRD^SwjE-010qNS#tmY zE+YT{E+YYWr9XB6000McNliru<_I1aAuKCV^``&;0l`T`K~!koV_+BsqhJ(_f)NZD z2ai*jUvjqm|4+KUzvAC(7#W9P0ATm<3h^_dm-Gqij(BPETJIv|0l_%X9w*krD`V!| znDGcxe0}c>;c4&54+xgQlaz_`c=(bOjSM*?zIX~lh8(sOF<=2eT+9-3Fd>gq3os3I z(TDC)$~{h63Zz*8keejQ^*FI*2^|YTNKBwR414K~&tvER-QG-2z!O&(vd}t-<4Osz zfQfi%$e@ad4>Si;uP`0303a=i!aR%!2=cQMtSrEv5*R5>;^cZ9y|7!~J5{SU8$Bib z{}0Oouz)bFlkb!KjL;{&pK~7PJOux#}3G)SqN7^(5(zWx9~IrLlHwh`7uw()",//13 };