|
|
|
@ -19,6 +19,7 @@ using namespace olc; |
|
|
|
|
#define SKIP_CHAPTER2 true |
|
|
|
|
#define SKIP_STORYBOOK true |
|
|
|
|
#define SKIP_CHAPTER3 true |
|
|
|
|
#define SKIP_LAUNCHPAD true |
|
|
|
|
|
|
|
|
|
#define STARTING_MAP MAP_1 |
|
|
|
|
#define STARTING_STATE CUTSCENE_3 |
|
|
|
@ -59,6 +60,7 @@ enum GAMESTATE{ |
|
|
|
|
DISPLAY_BOOK, |
|
|
|
|
DISPLAY_BOOK2, |
|
|
|
|
CUTSCENE_6, |
|
|
|
|
IN_SPACE, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
namespace cutscene{ |
|
|
|
@ -97,6 +99,7 @@ namespace cutscene{ |
|
|
|
|
LAUNCHPAD_OPEN, |
|
|
|
|
LAUNCHPAD_PREPARE, |
|
|
|
|
READY_TO_BOARD, |
|
|
|
|
INTRUDERS_DETECTED, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -142,6 +145,7 @@ namespace gameflag{ |
|
|
|
|
ROCKET_LAUNCH_READY, |
|
|
|
|
COLLECTED_ITEMS_IN_DOME, |
|
|
|
|
BOARDED_ROCKET, |
|
|
|
|
INTRUDER_DETECTED, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -630,8 +634,10 @@ public: |
|
|
|
|
Pixel FOREGROUND_EFFECT_COLOR; |
|
|
|
|
Pixel ORIGINAL_FOREGROUND_EFFECT_COLOR; |
|
|
|
|
int PIXEL_LIMIT=0; |
|
|
|
|
vf2d PIXEL_POS; |
|
|
|
|
vf2d PIXEL_SIZE; |
|
|
|
|
vf2d PIXEL_POS={0,0}; |
|
|
|
|
vf2d PIXEL_SIZE={WIDTH,HEIGHT}; |
|
|
|
|
vf2d STAR_POS={0,0}; |
|
|
|
|
vf2d STAR_SIZE={WIDTH,HEIGHT}; |
|
|
|
|
float PIXEL_EFFECT_TRANSPARENCY=0; |
|
|
|
|
int CUTSCENE_OBJ_COUNT=0; |
|
|
|
|
int TERMINAL_SELECTED_CHAR=0; |
|
|
|
@ -648,6 +654,7 @@ public: |
|
|
|
|
int BATTLE_REASON_CODE=-1; |
|
|
|
|
bool BATTLE_DROUGHT_ACTIVE=false;
|
|
|
|
|
bool ROCKET_BOARD_OPTION=false; |
|
|
|
|
int LOCKED_IN_DELAY=0; |
|
|
|
|
|
|
|
|
|
Map*MAP_1=new Map("map1"); |
|
|
|
|
Map*MAP_2=new Map("map2"); |
|
|
|
@ -674,6 +681,7 @@ public: |
|
|
|
|
Encounter ENCOUNTER_SANDWORM_1; |
|
|
|
|
Encounter ENCOUNTER_MEGAMOTH; |
|
|
|
|
Encounter ENCOUNTER_SNAKEPACK; |
|
|
|
|
Encounter ENCOUNTER_Y_Y; |
|
|
|
|
Encounter CURRENT_ENCOUNTER; |
|
|
|
|
std::vector<WEATHER_POWER*>MOVESET_SPIDEY; |
|
|
|
|
std::vector<WEATHER_POWER*>MOVESET_SANDWORM; |
|
|
|
@ -683,6 +691,7 @@ public: |
|
|
|
|
std::vector<WEATHER_POWER*>MOVESET_XMINION; |
|
|
|
|
std::vector<WEATHER_POWER*>MOVESET_MEGAMOTH; |
|
|
|
|
std::vector<WEATHER_POWER*>MOVESET_SIDEWINDER; |
|
|
|
|
std::vector<WEATHER_POWER*>MOVESET_Y_Y; |
|
|
|
|
std::vector<Seed*>SEEDS; |
|
|
|
|
std::vector<Seed*>TREES; |
|
|
|
|
bool SOUND_IS_MUTED=false; |
|
|
|
@ -704,6 +713,7 @@ public: |
|
|
|
|
|
|
|
|
|
#define MAX_PIXELS 500 |
|
|
|
|
effect::Pixel*pixels[MAX_PIXELS]; |
|
|
|
|
effect::Pixel*starpixels[150]; |
|
|
|
|
|
|
|
|
|
bool OnUserCreate() override |
|
|
|
|
{ |
|
|
|
@ -717,27 +727,33 @@ public: |
|
|
|
|
EnableLayer(i,true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (SKIP_INTRO||SKIP_CHAPTER1||SKIP_CHAPTER2||SKIP_CHAPTER3) { |
|
|
|
|
if (SKIP_INTRO||SKIP_CHAPTER1||SKIP_CHAPTER2||SKIP_CHAPTER3||SKIP_LAUNCHPAD) { |
|
|
|
|
GAME_FLAGS[gameflag::TUTORIAL_WALKED_OFF_FARM]=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||SKIP_LAUNCHPAD) { |
|
|
|
|
GAME_FLAGS[gameflag::COLLECTED_SILICON_1]=true; |
|
|
|
|
GAME_FLAGS[gameflag::REPAIRED_ROVER_1]=true; |
|
|
|
|
GAME_FLAGS[gameflag::REST_IN_DOME]=true; |
|
|
|
|
GAME_STATE=GAMEWORLD; |
|
|
|
|
} |
|
|
|
|
if (SKIP_CHAPTER2||SKIP_CHAPTER3) { |
|
|
|
|
if (SKIP_CHAPTER2||SKIP_CHAPTER3||SKIP_LAUNCHPAD) { |
|
|
|
|
//GAME_FLAGS[gameflag::CHECK_ROVER_3]=true;
|
|
|
|
|
GAME_FLAGS[gameflag::COLLECTED_SILICON_3]=true; |
|
|
|
|
GAME_FLAGS[gameflag::CHECK_ROVER_2]=true; |
|
|
|
|
} |
|
|
|
|
if (SKIP_CHAPTER3) { |
|
|
|
|
if (SKIP_CHAPTER3||SKIP_LAUNCHPAD) { |
|
|
|
|
GAME_FLAGS[gameflag::CHECK_ROVER_4]=true; |
|
|
|
|
GAME_FLAGS[gameflag::LITTLESNAKES_KILLED]=true; |
|
|
|
|
GAME_FLAGS[gameflag::COLLECTED_SILICON_4]=true; |
|
|
|
|
} |
|
|
|
|
if (SKIP_LAUNCHPAD) { |
|
|
|
|
GAME_FLAGS[gameflag::CHECK_ROVER_5]=true; |
|
|
|
|
GAME_FLAGS[gameflag::ROCKET_LAUNCH_READY]=true; |
|
|
|
|
GAME_FLAGS[gameflag::COLLECTED_ITEMS_IN_DOME]=true; |
|
|
|
|
GAME_FLAGS[gameflag::BOARDED_ROCKET]=true; |
|
|
|
|
} |
|
|
|
|
if (SKIP_CHAPTER2||SKIP_BOSS) { |
|
|
|
|
GAME_FLAGS[gameflag::SLEEP]=true; |
|
|
|
|
GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]=true; |
|
|
|
@ -759,9 +775,26 @@ public: |
|
|
|
|
GAME_FLAGS[gameflag::NEXT_COORDS2]=true; |
|
|
|
|
PLAYER_HP=PLAYER_MAXHP=100; |
|
|
|
|
PLAYER_COORDS[0]=38; |
|
|
|
|
PLAYER_COORDS[1]=37; |
|
|
|
|
PLAYER_COORDS[1]=38; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (SKIP_LAUNCHPAD) { |
|
|
|
|
GAME_STATE=IN_SPACE; |
|
|
|
|
PlayCutscene(cutscene::READY_TO_BOARD); |
|
|
|
|
fadeOut(); |
|
|
|
|
HAILSTORM->playerOwnCount=6; |
|
|
|
|
PETAL_STORM->playerOwnCount=6; |
|
|
|
|
HURRICANE->playerOwnCount=6; |
|
|
|
|
METEOR_RAIN->playerOwnCount=6; |
|
|
|
|
METEOR_STORM->playerOwnCount=6; |
|
|
|
|
SNOWSTORM->playerOwnCount=6; |
|
|
|
|
FLASH_FLOOD->playerOwnCount=6; |
|
|
|
|
SUNNY_DAY->playerOwnCount=6; |
|
|
|
|
FIRESTORM->playerOwnCount=6; |
|
|
|
|
SOLAR_FLARE->playerOwnCount=6; |
|
|
|
|
foodCount=16; |
|
|
|
|
PLAYER_HP=PLAYER_MAXHP=130; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SONG_MAIN = sound::Wave("./assets/SeasonsOfLoneliness.wav"); |
|
|
|
|
|
|
|
|
@ -1011,6 +1044,14 @@ public: |
|
|
|
|
MOVESET_SIDEWINDER.push_back(MEGA_FANG); |
|
|
|
|
MOVESET_SIDEWINDER.push_back(MEGA_FANG); |
|
|
|
|
|
|
|
|
|
MOVESET_Y_Y.push_back(METEOR_RAIN); |
|
|
|
|
MOVESET_Y_Y.push_back(AVALANCHE); |
|
|
|
|
MOVESET_Y_Y.push_back(LIGHT_STORM); |
|
|
|
|
MOVESET_Y_Y.push_back(TORNADO); |
|
|
|
|
MOVESET_Y_Y.push_back(GUST); |
|
|
|
|
MOVESET_Y_Y.push_back(DROUGHT); |
|
|
|
|
MOVESET_Y_Y.push_back(HAILSTORM); |
|
|
|
|
|
|
|
|
|
COLLECTED_ITEMS.push_back({20,5}); |
|
|
|
|
COLLECTED_ITEMS.push_back({20,6}); |
|
|
|
|
COLLECTED_ITEMS.push_back({19,5}); |
|
|
|
@ -1063,6 +1104,13 @@ public: |
|
|
|
|
ENCOUNTER_SNAKEPACK.playerY=6; |
|
|
|
|
ENCOUNTER_SNAKEPACK.map=MAP_5; |
|
|
|
|
ENCOUNTERS.push_back(ENCOUNTER_SNAKEPACK); |
|
|
|
|
ENCOUNTER_Y_Y.entities.push_back(new Entity(Y_Y_DECAL,"Y.Y",4-1,3.5-2,895,895,MOVESET_Y_Y,{1,1},true)); |
|
|
|
|
ENCOUNTER_Y_Y.x=1000-4; |
|
|
|
|
ENCOUNTER_Y_Y.y=1000-3.5; |
|
|
|
|
ENCOUNTER_Y_Y.playerX=4; |
|
|
|
|
ENCOUNTER_Y_Y.playerY=6; |
|
|
|
|
ENCOUNTER_Y_Y.map=MAP_6; |
|
|
|
|
//ENCOUNTERS.push_back(ENCOUNTER_Y_Y);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BASE_OBJECTS["DOME"]=new ObjectLoadInfo(DOME_DECAL); |
|
|
|
@ -1099,7 +1147,13 @@ public: |
|
|
|
|
for (int i=0;i<MAX_PIXELS;i++) { |
|
|
|
|
pixels[i]=new effect::Pixel(); |
|
|
|
|
} |
|
|
|
|
for (int i=0;i<150;i++) { |
|
|
|
|
starpixels[i]=new effect::Pixel(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (SKIP_LAUNCHPAD) { |
|
|
|
|
LoadMap(MAP_6); |
|
|
|
|
} else
|
|
|
|
|
if (SKIP_STORYBOOK) { |
|
|
|
|
LoadMap(MAP_5); |
|
|
|
|
} else { |
|
|
|
@ -1582,6 +1636,11 @@ public: |
|
|
|
|
fadeIn(); |
|
|
|
|
EndCutscene(); |
|
|
|
|
}break; |
|
|
|
|
case cutscene::READY_TO_BOARD:{ |
|
|
|
|
GAME_STATE=IN_SPACE; |
|
|
|
|
fadeIn(); |
|
|
|
|
EndCutscene(); |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1591,6 +1650,24 @@ public: |
|
|
|
|
TIMER=0; |
|
|
|
|
GAME_STATE=LATER_THAT_NIGHTWAIT; |
|
|
|
|
}break; |
|
|
|
|
case IN_SPACE:{ |
|
|
|
|
PLAYER_COORDS[0]=1000; |
|
|
|
|
PLAYER_COORDS[1]=1000; |
|
|
|
|
STAR_POS={0,0}; |
|
|
|
|
STAR_SIZE={WIDTH,HEIGHT}; |
|
|
|
|
for (int i=0;i<150;i++) { |
|
|
|
|
int brightness=rand()%60+195; |
|
|
|
|
starpixels[i]->r=brightness; |
|
|
|
|
starpixels[i]->g=brightness; |
|
|
|
|
starpixels[i]->b=brightness; |
|
|
|
|
starpixels[i]->pos={WIDTH/2,HEIGHT/2-24}; |
|
|
|
|
starpixels[i]->spd={range(-4,4),range(-3,3)}; |
|
|
|
|
float size = range(1,2); |
|
|
|
|
starpixels[i]->size={size,size}; |
|
|
|
|
starpixels[i]->a=255; |
|
|
|
|
} |
|
|
|
|
TIMER=0; |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
switch (CURRENT_CUTSCENE) { |
|
|
|
|
case cutscene::DISPLAY_VOLCANIC_AREA:{ |
|
|
|
@ -1919,6 +1996,7 @@ public: |
|
|
|
|
BATTLE_CARD_SELECTION_IND=0; |
|
|
|
|
BATTLE_CARD_SELECTION=availablePowers[BATTLE_CARD_SELECTION_IND]; |
|
|
|
|
PLAYER_SELECTED_TARGET=-1; |
|
|
|
|
LOCKED_IN_DELAY=0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1943,15 +2021,19 @@ 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_PLAYER_COORDS.x==CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX&&BATTLE_PLAYER_COORDS.y==CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY) { |
|
|
|
|
if (!GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]&&GAME_FLAGS[gameflag::SLEEP]) { |
|
|
|
|
GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]=true; |
|
|
|
|
DisplayMessageBox(22); |
|
|
|
|
break; |
|
|
|
|
if (LOCKED_IN_DELAY>30) { |
|
|
|
|
if (!GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]&&GAME_FLAGS[gameflag::SLEEP]) { |
|
|
|
|
GAME_FLAGS[gameflag::FIRST_ENCOUNTER_X_X]=true; |
|
|
|
|
DisplayMessageBox(22); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (2)\n";
|
|
|
|
|
BATTLE_STATE = battle::PLAYER_SELECTION; |
|
|
|
|
clearPixelEffect(); |
|
|
|
|
EFFECT_TIMER = 0; |
|
|
|
|
} else { |
|
|
|
|
LOCKED_IN_DELAY++; |
|
|
|
|
} |
|
|
|
|
//std::cout<<"Battle State is "<<BATTLE_STATE<<" (2)\n";
|
|
|
|
|
BATTLE_STATE = battle::PLAYER_SELECTION; |
|
|
|
|
clearPixelEffect(); |
|
|
|
|
EFFECT_TIMER = 0; |
|
|
|
|
} |
|
|
|
|
if (PLAYER_COORDS[0]!=TARGET_COORDS_X) { |
|
|
|
|
if (PLAYER_COORDS[0]<TARGET_COORDS_X) { |
|
|
|
@ -2717,9 +2799,9 @@ public: |
|
|
|
|
} |
|
|
|
|
if (CUTSCENE_TIMER>60*8) { |
|
|
|
|
PlayCutscene(cutscene::LAUNCHPAD_PREPARE); |
|
|
|
|
CUTSCENE_OBJS[1]=CreateObject({30,35},LAUNCHPAD_DECAL); |
|
|
|
|
CUTSCENE_OBJS[2]=CreateObject({30,35},LAUNCHPAD_HALF1_DECAL); |
|
|
|
|
CUTSCENE_OBJS[3]=CreateObject({30,35},LAUNCHPAD_HALF2_DECAL); |
|
|
|
|
CUTSCENE_OBJS[1]=CreateObject({30,35},LAUNCHPAD_DECAL,true); |
|
|
|
|
CUTSCENE_OBJS[2]=CreateObject({30,35},LAUNCHPAD_HALF1_DECAL,true); |
|
|
|
|
CUTSCENE_OBJS[3]=CreateObject({30,35},LAUNCHPAD_HALF2_DECAL,true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
@ -2748,6 +2830,36 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
case cutscene::INTRUDERS_DETECTED:{ |
|
|
|
|
if (!messageBoxVisible) { |
|
|
|
|
if (!CUTSCENE_FLAGS[0]) { |
|
|
|
|
CUTSCENE_FLAGS[0]=true; |
|
|
|
|
DisplayMessageBox(54); |
|
|
|
|
} else |
|
|
|
|
if (!CUTSCENE_FLAGS[1]) { |
|
|
|
|
CUTSCENE_FLAGS[1]=true; |
|
|
|
|
DisplayMessageBox(55); |
|
|
|
|
} else
|
|
|
|
|
if (!CUTSCENE_FLAGS[2]) { |
|
|
|
|
CUTSCENE_FLAGS[2]=true; |
|
|
|
|
CUTSCENE_OBJS[0]=CreateObject({999.5,999.25},PLAYER_DECAL,playerAnim,true); |
|
|
|
|
} else
|
|
|
|
|
if (MoveObjectTowardsPoint({999.5,1002},CUTSCENE_OBJS[0],VERT_FIRST)) { |
|
|
|
|
if (!CUTSCENE_FLAGS[3]) { |
|
|
|
|
DisplayMessageBox(56); |
|
|
|
|
CUTSCENE_FLAGS[3]=true; |
|
|
|
|
} else
|
|
|
|
|
if (!CUTSCENE_FLAGS[4]) { |
|
|
|
|
DisplayMessageBox(57); |
|
|
|
|
CUTSCENE_FLAGS[4]=true; |
|
|
|
|
} else { |
|
|
|
|
updatePlayerState(); |
|
|
|
|
ENCOUNTERS.push_back(ENCOUNTER_Y_Y); |
|
|
|
|
EndCutscene(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (GAME_STATE==CUTSCENE_3&&!SOUND_IS_PLAYING) { |
|
|
|
@ -2848,6 +2960,38 @@ public: |
|
|
|
|
GAME_STATE=LATER_THAT_NIGHTFADEOUT; |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
case IN_SPACE:{ |
|
|
|
|
for (int i=0;i<150;i++) { |
|
|
|
|
starpixels[i]->pos+=starpixels[i]->spd; |
|
|
|
|
bool hitEdge=false; |
|
|
|
|
if (starpixels[i]->pos.x<STAR_POS.x) { |
|
|
|
|
starpixels[i]->pos.x=STAR_POS.x+STAR_SIZE.x; |
|
|
|
|
hitEdge=true; |
|
|
|
|
} else |
|
|
|
|
if (starpixels[i]->pos.x>STAR_POS.x+STAR_SIZE.x) { |
|
|
|
|
starpixels[i]->pos.x=STAR_POS.x; |
|
|
|
|
hitEdge=true; |
|
|
|
|
} else |
|
|
|
|
if (starpixels[i]->pos.y<STAR_POS.y) { |
|
|
|
|
starpixels[i]->pos.y=STAR_POS.y+STAR_SIZE.y; |
|
|
|
|
hitEdge=true; |
|
|
|
|
} else |
|
|
|
|
if (starpixels[i]->pos.y>STAR_POS.y+STAR_SIZE.y) { |
|
|
|
|
starpixels[i]->pos.y=STAR_POS.y; |
|
|
|
|
hitEdge=true; |
|
|
|
|
} |
|
|
|
|
if (hitEdge) { |
|
|
|
|
starpixels[i]->pos={WIDTH/2,HEIGHT/2-24}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (TIMER>300) { |
|
|
|
|
if (!GAME_FLAGS[gameflag::INTRUDER_DETECTED]) { |
|
|
|
|
GAME_FLAGS[gameflag::INTRUDER_DETECTED]=true; |
|
|
|
|
DisplayMessageBox(53); |
|
|
|
|
PlayCutscene(cutscene::INTRUDERS_DETECTED); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (PIXEL_EFFECT_TRANSPARENCY>0) { |
|
|
|
@ -2973,6 +3117,7 @@ public: |
|
|
|
|
case CUTSCENE_2: |
|
|
|
|
case GAMEWORLD: |
|
|
|
|
case COLLECTED_SILICON:{ |
|
|
|
|
DrawMap(); |
|
|
|
|
DrawGameWorld(); |
|
|
|
|
int meterYOffset=2; |
|
|
|
|
if (CURRENT_CUTSCENE==cutscene::NONE) { |
|
|
|
@ -3030,6 +3175,21 @@ public: |
|
|
|
|
case DISPLAY_BOOK2:{ |
|
|
|
|
DrawDecal({WIDTH/2-BOOK2_DECAL->sprite->width*2/2,HEIGHT/2-BOOK2_DECAL->sprite->height*2/2},BOOK2_DECAL,{2,2}); |
|
|
|
|
}break; |
|
|
|
|
case IN_SPACE:{ |
|
|
|
|
Clear(BLACK); |
|
|
|
|
DrawStars(); |
|
|
|
|
if (!IN_BATTLE_ENCOUNTER) { |
|
|
|
|
DrawDecal({WIDTH/2-32,HEIGHT/2-32},Y_Y_DECAL); |
|
|
|
|
} |
|
|
|
|
DrawGameWorld(); |
|
|
|
|
SetDrawTarget(2); |
|
|
|
|
if (IN_BATTLE_ENCOUNTER) { |
|
|
|
|
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}); |
|
|
|
|
} |
|
|
|
|
if (IN_BATTLE_ENCOUNTER&&BATTLE_ENTRY_TIMER<45) { |
|
|
|
|
DrawStringDecal({(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-sin(frameCount*12/60.0)*4-12)},"!!",RED); |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
switch (BATTLE_STATE) { |
|
|
|
|
case battle::PLAYER_SELECTION:{ |
|
|
|
@ -3147,7 +3307,7 @@ public: |
|
|
|
|
//FillRectDecal({WIDTH/2-2,HEIGHT/2-2},{4,4},WHITE);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DrawGameWorld() { |
|
|
|
|
void DrawMap() { |
|
|
|
|
for (int y=-1;y<=HEIGHT/32+1;y++) { |
|
|
|
|
for (int x=-1;x<=WIDTH/32+1;x++) { |
|
|
|
|
float xOffset=PLAYER_COORDS[0]-(WIDTH/32/2); |
|
|
|
@ -3166,6 +3326,9 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DrawGameWorld() { |
|
|
|
|
for (auto&obj:OBJECTS) { |
|
|
|
|
if (obj->spr!=NULL) { |
|
|
|
|
if (obj->name.compare("PLANT")==0) { |
|
|
|
@ -3493,7 +3656,7 @@ public: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool playerCanMove() { |
|
|
|
|
return PLAYER_HP>0&&GAME_STATE==GAMEWORLD&&CURRENT_CUTSCENE==cutscene::NONE&&!messageBoxVisible&&!IN_BATTLE_ENCOUNTER; |
|
|
|
|
return PLAYER_HP>0&&(GAME_STATE==GAMEWORLD||GAME_STATE==IN_SPACE)&&CURRENT_CUTSCENE==cutscene::NONE&&!messageBoxVisible&&!IN_BATTLE_ENCOUNTER; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DrawCard(WEATHER_POWER*data,vf2d offset={0,0},vf2d scale={1,1},float darknessFactor=1.0) { |
|
|
|
@ -4027,6 +4190,13 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DrawStars(){ |
|
|
|
|
for (int i=0;i<150;i++) { |
|
|
|
|
float distanceFromCenter=distancetoCoords(starpixels[i]->pos,{WIDTH/2,HEIGHT/2-24}); |
|
|
|
|
FillRectDecal(starpixels[i]->pos,starpixels[i]->size,{(uint8_t)(starpixels[i]->r),(uint8_t)(starpixels[i]->g),(uint8_t)(starpixels[i]->b),(uint8_t)(std::clamp(distanceFromCenter/64.0*255,0.0,255.0))}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|