@ -17,7 +17,7 @@ using namespace olc;
# define SKIP_CHAPTER2 false
# define SKIP_CHAPTER3 false
# define STARTING_MAP "assets / maps / map1"
# define STARTING_MAP MAP_1
# define STARTING_STATE CUTSCENE_3
# define MOVE_SPD 0.075
# define PLAYER_X 14
@ -251,6 +251,14 @@ class Object{
}
} ;
class Map {
public :
std : : string filename ;
Map ( std : : string filepath ) {
this - > filename = filepath ;
}
} ;
class ParticleEffect {
public :
vf2d effectPos ;
@ -351,6 +359,7 @@ class Encounter{
float playerX , playerY ;
std : : vector < Entity * > entities ;
std : : vector < int > turnOrder ;
Map * map ;
} ;
class Zone {
@ -461,6 +470,8 @@ public:
Animation * PETAL_STORM_ANIMATION = new Animation ( ) ;
Animation * SLEEP_ANIMATION = new Animation ( ) ;
Animation * EMPTY_BED_ANIMATION = new Animation ( ) ;
Animation * POWER_FLASHFLOOD_ANIMATION = new Animation ( ) ;
Animation * POWER_SUNNYDAY_ANIMATION = new Animation ( ) ;
ParticleEffect * HAILSTORM_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 1 , 1 } , { 4 , 4 } , { - 2 , 0.5 } , { - 0.5 , 2 } , Pixel ( 143 , 242 , 255 , 255 ) , Pixel ( 255 , 255 , 255 , 255 ) , 300 , Pixel ( 220 , 226 , 227 , 0 ) ) ;
ParticleEffect * HURRICANE_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 1 , 1 } , { 2 , 2 } , { - 4 , 1 } , { - 1 , 4 } , Pixel ( 225 , 248 , 252 , 64 ) , Pixel ( 255 , 255 , 255 , 128 ) , 300 , Pixel ( 220 , 226 , 227 , 0 ) ) ;
ParticleEffect * METEOR_RAIN_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 3 , 3 } , { 6 , 6 } , { - 1 , 0.2 } , { - 0.2 , 1 } , Pixel ( 46 , 31 , 31 , 255 ) , Pixel ( 43 , 31 , 46 , 255 ) , 50 , Pixel ( 30 , 10 , 36 , 0 ) ) ;
@ -477,11 +488,18 @@ public:
ParticleEffect * SUMMON_MINION_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 4 , 4 } , { 12 , 12 } , { 0 , - 6 } , { 0 , - 20 } , Pixel ( 223 , 242 , 0 , 130 ) , Pixel ( 223 , 255 , 114 , 210 ) , 50 , Pixel ( 70 , 158 , 62 , 0 ) ) ;
ParticleEffect * SEED_OF_LIFE_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 2 , 2 } , { 2 , 2 } , { - 1 , - 2 } , { 1 , - 0.2 } , Pixel ( 65 , 98 , 66 , 210 ) , Pixel ( 65 , 117 , 60 , 255 ) , 140 , Pixel ( 70 , 158 , 62 , 0 ) ) ;
ParticleEffect * FIRESTORM_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 4 , 4 } , { 12 , 12 } , { - 12 , - 8 } , { 12 , - 4 } , Pixel ( 209 , 90 , 69 , 130 ) , Pixel ( 209 , 141 , 69 , 255 ) , 140 , Pixel ( 255 , 0 , 0 , 32 ) ) ;
WEATHER_POWER * HAILSTORM = new WEATHER_POWER ( " Hailstorm " , " Causes a flurry of hard cold rocks to be unleashed in target area. 60+30d " , POWER_HAILSTORM_ANIMATION , POWER_HAILSTORM_ANIMATION , 60 , 30 , 160 , Pixel ( 72 , 160 , 212 , 255 ) , Pixel ( 93 , 161 , 163 , 255 ) , 120 , HAILSTORM_EFF ) ;
WEATHER_POWER * HURRICANE = new WEATHER_POWER ( " Hurricane " , " Causes heavy winds, scattering seeds, heavy rain. 20+10d " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 20 , 10 , 200 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , HURRICANE_EFF ) ;
WEATHER_POWER * METEOR_RAIN = new WEATHER_POWER ( " Meteor Rain " , " Causes fiery space rocks to fall on target area. 50+50d " , POWER_METEOR_SHOWER_ANIMATION , POWER_METEOR_SHOWER_ANIMATION , 50 , 50 , 96 , Pixel ( 96 , 86 , 153 , 255 ) , Pixel ( 170 , 103 , 201 , 255 ) , 120 , METEOR_STORM_EFF ) ;
ParticleEffect * ACID_RAIN_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 1 , 1 } , { 2 , 2 } , { - 4 , 1 } , { - 1 , 4 } , Pixel ( 117 , 125 , 57 , 128 ) , Pixel ( 224 , 245 , 66 , 210 ) , 300 , Pixel ( 220 , 226 , 227 , 0 ) ) ;
ParticleEffect * DROUGHT_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 1 , 1 } , { 2 , 2 } , { - 1 , - 4 } , { 1 , - 0.5 } , Pixel ( 217 , 79 , 33 , 128 ) , Pixel ( 217 , 162 , 33 , 210 ) , 70 , Pixel ( 217 , 204 , 173 , 64 ) ) ;
ParticleEffect * HEAT_WAVE_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 4 , 4 } , { 12 , 12 } , { - 8 , 4 } , { - 4 , 8 } , Pixel ( 209 , 90 , 69 , 130 ) , Pixel ( 209 , 141 , 69 , 255 ) , 80 , Pixel ( 255 , 0 , 0 , 0 ) ) ;
ParticleEffect * TORNADO_EFF = new ParticleEffect ( { 0 , 0 } , { 64 , 64 } , { 0 , 0 } , { 64 , 64 } , { 1 , 2 } , { 3 , 20 } , { - 14 , 2 } , { 14 , 12 } , Pixel ( 168 , 155 , 146 , 196 ) , Pixel ( 196 , 194 , 192 , 220 ) , 45 , Pixel ( 255 , 0 , 0 , 0 ) ) ;
ParticleEffect * GUST_EFF = new ParticleEffect ( { 0 , 0 } , { 64 , 64 } , { 0 , 0 } , { 64 , 64 } , { 1 , 2 } , { 3 , 20 } , { - 6 , 1 } , { 6 , 6 } , Pixel ( 168 , 155 , 146 , 196 ) , Pixel ( 196 , 194 , 192 , 220 ) , 20 , Pixel ( 255 , 0 , 0 , 0 ) ) ;
ParticleEffect * FLASH_FLOOD_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 1 , 1 } , { 2 , 2 } , { - 4 , 1 } , { - 1 , 4 } , Pixel ( 8 , 54 , 204 , 64 ) , Pixel ( 255 , 255 , 255 , 128 ) , 500 , Pixel ( 220 , 226 , 227 , 0 ) ) ;
ParticleEffect * SUNNYDAY_EFF = new ParticleEffect ( { 0 , 0 } , { WIDTH , HEIGHT } , { 0 , 0 } , { WIDTH , HEIGHT } , { 1 , 1 } , { 4 , 4 } , { 0 , - 2 } , { 0 , - 6 } , Pixel ( 209 , 207 , 113 , 130 ) , Pixel ( 255 , 255 , 255 , 210 ) , 50 , Pixel ( 70 , 158 , 62 , 0 ) ) ;
WEATHER_POWER * HAILSTORM = new WEATHER_POWER ( " Hailstorm " , " Causes a flurry of hard cold rocks to be unleashed in target area. 60+1d30 " , POWER_HAILSTORM_ANIMATION , POWER_HAILSTORM_ANIMATION , 60 , 30 , 160 , Pixel ( 72 , 160 , 212 , 255 ) , Pixel ( 93 , 161 , 163 , 255 ) , 120 , HAILSTORM_EFF ) ;
WEATHER_POWER * HURRICANE = new WEATHER_POWER ( " Hurricane " , " Causes heavy winds, scattering seeds, heavy rain. 20+1d10 " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 20 , 10 , 200 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , HURRICANE_EFF ) ;
WEATHER_POWER * METEOR_RAIN = new WEATHER_POWER ( " Meteor Rain " , " Causes fiery space rocks to fall on target area. 50+1d50 " , POWER_METEOR_SHOWER_ANIMATION , POWER_METEOR_SHOWER_ANIMATION , 50 , 50 , 96 , Pixel ( 96 , 86 , 153 , 255 ) , Pixel ( 170 , 103 , 201 , 255 ) , 120 , METEOR_STORM_EFF ) ;
WEATHER_POWER * METEOR_STORM = new WEATHER_POWER ( " Meteor Storm " , " Larger burning 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 ) , 120 , METEOR_RAIN_EFF ) ;
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 ) , 120 , SNOWSTORM_EFF ) ;
WEATHER_POWER * SNOWSTORM = new WEATHER_POWER ( " Snowstorm " , " Slows down targets and causes rapid temperature drops. 15+1d1 0 " , POWER_SNOWSTORM_ANIMATION , POWER_SNOWSTORM_ANIMATION , 15 , 10 , 140 , Pixel ( 183 , 196 , 194 , 255 ) , Pixel ( 222 , 255 , 254 , 255 ) , 120 , SNOWSTORM_EFF ) ;
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 ) , 120 , SANDSTORM_EFF ) ;
WEATHER_POWER * SEED_STORM = new WEATHER_POWER ( " Seed Storm " , " " , POWER_HAILSTORM_ANIMATION , POWER_HAILSTORM_ANIMATION , - 10 , 15 , 30 , Pixel ( 93 , 161 , 163 , 255 ) , Pixel ( 72 , 160 , 212 , 255 ) , 120 , SEED_STORM_EFF ) ;
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 ) , 120 , AVALANCHE_EFF ) ;
@ -492,7 +510,14 @@ public:
WEATHER_POWER * SUMMON_MINIONS = new WEATHER_POWER ( " Summon Minions " , " " , POWER_HAILSTORM_ANIMATION , POWER_HAILSTORM_ANIMATION , - 75 , 15 , 255 , Pixel ( 57 , 92 , 63 , 255 ) , Pixel ( 95 , 232 , 119 , 255 ) , 120 , SUMMON_MINION_EFF ) ;
WEATHER_POWER * CONSUME_SNACK = new WEATHER_POWER ( " Snack " , " Restores 33% health for 5 turns. If battle ends before effect ends, food is not consumed. " , CONSUME_SNACK_ANIMATION , CONSUME_SNACK_ANIMATION , - 1001 , 1 , 200 , Pixel ( 147 , 173 , 66 , 255 ) , Pixel ( 255 , 188 , 3 , 255 ) , 120 , CONSUME_SNACK_EFF ) ;
WEATHER_POWER * CONSUME_MEAL = new WEATHER_POWER ( " Meal " , " Restores all health. Increases Maximum Health by 5. " , CONSUME_MEAL_ANIMATION , CONSUME_MEAL_ANIMATION , - 1002 , 1 , 200 , Pixel ( 147 , 173 , 66 , 255 ) , Pixel ( 255 , 188 , 3 , 255 ) , 120 , CONSUME_SNACK_EFF ) ;
WEATHER_POWER * PETAL_STORM = new WEATHER_POWER ( " Petal Storm " , " Places seeds, causes minor healing. 20+20d " , PETAL_STORM_ANIMATION , PETAL_STORM_ANIMATION , 20 , 20 , 110 , Pixel ( 189 , 132 , 189 , 255 ) , Pixel ( 235 , 75 , 235 , 255 ) , 120 , PETAL_STORM_EFF ) ;
WEATHER_POWER * PETAL_STORM = new WEATHER_POWER ( " Petal Storm " , " Places seeds, causes minor healing. 20+1d20 " , PETAL_STORM_ANIMATION , PETAL_STORM_ANIMATION , 20 , 20 , 110 , Pixel ( 189 , 132 , 189 , 255 ) , Pixel ( 235 , 75 , 235 , 255 ) , 120 , PETAL_STORM_EFF ) ;
WEATHER_POWER * ACID_RAIN = new WEATHER_POWER ( " Acid Rain " , " " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 20 , 10 , 150 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , ACID_RAIN_EFF ) ;
WEATHER_POWER * DROUGHT = new WEATHER_POWER ( " Drought " , " Halves healing effects for the next turn. " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 8 , 3 , 150 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , DROUGHT_EFF ) ;
WEATHER_POWER * HEAT_WAVE = new WEATHER_POWER ( " Heat Wave " , " " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 25 , 10 , 150 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , HEAT_WAVE_EFF ) ;
WEATHER_POWER * TORNADO = new WEATHER_POWER ( " Tornado " , " " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 30 , 10 , 150 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , TORNADO_EFF ) ;
WEATHER_POWER * GUST = new WEATHER_POWER ( " Gust " , " " , POWER_HURRICANE_ANIMATION , POWER_HURRICANE_ANIMATION , 15 , 10 , 150 , Pixel ( 99 , 148 , 132 , 255 ) , Pixel ( 121 , 132 , 140 , 255 ) , 120 , GUST_EFF ) ;
WEATHER_POWER * FLASH_FLOOD = new WEATHER_POWER ( " Flash Flood " , " Causes massive seed growth and heavy damage. 30+1d20 " , POWER_FLASHFLOOD_ANIMATION , POWER_FLASHFLOOD_ANIMATION , 30 , 20 , 200 , Pixel ( 27 , 41 , 87 , 255 ) , Pixel ( 138 , 161 , 237 , 255 ) , 120 , FLASH_FLOOD_EFF ) ;
WEATHER_POWER * SUNNY_DAY = new WEATHER_POWER ( " Sunny Day " , " Fertilize soil, multiplying seed growth and causing trees to drop seeds. 10+1d10 " , POWER_SUNNYDAY_ANIMATION , POWER_SUNNYDAY_ANIMATION , 10 , 10 , 200 , Pixel ( 27 , 41 , 87 , 255 ) , Pixel ( 138 , 161 , 237 , 255 ) , 120 , SUNNYDAY_EFF ) ;
bool IN_BATTLE_ENCOUNTER = false ;
int BATTLE_ENTRY_TIMER = 0 ;
int EFFECT_TIMER = 0 ;
@ -540,19 +565,26 @@ public:
std : : string MENU_OPTIONS [ 4 ] = { " NEW GAME " , " CONTINUE " , " MUTE SOUND " , " EXIT " } ;
int BATTLE_REASON_CODE = - 1 ;
Map * MAP_1 = new Map ( " map1 " ) ;
Map * MAP_2 = new Map ( " map2 " ) ;
Decal * DOME_DECAL , * FOOD_METER_DECAL , * OXYGEN_METER_DECAL , * PLANT_DECAL ,
* PLAYER_DECAL ,
* WEATHERNODE_EFFECT_DECAL , * POWER_HAILSTORM_DECAL , * POWER_HURRICANE_DECAL , * POWER_METEOR_SHOWER_DECAL , * POWER_METEOR_STORM_DECAL , * POWER_SNOWSTORM_DECAL ,
* SPIDEY_DECAL , * TARGETING_CIRCLE , * TARGETING_RANGE_CIRCLE , * HEALTHBAR_DECAL ,
* CONSUME_SNACK_DECAL , * CONSUME_MEAL_DECAL , * COMPUTER_DECAL , * BROKEN_ROVER_DECAL ,
* NADO_DECAL , * SILICON_ROCK_DECAL , * PETAL_STORM_DECAL , * ROVER_DECAL , * X_X_DECAL ,
* LATER_THAT_NIGHT_DECAL , * SLEEP_DECAL , * SEED_DECAL , * TREE_DECAL , * X_X_UNCHARGED_DECAL ;
* LATER_THAT_NIGHT_DECAL , * SLEEP_DECAL , * SEED_DECAL , * TREE_DECAL , * X_X_UNCHARGED_DECAL ,
* SANDWORM_DECAL , * SNAKE_DECAL , * MOTH_DECAL , * FLASH_FLOOD_DECAL ;
std : : map < std : : string , ObjectLoadInfo * > BASE_OBJECTS ;
std : : vector < Encounter > ENCOUNTERS ;
Encounter ENCOUNTER_SPIDEY_1 ;
Encounter ENCOUNTER_X_X ;
Encounter CURRENT_ENCOUNTER ;
std : : vector < WEATHER_POWER * > MOVESET_SPIDEY ;
std : : vector < WEATHER_POWER * > MOVESET_SANDWORM ;
std : : vector < WEATHER_POWER * > MOVESET_SNAKE ;
std : : vector < WEATHER_POWER * > MOVESET_MOTH ;
std : : vector < WEATHER_POWER * > MOVESET_X_X ;
std : : vector < WEATHER_POWER * > MOVESET_XMINION ;
std : : vector < Seed * > SEEDS ;
@ -564,6 +596,8 @@ public:
int SEED_COUNT = 0 ;
vf2d BATTLE_PLAYER_COORDS ;
Map * CURRENT_MAP = MAP_1 ;
sound : : Wave SONG_MAIN ;
@ -637,6 +671,11 @@ public:
SLEEP_DECAL = new Decal ( new Sprite ( " assets/sleep.png " ) ) ;
SEED_DECAL = new Decal ( new Sprite ( " assets/seed.png " ) ) ;
TREE_DECAL = new Decal ( new Sprite ( " assets/tree.png " ) ) ;
SANDWORM_DECAL = new Decal ( new Sprite ( " assets/sandworm.png " ) ) ;
MOTH_DECAL = new Decal ( new Sprite ( " assets/moth.png " ) ) ;
SNAKE_DECAL = new Decal ( new Sprite ( " assets/snake.png " ) ) ;
FLASH_FLOOD_DECAL = new Decal ( new Sprite ( " assets/flashflood_icon.png " ) ) ;
SUNNY_DAY_DECAL = new Decal ( new Sprite ( " assets/sunny_day.png " ) ) ;
current_playerAnim - > spr = PLAYER_DECAL ;
playerAnim - > spr = PLAYER_DECAL ;
@ -733,6 +772,16 @@ public:
EMPTY_BED_ANIMATION - > frames . push_back ( { 0 , 0 } ) ;
EMPTY_BED_ANIMATION - > skip_frames = 1 ;
EMPTY_BED_ANIMATION - > height = 64 ;
POWER_FLASHFLOOD_ANIMATION - > spr = FLASH_FLOOD_DECAL ;
for ( int i = 0 ; i < 3 ; i + + ) {
POWER_FLASHFLOOD_ANIMATION - > frames . push_back ( { i * 32 , 0 } ) ;
}
POWER_FLASHFLOOD_ANIMATION - > skip_frames = nodeAnimationSkipFrames ;
POWER_SUNNYDAY_ANIMATION - > spr = SUNNY_DAY_DECAL ;
for ( int i = 0 ; i < 3 ; i + + ) {
POWER_SUNNYDAY_ANIMATION - > frames . push_back ( { i * 32 , 0 } ) ;
}
POWER_SUNNYDAY_ANIMATION - > skip_frames = nodeAnimationSkipFrames ;
HAILSTORM - > playerOwnCount = 3 ;
HURRICANE - > playerOwnCount = 1 ;
@ -749,6 +798,17 @@ public:
MOVESET_SPIDEY . push_back ( SEED_STORM ) ;
MOVESET_SPIDEY . push_back ( AVALANCHE ) ;
MOVESET_MOTH . push_back ( GUST ) ;
MOVESET_MOTH . push_back ( GUST ) ;
MOVESET_MOTH . push_back ( TORNADO ) ;
MOVESET_SANDWORM . push_back ( SANDSTORM ) ;
MOVESET_SANDWORM . push_back ( HEAT_WAVE ) ;
MOVESET_SANDWORM . push_back ( DROUGHT ) ;
MOVESET_SNAKE . push_back ( ACID_RAIN ) ;
MOVESET_SNAKE . push_back ( SANDSTORM ) ;
MOVESET_X_X . push_back ( LIGHT_STORM ) ;
MOVESET_X_X . push_back ( SEED_BULLET ) ;
MOVESET_X_X . push_back ( SEED_OF_LIFE ) ;
@ -775,6 +835,7 @@ public:
ENCOUNTER_SPIDEY_1 . y = 47 ;
ENCOUNTER_SPIDEY_1 . playerX = 4 ;
ENCOUNTER_SPIDEY_1 . playerY = 3 ;
ENCOUNTER_SPIDEY_1 . map = MAP_1 ;
ENCOUNTERS . push_back ( ENCOUNTER_SPIDEY_1 ) ;
ENCOUNTER_X_X . entities . push_back ( new Entity ( X_X_DECAL , " X_X " , 3 , 2.5 , 590 , 590 , MOVESET_X_X , { 2 , 2 } , true ) ) ;
ENCOUNTER_X_X . entities . push_back ( new Entity ( X_X_DECAL , " X Minion " , 1 , 4 , 0 , 80 , MOVESET_XMINION , { 0.7 , 0.7 } ) ) ;
@ -784,6 +845,7 @@ public:
ENCOUNTER_X_X . y = 35 ;
ENCOUNTER_X_X . playerX = 3 ;
ENCOUNTER_X_X . playerY = 2 ;
ENCOUNTER_X_X . map = MAP_1 ;
//ENCOUNTERS.push_back(ENCOUNTER_X_X); //Activate at beginning of Chapter 2.
BASE_OBJECTS [ " DOME " ] = new ObjectLoadInfo ( DOME_DECAL ) ;
@ -1098,7 +1160,7 @@ public:
}
switch ( CURRENT_CUTSCENE ) {
case cutscene : : TRANSITION_CUTSCENE : {
LoadMap ( " assets/maps/map1 " ) ;
LoadMap ( MAP_1 ) ;
PLAYER_COORDS [ 0 ] = 40.5 ;
PLAYER_COORDS [ 1 ] = 37.5 ;
fadeIn ( ) ;
@ -1119,7 +1181,7 @@ public:
}
}
}
LoadMap ( " assets/maps/map2 " ) ;
LoadMap ( MAP_2 ) ;
TeleportToMapFileCoords ( 8 , 17 ) ;
fadeIn ( ) ;
EndCutscene ( ) ;
@ -1186,7 +1248,7 @@ public:
ResetTerminal ( STORY_TEXT2 ) ;
} break ;
case cutscene : : CUTSCENE_4 : {
LoadMap ( " assets/maps/map2 " ) ;
LoadMap ( MAP_2 ) ;
PLAYER_COORDS [ 0 ] = 16 ;
PLAYER_COORDS [ 1 ] = 6 ;
} break ;
@ -1415,10 +1477,10 @@ public:
}
}
if ( ! IN_BATTLE_ENCOUNTER & & MAP_NAME . compare ( " assets/maps/map1 " ) = = 0 ) {
if ( ! IN_BATTLE_ENCOUNTER ) {
for ( int i = 0 ; i < ENCOUNTERS . size ( ) ; i + + ) {
Encounter enc = ENCOUNTERS [ i ] ;
if ( collidesWithPlayer ( enc ) ) {
if ( enc . map = = CURRENT_MAP & & collidesWithPlayer ( enc ) ) {
for ( int i = 0 ; i < WEATHER_POWER_COUNT ; i + + ) {
if ( WEATHER_POWERS [ i ] - > name . compare ( " Snack " ) = = 0 | | WEATHER_POWERS [ i ] - > name . compare ( " Meal " ) = = 0 ) {
WEATHER_POWERS [ i ] - > playerOwnCount = foodCount ;
@ -2325,6 +2387,7 @@ public:
}
}
for ( auto & enc : ENCOUNTERS ) {
if ( enc . map = = CURRENT_MAP ) {
int targetX = - 1 , targetY = - 1 ;
for ( auto & ent : enc . entities ) {
if ( BATTLE_STATE = = battle : : PLAYER_TARGET_SELECTION & & PLAYER_SELECTED_TARGET > = 0 & & CURRENT_ENCOUNTER . entities [ PLAYER_SELECTED_TARGET ] - > hp > 0 & & CURRENT_ENCOUNTER . entities [ PLAYER_SELECTED_TARGET ] - > x = = ent - > x & & CURRENT_ENCOUNTER . entities [ PLAYER_SELECTED_TARGET ] - > y = = ent - > y ) {
@ -2345,6 +2408,7 @@ public:
}
}
}
}
void DrawHealthbar ( vf2d pos , float width , float pct , Pixel col ) {
GradientFillRectDecal ( pos , { width * pct , 8 } , RED , RED , Pixel ( ( 1 / pct ) * 255 , 255 * pct , 0 , 255 ) , Pixel ( ( 1 / pct ) * 255 , 255 * pct , 0 , 255 ) ) ;
@ -2444,10 +2508,10 @@ public:
messageBoxRefText = split3 ;
}
void LoadMap ( char * mapName ) {
std : : ifstream f ( mapN ame) ;
void LoadMap ( Map * map ) {
std : : ifstream f ( " assets/maps/ " + map - > filen ame) ;
std : : string data ;
MAP_NAME = mapName ;
CURRENT_ MAP= map ;
MAP_WIDTH = MAP_HEIGHT = - 1 ;
if ( MAP ! = NULL ) {
for ( int y = 0 ; y < MAP_HEIGHT ; y + + ) {
@ -2671,7 +2735,7 @@ public:
for ( int i = 0 ; i < CURRENT_ENCOUNTER . entities . size ( ) ; i + + ) {
finalDamage = power - > damage + rand ( ) % power - > damageRoll * sign ( power - > damage ) ;
Entity * ent = CURRENT_ENCOUNTER . entities [ i ] ;
if ( distancetoCoords ( { ( float ) ( ( ent - > x + CURRENT_ENCOUNTER . x ) * 32 ) , ( float ) ( ( ent - > y + CURRENT_ENCOUNTER . y ) * 32 ) } , coords * 32 ) < = power - > range ) {
if ( distancetoCoords ( { ( float ) ( ( ent - > x + CURRENT_ENCOUNTER . x ) * 32 ) + ent - > spr - > sprite - > width / 2 , ( float ) ( ( ent - > y + CURRENT_ENCOUNTER . y ) * 32 ) + ent - > spr - > sprite - > height / 2 } , coords * 32 ) < = power - > range ) {
ent - > hp = std : : clamp ( ent - > hp - finalDamage , 0 , ent - > maxhp ) ;
CreateDisplayNumber ( finalDamage , ent - > x + CURRENT_ENCOUNTER . x + ent - > spr - > sprite - > width * ent - > sprScale . x / 2 / 32 , ent - > y + CURRENT_ENCOUNTER . y + ent - > spr - > sprite - > height * ent - > sprScale . y / 2 / 32 , frameCount ) ;
ent - > damageFrame = frameCount ;
@ -2685,7 +2749,7 @@ public:
finalDamage = power - > damage + rand ( ) % power - > damageRoll * sign ( power - > damage ) ;
Entity * ent = CURRENT_ENCOUNTER . entities [ i ] ;
std : : cout < < " Distance was " < < distancetoCoords ( { ( float ) ( ( ent - > x + CURRENT_ENCOUNTER . x ) * 32 ) , ( float ) ( ( ent - > y + CURRENT_ENCOUNTER . y ) * 32 ) } , coords * 32 ) < < " \n " ;
if ( ent - > hp > 0 & & distancetoCoords ( { ( float ) ( ( ent - > x + CURRENT_ENCOUNTER . x ) * 32 ) , ( float ) ( ( ent - > y + CURRENT_ENCOUNTER . y ) * 32 ) } , coords * 32 ) < = power - > range ) {
if ( ent - > hp > 0 & & distancetoCoords ( { ( float ) ( ( ent - > x + CURRENT_ENCOUNTER . x ) * 32 ) + ent - > spr - > sprite - > width / 2 , ( float ) ( ( ent - > y + CURRENT_ENCOUNTER . y ) * 32 ) + ent - > spr - > sprite - > height / 2 } , coords * 32 ) < = power - > range ) {
ent - > hp = std : : clamp ( ent - > hp - finalDamage , 0 , ent - > maxhp ) ;
CreateDisplayNumber ( finalDamage , ent - > x + CURRENT_ENCOUNTER . x + ent - > spr - > sprite - > width * ent - > sprScale . x / 2 / 32 , ent - > y + CURRENT_ENCOUNTER . y + ent - > spr - > sprite - > height * ent - > sprScale . y / 2 / 32 , frameCount ) ;
ent - > damageFrame = frameCount ;