generated from sigonasr2/CPlusPlusProjectTemplate
Implemented use of recovery and consumable items in the overworld.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
79321dc127
commit
fc1bdfd4d3
Binary file not shown.
138
main.cpp
138
main.cpp
@ -161,6 +161,7 @@ public:
|
|||||||
bool HEALING_OVERWORLD_MEMBERS=false; //When set to true, members will be healed as dialog boxes are closed using the HEALING_OVERWORLD_MEMBER variable.
|
bool HEALING_OVERWORLD_MEMBERS=false; //When set to true, members will be healed as dialog boxes are closed using the HEALING_OVERWORLD_MEMBER variable.
|
||||||
int HEALING_OVERWORLD_MEMBER=0;
|
int HEALING_OVERWORLD_MEMBER=0;
|
||||||
bool HEALING_OVERWORLD_SINGLE_MEMBER=false; //When set to true, a single member is being healed.
|
bool HEALING_OVERWORLD_SINGLE_MEMBER=false; //When set to true, a single member is being healed.
|
||||||
|
bool OVERWORLD_ITEM_BEING_USED=false; //When set to true, we need to equip an item after target selected.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
@ -1100,7 +1101,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case 2:{//Items is selected.
|
case 2:{//Items is selected.
|
||||||
|
GAME_STATE=GameState::OVERWORLD_ITEMS_MENU;
|
||||||
}break;
|
}break;
|
||||||
case 3:{//Equip is selected.
|
case 3:{//Equip is selected.
|
||||||
|
|
||||||
@ -1228,10 +1229,89 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=true;
|
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=true;
|
||||||
}
|
}
|
||||||
if (UpPressed()){
|
if (UpPressed()){
|
||||||
|
if (OVERWORLD_ITEM_BEING_USED) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_ITEMS_MENU;
|
||||||
|
} else {
|
||||||
GAME_STATE=GameState::OVERWORLD_GRADE_MENU;
|
GAME_STATE=GameState::OVERWORLD_GRADE_MENU;
|
||||||
|
}
|
||||||
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=false;
|
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=false;
|
||||||
}
|
}
|
||||||
if (ACTIONKEYPRESSED) {
|
if (ACTIONKEYPRESSED) {
|
||||||
|
if (OVERWORLD_ITEM_BEING_USED) { //Equipping an item.
|
||||||
|
int prevPartyInvenSize=PARTY_INVENTORY.size();
|
||||||
|
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.equip!=EquipSlot::NONE) {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_TARGET_SELECTION]]->EquipItem(ITEM_SELECTION_CURSOR);
|
||||||
|
GAME_STATE=GameState::OVERWORLD_ITEMS_MENU;
|
||||||
|
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=true;
|
||||||
|
} else
|
||||||
|
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.consumable!=Consumable::NOT_A_CONSUMABLE) {
|
||||||
|
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.consumable==Consumable::FRIENDLY||PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.consumable==Consumable::FRIENDLY_PERMANENT) {
|
||||||
|
//PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=MOVELIST[BattleMoveName::CONSUMABLE];
|
||||||
|
Entity*target=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_TARGET_SELECTION]];
|
||||||
|
Item*item=PARTY_INVENTORY[ITEM_SELECTION_CURSOR];
|
||||||
|
std::string messages=item->name+" is used.";
|
||||||
|
for (int i=0;i<item->messages.size();i++) {
|
||||||
|
CustomItemMessage msg = item->messages[i];
|
||||||
|
if (msg.s.find("$TARGET")!=std::string::npos) {
|
||||||
|
if (msg.a!=ItemAction::LEARNMOVE) {
|
||||||
|
messages+=" "+msg.s.replace(msg.s.find("$TARGET"),7,target->obj->name);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
messages+=" "+msg.s;
|
||||||
|
}
|
||||||
|
switch (msg.a) {
|
||||||
|
case ItemAction::HPRECOVERY:{
|
||||||
|
target->AddHP(item->stats.hpRecovery);
|
||||||
|
vi2d box = {(128-32*PARTY_MEMBER_COUNT)+OVERWORLD_TARGET_SELECTION*64+29,170};
|
||||||
|
DAMAGE_NUMBERS.push_back(new DamageNumber(-item->stats.hpRecovery,box+cameraPos));
|
||||||
|
}break;
|
||||||
|
case ItemAction::PPRECOVERY:{
|
||||||
|
target->AddPP(item->stats.ppRecovery);
|
||||||
|
}break;
|
||||||
|
case ItemAction::ATKINCREASE:{
|
||||||
|
target->baseAtk+=item->stats.atkIncrease;
|
||||||
|
}break;
|
||||||
|
case ItemAction::HPINCREASE:{
|
||||||
|
target->maxHP+=item->stats.hpIncrease;
|
||||||
|
target->AddHP(item->stats.hpIncrease);
|
||||||
|
vi2d box = {(128-32*PARTY_MEMBER_COUNT)+OVERWORLD_TARGET_SELECTION*64+29,170};
|
||||||
|
DAMAGE_NUMBERS.push_back(new DamageNumber(-item->stats.hpIncrease,box+cameraPos));
|
||||||
|
}break;
|
||||||
|
case ItemAction::PPINCREASE:{
|
||||||
|
target->maxPP+=item->stats.ppIncrease;
|
||||||
|
target->AddPP(item->stats.ppIncrease);
|
||||||
|
}break;
|
||||||
|
case ItemAction::SPDINCREASE:{
|
||||||
|
target->speed+=item->stats.spdIncrease;
|
||||||
|
}break;
|
||||||
|
case ItemAction::LEARNMOVE:{
|
||||||
|
bool moveLearned=false;
|
||||||
|
for (int i=0;i<target->moveSet.size();i++) {
|
||||||
|
if (item->stats.learnAbility==target->moveSet[i]) {
|
||||||
|
moveLearned=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!moveLearned) {
|
||||||
|
messages+=" "+msg.s.replace(msg.s.find("$TARGET"),7,target->obj->name);
|
||||||
|
target->moveSet.push_back(item->stats.learnAbility);
|
||||||
|
} else {
|
||||||
|
messages+=" Failed to learn "+item->stats.learnAbility->GetPowerName();
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DisplayMessageBox(messages);
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_TARGET_SELECTION]]->RemoveItem(ITEM_SELECTION_CURSOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ITEM_SELECTION_CURSOR>=PARTY_INVENTORY.size()&&prevPartyInvenSize&1&&PARTY_INVENTORY.size()==prevPartyInvenSize-1) {
|
||||||
|
ITEM_SELECTION_OFFSET-=2;
|
||||||
|
}
|
||||||
|
ITEM_SELECTION_CURSOR=std::clamp(ITEM_SELECTION_CURSOR,0,(int)PARTY_INVENTORY.size()-1);
|
||||||
|
OVERWORLD_ITEM_BEING_USED=false;
|
||||||
|
GAME_STATE=GameState::OVERWORLD_ITEMS_MENU;
|
||||||
|
} else { //Using a power instead.
|
||||||
HEALING_OVERWORLD_SINGLE_MEMBER=true;
|
HEALING_OVERWORLD_SINGLE_MEMBER=true;
|
||||||
Battle::Move*move=BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]][OVERWORLD_POWER_GRADE_CURSOR];
|
Battle::Move*move=BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]][OVERWORLD_POWER_GRADE_CURSOR];
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_POWER_SELECTION_MEMBER]]->SubtractPP(move->PPCost);
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_POWER_SELECTION_MEMBER]]->SubtractPP(move->PPCost);
|
||||||
@ -1239,6 +1319,26 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
GAME_STATE=GameState::OVERWORLD_GRADE_MENU;
|
GAME_STATE=GameState::OVERWORLD_GRADE_MENU;
|
||||||
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=false;
|
PARTY_MEMBER_OBJ[OVERWORLD_TARGET_SELECTION]->highlighted=false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case GameState::OVERWORLD_ITEMS_MENU:{
|
||||||
|
if (LeftPressed()&&!(ITEM_SELECTION_CURSOR&1)) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_MENU;
|
||||||
|
} else {
|
||||||
|
HandleInventoryNavigation();
|
||||||
|
}
|
||||||
|
if (ACTIONKEYPRESSED) {
|
||||||
|
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.equip!=EquipSlot::NONE||PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.consumable!=Consumable::NOT_A_CONSUMABLE) {
|
||||||
|
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.equip!=EquipSlot::NONE||PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.consumable==Consumable::FRIENDLY||PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.consumable==Consumable::FRIENDLY_PERMANENT) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_TARGET_MENU;
|
||||||
|
OVERWORLD_ITEM_BEING_USED=true;
|
||||||
|
} else {
|
||||||
|
DisplayMessageBox("Cannot use that here.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DisplayMessageBox("Cannot use that here.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}break;
|
}break;
|
||||||
case GameState::EDITOR:{
|
case GameState::EDITOR:{
|
||||||
if (IsTextEntryEnabled()) {
|
if (IsTextEntryEnabled()) {
|
||||||
@ -1598,6 +1698,23 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (BATTLE_ENCOUNTER!=nullptr&&BATTLE_STATE==BattleState::ITEM_SELECT||GAME_STATE==GameState::OVERWORLD_ITEMS_MENU) {
|
||||||
|
DrawDialogBox({4,4},{(int)(WIDTH-8),(int)(HEIGHT/2)},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawDialogBox({(int)(WIDTH*(3.0F/8)),HEIGHT/2+4},{(int)(WIDTH*(5.0F/8)-4),(int)(HEIGHT/4)},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||||
|
DrawDecal({static_cast<float>(8+(ITEM_SELECTION_CURSOR)%2*(WIDTH-8)/2),static_cast<float>(12*((ITEM_SELECTION_CURSOR-ITEM_SELECTION_OFFSET)/2)+8)},SPRITES["cursor.png"]);
|
||||||
|
DrawStringPropDecal({(int)(WIDTH*(3.0F/8))+4,HEIGHT/2+8},Wrap(PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->description,(int)(WIDTH*(5.0F/8))-4,true,{1,1}));
|
||||||
|
for (int i=0;i<18;i++) {
|
||||||
|
if (ITEM_SELECTION_OFFSET+i<PARTY_INVENTORY.size()) {
|
||||||
|
DrawStringPropDecal({static_cast<float>(16+i%2*(WIDTH-8)/2),static_cast<float>(12*(i/2)+8)},PARTY_INVENTORY[ITEM_SELECTION_OFFSET+i]->name,WHITE,{std::clamp((float)(WIDTH-48)/2/GetTextSizeProp(PARTY_INVENTORY[ITEM_SELECTION_OFFSET+i]->name).x,0.0F,1.0F),1.0F});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ITEM_SELECTION_OFFSET>0) {
|
||||||
|
DrawRotatedDecal({WIDTH-20,8},SPRITES["cursor.png"],-M_PI_2,{4,4});
|
||||||
|
}
|
||||||
|
if (ITEM_SELECTION_OFFSET+18<PARTY_INVENTORY.size()) {
|
||||||
|
DrawRotatedDecal({WIDTH-20,4+HEIGHT/2-4},SPRITES["cursor.png"],M_PI_2,{4,4});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (BATTLE_ENCOUNTER!=nullptr) {
|
if (BATTLE_ENCOUNTER!=nullptr) {
|
||||||
SetDrawTarget(layer::HIGH);
|
SetDrawTarget(layer::HIGH);
|
||||||
@ -1665,23 +1782,6 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE==BattleState::ITEM_SELECT) {
|
|
||||||
DrawDialogBox({4,4},{(int)(WIDTH-8),(int)(HEIGHT/2)},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawDialogBox({(int)(WIDTH*(3.0F/8)),HEIGHT/2+4},{(int)(WIDTH*(5.0F/8)-4),(int)(HEIGHT/4)},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
|
||||||
DrawDecal({static_cast<float>(8+(ITEM_SELECTION_CURSOR)%2*(WIDTH-8)/2),static_cast<float>(12*((ITEM_SELECTION_CURSOR-ITEM_SELECTION_OFFSET)/2)+8)},SPRITES["cursor.png"]);
|
|
||||||
DrawStringPropDecal({(int)(WIDTH*(3.0F/8))+4,HEIGHT/2+8},Wrap(PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->description,(int)(WIDTH*(5.0F/8))-4,true,{1,1}));
|
|
||||||
for (int i=0;i<18;i++) {
|
|
||||||
if (ITEM_SELECTION_OFFSET+i<PARTY_INVENTORY.size()) {
|
|
||||||
DrawStringPropDecal({static_cast<float>(16+i%2*(WIDTH-8)/2),static_cast<float>(12*(i/2)+8)},PARTY_INVENTORY[ITEM_SELECTION_OFFSET+i]->name,WHITE,{std::clamp((float)(WIDTH-48)/2/GetTextSizeProp(PARTY_INVENTORY[ITEM_SELECTION_OFFSET+i]->name).x,0.0F,1.0F),1.0F});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ITEM_SELECTION_OFFSET>0) {
|
|
||||||
DrawRotatedDecal({WIDTH-20,8},SPRITES["cursor.png"],-M_PI_2,{4,4});
|
|
||||||
}
|
|
||||||
if (ITEM_SELECTION_OFFSET+18<PARTY_INVENTORY.size()) {
|
|
||||||
DrawRotatedDecal({WIDTH-20,4+HEIGHT/2-4},SPRITES["cursor.png"],M_PI_2,{4,4});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////INTERFACE LAYER.
|
//////////////////INTERFACE LAYER.
|
||||||
@ -2969,7 +3069,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
if (!moveLearned) {
|
if (!moveLearned) {
|
||||||
target->moveSet.push_back(BATTLE_CUSTOM_ITEM->stats.learnAbility);
|
target->moveSet.push_back(BATTLE_CUSTOM_ITEM->stats.learnAbility);
|
||||||
} else {
|
} else {
|
||||||
BATTLE_CURRENT_CUSTOM_MSG.s="Failed to learn "+BATTLE_CUSTOM_ITEM->stats.learnAbility->name;
|
BATTLE_CURRENT_CUSTOM_MSG.s="Failed to learn "+BATTLE_CUSTOM_ITEM->stats.learnAbility->GetPowerName();
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user