diff --git a/C++ProjectTemplate b/C++ProjectTemplate index e52bd10..b175adb 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/main.cpp b/main.cpp index 6b33c31..1b363cb 100644 --- a/main.cpp +++ b/main.cpp @@ -1358,6 +1358,95 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"), DrawMovementGrid(YELLOW,BLUE,BLUE); } } + + if (BATTLE_ENCOUNTER!=nullptr&&BATTLE_STATE!=BattleState::MOVE_CAMERA&&BATTLE_STATE!=BattleState::MOVE_CAMERA_BACK||OverworldMenuOpen()&&GAME_STATE!=GameState::OVERWORLD_TARGET_MENU) { + SetDrawTarget(layer::INTERFACE); + vi2d screenShakeOffset = {0,0}; + if (BATTLE_ENCOUNTER!=nullptr) { + cameraPos = BATTLE_ENCOUNTER->pos; + if (BATTLE_HIT_SCREENSHAKE>0) { + BATTLE_HIT_SCREENSHAKE--; + if (BATTLE_HIT_SCREENSHAKE%2==0) { + screenShakeOffset = {0,2}; + } else { + screenShakeOffset = {0,-2}; + } + } + cameraPos+=screenShakeOffset; + } + for (int i=0;i attackedAllies; + + if (CURRENT_TURN>=0&&BATTLE_STATE==BattleState::WAIT_ANIMATION&&BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget<0) { + attackedAllies=GetEntitiesInRange(BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget,BATTLE_ENCOUNTER->objs[CURRENT_TURN]->channelPos,BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove); + } + for (int j=0;jobj==PARTY_MEMBER_OBJ[i]) { + underAttack=true; + break; + } + } + } + if (CURRENT_TURN>=0&&BATTLE_STATE==BattleState::WAIT_ANIMATION&&underAttack) { + drawCheckerboardBox(box,{59,59},Pixel(180,159,194,boxAlpha),Pixel(200,179,214,boxAlpha),{6,6},RED,DARK_RED); + } else { + drawCheckerboardBox(box,{59,59},Pixel(180,159,194,boxAlpha),Pixel(200,179,214,boxAlpha),{6,6}); + } + if (member->selectedMove==nullptr) { + DrawStringDecal({(float)(box.x+6),(float)(box.y+6)},obj->name,Pixel(0,0,0,boxAlpha)); + } else { + DrawStringDecal({(float)(box.x+6),(float)(box.y+4)},obj->name,Pixel(0,0,0,boxAlpha),{1,0.8}); + } + if (BATTLE_ENCOUNTER!=nullptr) { + DrawPartialDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_back.png"],{0,0},{static_cast(member->atb/1000.0*SPRITES["atbbar_back.png"]->sprite->width),static_cast(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},Pixel(255,255,255,boxAlpha)); + DrawDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_front.png"],{1,1},Pixel(255,255,255,boxAlpha)); + } + if (member->selectedMove!=nullptr) { + DrawPartialDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_back.png"],{0,0},{(1-((float)member->channelTimeRemaining/member->selectedMove->channelTime))*SPRITES["atbbar_back.png"]->sprite->width,static_cast(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},Pixel(0,178,0,boxAlpha)); + std::string label=member->selectedMove->name; + label+=" "; + if (member->selectedMove->grade!=0) { + label+=member->selectedMove->grade; + } + vd2d textOffset=GetTextSize(label)*0.6; + textOffset.y+=10; + vd2d barPos = {(float)(box.x+4),(float)(box.y+5+8+2)}; + DrawStringDecal(barPos-textOffset/2,label,Pixel(0,0,0,boxAlpha),{std::min((float)54/GetTextSize(label).x,(float)1),0.6}); + } + const vi2d hpTextPos = {box.x+5,box.y+25}; + for (int x=-1;x<=1;x++) { + for (int y=-1;y<=1;y++) { + if (x!=0&&y!=0) { + DrawStringDecal({(float)(hpTextPos.x+x),(float)(hpTextPos.y+y)},"HP",Pixel(255,255,255,boxAlpha)); + } + } + } + DrawStringDecal(hpTextPos,"HP",Pixel(0,0,0,boxAlpha)); + DrawRollingCounter(hpTextPos,member->GetHP(),player_rollhp_display[i],player_rollhp_counter[i]); + const vi2d mpTextPos = {box.x+5,hpTextPos.y+17}; + for (int x=-1;x<=1;x++) { + for (int y=-1;y<=1;y++) { + if (x!=0&&y!=0) { + DrawStringDecal({(float)(mpTextPos.x+x),(float)(mpTextPos.y+y)},"PP",Pixel(255,255,255,boxAlpha)); + } + } + } + DrawStringDecal(mpTextPos,"PP",Pixel(0,0,0,boxAlpha)); + DrawRollingCounter(mpTextPos,member->GetPP(),player_rollpp_display[i],player_rollpp_counter[i]); + } + SetDrawTarget(layer::DYNAMIC); + } + switch (GAME_STATE) { case GameState::GAME_WORLD: case GameState::OVERWORLD_MENU: @@ -1510,94 +1599,6 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"), } - if (BATTLE_ENCOUNTER!=nullptr&&BATTLE_STATE!=BattleState::MOVE_CAMERA&&BATTLE_STATE!=BattleState::MOVE_CAMERA_BACK||OverworldMenuOpen()&&GAME_STATE!=GameState::OVERWORLD_TARGET_MENU) { - SetDrawTarget(layer::INTERFACE); - vi2d screenShakeOffset = {0,0}; - if (BATTLE_ENCOUNTER!=nullptr) { - cameraPos = BATTLE_ENCOUNTER->pos; - if (BATTLE_HIT_SCREENSHAKE>0) { - BATTLE_HIT_SCREENSHAKE--; - if (BATTLE_HIT_SCREENSHAKE%2==0) { - screenShakeOffset = {0,2}; - } else { - screenShakeOffset = {0,-2}; - } - } - cameraPos+=screenShakeOffset; - } - for (int i=0;i attackedAllies; - - if (CURRENT_TURN>=0&&BATTLE_STATE==BattleState::WAIT_ANIMATION&&BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget<0) { - attackedAllies=GetEntitiesInRange(BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget,BATTLE_ENCOUNTER->objs[CURRENT_TURN]->channelPos,BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove); - } - for (int j=0;jobj==PARTY_MEMBER_OBJ[i]) { - underAttack=true; - break; - } - } - } - if (CURRENT_TURN>=0&&BATTLE_STATE==BattleState::WAIT_ANIMATION&&underAttack) { - drawCheckerboardBox(box,{59,59},Pixel(180,159,194),Pixel(200,179,214),{6,6},RED,DARK_RED); - } else { - drawCheckerboardBox(box,{59,59},Pixel(180,159,194),Pixel(200,179,214),{6,6}); - } - if (member->selectedMove==nullptr) { - DrawStringDecal({(float)(box.x+6),(float)(box.y+6)},obj->name,BLACK); - } else { - DrawStringDecal({(float)(box.x+6),(float)(box.y+4)},obj->name,BLACK,{1,0.8}); - } - if (BATTLE_ENCOUNTER!=nullptr) { - DrawPartialDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_back.png"],{0,0},{static_cast(member->atb/1000.0*SPRITES["atbbar_back.png"]->sprite->width),static_cast(SPRITES["atbbar_back.png"]->sprite->height)}); - DrawDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_front.png"]); - } - if (member->selectedMove!=nullptr) { - DrawPartialDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_back.png"],{0,0},{(1-((float)member->channelTimeRemaining/member->selectedMove->channelTime))*SPRITES["atbbar_back.png"]->sprite->width,static_cast(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},GREEN*0.7); - std::string label=member->selectedMove->name; - label+=" "; - if (member->selectedMove->grade!=0) { - label+=member->selectedMove->grade; - } - vd2d textOffset=GetTextSize(label)*0.6; - textOffset.y+=10; - vd2d barPos = {(float)(box.x+4),(float)(box.y+5+8+2)}; - DrawStringDecal(barPos-textOffset/2,label,BLACK,{std::min((float)54/GetTextSize(label).x,(float)1),0.6}); - } - const vi2d hpTextPos = {box.x+5,box.y+25}; - for (int x=-1;x<=1;x++) { - for (int y=-1;y<=1;y++) { - if (x!=0&&y!=0) { - DrawStringDecal({(float)(hpTextPos.x+x),(float)(hpTextPos.y+y)},"HP",olc::WHITE); - } - } - } - DrawStringDecal(hpTextPos,"HP",BLACK); - DrawRollingCounter(hpTextPos,member->GetHP(),player_rollhp_display[i],player_rollhp_counter[i]); - const vi2d mpTextPos = {box.x+5,hpTextPos.y+17}; - for (int x=-1;x<=1;x++) { - for (int y=-1;y<=1;y++) { - if (x!=0&&y!=0) { - DrawStringDecal({(float)(mpTextPos.x+x),(float)(mpTextPos.y+y)},"PP",olc::WHITE); - } - } - } - DrawStringDecal(mpTextPos,"PP",BLACK); - DrawRollingCounter(mpTextPos,member->GetPP(),player_rollpp_display[i],player_rollpp_counter[i]); - } - SetDrawTarget(layer::DYNAMIC); - } - - if (BATTLE_ENCOUNTER!=nullptr) { SetDrawTarget(layer::HIGH); if (BATTLE_STATE==BattleState::SELECT_ACTION||BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT||BATTLE_STATE==BattleState::ITEM_SELECT) { @@ -1755,6 +1756,11 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"), } SetDrawTarget(layer::DYNAMIC); DrawPartialDecal(obj->GetPos()-cameraPos,obj->spr->spr,{(float)((obj->frameIndex%obj->spr->frames)*obj->spr->width),0},{(float)obj->spr->width,(float)obj->spr->spr->sprite->height},obj->GetScale(),obj->color); + vi2d nameOffset={0,8}; + vi2d shadowOffset={1,1}; + SetDrawTarget(layer::INTERFACE); + DrawStringDecal(obj->GetPosWithOrigin()-cameraPos-GetTextSize(obj->name)/2+shadowOffset+nameOffset,obj->name,BLACK); + DrawStringDecal(obj->GetPosWithOrigin()-cameraPos-GetTextSize(obj->name)/2+nameOffset,obj->name); } else { SetDrawTarget(layer::DYNAMIC); DrawPartialDecal(obj->GetPos()-cameraPos,obj->spr->spr,{(float)((obj->frameIndex%obj->spr->frames)*obj->spr->width),0},{(float)obj->spr->width,(float)obj->spr->spr->sprite->height},obj->GetScale(),obj->color); @@ -2714,13 +2720,14 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"), } void DrawRollingCounter(const olc::vi2d &pos,int val,int*rollcounter,int*rolloffset) { - FillRectDecal({(float)(pos.x+20),(float)(pos.y-3)},{30,13},olc::DARK_GREY); - FillRectDecal({(float)(pos.x+21),(float)(pos.y-2)},{28,11},olc::GREY); - DrawLineDecal({(float)(pos.x+30),(float)(pos.y-3)},{(float)(pos.x+30),(float)(pos.y+10)},olc::DARK_GREY); - DrawLineDecal({(float)(pos.x+40),(float)(pos.y-3)},{(float)(pos.x+40),(float)(pos.y+10)},olc::DARK_GREY); - DrawPartialDecal({(float)(pos.x+22),(float)(pos.y-1)},{7,9},SPRITES["rollingcounter.png"],{0,(float)(rollcounter[2]*13+rolloffset[2]+13)},{7,9}); - DrawPartialDecal({(float)(pos.x+31),(float)(pos.y-1)},{7,9},SPRITES["rollingcounter.png"],{0,(float)(rollcounter[1]*13+rolloffset[1]+13)},{7,9}); - DrawPartialDecal({(float)(pos.x+41),(float)(pos.y-1)},{7,9},SPRITES["rollingcounter.png"],{0,(float)(rollcounter[0]*13+rolloffset[0]+13)},{7,9}); + int boxAlpha=BATTLE_STATE==BattleState::TARGET_SELECT?64:255; + FillRectDecal({(float)(pos.x+20),(float)(pos.y-3)},{30,13},Pixel(128,128,128,boxAlpha)); + FillRectDecal({(float)(pos.x+21),(float)(pos.y-2)},{28,11},Pixel(192,192,192,boxAlpha)); + DrawLineDecal({(float)(pos.x+30),(float)(pos.y-3)},{(float)(pos.x+30),(float)(pos.y+10)},Pixel(128,128,128,boxAlpha)); + DrawLineDecal({(float)(pos.x+40),(float)(pos.y-3)},{(float)(pos.x+40),(float)(pos.y+10)},Pixel(128,128,128,boxAlpha)); + DrawPartialDecal({(float)(pos.x+22),(float)(pos.y-1)},{7,9},SPRITES["rollingcounter.png"],{0,(float)(rollcounter[2]*13+rolloffset[2]+13)},{7,9},Pixel(255,255,255,boxAlpha)); + DrawPartialDecal({(float)(pos.x+31),(float)(pos.y-1)},{7,9},SPRITES["rollingcounter.png"],{0,(float)(rollcounter[1]*13+rolloffset[1]+13)},{7,9},Pixel(255,255,255,boxAlpha)); + DrawPartialDecal({(float)(pos.x+41),(float)(pos.y-1)},{7,9},SPRITES["rollingcounter.png"],{0,(float)(rollcounter[0]*13+rolloffset[0]+13)},{7,9},Pixel(255,255,255,boxAlpha)); } void ResetBattleState() {