1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-11-05 10:49:41 +01:00

Region system PR review changes

Fixes errors or oversights with the region system for the PR review
This commit is contained in:
mothbeanie 2024-11-03 15:20:33 -08:00 committed by Misa Elizabeth Kai
parent 1fb0afb99d
commit 54b2aaae96
5 changed files with 26 additions and 16 deletions

View file

@ -229,16 +229,6 @@ void Game::init(void)
customcol=0; customcol=0;
map.currentregion = 0;
for (size_t i = 0; i < SDL_arraysize(map.region); i++)
{
map.region[i].isvalid = false;
map.region[i].rx = 0;
map.region[i].ry = 0;
map.region[i].rx2 = 0;
map.region[i].ry2 = 0;
}
SDL_memset(crewstats, false, sizeof(crewstats)); SDL_memset(crewstats, false, sizeof(crewstats));
SDL_memset(ndmresultcrewstats, false, sizeof(ndmresultcrewstats)); SDL_memset(ndmresultcrewstats, false, sizeof(ndmresultcrewstats));
SDL_memset(besttimes, -1, sizeof(besttimes)); SDL_memset(besttimes, -1, sizeof(besttimes));

View file

@ -447,7 +447,7 @@ void GraphicsResources::init(void)
EnumHandle handle = {}; EnumHandle handle = {};
const char* item; const char* item;
char full_item[73]; char full_item[64];
while ((item = FILESYSTEM_enumerateAssets("graphics", &handle)) != NULL) while ((item = FILESYSTEM_enumerateAssets("graphics", &handle)) != NULL)
{ {
if (SDL_strncmp(item, "region", 6) != 0) if (SDL_strncmp(item, "region", 6) != 0)
@ -456,6 +456,11 @@ void GraphicsResources::init(void)
} }
char* end; char* end;
int i = SDL_strtol(&item[6], &end, 10); int i = SDL_strtol(&item[6], &end, 10);
// make sure the region id is actually in bounds!
if (i < 1 || i > 400)
{
continue;
}
if (item == end || SDL_strcmp(end, ".png") != 0) if (item == end || SDL_strcmp(end, ".png") != 0)
{ {
continue; continue;

View file

@ -87,6 +87,9 @@ mapclass::mapclass(void)
roomtexton = false; roomtexton = false;
nexttowercolour_set = false; nexttowercolour_set = false;
currentregion = 0;
SDL_zeroa(region);
} }
static char roomname_static[SCREEN_WIDTH_CHARS]; static char roomname_static[SCREEN_WIDTH_CHARS];
@ -2301,21 +2304,31 @@ MapRenderData mapclass::get_render_data(void)
void mapclass::setregion(int id, int rx, int ry, int rx2, int ry2) void mapclass::setregion(int id, int rx, int ry, int rx2, int ry2)
{ {
if (INBOUNDS_ARR(id, region)) if (INBOUNDS_ARR(id, region) && id > 0)
{ {
region[id].isvalid = true; region[id].isvalid = true;
region[id].rx = SDL_clamp(rx, 0, cl.mapwidth - 1); region[id].rx = SDL_clamp(rx, 0, cl.mapwidth - 1);
region[id].ry = SDL_clamp(ry, 0, cl.mapheight - 1); region[id].ry = SDL_clamp(ry, 0, cl.mapheight - 1);
region[id].rx2 = SDL_clamp(rx2, 0, cl.mapwidth - 1); region[id].rx2 = SDL_clamp(rx2, 0, cl.mapwidth - 1);
region[id].ry2 = SDL_clamp(ry2, 0, cl.mapheight - 1); region[id].ry2 = SDL_clamp(ry2, 0, cl.mapheight - 1);
if (id == currentregion)
{
cl.generatecustomminimap();
}
} }
} }
void mapclass::removeregion(int id) void mapclass::removeregion(int id)
{ {
if (INBOUNDS_ARR(id, region)) if (INBOUNDS_ARR(id, region) && id > 0)
{ {
SDL_zero(region[id]); SDL_zero(region[id]);
if (id == currentregion)
{
cl.generatecustomminimap();
}
} }
} }

View file

@ -213,7 +213,7 @@ public:
int cursorstate, cursordelay; int cursorstate, cursordelay;
//Region system //Region system
struct regionstruct struct Region
{ {
bool isvalid; bool isvalid;
int rx; int rx;
@ -221,7 +221,7 @@ public:
int rx2; int rx2;
int ry2; int ry2;
}; };
struct regionstruct region[401]; struct Region region[401];
void setregion(int id, int rx, int ry, int rx2, int ry2); void setregion(int id, int rx, int ry, int rx2, int ry2);
void removeregion(int id); void removeregion(int id);
void changeregion(int id); void changeregion(int id);

View file

@ -3275,6 +3275,8 @@ void scriptclass::hardreset(void)
SDL_memset(map.roomdeaths, 0, sizeof(map.roomdeaths)); SDL_memset(map.roomdeaths, 0, sizeof(map.roomdeaths));
SDL_memset(map.roomdeathsfinal, 0, sizeof(map.roomdeathsfinal)); SDL_memset(map.roomdeathsfinal, 0, sizeof(map.roomdeathsfinal));
map.resetmap(); map.resetmap();
map.currentregion = 0;
SDL_zeroa(map.region);
//entityclass //entityclass
obj.nearelephant = false; obj.nearelephant = false;
obj.upsetmode = false; obj.upsetmode = false;