generated from sigonasr2/CPlusPlusProjectTemplate
Go Outside
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
541c3823e9
commit
29ab43fbb2
@ -51,6 +51,10 @@ namespace cutscene{
|
|||||||
NODE_COLLECT_CUTSCENE,
|
NODE_COLLECT_CUTSCENE,
|
||||||
PAN_OVER_TO_CROPS,
|
PAN_OVER_TO_CROPS,
|
||||||
RAINING_IN_DOME,
|
RAINING_IN_DOME,
|
||||||
|
AFTER_RAIN,
|
||||||
|
WALK_TO_COMPUTER,
|
||||||
|
INPUT_USERNAME,
|
||||||
|
GO_OUTSIDE,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +72,13 @@ namespace battle{
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace gameflag{
|
||||||
|
enum FLAG{
|
||||||
|
TUTORIAL_WALKED_OFF_FARM,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAX_TERMINAL_NAME_LENGTH 6
|
||||||
#define WIDTH 256
|
#define WIDTH 256
|
||||||
#define HEIGHT 224
|
#define HEIGHT 224
|
||||||
#define ALPHA_SCREEN1 128
|
#define ALPHA_SCREEN1 128
|
||||||
@ -141,9 +152,9 @@ class Object{
|
|||||||
Animation*anim;
|
Animation*anim;
|
||||||
vi2d spos;
|
vi2d spos;
|
||||||
vi2d size;
|
vi2d size;
|
||||||
bool flipped;
|
bool flipped=false;
|
||||||
bool hascut=false;
|
bool hascut=false;
|
||||||
bool tempObj;
|
bool tempObj=false;
|
||||||
Object(){};
|
Object(){};
|
||||||
Object(Decal*spr) {
|
Object(Decal*spr) {
|
||||||
this->spr=spr;
|
this->spr=spr;
|
||||||
@ -297,6 +308,7 @@ public:
|
|||||||
const float TARGET_RATE = 1/60.0;
|
const float TARGET_RATE = 1/60.0;
|
||||||
std::string MAP_NAME = "";
|
std::string MAP_NAME = "";
|
||||||
std::string CUTSCENE_CONSOLE_TEXT = "";
|
std::string CUTSCENE_CONSOLE_TEXT = "";
|
||||||
|
bool GAME_FLAGS[128]={};
|
||||||
int**MAP=NULL;
|
int**MAP=NULL;
|
||||||
int MAP_WIDTH=-1;
|
int MAP_WIDTH=-1;
|
||||||
int MAP_HEIGHT=-1;
|
int MAP_HEIGHT=-1;
|
||||||
@ -308,6 +320,7 @@ public:
|
|||||||
int CUTSCENE_TIMER=0;
|
int CUTSCENE_TIMER=0;
|
||||||
bool CUTSCENE_FLAGS[8];
|
bool CUTSCENE_FLAGS[8];
|
||||||
Object*CUTSCENE_OBJS[8];
|
Object*CUTSCENE_OBJS[8];
|
||||||
|
int CUTSCENE_OBJ_INDICES[8];
|
||||||
bool messageBoxVisible=false;
|
bool messageBoxVisible=false;
|
||||||
int messageBoxCursor;
|
int messageBoxCursor;
|
||||||
std::string messageBoxSpeaker;
|
std::string messageBoxSpeaker;
|
||||||
@ -319,7 +332,7 @@ public:
|
|||||||
int foodCount=3;
|
int foodCount=3;
|
||||||
bool oxygenMeterVisible=false;
|
bool oxygenMeterVisible=false;
|
||||||
int oxygenQualityLevel=34;
|
int oxygenQualityLevel=34;
|
||||||
int plantState=0b10010110101000101010100110101010;
|
int plantState=0b01001010010100010101010010010101;
|
||||||
SplashScreen splash;
|
SplashScreen splash;
|
||||||
Animation current_playerAnim;
|
Animation current_playerAnim;
|
||||||
Animation playerAnim;
|
Animation playerAnim;
|
||||||
@ -393,13 +406,17 @@ public:
|
|||||||
vf2d PIXEL_SIZE;
|
vf2d PIXEL_SIZE;
|
||||||
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
std::vector<WEATHER_POWER*>MOVESET_SPIDEY;
|
||||||
float PIXEL_EFFECT_TRANSPARENCY=0.5;
|
float PIXEL_EFFECT_TRANSPARENCY=0.5;
|
||||||
|
int CUTSCENE_OBJ_COUNT=0;
|
||||||
|
int TERMINAL_SELECTED_CHAR=0;
|
||||||
|
std::string TERMINAL_INPUT="";
|
||||||
|
std::string PLAYER_NAME="...";
|
||||||
|
|
||||||
|
|
||||||
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,
|
||||||
*WEATHERNODE_EFFECT_DECAL,*POWER_HAILSTORM_DECAL,*POWER_HURRICANE_DECAL,*POWER_METEOR_SHOWER_DECAL,*POWER_METEOR_STORM_DECAL,*POWER_SNOWSTORM_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,
|
*SPIDEY_DECAL,*TARGETING_CIRCLE,*TARGETING_RANGE_CIRCLE,*HEALTHBAR_DECAL,
|
||||||
*CONSUME_SNACK_DECAL,*CONSUME_MEAL_DECAL;
|
*CONSUME_SNACK_DECAL,*CONSUME_MEAL_DECAL,*COMPUTER_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;
|
||||||
@ -440,6 +457,7 @@ public:
|
|||||||
TARGETING_CIRCLE=new Decal(new Sprite("assets/targetCircle.png"));
|
TARGETING_CIRCLE=new Decal(new Sprite("assets/targetCircle.png"));
|
||||||
TARGETING_RANGE_CIRCLE=new Decal(new Sprite("assets/targetRange.png"));
|
TARGETING_RANGE_CIRCLE=new Decal(new Sprite("assets/targetRange.png"));
|
||||||
HEALTHBAR_DECAL=new Decal(new Sprite("assets/healthbar.png"));
|
HEALTHBAR_DECAL=new Decal(new Sprite("assets/healthbar.png"));
|
||||||
|
COMPUTER_DECAL=new Decal(new Sprite("assets/computerSystem.png"));
|
||||||
|
|
||||||
current_playerAnim.spr=PLAYER_DECAL;
|
current_playerAnim.spr=PLAYER_DECAL;
|
||||||
playerAnim.spr=PLAYER_DECAL;
|
playerAnim.spr=PLAYER_DECAL;
|
||||||
@ -540,6 +558,7 @@ public:
|
|||||||
BASE_OBJECTS["METEORSHOWER_NODE"]=new ObjectLoadInfo(POWER_METEOR_SHOWER_DECAL,&POWER_METEOR_SHOWER_ANIMATION);
|
BASE_OBJECTS["METEORSHOWER_NODE"]=new ObjectLoadInfo(POWER_METEOR_SHOWER_DECAL,&POWER_METEOR_SHOWER_ANIMATION);
|
||||||
BASE_OBJECTS["METEORSTORM_NODE"]=new ObjectLoadInfo(POWER_METEOR_STORM_DECAL,&POWER_METEOR_STORM_ANIMATION);
|
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["SNOWSTORM_NODE"]=new ObjectLoadInfo(POWER_SNOWSTORM_DECAL,&POWER_SNOWSTORM_ANIMATION);
|
||||||
|
BASE_OBJECTS["COMPUTER"]=new ObjectLoadInfo(COMPUTER_DECAL);
|
||||||
|
|
||||||
|
|
||||||
for (int i=0;i<MAX_PIXELS;i++) {
|
for (int i=0;i<MAX_PIXELS;i++) {
|
||||||
@ -582,6 +601,7 @@ public:
|
|||||||
//cout<<"You are standing over plant "<<getPlantId((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1])<<" in state "<<getPlantStatus((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1]);
|
//cout<<"You are standing over plant "<<getPlantId((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1])<<" in state "<<getPlantStatus((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1]);
|
||||||
if (getPlantStatus((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1])==2) {
|
if (getPlantStatus((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1])==2) {
|
||||||
setPlantStatus((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1],0);
|
setPlantStatus((int)PLAYER_COORDS[0],(int)PLAYER_COORDS[1],0);
|
||||||
|
foodCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@ -615,6 +635,21 @@ public:
|
|||||||
case cutscene::NODE_COLLECT_CUTSCENE:{
|
case cutscene::NODE_COLLECT_CUTSCENE:{
|
||||||
EndCutscene();
|
EndCutscene();
|
||||||
}break;
|
}break;
|
||||||
|
case cutscene::INPUT_USERNAME:{
|
||||||
|
if (TERMINAL_SELECTED_CHAR<26&&TERMINAL_INPUT.length()<MAX_TERMINAL_NAME_LENGTH) {
|
||||||
|
TERMINAL_INPUT+=(char)('A'+TERMINAL_SELECTED_CHAR);
|
||||||
|
if (TERMINAL_INPUT.length()==MAX_TERMINAL_NAME_LENGTH) {
|
||||||
|
TERMINAL_SELECTED_CHAR=27;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (TERMINAL_SELECTED_CHAR==26&&TERMINAL_INPUT.length()>0) {
|
||||||
|
TERMINAL_INPUT.erase(TERMINAL_INPUT.length()-1);
|
||||||
|
} else
|
||||||
|
if (TERMINAL_SELECTED_CHAR==27&&TERMINAL_INPUT.length()>0) {
|
||||||
|
PLAYER_NAME=TERMINAL_INPUT;
|
||||||
|
PlayCutscene(cutscene::GO_OUTSIDE);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,6 +733,38 @@ public:
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
switch (CURRENT_CUTSCENE) {
|
||||||
|
case cutscene::INPUT_USERNAME:{
|
||||||
|
if (GetKey(W).bPressed||GetKey(UP).bPressed||GetKey(NP8).bPressed) {
|
||||||
|
TERMINAL_SELECTED_CHAR=TERMINAL_SELECTED_CHAR-7;
|
||||||
|
if (TERMINAL_SELECTED_CHAR<0) {
|
||||||
|
TERMINAL_SELECTED_CHAR+=28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (GetKey(D).bPressed||GetKey(RIGHT).bPressed||GetKey(NP6).bPressed) {
|
||||||
|
if ((TERMINAL_SELECTED_CHAR+1)%7==0) {
|
||||||
|
TERMINAL_SELECTED_CHAR-=6;
|
||||||
|
} else {
|
||||||
|
TERMINAL_SELECTED_CHAR++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed) {
|
||||||
|
if ((TERMINAL_SELECTED_CHAR-1)%7==6||TERMINAL_SELECTED_CHAR-1<0) {
|
||||||
|
TERMINAL_SELECTED_CHAR+=6;
|
||||||
|
} else {
|
||||||
|
TERMINAL_SELECTED_CHAR--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (GetKey(S).bPressed||GetKey(DOWN).bPressed||GetKey(NP5).bPressed||GetKey(NP2).bPressed) {
|
||||||
|
if (TERMINAL_SELECTED_CHAR+7>=28) {
|
||||||
|
TERMINAL_SELECTED_CHAR=(TERMINAL_SELECTED_CHAR+7)%28;
|
||||||
|
} else {
|
||||||
|
TERMINAL_SELECTED_CHAR+=7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SetDrawTarget(nullptr);
|
SetDrawTarget(nullptr);
|
||||||
Clear(BLANK);
|
Clear(BLANK);
|
||||||
@ -759,6 +826,7 @@ public:
|
|||||||
}break;
|
}break;
|
||||||
case cutscene::RAINING_IN_DOME:{
|
case cutscene::RAINING_IN_DOME:{
|
||||||
applyPixelEffect(HURRICANE,GetMapFileCoords(7,11));
|
applyPixelEffect(HURRICANE,GetMapFileCoords(7,11));
|
||||||
|
CUTSCENE_TIMER=0;
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
for (int i=0;i<8;i++) {
|
for (int i=0;i<8;i++) {
|
||||||
@ -801,43 +869,59 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (playerCanMove()) {
|
if (playerCanMove()) {
|
||||||
bool changed=false;
|
bool animationchanged=false;
|
||||||
|
bool positionModified=false;
|
||||||
if (GetKey(D).bHeld||GetKey(RIGHT).bHeld||GetKey(NP6).bHeld) {
|
if (GetKey(D).bHeld||GetKey(RIGHT).bHeld||GetKey(NP6).bHeld) {
|
||||||
|
if (MAP[(int)PLAYER_COORDS[1]][(int)std::clamp(PLAYER_COORDS[0]+MOVE_SPD,0.1,(double)MAP_WIDTH)]!=4) {
|
||||||
PLAYER_COORDS[0]=std::clamp(PLAYER_COORDS[0]+MOVE_SPD,0.1,(double)MAP_WIDTH);
|
PLAYER_COORDS[0]=std::clamp(PLAYER_COORDS[0]+MOVE_SPD,0.1,(double)MAP_WIDTH);
|
||||||
|
positionModified=true;
|
||||||
|
}
|
||||||
//ConsoleClear();
|
//ConsoleClear();
|
||||||
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
||||||
if (!changed&&¤t_playerAnim!=&playerAnimWalkRight) {
|
if (!animationchanged&&¤t_playerAnim!=&playerAnimWalkRight) {
|
||||||
changeAnimation(playerAnimWalkRight);
|
changeAnimation(playerAnimWalkRight);
|
||||||
changed=true;
|
animationchanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (GetKey(A).bHeld||GetKey(LEFT).bHeld||GetKey(NP4).bHeld) {
|
if (GetKey(A).bHeld||GetKey(LEFT).bHeld||GetKey(NP4).bHeld) {
|
||||||
|
if (MAP[(int)PLAYER_COORDS[1]][(int)std::clamp(PLAYER_COORDS[0]-MOVE_SPD,0.1,(double)MAP_WIDTH)]!=4) {
|
||||||
PLAYER_COORDS[0]=std::clamp(PLAYER_COORDS[0]-MOVE_SPD,0.1,(double)MAP_WIDTH);
|
PLAYER_COORDS[0]=std::clamp(PLAYER_COORDS[0]-MOVE_SPD,0.1,(double)MAP_WIDTH);
|
||||||
|
positionModified=true;
|
||||||
|
}
|
||||||
//ConsoleClear();
|
//ConsoleClear();
|
||||||
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
||||||
if (!changed&&¤t_playerAnim!=&playerAnimWalkLeft) {
|
if (!animationchanged&&¤t_playerAnim!=&playerAnimWalkLeft) {
|
||||||
changeAnimation(playerAnimWalkLeft);
|
changeAnimation(playerAnimWalkLeft);
|
||||||
changed=true;
|
animationchanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (GetKey(W).bHeld||GetKey(UP).bHeld||GetKey(NP8).bHeld) {
|
if (GetKey(W).bHeld||GetKey(UP).bHeld||GetKey(NP8).bHeld) {
|
||||||
|
if (MAP[(int)std::clamp(PLAYER_COORDS[1]-MOVE_SPD,0.1,(double)MAP_HEIGHT)][(int)PLAYER_COORDS[0]]!=4) {
|
||||||
PLAYER_COORDS[1]=std::clamp(PLAYER_COORDS[1]-MOVE_SPD,0.1,(double)MAP_HEIGHT);
|
PLAYER_COORDS[1]=std::clamp(PLAYER_COORDS[1]-MOVE_SPD,0.1,(double)MAP_HEIGHT);
|
||||||
|
positionModified=true;
|
||||||
|
}
|
||||||
//ConsoleClear();
|
//ConsoleClear();
|
||||||
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
||||||
if (!changed&&¤t_playerAnim!=&playerAnimWalkUp) {
|
if (!animationchanged&&¤t_playerAnim!=&playerAnimWalkUp) {
|
||||||
changeAnimation(playerAnimWalkUp);
|
changeAnimation(playerAnimWalkUp);
|
||||||
changed=true;
|
animationchanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (GetKey(S).bHeld||GetKey(DOWN).bHeld||GetKey(NP5).bHeld||GetKey(NP2).bHeld) {
|
if (GetKey(S).bHeld||GetKey(DOWN).bHeld||GetKey(NP5).bHeld||GetKey(NP2).bHeld) {
|
||||||
|
if (MAP[(int)std::clamp(PLAYER_COORDS[1]+MOVE_SPD,0.1,(double)MAP_HEIGHT)][(int)PLAYER_COORDS[0]]!=4) {
|
||||||
PLAYER_COORDS[1]=std::clamp(PLAYER_COORDS[1]+MOVE_SPD,0.1,(double)MAP_HEIGHT);
|
PLAYER_COORDS[1]=std::clamp(PLAYER_COORDS[1]+MOVE_SPD,0.1,(double)MAP_HEIGHT);
|
||||||
|
positionModified=true;
|
||||||
|
}
|
||||||
//ConsoleClear();
|
//ConsoleClear();
|
||||||
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
//cout<<"("<<PLAYER_COORDS[0]<<","<<PLAYER_COORDS[1]<<+")";
|
||||||
if (!changed&&¤t_playerAnim!=&playerAnimWalkDown) {
|
if (!animationchanged&&¤t_playerAnim!=&playerAnimWalkDown) {
|
||||||
changeAnimation(playerAnimWalkDown);
|
changeAnimation(playerAnimWalkDown);
|
||||||
changed=true;
|
animationchanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (positionModified) {
|
||||||
|
playerMoved();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerCanMove()) {
|
if (playerCanMove()) {
|
||||||
@ -1110,6 +1194,91 @@ public:
|
|||||||
PlayCutscene(cutscene::RAINING_IN_DOME);
|
PlayCutscene(cutscene::RAINING_IN_DOME);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
case cutscene::RAINING_IN_DOME:{
|
||||||
|
if (CUTSCENE_TIMER%60==0) {
|
||||||
|
performCropUpdate(3);
|
||||||
|
}
|
||||||
|
if (CUTSCENE_TIMER>=60*6) {
|
||||||
|
PIXEL_EFFECT_TRANSPARENCY=(60-(CUTSCENE_TIMER-60*6))/60;
|
||||||
|
}
|
||||||
|
if (CUTSCENE_TIMER>=60*7) {
|
||||||
|
PlayCutscene(cutscene::AFTER_RAIN);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case cutscene::AFTER_RAIN:{
|
||||||
|
if (!messageBoxVisible) {
|
||||||
|
if (!CUTSCENE_FLAGS[0]) {
|
||||||
|
DisplayMessageBox(2);
|
||||||
|
CUTSCENE_FLAGS[0]=true;
|
||||||
|
} else
|
||||||
|
if (!CUTSCENE_FLAGS[1]) {
|
||||||
|
DisplayMessageBox(3);
|
||||||
|
CUTSCENE_FLAGS[1]=true;
|
||||||
|
foodMeterVisible=true;
|
||||||
|
} else {
|
||||||
|
PLAYER_COORDS[0]=13;
|
||||||
|
PLAYER_COORDS[1]=4;
|
||||||
|
changeAnimation(playerAnimLeft);
|
||||||
|
EndCutscene();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case cutscene::WALK_TO_COMPUTER:{
|
||||||
|
if (!messageBoxVisible) {
|
||||||
|
if (!CUTSCENE_FLAGS[0]) {
|
||||||
|
DisplayMessageBox(11);
|
||||||
|
CUTSCENE_FLAGS[0]=true;
|
||||||
|
} else
|
||||||
|
if (!CUTSCENE_FLAGS[1]) {
|
||||||
|
DisplayMessageBox(4);
|
||||||
|
CUTSCENE_FLAGS[1]=true;
|
||||||
|
} else {
|
||||||
|
vi2d targetPos = GetMapFileCoords(19,4);
|
||||||
|
if (CUTSCENE_OBJS[0]->x<19) {
|
||||||
|
CUTSCENE_OBJS[0]->x+=MOVE_SPD;
|
||||||
|
if (CUTSCENE_OBJS[0]->x>19) {
|
||||||
|
CUTSCENE_OBJS[0]->x=19;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CUTSCENE_OBJS[0]->y<4) {
|
||||||
|
CUTSCENE_OBJS[0]->y+=MOVE_SPD;
|
||||||
|
if (CUTSCENE_OBJS[0]->y>4) {
|
||||||
|
CUTSCENE_OBJS[0]->y=4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CUTSCENE_OBJS[0]->y>4) {
|
||||||
|
CUTSCENE_OBJS[0]->y-=MOVE_SPD;
|
||||||
|
if (CUTSCENE_OBJS[0]->y<4) {
|
||||||
|
CUTSCENE_OBJS[0]->y=4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (MoveCameraTowardsPoint({19,4})) {
|
||||||
|
if (!CUTSCENE_FLAGS[2]) {
|
||||||
|
DisplayMessageBox(5);
|
||||||
|
CUTSCENE_FLAGS[2]=true;
|
||||||
|
} else {
|
||||||
|
PlayCutscene(cutscene::INPUT_USERNAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case cutscene::GO_OUTSIDE:{
|
||||||
|
if (!messageBoxVisible) {
|
||||||
|
if (!CUTSCENE_FLAGS[0]) {
|
||||||
|
CUTSCENE_FLAGS[0]=true;
|
||||||
|
DisplayMessageBox(12);
|
||||||
|
} else
|
||||||
|
if (!CUTSCENE_FLAGS[1]) {
|
||||||
|
CUTSCENE_FLAGS[1]=true;
|
||||||
|
DisplayMessageBox(6);
|
||||||
|
} else {
|
||||||
|
PLAYER_COORDS[0]=19;
|
||||||
|
PLAYER_COORDS[1]=4;
|
||||||
|
EndCutscene();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
@ -1221,6 +1390,15 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Triggers when the player has successfully moved.
|
||||||
|
void playerMoved(){
|
||||||
|
if (!GAME_FLAGS[gameflag::TUTORIAL_WALKED_OFF_FARM]&&foodCount>3&&PLAYER_COORDS[0]>12) {
|
||||||
|
GAME_FLAGS[gameflag::TUTORIAL_WALKED_OFF_FARM]=true;
|
||||||
|
PlayCutscene(cutscene::WALK_TO_COMPUTER);
|
||||||
|
CUTSCENE_OBJS[0]=CreateObject({PLAYER_COORDS[0],PLAYER_COORDS[1]},PLAYER_DECAL,{32,0},{32,32},true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void drawGame(){
|
void drawGame(){
|
||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
case CUTSCENE_1:{
|
case CUTSCENE_1:{
|
||||||
@ -1241,14 +1419,14 @@ public:
|
|||||||
int meterYOffset=2;
|
int meterYOffset=2;
|
||||||
if (CURRENT_CUTSCENE==cutscene::NONE) {
|
if (CURRENT_CUTSCENE==cutscene::NONE) {
|
||||||
if (foodMeterVisible) {
|
if (foodMeterVisible) {
|
||||||
DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(foodCount)).x*1-8,meterYOffset+2},std::to_string(foodCount),BLUE,{1,1});
|
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),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});
|
||||||
DrawDecal({WIDTH-52*0.4,meterYOffset},FOOD_METER_DECAL,{0.4,0.4});
|
DrawDecal({WIDTH-52*0.4,meterYOffset},FOOD_METER_DECAL,{0.4,0.4});
|
||||||
meterYOffset+=(2+48*0.4);
|
meterYOffset+=(2+48*0.4);
|
||||||
}
|
}
|
||||||
if (oxygenMeterVisible) {
|
if (oxygenMeterVisible) {
|
||||||
DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(oxygenQualityLevel)+"%").x*1-8,meterYOffset+2},std::to_string(oxygenQualityLevel)+"%",BLUE,{1,1});
|
DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(oxygenQualityLevel)+"%").x*1-8,meterYOffset+1},std::to_string(oxygenQualityLevel)+"%",BLACK,{1,1});
|
||||||
DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(oxygenQualityLevel)+"%").x*1-7,meterYOffset+2},std::to_string(oxygenQualityLevel)+"%",BLACK,{1,1});
|
DrawStringDecal({WIDTH-36*0.4-GetTextSize(std::to_string(oxygenQualityLevel)+"%").x*1-7,meterYOffset+2},std::to_string(oxygenQualityLevel)+"%",WHITE,{1,1});
|
||||||
DrawDecal({WIDTH-52*0.4,meterYOffset},OXYGEN_METER_DECAL,{0.4,0.4});
|
DrawDecal({WIDTH-52*0.4,meterYOffset},OXYGEN_METER_DECAL,{0.4,0.4});
|
||||||
meterYOffset+=(2+48*0.4);
|
meterYOffset+=(2+48*0.4);
|
||||||
}
|
}
|
||||||
@ -1337,6 +1515,10 @@ public:
|
|||||||
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,128));
|
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,128));
|
||||||
DrawCard(CUTSCENE_DISPLAYED_CARD);
|
DrawCard(CUTSCENE_DISPLAYED_CARD);
|
||||||
}break;
|
}break;
|
||||||
|
case cutscene::INPUT_USERNAME:{
|
||||||
|
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,128));
|
||||||
|
DrawTerminal();
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,transparency));
|
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,transparency));
|
||||||
//FillRectDecal({WIDTH/2-2,HEIGHT/2-2},{4,4},WHITE);
|
//FillRectDecal({WIDTH/2-2,HEIGHT/2-2},{4,4},WHITE);
|
||||||
@ -1411,14 +1593,46 @@ public:
|
|||||||
DrawDecal(pos,HEALTHBAR_DECAL,{width/32,1},col);
|
DrawDecal(pos,HEALTHBAR_DECAL,{width/32,1},col);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrawTerminal() {
|
||||||
|
const int TERMINAL_WIDTH=7;
|
||||||
|
for (int i=0;i<26;i++) {
|
||||||
|
std::string s(1,(char)('A'+i));
|
||||||
|
DrawStringDecal({(32*(i%TERMINAL_WIDTH))+16,16*(i/TERMINAL_WIDTH)+HEIGHT/2},s);
|
||||||
|
}
|
||||||
|
std::string backspace(1,(char)('<'));
|
||||||
|
DrawStringDecal({(32*(26%TERMINAL_WIDTH))+16,16*(26/TERMINAL_WIDTH)+HEIGHT/2},backspace);
|
||||||
|
DrawStringDecal({(32*(27%TERMINAL_WIDTH))+16,16*(27/TERMINAL_WIDTH)+HEIGHT/2},"ENTER");
|
||||||
|
DrawStringDecal({(32*((TERMINAL_SELECTED_CHAR)%TERMINAL_WIDTH))+8,16*(TERMINAL_SELECTED_CHAR/TERMINAL_WIDTH)+HEIGHT/2},">");
|
||||||
|
std::string terminal_name=TERMINAL_INPUT;
|
||||||
|
for (int i=0;i<MAX_TERMINAL_NAME_LENGTH-TERMINAL_INPUT.length();i++) {
|
||||||
|
terminal_name+="*";
|
||||||
|
}
|
||||||
|
DrawStringDecal({WIDTH/2-GetTextSize(terminal_name).x*2/2,HEIGHT/3-GetTextSize(terminal_name).y*2/2}, terminal_name,olc::WHITE,{2.0,2.0});
|
||||||
|
|
||||||
|
GradientFillRectDecal({0,0},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1});
|
||||||
|
GradientFillRectDecal({WIDTH/2,0},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1});
|
||||||
|
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2});
|
||||||
|
GradientFillRectDecal({WIDTH/2,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1});
|
||||||
|
}
|
||||||
|
|
||||||
int getPlantId(int x, int y) {
|
int getPlantId(int x, int y) {
|
||||||
return ((int)x-8)%4+((int)y-2)*4;
|
return ((int)x-8)%4+((int)y-2)*4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getPlantStatusWithAbsoluteCoords(int x,int y) {
|
||||||
|
return plantState>>getPlantId(x+8,y+2)*2&0b11;
|
||||||
|
}
|
||||||
|
|
||||||
|
//This uses MAP COORDS for determining bit location. The plants are offset by (X+8,Y+2)!! Use getPlantStatusWithAbsoluteCoords() to translate to map coords.
|
||||||
int getPlantStatus(int x,int y) {
|
int getPlantStatus(int x,int y) {
|
||||||
return plantState>>getPlantId(x,y)*2&0b11;
|
return plantState>>getPlantId(x,y)*2&0b11;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setPlantStatusWithAbsoluteCoords(int x,int y,char state) {
|
||||||
|
setPlantStatus(x+8,y+2,state);
|
||||||
|
}
|
||||||
|
|
||||||
|
//This uses MAP COORDS for determining bit location. The plants are offset by (X+8,Y+2)!! Use setPlantStatusWithAbsoluteCoords() to translate to map coords.
|
||||||
void setPlantStatus(int x,int y,char state) {
|
void setPlantStatus(int x,int y,char state) {
|
||||||
int mask=0b11111111111111111111111111111111;
|
int mask=0b11111111111111111111111111111111;
|
||||||
mask-=3<<getPlantId(x,y)*2;
|
mask-=3<<getPlantId(x,y)*2;
|
||||||
@ -1446,6 +1660,18 @@ public:
|
|||||||
|
|
||||||
void EndCutscene() {
|
void EndCutscene() {
|
||||||
CURRENT_CUTSCENE=cutscene::NONE;
|
CURRENT_CUTSCENE=cutscene::NONE;
|
||||||
|
for (int i=0;i<8;i++) {
|
||||||
|
for (int j=0;j<OBJECTS.size();j++) {
|
||||||
|
if (OBJECTS[j]==CUTSCENE_OBJS[i]) {
|
||||||
|
if (CUTSCENE_OBJS[i]->tempObj) {
|
||||||
|
OBJECTS.erase(OBJECTS.begin()+j);
|
||||||
|
std::cout<<"Erased at position "<<j<<".\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
delete CUTSCENE_OBJS[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayMessageBox(int dialogNumber) {
|
void DisplayMessageBox(int dialogNumber) {
|
||||||
@ -1454,7 +1680,7 @@ public:
|
|||||||
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.
|
||||||
std::string split2=STORY_DIALOG[dialogNumber].substr(STORY_DIALOG[dialogNumber].find('\n')+1,STORY_DIALOG[dialogNumber].find('\n',STORY_DIALOG[dialogNumber].find('\n')+1)-(STORY_DIALOG[dialogNumber].find('\n')+1));
|
std::string split2=STORY_DIALOG[dialogNumber].substr(STORY_DIALOG[dialogNumber].find('\n')+1,STORY_DIALOG[dialogNumber].find('\n',STORY_DIALOG[dialogNumber].find('\n')+1)-(STORY_DIALOG[dialogNumber].find('\n')+1));
|
||||||
std::string split3=STORY_DIALOG[dialogNumber].substr(STORY_DIALOG[dialogNumber].find('\n',STORY_DIALOG[dialogNumber].find('\n')+1)+1,STORY_DIALOG[dialogNumber].length()-(STORY_DIALOG[dialogNumber].find('\n',STORY_DIALOG[dialogNumber].find('\n')+1)+1));
|
std::string split3=STORY_DIALOG[dialogNumber].substr(STORY_DIALOG[dialogNumber].find('\n',STORY_DIALOG[dialogNumber].find('\n')+1)+1,STORY_DIALOG[dialogNumber].length()-(STORY_DIALOG[dialogNumber].find('\n',STORY_DIALOG[dialogNumber].find('\n')+1)+1));
|
||||||
messageBoxSpeaker=split2;
|
messageBoxSpeaker=(split2.compare("$PLAYER")==0)?split2.replace(0,split2.length(),PLAYER_NAME):split2;
|
||||||
messageBoxText="";
|
messageBoxText="";
|
||||||
messageBoxRefText=split3;
|
messageBoxRefText=split3;
|
||||||
}
|
}
|
||||||
@ -1706,7 +1932,7 @@ public:
|
|||||||
for (int x=0;x<4;x++) {
|
for (int x=0;x<4;x++) {
|
||||||
for (int y=0;y<4;y++) {
|
for (int y=0;y<4;y++) {
|
||||||
if (rand()%chanceToRegrow==0) {
|
if (rand()%chanceToRegrow==0) {
|
||||||
setPlantStatus(x,y,std::clamp(getPlantStatus(x,y)+1,0,2));
|
setPlantStatusWithAbsoluteCoords(x,y,std::clamp(getPlantStatusWithAbsoluteCoords(x,y)+1,0,2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1845,7 +2071,7 @@ public:
|
|||||||
PLAYER_COORDS[1]=teleLoc.y+0.5;
|
PLAYER_COORDS[1]=teleLoc.y+0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
Object*CreateObject(vf2d pos,Decal*spr,bool temporary=false) {
|
Object*CreateObject(vf2d pos,Decal*spr,int ,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;
|
||||||
@ -1877,6 +2103,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Returns true if the camera reached the target position.
|
||||||
bool MoveCameraTowardsPoint(vf2d pos,float spd=BATTLE_CAMERA_SCROLL_SPD) {
|
bool MoveCameraTowardsPoint(vf2d pos,float spd=BATTLE_CAMERA_SCROLL_SPD) {
|
||||||
bool reachedPosition=true;
|
bool reachedPosition=true;
|
||||||
if (PLAYER_COORDS[0]!=pos.x) {
|
if (PLAYER_COORDS[0]!=pos.x) {
|
||||||
|
Binary file not shown.
BIN
assets/computerSystem.png
Normal file
BIN
assets/computerSystem.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
@ -1,12 +1,16 @@
|
|||||||
29
|
29
|
||||||
10
|
14
|
||||||
|
00000000000000000000000000000
|
||||||
|
00000004444444444444440000000
|
||||||
|
00000004111133333333340000000
|
||||||
|
00000004111133333333340000000
|
||||||
|
00000004111133333333340000000
|
||||||
|
00000004111133333333340000000
|
||||||
|
00000004333333333333340000000
|
||||||
|
00000004444444444444440000000
|
||||||
|
00000000000000000000000000000
|
||||||
00000000000000000000000000000
|
00000000000000000000000000000
|
||||||
00000000000000000000000000000
|
00000000000000000000000000000
|
||||||
00000000111133333333300000000
|
|
||||||
00000000111133333333300000000
|
|
||||||
00000000111133333333300000000
|
|
||||||
00000000111133333333300000000
|
|
||||||
00000000333333333333300000000
|
|
||||||
00000000000000000000000000000
|
00000000000000000000000000000
|
||||||
00000000000000000000000000000
|
00000000000000000000000000000
|
||||||
00000000000000000000000000000
|
00000000000000000000000000000
|
||||||
@ -28,3 +32,4 @@
|
|||||||
11;5;PLANT
|
11;5;PLANT
|
||||||
15;6;EXIT
|
15;6;EXIT
|
||||||
16;6;EXIT
|
16;6;EXIT
|
||||||
|
20;4;COMPUTER
|
31
data.h
31
data.h
@ -24,19 +24,19 @@ $PLAYER
|
|||||||
Oh thank goodness, and just in time too!)", //1
|
Oh thank goodness, and just in time too!)", //1
|
||||||
R"(
|
R"(
|
||||||
CompU-16770
|
CompU-16770
|
||||||
RAIN CYCLE ENDING. NEXT RAIN CYCLE DUE IN 17 TERRESTIAL CYCLES.)", //2
|
RAIN CYCLE ENDING. NEXT RAIN CYCLE DUE IN 17 TERRA REVOLUTIONS.)", //2
|
||||||
R"(
|
R"(
|
||||||
$PLAYER
|
$PLAYER
|
||||||
I wonder how the air is today..)", //3
|
Time to collect these crops!)", //3
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
Looks like a good time to go out too! Oxygen levels are at a good reading. Just going to do a quick system log...)",//4
|
||||||
R"(
|
R"(
|
||||||
CompU-16770
|
CompU-16770
|
||||||
RAIN CYCLE ENDING. NEXT RAIN CYCLE DUE IN 17 TERRESTIAL CYCLES.)",//4
|
<ENTER USERNAME>)",//5
|
||||||
R"(
|
R"(
|
||||||
$PLAYER
|
$PLAYER
|
||||||
Hmm, an actual good day!)",//5
|
The winds must have kicked in early this morning. Better go outside and work on R.O.V.E.R..)",//6
|
||||||
R"(
|
|
||||||
$PLAYER
|
|
||||||
The winds must have kicked in early. Better go out and work on R.O.V.E.R..)",//6
|
|
||||||
R"(
|
R"(
|
||||||
$PLAYER
|
$PLAYER
|
||||||
I almost have the receiving unit repaired, I just need another good vein of silicon and we can finish this.)",//7
|
I almost have the receiving unit repaired, I just need another good vein of silicon and we can finish this.)",//7
|
||||||
@ -49,12 +49,19 @@ So those dust columns only form around large hole deposits. This is usually wher
|
|||||||
R"(
|
R"(
|
||||||
$PLAYER
|
$PLAYER
|
||||||
We'll head there.)",//10
|
We'll head there.)",//10
|
||||||
|
R"(
|
||||||
|
$PLAYER
|
||||||
|
What a great harvest!)",//11
|
||||||
|
R"(
|
||||||
|
CompU-16770
|
||||||
|
Authenticated. Record successfully logged.)",//12
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
olc::Pixel TILE_COLORS[4]={
|
olc::Pixel TILE_COLORS[]={
|
||||||
olc::Pixel(112, 88, 64), //DIRT
|
olc::Pixel(112, 88, 64), //0 DIRT
|
||||||
olc::Pixel(60, 97, 49), //GRASS
|
olc::Pixel(60, 97, 49), //1 GRASS
|
||||||
olc::Pixel(30, 84, 87), //WATER
|
olc::Pixel(30, 84, 87), //2 WATER
|
||||||
olc::Pixel(180, 191, 209), //MARBLE
|
olc::Pixel(180, 191, 209), //3 MARBLE
|
||||||
|
olc::Pixel(112, 88, 64), //4 WALL (DIRT)
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user