mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2026-01-29 17:38:16 +03:00
Bounds check all entity getters that can return 0
The entity getters I'm referring to are entityclass::getscm(), entityclass::getlineat(), entityclass::getcrewman(), and entityclass::getcustomcrewman(). Even though the player should always exist, and the player should always be indice 0, I wouldn't want to make that assumption. I've been wrong before. Also, these functions returning 0 lull you into a false sense of security. If you assume that commands using these functions are fine, you'll forget about the fact that `i` in those commands could be potentially anything, given an invalid argument. In fact, it's possible to index createactivityzone(), flipgravity(), and customposition() out-of-bounds by setting `i` to anything! Well, WAS possible. I fixed it so now they can't. Furthermore, in the game.scmmoveme block in gamelogic(), obj.getplayer() wasn't even checked, even though it's been checked in all other places. I only caught it just now because I wanted to bounds-check all usages of obj.getscm(), too, and that game.scmmove block also used obj.getscm() without bounds-checking it as well.
This commit is contained in:
@@ -2813,110 +2813,125 @@ bool entityclass::updateentities( int i )
|
||||
{
|
||||
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
||||
int j=getcrewman(1); //purple
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
if (INBOUNDS_VEC(j, entities))
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (entities[i].state == 12)
|
||||
{
|
||||
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
||||
int j=getcrewman(2); //yellow
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
if (INBOUNDS_VEC(j, entities))
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (entities[i].state == 13)
|
||||
{
|
||||
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
||||
int j=getcrewman(3); //red
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
if (INBOUNDS_VEC(j, entities))
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (entities[i].state == 14)
|
||||
{
|
||||
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
||||
int j=getcrewman(4); //green
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
if (INBOUNDS_VEC(j, entities))
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (entities[i].state == 15)
|
||||
{
|
||||
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
||||
int j=getcrewman(5); //blue
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
if (INBOUNDS_VEC(j, entities))
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
if (entities[j].xp > entities[i].xp + 5)
|
||||
{
|
||||
entities[i].dir = 1;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 5)
|
||||
{
|
||||
entities[i].dir = 0;
|
||||
}
|
||||
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
if (entities[j].xp > entities[i].xp + 45)
|
||||
{
|
||||
entities[i].ax = 3;
|
||||
}
|
||||
else if (entities[j].xp < entities[i].xp - 45)
|
||||
{
|
||||
entities[i].ax = -3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (entities[i].state == 16)
|
||||
|
||||
Reference in New Issue
Block a user