Implement status menu display

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 300f77d51e
commit 948e8600a6
  1. 7
      C++/scripts/debug.sh
  2. 1
      C++/scripts/filelist
  3. 1
      C++/scripts/md5
  4. BIN
      C++ProjectTemplate
  5. BIN
      assets/bufficons.png
  6. 4
      defines.h
  7. 10
      entity.h
  8. 86
      main.cpp
  9. 2
      sig

@ -0,0 +1,7 @@
#Compiles the entire program with debug flags then runs it in gdb.
#C++
printf "Running program...\n\n\n"
if g++ $(find . -type f -name "*.cpp") -g ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then
gdb ./${PROJECT_NAME} "$@"
fi
printf "\n\n"

@ -1,5 +1,6 @@
build.sh build.sh
commit.sh commit.sh
debug.sh
lines.sh lines.sh
release.sh release.sh
temp temp

@ -1,5 +1,6 @@
build.sh:530634457ea9041267c05d4ced95eee1 - build.sh:530634457ea9041267c05d4ced95eee1 -
commit.sh:d03a46e721060c22ccb146e19d27e70a - commit.sh:d03a46e721060c22ccb146e19d27e70a -
debug.sh:abbbb0c6d9f2409f3a90738ab3d9d44f -
lines.sh:3b907786f7fc9204025993016c9080de - lines.sh:3b907786f7fc9204025993016c9080de -
release.sh:a54e2002be80814cc1293a11dff4d116 - release.sh:a54e2002be80814cc1293a11dff4d116 -
temp:d41d8cd98f00b204e9800998ecf8427e - temp:d41d8cd98f00b204e9800998ecf8427e -

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -37,6 +37,7 @@ using namespace olc;
#define 액션 (CutsceneAction*)new #define 액션 (CutsceneAction*)new
enum class Property{ enum class Property{
NONE,
PETRIFY, PETRIFY,
PARALYZE, PARALYZE,
DIAMONDIZE, DIAMONDIZE,
@ -47,8 +48,7 @@ enum class Property{
POISON, POISON,
REGEN, REGEN,
DEFENSE_UP, DEFENSE_UP,
REVIVE, REVIVE
NONE
}; };
extern PixelGameEngine*GAME; extern PixelGameEngine*GAME;

@ -8,6 +8,15 @@ extern std::vector<Item*>PARTY_INVENTORY;
using namespace olc; using namespace olc;
namespace boost{
enum{
ATK,
HP,
PP,
SPD
};
}
class Entity{ class Entity{
private: private:
@ -35,6 +44,7 @@ class Entity{
std::vector<Item*> inventory; //Used mostly for enemy spoils. std::vector<Item*> inventory; //Used mostly for enemy spoils.
std::array<Item*,3> equipment = {nullptr,nullptr,nullptr}; //Equipment this character is using. std::array<Item*,3> equipment = {nullptr,nullptr,nullptr}; //Equipment this character is using.
bool isPlayer=false; //Whether or not this is a player entity. bool isPlayer=false; //Whether or not this is a player entity.
std::array<int,4> boosts = {0,0,0,0}; //Values to indicate how much the boosts of each stat ended up being. Order is ATK,HP,PP,SPD.
//Used for initializing players. //Used for initializing players.
Entity(int HP,int maxHP,int PP,int maxPP,int baseAtk,std::array<int,4>resistances,int speed,std::vector<Battle::Move*>moveSet,std::vector<Item*>items={},std::array<Item*,3>equipment={},int damageReduction=0,bool smart=false,bool dumb=false) Entity(int HP,int maxHP,int PP,int maxPP,int baseAtk,std::array<int,4>resistances,int speed,std::vector<Battle::Move*>moveSet,std::vector<Item*>items={},std::array<Item*,3>equipment={},int damageReduction=0,bool smart=false,bool dumb=false)
:Entity(nullptr,HP,maxHP,PP,maxPP,baseAtk,resistances,speed,moveSet,items,equipment,damageReduction,smart,dumb){ :Entity(nullptr,HP,maxHP,PP,maxPP,baseAtk,resistances,speed,moveSet,items,equipment,damageReduction,smart,dumb){

@ -1,3 +1,4 @@
#include "entity.h"
#include "item.h" #include "item.h"
#include "layers.h" #include "layers.h"
#include <string> #include <string>
@ -1387,19 +1388,23 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}break; }break;
case ItemAction::ATKINCREASE:{ case ItemAction::ATKINCREASE:{
target->baseAtk+=item->stats.atkIncrease; target->baseAtk+=item->stats.atkIncrease;
target->boosts[boost::ATK]+=item->stats.atkIncrease;
}break; }break;
case ItemAction::HPINCREASE:{ case ItemAction::HPINCREASE:{
target->maxHP+=item->stats.hpIncrease; target->maxHP+=item->stats.hpIncrease;
target->AddHP(item->stats.hpIncrease); target->AddHP(item->stats.hpIncrease);
vi2d box = {(128-32*PARTY_MEMBER_COUNT)+OVERWORLD_TARGET_SELECTION*64+29,170}; vi2d box = {(128-32*PARTY_MEMBER_COUNT)+OVERWORLD_TARGET_SELECTION*64+29,170};
DAMAGE_NUMBERS.push_back(new DamageNumber(-item->stats.hpIncrease,box+cameraPos)); DAMAGE_NUMBERS.push_back(new DamageNumber(-item->stats.hpIncrease,box+cameraPos));
target->boosts[boost::HP]+=item->stats.hpIncrease;
}break; }break;
case ItemAction::PPINCREASE:{ case ItemAction::PPINCREASE:{
target->maxPP+=item->stats.ppIncrease; target->maxPP+=item->stats.ppIncrease;
target->AddPP(item->stats.ppIncrease); target->AddPP(item->stats.ppIncrease);
target->boosts[boost::PP]+=item->stats.ppIncrease;
}break; }break;
case ItemAction::SPDINCREASE:{ case ItemAction::SPDINCREASE:{
target->speed+=item->stats.spdIncrease; target->speed+=item->stats.spdIncrease;
target->boosts[boost::SPD]+=item->stats.spdIncrease;
}break; }break;
case ItemAction::LEARNMOVE:{ case ItemAction::LEARNMOVE:{
bool moveLearned=false; bool moveLearned=false;
@ -1869,17 +1874,69 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
DrawStringPropDecal({72+GetTextSizeProp(defStr).x*0.85F,HEIGHT*(5.F/8)+12},std::to_string(newDefense),(newDefense>equipDefense)?GREEN:(newDefense<equipDefense)?RED:WHITE,{0.85,2}); DrawStringPropDecal({72+GetTextSizeProp(defStr).x*0.85F,HEIGHT*(5.F/8)+12},std::to_string(newDefense),(newDefense>equipDefense)?GREEN:(newDefense<equipDefense)?RED:WHITE,{0.85,2});
} }
if (GAME_STATE==GameState::OVERWORLD_STATUS_MENU) { if (GAME_STATE==GameState::OVERWORLD_STATUS_MENU) {
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_POWER_SELECTION_MEMBER]];
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({4,4},{(int)(WIDTH-8),(int)(HEIGHT/2)},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
int nameWidth=GetTextSizeProp(PARTY_MEMBER_OBJ[OVERWORLD_POWER_SELECTION_MEMBER]->name).x/2; int nameWidth=GetTextSizeProp(member->obj->name).x/2;
DrawStringPropDecal({(float)(WIDTH-12-nameWidth),4},PARTY_MEMBER_OBJ[OVERWORLD_POWER_SELECTION_MEMBER]->name,WHITE,{0.5,1}); DrawStringPropDecal({(float)(WIDTH-12-nameWidth),4},member->obj->name,WHITE,{0.5,1});
DrawRotatedDecal({(float)(WIDTH-nameWidth-16),7},SPRITES["cursor.png"],M_PI,{(float)SPRITES["cursor.png"]->sprite->width/2,(float)SPRITES["cursor.png"]->sprite->height/2},{(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F,(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F}); DrawRotatedDecal({(float)(WIDTH-nameWidth-16),7},SPRITES["cursor.png"],M_PI,{(float)SPRITES["cursor.png"]->sprite->width/2,(float)SPRITES["cursor.png"]->sprite->height/2},{(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F,(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F});
DrawRotatedDecal({(float)(WIDTH-8),7},SPRITES["cursor.png"],0,{(float)SPRITES["cursor.png"]->sprite->width/2,(float)SPRITES["cursor.png"]->sprite->height/2},{(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F,(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F}); DrawRotatedDecal({(float)(WIDTH-8),7},SPRITES["cursor.png"],0,{(float)SPRITES["cursor.png"]->sprite->width/2,(float)SPRITES["cursor.png"]->sprite->height/2},{(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F,(sinf(frameCount/10.F*M_PI)>0)?0.5F:0.25F});
vi2d drawPos={8,8}; vi2d drawPos={8,8};
DrawStringPropDecal(drawPos,PARTY_MEMBER_OBJ[OVERWORLD_POWER_SELECTION_MEMBER]->name); DrawStringPropDecal(drawPos,member->obj->name);
drawPos.y+=12; drawPos.y+=12;
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_POWER_SELECTION_MEMBER]]->GetPrimaryStatusEffect()!=Property::NONE) { Property statusEffect = member->GetPrimaryStatusEffect();
if (statusEffect!=Property::NONE) {
} DrawStringPropDecal(drawPos,BATTLE_PROPERTIES[statusEffect]->displayName);
}
drawPos.y+=24;
drawPos.x+=96;
std::string displayStr1 = "ATK Boosts: ";
std::string displayStr2 = "+"+std::to_string(member->boosts[boost::ATK]);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(drawPos.x+24-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "HP Boosts: ";
displayStr2 = "+"+std::to_string(member->boosts[boost::HP]);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(drawPos.x+24-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "PP Boosts: ";
displayStr2 = "+"+std::to_string(member->boosts[boost::PP]);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(drawPos.x+24-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "SPD Boosts: ";
displayStr2 = "+"+std::to_string(member->boosts[boost::SPD]);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(drawPos.x+24-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
drawPos={WIDTH-40,20};
int calculatedAtk=0;
int calculatedDef=0;
CalculateEquipmentStats(OVERWORLD_POWER_SELECTION_MEMBER,calculatedAtk,calculatedDef);
displayStr1 = "ATK: ";
displayStr2 = std::to_string(calculatedAtk);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(WIDTH-8-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "DEF: ";
displayStr2 = std::to_string(calculatedDef);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(WIDTH-8-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "HP: ";
displayStr2 = std::to_string(member->maxHP);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(WIDTH-8-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "PP: ";
displayStr2 = std::to_string(member->maxPP);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(WIDTH-8-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
drawPos.y+=12;
displayStr1 = "SPD: ";
displayStr2 = std::to_string(member->speed);
DrawStringPropDecal({(float)(drawPos.x-GetTextSizeProp(displayStr1).x),(float)drawPos.y},displayStr1);
DrawStringPropDecal({(float)(WIDTH-8-GetTextSizeProp(displayStr2).x),(float)drawPos.y},displayStr2);
} }
if (GAME_STATE==GameState::OVERWORLD_POWER_MENU||GAME_STATE==GameState::OVERWORLD_POWER_PLAYER_MENU||GAME_STATE==GameState::OVERWORLD_GRADE_MENU) { if (GAME_STATE==GameState::OVERWORLD_POWER_MENU||GAME_STATE==GameState::OVERWORLD_POWER_PLAYER_MENU||GAME_STATE==GameState::OVERWORLD_GRADE_MENU) {
DrawBattleMoveList(OVERWORLD_POWER_SELECTION_MEMBER); DrawBattleMoveList(OVERWORLD_POWER_SELECTION_MEMBER);
@ -2483,6 +2540,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
for (int i=0;i<7;i++) { for (int i=0;i<7;i++) {
PARTY_MEMBER_STATS[i]=new Entity(120,120,30,30,8,{0,0,0,0},8,{MOVELIST[BattleMoveName::TESTMOVE1]}); PARTY_MEMBER_STATS[i]=new Entity(120,120,30,30,8,{0,0,0,0},8,{MOVELIST[BattleMoveName::TESTMOVE1]});
} }
PARTY_MEMBER_STATS[PLAYER]->statusEffects[Property::MUSHROOMIZED]=4;
PARTY_MEMBER_STATS[PLAYER]->moveSet={ PARTY_MEMBER_STATS[PLAYER]->moveSet={
MOVELIST[BattleMoveName::HAILSTORM_A], MOVELIST[BattleMoveName::HAILSTORM_A],
MOVELIST[BattleMoveName::HAILSTORM_B], MOVELIST[BattleMoveName::HAILSTORM_B],
@ -2589,6 +2647,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
CreateSprite("crosshair.png"); CreateSprite("crosshair.png");
CreateSprite("arrow_connector.png"); CreateSprite("arrow_connector.png");
CreateSprite("pixel.png"); CreateSprite("pixel.png");
CreateSprite("bufficons.png");
} }
void SetupObjectInfo() { void SetupObjectInfo() {
@ -3411,17 +3470,21 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}break; }break;
case ItemAction::ATKINCREASE:{ case ItemAction::ATKINCREASE:{
target->baseAtk+=BATTLE_CUSTOM_ITEM->stats.atkIncrease; target->baseAtk+=BATTLE_CUSTOM_ITEM->stats.atkIncrease;
target->boosts[boost::ATK]+=BATTLE_CUSTOM_ITEM->stats.atkIncrease;
}break; }break;
case ItemAction::HPINCREASE:{ case ItemAction::HPINCREASE:{
target->maxHP+=BATTLE_CUSTOM_ITEM->stats.hpIncrease; target->maxHP+=BATTLE_CUSTOM_ITEM->stats.hpIncrease;
target->AddHP(BATTLE_CUSTOM_ITEM->stats.hpIncrease); target->AddHP(BATTLE_CUSTOM_ITEM->stats.hpIncrease);
target->boosts[boost::HP]+=BATTLE_CUSTOM_ITEM->stats.hpIncrease;
}break; }break;
case ItemAction::PPINCREASE:{ case ItemAction::PPINCREASE:{
target->maxPP+=BATTLE_CUSTOM_ITEM->stats.ppIncrease; target->maxPP+=BATTLE_CUSTOM_ITEM->stats.ppIncrease;
target->AddPP(BATTLE_CUSTOM_ITEM->stats.ppIncrease); target->AddPP(BATTLE_CUSTOM_ITEM->stats.ppIncrease);
target->boosts[boost::PP]+=BATTLE_CUSTOM_ITEM->stats.ppIncrease;
}break; }break;
case ItemAction::SPDINCREASE:{ case ItemAction::SPDINCREASE:{
target->speed+=BATTLE_CUSTOM_ITEM->stats.spdIncrease; target->speed+=BATTLE_CUSTOM_ITEM->stats.spdIncrease;
target->boosts[boost::SPD]+=BATTLE_CUSTOM_ITEM->stats.spdIncrease;
}break; }break;
case ItemAction::LEARNMOVE:{ case ItemAction::LEARNMOVE:{
bool moveLearned=false; bool moveLearned=false;
@ -4523,6 +4586,17 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
} }
} }
void CalculateEquipmentStats(int partyMemberSlot,int&atk,int&def) {
atk=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->baseAtk;
def=0;
for (int i=0;i<PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->equipment.size();i++) {
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->equipment[i]!=nullptr) {
atk+=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->equipment[i]->stats.attack;
def+=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->equipment[i]->stats.defense;
}
}
}
void CalculateChangeInEquipmentStats(int partyMemberSlot,int itemSlot,int&equipAttack,int&equipDefense,int&newAttack,int&newDefense) { void CalculateChangeInEquipmentStats(int partyMemberSlot,int itemSlot,int&equipAttack,int&equipDefense,int&newAttack,int&newDefense) {
EquipSlot::Equip slot; EquipSlot::Equip slot;
if (itemSlot==-1) { if (itemSlot==-1) {

2
sig

@ -3,7 +3,7 @@ export AUTO_UPDATE=true
source utils/define.sh source utils/define.sh
define PROJECT_NAME "C++ProjectTemplate" define PROJECT_NAME "C++ProjectTemplate"
define CUSTOM_PARAMS "-g -std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -lpulse -lpulse-simple" define CUSTOM_PARAMS "-std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -lpulse -lpulse-simple"
define LANGUAGE "C++" define LANGUAGE "C++"
source utils/main.sh source utils/main.sh

Loading…
Cancel
Save