generated from sigonasr2/CPlusPlusProjectTemplate
Special character in font now directly incorporated in DrawString function
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
4f4a30ff37
commit
603bdf8eb7
Binary file not shown.
BIN
assets/newFont.png
Normal file
BIN
assets/newFont.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
2
battle.h
2
battle.h
@ -83,7 +83,7 @@ namespace Battle{
|
|||||||
int channelTime=0; //The amount of frames to channel the spell.
|
int channelTime=0; //The amount of frames to channel the spell.
|
||||||
bool friendly=false; //Target allies instead.
|
bool friendly=false; //Target allies instead.
|
||||||
std::array<int,4>composition={0,0,0,0};
|
std::array<int,4>composition={0,0,0,0};
|
||||||
std::wstring attackMsg=L"$USER uses $POWER";
|
std::string attackMsg="$USER uses $POWER";
|
||||||
Effect*eff=nullptr;
|
Effect*eff=nullptr;
|
||||||
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.
|
||||||
|
11
defines.h
11
defines.h
@ -21,11 +21,11 @@ using namespace olc;
|
|||||||
#define ㅍ
|
#define ㅍ
|
||||||
#define 아
|
#define 아
|
||||||
|
|
||||||
#define α 0x391
|
#define α '`'
|
||||||
#define β 0x392
|
#define β '{'
|
||||||
#define γ 0x3b3
|
#define γ '\u007f'
|
||||||
#define Ω 0x3a3
|
#define Ω '|'
|
||||||
#define Σ 0x3a9
|
#define Σ '}'
|
||||||
|
|
||||||
#define AddAsyncCutsceneAction(AsyncClass) \
|
#define AddAsyncCutsceneAction(AsyncClass) \
|
||||||
if (!((AsyncClass*)CurrentCutscene->GetAction())->InQueue()) { \
|
if (!((AsyncClass*)CurrentCutscene->GetAction())->InQueue()) { \
|
||||||
@ -38,5 +38,4 @@ using namespace olc;
|
|||||||
|
|
||||||
extern PixelGameEngine*GAME;
|
extern PixelGameEngine*GAME;
|
||||||
extern vd2d cameraPos;
|
extern vd2d cameraPos;
|
||||||
template<typename T, typename F> inline T transform_to( F str ) noexcept{if (str.empty()) return {}; return { std::begin(str), std::end(str) };};
|
|
||||||
#endif
|
#endif
|
16
item.h
16
item.h
@ -67,7 +67,7 @@ struct ItemStatsStruct{
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct CustomItemMessage{
|
struct CustomItemMessage{
|
||||||
std::wstring s=L"";
|
std::string s="";
|
||||||
ItemAction a=ItemAction::HPRECOVERY;
|
ItemAction a=ItemAction::HPRECOVERY;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -81,13 +81,13 @@ class Item{
|
|||||||
std::vector<CustomItemMessage> messages;
|
std::vector<CustomItemMessage> messages;
|
||||||
Item(std::string name,std::string desc,int dropChance=8,ItemStatsStruct stats={hpRecovery:0,ppRecovery:0,atkIncrease:0,spdIncrease:0,hpIncrease:0,ppIncrease:0,learnAbility:nullptr,damage:0,rollDmg:0,attack:0,defense:0,equip:EquipSlot::NONE,important:false,consumable:Consumable::NOT_A_CONSUMABLE},Battle::Move*battlemove=nullptr)
|
Item(std::string name,std::string desc,int dropChance=8,ItemStatsStruct stats={hpRecovery:0,ppRecovery:0,atkIncrease:0,spdIncrease:0,hpIncrease:0,ppIncrease:0,learnAbility:nullptr,damage:0,rollDmg:0,attack:0,defense:0,equip:EquipSlot::NONE,important:false,consumable:Consumable::NOT_A_CONSUMABLE},Battle::Move*battlemove=nullptr)
|
||||||
:name(name),description(desc),stats(stats),dropChance(dropChance),battlemove(battlemove){
|
:name(name),description(desc),stats(stats),dropChance(dropChance),battlemove(battlemove){
|
||||||
if (stats.hpRecovery) {messages.push_back({L"$TARGET recovers "+std::to_wstring(stats.hpRecovery)+L" HP.",ItemAction::HPRECOVERY});}
|
if (stats.hpRecovery) {messages.push_back({"$TARGET recovers "+std::to_string(stats.hpRecovery)+" HP.",ItemAction::HPRECOVERY});}
|
||||||
if (stats.ppRecovery) {messages.push_back({L"$TARGET recovers "+std::to_wstring(stats.ppRecovery)+L" PP.",ItemAction::PPRECOVERY});}
|
if (stats.ppRecovery) {messages.push_back({"$TARGET recovers "+std::to_string(stats.ppRecovery)+" PP.",ItemAction::PPRECOVERY});}
|
||||||
if (stats.atkIncrease) {messages.push_back({L"$TARGET gains "+std::to_wstring(stats.atkIncrease)+L" ATK point"+(stats.atkIncrease==1?L"":L"s")+L".",ItemAction::ATKINCREASE});}
|
if (stats.atkIncrease) {messages.push_back({"$TARGET gains "+std::to_string(stats.atkIncrease)+" ATK point"+(stats.atkIncrease==1?"":"s")+".",ItemAction::ATKINCREASE});}
|
||||||
if (stats.hpIncrease) {messages.push_back({L"$TARGET gains "+std::to_wstring(stats.hpIncrease)+L" HP point"+(stats.hpIncrease==1?L"":L"s")+L".",ItemAction::HPINCREASE});}
|
if (stats.hpIncrease) {messages.push_back({"$TARGET gains "+std::to_string(stats.hpIncrease)+" HP point"+(stats.hpIncrease==1?"":"s")+".",ItemAction::HPINCREASE});}
|
||||||
if (stats.ppIncrease) {messages.push_back({L"$TARGET gains "+std::to_wstring(stats.ppIncrease)+L" PP point"+(stats.ppIncrease==1?L"":L"s")+L".",ItemAction::PPINCREASE});}
|
if (stats.ppIncrease) {messages.push_back({"$TARGET gains "+std::to_string(stats.ppIncrease)+" PP point"+(stats.ppIncrease==1?"":"s")+".",ItemAction::PPINCREASE});}
|
||||||
if (stats.spdIncrease) {messages.push_back({L"$TARGET gains "+std::to_wstring(stats.spdIncrease)+L" SPD point"+(stats.spdIncrease==1?L"":L"s")+L".",ItemAction::SPDINCREASE});}
|
if (stats.spdIncrease) {messages.push_back({"$TARGET gains "+std::to_string(stats.spdIncrease)+" SPD point"+(stats.spdIncrease==1?"":"s")+".",ItemAction::SPDINCREASE});}
|
||||||
if (stats.learnAbility!=nullptr) {messages.push_back({L"$TARGET gains the ability to use "+transform_to<std::wstring>(stats.learnAbility->name)+L" "+((stats.learnAbility->grade!=0)?std::wstring(1,stats.learnAbility->grade):L"")+L"!",ItemAction::LEARNMOVE});}
|
if (stats.learnAbility!=nullptr) {messages.push_back({"$TARGET gains the ability to use "+stats.learnAbility->name+" "+((stats.learnAbility->grade!=0)?std::string(1,stats.learnAbility->grade):"")+"!",ItemAction::LEARNMOVE});}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
323
main.cpp
323
main.cpp
@ -141,13 +141,13 @@ public:
|
|||||||
int BATTLE_ROLLING_COUNTER_WAITTIME = 0; //Number of frames to wait for each rolling counter.
|
int BATTLE_ROLLING_COUNTER_WAITTIME = 0; //Number of frames to wait for each rolling counter.
|
||||||
int BATTLE_HIT_SCREENSHAKE = 0; //Amount of time the screen will rapidly shake as getting hit.
|
int BATTLE_HIT_SCREENSHAKE = 0; //Amount of time the screen will rapidly shake as getting hit.
|
||||||
bool ITEM_REQUIRES_EQUIPPING=false;
|
bool ITEM_REQUIRES_EQUIPPING=false;
|
||||||
std::wstring EQUIP_$ITEM_DISPLAY=L" "; //Use this to change the $ITEM tag modifier for abilities.
|
std::string EQUIP_$ITEM_DISPLAY=" "; //Use this to change the $ITEM tag modifier for abilities.
|
||||||
std::vector<CustomItemMessage> BATTLE_CUSTOM_MSGS; //Used for displaying additional information during battles.
|
std::vector<CustomItemMessage> BATTLE_CUSTOM_MSGS; //Used for displaying additional information during battles.
|
||||||
CustomItemMessage BATTLE_CURRENT_CUSTOM_MSG;
|
CustomItemMessage BATTLE_CURRENT_CUSTOM_MSG;
|
||||||
int BATTLE_CUSTOM_MESSAGE_WAIT_TIME=0;
|
int BATTLE_CUSTOM_MESSAGE_WAIT_TIME=0;
|
||||||
Item*BATTLE_CUSTOM_ITEM;
|
Item*BATTLE_CUSTOM_ITEM;
|
||||||
std::vector<Item*> BATTLE_SPOILS_LIST;
|
std::vector<Item*> BATTLE_SPOILS_LIST;
|
||||||
std::wstring BATTLE_SPOILS_MESSAGE;
|
std::string BATTLE_SPOILS_MESSAGE;
|
||||||
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.
|
||||||
@ -156,6 +156,8 @@ public:
|
|||||||
int OVERWORLD_POWER_SELECTION_OFFSET[4]={0,0,0,0};
|
int OVERWORLD_POWER_SELECTION_OFFSET[4]={0,0,0,0};
|
||||||
int OVERWORLD_GRADE_SELECTION_OFFSET=0;
|
int OVERWORLD_GRADE_SELECTION_OFFSET=0;
|
||||||
int OVERWORLD_POWER_SELECTION_MEMBER=0;
|
int OVERWORLD_POWER_SELECTION_MEMBER=0;
|
||||||
|
Battle::Move*OVERWORLD_SELECTED_POWER;
|
||||||
|
int OVERWORLD_TARGET_SELECTION=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.
|
||||||
|
|
||||||
@ -723,28 +725,32 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
if (DownPressed()||UpPressed()||LeftPressed()&&POWER_GRADE_CURSOR[-CURRENT_TURN-1]==0) {
|
if (DownPressed()||UpPressed()||LeftPressed()&&POWER_GRADE_CURSOR[-CURRENT_TURN-1]==0) {
|
||||||
if (UpPressed()) {
|
if (UpPressed()) {
|
||||||
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]==0) {
|
if (BATTLE_MOVELIST_DISPLAY.size()>1) {
|
||||||
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=(int)BATTLE_MOVELIST_DISPLAY.size()-1;
|
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]==0) {
|
||||||
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_GRADE_CURSOR[-CURRENT_TURN-1],0,(int)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]].size()-1);
|
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=(int)BATTLE_MOVELIST_DISPLAY.size()-1;
|
||||||
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]=std::clamp(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-3,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_GRADE_CURSOR[-CURRENT_TURN-1],0,(int)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]].size()-1);
|
||||||
} else {
|
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]=std::clamp(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-3,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
} else {
|
||||||
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_GRADE_CURSOR[-CURRENT_TURN-1],0,(int)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]].size()-1);
|
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]<POWER_SELECTION_OFFSET[-CURRENT_TURN-1]) {
|
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_GRADE_CURSOR[-CURRENT_TURN-1],0,(int)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]].size()-1);
|
||||||
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]--;
|
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]<POWER_SELECTION_OFFSET[-CURRENT_TURN-1]) {
|
||||||
|
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
if (DownPressed()) {
|
if (DownPressed()) {
|
||||||
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]==(int)BATTLE_MOVELIST_DISPLAY.size()-1) {
|
if (BATTLE_MOVELIST_DISPLAY.size()>1) {
|
||||||
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=0;
|
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]==(int)BATTLE_MOVELIST_DISPLAY.size()-1) {
|
||||||
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=0;
|
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=0;
|
||||||
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]=0;
|
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=0;
|
||||||
} else {
|
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]=0;
|
||||||
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]+1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
} else {
|
||||||
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_GRADE_CURSOR[-CURRENT_TURN-1],0,(int)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]].size()-1);
|
POWER_SELECTION_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_SELECTION_CURSOR[-CURRENT_TURN-1]+1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-POWER_SELECTION_OFFSET[-CURRENT_TURN-1]>=4) {
|
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=std::clamp(POWER_GRADE_CURSOR[-CURRENT_TURN-1],0,(int)BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]].size()-1);
|
||||||
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]++;
|
if (POWER_SELECTION_CURSOR[-CURRENT_TURN-1]-POWER_SELECTION_OFFSET[-CURRENT_TURN-1]>=4) {
|
||||||
|
POWER_SELECTION_OFFSET[-CURRENT_TURN-1]++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -949,7 +955,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
HandleInventoryNavigation();
|
HandleInventoryNavigation();
|
||||||
}
|
}
|
||||||
if (ACTIONKEYPRESSED) {
|
if (ACTIONKEYPRESSED) {
|
||||||
EQUIP_$ITEM_DISPLAY=transform_to<std::wstring>(PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->name);
|
EQUIP_$ITEM_DISPLAY=PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->name;
|
||||||
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.equip==EquipSlot::WEAPON) {
|
if (PARTY_INVENTORY[ITEM_SELECTION_CURSOR]->stats.equip==EquipSlot::WEAPON) {
|
||||||
ITEM_REQUIRES_EQUIPPING=true;
|
ITEM_REQUIRES_EQUIPPING=true;
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=MOVELIST[BattleMoveName::BASH_CHANGE];
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=MOVELIST[BattleMoveName::BASH_CHANGE];
|
||||||
@ -1055,7 +1061,11 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
case 1:{//Power is selected.
|
case 1:{//Power is selected.
|
||||||
OVERWORLD_POWER_SELECTION_MEMBER=0;
|
OVERWORLD_POWER_SELECTION_MEMBER=0;
|
||||||
PopulateBattleMoveList(OVERWORLD_POWER_SELECTION_MEMBER,true);
|
PopulateBattleMoveList(OVERWORLD_POWER_SELECTION_MEMBER,true);
|
||||||
GAME_STATE=GameState::OVERWORLD_POWER_PLAYER_MENU;
|
if (PARTY_MEMBER_COUNT==1) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_POWER_MENU;
|
||||||
|
} else {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_POWER_PLAYER_MENU;
|
||||||
|
}
|
||||||
}break;
|
}break;
|
||||||
case 2:{//Items is selected.
|
case 2:{//Items is selected.
|
||||||
|
|
||||||
@ -1081,6 +1091,98 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
OVERWORLD_POWER_SELECTION_MEMBER=(OVERWORLD_POWER_SELECTION_MEMBER+1)%PARTY_MEMBER_COUNT;
|
OVERWORLD_POWER_SELECTION_MEMBER=(OVERWORLD_POWER_SELECTION_MEMBER+1)%PARTY_MEMBER_COUNT;
|
||||||
PopulateBattleMoveList(OVERWORLD_POWER_SELECTION_MEMBER,true);
|
PopulateBattleMoveList(OVERWORLD_POWER_SELECTION_MEMBER,true);
|
||||||
}
|
}
|
||||||
|
if (UpPressed()) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_MENU;
|
||||||
|
}
|
||||||
|
if (ACTIONKEYPRESSED) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_POWER_MENU;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case GameState::OVERWORLD_POWER_MENU:{
|
||||||
|
if (CURRENT_TURN<0) {
|
||||||
|
if (DownPressed()) {
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]==(int)BATTLE_MOVELIST_DISPLAY.size()-1) {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=0;
|
||||||
|
OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]=0;
|
||||||
|
} else {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=std::clamp(OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]+1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]-OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]>=4) {
|
||||||
|
OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (UpPressed()) {
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]==0) {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=(int)BATTLE_MOVELIST_DISPLAY.size()-1;
|
||||||
|
OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]=std::clamp(OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]-3,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
|
} else {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=std::clamp(OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]-1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]<OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]) {
|
||||||
|
OVERWORLD_POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (LeftPressed()) {
|
||||||
|
if (PARTY_MEMBER_COUNT==1) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_MENU;
|
||||||
|
} else {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_POWER_PLAYER_MENU;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ACTIONKEYPRESSED||RightPressed()) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_GRADE_MENU;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case GameState::OVERWORLD_GRADE_MENU:{
|
||||||
|
if (CURRENT_TURN<0) {
|
||||||
|
if (RightPressed()) {
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=(OVERWORLD_POWER_GRADE_CURSOR+1)%BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]].size();
|
||||||
|
}
|
||||||
|
if (DownPressed()||UpPressed()||LeftPressed()&&OVERWORLD_POWER_GRADE_CURSOR==0) {
|
||||||
|
if (UpPressed()) {
|
||||||
|
if (BATTLE_MOVELIST_DISPLAY.size()>1) {
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]==0) {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=(int)BATTLE_MOVELIST_DISPLAY.size()-1;
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=std::clamp(OVERWORLD_POWER_GRADE_CURSOR,0,(int)BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]].size()-1);
|
||||||
|
POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]=std::clamp(OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]-3,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
|
} else {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=std::clamp(OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]-1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=std::clamp(OVERWORLD_POWER_GRADE_CURSOR,0,(int)BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]].size()-1);
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]<POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]) {
|
||||||
|
POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (DownPressed()) {
|
||||||
|
if (BATTLE_MOVELIST_DISPLAY.size()>1) {
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]==(int)BATTLE_MOVELIST_DISPLAY.size()-1) {
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=0;
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=0;
|
||||||
|
POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]=0;
|
||||||
|
} else {
|
||||||
|
OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]=std::clamp(OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]+1,0,(int)BATTLE_MOVELIST_DISPLAY.size()-1);
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=std::clamp(OVERWORLD_POWER_GRADE_CURSOR,0,(int)BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]].size()-1);
|
||||||
|
if (OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]-POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]>=4) {
|
||||||
|
POWER_SELECTION_OFFSET[OVERWORLD_POWER_SELECTION_MEMBER]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=0;
|
||||||
|
GAME_STATE=GameState::OVERWORLD_POWER_MENU;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (LeftPressed()) {
|
||||||
|
OVERWORLD_POWER_GRADE_CURSOR=std::clamp(OVERWORLD_POWER_GRADE_CURSOR-1,0,(int)(BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]].size())-1);
|
||||||
|
}
|
||||||
|
if (ACTIONKEYPRESSED) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[OVERWORLD_POWER_SELECTION_MEMBER]]->GetPP()>=BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]][OVERWORLD_POWER_GRADE_CURSOR]->PPCost) {
|
||||||
|
PerformOverworldMove(BATTLE_MOVELIST_DISPLAY[OVERWORLD_POWER_SELECTION_CURSOR[OVERWORLD_POWER_SELECTION_MEMBER]][OVERWORLD_POWER_GRADE_CURSOR],OVERWORLD_POWER_SELECTION_MEMBER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}break;
|
}break;
|
||||||
case GameState::EDITOR:{
|
case GameState::EDITOR:{
|
||||||
if (IsTextEntryEnabled()) {
|
if (IsTextEntryEnabled()) {
|
||||||
@ -1178,6 +1280,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
|
|
||||||
void drawGame(){
|
void drawGame(){
|
||||||
|
SetDrawTarget(layer::DYNAMIC);
|
||||||
for (auto&obj:OBJECTS) {
|
for (auto&obj:OBJECTS) {
|
||||||
obj->drawn=false;
|
obj->drawn=false;
|
||||||
}
|
}
|
||||||
@ -1209,7 +1312,8 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
case GameState::OVERWORLD_EQUIP_ITEM_MENU:
|
case GameState::OVERWORLD_EQUIP_ITEM_MENU:
|
||||||
case GameState::OVERWORLD_EQUIP_MENU:
|
case GameState::OVERWORLD_EQUIP_MENU:
|
||||||
case GameState::OVERWORLD_EQUIP_PLAYER_MENU:
|
case GameState::OVERWORLD_EQUIP_PLAYER_MENU:
|
||||||
case GameState::OVERWORLD_STATUS_MENU:{
|
case GameState::OVERWORLD_STATUS_MENU:
|
||||||
|
case GameState::OVERWORLD_TARGET_MENU:{
|
||||||
DrawGameWorld();
|
DrawGameWorld();
|
||||||
if (GAME_STATE!=GameState::GAME_WORLD) {
|
if (GAME_STATE!=GameState::GAME_WORLD) {
|
||||||
SetDrawTarget(layer::INTERFACE);
|
SetDrawTarget(layer::INTERFACE);
|
||||||
@ -1330,6 +1434,24 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
if (BATTLE_ENCOUNTER!=nullptr&&BATTLE_STATE==BattleState::TARGET_SELECT||GAME_STATE==GameState::OVERWORLD_TARGET_MENU) {
|
||||||
|
SetDrawTarget(layer::GROUND);
|
||||||
|
if (SELECTED_TARGET<0||GAME_STATE==GameState::OVERWORLD_TARGET_MENU) {
|
||||||
|
int memberIndex = GAME_STATE==GameState::OVERWORLD_TARGET_MENU?OVERWORLD_TARGET_SELECTION:-SELECTED_TARGET-1;
|
||||||
|
Battle::Move*selectedMove=GameState::OVERWORLD_TARGET_MENU?OVERWORLD_SELECTED_POWER:PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove;
|
||||||
|
vd2d scale = {PARTY_MEMBER_OBJ[memberIndex]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,PARTY_MEMBER_OBJ[memberIndex]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height};
|
||||||
|
vi2d size = {SPRITES["targetCircle.png"]->sprite->width,SPRITES["targetCircle.png"]->sprite->height};
|
||||||
|
DrawDecal(PARTY_MEMBER_OBJ[memberIndex]->GetPosWithOrigin()-cameraPos-size/2*scale,SPRITES["targetCircle.png"],{static_cast<float>(PARTY_MEMBER_OBJ[memberIndex]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width),static_cast<float>(PARTY_MEMBER_OBJ[memberIndex]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height)},GREEN);
|
||||||
|
if (BATTLE_STATE==BattleState::TARGET_SELECT) {
|
||||||
|
DrawTargetRangeGrid(PARTY_MEMBER_OBJ[memberIndex]->GetPosWithOrigin(),selectedMove->range);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vd2d scale = {BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height};
|
||||||
|
vi2d size = {SPRITES["targetCircle.png"]->sprite->width,SPRITES["targetCircle.png"]->sprite->height};
|
||||||
|
DrawDecal(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPosWithOrigin()-cameraPos-size/2*scale,SPRITES["targetCircle.png"],scale,YELLOW);
|
||||||
|
DrawTargetRangeGrid(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPosWithOrigin(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->range);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (BATTLE_ENCOUNTER!=nullptr) {
|
if (BATTLE_ENCOUNTER!=nullptr) {
|
||||||
SetDrawTarget(layer::HIGH);
|
SetDrawTarget(layer::HIGH);
|
||||||
if (BATTLE_STATE==BattleState::SELECT_ACTION||BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT||BATTLE_STATE==BattleState::ITEM_SELECT) {
|
if (BATTLE_STATE==BattleState::SELECT_ACTION||BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT||BATTLE_STATE==BattleState::ITEM_SELECT) {
|
||||||
@ -1344,27 +1466,13 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
if (BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT) {
|
if (BATTLE_STATE==BattleState::POWER_SELECT||BATTLE_STATE==BattleState::GRADE_SELECT) {
|
||||||
DrawBattleMoveList(-CURRENT_TURN-1);
|
DrawBattleMoveList(-CURRENT_TURN-1);
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE==BattleState::TARGET_SELECT) {
|
|
||||||
SetDrawTarget(layer::GROUND);
|
|
||||||
if (SELECTED_TARGET<0) {
|
|
||||||
vd2d scale = {PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height};
|
|
||||||
vi2d size = {SPRITES["targetCircle.png"]->sprite->width,SPRITES["targetCircle.png"]->sprite->height};
|
|
||||||
DrawDecal(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->GetPosWithOrigin()-cameraPos-size/2*scale,SPRITES["targetCircle.png"],{static_cast<float>(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width),static_cast<float>(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height)},GREEN);
|
|
||||||
DrawTargetRangeGrid(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->GetPosWithOrigin(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->range);
|
|
||||||
} else {
|
|
||||||
vd2d scale = {BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height};
|
|
||||||
vi2d size = {SPRITES["targetCircle.png"]->sprite->width,SPRITES["targetCircle.png"]->sprite->height};
|
|
||||||
DrawDecal(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPosWithOrigin()-cameraPos-size/2*scale,SPRITES["targetCircle.png"],scale,YELLOW);
|
|
||||||
DrawTargetRangeGrid(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPosWithOrigin(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->range);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (BATTLE_STATE==BattleState::WAIT_ANIMATION) {
|
if (BATTLE_STATE==BattleState::WAIT_ANIMATION) {
|
||||||
SetDrawTarget(layer::INTERFACE);
|
SetDrawTarget(layer::INTERFACE);
|
||||||
vd2d text={2,2};
|
vd2d text={2,2};
|
||||||
vd2d shadowOffset={1,1};
|
vd2d shadowOffset={1,1};
|
||||||
std::wstring label;
|
std::string label;
|
||||||
if (BATTLE_CURRENT_CUSTOM_MSG.s.length()>0) {
|
if (BATTLE_CURRENT_CUSTOM_MSG.s.length()>0) {
|
||||||
std::wstring baseStr = transform_to<std::wstring>(BATTLE_CURRENT_CUSTOM_MSG.s);
|
std::string baseStr = BATTLE_CURRENT_CUSTOM_MSG.s;
|
||||||
if (CURRENT_TURN<0) {
|
if (CURRENT_TURN<0) {
|
||||||
label=ParseBattleMessage(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]],baseStr);
|
label=ParseBattleMessage(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]],baseStr);
|
||||||
} else {
|
} else {
|
||||||
@ -1372,22 +1480,22 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (CURRENT_TURN<0) {
|
if (CURRENT_TURN<0) {
|
||||||
std::wstring baseStr = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->attackMsg;
|
std::string baseStr = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->attackMsg;
|
||||||
label=ParseBattleMessage(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]],baseStr);
|
label=ParseBattleMessage(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]],baseStr);
|
||||||
} else {
|
} else {
|
||||||
std::wstring baseStr = BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->attackMsg;
|
std::string baseStr = BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->attackMsg;
|
||||||
label=ParseBattleMessage(BATTLE_ENCOUNTER->objs[CURRENT_TURN],baseStr);
|
label=ParseBattleMessage(BATTLE_ENCOUNTER->objs[CURRENT_TURN],baseStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawFancyStringDecal(text+shadowOffset,Wrap(label,ScreenWidth()-2,false,{1,2}),BLACK,{1,2});
|
DrawStringDecal(text+shadowOffset,Wrap(label,ScreenWidth()-2,false,{1,2}),BLACK,{1,2});
|
||||||
DrawFancyStringDecal(text,Wrap(label,ScreenWidth()-2,false,{1,2}),WHITE,{1,2});
|
DrawStringDecal(text,Wrap(label,ScreenWidth()-2,false,{1,2}),WHITE,{1,2});
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE==BattleState::ENEMY_SPOILS) {
|
if (BATTLE_STATE==BattleState::ENEMY_SPOILS) {
|
||||||
SetDrawTarget(layer::INTERFACE);
|
SetDrawTarget(layer::INTERFACE);
|
||||||
vd2d text={2,2};
|
vd2d text={2,2};
|
||||||
vd2d shadowOffset={1,1};
|
vd2d shadowOffset={1,1};
|
||||||
DrawFancyStringDecal(text+shadowOffset,Wrap(BATTLE_SPOILS_MESSAGE,ScreenWidth()-2,false,{1,2}),BLACK,{1,2});
|
DrawStringDecal(text+shadowOffset,Wrap(BATTLE_SPOILS_MESSAGE,ScreenWidth()-2,false,{1,2}),BLACK,{1,2});
|
||||||
DrawFancyStringDecal(text,Wrap(BATTLE_SPOILS_MESSAGE,ScreenWidth()-2,false,{1,2}),WHITE,{1,2});
|
DrawStringDecal(text,Wrap(BATTLE_SPOILS_MESSAGE,ScreenWidth()-2,false,{1,2}),WHITE,{1,2});
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE!=BattleState::MOVE_CAMERA&&BATTLE_STATE!=BattleState::MOVE_CAMERA_BACK) {
|
if (BATTLE_STATE!=BattleState::MOVE_CAMERA&&BATTLE_STATE!=BattleState::MOVE_CAMERA_BACK) {
|
||||||
SetDrawTarget(layer::INTERFACE);
|
SetDrawTarget(layer::INTERFACE);
|
||||||
@ -1438,15 +1546,15 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
DrawDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_front.png"]);
|
DrawDecal({(float)(box.x+4),(float)(box.y+5+8+2)},SPRITES["atbbar_front.png"]);
|
||||||
if (member->selectedMove!=nullptr) {
|
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<float>(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},GREEN*0.7);
|
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<float>(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},GREEN*0.7);
|
||||||
std::wstring label=transform_to<std::wstring>(member->selectedMove->name);
|
std::string label=member->selectedMove->name;
|
||||||
label+=L" ";
|
label+=" ";
|
||||||
if (member->selectedMove->grade!=0) {
|
if (member->selectedMove->grade!=0) {
|
||||||
label+=member->selectedMove->grade;
|
label+=member->selectedMove->grade;
|
||||||
}
|
}
|
||||||
vd2d textOffset=GetTextSize(transform_to<std::string>(label))*0.6;
|
vd2d textOffset=GetTextSize(label)*0.6;
|
||||||
textOffset.y+=10;
|
textOffset.y+=10;
|
||||||
vd2d barPos = {(float)(box.x+4),(float)(box.y+5+8+2)};
|
vd2d barPos = {(float)(box.x+4),(float)(box.y+5+8+2)};
|
||||||
DrawFancyStringDecal(barPos-textOffset/2,label,BLACK,{std::min((float)54/GetTextSize(transform_to<std::string>(label)).x,(float)1),0.6});
|
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};
|
const vi2d hpTextPos = {box.x+5,box.y+25};
|
||||||
for (int x=-1;x<=1;x++) {
|
for (int x=-1;x<=1;x++) {
|
||||||
@ -1475,16 +1583,16 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
vi2d barOffset={-SPRITES["atbbar_front.png"]->sprite->width/2,8};
|
vi2d barOffset={-SPRITES["atbbar_front.png"]->sprite->width/2,8};
|
||||||
DrawPartialDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_back.png"],{0,0},{(1-((float)obj->channelTimeRemaining/obj->selectedMove->channelTime))*SPRITES["atbbar_back.png"]->sprite->width,static_cast<float>(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},YELLOW*0.8);
|
DrawPartialDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_back.png"],{0,0},{(1-((float)obj->channelTimeRemaining/obj->selectedMove->channelTime))*SPRITES["atbbar_back.png"]->sprite->width,static_cast<float>(SPRITES["atbbar_back.png"]->sprite->height)},{1,1},YELLOW*0.8);
|
||||||
DrawDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_front.png"]);
|
DrawDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_front.png"]);
|
||||||
std::wstring label=transform_to<std::wstring>(obj->selectedMove->name);
|
std::string label=obj->selectedMove->name;
|
||||||
if (obj->selectedMove->grade!=0) {
|
if (obj->selectedMove->grade!=0) {
|
||||||
label+=L" ";
|
label+=" ";
|
||||||
label+=obj->selectedMove->grade;
|
label+=obj->selectedMove->grade;
|
||||||
}
|
}
|
||||||
vd2d textOffset=GetTextSize(transform_to<std::string>(label))*0.6;
|
vd2d textOffset=GetTextSize(label)*0.6;
|
||||||
textOffset.y-=6;
|
textOffset.y-=6;
|
||||||
vi2d shadowOffset = {1,1};
|
vi2d shadowOffset = {1,1};
|
||||||
DrawFancyStringDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset-textOffset/2+shadowOffset,label,BLACK,{0.6,0.6});
|
DrawStringDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset-textOffset/2+shadowOffset,label,BLACK,{0.6,0.6});
|
||||||
DrawFancyStringDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset-textOffset/2,label,WHITE,{0.6,0.6});
|
DrawStringDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset-textOffset/2,label,WHITE,{0.6,0.6});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1614,25 +1722,6 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawFancyStringDecal(const olc::vf2d& pos, const std::wstring& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }) {
|
|
||||||
vf2d newpos=pos;
|
|
||||||
for (int i=0;i<sText.length();i++) {
|
|
||||||
if (sText[i]>=128) {
|
|
||||||
DrawPartialDecal(newpos,SPRITES["additionalFont.png"],additionalChars[sText[i]],{8,8},scale,col);
|
|
||||||
newpos.x+=8*scale.x;
|
|
||||||
} else
|
|
||||||
if (sText[i]!='\n') {
|
|
||||||
DrawStringDecal(newpos,std::string(1,sText[i]),col,scale);
|
|
||||||
newpos.x+=8*scale.x;
|
|
||||||
} else
|
|
||||||
if (sText[i]=='\n') {
|
|
||||||
DrawStringDecal(newpos,std::string(1,sText[i]),col,scale);
|
|
||||||
newpos.x=pos.x;
|
|
||||||
newpos.y+=8*scale.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadMap(Map*map) {
|
void LoadMap(Map*map) {
|
||||||
std::ifstream f("assets/maps/"+map->filename,std::ios::binary);
|
std::ifstream f("assets/maps/"+map->filename,std::ios::binary);
|
||||||
std::ifstream f2("assets/maps/"+map->l2filename,std::ios::binary);
|
std::ifstream f2("assets/maps/"+map->l2filename,std::ios::binary);
|
||||||
@ -1925,11 +2014,11 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
MOVELIST[BattleMoveName::TESTMOVE2]=new Battle::Move{"Test Move 2","An attack",baseDmg:40,randomDmg:10,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0}};
|
MOVELIST[BattleMoveName::TESTMOVE2]=new Battle::Move{"Test Move 2","An attack",baseDmg:40,randomDmg:10,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0}};
|
||||||
MOVELIST[BattleMoveName::TESTMOVE3]=new Battle::Move{"Test Move 3","An attack",baseDmg:25,randomDmg:5,PPCost:0,range:3,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::TESTMOVE3]=new Battle::Move{"Test Move 3","An attack",baseDmg:25,randomDmg:5,PPCost:0,range:3,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::BASH]=new Battle::Move{"Bash","Regular attack.",baseDmg:5,randomDmg:5,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0}};
|
MOVELIST[BattleMoveName::BASH]=new Battle::Move{"Bash","Regular attack.",baseDmg:5,randomDmg:5,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0}};
|
||||||
MOVELIST[BattleMoveName::BASH_CHANGE]=new Battle::Move{MOVELIST[BattleMoveName::BASH]->name,"Regular attack.",baseDmg:MOVELIST[BattleMoveName::BASH]->baseDmg,randomDmg:MOVELIST[BattleMoveName::BASH]->randomDmg,PPCost:MOVELIST[BattleMoveName::BASH]->PPCost,range:MOVELIST[BattleMoveName::BASH]->range,composition:MOVELIST[BattleMoveName::BASH]->composition,attackMsg:L"$USER equipped the $ITEM instead and attacks.",eff:MOVELIST[BattleMoveName::BASH]->eff,pctDamage:MOVELIST[BattleMoveName::BASH]->pctDamage,properties:MOVELIST[BattleMoveName::BASH]->properties};
|
MOVELIST[BattleMoveName::BASH_CHANGE]=new Battle::Move{MOVELIST[BattleMoveName::BASH]->name,"Regular attack.",baseDmg:MOVELIST[BattleMoveName::BASH]->baseDmg,randomDmg:MOVELIST[BattleMoveName::BASH]->randomDmg,PPCost:MOVELIST[BattleMoveName::BASH]->PPCost,range:MOVELIST[BattleMoveName::BASH]->range,composition:MOVELIST[BattleMoveName::BASH]->composition,attackMsg:"$USER equipped the $ITEM instead and attacks.",eff:MOVELIST[BattleMoveName::BASH]->eff,pctDamage:MOVELIST[BattleMoveName::BASH]->pctDamage,properties:MOVELIST[BattleMoveName::BASH]->properties};
|
||||||
MOVELIST[BattleMoveName::DEFEND]=new Battle::Move{"Defend","Defend.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:5*60,friendly:true,{0,0,0,0}};
|
MOVELIST[BattleMoveName::DEFEND]=new Battle::Move{"Defend","Defend.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:5*60,friendly:true,{0,0,0,0}};
|
||||||
MOVELIST[BattleMoveName::EQUIP_ARMOR]=new Battle::Move{"Equip Armor","Equip Armor.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:0,friendly:true,composition:{0,0,0,0},L"$USER equips the $ITEM"};
|
MOVELIST[BattleMoveName::EQUIP_ARMOR]=new Battle::Move{"Equip Armor","Equip Armor.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:0,friendly:true,composition:{0,0,0,0},"$USER equips the $ITEM"};
|
||||||
MOVELIST[BattleMoveName::CONSUMABLE]=new Battle::Move{"Consumable","Consumes an item.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:0,friendly:true,composition:{0,0,0,0},L"$USER uses $ITEM on $TARGET"};
|
MOVELIST[BattleMoveName::CONSUMABLE]=new Battle::Move{"Consumable","Consumes an item.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:0,friendly:true,composition:{0,0,0,0},"$USER uses $ITEM on $TARGET"};
|
||||||
MOVELIST[BattleMoveName::CONSUMABLE_ENEMY]=new Battle::Move{"Consumable","Consumes an item.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0},L"$USER uses $ITEM on $TARGET"};
|
MOVELIST[BattleMoveName::CONSUMABLE_ENEMY]=new Battle::Move{"Consumable","Consumes an item.",baseDmg:0,randomDmg:0,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0},"$USER uses $ITEM on $TARGET"};
|
||||||
MOVELIST[BattleMoveName::HAILSTORM_A]=new Battle::Move{"Hailstorm","Causes heavy ice rocks to crash",ALPHA,baseDmg:40,randomDmg:20,PPCost:4,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::HAILSTORM_A]=new Battle::Move{"Hailstorm","Causes heavy ice rocks to crash",ALPHA,baseDmg:40,randomDmg:20,PPCost:4,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::HAILSTORM_B]=new Battle::Move{"Hailstorm","Causes heavy ice rocks to crash",BETA,baseDmg:80,randomDmg:20,PPCost:12,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::HAILSTORM_B]=new Battle::Move{"Hailstorm","Causes heavy ice rocks to crash",BETA,baseDmg:80,randomDmg:20,PPCost:12,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::HAILSTORM_G]=new Battle::Move{"Hailstorm","Causes heavy ice rocks to crash",GAMMA,baseDmg:120,randomDmg:20,PPCost:28,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::HAILSTORM_G]=new Battle::Move{"Hailstorm","Causes heavy ice rocks to crash",GAMMA,baseDmg:120,randomDmg:20,PPCost:28,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
@ -1954,15 +2043,15 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
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_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},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},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},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},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},"$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},"$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},"$USER uses $POWER",FOUNTAIN_EFFECT};
|
||||||
MOVELIST[BattleMoveName::PKFUN_O]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",OMEGA,baseDmg:590,randomDmg:100,PPCost:90,range:8,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FOUNTAIN_EFFECT};
|
MOVELIST[BattleMoveName::PKFUN_O]=new Battle::Move{"PK Fun","A very fun barrage. Hits for large damage.",OMEGA,baseDmg:590,randomDmg:100,PPCost:90,range:8,channelTime:0,friendly:false,composition:{0,0,20,0},"$USER uses $POWER",FOUNTAIN_EFFECT};
|
||||||
MOVELIST[BattleMoveName::PKFIRE_A]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",ALPHA,baseDmg:60,randomDmg:20,PPCost:6,range:3,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKFIRE_A]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",ALPHA,baseDmg:60,randomDmg:20,PPCost:6,range:3,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::PKFIRE_B]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",BETA,baseDmg:120,randomDmg:40,PPCost:12,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKFIRE_B]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",BETA,baseDmg:120,randomDmg:40,PPCost:12,range:4,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::PKFIRE_G]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",GAMMA,baseDmg:190,randomDmg:50,PPCost:20,range:5,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
MOVELIST[BattleMoveName::PKFIRE_G]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",GAMMA,baseDmg:190,randomDmg:50,PPCost:20,range:5,channelTime:0,friendly:false,composition:{0,0,20,0}};
|
||||||
MOVELIST[BattleMoveName::PKFIRE_O]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",OMEGA,baseDmg:360,randomDmg:100,PPCost:32,range:7,channelTime:0,friendly:false,composition:{0,0,20,0},L"$USER uses $POWER",FIREFOUNTAIN_EFFECT};
|
MOVELIST[BattleMoveName::PKFIRE_O]=new Battle::Move{"PK Fire","Causes extreme heat to burn foes and scorch trees",OMEGA,baseDmg:360,randomDmg:100,PPCost:32,range:7,channelTime:0,friendly:false,composition:{0,0,20,0},"$USER uses $POWER",FIREFOUNTAIN_EFFECT};
|
||||||
MOVELIST[BattleMoveName::FREEZE_PACKET]=new Battle::Move{"Freeze Packet","",baseDmg:120,randomDmg:20,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0},L"$USER uses the $POWER"};
|
MOVELIST[BattleMoveName::FREEZE_PACKET]=new Battle::Move{"Freeze Packet","",baseDmg:120,randomDmg:20,PPCost:0,range:1,channelTime:0,friendly:false,composition:{0,0,0,0},"$USER uses the $POWER"};
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupItemList() { //hpRecovery,ppRecovery,attack,dmgReduction,equip,important,consumable
|
void SetupItemList() { //hpRecovery,ppRecovery,attack,dmgReduction,equip,important,consumable
|
||||||
@ -2571,12 +2660,8 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string Wrap(std::string str,int width,bool proportional,vd2d scale) {
|
std::string Wrap(std::string str,int width,bool proportional,vd2d scale) {
|
||||||
return transform_to<std::string>(Wrap(transform_to<std::wstring>(str),width,proportional,scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::wstring Wrap(std::wstring str,int width,bool proportional,vd2d scale) {
|
|
||||||
int marker=0;
|
int marker=0;
|
||||||
std::wstring newStr=L"";
|
std::string newStr="";
|
||||||
bool firstChar=false;
|
bool firstChar=false;
|
||||||
while (marker<str.length()) {
|
while (marker<str.length()) {
|
||||||
if (firstChar||!firstChar&&str[marker]!=' ') {
|
if (firstChar||!firstChar&&str[marker]!=' ') {
|
||||||
@ -2584,9 +2669,9 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
vd2d siz;
|
vd2d siz;
|
||||||
if (proportional) {
|
if (proportional) {
|
||||||
siz={GetTextSizeProp(transform_to<std::string>(newStr)).x*scale.x,GetTextSizeProp(transform_to<std::string>(newStr)).y*scale.y};
|
siz={GetTextSizeProp(newStr).x*scale.x,GetTextSizeProp(newStr).y*scale.y};
|
||||||
} else {
|
} else {
|
||||||
siz={GetTextSize(transform_to<std::string>(newStr)).x*scale.x,GetTextSize(transform_to<std::string>(newStr)).y*scale.y};
|
siz={GetTextSize(newStr).x*scale.x,GetTextSize(newStr).y*scale.y};
|
||||||
}
|
}
|
||||||
if (siz.x>width) {
|
if (siz.x>width) {
|
||||||
do {
|
do {
|
||||||
@ -2705,7 +2790,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!done) {
|
if (!done) {
|
||||||
for (int i=0;i<4;i++) {
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0) {
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0) {
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove==nullptr) {
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove==nullptr) {
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb>=1000) {
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb>=1000) {
|
||||||
@ -2826,7 +2911,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=L"Failed to learn "+transform_to<std::wstring>(BATTLE_CUSTOM_ITEM->stats.learnAbility->name);
|
BATTLE_CURRENT_CUSTOM_MSG.s="Failed to learn "+BATTLE_CUSTOM_ITEM->stats.learnAbility->name;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
@ -2963,7 +3048,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
BATTLE_CUSTOM_MSGS.clear();
|
BATTLE_CUSTOM_MSGS.clear();
|
||||||
BATTLE_CURRENT_CUSTOM_MSG={};
|
BATTLE_CURRENT_CUSTOM_MSG={};
|
||||||
BATTLE_ANIMATION_TIMER=0;
|
BATTLE_ANIMATION_TIMER=0;
|
||||||
BATTLE_SPOILS_MESSAGE=L"";
|
BATTLE_SPOILS_MESSAGE="";
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case BattleState::ENEMY_SPOILS:{
|
case BattleState::ENEMY_SPOILS:{
|
||||||
@ -2979,7 +3064,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
if (BATTLE_ANIMATION_TIMER%90==0) {
|
if (BATTLE_ANIMATION_TIMER%90==0) {
|
||||||
if (BATTLE_SPOILS_LIST.size()>0) {
|
if (BATTLE_SPOILS_LIST.size()>0) {
|
||||||
BATTLE_SPOILS_MESSAGE=L"You obtained a";
|
BATTLE_SPOILS_MESSAGE="You obtained a";
|
||||||
BATTLE_SPOILS_MESSAGE+=((
|
BATTLE_SPOILS_MESSAGE+=((
|
||||||
BATTLE_SPOILS_LIST[0]->name[0]=='a'||
|
BATTLE_SPOILS_LIST[0]->name[0]=='a'||
|
||||||
BATTLE_SPOILS_LIST[0]->name[0]=='e'||
|
BATTLE_SPOILS_LIST[0]->name[0]=='e'||
|
||||||
@ -2991,8 +3076,8 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
BATTLE_SPOILS_LIST[0]->name[0]=='I'||
|
BATTLE_SPOILS_LIST[0]->name[0]=='I'||
|
||||||
BATTLE_SPOILS_LIST[0]->name[0]=='O'||
|
BATTLE_SPOILS_LIST[0]->name[0]=='O'||
|
||||||
BATTLE_SPOILS_LIST[0]->name[0]=='U'
|
BATTLE_SPOILS_LIST[0]->name[0]=='U'
|
||||||
)?L"n ":L" ");
|
)?"n ":" ");
|
||||||
BATTLE_SPOILS_MESSAGE+=transform_to<std::wstring>(BATTLE_SPOILS_LIST[0]->name)+L".";
|
BATTLE_SPOILS_MESSAGE+=BATTLE_SPOILS_LIST[0]->name+".";
|
||||||
PARTY_INVENTORY.push_back(BATTLE_SPOILS_LIST[0]);
|
PARTY_INVENTORY.push_back(BATTLE_SPOILS_LIST[0]);
|
||||||
BATTLE_SPOILS_LIST.erase(BATTLE_SPOILS_LIST.begin());
|
BATTLE_SPOILS_LIST.erase(BATTLE_SPOILS_LIST.begin());
|
||||||
} else {
|
} else {
|
||||||
@ -3589,20 +3674,20 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::wstring ParseBattleMessage(Entity*ent,std::wstring baseStr) {
|
std::string ParseBattleMessage(Entity*ent,std::string baseStr) {
|
||||||
std::wstring label=L"";
|
std::string label="";
|
||||||
label=baseStr;
|
label=baseStr;
|
||||||
if (label.find(L"$USER")!=std::string::npos) {
|
if (label.find("$USER")!=std::string::npos) {
|
||||||
label=label.replace(label.find(L"$USER"),5,transform_to<std::wstring>(ent->obj->name));
|
label=label.replace(label.find("$USER"),5,ent->obj->name);
|
||||||
}
|
}
|
||||||
if (label.find(L"$POWER")!=std::string::npos) {
|
if (label.find("$POWER")!=std::string::npos) {
|
||||||
label=label.replace(label.find(L"$POWER"),6,transform_to<std::wstring>(ent->selectedMove->name)+L" "+((ent->selectedMove->grade!=0)?std::wstring(1,ent->selectedMove->grade):L""));
|
label=label.replace(label.find("$POWER"),6,ent->selectedMove->name+" "+((ent->selectedMove->grade!=0)?std::string(1,ent->selectedMove->grade):""));
|
||||||
}
|
}
|
||||||
if (label.find(L"$ITEM")!=std::string::npos) {
|
if (label.find("$ITEM")!=std::string::npos) {
|
||||||
label=label.replace(label.find(L"$ITEM"),5,EQUIP_$ITEM_DISPLAY);
|
label=label.replace(label.find("$ITEM"),5,EQUIP_$ITEM_DISPLAY);
|
||||||
}
|
}
|
||||||
if (label.find(L"$TARGET")!=std::string::npos) {
|
if (label.find("$TARGET")!=std::string::npos) {
|
||||||
label=label.replace(label.find(L"$TARGET"),7,transform_to<std::wstring>(GetTargetName(ent->selectedTarget)));
|
label=label.replace(label.find("$TARGET"),7,GetTargetName(ent->selectedTarget));
|
||||||
}
|
}
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
@ -3737,16 +3822,20 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
drawCol=RED;
|
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);
|
DrawStringDecal({static_cast<float>(8+WIDTH/4+12+i*8),static_cast<float>(12*counter+8+displayYOffset)},std::string(1,moves[i]->grade),drawCol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++counter;
|
++counter;
|
||||||
}
|
}
|
||||||
if (BATTLE_ENCOUNTER==nullptr) {
|
if (BATTLE_ENCOUNTER==nullptr) {
|
||||||
vi2d textSize = GetTextSizeProp(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->obj->name)/2;
|
vi2d textSize = GetTextSizeProp(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->obj->name)/2;
|
||||||
DrawStringPropDecal({(float)WIDTH/2.F-textSize.x-6,1},PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->obj->name,WHITE,{0.5,1});
|
if (PARTY_MEMBER_COUNT>1) {
|
||||||
DrawRotatedDecal({(float)WIDTH/2-textSize.x-8,5},SPRITES["cursor.png"],M_PI,{(float)SPRITES["cursor.png"]->sprite->width/2,(float)SPRITES["cursor.png"]->sprite->height/2},{(sinf(frameCount/20.F*M_PI)>0)?0.5F:0.25F,(sinf(frameCount/20.F*M_PI)>0)?0.5F:0.25F});
|
DrawStringPropDecal({(float)WIDTH/2.F-textSize.x-6,1},PARTY_MEMBER_STATS[PARTY_MEMBER_ID[partyMemberSlot]]->obj->name,WHITE,{0.5,1});
|
||||||
DrawRotatedDecal({(float)WIDTH/2-4,5},SPRITES["cursor.png"],0,{(float)SPRITES["cursor.png"]->sprite->width/2,(float)SPRITES["cursor.png"]->sprite->height/2},{(sinf(frameCount/20.F*M_PI)>0)?0.5F:0.25F,(sinf(frameCount/20.F*M_PI)>0)?0.5F:0.25F});
|
if (GAME_STATE==GameState::OVERWORLD_POWER_PLAYER_MENU) {
|
||||||
|
DrawRotatedDecal({(float)WIDTH/2-textSize.x-8,5},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/2-4,5},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});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (BATTLE_STATE==BattleState::POWER_SELECT||GAME_STATE==GameState::OVERWORLD_POWER_MENU) {
|
if (BATTLE_STATE==BattleState::POWER_SELECT||GAME_STATE==GameState::OVERWORLD_POWER_MENU) {
|
||||||
DrawDecal({4,static_cast<float>(12*(selectioncursor-powerselectionoffset)+8)},SPRITES["cursor.png"]);
|
DrawDecal({4,static_cast<float>(12*(selectioncursor-powerselectionoffset)+8)},SPRITES["cursor.png"]);
|
||||||
@ -3763,6 +3852,20 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PerformOverworldMove(Battle::Move*move,int partyMemberSlot) {
|
||||||
|
OVERWORLD_SELECTED_POWER=move;
|
||||||
|
OVERWORLD_TARGET_SELECTION=0;
|
||||||
|
if (move->name=="PK Lifeup") {
|
||||||
|
if (move->range==1) {
|
||||||
|
GAME_STATE=GameState::OVERWORLD_TARGET_MENU;
|
||||||
|
} else {
|
||||||
|
//DisplayMessageBox(PARTY_MEMBER_OBJ[partyMemberSlot]->name+" begins to cast "+move->name+" "+);
|
||||||
|
//DisplayMessageBox()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -3575,52 +3575,17 @@ namespace olc
|
|||||||
|
|
||||||
void PixelGameEngine::olc_ConstructFontSheet()
|
void PixelGameEngine::olc_ConstructFontSheet()
|
||||||
{
|
{
|
||||||
std::string data;
|
fontRenderable.Load("assets/newFont.png");
|
||||||
data += "?Q`0001oOch0o01o@F40o0<AGD4090LAGD<090@A7ch0?00O7Q`0600>00000000";
|
|
||||||
data += "O000000nOT0063Qo4d8>?7a14Gno94AA4gno94AaOT0>o3`oO400o7QN00000400";
|
|
||||||
data += "Of80001oOg<7O7moBGT7O7lABET024@aBEd714AiOdl717a_=TH013Q>00000000";
|
|
||||||
data += "720D000V?V5oB3Q_HdUoE7a9@DdDE4A9@DmoE4A;Hg]oM4Aj8S4D84@`00000000";
|
|
||||||
data += "OaPT1000Oa`^13P1@AI[?g`1@A=[OdAoHgljA4Ao?WlBA7l1710007l100000000";
|
|
||||||
data += "ObM6000oOfMV?3QoBDD`O7a0BDDH@5A0BDD<@5A0BGeVO5ao@CQR?5Po00000000";
|
|
||||||
data += "Oc``000?Ogij70PO2D]??0Ph2DUM@7i`2DTg@7lh2GUj?0TO0C1870T?00000000";
|
|
||||||
data += "70<4001o?P<7?1QoHg43O;`h@GT0@:@LB@d0>:@hN@L0@?aoN@<0O7ao0000?000";
|
|
||||||
data += "OcH0001SOglLA7mg24TnK7ln24US>0PL24U140PnOgl0>7QgOcH0K71S0000A000";
|
|
||||||
data += "00H00000@Dm1S007@DUSg00?OdTnH7YhOfTL<7Yh@Cl0700?@Ah0300700000000";
|
|
||||||
data += "<008001QL00ZA41a@6HnI<1i@FHLM81M@@0LG81?O`0nC?Y7?`0ZA7Y300080000";
|
|
||||||
data += "O`082000Oh0827mo6>Hn?Wmo?6HnMb11MP08@C11H`08@FP0@@0004@000000000";
|
|
||||||
data += "00P00001Oab00003OcKP0006@6=PMgl<@440MglH@000000`@000001P00000000";
|
|
||||||
data += "Ob@8@@00Ob@8@Ga13R@8Mga172@8?PAo3R@827QoOb@820@0O`0007`0000007P0";
|
|
||||||
data += "O`000P08Od400g`<3V=P0G`673IP0`@3>1`00P@6O`P00g`<O`000GP800000000";
|
|
||||||
data += "?P9PL020O`<`N3R0@E4HC7b0@ET<ATB0@@l6C4B0O`H3N7b0?P01L3R000000020";
|
|
||||||
|
|
||||||
fontRenderable.Create(128, 48);
|
|
||||||
|
|
||||||
int px = 0, py = 0;
|
|
||||||
for (size_t b = 0; b < 1024; b += 4)
|
|
||||||
{
|
|
||||||
uint32_t sym1 = (uint32_t)data[b + 0] - 48;
|
|
||||||
uint32_t sym2 = (uint32_t)data[b + 1] - 48;
|
|
||||||
uint32_t sym3 = (uint32_t)data[b + 2] - 48;
|
|
||||||
uint32_t sym4 = (uint32_t)data[b + 3] - 48;
|
|
||||||
uint32_t r = sym1 << 18 | sym2 << 12 | sym3 << 6 | sym4;
|
|
||||||
|
|
||||||
for (int i = 0; i < 24; i++)
|
|
||||||
{
|
|
||||||
int k = r & (1 << i) ? 255 : 0;
|
|
||||||
fontRenderable.Sprite()->SetPixel(px, py, olc::Pixel(k, k, k, k));
|
|
||||||
if (++py == 48) { px++; py = 0; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fontRenderable.Decal()->Update();
|
|
||||||
|
|
||||||
constexpr std::array<uint8_t, 96> vSpacing = { {
|
constexpr std::array<uint8_t, 96> vSpacing = { {
|
||||||
|
//X position (0-3) offset to display char
|
||||||
|
//Y position (0-15) width of the char to display
|
||||||
0x03,0x25,0x16,0x08,0x07,0x08,0x08,0x04,0x15,0x15,0x08,0x07,0x15,0x07,0x24,0x08,
|
0x03,0x25,0x16,0x08,0x07,0x08,0x08,0x04,0x15,0x15,0x08,0x07,0x15,0x07,0x24,0x08,
|
||||||
0x08,0x17,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x24,0x15,0x06,0x07,0x16,0x17,
|
0x08,0x17,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x24,0x15,0x06,0x07,0x16,0x17,
|
||||||
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x17,0x08,0x08,0x08,
|
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x17,0x08,0x08,0x08,
|
||||||
0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x08,0x08,0x17,0x08,0x15,0x08,0x15,0x08,0x08,
|
0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x08,0x08,0x17,0x08,0x15,0x08,0x15,0x08,0x08,
|
||||||
0x24,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x33,0x17,0x17,0x33,0x18,0x17,0x17,
|
0x27,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x33,0x17,0x17,0x33,0x18,0x17,0x17,
|
||||||
0x17,0x17,0x17,0x17,0x07,0x17,0x17,0x18,0x18,0x17,0x17,0x07,0x33,0x07,0x08,0x00, } };
|
0x17,0x17,0x17,0x17,0x07,0x17,0x17,0x18,0x18,0x17,0x17,0x36,0x27,0x36,0x18,0x36, } };
|
||||||
|
|
||||||
for (auto c : vSpacing) vFontSpacing.push_back({ c >> 4, c & 15 });
|
for (auto c : vSpacing) vFontSpacing.push_back({ c >> 4, c & 15 });
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user