generated from sigonasr2/CPlusPlusProjectTemplate
New seed mechanic, new player encounter positioning
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
24291a31d9
commit
2d2761540d
@ -12,8 +12,8 @@ using namespace olc;
|
|||||||
//#define TEST_MAP1 //Toggle to just play around on map 1.
|
//#define TEST_MAP1 //Toggle to just play around on map 1.
|
||||||
//#define TEST_MAP2 //Toggle on to just play around on map 2.
|
//#define TEST_MAP2 //Toggle on to just play around on map 2.
|
||||||
|
|
||||||
#define SKIP_INTRO false
|
#define SKIP_INTRO true
|
||||||
#define SKIP_CHAPTER1 false
|
#define SKIP_CHAPTER1 true
|
||||||
#define SKIP_CHAPTER2 false
|
#define SKIP_CHAPTER2 false
|
||||||
#define SKIP_CHAPTER3 false
|
#define SKIP_CHAPTER3 false
|
||||||
|
|
||||||
@ -49,6 +49,7 @@ enum GAMESTATE{
|
|||||||
CUTSCENE_4, //First rover repaired.
|
CUTSCENE_4, //First rover repaired.
|
||||||
CUTSCENE_4_DONE,
|
CUTSCENE_4_DONE,
|
||||||
LATER_THAT_NIGHTFADEIN,
|
LATER_THAT_NIGHTFADEIN,
|
||||||
|
LATER_THAT_NIGHTWAIT,
|
||||||
LATER_THAT_NIGHTFADEOUT,
|
LATER_THAT_NIGHTFADEOUT,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -74,6 +75,7 @@ namespace cutscene{
|
|||||||
GET_SOME_REST,
|
GET_SOME_REST,
|
||||||
IN_BED,
|
IN_BED,
|
||||||
SHAKE,
|
SHAKE,
|
||||||
|
INVESTIGATE_X_X,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,6 +89,7 @@ namespace battle{
|
|||||||
MOVE_RESOLUTION,
|
MOVE_RESOLUTION,
|
||||||
PERFORM_TURN,
|
PERFORM_TURN,
|
||||||
WAIT_TURN_ANIMATION,
|
WAIT_TURN_ANIMATION,
|
||||||
|
WAIT_TURN_ANIMATION2,
|
||||||
DAMAGE_RESOLUTION,
|
DAMAGE_RESOLUTION,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -108,6 +111,14 @@ enum MOVEMENT_PRIORITY{
|
|||||||
BOTH
|
BOTH
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Seed{
|
||||||
|
public:
|
||||||
|
vf2d pos;
|
||||||
|
Seed(vf2d pos) {
|
||||||
|
this->pos=pos;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#define MAX_TERMINAL_NAME_LENGTH 6
|
#define MAX_TERMINAL_NAME_LENGTH 6
|
||||||
#define WIDTH 256
|
#define WIDTH 256
|
||||||
#define HEIGHT 224
|
#define HEIGHT 224
|
||||||
@ -123,7 +134,7 @@ class DisplayNumber{
|
|||||||
int frame; //Frame it was created.
|
int frame; //Frame it was created.
|
||||||
float x,y;
|
float x,y;
|
||||||
int alpha=255;
|
int alpha=255;
|
||||||
DisplayNumber(int numb,int x,int y,int frameCount) {
|
DisplayNumber(int numb,float x,float y,int frameCount) {
|
||||||
this->number=numb;
|
this->number=numb;
|
||||||
this->x=x;
|
this->x=x;
|
||||||
this->y=y;
|
this->y=y;
|
||||||
@ -272,6 +283,9 @@ class WEATHER_POWER{
|
|||||||
Pixel textcol;
|
Pixel textcol;
|
||||||
int effectTime=0;
|
int effectTime=0;
|
||||||
ParticleEffect*effect;
|
ParticleEffect*effect;
|
||||||
|
int seedProduction=0; //Number of seeds to add to field.
|
||||||
|
float seedScatter=1; //Multiplier of current seeds on field.
|
||||||
|
bool growSeeds=false; //If set to true, will trigger a growth of all seeds.
|
||||||
WEATHER_POWER(std::string name,std::string desc,Animation*icon,Animation*effect,int dmg,int dmgRoll,int range,Pixel bgcol,Pixel textcol,int effectTime,ParticleEffect*parteff) {
|
WEATHER_POWER(std::string name,std::string desc,Animation*icon,Animation*effect,int dmg,int dmgRoll,int range,Pixel bgcol,Pixel textcol,int effectTime,ParticleEffect*parteff) {
|
||||||
this->description=desc;
|
this->description=desc;
|
||||||
this->name=name;
|
this->name=name;
|
||||||
@ -293,8 +307,8 @@ class Entity{
|
|||||||
int hp;
|
int hp;
|
||||||
int maxhp;
|
int maxhp;
|
||||||
Decal*spr;
|
Decal*spr;
|
||||||
int x;
|
float x;
|
||||||
int y;
|
float y;
|
||||||
std::string name;
|
std::string name;
|
||||||
WEATHER_POWER*selectedMove;
|
WEATHER_POWER*selectedMove;
|
||||||
std::vector<WEATHER_POWER*> moveSet;
|
std::vector<WEATHER_POWER*> moveSet;
|
||||||
@ -304,7 +318,7 @@ class Entity{
|
|||||||
int fixedTurnOrderInd=0;
|
int fixedTurnOrderInd=0;
|
||||||
bool fixedTurnOrder=false; //If this is turned on, the selected move will increment in order of the move set (and loop accordingly.)
|
bool fixedTurnOrder=false; //If this is turned on, the selected move will increment in order of the move set (and loop accordingly.)
|
||||||
vf2d sprScale;
|
vf2d sprScale;
|
||||||
Entity(Decal*spr,std::string name,int x,int y,int hp,int maxhp,std::vector<WEATHER_POWER*>moveset,vf2d sprScale={1,1},bool fixedMoveset=false) {
|
Entity(Decal*spr,std::string name,float x,float y,int hp,int maxhp,std::vector<WEATHER_POWER*>moveset,vf2d sprScale={1,1},bool fixedMoveset=false) {
|
||||||
this->spr=spr;
|
this->spr=spr;
|
||||||
this->name=name;
|
this->name=name;
|
||||||
this->x=x;
|
this->x=x;
|
||||||
@ -321,6 +335,7 @@ class Entity{
|
|||||||
class Encounter{
|
class Encounter{
|
||||||
public:
|
public:
|
||||||
int x,y;
|
int x,y;
|
||||||
|
float playerX,playerY;
|
||||||
std::vector<Entity*> entities;
|
std::vector<Entity*> entities;
|
||||||
std::vector<int> turnOrder;
|
std::vector<int> turnOrder;
|
||||||
};
|
};
|
||||||
@ -456,7 +471,7 @@ public:
|
|||||||
WEATHER_POWER*SANDSTORM = new WEATHER_POWER("Sandstorm","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,5,10,64,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,SANDSTORM_EFF);
|
WEATHER_POWER*SANDSTORM = new WEATHER_POWER("Sandstorm","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,5,10,64,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,SANDSTORM_EFF);
|
||||||
WEATHER_POWER*SEED_STORM = new WEATHER_POWER("Seed Storm","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,-10,15,30,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,SEED_STORM_EFF);
|
WEATHER_POWER*SEED_STORM = new WEATHER_POWER("Seed Storm","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,-10,15,30,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,SEED_STORM_EFF);
|
||||||
WEATHER_POWER*AVALANCHE = new WEATHER_POWER("Avalanche","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,15,10,200,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,AVALANCHE_EFF);
|
WEATHER_POWER*AVALANCHE = new WEATHER_POWER("Avalanche","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,15,10,200,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,AVALANCHE_EFF);
|
||||||
WEATHER_POWER*LIGHT_STORM = new WEATHER_POWER("Light Storm","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,15,10,64,Pixel(171, 151, 53,255),Pixel(237, 237, 237,255),120,LIGHT_STORM_EFF);
|
WEATHER_POWER*LIGHT_STORM = new WEATHER_POWER("Light Storm","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,50,9,64,Pixel(171, 151, 53,255),Pixel(237, 237, 237,255),120,LIGHT_STORM_EFF);
|
||||||
WEATHER_POWER*SEED_BULLET = new WEATHER_POWER("Seed Bullet","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,10,15,30,Pixel(57, 92, 63,255),Pixel(95, 232, 119,255),120,SEED_BULLET_EFF);
|
WEATHER_POWER*SEED_BULLET = new WEATHER_POWER("Seed Bullet","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,10,15,30,Pixel(57, 92, 63,255),Pixel(95, 232, 119,255),120,SEED_BULLET_EFF);
|
||||||
WEATHER_POWER*SEED_PELLET = new WEATHER_POWER("Seed Pellet","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,5,10,30,Pixel(57, 92, 63,255),Pixel(95, 232, 119,255),120,SEED_PELLET_EFF);
|
WEATHER_POWER*SEED_PELLET = new WEATHER_POWER("Seed Pellet","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,5,10,30,Pixel(57, 92, 63,255),Pixel(95, 232, 119,255),120,SEED_PELLET_EFF);
|
||||||
WEATHER_POWER*SEED_OF_LIFE = new WEATHER_POWER("Seed of Life","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,-10,15,96,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,SEED_OF_LIFE_EFF);
|
WEATHER_POWER*SEED_OF_LIFE = new WEATHER_POWER("Seed of Life","",POWER_HAILSTORM_ANIMATION,POWER_HAILSTORM_ANIMATION,-10,15,96,Pixel(93, 161, 163,255),Pixel(72, 160, 212,255),120,SEED_OF_LIFE_EFF);
|
||||||
@ -516,7 +531,7 @@ public:
|
|||||||
*SPIDEY_DECAL,*TARGETING_CIRCLE,*TARGETING_RANGE_CIRCLE,*HEALTHBAR_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,*SILICON_ROCK_DECAL,*PETAL_STORM_DECAL,*ROVER_DECAL,*X_X_DECAL,
|
*NADO_DECAL,*SILICON_ROCK_DECAL,*PETAL_STORM_DECAL,*ROVER_DECAL,*X_X_DECAL,
|
||||||
*LATER_THAT_NIGHT_DECAL,*SLEEP_DECAL;
|
*LATER_THAT_NIGHT_DECAL,*SLEEP_DECAL,*SEED_DECAL,*TREE_DECAL;
|
||||||
std::map<std::string,ObjectLoadInfo*> BASE_OBJECTS;
|
std::map<std::string,ObjectLoadInfo*> BASE_OBJECTS;
|
||||||
std::vector<Encounter> ENCOUNTERS;
|
std::vector<Encounter> ENCOUNTERS;
|
||||||
Encounter ENCOUNTER_SPIDEY_1;
|
Encounter ENCOUNTER_SPIDEY_1;
|
||||||
@ -525,10 +540,14 @@ public:
|
|||||||
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
||||||
std::vector<WEATHER_POWER*>MOVESET_X_X;
|
std::vector<WEATHER_POWER*>MOVESET_X_X;
|
||||||
std::vector<WEATHER_POWER*>MOVESET_XMINION;
|
std::vector<WEATHER_POWER*>MOVESET_XMINION;
|
||||||
|
std::vector<Seed*>SEEDS;
|
||||||
|
std::vector<Seed*>TREES;
|
||||||
bool SOUND_IS_MUTED=false;
|
bool SOUND_IS_MUTED=false;
|
||||||
bool END_THE_GAME=false;
|
bool END_THE_GAME=false;
|
||||||
bool audioFade=false;
|
bool audioFade=false;
|
||||||
float audioLevel=0.6;
|
float audioLevel=0.6;
|
||||||
|
int SEED_COUNT=0;
|
||||||
|
vf2d BATTLE_PLAYER_COORDS;
|
||||||
|
|
||||||
|
|
||||||
sound::Wave SONG_MAIN;
|
sound::Wave SONG_MAIN;
|
||||||
@ -553,6 +572,7 @@ public:
|
|||||||
if (SKIP_INTRO||SKIP_CHAPTER1||SKIP_CHAPTER2||SKIP_CHAPTER3) {
|
if (SKIP_INTRO||SKIP_CHAPTER1||SKIP_CHAPTER2||SKIP_CHAPTER3) {
|
||||||
GAME_FLAGS[gameflag::TUTORIAL_WALKED_OFF_FARM]=true;
|
GAME_FLAGS[gameflag::TUTORIAL_WALKED_OFF_FARM]=true;
|
||||||
GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]=true;
|
GAME_FLAGS[gameflag::VISIT_BROKEN_ROVER]=true;
|
||||||
|
GAME_STATE=GAMEWORLD;
|
||||||
}
|
}
|
||||||
if (SKIP_CHAPTER1||SKIP_CHAPTER2||SKIP_CHAPTER3) {
|
if (SKIP_CHAPTER1||SKIP_CHAPTER2||SKIP_CHAPTER3) {
|
||||||
GAME_FLAGS[gameflag::COLLECTED_SILICON_1]=true;
|
GAME_FLAGS[gameflag::COLLECTED_SILICON_1]=true;
|
||||||
@ -596,9 +616,11 @@ public:
|
|||||||
SILICON_ROCK_DECAL=new Decal(new Sprite("assets/siliconPiece.png"));
|
SILICON_ROCK_DECAL=new Decal(new Sprite("assets/siliconPiece.png"));
|
||||||
PETAL_STORM_DECAL=new Decal(new Sprite("assets/petalstorm_icon.png"));
|
PETAL_STORM_DECAL=new Decal(new Sprite("assets/petalstorm_icon.png"));
|
||||||
ROVER_DECAL=new Decal(new Sprite("assets/ROVER.png"));
|
ROVER_DECAL=new Decal(new Sprite("assets/ROVER.png"));
|
||||||
X_X_DECAL=new Decal(new Sprite("assets/X_X.png"));
|
X_X_DECAL=new Decal(new Sprite("assets/X.X.png"));
|
||||||
LATER_THAT_NIGHT_DECAL=new Decal(new Sprite("assets/LaterThatNight.png"));
|
LATER_THAT_NIGHT_DECAL=new Decal(new Sprite("assets/LaterThatNight.png"));
|
||||||
SLEEP_DECAL=new Decal(new Sprite("assets/sleep.png"));
|
SLEEP_DECAL=new Decal(new Sprite("assets/sleep.png"));
|
||||||
|
SEED_DECAL=new Decal(new Sprite("assets/seed.png"));
|
||||||
|
TREE_DECAL=new Decal(new Sprite("assets/tree.png"));
|
||||||
|
|
||||||
current_playerAnim->spr=PLAYER_DECAL;
|
current_playerAnim->spr=PLAYER_DECAL;
|
||||||
playerAnim->spr=PLAYER_DECAL;
|
playerAnim->spr=PLAYER_DECAL;
|
||||||
@ -700,6 +722,9 @@ public:
|
|||||||
HURRICANE->playerOwnCount=1;
|
HURRICANE->playerOwnCount=1;
|
||||||
METEOR_RAIN->playerOwnCount=5;
|
METEOR_RAIN->playerOwnCount=5;
|
||||||
|
|
||||||
|
PETAL_STORM->seedProduction=2; //Produce two seeds.
|
||||||
|
HURRICANE->seedScatter=2;
|
||||||
|
|
||||||
MOVESET_SPIDEY.push_back(SANDSTORM);
|
MOVESET_SPIDEY.push_back(SANDSTORM);
|
||||||
MOVESET_SPIDEY.push_back(SEED_STORM);
|
MOVESET_SPIDEY.push_back(SEED_STORM);
|
||||||
MOVESET_SPIDEY.push_back(AVALANCHE);
|
MOVESET_SPIDEY.push_back(AVALANCHE);
|
||||||
@ -720,18 +745,25 @@ public:
|
|||||||
MOVESET_XMINION.push_back(SEED_PELLET);
|
MOVESET_XMINION.push_back(SEED_PELLET);
|
||||||
MOVESET_XMINION.push_back(SEED_STORM);
|
MOVESET_XMINION.push_back(SEED_STORM);
|
||||||
|
|
||||||
|
COLLECTED_ITEMS.push_back({20,5});
|
||||||
|
COLLECTED_ITEMS.push_back({20,6});
|
||||||
|
|
||||||
ENCOUNTER_SPIDEY_1.entities.push_back(new Entity(SPIDEY_DECAL,"Spidey",2,3,80,80,MOVESET_SPIDEY));
|
ENCOUNTER_SPIDEY_1.entities.push_back(new Entity(SPIDEY_DECAL,"Spidey",2,3,80,80,MOVESET_SPIDEY));
|
||||||
ENCOUNTER_SPIDEY_1.entities.push_back(new Entity(SPIDEY_DECAL,"Spidey",4,4,80,80,MOVESET_SPIDEY));
|
ENCOUNTER_SPIDEY_1.entities.push_back(new Entity(SPIDEY_DECAL,"Spidey",4,4,80,80,MOVESET_SPIDEY));
|
||||||
ENCOUNTER_SPIDEY_1.entities.push_back(new Entity(SPIDEY_DECAL,"Spidey",6,2,80,80,MOVESET_SPIDEY));
|
ENCOUNTER_SPIDEY_1.entities.push_back(new Entity(SPIDEY_DECAL,"Spidey",6,2,80,80,MOVESET_SPIDEY));
|
||||||
ENCOUNTER_SPIDEY_1.x=79;
|
ENCOUNTER_SPIDEY_1.x=79;
|
||||||
ENCOUNTER_SPIDEY_1.y=47;
|
ENCOUNTER_SPIDEY_1.y=47;
|
||||||
|
ENCOUNTER_X_X.playerX=4;
|
||||||
|
ENCOUNTER_X_X.playerY=3.75;
|
||||||
ENCOUNTERS.push_back(ENCOUNTER_SPIDEY_1);
|
ENCOUNTERS.push_back(ENCOUNTER_SPIDEY_1);
|
||||||
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X_X",3,3,590,590,MOVESET_X_X,{1,1},true));
|
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X_X",3,2.5,590,590,MOVESET_X_X,{2,2},true));
|
||||||
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X Minion",1,5,80,80,MOVESET_XMINION,{0.4,0.4}));
|
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X Minion",1,5,0,80,MOVESET_XMINION,{0.7,0.7}));
|
||||||
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X Minion",0,2,80,80,MOVESET_XMINION,{0.4,0.4}));
|
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X Minion",0,2,0,80,MOVESET_XMINION,{0.7,0.7}));
|
||||||
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X Minion",4,2,80,80,MOVESET_XMINION,{0.4,0.4}));
|
ENCOUNTER_X_X.entities.push_back(new Entity(X_X_DECAL,"X Minion",4,2,0,80,MOVESET_XMINION,{0.7,0.7}));
|
||||||
ENCOUNTER_X_X.x=38;
|
ENCOUNTER_X_X.x=38;
|
||||||
ENCOUNTER_X_X.y=35;
|
ENCOUNTER_X_X.y=35;
|
||||||
|
ENCOUNTER_X_X.playerX=3;
|
||||||
|
ENCOUNTER_X_X.playerY=2;
|
||||||
//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);
|
||||||
@ -1040,6 +1072,7 @@ public:
|
|||||||
fadeIn();
|
fadeIn();
|
||||||
GAME_STATE=GAMEWORLD;
|
GAME_STATE=GAMEWORLD;
|
||||||
PlayCutscene(cutscene::IN_BED);
|
PlayCutscene(cutscene::IN_BED);
|
||||||
|
PLAYER_HP=PLAYER_MAXHP;
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
switch (CURRENT_CUTSCENE) {
|
switch (CURRENT_CUTSCENE) {
|
||||||
@ -1055,6 +1088,16 @@ public:
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case cutscene::TRANSITION_CUTSCENE_2:{
|
case cutscene::TRANSITION_CUTSCENE_2:{
|
||||||
|
if (GAME_FLAGS[gameflag::REST_IN_DOME]&&!GAME_FLAGS[gameflag::SLEEP]) {
|
||||||
|
for (int i=0;i<COLLECTED_ITEMS.size();i++) {
|
||||||
|
if (COLLECTED_ITEMS[i].x==20&&COLLECTED_ITEMS[i].y==5) {
|
||||||
|
COLLECTED_ITEMS.erase(COLLECTED_ITEMS.begin()+i--);
|
||||||
|
} else
|
||||||
|
if (COLLECTED_ITEMS[i].x==20&&COLLECTED_ITEMS[i].y==6) {
|
||||||
|
COLLECTED_ITEMS.erase(COLLECTED_ITEMS.begin()+i--);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
LoadMap("assets/maps/map2");
|
LoadMap("assets/maps/map2");
|
||||||
TeleportToMapFileCoords(8,17);
|
TeleportToMapFileCoords(8,17);
|
||||||
fadeIn();
|
fadeIn();
|
||||||
@ -1073,6 +1116,7 @@ public:
|
|||||||
case cutscene::REPAIR_ROVER_1:{
|
case cutscene::REPAIR_ROVER_1:{
|
||||||
ResetTerminal(STORY_TEXT3);
|
ResetTerminal(STORY_TEXT3);
|
||||||
GAME_STATE=CUTSCENE_4;
|
GAME_STATE=CUTSCENE_4;
|
||||||
|
REPAIRED_ROVERS.push_back({33,35});
|
||||||
fadeIn();
|
fadeIn();
|
||||||
}break;
|
}break;
|
||||||
case cutscene::END_VOLCANIC_AREA_CUTSCENE:{
|
case cutscene::END_VOLCANIC_AREA_CUTSCENE:{
|
||||||
@ -1087,8 +1131,8 @@ public:
|
|||||||
void fadeInCompleted() {
|
void fadeInCompleted() {
|
||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
case LATER_THAT_NIGHTFADEIN:{
|
case LATER_THAT_NIGHTFADEIN:{
|
||||||
fadeOut();
|
TIMER=0;
|
||||||
GAME_STATE=LATER_THAT_NIGHTFADEOUT;
|
GAME_STATE=LATER_THAT_NIGHTWAIT;
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
switch (CURRENT_CUTSCENE) {
|
switch (CURRENT_CUTSCENE) {
|
||||||
@ -1142,6 +1186,12 @@ public:
|
|||||||
case cutscene::IN_BED:{
|
case cutscene::IN_BED:{
|
||||||
CUTSCENE_OBJS[0]=CreateObject({20,2},SLEEP_DECAL,SLEEP_ANIMATION,true);
|
CUTSCENE_OBJS[0]=CreateObject({20,2},SLEEP_DECAL,SLEEP_ANIMATION,true);
|
||||||
}break;
|
}break;
|
||||||
|
case cutscene::INVESTIGATE_X_X:{
|
||||||
|
CUTSCENE_OBJS[0]->anim=EMPTY_BED_ANIMATION;
|
||||||
|
CUTSCENE_OBJS[1]=CreateObject({19,3},PLAYER_DECAL,{32,0},{32,32},true);
|
||||||
|
CUTSCENE_OBJS[1]->flipped=true;
|
||||||
|
DisplayMessageBox(20);
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
for (int i=0;i<8;i++) {
|
for (int i=0;i<8;i++) {
|
||||||
CUTSCENE_FLAGS[i]=false;
|
CUTSCENE_FLAGS[i]=false;
|
||||||
@ -1364,6 +1414,7 @@ public:
|
|||||||
availablePowers.push_back(WEATHER_POWERS[i]);
|
availablePowers.push_back(WEATHER_POWERS[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BATTLE_PLAYER_COORDS={PLAYER_COORDS[0],PLAYER_COORDS[1]};
|
||||||
BATTLE_CARD_SELECTION_IND=0;
|
BATTLE_CARD_SELECTION_IND=0;
|
||||||
BATTLE_CARD_SELECTION=availablePowers[BATTLE_CARD_SELECTION_IND];
|
BATTLE_CARD_SELECTION=availablePowers[BATTLE_CARD_SELECTION_IND];
|
||||||
PLAYER_SELECTED_TARGET=-1;
|
PLAYER_SELECTED_TARGET=-1;
|
||||||
@ -1389,11 +1440,12 @@ public:
|
|||||||
if (BATTLE_ENTRY_TIMER>45) {
|
if (BATTLE_ENTRY_TIMER>45) {
|
||||||
int TARGET_COORDS_X=CURRENT_ENCOUNTER.x+WIDTH/32/2;
|
int TARGET_COORDS_X=CURRENT_ENCOUNTER.x+WIDTH/32/2;
|
||||||
int TARGET_COORDS_Y=CURRENT_ENCOUNTER.y+HEIGHT/32/2;
|
int TARGET_COORDS_Y=CURRENT_ENCOUNTER.y+HEIGHT/32/2;
|
||||||
if (PLAYER_COORDS[0]==TARGET_COORDS_X&&PLAYER_COORDS[1]==TARGET_COORDS_Y) {
|
if (PLAYER_COORDS[0]==TARGET_COORDS_X&&PLAYER_COORDS[1]==TARGET_COORDS_Y
|
||||||
|
&&BATTLE_PLAYER_COORDS.x==CURRENT_ENCOUNTER.playerX&&BATTLE_PLAYER_COORDS.y==CURRENT_ENCOUNTER.playerY) {
|
||||||
BATTLE_STATE = battle::PLAYER_SELECTION;
|
BATTLE_STATE = battle::PLAYER_SELECTION;
|
||||||
clearPixelEffect();
|
clearPixelEffect();
|
||||||
EFFECT_TIMER = 0;
|
EFFECT_TIMER = 0;
|
||||||
} else
|
}
|
||||||
if (PLAYER_COORDS[0]!=TARGET_COORDS_X) {
|
if (PLAYER_COORDS[0]!=TARGET_COORDS_X) {
|
||||||
if (PLAYER_COORDS[0]<TARGET_COORDS_X) {
|
if (PLAYER_COORDS[0]<TARGET_COORDS_X) {
|
||||||
PLAYER_COORDS[0]+=BATTLE_CAMERA_SCROLL_SPD;
|
PLAYER_COORDS[0]+=BATTLE_CAMERA_SCROLL_SPD;
|
||||||
@ -1420,6 +1472,32 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (BATTLE_PLAYER_COORDS.x!=CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX) {
|
||||||
|
if (BATTLE_PLAYER_COORDS.x<CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX) {
|
||||||
|
BATTLE_PLAYER_COORDS.x+=BATTLE_CAMERA_SCROLL_SPD;
|
||||||
|
if (BATTLE_PLAYER_COORDS.x>CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX) {
|
||||||
|
BATTLE_PLAYER_COORDS.x=CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
BATTLE_PLAYER_COORDS.x-=BATTLE_CAMERA_SCROLL_SPD;
|
||||||
|
if (BATTLE_PLAYER_COORDS.x<CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX) {
|
||||||
|
BATTLE_PLAYER_COORDS.x=CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (BATTLE_PLAYER_COORDS.y!=CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY) {
|
||||||
|
if (BATTLE_PLAYER_COORDS.y<CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY) {
|
||||||
|
BATTLE_PLAYER_COORDS.y+=BATTLE_CAMERA_SCROLL_SPD;
|
||||||
|
if (BATTLE_PLAYER_COORDS.y>CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY) {
|
||||||
|
BATTLE_PLAYER_COORDS.y=CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
BATTLE_PLAYER_COORDS.y-=BATTLE_CAMERA_SCROLL_SPD;
|
||||||
|
if (BATTLE_PLAYER_COORDS.y<CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY) {
|
||||||
|
BATTLE_PLAYER_COORDS.y=CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case battle::WAIT_TURN_ANIMATION:{
|
case battle::WAIT_TURN_ANIMATION:{
|
||||||
@ -1427,7 +1505,7 @@ public:
|
|||||||
PIXEL_EFFECT_TRANSPARENCY=0;
|
PIXEL_EFFECT_TRANSPARENCY=0;
|
||||||
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) {
|
||||||
if (PLAYER_SELECTED_TARGET==-2) {
|
if (PLAYER_SELECTED_TARGET==-2) {
|
||||||
applyPixelEffect(BATTLE_CARD_SELECTION,{PLAYER_COORDS[0],PLAYER_COORDS[1]},0);
|
applyPixelEffect(BATTLE_CARD_SELECTION,{CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerY},0);
|
||||||
} else {
|
} else {
|
||||||
applyPixelEffect(BATTLE_CARD_SELECTION,{(float)(CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x),(float)(CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y)},0);
|
applyPixelEffect(BATTLE_CARD_SELECTION,{(float)(CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x),(float)(CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y)},0);
|
||||||
}
|
}
|
||||||
@ -1435,7 +1513,7 @@ public:
|
|||||||
if (CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove->damage<0) {
|
if (CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove->damage<0) {
|
||||||
applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{(float)CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x,(float)CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y},0);
|
applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{(float)CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x,(float)CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y},0);
|
||||||
} else {
|
} else {
|
||||||
applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{PLAYER_COORDS[0],PLAYER_COORDS[1]},0);
|
applyPixelEffect(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->selectedMove,{CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerY},0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1468,16 +1546,23 @@ public:
|
|||||||
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),0,PLAYER_MAXHP);
|
||||||
DisplayNumber*numb = new DisplayNumber((int)(-PLAYER_MAXHP*0.33),PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
DisplayNumber*numb = CreateDisplayNumber((int)(-PLAYER_MAXHP*0.33),CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerY,frameCount);
|
||||||
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
}
|
}
|
||||||
if (PLAYER_SELECTED_TARGET==-2) {
|
if (PLAYER_SELECTED_TARGET==-2) {
|
||||||
effectRadius({(int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1]},ref,true);
|
effectRadius({CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerY},ref,true);
|
||||||
} else {
|
} else {
|
||||||
effectRadius({CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y+CURRENT_ENCOUNTER.y},ref,true);
|
effectRadius({CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x+CURRENT_ENCOUNTER.x,CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y+CURRENT_ENCOUNTER.y},ref,true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
effectRadius({(int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1]},ref,false);
|
effectRadius({CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerY},ref,false);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (EFFECT_TIMER==ref->effectTime/2){
|
||||||
|
addSeeds(ref->seedProduction);
|
||||||
|
int newSeedCount=SEEDS.size()*ref->seedScatter;
|
||||||
|
while (SEEDS.size()<newSeedCount) {
|
||||||
|
addSeeds(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (EFFECT_TIMER>ref->effectTime) {
|
if (EFFECT_TIMER>ref->effectTime) {
|
||||||
@ -1526,9 +1611,12 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PLAYER_COORDS[0]=CURRENT_ENCOUNTER.x+BATTLE_PLAYER_COORDS.x;
|
||||||
|
PLAYER_COORDS[1]=CURRENT_ENCOUNTER.y+BATTLE_PLAYER_COORDS.y;
|
||||||
BATTLE_STATE=battle::WAIT_TURN_ANIMATION;
|
BATTLE_STATE=battle::WAIT_TURN_ANIMATION;
|
||||||
PIXEL_EFFECT_TRANSPARENCY=0;
|
PIXEL_EFFECT_TRANSPARENCY=0;
|
||||||
EFFECT_TIMER=0;
|
EFFECT_TIMER=0;
|
||||||
|
clearSeeds();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@ -1742,17 +1830,34 @@ public:
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case cutscene::SHAKE:{
|
case cutscene::SHAKE:{
|
||||||
if (frameCount%4==0) {
|
if (CUTSCENE_TIMER<60*4) {
|
||||||
PLAYER_COORDS[1]+=0.25;
|
if (frameCount%4==0) {
|
||||||
} else
|
PLAYER_COORDS[1]+=0.25;
|
||||||
if (frameCount%4==1) {
|
} else
|
||||||
PLAYER_COORDS[1]+=0.25;
|
if (frameCount%4==1) {
|
||||||
} else
|
PLAYER_COORDS[1]+=0.25;
|
||||||
if (frameCount%4==2) {
|
} else
|
||||||
PLAYER_COORDS[1]-=0.25;
|
if (frameCount%4==2) {
|
||||||
} else
|
PLAYER_COORDS[1]-=0.25;
|
||||||
if (frameCount%4==3) {
|
} else
|
||||||
PLAYER_COORDS[1]-=0.25;
|
if (frameCount%4==3) {
|
||||||
|
PLAYER_COORDS[1]-=0.25;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
StartCutscene(cutscene::INVESTIGATE_X_X);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case cutscene::INVESTIGATE_X_X:{
|
||||||
|
if (!messageBoxVisible) {
|
||||||
|
if (!CUTSCENE_FLAGS[0]) {
|
||||||
|
CUTSCENE_FLAGS[0]=true;
|
||||||
|
DisplayMessageBox(21);
|
||||||
|
} else {
|
||||||
|
PLAYER_COORDS[0]=CUTSCENE_OBJS[1]->x;
|
||||||
|
PLAYER_COORDS[1]=CUTSCENE_OBJS[1]->y;
|
||||||
|
EndCutscene();
|
||||||
|
ENCOUNTERS.push_back(ENCOUNTER_X_X);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
@ -1833,6 +1938,12 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
case LATER_THAT_NIGHTWAIT:{
|
||||||
|
if (TIMER>180) {
|
||||||
|
fadeOut();
|
||||||
|
GAME_STATE=LATER_THAT_NIGHTFADEOUT;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PIXEL_EFFECT_TRANSPARENCY>0) {
|
if (PIXEL_EFFECT_TRANSPARENCY>0) {
|
||||||
@ -1933,9 +2044,20 @@ public:
|
|||||||
meterYOffset+=(2+48*0.4);
|
meterYOffset+=(2+48*0.4);
|
||||||
}
|
}
|
||||||
SetDrawTarget(2);
|
SetDrawTarget(2);
|
||||||
DrawPartialDecal({(float)(WIDTH/2-16+(current_playerAnim->flipped?32:0)),(float)(HEIGHT/2-16)},current_playerAnim->spr,current_playerAnim->getCurrentFrame(),{32,32},{(float)(current_playerAnim->flipped?-1:1),1});
|
if (IN_BATTLE_ENCOUNTER) {
|
||||||
|
const vi2d CENTER = {(float)((BATTLE_PLAYER_COORDS.x-PLAYER_COORDS[0])*32+WIDTH/2+(current_playerAnim->flipped?32:0)),(float)((BATTLE_PLAYER_COORDS.y-PLAYER_COORDS[1])*32+HEIGHT/2)};
|
||||||
|
for (int i=0;i<SEEDS.size();i++) {
|
||||||
|
DrawDecal(SEEDS[i]->pos+CENTER,SEED_DECAL,{0.5,0.5});
|
||||||
|
}
|
||||||
|
for (int i=0;i<TREES.size();i++) {
|
||||||
|
DrawDecal(TREES[i]->pos+CENTER,TREE_DECAL,{1,1});
|
||||||
|
}
|
||||||
|
DrawPartialDecal({(float)((BATTLE_PLAYER_COORDS.x-PLAYER_COORDS[0])*32+WIDTH/2-16+(current_playerAnim->flipped?32:0)),(float)((BATTLE_PLAYER_COORDS.y-PLAYER_COORDS[1])*32+HEIGHT/2-16)},current_playerAnim->spr,current_playerAnim->getCurrentFrame(),{32,32},{(float)(current_playerAnim->flipped?-1:1),1});
|
||||||
|
} else {
|
||||||
|
DrawPartialDecal({(float)(WIDTH/2-16+(current_playerAnim->flipped?32:0)),(float)(HEIGHT/2-16)},current_playerAnim->spr,current_playerAnim->getCurrentFrame(),{32,32},{(float)(current_playerAnim->flipped?-1:1),1});
|
||||||
|
}
|
||||||
if (IN_BATTLE_ENCOUNTER&&BATTLE_ENTRY_TIMER<45) {
|
if (IN_BATTLE_ENCOUNTER&&BATTLE_ENTRY_TIMER<45) {
|
||||||
DrawStringDecal({(float)(WIDTH/2-16+(current_playerAnim->flipped?32:0)+8),(float)(HEIGHT/2-16-sin(frameCount*12/60.0)*4-12)},"!!",RED);
|
DrawStringDecal({(float)(WIDTH/2-16),(float)(HEIGHT/2-16-sin(frameCount*12/60.0)*4-12)},"!!",RED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@ -1959,7 +2081,8 @@ public:
|
|||||||
GradientFillRectDecal({WIDTH/2,HEIGHT/2},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1});
|
GradientFillRectDecal({WIDTH/2,HEIGHT/2},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1});
|
||||||
}break;
|
}break;
|
||||||
case LATER_THAT_NIGHTFADEIN:
|
case LATER_THAT_NIGHTFADEIN:
|
||||||
case LATER_THAT_NIGHTFADEOUT:{
|
case LATER_THAT_NIGHTFADEOUT:
|
||||||
|
case LATER_THAT_NIGHTWAIT:{
|
||||||
DrawDecal({(float)(WIDTH/2-LATER_THAT_NIGHT_DECAL->sprite->width/2),(float)(HEIGHT/2-LATER_THAT_NIGHT_DECAL->sprite->height/2)},LATER_THAT_NIGHT_DECAL);
|
DrawDecal({(float)(WIDTH/2-LATER_THAT_NIGHT_DECAL->sprite->width/2),(float)(HEIGHT/2-LATER_THAT_NIGHT_DECAL->sprite->height/2)},LATER_THAT_NIGHT_DECAL);
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
@ -1995,11 +2118,11 @@ public:
|
|||||||
for (int x=-1;x<=1;x++) {
|
for (int x=-1;x<=1;x++) {
|
||||||
for (int y=-1;y<=1;y++) {
|
for (int y=-1;y<=1;y++) {
|
||||||
if (x!=0&&y!=0) {
|
if (x!=0&&y!=0) {
|
||||||
DrawStringDecal({((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x/2+x-8,((numb->y-PLAYER_COORDS[1])*32+HEIGHT/2)-12-GetTextSize(display).y/2+y},display,(numb->number>0)?Pixel(255,0,0,numb->alpha):Pixel(0,255,0,numb->alpha),{2,2});
|
DrawStringDecal({((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x*1.3/2+x-8,((numb->y-PLAYER_COORDS[1])*32+HEIGHT/2)-12-GetTextSize(display).y*1.3/2+y},display,(numb->number>0)?Pixel(255,0,0,numb->alpha):Pixel(0,255,0,numb->alpha),{1.3,1.3});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawStringDecal({((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x/2-8,((numb->y-PLAYER_COORDS[1])*32+HEIGHT/2)-12-GetTextSize(display).y/2},display,Pixel(255,255,255,numb->alpha),{2,2});
|
DrawStringDecal({((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x*1.3/2-8,((numb->y-PLAYER_COORDS[1])*32+HEIGHT/2)-12-GetTextSize(display).y*1.3/2},display,Pixel(255,255,255,numb->alpha),{1.3,1.3});
|
||||||
//std::cout<<numb->x<<"/"<<numb->y<<" "<<(((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x/2)<<","<<(((numb->y-PLAYER_COORDS[1])*32+HEIGHT/2)-8-GetTextSize(display).y/2)<<": ("<<numb->alpha<<")"<<display<<"\n";
|
//std::cout<<numb->x<<"/"<<numb->y<<" "<<(((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x/2)<<","<<(((numb->y-PLAYER_COORDS[1])*32+HEIGHT/2)-8-GetTextSize(display).y/2)<<": ("<<numb->alpha<<")"<<display<<"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2089,7 +2212,7 @@ public:
|
|||||||
int targetX=-1,targetY=-1;
|
int targetX=-1,targetY=-1;
|
||||||
for (auto&ent:enc.entities) {
|
for (auto&ent:enc.entities) {
|
||||||
if (BATTLE_STATE==battle::PLAYER_TARGET_SELECTION&&PLAYER_SELECTED_TARGET>=0&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->hp>0&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x==ent->x&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y==ent->y) {
|
if (BATTLE_STATE==battle::PLAYER_TARGET_SELECTION&&PLAYER_SELECTED_TARGET>=0&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->hp>0&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x==ent->x&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y==ent->y) {
|
||||||
DrawDecal({(enc.x+ent->x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent->y-PLAYER_COORDS[1])*32+HEIGHT/2},TARGETING_CIRCLE,{(float)(ent->spr->sprite->width/32),(float)(ent->spr->sprite->height/32)},{255,210,0,255});
|
DrawDecal({(enc.x+ent->x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent->y-PLAYER_COORDS[1])*32+HEIGHT/2},TARGETING_CIRCLE,{(float)(ent->spr->sprite->width*ent->sprScale.x/32),(float)(ent->spr->sprite->height*ent->sprScale.y/32)},{255,210,0,255});
|
||||||
DrawDecal({(enc.x+ent->x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent->y-PLAYER_COORDS[1])*32+HEIGHT/2},ent->spr,ent->sprScale,{(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175),(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175),(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175),255});
|
DrawDecal({(enc.x+ent->x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent->y-PLAYER_COORDS[1])*32+HEIGHT/2},ent->spr,ent->sprScale,{(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175),(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175),(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175),255});
|
||||||
targetX=ent->x;targetY=ent->y;
|
targetX=ent->x;targetY=ent->y;
|
||||||
} else {
|
} else {
|
||||||
@ -2102,7 +2225,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (targetX!=-1&&targetY!=-1) {
|
if (targetX!=-1&&targetY!=-1) {
|
||||||
DrawDecal({(enc.x+targetX-PLAYER_COORDS[0])*32+WIDTH/2-BATTLE_CARD_SELECTION->range+16,(enc.y+targetY-PLAYER_COORDS[1])*32+HEIGHT/2-BATTLE_CARD_SELECTION->range+16},TARGETING_RANGE_CIRCLE,{(float)(BATTLE_CARD_SELECTION->range*2/32.0),(float)(BATTLE_CARD_SELECTION->range*2/32.0)},{255,60,0,(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*100)});
|
DrawDecal({(enc.x+targetX-PLAYER_COORDS[0])*32+enc.entities[PLAYER_SELECTED_TARGET]->spr->sprite->width/2*enc.entities[PLAYER_SELECTED_TARGET]->sprScale.x+WIDTH/2-BATTLE_CARD_SELECTION->range,(enc.y+targetY-PLAYER_COORDS[1])*32+enc.entities[PLAYER_SELECTED_TARGET]->spr->sprite->height/2*enc.entities[PLAYER_SELECTED_TARGET]->sprScale.y+HEIGHT/2-BATTLE_CARD_SELECTION->range},TARGETING_RANGE_CIRCLE,{(float)(BATTLE_CARD_SELECTION->range*2/32.0),(float)(BATTLE_CARD_SELECTION->range*2/32.0)},{255,60,0,(uint8_t)((0.5*(float)sin(frameCount*4/60.0)+0.5)*100)});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2194,6 +2317,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DisplayMessageBox(int dialogNumber) {
|
void DisplayMessageBox(int dialogNumber) {
|
||||||
|
performCropUpdate(10);
|
||||||
messageBoxVisible=true;
|
messageBoxVisible=true;
|
||||||
messageBoxCursor=0;
|
messageBoxCursor=0;
|
||||||
std::string split1=STORY_DIALOG[dialogNumber].substr(0,STORY_DIALOG[dialogNumber].find('\n')); //Unused for now.
|
std::string split1=STORY_DIALOG[dialogNumber].substr(0,STORY_DIALOG[dialogNumber].find('\n')); //Unused for now.
|
||||||
@ -2426,15 +2550,15 @@ public:
|
|||||||
foodCount--;
|
foodCount--;
|
||||||
}
|
}
|
||||||
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
|
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
|
||||||
DisplayNumber*numb = new DisplayNumber(finalDamage,PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
DisplayNumber*numb = CreateDisplayNumber(finalDamage,PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
||||||
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
} else {
|
} else {
|
||||||
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
|
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
|
||||||
finalDamage=power->damage+rand()%power->damageRoll*sign(power->damage);
|
finalDamage=power->damage+rand()%power->damageRoll*sign(power->damage);
|
||||||
Entity*ent=CURRENT_ENCOUNTER.entities[i];
|
Entity*ent=CURRENT_ENCOUNTER.entities[i];
|
||||||
if (ent->hp>0&&distancetoCoords({(float)((ent->x+CURRENT_ENCOUNTER.x)*32),(float)((ent->y+CURRENT_ENCOUNTER.y)*32)},coords*32)<=power->range) {
|
if (distancetoCoords({(float)((ent->x+CURRENT_ENCOUNTER.x)*32),(float)((ent->y+CURRENT_ENCOUNTER.y)*32)},coords*32)<=power->range) {
|
||||||
ent->hp=std::clamp(ent->hp-finalDamage,0,ent->maxhp);
|
ent->hp=std::clamp(ent->hp-finalDamage,0,ent->maxhp);
|
||||||
DisplayNumber*numb = new DisplayNumber(finalDamage,ent->x+CURRENT_ENCOUNTER.x,ent->y+CURRENT_ENCOUNTER.y,frameCount);
|
DisplayNumber*numb = CreateDisplayNumber(finalDamage,ent->x+CURRENT_ENCOUNTER.x+ent->spr->sprite->width*ent->sprScale.x/2,ent->y+CURRENT_ENCOUNTER.y+ent->spr->sprite->height*ent->sprScale.y/2,frameCount);
|
||||||
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
ent->damageFrame=frameCount;
|
ent->damageFrame=frameCount;
|
||||||
}
|
}
|
||||||
@ -2449,14 +2573,14 @@ public:
|
|||||||
std::cout<<"Distance was "<<distancetoCoords({(float)((ent->x+CURRENT_ENCOUNTER.x)*32),(float)((ent->y+CURRENT_ENCOUNTER.y)*32)},coords*32)<<"\n";
|
std::cout<<"Distance was "<<distancetoCoords({(float)((ent->x+CURRENT_ENCOUNTER.x)*32),(float)((ent->y+CURRENT_ENCOUNTER.y)*32)},coords*32)<<"\n";
|
||||||
if (ent->hp>0&&distancetoCoords({(float)((ent->x+CURRENT_ENCOUNTER.x)*32),(float)((ent->y+CURRENT_ENCOUNTER.y)*32)},coords*32)<=power->range) {
|
if (ent->hp>0&&distancetoCoords({(float)((ent->x+CURRENT_ENCOUNTER.x)*32),(float)((ent->y+CURRENT_ENCOUNTER.y)*32)},coords*32)<=power->range) {
|
||||||
ent->hp=std::clamp(ent->hp-finalDamage,0,ent->maxhp);
|
ent->hp=std::clamp(ent->hp-finalDamage,0,ent->maxhp);
|
||||||
DisplayNumber*numb = new DisplayNumber(finalDamage,ent->x+CURRENT_ENCOUNTER.x,ent->y+CURRENT_ENCOUNTER.y,frameCount);
|
DisplayNumber*numb = CreateDisplayNumber(finalDamage,ent->x+CURRENT_ENCOUNTER.x+ent->spr->sprite->width*ent->sprScale.x/2,ent->y+CURRENT_ENCOUNTER.y+ent->spr->sprite->height*ent->sprScale.y/2,frameCount);
|
||||||
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
ent->damageFrame=frameCount;
|
ent->damageFrame=frameCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
|
PLAYER_HP=std::clamp(PLAYER_HP-finalDamage,0,PLAYER_MAXHP);
|
||||||
DisplayNumber*numb = new DisplayNumber(finalDamage,PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
DisplayNumber*numb = CreateDisplayNumber(finalDamage,PLAYER_COORDS[0],PLAYER_COORDS[1],frameCount);
|
||||||
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
BATTLE_DISPLAY_NUMBERS.push_back(numb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2762,7 +2886,8 @@ public:
|
|||||||
bool isPriorityMove(WEATHER_POWER*power) {
|
bool isPriorityMove(WEATHER_POWER*power) {
|
||||||
return
|
return
|
||||||
power->name.compare("Seed Storm")==0||
|
power->name.compare("Seed Storm")==0||
|
||||||
power->name.compare("Seed of Life")==0;
|
power->name.compare("Seed of Life")==0||
|
||||||
|
power->name.compare("Petal Storm")==0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isFoodMove(WEATHER_POWER*power) {
|
bool isFoodMove(WEATHER_POWER*power) {
|
||||||
@ -2770,6 +2895,36 @@ public:
|
|||||||
power->name.compare("Meal")==0||
|
power->name.compare("Meal")==0||
|
||||||
power->name.compare("Snack")==0;
|
power->name.compare("Snack")==0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addSeeds(int seedCount) {
|
||||||
|
for (int i=0;i<seedCount;i++) {
|
||||||
|
SEEDS.push_back(new Seed({range(-32,32),range(-32,32)}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearSeeds() {
|
||||||
|
for (int i=0;i<SEEDS.size();i++) {
|
||||||
|
delete SEEDS[i];
|
||||||
|
}
|
||||||
|
SEEDS.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void addTrees(int treeCount) {
|
||||||
|
for (int i=0;i<treeCount;i++) {
|
||||||
|
TREES.push_back(new Seed({range(-64,64),range(-64,64)}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearTrees() {
|
||||||
|
for (int i=0;i<TREES.size();i++) {
|
||||||
|
delete TREES[i];
|
||||||
|
}
|
||||||
|
TREES.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayNumber*CreateDisplayNumber(int numb,float x,float y,int frameCount) {
|
||||||
|
return new DisplayNumber(numb,x+range(-0.5,0.5),y+range(-0.5,0.5),frameCount);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 10 MiB After Width: | Height: | Size: 10 MiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -32,4 +32,6 @@
|
|||||||
11;5;PLANT
|
11;5;PLANT
|
||||||
15;6;EXIT
|
15;6;EXIT
|
||||||
16;6;EXIT
|
16;6;EXIT
|
||||||
20;4;COMPUTER
|
20;4;COMPUTER
|
||||||
|
20;5;PETALSTORM_NODE
|
||||||
|
20;6;HURRICANE_NODE
|
BIN
assets/seed.png
Normal file
BIN
assets/seed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 803 B |
BIN
assets/tree.png
Normal file
BIN
assets/tree.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
15
data.h
15
data.h
@ -88,6 +88,21 @@ Huh, it still doesn't work. At least the signaling is fixed. Maybe it'll work to
|
|||||||
R"(
|
R"(
|
||||||
$PLAYER
|
$PLAYER
|
||||||
I'll go inside and get some rest in the meantime.)",//19
|
I'll go inside and get some rest in the meantime.)",//19
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
Ugh..Why now?)",//20
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
Of course now would be a GREAT time for an invasion.)",//21
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
What's with that weird sigil on its body..?)",//22
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
Urgh...Not good, seems dangerous. Time to use Petal Storm. It allows me to regenerate health while setting up seeds!)",//23
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
Then I'll be able to use Hurricane powers in order to grow them, nourishing me while dealing additional damage!)",//24
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user