@ -141,13 +141,13 @@ public:
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.
bool ITEM_REQUIRES_EQUIPPING = false ;
std : : w string 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.
CustomItemMessage BATTLE_CURRENT_CUSTOM_MSG ;
int BATTLE_CUSTOM_MESSAGE_WAIT_TIME = 0 ;
Item * BATTLE_CUSTOM_ITEM ;
std : : vector < Item * > BATTLE_SPOILS_LIST ;
std : : w string BATTLE_SPOILS_MESSAGE ;
std : : string BATTLE_SPOILS_MESSAGE ;
int OVERWORLD_MENU_SELECTION = 0 ;
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.
@ -156,6 +156,8 @@ public:
int OVERWORLD_POWER_SELECTION_OFFSET [ 4 ] = { 0 , 0 , 0 , 0 } ;
int OVERWORLD_GRADE_SELECTION_OFFSET = 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.
@ -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 ( UpPressed ( ) ) {
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = = 0 ) {
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = ( 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 ) ;
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] = std : : clamp ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] - 3 , 0 , ( int ) BATTLE_MOVELIST_DISPLAY . size ( ) - 1 ) ;
} else {
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = std : : clamp ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] - 1 , 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 ) ;
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] < POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] ) {
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] - - ;
if ( BATTLE_MOVELIST_DISPLAY . size ( ) > 1 ) {
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = = 0 ) {
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = ( 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 ) ;
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] = std : : clamp ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] - 3 , 0 , ( int ) BATTLE_MOVELIST_DISPLAY . size ( ) - 1 ) ;
} else {
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = std : : clamp ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] - 1 , 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 ) ;
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] < POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] ) {
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] - - ;
}
}
}
} else
if ( DownPressed ( ) ) {
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = = ( int ) BATTLE_MOVELIST_DISPLAY . size ( ) - 1 ) {
POWER_GRADE_CURSOR [ - CURRENT_TURN - 1 ] = 0 ;
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = 0 ;
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] = 0 ;
} else {
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = std : : clamp ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] + 1 , 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 ) ;
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] - POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] > = 4 ) {
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] + + ;
if ( BATTLE_MOVELIST_DISPLAY . size ( ) > 1 ) {
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = = ( int ) BATTLE_MOVELIST_DISPLAY . size ( ) - 1 ) {
POWER_GRADE_CURSOR [ - CURRENT_TURN - 1 ] = 0 ;
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = 0 ;
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] = 0 ;
} else {
POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] = std : : clamp ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] + 1 , 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 ) ;
if ( POWER_SELECTION_CURSOR [ - CURRENT_TURN - 1 ] - POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] > = 4 ) {
POWER_SELECTION_OFFSET [ - CURRENT_TURN - 1 ] + + ;
}
}
}
} else {
@ -949,7 +955,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
HandleInventoryNavigation ( ) ;
}
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 ) {
ITEM_REQUIRES_EQUIPPING = true ;
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.
OVERWORLD_POWER_SELECTION_MEMBER = 0 ;
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 ;
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 ;
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 ;
case GameState : : EDITOR : {
if ( IsTextEntryEnabled ( ) ) {
@ -1178,6 +1280,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}
void drawGame ( ) {
SetDrawTarget ( layer : : DYNAMIC ) ;
for ( auto & obj : OBJECTS ) {
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_MENU :
case GameState : : OVERWORLD_EQUIP_PLAYER_MENU :
case GameState : : OVERWORLD_STATUS_MENU : {
case GameState : : OVERWORLD_STATUS_MENU :
case GameState : : OVERWORLD_TARGET_MENU : {
DrawGameWorld ( ) ;
if ( GAME_STATE ! = GameState : : GAME_WORLD ) {
SetDrawTarget ( layer : : INTERFACE ) ;
@ -1330,6 +1434,24 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}
} 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 ) {
SetDrawTarget ( layer : : HIGH ) ;
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 ) {
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 ) {
SetDrawTarget ( layer : : INTERFACE ) ;
vd2d text = { 2 , 2 } ;
vd2d shadowOffset = { 1 , 1 } ;
std : : w string label ;
std : : string label ;
if ( BATTLE_CURRENT_CUSTOM_MSG . s . length ( ) > 0 ) {
std : : w string baseStr = transform_to < std : : wstring > ( BATTLE_CURRENT_CUSTOM_MSG . s ) ;
std : : string baseStr = BATTLE_CURRENT_CUSTOM_MSG . s ;
if ( CURRENT_TURN < 0 ) {
label = ParseBattleMessage ( PARTY_MEMBER_STATS [ PARTY_MEMBER_ID [ - CURRENT_TURN - 1 ] ] , baseStr ) ;
} else {
@ -1372,22 +1480,22 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}
} else {
if ( CURRENT_TURN < 0 ) {
std : : w string 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 ) ;
} else {
std : : w string 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 ) ;
}
}
DrawFancy StringDecal ( text + shadowOffset , Wrap ( label , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , BLACK , { 1 , 2 } ) ;
DrawFancy StringDecal ( text , Wrap ( label , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , WHITE , { 1 , 2 } ) ;
DrawStringDecal ( text + shadowOffset , Wrap ( label , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , BLACK , { 1 , 2 } ) ;
DrawStringDecal ( text , Wrap ( label , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , WHITE , { 1 , 2 } ) ;
}
if ( BATTLE_STATE = = BattleState : : ENEMY_SPOILS ) {
SetDrawTarget ( layer : : INTERFACE ) ;
vd2d text = { 2 , 2 } ;
vd2d shadowOffset = { 1 , 1 } ;
DrawFancy StringDecal ( text + shadowOffset , Wrap ( BATTLE_SPOILS_MESSAGE , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , BLACK , { 1 , 2 } ) ;
DrawFancy StringDecal ( text , Wrap ( BATTLE_SPOILS_MESSAGE , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , WHITE , { 1 , 2 } ) ;
DrawStringDecal ( text + shadowOffset , Wrap ( BATTLE_SPOILS_MESSAGE , ScreenWidth ( ) - 2 , false , { 1 , 2 } ) , BLACK , { 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 ) {
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 " ] ) ;
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 ) ;
std : : w string label = transform_to < std : : wstring > ( member - > selectedMove - > name ) ;
label + = L " " ;
std : : string label = member - > selectedMove - > name ;
label + = " " ;
if ( member - > selectedMove - > grade ! = 0 ) {
label + = member - > selectedMove - > grade ;
}
vd2d textOffset = GetTextSize ( transform_to < std : : string > ( label ) ) * 0.6 ;
vd2d textOffset = GetTextSize ( label ) * 0.6 ;
textOffset . y + = 10 ;
vd2d barPos = { ( float ) ( box . x + 4 ) , ( float ) ( box . y + 5 + 8 + 2 ) } ;
DrawFancy StringDecal ( 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 } ;
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 } ;
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 " ] ) ;
std : : w string label = transform_to < std : : wstring > ( obj - > selectedMove - > name ) ;
std : : string label = obj - > selectedMove - > name ;
if ( obj - > selectedMove - > grade ! = 0 ) {
label + = L " " ;
label + = " " ;
label + = obj - > selectedMove - > grade ;
}
vd2d textOffset = GetTextSize ( transform_to < std : : string > ( label ) ) * 0.6 ;
vd2d textOffset = GetTextSize ( label ) * 0.6 ;
textOffset . y - = 6 ;
vi2d shadowOffset = { 1 , 1 } ;
DrawFancy StringDecal ( obj - > obj - > GetPos ( ) + obj - > obj - > originPoint - cameraPos + barOffset - textOffset / 2 + shadowOffset , label , BLACK , { 0.6 , 0.6 } ) ;
DrawFancy StringDecal ( 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 + shadowOffset , label , BLACK , { 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 ) {
std : : ifstream f ( " assets/maps/ " + map - > filename , 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 : : 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_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 : : 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 : : 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_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 : : 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 } , " $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_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 } } ;
@ -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_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 : : 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_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_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_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 } , " $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 } , " $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_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_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 : : 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 : : 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 } , " $USER uses the $POWER " } ;
}
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 ) {
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 ;
std : : w string newStr = L " " ;
std : : string newStr = " " ;
bool firstChar = false ;
while ( marker < str . length ( ) ) {
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 ;
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 {
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 ) {
do {
@ -2705,7 +2790,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}
}
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 ] ] - > selectedMove = = nullptr ) {
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 ) {
target - > moveSet . push_back ( BATTLE_CUSTOM_ITEM - > stats . learnAbility ) ;
} 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 ;
}
@ -2963,7 +3048,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
BATTLE_CUSTOM_MSGS . clear ( ) ;
BATTLE_CURRENT_CUSTOM_MSG = { } ;
BATTLE_ANIMATION_TIMER = 0 ;
BATTLE_SPOILS_MESSAGE = L " " ;
BATTLE_SPOILS_MESSAGE = " " ;
}
} break ;
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_SPOILS_LIST . size ( ) > 0 ) {
BATTLE_SPOILS_MESSAGE = L " You obtained a " ;
BATTLE_SPOILS_MESSAGE = " You obtained a " ;
BATTLE_SPOILS_MESSAGE + = ( (
BATTLE_SPOILS_LIST [ 0 ] - > name [ 0 ] = = ' a ' | |
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 ] = = ' O ' | |
BATTLE_SPOILS_LIST [ 0 ] - > name [ 0 ] = = ' U '
) ? L " n " : L " " ) ;
BATTLE_SPOILS_MESSAGE + = transform_to < std : : wstring > ( BATTLE_SPOILS_LIST [ 0 ] - > name ) + L " . " ;
) ? " n " : " " ) ;
BATTLE_SPOILS_MESSAGE + = BATTLE_SPOILS_LIST [ 0 ] - > name + " . " ;
PARTY_INVENTORY . push_back ( BATTLE_SPOILS_LIST [ 0 ] ) ;
BATTLE_SPOILS_LIST . erase ( BATTLE_SPOILS_LIST . begin ( ) ) ;
} else {
@ -3589,20 +3674,20 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
}
}
std : : w string ParseBattleMessage ( Entity * ent , std : : w string baseStr ) {
std : : w string label = L " " ;
std : : string ParseBattleMessage ( Entity * ent , std : : string baseStr ) {
std : : string label = " " ;
label = baseStr ;
if ( label . find ( L " $USER " ) ! = std : : string : : npos ) {
label = label . replace ( label . find ( L " $USER " ) , 5 , transform_to < std : : wstring > ( ent - > obj - > name ) ) ;
if ( label . find ( " $USER " ) ! = std : : string : : npos ) {
label = label . replace ( label . find ( " $USER " ) , 5 , ent - > obj - > name ) ;
}
if ( label . find ( L " $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 : : w string( 1 , ent - > selectedMove - > grade ) : L " " ) ) ;
if ( label . find ( " $POWER " ) ! = std : : string : : npos ) {
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 ) {
label = label . replace ( label . find ( L " $ITEM " ) , 5 , EQUIP_ $ ITEM_DISPLAY ) ;
if ( label . find ( " $ITEM " ) ! = std : : string : : npos ) {
label = label . replace ( label . find ( " $ITEM " ) , 5 , EQUIP_ $ ITEM_DISPLAY ) ;
}
if ( label . find ( L " $TARGET " ) ! = std : : string : : npos ) {
label = label . replace ( label . find ( L " $TARGET " ) , 7 , transform_to < std : : wstring > ( GetTargetName ( ent - > selectedTarget ) ) ) ;
if ( label . find ( " $TARGET " ) ! = std : : string : : npos ) {
label = label . replace ( label . find ( " $TARGET " ) , 7 , GetTargetName ( ent - > selectedTarget ) ) ;
}
return label ;
}
@ -3737,16 +3822,20 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
drawCol = RED ;
}
}
DrawFancy StringDecal ( { static_cast < float > ( 8 + WIDTH / 4 + 12 + i * 8 ) , static_cast < float > ( 12 * counter + 8 + displayYOffset ) } , std : : w string( 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 ;
}
if ( BATTLE_ENCOUNTER = = nullptr ) {
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 } ) ;
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 } ) ;
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 ( PARTY_MEMBER_COUNT > 1 ) {
DrawStringPropDecal ( { ( float ) WIDTH / 2.F - textSize . x - 6 , 1 } , PARTY_MEMBER_STATS [ PARTY_MEMBER_ID [ partyMemberSlot ] ] - > obj - > name , WHITE , { 0.5 , 1 } ) ;
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 ) {
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 ( )