|
|
|
@ -20,6 +20,7 @@ using namespace olc; |
|
|
|
|
#define SKIP_STORYBOOK true |
|
|
|
|
#define SKIP_CHAPTER3 true |
|
|
|
|
#define SKIP_LAUNCHPAD true |
|
|
|
|
#define SKIP_A_A true |
|
|
|
|
|
|
|
|
|
#define STARTING_MAP MAP_1 |
|
|
|
|
#define STARTING_STATE CUTSCENE_3 |
|
|
|
@ -61,6 +62,8 @@ enum GAMESTATE{ |
|
|
|
|
DISPLAY_BOOK2, |
|
|
|
|
CUTSCENE_6, |
|
|
|
|
IN_SPACE, |
|
|
|
|
FIN, |
|
|
|
|
THANKS |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
namespace cutscene{ |
|
|
|
@ -101,7 +104,8 @@ namespace cutscene{ |
|
|
|
|
READY_TO_BOARD, |
|
|
|
|
INTRUDERS_DETECTED, |
|
|
|
|
A_A_ENCOUNTER, |
|
|
|
|
A_A_TRANSFORM |
|
|
|
|
A_A_TRANSFORM, |
|
|
|
|
ROVER_SAVE, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -149,6 +153,7 @@ namespace gameflag{ |
|
|
|
|
BOARDED_ROCKET, |
|
|
|
|
INTRUDER_DETECTED, |
|
|
|
|
DEFEATED_Y_Y, |
|
|
|
|
DEFEATED_A_A, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -666,6 +671,7 @@ public: |
|
|
|
|
int LOCKED_IN_DELAY=0; |
|
|
|
|
Pixel SHIP_COLOR=WHITE; |
|
|
|
|
vf2d BOSS_SIZE={1,1}; |
|
|
|
|
vf2d CREDITS_SCROLLING_OFFSET={0,12}; |
|
|
|
|
|
|
|
|
|
Map*MAP_1=new Map("map1"); |
|
|
|
|
Map*MAP_2=new Map("map2"); |
|
|
|
@ -987,6 +993,16 @@ public: |
|
|
|
|
PLAYER_COORDS[1]=1000; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (SKIP_A_A) { |
|
|
|
|
GAME_FLAGS[gameflag::INTRUDER_DETECTED]=true; |
|
|
|
|
GAME_FLAGS[gameflag::DEFEATED_Y_Y]=true; |
|
|
|
|
GAME_FLAGS[gameflag::DEFEATED_A_A]=true; |
|
|
|
|
fadeIn(); |
|
|
|
|
StartCutscene(cutscene::ROVER_SAVE); |
|
|
|
|
SHIP_COLOR=Pixel(0,0,0,0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PETAL_STORM->seedProduction=2; //Produce two seeds.
|
|
|
|
|
HURRICANE->seedScatter=2; |
|
|
|
|
HURRICANE->growSeeds=true; |
|
|
|
@ -1539,6 +1555,10 @@ public: |
|
|
|
|
fadeIn(); |
|
|
|
|
GAME_STATE=GAMEWORLD; |
|
|
|
|
}break; |
|
|
|
|
case FIN:{ |
|
|
|
|
GAME_STATE=THANKS; |
|
|
|
|
fadeIn(); |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
switch (CURRENT_CUTSCENE) { |
|
|
|
|
case cutscene::TRANSITION_CUTSCENE:{ |
|
|
|
@ -1686,6 +1706,12 @@ public: |
|
|
|
|
fadeIn(); |
|
|
|
|
EndCutscene(); |
|
|
|
|
}break; |
|
|
|
|
case cutscene::ROVER_SAVE:{ |
|
|
|
|
GAME_STATE=FIN; |
|
|
|
|
TIMER=0; |
|
|
|
|
fadeIn(); |
|
|
|
|
EndCutscene(); |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -2205,7 +2231,7 @@ public: |
|
|
|
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) { |
|
|
|
|
effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,-healRoll,true); |
|
|
|
|
} else { |
|
|
|
|
effectRadius({CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->width*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.x/2/32,CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->height*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.y/2/32},ref,-healRoll,false); |
|
|
|
|
effectRadius({(int)(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->width*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.x/2/32),(int)(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->height*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.y/2/32)},ref,-healRoll,false); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (EFFECT_TIMER==30&&( |
|
|
|
@ -2214,7 +2240,7 @@ public: |
|
|
|
|
if (BATTLE_CURRENT_TURN_ENTITY==-1) { |
|
|
|
|
effectRadius({(int)BATTLE_PLAYER_COORDS.x,(int)BATTLE_PLAYER_COORDS.y},ref,true); |
|
|
|
|
} else { |
|
|
|
|
effectRadius({CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->width*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.x/2/32,CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->height*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.y/2/32},ref,false); |
|
|
|
|
effectRadius({(int)(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->x+CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->width*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.x/2/32),(int)(CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->y+CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr->sprite->height*CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->sprScale.y/2/32)},ref,false); |
|
|
|
|
} |
|
|
|
|
} else
|
|
|
|
|
if (EFFECT_TIMER==ref->effectTime-10){ |
|
|
|
@ -2227,11 +2253,11 @@ public: |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if (PLAYER_SELECTED_TARGET==-2) { |
|
|
|
|
effectRadius({CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY},ref,true); |
|
|
|
|
effectRadius({(int)(CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX),(int)(CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY)},ref,true); |
|
|
|
|
} else { |
|
|
|
|
effectRadius({CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x+CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->spr->sprite->width*CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->sprScale.x/2/32,CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y+CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->spr->sprite->height*CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->sprScale.y/2/32},ref,true); } |
|
|
|
|
effectRadius({(int)(CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->x+CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->spr->sprite->width*CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->sprScale.x/2/32),(int)(CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->y+CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->spr->sprite->height*CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET]->sprScale.y/2/32)},ref,true); } |
|
|
|
|
} else { |
|
|
|
|
effectRadius({CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX,CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY},ref,false); |
|
|
|
|
effectRadius({(int)(CURRENT_ENCOUNTER.x+CURRENT_ENCOUNTER.playerX),(int)(CURRENT_ENCOUNTER.y+CURRENT_ENCOUNTER.playerY)},ref,false); |
|
|
|
|
if (ref==LIGHT_STORM&&CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->name.compare("X_X")==0) { |
|
|
|
|
CURRENT_ENCOUNTER.entities[BATTLE_CURRENT_TURN_ENTITY]->spr=X_X_UNCHARGED_DECAL; |
|
|
|
|
} else |
|
|
|
@ -2394,6 +2420,7 @@ public: |
|
|
|
|
if (allDead) { |
|
|
|
|
bool snakeFight=false; |
|
|
|
|
bool YYFight=false; |
|
|
|
|
bool AAFight=false; |
|
|
|
|
if (!GAME_FLAGS[gameflag::LITTLESNAKES_KILLED]) { |
|
|
|
|
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) { |
|
|
|
|
if (CURRENT_ENCOUNTER.entities[i]->name.compare("Sidewinder")==0) { |
|
|
|
@ -2424,6 +2451,21 @@ public: |
|
|
|
|
SHIP_COLOR=Pixel(89, 55, 36,255); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!GAME_FLAGS[gameflag::DEFEATED_A_A]) { |
|
|
|
|
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) { |
|
|
|
|
if (CURRENT_ENCOUNTER.entities[i]->name.compare("A.A")==0) { |
|
|
|
|
AAFight=true; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (AAFight) { |
|
|
|
|
GAME_FLAGS[gameflag::DEFEATED_A_A]=true; |
|
|
|
|
StartCutscene(cutscene::ROVER_SAVE); |
|
|
|
|
for (int i=0;i<150;i++) { |
|
|
|
|
starpixels[i]->spd={range(-2,0),range(-0.1,0)}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
IN_BATTLE_ENCOUNTER=false; |
|
|
|
|
ENCOUNTERS.erase(ENCOUNTERS.begin()+CURRENT_ENCOUNTER_IND); |
|
|
|
|
resetBattleState(); |
|
|
|
@ -2973,8 +3015,8 @@ public: |
|
|
|
|
} else
|
|
|
|
|
if (TIMER<240) { |
|
|
|
|
BOSS_SIZE={ |
|
|
|
|
std::clamp(TIMER/240.0+1,1.0,2.0), |
|
|
|
|
std::clamp(TIMER/240.0+1,1.0,2.0) |
|
|
|
|
(float)std::clamp(TIMER/240.0+1,1.0,2.0), |
|
|
|
|
(float)std::clamp(TIMER/240.0+1,1.0,2.0) |
|
|
|
|
}; |
|
|
|
|
SHIP_COLOR=Pixel(255,255,255,(1-(TIMER/240.0))*255); |
|
|
|
|
} else { |
|
|
|
@ -2990,6 +3032,48 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
case cutscene::ROVER_SAVE:{ |
|
|
|
|
if (!CUTSCENE_FLAGS[0]) { |
|
|
|
|
CUTSCENE_OBJS[0]=CreateObject({PLAYER_COORDS[0],PLAYER_COORDS[1]},PLAYER_DECAL,playerAnimDown,true); |
|
|
|
|
CUTSCENE_OBJS[1]=CreateObject({PLAYER_COORDS[0]-5,PLAYER_COORDS[1]},ROVER_DECAL,true); |
|
|
|
|
CUTSCENE_FLAGS[0]=true; |
|
|
|
|
} else { |
|
|
|
|
if (!CUTSCENE_FLAGS[1]) { |
|
|
|
|
if (CUTSCENE_OBJS[1]->x<PLAYER_COORDS[0]-0.5) { |
|
|
|
|
CUTSCENE_OBJS[1]->x+=0.02; |
|
|
|
|
} else { |
|
|
|
|
CUTSCENE_FLAGS[1]=true;
|
|
|
|
|
} |
|
|
|
|
} else
|
|
|
|
|
if (!messageBoxVisible) { |
|
|
|
|
if (!CUTSCENE_FLAGS[2]) { |
|
|
|
|
CUTSCENE_FLAGS[2]=true; |
|
|
|
|
DisplayMessageBox(63); |
|
|
|
|
} else
|
|
|
|
|
if (!CUTSCENE_FLAGS[3]) { |
|
|
|
|
CUTSCENE_FLAGS[3]=true; |
|
|
|
|
DisplayMessageBox(64); |
|
|
|
|
} else
|
|
|
|
|
if (!CUTSCENE_FLAGS[4]) { |
|
|
|
|
CUTSCENE_FLAGS[4]=true; |
|
|
|
|
DisplayMessageBox(65); |
|
|
|
|
} else
|
|
|
|
|
if (!CUTSCENE_FLAGS[5]) { |
|
|
|
|
CUTSCENE_OBJS[0]->x=0; |
|
|
|
|
if (CUTSCENE_OBJS[1]->x<PLAYER_COORDS[0]+4) { |
|
|
|
|
CUTSCENE_OBJS[1]->x+=0.06; |
|
|
|
|
} else { |
|
|
|
|
CUTSCENE_FLAGS[5]=true; |
|
|
|
|
} |
|
|
|
|
} else
|
|
|
|
|
if (!CUTSCENE_FLAGS[6]) { |
|
|
|
|
CUTSCENE_FLAGS[6]=true; |
|
|
|
|
fadeOut(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
CUTSCENE_OBJS[1]->y=cos(M_PI/90*CUTSCENE_TIMER-M_PI)*0.5+PLAYER_COORDS[1]; |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (GAME_STATE==CUTSCENE_3&&!SOUND_IS_PLAYING) { |
|
|
|
@ -3111,7 +3195,11 @@ public: |
|
|
|
|
hitEdge=true; |
|
|
|
|
} |
|
|
|
|
if (hitEdge) { |
|
|
|
|
starpixels[i]->pos={WIDTH/2,HEIGHT/2-24}; |
|
|
|
|
if (GAME_FLAGS[gameflag::DEFEATED_A_A]) { |
|
|
|
|
starpixels[i]->pos={WIDTH,range(0,HEIGHT)}; |
|
|
|
|
} else { |
|
|
|
|
starpixels[i]->pos={WIDTH/2,HEIGHT/2-24}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (TIMER>300) { |
|
|
|
@ -3122,6 +3210,12 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
case FIN:{ |
|
|
|
|
CREDITS_SCROLLING_OFFSET.y-=0.15; |
|
|
|
|
if (CREDITS_SCROLLING_OFFSET.y*-1>GetTextSize(CREDITS_TEXT).y*2+24) { |
|
|
|
|
fadeOut(); |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (PIXEL_EFFECT_TRANSPARENCY>0) { |
|
|
|
@ -3300,10 +3394,10 @@ public: |
|
|
|
|
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; |
|
|
|
|
case DISPLAY_BOOK:{ |
|
|
|
|
DrawDecal({WIDTH/2-BOOK_DECAL->sprite->width*2/2,HEIGHT/2-BOOK_DECAL->sprite->height*2/2},BOOK_DECAL,{2,2}); |
|
|
|
|
DrawDecal({(float)(WIDTH/2-BOOK_DECAL->sprite->width*2/2),(float)(HEIGHT/2-BOOK_DECAL->sprite->height*2/2)},BOOK_DECAL,{2,2}); |
|
|
|
|
}break; |
|
|
|
|
case DISPLAY_BOOK2:{ |
|
|
|
|
DrawDecal({WIDTH/2-BOOK2_DECAL->sprite->width*2/2,HEIGHT/2-BOOK2_DECAL->sprite->height*2/2},BOOK2_DECAL,{2,2}); |
|
|
|
|
DrawDecal({(float)(WIDTH/2-BOOK2_DECAL->sprite->width*2/2),(float)(HEIGHT/2-BOOK2_DECAL->sprite->height*2/2)},BOOK2_DECAL,{2,2}); |
|
|
|
|
}break; |
|
|
|
|
case IN_SPACE:{ |
|
|
|
|
SetDrawTarget(2); |
|
|
|
@ -3323,6 +3417,23 @@ public: |
|
|
|
|
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; |
|
|
|
|
case FIN:{ |
|
|
|
|
|
|
|
|
|
DrawStringDecal({CREDITS_SCROLLING_OFFSET.x+WIDTH/2-GetTextSize(CREDITS_TEXT).x*2/2,CREDITS_SCROLLING_OFFSET.y},CREDITS_TEXT,WHITE,{2,2}); |
|
|
|
|
|
|
|
|
|
GradientFillRectDecal({0,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
|
GradientFillRectDecal({WIDTH/2,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
|
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2}); |
|
|
|
|
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; |
|
|
|
|
case THANKS:{ |
|
|
|
|
DrawStringDecal({(float)(WIDTH/2-GetTextSize(THANKS_TEXT).x*3/2),(float)(HEIGHT/2-GetTextSize(THANKS_TEXT).y*3/2)},THANKS_TEXT,WHITE,{3,3}); |
|
|
|
|
|
|
|
|
|
GradientFillRectDecal({0,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
|
GradientFillRectDecal({WIDTH/2,0},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1}); |
|
|
|
|
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN1},{100, 10, 255,ALPHA_SCREEN2}); |
|
|
|
|
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}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
switch (BATTLE_STATE) { |
|
|
|
|
case battle::PLAYER_SELECTION:{ |
|
|
|
@ -3375,17 +3486,17 @@ public: |
|
|
|
|
DrawStringDecal({4+1,(float)(HEIGHT-10-GetTextSize("HP:").y+1)},"HP: "+std::to_string(PLAYER_HP),BLACK); |
|
|
|
|
DrawStringDecal({4,(float)(HEIGHT-10-GetTextSize("HP:").y)},"HP: "+std::to_string(PLAYER_HP)); |
|
|
|
|
DrawHealthbar({2,HEIGHT-10},WIDTH/2,(float)PLAYER_HP/PLAYER_MAXHP,BLACK); |
|
|
|
|
DrawBuffs({48+GetTextSize(std::to_string(PLAYER_HP)).x,HEIGHT-26}); |
|
|
|
|
DrawBuffs({(float)(48+GetTextSize(std::to_string(PLAYER_HP)).x),(float)(HEIGHT-26)}); |
|
|
|
|
for (auto&numb:BATTLE_DISPLAY_NUMBERS) { |
|
|
|
|
std::string display=((numb->number>0)?"-"+std::to_string(numb->number):"+"+std::to_string(numb->number*-1)); |
|
|
|
|
for (int x=-1;x<=1;x++) { |
|
|
|
|
for (int y=-1;y<=1;y++) { |
|
|
|
|
if (x!=0&&y!=0) { |
|
|
|
|
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({(float)(((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x*1.3/2+x-8),(float)(((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*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}); |
|
|
|
|
DrawStringDecal({(float)(((numb->x-PLAYER_COORDS[0])*32+WIDTH/2)-GetTextSize(display).x*1.3/2-8),(float)(((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";
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -3425,16 +3536,16 @@ public: |
|
|
|
|
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,192)); |
|
|
|
|
}break; |
|
|
|
|
case cutscene::LAUNCHPAD_OPEN:{ |
|
|
|
|
DrawDecal({(30-PLAYER_COORDS[0])*32+WIDTH/2,(35-PLAYER_COORDS[1])*32+HEIGHT/2+(6-6*((CUTSCENE_TIMER/240.0)))},LAUNCHPAD_CLOSED_DECAL,{1,1},Pixel(255,255,255,(CUTSCENE_TIMER/480.0)*255)); |
|
|
|
|
DrawDecal({(float)((30-PLAYER_COORDS[0])*32+WIDTH/2),(float)((35-PLAYER_COORDS[1])*32+HEIGHT/2+(6-6*((CUTSCENE_TIMER/240.0))))},LAUNCHPAD_CLOSED_DECAL,{1,1},Pixel(255,255,255,(CUTSCENE_TIMER/480.0)*255)); |
|
|
|
|
}break; |
|
|
|
|
case cutscene::LAUNCHPAD_PREPARE:{ |
|
|
|
|
int bottomCutoff = (int)(std::clamp(CUTSCENE_TIMER,0,600)/600.0*64); |
|
|
|
|
DrawPartialDecal({(30-PLAYER_COORDS[0])*32+WIDTH/2,(36.5-PLAYER_COORDS[1])*32+HEIGHT/2-bottomCutoff},{64,bottomCutoff},Y_Y_DECAL,{0,0},{64,bottomCutoff},Pixel(std::clamp(CUTSCENE_TIMER,0,600)/600.0*255,std::clamp(CUTSCENE_TIMER,0,600)/600.0*255,std::clamp(CUTSCENE_TIMER,0,600)/600.0*255,255)); |
|
|
|
|
DrawPartialDecal({(float)((30-PLAYER_COORDS[0])*32+WIDTH/2),(float)((36.5-PLAYER_COORDS[1])*32+HEIGHT/2-bottomCutoff)},{64,(float)bottomCutoff},Y_Y_DECAL,{0,0},{64,(float)bottomCutoff},Pixel(std::clamp(CUTSCENE_TIMER,0,600)/600.0*255,std::clamp(CUTSCENE_TIMER,0,600)/600.0*255,std::clamp(CUTSCENE_TIMER,0,600)/600.0*255,255)); |
|
|
|
|
}break; |
|
|
|
|
case cutscene::READY_TO_BOARD:{ |
|
|
|
|
FillRectDecal({0,0},{WIDTH,HEIGHT},Pixel(0,0,0,128)); |
|
|
|
|
DrawStringDecal({8,HEIGHT/4},"ARE YOU PREPARED ?"); |
|
|
|
|
DrawStringDecal({8,HEIGHT/2+((ROCKET_BOARD_OPTION)?0:16)},">"); |
|
|
|
|
DrawStringDecal({(float)8,(float)(HEIGHT/2+((ROCKET_BOARD_OPTION)?0:16))},">"); |
|
|
|
|
DrawStringDecal({16,HEIGHT/2},"YES"); |
|
|
|
|
DrawStringDecal({16,HEIGHT/2+16},"NO"); |
|
|
|
|
|
|
|
|
@ -3494,7 +3605,7 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
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)}; |
|
|
|
|
const vi2d CENTER = {(int)((float)((BATTLE_PLAYER_COORDS.x-PLAYER_COORDS[0])*32+WIDTH/2+(current_playerAnim->flipped?32:0))),(int)((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}); |
|
|
|
|
} |
|
|
|
|