|
|
|
@ -7,6 +7,10 @@ |
|
|
|
|
|
|
|
|
|
using namespace olc; |
|
|
|
|
|
|
|
|
|
#define STARTING_MAP "assets/maps/map1" |
|
|
|
|
#define STARTING_STATE CUTSCENE_1 |
|
|
|
|
#define MOVE_SPD 0.1 |
|
|
|
|
|
|
|
|
|
enum GAMESTATE{ |
|
|
|
|
CUTSCENE_1, |
|
|
|
|
CUTSCENE_2, |
|
|
|
@ -24,7 +28,9 @@ namespace cutscene{ |
|
|
|
|
CUTSCENE_4, |
|
|
|
|
TRANSITION_CUTSCENE, //Exit the dome.
|
|
|
|
|
TRANSITION_CUTSCENE_2, //Enter the dome.
|
|
|
|
|
NODE_COLLECT_CUTSCENE |
|
|
|
|
NODE_COLLECT_CUTSCENE, |
|
|
|
|
PAN_OVER_TO_CROPS, |
|
|
|
|
RAINING_IN_DOME, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -47,7 +53,6 @@ namespace battle{ |
|
|
|
|
#define ALPHA_SCREEN1 128 |
|
|
|
|
#define ALPHA_SCREEN2 20 |
|
|
|
|
#define FADE_SPD 6 |
|
|
|
|
#define MOVE_SPD 0.1 |
|
|
|
|
#define MESSAGE_SCROLL_WAIT_SPD 2 //Number of frames to wait.
|
|
|
|
|
#define BATTLE_CAMERA_SCROLL_SPD 0.05 //How fast to scroll over to the battle.
|
|
|
|
|
|
|
|
|
@ -87,6 +92,9 @@ class ObjectLoadInfo{ |
|
|
|
|
Decal*spr; |
|
|
|
|
bool hasanim=false; |
|
|
|
|
Animation*anim; |
|
|
|
|
vi2d spos; |
|
|
|
|
vi2d size; |
|
|
|
|
bool hascut=false; |
|
|
|
|
ObjectLoadInfo(Decal*spr) { |
|
|
|
|
this->spr=spr; |
|
|
|
|
} |
|
|
|
@ -96,6 +104,12 @@ class ObjectLoadInfo{ |
|
|
|
|
this->hasanim=true; |
|
|
|
|
updateAnimationsList.push_back(anim); |
|
|
|
|
} |
|
|
|
|
ObjectLoadInfo(Decal*spr,vi2d spos,vi2d size) { |
|
|
|
|
this->spr=spr; |
|
|
|
|
this->hascut=true; |
|
|
|
|
this->spos=spos; |
|
|
|
|
this->size=size; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
class Object{ |
|
|
|
@ -105,6 +119,9 @@ class Object{ |
|
|
|
|
std::string name; |
|
|
|
|
bool hasAnim=false; |
|
|
|
|
Animation*anim; |
|
|
|
|
vi2d spos; |
|
|
|
|
vi2d size; |
|
|
|
|
bool hascut=false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
class ParticleEffect{ |
|
|
|
@ -229,10 +246,9 @@ public: |
|
|
|
|
sAppName = "Seasons of Loneliness"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define STARTING_MAP "assets/maps/map2" |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
GAMESTATE GAME_STATE=GAMEWORLD; |
|
|
|
|
GAMESTATE GAME_STATE=STARTING_STATE; |
|
|
|
|
int textInd=0; |
|
|
|
|
int cursorX=0; |
|
|
|
|
int transitionTime=0; |
|
|
|
@ -248,7 +264,7 @@ public: |
|
|
|
|
int MAP_HEIGHT=-1; |
|
|
|
|
Decal*TILES; |
|
|
|
|
float PLAYER_COORDS[2] = {14,4}; |
|
|
|
|
std::vector<Object> OBJECTS; |
|
|
|
|
std::vector<Object*> OBJECTS; |
|
|
|
|
bool CUTSCENE_ACTIVE=false; |
|
|
|
|
cutscene::CUTSCENE CURRENT_CUTSCENE=cutscene::NONE; |
|
|
|
|
int CUTSCENE_TIMER=0; |
|
|
|
@ -485,6 +501,7 @@ public: |
|
|
|
|
BASE_OBJECTS["METEORSHOWER_NODE"]=new ObjectLoadInfo(POWER_METEOR_SHOWER_DECAL,&POWER_METEOR_SHOWER_ANIMATION); |
|
|
|
|
BASE_OBJECTS["METEORSTORM_NODE"]=new ObjectLoadInfo(POWER_METEOR_STORM_DECAL,&POWER_METEOR_STORM_ANIMATION); |
|
|
|
|
BASE_OBJECTS["SNOWSTORM_NODE"]=new ObjectLoadInfo(POWER_SNOWSTORM_DECAL,&POWER_SNOWSTORM_ANIMATION); |
|
|
|
|
BASE_OBJECTS["PLAYER_BACK"]=new ObjectLoadInfo(PLAYER_DECAL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i=0;i<MAX_PIXELS;i++) { |
|
|
|
@ -780,55 +797,62 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i=0;i<OBJECTS.size();i++) { |
|
|
|
|
Object obj = OBJECTS[i]; |
|
|
|
|
if (obj.name.compare("HAILSTORM_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
HAILSTORM->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased HAILSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(HAILSTORM); |
|
|
|
|
} else |
|
|
|
|
if (obj.name.compare("HURRICANE_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
HURRICANE->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased HURRICANE power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(HURRICANE); |
|
|
|
|
} else |
|
|
|
|
if (obj.name.compare("METEORSHOWER_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
METEOR_RAIN->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased METEORSHOWER power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(METEOR_RAIN); |
|
|
|
|
} else |
|
|
|
|
if (obj.name.compare("METEORSTORM_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
METEOR_STORM->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased METEORSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(METEOR_STORM); |
|
|
|
|
} else |
|
|
|
|
if (obj.name.compare("SNOWSTORM_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
SNOWSTORM->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased SNOWSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(SNOWSTORM); |
|
|
|
|
} else |
|
|
|
|
if (obj.name.compare("EXIT")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
fadeOut(); |
|
|
|
|
PlayCutscene(cutscene::TRANSITION_CUTSCENE); |
|
|
|
|
} else |
|
|
|
|
if (obj.name.compare("DOME")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
fadeOut(); |
|
|
|
|
PlayCutscene(cutscene::TRANSITION_CUTSCENE_2); |
|
|
|
|
if (playerCanMove()) { |
|
|
|
|
for (int i=0;i<OBJECTS.size();i++) { |
|
|
|
|
Object*obj = OBJECTS[i]; |
|
|
|
|
if (obj->name.compare("HAILSTORM_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
HAILSTORM->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased HAILSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
delete obj; |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(HAILSTORM); |
|
|
|
|
} else |
|
|
|
|
if (obj->name.compare("HURRICANE_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
HURRICANE->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased HURRICANE power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
delete obj; |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(HURRICANE); |
|
|
|
|
} else |
|
|
|
|
if (obj->name.compare("METEORSHOWER_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
METEOR_RAIN->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased METEORSHOWER power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
delete obj; |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(METEOR_RAIN); |
|
|
|
|
} else |
|
|
|
|
if (obj->name.compare("METEORSTORM_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
METEOR_STORM->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased METEORSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
delete obj; |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(METEOR_STORM); |
|
|
|
|
} else |
|
|
|
|
if (obj->name.compare("SNOWSTORM_NODE")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
int amountGained=rand()%4+2; |
|
|
|
|
SNOWSTORM->playerOwnCount+=amountGained; |
|
|
|
|
std::cout<<"Increased SNOWSTORM power inventory count by "<<amountGained<<".\n"; |
|
|
|
|
OBJECTS.erase(OBJECTS.begin()+i--); |
|
|
|
|
delete obj; |
|
|
|
|
performCropUpdate(8); |
|
|
|
|
displayPowerInfo(SNOWSTORM); |
|
|
|
|
} else |
|
|
|
|
if (obj->name.compare("EXIT")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
fadeOut(); |
|
|
|
|
PlayCutscene(cutscene::TRANSITION_CUTSCENE); |
|
|
|
|
} else |
|
|
|
|
if (obj->name.compare("DOME")==0&&collidesWithPlayer(obj)) { |
|
|
|
|
fadeOut(); |
|
|
|
|
PlayCutscene(cutscene::TRANSITION_CUTSCENE_2); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1039,15 +1063,8 @@ public: |
|
|
|
|
CUTSCENE_FLAGS[1]=true; |
|
|
|
|
DisplayMessageBox(1); |
|
|
|
|
} else |
|
|
|
|
if (!CUTSCENE_FLAGS[2]) { |
|
|
|
|
CUTSCENE_FLAGS[2]=true; |
|
|
|
|
DisplayMessageBox(2); |
|
|
|
|
foodMeterVisible=true; |
|
|
|
|
} else |
|
|
|
|
if (!CUTSCENE_FLAGS[3]) { |
|
|
|
|
CUTSCENE_FLAGS[3]=true; |
|
|
|
|
DisplayMessageBox(3); |
|
|
|
|
oxygenMeterVisible=true; |
|
|
|
|
{ |
|
|
|
|
PlayCutscene(cutscene::PAN_OVER_TO_CROPS); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}break; |
|
|
|
@ -1282,23 +1299,26 @@ public: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (auto&obj:OBJECTS) { |
|
|
|
|
if (obj.spr!=NULL) { |
|
|
|
|
if (obj.name.compare("PLANT")==0) { |
|
|
|
|
DrawPartialDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},{32,32},obj.spr,{getPlantStatus(obj.x,obj.y)*32,0},{32,32}); |
|
|
|
|
if (obj->spr!=NULL) { |
|
|
|
|
if (obj->name.compare("PLANT")==0) { |
|
|
|
|
DrawPartialDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2,(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2},{32,32},obj->spr,{getPlantStatus(obj->x,obj->y)*32,0},{32,32}); |
|
|
|
|
} else { |
|
|
|
|
if (obj.name.find("NODE")!=std::string::npos) { |
|
|
|
|
DrawDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2-32+18,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2-32+26},WEATHERNODE_EFFECT_DECAL); |
|
|
|
|
DrawPartialDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2-16*(float)sin(frameCount*2/60.0)+16,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},obj.anim->spr,{obj.anim->getCurrentFrame().x,obj.anim->getCurrentFrame().y},{obj.anim->width,obj.anim->height},{(float)sin(frameCount*2/60.0),1},Pixel((float)sin(frameCount*4/60.0)*55+200,(float)sin(frameCount*4/60.0)*55+200,(float)sin(frameCount*4/60.0+M_PI)+65*125,255)); |
|
|
|
|
if (obj->name.find("NODE")!=std::string::npos) { |
|
|
|
|
DrawDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2-32+18,(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2-32+26},WEATHERNODE_EFFECT_DECAL); |
|
|
|
|
DrawPartialDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2-16*(float)sin(frameCount*2/60.0)+16,(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2},obj->anim->spr,{obj->anim->getCurrentFrame().x,obj->anim->getCurrentFrame().y},{obj->anim->width,obj->anim->height},{(float)sin(frameCount*2/60.0),1},Pixel((float)sin(frameCount*4/60.0)*55+200,(float)sin(frameCount*4/60.0)*55+200,(float)sin(frameCount*4/60.0+M_PI)+65*125,255)); |
|
|
|
|
} else |
|
|
|
|
if (obj.hasAnim) { |
|
|
|
|
DrawPartialDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2+(obj.anim->flipped?32:0),(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},obj.anim->spr,{obj.anim->getCurrentFrame().x,obj.anim->getCurrentFrame().y},{obj.anim->width,obj.anim->height},{obj.anim->flipped?-1:1,1}); |
|
|
|
|
if (obj->hasAnim) { |
|
|
|
|
DrawPartialDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2+(obj->anim->flipped?32:0),(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2},obj->anim->spr,{obj->anim->getCurrentFrame().x,obj->anim->getCurrentFrame().y},{obj->anim->width,obj->anim->height},{obj->anim->flipped?-1:1,1}); |
|
|
|
|
} else
|
|
|
|
|
if (obj->hascut) { |
|
|
|
|
DrawPartialDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2,(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2},obj->spr,obj->spos,{obj->anim->width,obj->anim->height},{obj->anim->flipped?-1:1,1}); |
|
|
|
|
} else { |
|
|
|
|
DrawDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},obj.spr); |
|
|
|
|
DrawDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2,(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2},obj->spr); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else
|
|
|
|
|
if (obj.name.compare("EXIT")==0) { |
|
|
|
|
GradientFillRectDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},{32,32},Pixel(0,0,0,0),WHITE,WHITE,Pixel(0,0,0,0)); |
|
|
|
|
if (obj->name.compare("EXIT")==0) { |
|
|
|
|
GradientFillRectDecal({(obj->x-PLAYER_COORDS[0])*32+WIDTH/2,(obj->y-PLAYER_COORDS[1])*32+HEIGHT/2},{32,32},Pixel(0,0,0,0),WHITE,WHITE,Pixel(0,0,0,0)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (auto&enc:ENCOUNTERS) { |
|
|
|
@ -1388,6 +1408,9 @@ public: |
|
|
|
|
free(MAP); |
|
|
|
|
MAP=NULL; |
|
|
|
|
} |
|
|
|
|
for (int i=0;i<OBJECTS.size();i++) { |
|
|
|
|
delete OBJECTS[i]; |
|
|
|
|
} |
|
|
|
|
OBJECTS.clear(); |
|
|
|
|
|
|
|
|
|
int y=0; |
|
|
|
@ -1412,23 +1435,23 @@ public: |
|
|
|
|
} |
|
|
|
|
y++; |
|
|
|
|
} else { |
|
|
|
|
Object obj; |
|
|
|
|
Object*obj; |
|
|
|
|
std::stringstream split1(data.substr(0,data.find(';'))); |
|
|
|
|
split1>>obj.x; |
|
|
|
|
split1>>obj->x; |
|
|
|
|
std::stringstream split2(data.substr(data.find(';')+1,data.find(';',data.find(";")+1)-(data.find(';')+1))); |
|
|
|
|
split2>>obj.y; |
|
|
|
|
split2>>obj->y; |
|
|
|
|
std::string split3 = data.substr(data.find(';',data.find(";")+1)+1,data.length()-(data.find(';',data.find(";")+1)+1)); |
|
|
|
|
if (split3.compare("NULL")!=0) { |
|
|
|
|
obj.spr=BASE_OBJECTS[split3]->spr; |
|
|
|
|
obj->spr=BASE_OBJECTS[split3]->spr; |
|
|
|
|
if (BASE_OBJECTS[split3]->hasanim) { |
|
|
|
|
obj.hasAnim=true; |
|
|
|
|
obj.anim=BASE_OBJECTS[split3]->anim; |
|
|
|
|
obj->hasAnim=true; |
|
|
|
|
obj->anim=BASE_OBJECTS[split3]->anim; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
obj.spr=NULL; |
|
|
|
|
obj->spr=NULL; |
|
|
|
|
} |
|
|
|
|
obj.name=split3; |
|
|
|
|
printf("Loaded object %s: (%f,%f)\n",split3.c_str(),obj.x,obj.y); |
|
|
|
|
obj->name=split3; |
|
|
|
|
printf("Loaded object %s: (%f,%f)\n",split3.c_str(),obj->x,obj->y); |
|
|
|
|
OBJECTS.push_back(obj); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1447,17 +1470,17 @@ public: |
|
|
|
|
current_playerAnim.frame=0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool collidesWithPlayer(Object obj) { |
|
|
|
|
if (obj.hasAnim) { |
|
|
|
|
return PLAYER_COORDS[0]>=obj.x&&PLAYER_COORDS[0]<=obj.x+obj.anim->width/32.0&& |
|
|
|
|
PLAYER_COORDS[1]>=obj.y&&PLAYER_COORDS[1]<=obj.y+obj.anim->height/32.0; |
|
|
|
|
bool collidesWithPlayer(Object*obj) { |
|
|
|
|
if (obj->hasAnim) { |
|
|
|
|
return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+obj->anim->width/32.0&& |
|
|
|
|
PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+obj->anim->height/32.0; |
|
|
|
|
} else { |
|
|
|
|
if (obj.spr==NULL) { |
|
|
|
|
return PLAYER_COORDS[0]>=obj.x&&PLAYER_COORDS[0]<=obj.x+1&& |
|
|
|
|
PLAYER_COORDS[1]>=obj.y&&PLAYER_COORDS[1]<=obj.y+1; |
|
|
|
|
if (obj->spr==NULL) { |
|
|
|
|
return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+1&& |
|
|
|
|
PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+1; |
|
|
|
|
} else { |
|
|
|
|
return PLAYER_COORDS[0]>=obj.x&&PLAYER_COORDS[0]<=obj.x+obj.spr->sprite->width/32.0&& |
|
|
|
|
PLAYER_COORDS[1]>=obj.y&&PLAYER_COORDS[1]<=obj.y+obj.spr->sprite->height/32.0; |
|
|
|
|
return PLAYER_COORDS[0]>=obj->x&&PLAYER_COORDS[0]<=obj->x+obj->spr->sprite->width/32.0&& |
|
|
|
|
PLAYER_COORDS[1]>=obj->y&&PLAYER_COORDS[1]<=obj->y+obj->spr->sprite->height/32.0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1742,10 +1765,15 @@ public: |
|
|
|
|
return random(val2-val1)+val1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vi2d GetMapFileCoords(int ln,int col) { |
|
|
|
|
return {col-1,ln-3}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Basically, click on a spot in the text editor and this function translates it into the proper teleport coords so you don't have to.
|
|
|
|
|
void TeleportToMapFileCoords(int ln,int col) { |
|
|
|
|
PLAYER_COORDS[0]=col-1+0.5; |
|
|
|
|
PLAYER_COORDS[1]=ln-3+0.5; |
|
|
|
|
vi2d teleLoc = GetMapFileCoords(ln,col); |
|
|
|
|
PLAYER_COORDS[0]=teleLoc.x+0.5; |
|
|
|
|
PLAYER_COORDS[1]=teleLoc.y+0.5; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|