mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-13 04:24:39 +00:00
- useSlopeChanger
This commit is contained in:
parent
36d66f14b5
commit
b7c4e4b9fa
2 changed files with 19 additions and 24 deletions
|
@ -3612,7 +3612,7 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
if (!validSectorIndex(pSprite->sectnum)) pSpawned->z = top;
|
if (!validSectorIndex(pSprite->sectnum)) pSpawned->z = top;
|
||||||
else pSpawned->z = (pXSource->data3 == 5) ? sector[pSpawned->sectnum].floorz : sector[pSpawned->sectnum].ceilingz;
|
else pSpawned->z = (pXSource->data3 == 5) ? spawned->sector()->floorz : spawned->sector()->ceilingz;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4726,15 +4726,12 @@ void modernTypeTrigger(int destObjType, sectortype* destSect, walltype* destWall
|
||||||
spritetype* pSource = &pActor->s();
|
spritetype* pSource = &pActor->s();
|
||||||
XSPRITE* pXSource = &pActor->x();
|
XSPRITE* pXSource = &pActor->x();
|
||||||
|
|
||||||
int destObjIndex = -1;
|
|
||||||
switch (destObjType) {
|
switch (destObjType) {
|
||||||
case OBJ_SECTOR:
|
case OBJ_SECTOR:
|
||||||
if (!destSect || !destSect->hasX()) return;
|
if (!destSect || !destSect->hasX()) return;
|
||||||
destObjIndex = sectnum(destSect);
|
|
||||||
break;
|
break;
|
||||||
case OBJ_WALL:
|
case OBJ_WALL:
|
||||||
if (!destWall || !destWall->hasX()) return;
|
if (!destWall || !destWall->hasX()) return;
|
||||||
destObjIndex = wallnum(destWall);
|
|
||||||
break;
|
break;
|
||||||
case OBJ_SPRITE:
|
case OBJ_SPRITE:
|
||||||
{
|
{
|
||||||
|
@ -4788,7 +4785,7 @@ void modernTypeTrigger(int destObjType, sectortype* destSect, walltype* destWall
|
||||||
{
|
{
|
||||||
case OBJ_SPRITE:
|
case OBJ_SPRITE:
|
||||||
case OBJ_SECTOR:
|
case OBJ_SECTOR:
|
||||||
useSlopeChanger(pActor, destObjType, destObjIndex, destactor);
|
useSlopeChanger(pActor, destObjType, destSect, destactor);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -4814,7 +4811,7 @@ void modernTypeTrigger(int destObjType, sectortype* destSect, walltype* destWall
|
||||||
// creates wind on TX ID sector
|
// creates wind on TX ID sector
|
||||||
case kModernWindGenerator:
|
case kModernWindGenerator:
|
||||||
if (destObjType != OBJ_SECTOR || pXSource->data2 < 0) break;
|
if (destObjType != OBJ_SECTOR || pXSource->data2 < 0) break;
|
||||||
useSectorWindGen(pActor, §or[destObjIndex]);
|
useSectorWindGen(pActor, destSect);
|
||||||
break;
|
break;
|
||||||
// size and pan changer of sprite/wall/sector via TX ID
|
// size and pan changer of sprite/wall/sector via TX ID
|
||||||
case kModernObjSizeChanger:
|
case kModernObjSizeChanger:
|
||||||
|
@ -4831,7 +4828,7 @@ void modernTypeTrigger(int destObjType, sectortype* destSect, walltype* destWall
|
||||||
// change sector lighting dynamically
|
// change sector lighting dynamically
|
||||||
case kModernSectorFXChanger:
|
case kModernSectorFXChanger:
|
||||||
if (destObjType != OBJ_SECTOR) break;
|
if (destObjType != OBJ_SECTOR) break;
|
||||||
useSectorLightChanger(pActor, §or[destObjIndex]);
|
useSectorLightChanger(pActor, destSect);
|
||||||
break;
|
break;
|
||||||
// change target of dudes and make it fight
|
// change target of dudes and make it fight
|
||||||
case kModernDudeTargetChanger:
|
case kModernDudeTargetChanger:
|
||||||
|
@ -6528,7 +6525,7 @@ void sprite2sectorSlope(DBloodActor* actor, sectortype* pSector, char rel, bool
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBloodActor* objActor)
|
void useSlopeChanger(DBloodActor* sourceactor, int objType, sectortype* pSect, DBloodActor* objActor)
|
||||||
{
|
{
|
||||||
auto pXSource = &sourceactor->x();
|
auto pXSource = &sourceactor->x();
|
||||||
spritetype* pSource = &sourceactor->s();
|
spritetype* pSource = &sourceactor->s();
|
||||||
|
@ -6541,8 +6538,6 @@ void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBlood
|
||||||
|
|
||||||
if (objType == OBJ_SECTOR)
|
if (objType == OBJ_SECTOR)
|
||||||
{
|
{
|
||||||
sectortype* pSect = §or[objIndex];
|
|
||||||
|
|
||||||
switch (pXSource->data1)
|
switch (pXSource->data1)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -6560,20 +6555,20 @@ void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBlood
|
||||||
{
|
{
|
||||||
// force closest floor aligned sprites to inherit slope of the sector's floor
|
// force closest floor aligned sprites to inherit slope of the sector's floor
|
||||||
oslope = pSect->floorheinum;
|
oslope = pSect->floorheinum;
|
||||||
BloodSectIterator it(objIndex);
|
BloodSectIterator it(pSect);
|
||||||
while (auto iactor = it.Next())
|
while (auto iactor = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &iactor->s();
|
auto spr = &iactor->s();
|
||||||
if (!(spr->cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) continue;
|
if (!(spr->cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) continue;
|
||||||
else if (getflorzofslope(objIndex, spr->x, spr->y) - kSlopeDist <= spr->z)
|
else if (getflorzofslopeptr(pSect, spr->x, spr->y) - kSlopeDist <= spr->z)
|
||||||
{
|
{
|
||||||
sprite2sectorSlope(iactor, §or[objIndex], 0, true);
|
sprite2sectorSlope(iactor, pSect, 0, true);
|
||||||
|
|
||||||
// set new slope of floor
|
// set new slope of floor
|
||||||
pSect->floorheinum = slope;
|
pSect->floorheinum = slope;
|
||||||
|
|
||||||
// force sloped sprites to be on floor slope z
|
// force sloped sprites to be on floor slope z
|
||||||
sprite2sectorSlope(iactor, §or[objIndex], 0, true);
|
sprite2sectorSlope(iactor, pSect, 0, true);
|
||||||
|
|
||||||
// restore old slope for next sprite
|
// restore old slope for next sprite
|
||||||
pSect->floorheinum = oslope;
|
pSect->floorheinum = oslope;
|
||||||
|
@ -6600,20 +6595,20 @@ void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBlood
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
oslope = pSect->ceilingheinum;
|
oslope = pSect->ceilingheinum;
|
||||||
BloodSectIterator it(objIndex);
|
BloodSectIterator it(pSect);
|
||||||
while (auto iactor = it.Next())
|
while (auto iactor = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &iactor->s();
|
auto spr = &iactor->s();
|
||||||
if (!(spr->cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) continue;
|
if (!(spr->cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) continue;
|
||||||
else if (getceilzofslope(objIndex, spr->x, spr->y) + kSlopeDist >= spr->z)
|
else if (getceilzofslopeptr(pSect, spr->x, spr->y) + kSlopeDist >= spr->z)
|
||||||
{
|
{
|
||||||
sprite2sectorSlope(iactor, §or[objIndex], 1, true);
|
sprite2sectorSlope(iactor, pSect, 1, true);
|
||||||
|
|
||||||
// set new slope of ceiling
|
// set new slope of ceiling
|
||||||
pSect->ceilingheinum = slope;
|
pSect->ceilingheinum = slope;
|
||||||
|
|
||||||
// force sloped sprites to be on ceiling slope z
|
// force sloped sprites to be on ceiling slope z
|
||||||
sprite2sectorSlope(iactor, §or[objIndex], 1, true);
|
sprite2sectorSlope(iactor, pSect, 1, true);
|
||||||
|
|
||||||
// restore old slope for next sprite
|
// restore old slope for next sprite
|
||||||
pSect->ceilingheinum = oslope;
|
pSect->ceilingheinum = oslope;
|
||||||
|
@ -6628,7 +6623,7 @@ void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBlood
|
||||||
}
|
}
|
||||||
|
|
||||||
// let's give a little impulse to the physics sprites...
|
// let's give a little impulse to the physics sprites...
|
||||||
BloodSectIterator it(objIndex);
|
BloodSectIterator it(pSect);
|
||||||
while (auto iactor = it.Next())
|
while (auto iactor = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &iactor->s();
|
auto spr = &iactor->s();
|
||||||
|
@ -6660,11 +6655,11 @@ void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBlood
|
||||||
if (!validSectorIndex(pSpr->sectnum)) break;
|
if (!validSectorIndex(pSpr->sectnum)) break;
|
||||||
switch (pXSource->data4)
|
switch (pXSource->data4)
|
||||||
{
|
{
|
||||||
case 1: sprite2sectorSlope(objActor, §or[pSpr->sectnum], 0, flag2); break;
|
case 1: sprite2sectorSlope(objActor, pSpr->sector(), 0, flag2); break;
|
||||||
case 2: sprite2sectorSlope(objActor, §or[pSpr->sectnum], 1, flag2); break;
|
case 2: sprite2sectorSlope(objActor, pSpr->sector(), 1, flag2); break;
|
||||||
case 3:
|
case 3:
|
||||||
if (getflorzofslope(pSpr->sectnum, pSpr->x, pSpr->y) - kSlopeDist <= pSpr->z) sprite2sectorSlope(objActor, §or[pSpr->sectnum], 0, flag2);
|
if (getflorzofslope(pSpr->sectnum, pSpr->x, pSpr->y) - kSlopeDist <= pSpr->z) sprite2sectorSlope(objActor, pSpr->sector(), 0, flag2);
|
||||||
if (getceilzofslope(pSpr->sectnum, pSpr->x, pSpr->y) + kSlopeDist >= pSpr->z) sprite2sectorSlope(objActor, §or[pSpr->sectnum], 1, flag2);
|
if (getceilzofslope(pSpr->sectnum, pSpr->x, pSpr->y) + kSlopeDist >= pSpr->z) sprite2sectorSlope(objActor, pSpr->sector(), 1, flag2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -312,7 +312,7 @@ bool aiFightDudeIsAffected(DBloodActor* pXDude);
|
||||||
bool aiFightMatesHaveSameTarget(DBloodActor* leaderactor, DBloodActor* targetactor, int allow);
|
bool aiFightMatesHaveSameTarget(DBloodActor* leaderactor, DBloodActor* targetactor, int allow);
|
||||||
void aiFightActivateDudes(int rx);
|
void aiFightActivateDudes(int rx);
|
||||||
// ------------------------------------------------------------------------- //
|
// ------------------------------------------------------------------------- //
|
||||||
void useSlopeChanger(DBloodActor* sourceactor, int objType, int objIndex, DBloodActor* objActor);
|
void useSlopeChanger(DBloodActor* sourceactor, int objType, sectortype* pSect, DBloodActor* objActor);
|
||||||
void damageSprites(DBloodActor* pXSource, DBloodActor* pSprite);
|
void damageSprites(DBloodActor* pXSource, DBloodActor* pSprite);
|
||||||
void useRandomItemGen(DBloodActor* pSource);
|
void useRandomItemGen(DBloodActor* pSource);
|
||||||
void useUniMissileGen(DBloodActor* sourceactor, DBloodActor* actor);
|
void useUniMissileGen(DBloodActor* sourceactor, DBloodActor* actor);
|
||||||
|
|
Loading…
Reference in a new issue