mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-07 15:31:11 +00:00
- Exhumed: pActor->s() in bullet.cpp
This commit is contained in:
parent
03759ef73b
commit
a7cebcafbb
1 changed files with 50 additions and 57 deletions
|
@ -150,10 +150,9 @@ int GrabBullet()
|
||||||
void DestroyBullet(int nBullet)
|
void DestroyBullet(int nBullet)
|
||||||
{
|
{
|
||||||
DExhumedActor* pActor = BulletList[nBullet].pActor;
|
DExhumedActor* pActor = BulletList[nBullet].pActor;
|
||||||
auto pSprite = &pActor->s();
|
|
||||||
|
|
||||||
runlist_DoSubRunRec(BulletList[nBullet].nRunRec);
|
runlist_DoSubRunRec(BulletList[nBullet].nRunRec);
|
||||||
runlist_DoSubRunRec(pSprite->lotag - 1);
|
runlist_DoSubRunRec(pActor->spr.lotag - 1);
|
||||||
runlist_SubRunRec(BulletList[nBullet].nRunRec2);
|
runlist_SubRunRec(BulletList[nBullet].nRunRec2);
|
||||||
|
|
||||||
StopActorSound(pActor);
|
StopActorSound(pActor);
|
||||||
|
@ -164,11 +163,9 @@ void DestroyBullet(int nBullet)
|
||||||
|
|
||||||
void IgniteSprite(DExhumedActor* pActor)
|
void IgniteSprite(DExhumedActor* pActor)
|
||||||
{
|
{
|
||||||
auto pSprite = &pActor->s();
|
pActor->spr.hitag += 2;
|
||||||
|
|
||||||
pSprite->hitag += 2;
|
auto pAnimActor = BuildAnim(nullptr, 38, 0, pActor->spr.pos.X, pActor->spr.pos.Y, pActor->spr.pos.Z, pActor->spr.sector(), 40, 20);
|
||||||
|
|
||||||
auto pAnimActor = BuildAnim(nullptr, 38, 0, pSprite->pos.X, pSprite->pos.Y, pSprite->pos.Z, pSprite->sector(), 40, 20);
|
|
||||||
|
|
||||||
if (pAnimActor)
|
if (pAnimActor)
|
||||||
{
|
{
|
||||||
|
@ -235,11 +232,10 @@ void BulletHitsSprite(Bullet *pBullet, DExhumedActor* pBulletActor, DExhumedActo
|
||||||
}
|
}
|
||||||
|
|
||||||
DExhumedActor* pActor = pBullet->pActor;
|
DExhumedActor* pActor = pBullet->pActor;
|
||||||
spritetype *pSprite = &pActor->s();
|
|
||||||
|
|
||||||
if (nStat == kStatAnubisDrum)
|
if (nStat == kStatAnubisDrum)
|
||||||
{
|
{
|
||||||
int nAngle = (pSprite->ang + 256) - RandomSize(9);
|
int nAngle = (pActor->spr.ang + 256) - RandomSize(9);
|
||||||
|
|
||||||
pHitSprite->xvel = bcos(nAngle, 1);
|
pHitSprite->xvel = bcos(nAngle, 1);
|
||||||
pHitSprite->yvel = bsin(nAngle, 1);
|
pHitSprite->yvel = bsin(nAngle, 1);
|
||||||
|
@ -250,8 +246,8 @@ void BulletHitsSprite(Bullet *pBullet, DExhumedActor* pBulletActor, DExhumedActo
|
||||||
int xVel = pHitSprite->xvel;
|
int xVel = pHitSprite->xvel;
|
||||||
int yVel = pHitSprite->yvel;
|
int yVel = pHitSprite->yvel;
|
||||||
|
|
||||||
pHitSprite->xvel = bcos(pSprite->ang, -2);
|
pHitSprite->xvel = bcos(pActor->spr.ang, -2);
|
||||||
pHitSprite->yvel = bsin(pSprite->ang, -2);
|
pHitSprite->yvel = bsin(pActor->spr.ang, -2);
|
||||||
|
|
||||||
MoveCreature(pHitActor);
|
MoveCreature(pHitActor);
|
||||||
|
|
||||||
|
@ -319,12 +315,11 @@ int MoveBullet(int nBullet)
|
||||||
bulletInfo *pBulletInfo = &BulletInfo[nType];
|
bulletInfo *pBulletInfo = &BulletInfo[nType];
|
||||||
|
|
||||||
DExhumedActor* pActor = BulletList[nBullet].pActor;
|
DExhumedActor* pActor = BulletList[nBullet].pActor;
|
||||||
spritetype *pSprite = &pActor->s();
|
|
||||||
|
|
||||||
int x = pSprite->pos.X;
|
int x = pActor->spr.pos.X;
|
||||||
int y = pSprite->pos.Y;
|
int y = pActor->spr.pos.Y;
|
||||||
int z = pSprite->pos.Z; // ebx
|
int z = pActor->spr.pos.Z; // ebx
|
||||||
int nSectFlag = pSprite->sector()->Flag;
|
int nSectFlag = pActor->spr.sector()->Flag;
|
||||||
|
|
||||||
int x2, y2, z2;
|
int x2, y2, z2;
|
||||||
|
|
||||||
|
@ -348,42 +343,42 @@ int MoveBullet(int nBullet)
|
||||||
{
|
{
|
||||||
if (pBullet->field_E < 8)
|
if (pBullet->field_E < 8)
|
||||||
{
|
{
|
||||||
pSprite->xrepeat -= 1;
|
pActor->spr.xrepeat -= 1;
|
||||||
pSprite->yrepeat += 8;
|
pActor->spr.yrepeat += 8;
|
||||||
|
|
||||||
pBullet->z -= 200;
|
pBullet->z -= 200;
|
||||||
|
|
||||||
if (pSprite->shade < 90) {
|
if (pActor->spr.shade < 90) {
|
||||||
pSprite->shade += 35;
|
pActor->spr.shade += 35;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pBullet->field_E == 3)
|
if (pBullet->field_E == 3)
|
||||||
{
|
{
|
||||||
pBullet->nSeq = 45;
|
pBullet->nSeq = 45;
|
||||||
pBullet->nFrame = 0;
|
pBullet->nFrame = 0;
|
||||||
pSprite->xrepeat = 40;
|
pActor->spr.xrepeat = 40;
|
||||||
pSprite->yrepeat = 40;
|
pActor->spr.yrepeat = 40;
|
||||||
pSprite->shade = 0;
|
pActor->spr.shade = 0;
|
||||||
pSprite->pos.Z += 512;
|
pActor->spr.pos.Z += 512;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSprite->xrepeat += 4;
|
pActor->spr.xrepeat += 4;
|
||||||
pSprite->yrepeat += 4;
|
pActor->spr.yrepeat += 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
coll = movesprite(pActor, pBullet->x, pBullet->y, pBullet->z, pSprite->clipdist >> 1, pSprite->clipdist >> 1, CLIPMASK1);
|
coll = movesprite(pActor, pBullet->x, pBullet->y, pBullet->z, pActor->spr.clipdist >> 1, pActor->spr.clipdist >> 1, CLIPMASK1);
|
||||||
|
|
||||||
MOVEEND:
|
MOVEEND:
|
||||||
if (coll.type || coll.exbits)
|
if (coll.type || coll.exbits)
|
||||||
{
|
{
|
||||||
nVal = 1;
|
nVal = 1;
|
||||||
x2 = pSprite->pos.X;
|
x2 = pActor->spr.pos.X;
|
||||||
y2 = pSprite->pos.Y;
|
y2 = pActor->spr.pos.Y;
|
||||||
z2 = pSprite->pos.Z;
|
z2 = pActor->spr.pos.Z;
|
||||||
pHitSect = pSprite->sector();
|
pHitSect = pActor->spr.sector();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// Original code. This was producing some beautiful undefined behavior in the first case because the index can be anything, not just a wall.
|
// Original code. This was producing some beautiful undefined behavior in the first case because the index can be anything, not just a wall.
|
||||||
|
@ -423,7 +418,7 @@ MOVEEND:
|
||||||
nVal = coll.type || coll.exbits? 1:0;
|
nVal = coll.type || coll.exbits? 1:0;
|
||||||
|
|
||||||
// pSprite's sector may have changed since we set nSectFlag ?
|
// pSprite's sector may have changed since we set nSectFlag ?
|
||||||
int nFlagVal = nSectFlag ^ pSprite->sector()->Flag;
|
int nFlagVal = nSectFlag ^ pActor->spr.sector()->Flag;
|
||||||
if (nFlagVal & kSectUnderwater)
|
if (nFlagVal & kSectUnderwater)
|
||||||
{
|
{
|
||||||
DestroyBullet(nBullet);
|
DestroyBullet(nBullet);
|
||||||
|
@ -432,10 +427,10 @@ MOVEEND:
|
||||||
|
|
||||||
if (nVal == 0 && nType != 15 && nType != 3)
|
if (nVal == 0 && nType != 15 && nType != 3)
|
||||||
{
|
{
|
||||||
AddFlash(pSprite->sector(), pSprite->pos.X, pSprite->pos.Y, pSprite->pos.Z, 0);
|
AddFlash(pActor->spr.sector(), pActor->spr.pos.X, pActor->spr.pos.Y, pActor->spr.pos.Z, 0);
|
||||||
|
|
||||||
if (pSprite->pal != 5) {
|
if (pActor->spr.pal != 5) {
|
||||||
pSprite->pal = 1;
|
pActor->spr.pal = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -461,7 +456,7 @@ MOVEEND:
|
||||||
dz = -bsin(pBullet->nPitch, 3);
|
dz = -bsin(pBullet->nPitch, 3);
|
||||||
else
|
else
|
||||||
dz = -pBullet->nPitch * 512;
|
dz = -pBullet->nPitch * 512;
|
||||||
hitscan(startPos, pSprite->sector(), { bcos(pSprite->ang), bsin(pSprite->ang), dz }, hit, CLIPMASK1);
|
hitscan(startPos, pActor->spr.sector(), { bcos(pActor->spr.ang), bsin(pActor->spr.ang), dz }, hit, CLIPMASK1);
|
||||||
x2 = hit.hitpos.X;
|
x2 = hit.hitpos.X;
|
||||||
y2 = hit.hitpos.Y;
|
y2 = hit.hitpos.Y;
|
||||||
z2 = hit.hitpos.Z;
|
z2 = hit.hitpos.Z;
|
||||||
|
@ -479,7 +474,7 @@ MOVEEND:
|
||||||
{
|
{
|
||||||
HITSPRITE:
|
HITSPRITE:
|
||||||
auto hitsprite = &hitactor->s();
|
auto hitsprite = &hitactor->s();
|
||||||
if (pSprite->pal == 5 && hitsprite->statnum == 100)
|
if (pActor->spr.pal == 5 && hitsprite->statnum == 100)
|
||||||
{
|
{
|
||||||
int nPlayer = GetPlayerFromActor(hitactor);
|
int nPlayer = GetPlayerFromActor(hitactor);
|
||||||
if (!PlayerList[nPlayer].bIsMummified)
|
if (!PlayerList[nPlayer].bIsMummified)
|
||||||
|
@ -517,9 +512,9 @@ HITSPRITE:
|
||||||
{
|
{
|
||||||
if ((pHitSect->pBelow != nullptr && (pHitSect->pBelow->Flag & kSectUnderwater)) || pHitSect->Depth)
|
if ((pHitSect->pBelow != nullptr && (pHitSect->pBelow->Flag & kSectUnderwater)) || pHitSect->Depth)
|
||||||
{
|
{
|
||||||
pSprite->pos.X = x2;
|
pActor->spr.pos.X = x2;
|
||||||
pSprite->pos.Y = y2;
|
pActor->spr.pos.Y = y2;
|
||||||
pSprite->pos.Z = z2;
|
pActor->spr.pos.Z = z2;
|
||||||
BuildSplash(pActor, pHitSect);
|
BuildSplash(pActor, pHitSect);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -531,7 +526,7 @@ HITSPRITE:
|
||||||
{
|
{
|
||||||
if (pHitWall != nullptr)
|
if (pHitWall != nullptr)
|
||||||
{
|
{
|
||||||
BackUpBullet(&x2, &y2, pSprite->ang);
|
BackUpBullet(&x2, &y2, pActor->spr.ang);
|
||||||
|
|
||||||
if (nType != 3 || RandomSize(2) == 0)
|
if (nType != 3 || RandomSize(2) == 0)
|
||||||
{
|
{
|
||||||
|
@ -547,9 +542,9 @@ HITSPRITE:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSprite->pos.X = x2;
|
pActor->spr.pos.X = x2;
|
||||||
pSprite->pos.Y = y2;
|
pActor->spr.pos.Y = y2;
|
||||||
pSprite->pos.Z = z2;
|
pActor->spr.pos.Z = z2;
|
||||||
|
|
||||||
ChangeActorSect(pActor, pHitSect);
|
ChangeActorSect(pActor, pHitSect);
|
||||||
}
|
}
|
||||||
|
@ -562,7 +557,7 @@ HITSPRITE:
|
||||||
|
|
||||||
nRadialBullet = -1;
|
nRadialBullet = -1;
|
||||||
|
|
||||||
AddFlash(pSprite->sector(), pSprite->pos.X, pSprite->pos.Y, pSprite->pos.Z, 128);
|
AddFlash(pActor->spr.sector(), pActor->spr.pos.X, pActor->spr.pos.Y, pActor->spr.pos.Z, 128);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -582,7 +577,6 @@ void SetBulletEnemy(int nBullet, DExhumedActor* pEnemy)
|
||||||
|
|
||||||
DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int nAngle, DExhumedActor* pTarget, int nDoubleDamage)
|
DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int nAngle, DExhumedActor* pTarget, int nDoubleDamage)
|
||||||
{
|
{
|
||||||
auto pSprite = &pActor->s();
|
|
||||||
Bullet sBullet;
|
Bullet sBullet;
|
||||||
bulletInfo *pBulletInfo = &BulletInfo[nType];
|
bulletInfo *pBulletInfo = &BulletInfo[nType];
|
||||||
int nPitch = 0;
|
int nPitch = 0;
|
||||||
|
@ -598,7 +592,7 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
|
||||||
sBullet.nType = nType;
|
sBullet.nType = nType;
|
||||||
sBullet.nDoubleDamage = nDoubleDamage;
|
sBullet.nDoubleDamage = nDoubleDamage;
|
||||||
|
|
||||||
sBullet.pActor = insertActor(pSprite->sector(), 200);
|
sBullet.pActor = insertActor(pActor->spr.sector(), 200);
|
||||||
sBullet.pActor->spr.ang = nAngle;
|
sBullet.pActor->spr.ang = nAngle;
|
||||||
|
|
||||||
int nHeight = GetActorHeight(pTarget);
|
int nHeight = GetActorHeight(pTarget);
|
||||||
|
@ -623,13 +617,13 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
|
||||||
|
|
||||||
sectortype* pSector;
|
sectortype* pSector;
|
||||||
|
|
||||||
if (pSprite->statnum == 100)
|
if (pActor->spr.statnum == 100)
|
||||||
{
|
{
|
||||||
pSector = PlayerList[GetPlayerFromActor(pActor)].pPlayerViewSect;
|
pSector = PlayerList[GetPlayerFromActor(pActor)].pPlayerViewSect;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSector = pSprite->sector();
|
pSector = pActor->spr.sector();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pBulletActor = insertActor(pSector, 200);
|
auto pBulletActor = insertActor(pSector, 200);
|
||||||
|
@ -641,9 +635,9 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
|
||||||
nZOffset = -nHeight;
|
nZOffset = -nHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
pBulletSprite->pos.X = pSprite->pos.X;
|
pBulletSprite->pos.X = pActor->spr.pos.X;
|
||||||
pBulletSprite->pos.Y = pSprite->pos.Y;
|
pBulletSprite->pos.Y = pActor->spr.pos.Y;
|
||||||
pBulletSprite->pos.Z = pSprite->pos.Z;
|
pBulletSprite->pos.Z = pActor->spr.pos.Z;
|
||||||
|
|
||||||
Bullet *pBullet = &BulletList[nBullet];
|
Bullet *pBullet = &BulletList[nBullet];
|
||||||
|
|
||||||
|
@ -761,7 +755,7 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
if (pActor != nullptr && pSprite->statnum != 100)
|
if (pActor != nullptr && pActor->spr.statnum != 100)
|
||||||
{
|
{
|
||||||
x = pTargetSprite->pos.X;
|
x = pTargetSprite->pos.X;
|
||||||
y = pTargetSprite->pos.Y;
|
y = pTargetSprite->pos.Y;
|
||||||
|
@ -785,7 +779,7 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
|
||||||
y -= pBulletSprite->pos.Y;
|
y -= pBulletSprite->pos.Y;
|
||||||
|
|
||||||
nAngle = GetMyAngle(x, y);
|
nAngle = GetMyAngle(x, y);
|
||||||
pSprite->ang = nAngle;
|
pActor->spr.ang = nAngle;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -807,8 +801,8 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
|
||||||
}
|
}
|
||||||
|
|
||||||
pBullet->z = 0;
|
pBullet->z = 0;
|
||||||
pBullet->x = (pSprite->clipdist << 2) * bcos(nAngle);
|
pBullet->x = (pActor->spr.clipdist << 2) * bcos(nAngle);
|
||||||
pBullet->y = (pSprite->clipdist << 2) * bsin(nAngle);
|
pBullet->y = (pActor->spr.clipdist << 2) * bsin(nAngle);
|
||||||
BulletList[nBullet].pEnemy = nullptr;
|
BulletList[nBullet].pEnemy = nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
@ -834,7 +828,6 @@ void AIBullet::Tick(RunListEvent* ev)
|
||||||
|
|
||||||
int nSeq = SeqOffsets[BulletList[nBullet].nSeq];
|
int nSeq = SeqOffsets[BulletList[nBullet].nSeq];
|
||||||
DExhumedActor* pActor = BulletList[nBullet].pActor;
|
DExhumedActor* pActor = BulletList[nBullet].pActor;
|
||||||
auto pSprite = &pActor->s();
|
|
||||||
|
|
||||||
int nFlag = FrameFlag[SeqBase[nSeq] + BulletList[nBullet].nFrame];
|
int nFlag = FrameFlag[SeqBase[nSeq] + BulletList[nBullet].nFrame];
|
||||||
|
|
||||||
|
@ -842,7 +835,7 @@ void AIBullet::Tick(RunListEvent* ev)
|
||||||
|
|
||||||
if (nFlag & 0x80)
|
if (nFlag & 0x80)
|
||||||
{
|
{
|
||||||
BuildAnim(nullptr, 45, 0, pSprite->pos.X, pSprite->pos.Y, pSprite->pos.Z, pSprite->sector(), pSprite->xrepeat, 0);
|
BuildAnim(nullptr, 45, 0, pActor->spr.pos.X, pActor->spr.pos.Y, pActor->spr.pos.Z, pActor->spr.sector(), pActor->spr.xrepeat, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
BulletList[nBullet].nFrame++;
|
BulletList[nBullet].nFrame++;
|
||||||
|
|
Loading…
Reference in a new issue