Added bridge collision to FALLING_BLOCK

This commit is contained in:
wolfcheese 2021-06-16 10:19:46 -04:00
parent b87c296986
commit d878cd1c9e
3 changed files with 64 additions and 24 deletions

View file

@ -307,6 +307,7 @@ void LavaBurn(ITEM_INFO* item)
void InitialiseFallingBlock(short itemNumber) void InitialiseFallingBlock(short itemNumber)
{ {
g_Level.Items[itemNumber].meshBits = 1; g_Level.Items[itemNumber].meshBits = 1;
T5M::Floordata::AddBridge(itemNumber);
} }
void FallingBlockCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll) void FallingBlockCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
@ -367,28 +368,61 @@ void FallingBlockControl(short itemNumber)
} }
} }
void FallingBlockFloor(ITEM_INFO* item, int x, int y, int z, int* height) //void FallingBlockFloor(ITEM_INFO* item, int x, int y, int z, int* height)
//{
// if (!((x ^ item->pos.xPos) & 0xFFFFFC00) && !((z ^ item->pos.zPos) & 0xFFFFFC00))
// {
// if (y <= item->pos.yPos)
// {
// *height = item->pos.yPos;
// HeightType = WALL;
// OnFloor = 1;
// }
// }
//}
//
//void FallingBlockCeiling(ITEM_INFO* item, int x, int y, int z, int* height)
//{
// if (!((x ^ item->pos.xPos) & 0xFFFFFC00) && !((z ^ item->pos.zPos) & 0xFFFFFC00))
// {
// if (y > item->pos.yPos)
// {
// *height = item->pos.yPos + 256;
// }
// }
//}
std::optional<int> FallingBlockFloor(short itemNumber, int x, int y, int z)
{ {
if (!((x ^ item->pos.xPos) & 0xFFFFFC00) && !((z ^ item->pos.zPos) & 0xFFFFFC00)) ITEM_INFO* item = &g_Level.Items[itemNumber];
{ if (!item->meshBits || item->itemFlags[0] >= 52)
if (y <= item->pos.yPos) return std::nullopt;
{
*height = item->pos.yPos; int height = item->pos.yPos;
HeightType = WALL; return std::optional{ height };
OnFloor = 1;
}
}
} }
void FallingBlockCeiling(ITEM_INFO* item, int x, int y, int z, int* height) std::optional<int> FallingBlockCeiling(short itemNumber, int x, int y, int z)
{ {
if (!((x ^ item->pos.xPos) & 0xFFFFFC00) && !((z ^ item->pos.zPos) & 0xFFFFFC00)) ITEM_INFO* item = &g_Level.Items[itemNumber];
{
if (y > item->pos.yPos) if (!item->meshBits || item->itemFlags[0] >= 52)
{ return std::nullopt;
*height = item->pos.yPos + 256;
} int height = item->pos.yPos + 256;
} return std::optional{ height };
}
int FallingBlockFloorBorder(short itemNumber)
{
ITEM_INFO* item = &g_Level.Items[itemNumber];
return item->pos.yPos;
}
int FallingBlockCeilingBorder(short itemNumber)
{
ITEM_INFO* item = &g_Level.Items[itemNumber];
return (item->pos.yPos + 256);
} }
void InitialiseWreckingBall(short itemNumber) void InitialiseWreckingBall(short itemNumber)

View file

@ -13,8 +13,10 @@ void FlameEmitterControl(short itemNumber);
void InitialiseFallingBlock(short itemNumber); void InitialiseFallingBlock(short itemNumber);
void FallingBlockCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll); void FallingBlockCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
void FallingBlockControl(short itemNumber); void FallingBlockControl(short itemNumber);
void FallingBlockFloor(ITEM_INFO* item, int x, int y, int z, int* height); std::optional<int> FallingBlockFloor(short itemNumber, int x, int y, int z);
void FallingBlockCeiling(ITEM_INFO* item, int x, int y, int z, int* height); std::optional<int> FallingBlockCeiling(short itemNumber, int x, int y, int z);
int FallingBlockFloorBorder(short itemNumber);
int FallingBlockCeilingBorder(short itemNumber);
void InitialiseWreckingBall(short itemNumber); void InitialiseWreckingBall(short itemNumber);
void WreckingBallCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll); void WreckingBallCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll);
void WreckingBallControl(short itemNumber); void WreckingBallControl(short itemNumber);

View file

@ -492,8 +492,10 @@ void TrapObjects()
obj->initialise = InitialiseFallingBlock; obj->initialise = InitialiseFallingBlock;
obj->collision = FallingBlockCollision; obj->collision = FallingBlockCollision;
obj->control = FallingBlockControl; obj->control = FallingBlockControl;
//obj->floor = FallingBlockFloor; obj->floor = FallingBlockFloor;
//obj->ceiling = FallingBlockCeiling; obj->ceiling = FallingBlockCeiling;
obj->floorBorder = FallingBlockFloorBorder;
obj->ceilingBorder = FallingBlockCeilingBorder;
obj->saveFlags = true; obj->saveFlags = true;
obj->savePosition = true; obj->savePosition = true;
} }
@ -504,8 +506,10 @@ void TrapObjects()
obj->initialise = InitialiseFallingBlock; obj->initialise = InitialiseFallingBlock;
obj->collision = FallingBlockCollision; obj->collision = FallingBlockCollision;
obj->control = FallingBlockControl; obj->control = FallingBlockControl;
//obj->floor = FallingBlockFloor; obj->floor = FallingBlockFloor;
//obj->ceiling = FallingBlockCeiling; obj->ceiling = FallingBlockCeiling;
obj->floorBorder = FallingBlockFloorBorder;
obj->ceilingBorder = FallingBlockCeilingBorder;
obj->saveFlags = true; obj->saveFlags = true;
obj->savePosition = true; obj->savePosition = true;
} }