@ -123,13 +123,17 @@ class Entity{
int y ;
std : : string name ;
WEATHER_POWER * selectedMove ;
Entity ( Decal * spr , std : : string name , int x , int y , int hp , int maxhp , bool isAlly = false ) {
std : : vector < WEATHER_POWER * > moveSet ;
bool turnComplete = false ;
bool slowed = false ;
Entity ( Decal * spr , std : : string name , int x , int y , int hp , int maxhp , std : : vector < WEATHER_POWER * > moveset ) {
this - > spr = spr ;
this - > name = name ;
this - > x = x ;
this - > y = y ;
this - > hp = hp ;
this - > maxhp = maxhp ;
this - > moveSet = moveSet ;
}
} ;
@ -210,7 +214,7 @@ public:
WEATHER_POWER * METEOR_STORM = new WEATHER_POWER ( " Meteor Storm " , " Larger space rocks. 120+60d " , & POWER_METEOR_STORM_ANIMATION , & POWER_METEOR_STORM_ANIMATION , 120 , 60 , 140 , Pixel ( 89 , 4 , 33 , 255 ) , Pixel ( 130 , 56 , 1 , 255 ) ) ;
WEATHER_POWER * SNOWSTORM = new WEATHER_POWER ( " Snowstorm " , " Slows down targets and causes rapid temperature drops. 15+10d " , & POWER_SNOWSTORM_ANIMATION , & POWER_SNOWSTORM_ANIMATION , 15 , 10 , 140 , Pixel ( 183 , 196 , 194 , 255 ) , Pixel ( 222 , 255 , 254 , 255 ) ) ;
WEATHER_POWER * SANDSTORM = new WEATHER_POWER ( " Sandstorm " , " " , & POWER_HAILSTORM_ANIMATION , & POWER_HAILSTORM_ANIMATION , 5 , 10 , 64 , Pixel ( 93 , 161 , 163 , 255 ) , Pixel ( 72 , 160 , 212 , 255 ) ) ;
WEATHER_POWER * PETAL_BLOSSO M = new WEATHER_POWER ( " Petal Blosso m" , " " , & POWER_HAILSTORM_ANIMATION , & POWER_HAILSTORM_ANIMATION , 8 , 20 , 164 , Pixel ( 93 , 161 , 163 , 255 ) , Pixel ( 72 , 160 , 212 , 255 ) ) ;
WEATHER_POWER * SEED_STOR M = new WEATHER_POWER ( " Seed Stor m" , " " , & POWER_HAILSTORM_ANIMATION , & POWER_HAILSTORM_ANIMATION , 8 , 20 , 164 , Pixel ( 93 , 161 , 163 , 255 ) , Pixel ( 72 , 160 , 212 , 255 ) ) ;
WEATHER_POWER * AVALANCHE = new WEATHER_POWER ( " Avalanche " , " " , & POWER_HAILSTORM_ANIMATION , & POWER_HAILSTORM_ANIMATION , 15 , 10 , 200 , Pixel ( 93 , 161 , 163 , 255 ) , Pixel ( 72 , 160 , 212 , 255 ) ) ;
bool IN_BATTLE_ENCOUNTER = false ;
int BATTLE_ENTRY_TIMER = 0 ;
@ -228,6 +232,8 @@ public:
int BATTLE_CARD_SELECTION_IND = 0 ;
int PLAYER_SELECTED_TARGET = - 1 ;
std : : vector < WEATHER_POWER * > MOVESET_SPIDEY ;
Decal * DOME_DECAL , * FOOD_METER_DECAL , * OXYGEN_METER_DECAL , * PLANT_DECAL ,
* PLAYER_DECAL ,
@ -237,6 +243,7 @@ public:
std : : vector < Encounter > ENCOUNTERS ;
Encounter ENCOUNTER_SPIDEY_1 ;
Encounter CURRENT_ENCOUNTER ;
std : : vector < int > turnOrder ;
bool OnUserCreate ( ) override
{
@ -330,9 +337,13 @@ public:
HURRICANE - > playerOwnCount = 1 ;
METEOR_RAIN - > playerOwnCount = 5 ;
ENCOUNTER_SPIDEY_1 . entities . push_back ( * new Entity ( SPIDEY_DECAL , " Spidey " , 2 , 3 , 80 , 80 , false ) ) ;
ENCOUNTER_SPIDEY_1 . entities . push_back ( * new Entity ( SPIDEY_DECAL , " Spidey " , 4 , 4 , 80 , 80 , false ) ) ;
ENCOUNTER_SPIDEY_1 . entities . push_back ( * new Entity ( SPIDEY_DECAL , " Spidey " , 6 , 2 , 80 , 80 , false ) ) ;
MOVESET_SPIDEY . push_back ( SANDSTORM ) ;
MOVESET_SPIDEY . push_back ( SEED_STORM ) ;
MOVESET_SPIDEY . push_back ( AVALANCHE ) ;
ENCOUNTER_SPIDEY_1 . entities . push_back ( * new Entity ( SPIDEY_DECAL , " Spidey " , 2 , 3 , 80 , 80 , MOVESET_SPIDEY ) ) ;
ENCOUNTER_SPIDEY_1 . entities . push_back ( * new Entity ( SPIDEY_DECAL , " Spidey " , 4 , 4 , 80 , 80 , MOVESET_SPIDEY ) ) ;
ENCOUNTER_SPIDEY_1 . entities . push_back ( * new Entity ( SPIDEY_DECAL , " Spidey " , 6 , 2 , 80 , 80 , MOVESET_SPIDEY ) ) ;
ENCOUNTER_SPIDEY_1 . x = 79 ;
ENCOUNTER_SPIDEY_1 . y = 47 ;
ENCOUNTERS . push_back ( ENCOUNTER_SPIDEY_1 ) ;
@ -397,6 +408,50 @@ public:
}
}
} break ;
case battle : : PLAYER_TARGET_SELECTION : {
BATTLE_STATE = battle : : ENEMY_SELECTION ;
for ( int i = 0 ; i < CURRENT_ENCOUNTER . entities . size ( ) ; i + + ) {
if ( CURRENT_ENCOUNTER . entities [ i ] . hp > 0 ) {
CURRENT_ENCOUNTER . entities [ i ] . selectedMove = CURRENT_ENCOUNTER . entities [ i ] . moveSet [ rand ( ) % CURRENT_ENCOUNTER . entities [ i ] . moveSet . size ( ) ] ;
CURRENT_ENCOUNTER . entities [ i ] . turnComplete = false ;
}
}
BATTLE_STATE = battle : : MOVE_RESOLUTION ;
//Seed Storm has prio.
if ( BATTLE_CARD_SELECTION_IND ! = - 1 & & BATTLE_CARD_SELECTION - > name . compare ( " Seed Storm " ) = = 0 ) {
turnOrder . push_back ( - 1 ) ;
BATTLE_CARD_SELECTION_IND = - 1 ;
}
for ( int i = 0 ; i < CURRENT_ENCOUNTER . entities . size ( ) ; i + + ) {
if ( CURRENT_ENCOUNTER . entities [ i ] . hp > 0 & & ! CURRENT_ENCOUNTER . entities [ i ] . turnComplete & &
CURRENT_ENCOUNTER . entities [ i ] . selectedMove - > name . compare ( " Seed Storm " ) ) {
turnOrder . push_back ( i ) ;
CURRENT_ENCOUNTER . entities [ i ] . turnComplete = true ;
}
}
//Otherwise, every enemy has a chance to go before the player unless they are slowed, then they always go after.
for ( int i = 0 ; i < CURRENT_ENCOUNTER . entities . size ( ) ; i + + ) {
Entity ent = CURRENT_ENCOUNTER . entities [ i ] ;
if ( ent . hp > 0 & & ! ent . turnComplete & &
! ent . slowed & & rand ( ) % 2 = = 0 ) {
turnOrder . push_back ( i ) ;
ent . turnComplete = true ;
}
}
if ( BATTLE_CARD_SELECTION_IND ! = - 1 ) {
turnOrder . push_back ( - 1 ) ;
BATTLE_CARD_SELECTION_IND = - 1 ;
}
//Finally, any enemies that haven't gone will now go.
for ( int i = 0 ; i < CURRENT_ENCOUNTER . entities . size ( ) ; i + + ) {
Entity ent = CURRENT_ENCOUNTER . entities [ i ] ;
if ( ent . hp > 0 & & ! ent . turnComplete ) {
turnOrder . push_back ( i ) ;
ent . turnComplete = true ;
}
}
BATTLE_STATE = battle : : PERFORM_TURN ;
} break ;
}
}
@ -456,7 +511,7 @@ public:
}
} break ;
case battle : : PLAYER_TARGET_SELECTION : {
if ( GetKey ( D ) . bPressed | | GetKey ( RIGHT ) . bPressed | | GetKey ( NP6 ) . bPressed | | GetKey ( W ) . bReleased | | GetKey ( UP ) . bReleased | | GetKey ( NP8 ) . bReleased ) {
if ( GetKey ( D ) . bPressed | | GetKey ( RIGHT ) . bPressed | | GetKey ( NP6 ) . bPressed ) {
while ( true ) {
PLAYER_SELECTED_TARGET = ( PLAYER_SELECTED_TARGET + 1 ) % CURRENT_ENCOUNTER . entities . size ( ) ;
if ( CURRENT_ENCOUNTER . entities [ PLAYER_SELECTED_TARGET ] . hp > 0 ) {
@ -464,7 +519,11 @@ public:
}
}
}
if ( GetKey ( A ) . bPressed | | GetKey ( LEFT ) . bPressed | | GetKey ( NP4 ) . bPressed | | GetKey ( S ) . bReleased | | GetKey ( DOWN ) . bReleased | | GetKey ( NP5 ) . bReleased | | GetKey ( NP2 ) . bReleased ) {
if ( GetKey ( W ) . bPressed | | GetKey ( UP ) . bPressed | | GetKey ( NP8 ) . bPressed ) {
PLAYER_SELECTED_TARGET = - 1 ;
BATTLE_STATE = battle : : PLAYER_SELECTION ;
}
if ( GetKey ( A ) . bPressed | | GetKey ( LEFT ) . bPressed | | GetKey ( NP4 ) . bPressed ) {
while ( true ) {
if ( - - PLAYER_SELECTED_TARGET < 0 ) {
PLAYER_SELECTED_TARGET = CURRENT_ENCOUNTER . entities . size ( ) - 1 ;
@ -884,6 +943,8 @@ public:
if ( PLAYER_SELECTED_TARGET > = 0 ) {
DrawWrappedText ( { 5 , 5 } , " Target " + CURRENT_ENCOUNTER . entities [ PLAYER_SELECTED_TARGET ] . name + " " + ( char ) ( ' A ' + PLAYER_SELECTED_TARGET ) + " with " + BATTLE_CARD_SELECTION - > name , WIDTH - 8 , BLACK , { 2 , 2 } ) ;
DrawWrappedText ( { 4 , 4 } , " Target " + CURRENT_ENCOUNTER . entities [ PLAYER_SELECTED_TARGET ] . name + " " + ( char ) ( ' A ' + PLAYER_SELECTED_TARGET ) + " with " + BATTLE_CARD_SELECTION - > name , WIDTH - 8 , WHITE , { 2 , 2 } ) ;
DrawStringDecal ( { WIDTH - GetTextSize ( " <UP> Back " ) . x - 1 , HEIGHT - GetTextSize ( " <UP> Back " ) . y - 1 } , " <UP> Back " , BLACK , { 1 , 1 } ) ;
DrawStringDecal ( { WIDTH - GetTextSize ( " <UP> Back " ) . x - 2 , HEIGHT - GetTextSize ( " <UP> Back " ) . y - 2 } , " <UP> Back " , GREEN , { 1 , 1 } ) ;
}
} break ;
}