generated from sigonasr2/CPlusPlusProjectTemplate
Overworld power menu refactoring and battle moves turned into a struct
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
1a27d57e36
commit
5cc966e71c
Binary file not shown.
1
battle.h
1
battle.h
@ -88,6 +88,7 @@ namespace Battle{
|
|||||||
bool pctDamage=false; //Uses % damage for the base damage instead of flat damage.
|
bool pctDamage=false; //Uses % damage for the base damage instead of flat damage.
|
||||||
std::vector<std::pair<Property,int>> properties={}; //The int is used to determine the chance of something occurring.
|
std::vector<std::pair<Property,int>> properties={}; //The int is used to determine the chance of something occurring.
|
||||||
//Properties order is WET, DRY, COLD, HEAT
|
//Properties order is WET, DRY, COLD, HEAT
|
||||||
|
bool overworld=false; //Whether or not a move can be used on the overworld.
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
270
main.cpp
270
main.cpp
@ -151,6 +151,8 @@ public:
|
|||||||
int OVERWORLD_MENU_SELECTION=0;
|
int OVERWORLD_MENU_SELECTION=0;
|
||||||
std::vector<std::string> INTERACTION_MESSAGES;
|
std::vector<std::string> INTERACTION_MESSAGES;
|
||||||
bool CLOSE_OVERWORLD_WINDOW=false; //When set to true, should cause the overworld menu to close as well once the dialog box is closed.
|
bool CLOSE_OVERWORLD_WINDOW=false; //When set to true, should cause the overworld menu to close as well once the dialog box is closed.
|
||||||
|
int OVERWORLD_POWER_SELECTION_OFFSET[4]={0,0,0,0};
|
||||||
|
int OVERWORLD_POWER_SELECTION_MEMBER=0;
|
||||||
|
|
||||||
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
|
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
|
||||||
|
|
||||||
@ -650,35 +652,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
switch (BATTLE_SELECTION_CURSOR) {
|
switch (BATTLE_SELECTION_CURSOR) {
|
||||||
case 0:{ //Power selected.
|
case 0:{ //Power selected.
|
||||||
BATTLE_STATE=BattleState::POWER_SELECT;
|
BATTLE_STATE=BattleState::POWER_SELECT;
|
||||||
BATTLE_MOVELIST_DISPLAY.clear();
|
PopulateBattleMoveList(-CURRENT_TURN-1);
|
||||||
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]];
|
|
||||||
Object*obj=PARTY_MEMBER_OBJ[-CURRENT_TURN-1];
|
|
||||||
for (int i=0;i<member->moveSet.size();i++) {
|
|
||||||
Battle::Move*move = member->moveSet[i];
|
|
||||||
bool exists=false;
|
|
||||||
for (int j=0;j<BATTLE_MOVELIST_DISPLAY.size();j++) {
|
|
||||||
if (BATTLE_MOVELIST_DISPLAY[j][0]->name.compare(move->name)==0) {
|
|
||||||
bool found=false;
|
|
||||||
for (int k=0;k<BATTLE_MOVELIST_DISPLAY[j].size();k++) {
|
|
||||||
if (ADDITIONAL_FONT_VALS[move->grade]<ADDITIONAL_FONT_VALS[BATTLE_MOVELIST_DISPLAY[j][k]->grade]) {
|
|
||||||
BATTLE_MOVELIST_DISPLAY[j].insert(BATTLE_MOVELIST_DISPLAY[j].begin()+i,move);
|
|
||||||
found=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
BATTLE_MOVELIST_DISPLAY[j].push_back(move);
|
|
||||||
}
|
|
||||||
exists=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!exists) {
|
|
||||||
std::vector<Battle::Move*> vec;
|
|
||||||
vec.push_back(move);
|
|
||||||
BATTLE_MOVELIST_DISPLAY.push_back(vec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}break;
|
}break;
|
||||||
case 1:{ //Attack selected.
|
case 1:{ //Attack selected.
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=MOVELIST[BattleMoveName::BASH];
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=MOVELIST[BattleMoveName::BASH];
|
||||||
@ -1076,7 +1050,8 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case 1:{//Power is selected.
|
case 1:{//Power is selected.
|
||||||
|
PopulateBattleMoveList(0,true);
|
||||||
|
GAME_STATE=GameState::OVERWORLD_POWER_MENU;
|
||||||
}break;
|
}break;
|
||||||
case 2:{//Items is selected.
|
case 2:{//Items is selected.
|
||||||
|
|
||||||
@ -1209,9 +1184,14 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
case GameState::GAME_WORLD:
|
case GameState::GAME_WORLD:
|
||||||
case GameState::OVERWORLD_MENU:{
|
case GameState::OVERWORLD_MENU:
|
||||||
|
case GameState::OVERWORLD_POWER_MENU:
|
||||||
|
case GameState::OVERWORLD_GRADE_MENU:
|
||||||
|
case GameState::OVERWORLD_ITEMS_MENU:
|
||||||
|
case GameState::OVERWORLD_EQUIP_MENU:
|
||||||
|
case GameState::OVERWORLD_STATUS_MENU:{
|
||||||
DrawGameWorld();
|
DrawGameWorld();
|
||||||
if (GAME_STATE==GameState::OVERWORLD_MENU) {
|
if (GAME_STATE!=GameState::GAME_WORLD) {
|
||||||
SetDrawTarget(layer::INTERFACE);
|
SetDrawTarget(layer::INTERFACE);
|
||||||
vi2d boxPos = {2,2};
|
vi2d boxPos = {2,2};
|
||||||
DrawDialogBox(boxPos,{(int)(WIDTH*0.25+4),5*16+4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
DrawDialogBox(boxPos,{(int)(WIDTH*0.25+4),5*16+4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
@ -1220,7 +1200,10 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
vi2d textPos = {12,i*16+6};
|
vi2d textPos = {12,i*16+6};
|
||||||
DrawStringPropDecal(boxPos+textPos,MENU_ITEMS[i]);
|
DrawStringPropDecal(boxPos+textPos,MENU_ITEMS[i]);
|
||||||
}
|
}
|
||||||
DrawDecal({static_cast<float>(2+4),static_cast<float>(2+6+OVERWORLD_MENU_SELECTION*16)},SPRITES["cursor.png"]);
|
DrawDecal({static_cast<float>(2+4),static_cast<float>(2+6+OVERWORLD_MENU_SELECTION*16)},SPRITES["cursor.png"]);
|
||||||
|
}
|
||||||
|
if (GAME_STATE==GameState::OVERWORLD_POWER_MENU||GAME_STATE==GameState::OVERWORLD_GRADE_MENU) {
|
||||||
|
DrawBattleMoveList(OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case GameState::EDITOR:{
|
case GameState::EDITOR:{
|
||||||
@ -1339,93 +1322,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
DrawDecal({static_cast<float>(BATTLE_SELECTION_CURSOR/2*64+3),static_cast<float>(9+((BATTLE_SELECTION_CURSOR%2==0)?0:14))},SPRITES["cursor.png"]);
|
DrawDecal({static_cast<float>(BATTLE_SELECTION_CURSOR/2*64+3),static_cast<float>(9+((BATTLE_SELECTION_CURSOR%2==0)?0:14))},SPRITES["cursor.png"]);
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT) {
|
if (BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT) {
|
||||||
SetDrawTarget(layer::INTERFACE);
|
DrawBattleMoveList(-CURRENT_TURN-1);
|
||||||
DrawDialogBox({1,1},{(int)(WIDTH/2),HEIGHT/4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
|
|
||||||
vd2d descBoxPos = {WIDTH-(int)(WIDTH/2.5)-2,1};
|
|
||||||
vi2d textStartingOffset = {4,4};
|
|
||||||
DrawDialogBox(descBoxPos,{(int)(WIDTH/2.5),HEIGHT/4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawStringPropDecal(descBoxPos+textStartingOffset,Wrap(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][0]->desc,((int)(WIDTH/2.5-8)),true,{0.8,0.8}),WHITE,{0.8,0.8});
|
|
||||||
vd2d ppCostBoxPos = {WIDTH-WIDTH/3-2,HEIGHT/4+2};
|
|
||||||
DrawDialogBox(ppCostBoxPos,{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawStringPropDecal(ppCostBoxPos+textStartingOffset,"PP Cost",WHITE,{0.7,0.8});
|
|
||||||
std::string label = std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->PPCost);
|
|
||||||
DrawStringPropDecal({static_cast<float>(ppCostBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*1.5),static_cast<float>(ppCostBoxPos.y+textStartingOffset.y+8)},label,WHITE,{1.5,1.5});
|
|
||||||
|
|
||||||
vd2d damageBoxPos = {WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+2};
|
|
||||||
DrawDialogBox({WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+2},{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawStringPropDecal(damageBoxPos+textStartingOffset,"Damage",WHITE,{0.7,0.8});
|
|
||||||
label = (BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->baseDmg!=0)?std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->baseDmg+PARTY_MEMBER_STATS[-CURRENT_TURN-1]->baseAtk)+"~"+std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->randomDmg+BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->baseDmg+PARTY_MEMBER_STATS[-CURRENT_TURN-1]->baseAtk):"N/A";
|
|
||||||
DrawStringPropDecal({static_cast<float>(damageBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5))),static_cast<float>(damageBoxPos.y+textStartingOffset.y+8)},label,WHITE,{static_cast<float>(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5)),1.5});
|
|
||||||
|
|
||||||
|
|
||||||
vd2d rangeBoxPos = {WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+HEIGHT/8+3};
|
|
||||||
DrawDialogBox({WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+HEIGHT/8+3},{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawStringPropDecal(rangeBoxPos+textStartingOffset,"Range",WHITE,{0.7,0.8});
|
|
||||||
label = std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->range);
|
|
||||||
DrawStringPropDecal({static_cast<float>(rangeBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5))),static_cast<float>(rangeBoxPos.y+textStartingOffset.y+8)},label,WHITE,{static_cast<float>(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5)),1.5});
|
|
||||||
|
|
||||||
|
|
||||||
vd2d channelTimeBoxPos = {WIDTH-WIDTH/3-1,HEIGHT/4+HEIGHT/8+3};
|
|
||||||
DrawDialogBox({WIDTH-WIDTH/3-1,HEIGHT/4+HEIGHT/8+3},{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawStringPropDecal(channelTimeBoxPos+textStartingOffset,"Cast",WHITE,{0.7,0.8});
|
|
||||||
label = std::to_string((float)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->channelTime/60).erase(3);
|
|
||||||
DrawStringPropDecal({static_cast<float>(channelTimeBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5))),static_cast<float>(channelTimeBoxPos.y+textStartingOffset.y+8)},label,WHITE,{static_cast<float>(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5)),1.5});
|
|
||||||
|
|
||||||
int counter=0;
|
|
||||||
int displayLimit=0;
|
|
||||||
for (int i=0;i<BATTLE_MOVELIST_DISPLAY.size();i++) {
|
|
||||||
if (counter>=POWER_SELECTION_OFFSET[-CURRENT_TURN-1]&&counter<=POWER_SELECTION_OFFSET[-CURRENT_TURN-1]+3) {
|
|
||||||
int displayYOffset=-POWER_SELECTION_OFFSET[-CURRENT_TURN-1]*12;
|
|
||||||
std::vector<Battle::Move*> moves = BATTLE_MOVELIST_DISPLAY[i];
|
|
||||||
std::string name = moves[0]->name;
|
|
||||||
if (GetTextSizeProp(name).x>WIDTH/4) {
|
|
||||||
DrawStringPropDecal({12,static_cast<float>(12*counter+8+displayYOffset)},name,WHITE,{(WIDTH/4)/(float)GetTextSizeProp(name).x,1});
|
|
||||||
} else {
|
|
||||||
DrawStringPropDecal({12,static_cast<float>(12*counter+8+displayYOffset)},name);
|
|
||||||
}
|
|
||||||
for (int i=0;i<moves.size();i++) {
|
|
||||||
Pixel drawCol;
|
|
||||||
if (BATTLE_STATE==BattleState::GRADE_SELECT&&POWER_SELECTION_CURSOR[-CURRENT_TURN-1]==counter) {
|
|
||||||
if (POWER_GRADE_CURSOR[-CURRENT_TURN-1]==i) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->GetPP()>=moves[i]->PPCost) {
|
|
||||||
drawCol=WHITE;
|
|
||||||
} else {
|
|
||||||
drawCol=RED;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->GetPP()>=moves[i]->PPCost) {
|
|
||||||
drawCol=DARK_GREY;
|
|
||||||
} else {
|
|
||||||
drawCol=DARK_RED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
drawCol=WHITE;
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->GetPP()>=moves[i]->PPCost) {
|
|
||||||
drawCol=WHITE;
|
|
||||||
} else {
|
|
||||||
drawCol=RED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DrawFancyStringDecal({static_cast<float>(8+WIDTH/4+12+i*8),static_cast<float>(12*counter+8+displayYOffset)},std::wstring(1,moves[i]->grade),drawCol);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
++counter;
|
|
||||||
}
|
|
||||||
if (BATTLE_STATE==BattleState::POWER_SELECT) {
|
|
||||||
DrawDecal({4,static_cast<float>(12*(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-POWER_SELECTION_OFFSET[-CURRENT_TURN-1])+8)},SPRITES["cursor.png"]);
|
|
||||||
} else {
|
|
||||||
DrawDecal({(float)(WIDTH/4+4+POWER_GRADE_CURSOR[-CURRENT_TURN-1]*8+8),static_cast<float>(12*(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-POWER_SELECTION_OFFSET[-CURRENT_TURN-1])+8)},SPRITES["cursor.png"]);
|
|
||||||
}
|
|
||||||
if (BATTLE_MOVELIST_DISPLAY.size()>4) {
|
|
||||||
if (POWER_SELECTION_OFFSET[-CURRENT_TURN-1]>0) {
|
|
||||||
DrawRotatedDecal({WIDTH/2-16,7},SPRITES["cursor.png"],-M_PI_2,{4,4});
|
|
||||||
}
|
|
||||||
if (POWER_SELECTION_OFFSET[-CURRENT_TURN-1]+3<BATTLE_MOVELIST_DISPLAY.size()-1) {
|
|
||||||
DrawRotatedDecal({WIDTH/2-16,HEIGHT/4-7},SPRITES["cursor.png"],M_PI_2,{4,4});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE==BattleState::TARGET_SELECT) {
|
if (BATTLE_STATE==BattleState::TARGET_SELECT) {
|
||||||
SetDrawTarget(layer::GROUND);
|
SetDrawTarget(layer::GROUND);
|
||||||
@ -2033,10 +1930,10 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
MOVELIST[BattleMoveName::PKSHIELD_B]=new Battle::Move{"PK Shield","Protects against physical attacks.",BETA,baseDmg:0,randomDmg:0,PPCost:20,range:1,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKSHIELD_B]=new Battle::Move{"PK Shield","Protects against physical attacks.",BETA,baseDmg:0,randomDmg:0,PPCost:20,range:1,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::PKSHIELD_O]=new Battle::Move{"PK Shield","Protects against physical attacks.",OMEGA,baseDmg:0,randomDmg:0,PPCost:59,range:4,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKSHIELD_O]=new Battle::Move{"PK Shield","Protects against physical attacks.",OMEGA,baseDmg:0,randomDmg:0,PPCost:59,range:4,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::PKSHIELD_S]=new Battle::Move{"PK Shield","Protects against physical attacks.",SIGMA,baseDmg:0,randomDmg:0,PPCost:80,range:10,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKSHIELD_S]=new Battle::Move{"PK Shield","Protects against physical attacks.",SIGMA,baseDmg:0,randomDmg:0,PPCost:80,range:10,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::PKLIFEUP_A]=new Battle::Move{"PK Lifeup","Restores a small amount of health.",ALPHA,baseDmg:80,randomDmg:10,PPCost:4,range:1,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKLIFEUP_A]=new Battle::Move{"PK Lifeup","Restores a small amount of health.",ALPHA,baseDmg:80,randomDmg:10,PPCost:4,range:1,channelTime:0,friendly:true,composition:{0,0,20,0},overworld:true};
|
||||||
MOVELIST[BattleMoveName::PKLIFEUP_B]=new Battle::Move{"PK Lifeup","Restores a moderate amount of health.",BETA,baseDmg:240,randomDmg:60,PPCost:9,range:1,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKLIFEUP_B]=new Battle::Move{"PK Lifeup","Restores a moderate amount of health.",BETA,baseDmg:240,randomDmg:60,PPCost:9,range:1,channelTime:0,friendly:true,composition:{0,0,20,0},overworld:true};
|
||||||
MOVELIST[BattleMoveName::PKLIFEUP_G]=new Battle::Move{"PK Lifeup","Restores a large amount of health.",GAMMA,baseDmg:400,randomDmg:50,PPCost:21,range:3,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKLIFEUP_G]=new Battle::Move{"PK Lifeup","Restores a large amount of health.",GAMMA,baseDmg:400,randomDmg:50,PPCost:21,range:3,channelTime:0,friendly:true,composition:{0,0,20,0},overworld:true};
|
||||||
MOVELIST[BattleMoveName::PKLIFEUP_O]=new Battle::Move{"PK Lifeup","Restores a great amount of health to all allies.",OMEGA,baseDmg:800,randomDmg:100,PPCost:64,range:6,channelTime:0,friendly:true,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKLIFEUP_O]=new Battle::Move{"PK Lifeup","Restores a great amount of health to all allies.",OMEGA,baseDmg:800,randomDmg:100,PPCost:64,range:6,channelTime:0,friendly:true,composition:{0,0,20,0},overworld:true};
|
||||||
MOVELIST[BattleMoveName::PKFUN_A]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",ALPHA,baseDmg:100,randomDmg:10,PPCost:15,range:6,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
MOVELIST[BattleMoveName::PKFUN_A]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",ALPHA,baseDmg:100,randomDmg:10,PPCost:15,range:6,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
||||||
MOVELIST[BattleMoveName::PKFUN_B]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",BETA,baseDmg:240,randomDmg:40,PPCost:30,range:6,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
MOVELIST[BattleMoveName::PKFUN_B]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",BETA,baseDmg:240,randomDmg:40,PPCost:30,range:6,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
||||||
MOVELIST[BattleMoveName::PKFUN_G]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",GAMMA,baseDmg:360,randomDmg:80,PPCost:45,range:7,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
MOVELIST[BattleMoveName::PKFUN_G]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",GAMMA,baseDmg:360,randomDmg:80,PPCost:45,range:7,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
||||||
@ -3690,6 +3587,131 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PopulateBattleMoveList(int partyMemberSlot,bool overworld=false) {
|
||||||
|
BATTLE_MOVELIST_DISPLAY.clear();
|
||||||
|
Entity*member = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]];
|
||||||
|
for (int i=0;i<member->moveSet.size();i++) {
|
||||||
|
Battle::Move*move = member->moveSet[i];
|
||||||
|
if (overworld&&move->overworld||!overworld) {
|
||||||
|
bool exists=false;
|
||||||
|
for (int j=0;j<BATTLE_MOVELIST_DISPLAY.size();j++) {
|
||||||
|
if (BATTLE_MOVELIST_DISPLAY[j][0]->name.compare(move->name)==0) {
|
||||||
|
bool found=false;
|
||||||
|
for (int k=0;k<BATTLE_MOVELIST_DISPLAY[j].size();k++) {
|
||||||
|
if (ADDITIONAL_FONT_VALS[move->grade]<ADDITIONAL_FONT_VALS[BATTLE_MOVELIST_DISPLAY[j][k]->grade]) {
|
||||||
|
BATTLE_MOVELIST_DISPLAY[j].insert(BATTLE_MOVELIST_DISPLAY[j].begin()+i,move);
|
||||||
|
found=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
BATTLE_MOVELIST_DISPLAY[j].push_back(move);
|
||||||
|
}
|
||||||
|
exists=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!exists) {
|
||||||
|
std::vector<Battle::Move*> vec;
|
||||||
|
vec.push_back(move);
|
||||||
|
BATTLE_MOVELIST_DISPLAY.push_back(vec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawBattleMoveList(int partyMemberSlot) {
|
||||||
|
SetDrawTarget(layer::INTERFACE);
|
||||||
|
DrawDialogBox({1,1},{(int)(WIDTH/2),HEIGHT/4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
|
||||||
|
vd2d descBoxPos = {WIDTH-(int)(WIDTH/2.5)-2,1};
|
||||||
|
vi2d textStartingOffset = {4,4};
|
||||||
|
DrawDialogBox(descBoxPos,{(int)(WIDTH/2.5),HEIGHT/4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawStringPropDecal(descBoxPos+textStartingOffset,Wrap(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][0]->desc,((int)(WIDTH/2.5-8)),true,{0.8,0.8}),WHITE,{0.8,0.8});
|
||||||
|
vd2d ppCostBoxPos = {WIDTH-WIDTH/3-2,HEIGHT/4+2};
|
||||||
|
DrawDialogBox(ppCostBoxPos,{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawStringPropDecal(ppCostBoxPos+textStartingOffset,"PP Cost",WHITE,{0.7,0.8});
|
||||||
|
std::string label = std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->PPCost);
|
||||||
|
DrawStringPropDecal({static_cast<float>(ppCostBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*1.5),static_cast<float>(ppCostBoxPos.y+textStartingOffset.y+8)},label,WHITE,{1.5,1.5});
|
||||||
|
|
||||||
|
vd2d damageBoxPos = {WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+2};
|
||||||
|
DrawDialogBox({WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+2},{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawStringPropDecal(damageBoxPos+textStartingOffset,"Damage",WHITE,{0.7,0.8});
|
||||||
|
label = (BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->baseDmg!=0)?std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->baseDmg+PARTY_MEMBER_STATS[partyMemberSlot]->baseAtk)+"~"+std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->randomDmg+BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->baseDmg+PARTY_MEMBER_STATS[partyMemberSlot]->baseAtk):"N/A";
|
||||||
|
DrawStringPropDecal({static_cast<float>(damageBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5))),static_cast<float>(damageBoxPos.y+textStartingOffset.y+8)},label,WHITE,{static_cast<float>(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5)),1.5});
|
||||||
|
|
||||||
|
if (BATTLE_ENCOUNTER!=nullptr) {
|
||||||
|
vd2d rangeBoxPos = {WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+HEIGHT/8+3};
|
||||||
|
DrawDialogBox({WIDTH-WIDTH/3+WIDTH/6-1,HEIGHT/4+HEIGHT/8+3},{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawStringPropDecal(rangeBoxPos+textStartingOffset,"Range",WHITE,{0.7,0.8});
|
||||||
|
label = std::to_string(BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->range);
|
||||||
|
DrawStringPropDecal({static_cast<float>(rangeBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5))),static_cast<float>(rangeBoxPos.y+textStartingOffset.y+8)},label,WHITE,{static_cast<float>(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5)),1.5});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BATTLE_ENCOUNTER!=nullptr) {
|
||||||
|
vd2d channelTimeBoxPos = {WIDTH-WIDTH/3-1,HEIGHT/4+HEIGHT/8+3};
|
||||||
|
DrawDialogBox({WIDTH-WIDTH/3-1,HEIGHT/4+HEIGHT/8+3},{(int)(WIDTH/6),HEIGHT/8},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawStringPropDecal(channelTimeBoxPos+textStartingOffset,"Cast",WHITE,{0.7,0.8});
|
||||||
|
label = std::to_string((float)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[partyMemberSlot]][POWER_GRADE_CURSOR[partyMemberSlot]]->channelTime/60).erase(3);
|
||||||
|
DrawStringPropDecal({static_cast<float>(channelTimeBoxPos.x+textStartingOffset.x+(WIDTH/6)-8-GetTextSizeProp(label).x*(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5))),static_cast<float>(channelTimeBoxPos.y+textStartingOffset.y+8)},label,WHITE,{static_cast<float>(std::min((double)((WIDTH/6)-8)/GetTextSizeProp(label).x,1.5)),1.5});
|
||||||
|
}
|
||||||
|
|
||||||
|
int counter=0;
|
||||||
|
int displayLimit=0;
|
||||||
|
for (int i=0;i<BATTLE_MOVELIST_DISPLAY.size();i++) {
|
||||||
|
if (counter>=POWER_SELECTION_OFFSET[partyMemberSlot]&&counter<=POWER_SELECTION_OFFSET[partyMemberSlot]+3) {
|
||||||
|
int displayYOffset=-POWER_SELECTION_OFFSET[partyMemberSlot]*12;
|
||||||
|
std::vector<Battle::Move*> moves = BATTLE_MOVELIST_DISPLAY[i];
|
||||||
|
std::string name = moves[0]->name;
|
||||||
|
if (GetTextSizeProp(name).x>WIDTH/4) {
|
||||||
|
DrawStringPropDecal({12,static_cast<float>(12*counter+8+displayYOffset)},name,WHITE,{(WIDTH/4)/(float)GetTextSizeProp(name).x,1});
|
||||||
|
} else {
|
||||||
|
DrawStringPropDecal({12,static_cast<float>(12*counter+8+displayYOffset)},name);
|
||||||
|
}
|
||||||
|
for (int i=0;i<moves.size();i++) {
|
||||||
|
Pixel drawCol;
|
||||||
|
if ((GAME_STATE==GameState::OVERWORLD_GRADE_MENU||BATTLE_STATE==BattleState::GRADE_SELECT)&&POWER_SELECTION_CURSOR[partyMemberSlot]==counter) {
|
||||||
|
if (POWER_GRADE_CURSOR[partyMemberSlot]==i) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->GetPP()>=moves[i]->PPCost) {
|
||||||
|
drawCol=WHITE;
|
||||||
|
} else {
|
||||||
|
drawCol=RED;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->GetPP()>=moves[i]->PPCost) {
|
||||||
|
drawCol=DARK_GREY;
|
||||||
|
} else {
|
||||||
|
drawCol=DARK_RED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
drawCol=WHITE;
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->GetPP()>=moves[i]->PPCost) {
|
||||||
|
drawCol=WHITE;
|
||||||
|
} else {
|
||||||
|
drawCol=RED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DrawFancyStringDecal({static_cast<float>(8+WIDTH/4+12+i*8),static_cast<float>(12*counter+8+displayYOffset)},std::wstring(1,moves[i]->grade),drawCol);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
++counter;
|
||||||
|
}
|
||||||
|
if (BATTLE_STATE==BattleState::POWER_SELECT||GAME_STATE==GameState::OVERWORLD_POWER_MENU) {
|
||||||
|
DrawDecal({4,static_cast<float>(12*(POWER_SELECTION_CURSOR[partyMemberSlot]-POWER_SELECTION_OFFSET[partyMemberSlot])+8)},SPRITES["cursor.png"]);
|
||||||
|
} else {
|
||||||
|
DrawDecal({(float)(WIDTH/4+4+POWER_GRADE_CURSOR[partyMemberSlot]*8+8),static_cast<float>(12*(POWER_SELECTION_CURSOR[partyMemberSlot]-POWER_SELECTION_OFFSET[partyMemberSlot])+8)},SPRITES["cursor.png"]);
|
||||||
|
}
|
||||||
|
if (BATTLE_MOVELIST_DISPLAY.size()>4) {
|
||||||
|
if (POWER_SELECTION_OFFSET[partyMemberSlot]>0) {
|
||||||
|
DrawRotatedDecal({WIDTH/2-16,7},SPRITES["cursor.png"],-M_PI_2,{4,4});
|
||||||
|
}
|
||||||
|
if (POWER_SELECTION_OFFSET[partyMemberSlot]+3<BATTLE_MOVELIST_DISPLAY.size()-1) {
|
||||||
|
DrawRotatedDecal({WIDTH/2-16,HEIGHT/4-7},SPRITES["cursor.png"],M_PI_2,{4,4});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
1
states.h
1
states.h
@ -9,6 +9,7 @@ namespace GameState{
|
|||||||
GAME_WORLD,
|
GAME_WORLD,
|
||||||
OVERWORLD_MENU,
|
OVERWORLD_MENU,
|
||||||
OVERWORLD_POWER_MENU,
|
OVERWORLD_POWER_MENU,
|
||||||
|
OVERWORLD_GRADE_MENU,
|
||||||
OVERWORLD_ITEMS_MENU,
|
OVERWORLD_ITEMS_MENU,
|
||||||
OVERWORLD_EQUIP_MENU,
|
OVERWORLD_EQUIP_MENU,
|
||||||
OVERWORLD_STATUS_MENU,
|
OVERWORLD_STATUS_MENU,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user