mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-20 18:42:26 +00:00
- parameter cleanup of BuildBullet.
This commit is contained in:
parent
eece69fbbd
commit
c1598185f7
5 changed files with 45 additions and 53 deletions
|
@ -77,15 +77,8 @@ int GrabBullet();
|
|||
void DestroyBullet(short nRun);
|
||||
int MoveBullet(short nBullet);
|
||||
void SetBulletEnemy(short nBullet, DExhumedActor* nEnemy);
|
||||
int BuildBullet(short nSprite, int nType, int val1, int nAngle, int val2, int val3);
|
||||
inline DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int val1, int nAngle, DExhumedActor* pTarget, int val3)
|
||||
{
|
||||
int v = BuildBullet(pActor->GetSpriteIndex(), nType, val1, nAngle, pTarget->GetSpriteIndex() + 10000, val3);
|
||||
if (v < 0) return nullptr;
|
||||
auto a = &exhumedActors[v & 0xffff];
|
||||
a->nPhase = (v >> 16);
|
||||
return a;
|
||||
}
|
||||
DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int val1, int nAngle, DExhumedActor* pTarget, int val3);
|
||||
|
||||
void IgniteSprite(int nSprite);
|
||||
void FuncBullet(int, int, int, int);
|
||||
void BackUpBullet(int *x, int *y, short nAngle);
|
||||
|
|
|
@ -42,7 +42,7 @@ struct Bullet
|
|||
short field_6;
|
||||
short field_8;
|
||||
short nType;
|
||||
short field_C;
|
||||
short nPitch;
|
||||
short field_E;
|
||||
uint16_t field_10;
|
||||
uint8_t field_12;
|
||||
|
@ -77,7 +77,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Bullet& w, Bullet*
|
|||
("z", w.z, def->z)
|
||||
("at6", w.field_6, def->field_6)
|
||||
("at8", w.field_8, def->field_8)
|
||||
("atc", w.field_C, def->field_C)
|
||||
("atc", w.nPitch, def->nPitch)
|
||||
("ate", w.field_E, def->field_E)
|
||||
("at10", w.field_10, def->field_10)
|
||||
("at12", w.field_12, def->field_12)
|
||||
|
@ -450,9 +450,9 @@ MOVEEND:
|
|||
hitdata_t hitData;
|
||||
int dz;
|
||||
if (bVanilla)
|
||||
dz = -bsin(pBullet->field_C, 3);
|
||||
dz = -bsin(pBullet->nPitch, 3);
|
||||
else
|
||||
dz = -pBullet->field_C * 512;
|
||||
dz = -pBullet->nPitch * 512;
|
||||
hitscan(&startPos, pSprite->sectnum, bcos(pSprite->ang), bsin(pSprite->ang), dz, &hitData, CLIPMASK1);
|
||||
x2 = hitData.pos.x;
|
||||
y2 = hitData.pos.y;
|
||||
|
@ -576,20 +576,18 @@ void SetBulletEnemy(short nBullet, DExhumedActor* pEnemy)
|
|||
}
|
||||
}
|
||||
|
||||
int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget, int nDoubleDamage)
|
||||
DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int nAngle, DExhumedActor* pTarget, int nDoubleDamage)
|
||||
{
|
||||
auto pSprite = &sprite[nSprite];
|
||||
auto pSprite = &pActor->s();
|
||||
Bullet sBullet;
|
||||
bulletInfo *pBulletInfo = &BulletInfo[nType];
|
||||
int nPitch = 0;
|
||||
|
||||
if (pBulletInfo->field_4 > 30000)
|
||||
{
|
||||
if (nTarget >= 10000)
|
||||
if (pTarget)
|
||||
{
|
||||
nTarget -= 10000;
|
||||
|
||||
short nTargetSprite = nTarget;
|
||||
spritetype *pTargetSprite = &sprite[nTargetSprite];
|
||||
spritetype *pTargetSprite = &pTarget->s();
|
||||
|
||||
// assert(pTargetSprite->sectnum <= kMaxSectors);
|
||||
|
||||
|
@ -601,31 +599,31 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
sBullet.pActor = insertActor(pSprite->sectnum, 200);
|
||||
sBullet.pActor->s().ang = nAngle;
|
||||
|
||||
int nHeight = GetSpriteHeight(nTargetSprite);
|
||||
int nHeight = GetActorHeight(pTarget);
|
||||
|
||||
assert(pTargetSprite->sectnum >= 0 && pTargetSprite->sectnum < kMaxSectors);
|
||||
|
||||
BulletHitsSprite(&sBullet, nSprite, nTargetSprite, pTargetSprite->x, pTargetSprite->y, pTargetSprite->z - (nHeight >> 1), pTargetSprite->sectnum);
|
||||
BulletHitsSprite(&sBullet, pActor->GetSpriteIndex(), pTarget->GetSpriteIndex(), pTargetSprite->x, pTargetSprite->y, pTargetSprite->z - (nHeight >> 1), pTargetSprite->sectnum);
|
||||
DeleteActor(sBullet.pActor);
|
||||
return -1;
|
||||
return nullptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
nTarget = 0;
|
||||
nPitch = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int nBullet = GrabBullet();
|
||||
if (nBullet < 0) {
|
||||
return -1;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
short nSector;
|
||||
|
||||
if (pSprite->statnum == 100)
|
||||
{
|
||||
nSector = nPlayerViewSect[GetPlayerFromSprite(nSprite)];
|
||||
nSector = nPlayerViewSect[GetPlayerFromActor(pActor)];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -634,7 +632,7 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
|
||||
auto pBulletActor = insertActor(nSector, 200);
|
||||
auto pBulletSprite = &pBulletActor->s();
|
||||
int nHeight = GetSpriteHeight(nSprite);
|
||||
int nHeight = GetActorHeight(pActor);
|
||||
nHeight = nHeight - (nHeight >> 2);
|
||||
|
||||
if (nZOffset == -1) {
|
||||
|
@ -674,10 +672,11 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
pBulletSprite->xvel = 0;
|
||||
pBulletSprite->yvel = 0;
|
||||
pBulletSprite->zvel = 0;
|
||||
pBulletSprite->owner = nSprite;
|
||||
pBulletSprite->owner = pActor->GetSpriteIndex();
|
||||
pBulletSprite->lotag = runlist_HeadRun() + 1;
|
||||
pBulletSprite->extra = -1;
|
||||
pBulletSprite->hitag = 0;
|
||||
pBulletActor->nPhase = nBullet;
|
||||
|
||||
// GrabTimeSlot(3);
|
||||
|
||||
|
@ -706,7 +705,7 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
pBulletSprite->cstat |= 0x8000;
|
||||
}
|
||||
|
||||
pBullet->field_C = nTarget;
|
||||
pBullet->nPitch = nPitch;
|
||||
pBullet->nType = nType;
|
||||
pBullet->pActor = pBulletActor;
|
||||
pBullet->field_6 = runlist_AddRunRec(pBulletSprite->lotag - 1, nBullet, 0xB0000);
|
||||
|
@ -731,24 +730,21 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
ChangeActorSect(pBulletActor, nSector);
|
||||
}
|
||||
|
||||
if (nTarget < 10000)
|
||||
if (pTarget == nullptr)
|
||||
{
|
||||
var_18 = (-bsin(nTarget) * pBulletInfo->field_4) >> 11;
|
||||
var_18 = (-bsin(nPitch) * pBulletInfo->field_4) >> 11;
|
||||
}
|
||||
else
|
||||
{
|
||||
nTarget -= 10000;
|
||||
|
||||
short nTargetSprite = nTarget;
|
||||
auto pTargetSprite = &sprite[nTargetSprite];
|
||||
auto pTargetSprite = &pTarget->s();
|
||||
|
||||
if ((unsigned int)pBulletInfo->field_4 > 30000)
|
||||
{
|
||||
BulletList[nBullet].pEnemy = &exhumedActors[nTargetSprite];
|
||||
BulletList[nBullet].pEnemy = pTarget;
|
||||
}
|
||||
else
|
||||
{
|
||||
nHeight = GetSpriteHeight(nTargetSprite);
|
||||
nHeight = GetActorHeight(pTarget);
|
||||
|
||||
if (pTargetSprite->statnum == 100)
|
||||
{
|
||||
|
@ -763,7 +759,7 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
|
||||
int x, y;
|
||||
|
||||
if (nSprite != -1 && pSprite->statnum != 100)
|
||||
if (pActor != nullptr && pSprite->statnum != 100)
|
||||
{
|
||||
x = pTargetSprite->x;
|
||||
y = pTargetSprite->y;
|
||||
|
@ -775,7 +771,7 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
}
|
||||
else
|
||||
{
|
||||
int nPlayer = GetPlayerFromSprite(nTargetSprite);
|
||||
int nPlayer = GetPlayerFromActor(pTarget);
|
||||
if (nPlayer > -1)
|
||||
{
|
||||
x += nPlayerDX[nPlayer] * 15;
|
||||
|
@ -813,7 +809,7 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
pBullet->y = (pSprite->clipdist << 2) * bsin(nAngle);
|
||||
BulletList[nBullet].pEnemy = nullptr;
|
||||
|
||||
int pb = pBulletActor->GetSpriteIndex();
|
||||
|
||||
if (MoveBullet(nBullet))
|
||||
{
|
||||
pBulletActor = nullptr;
|
||||
|
@ -826,7 +822,7 @@ int BuildBullet(short nSprite, int nType, int nZOffset, int nAngle, int nTarget,
|
|||
pBullet->z = var_18 >> 3;
|
||||
}
|
||||
|
||||
return pb | (nBullet << 16);
|
||||
return pBulletActor;
|
||||
}
|
||||
|
||||
void AIBullet::Tick(RunListEvent* ev)
|
||||
|
|
|
@ -337,6 +337,7 @@ void MoveWeapons(short nPlayer)
|
|||
if (!PlayerList[nPlayer].bIsFiring || (nSectFlag & kSectUnderwater))
|
||||
nTemperature[nPlayer] = 0;
|
||||
|
||||
auto pPlayerActor = PlayerList[nPlayer].Actor();
|
||||
short nPlayerSprite = PlayerList[nPlayer].nSprite;
|
||||
auto pPlayerSprite = &sprite[nPlayerSprite];
|
||||
short nWeapon = PlayerList[nPlayer].nCurrentWeapon;
|
||||
|
@ -823,6 +824,7 @@ loc_flag:
|
|||
nHeight -= h;
|
||||
|
||||
int target = 0;
|
||||
bool gottarg = false;
|
||||
if (sPlayerInput[nPlayer].nTarget >= 0 && Autoaim(nPlayer))
|
||||
{
|
||||
assert(sprite[sPlayerInput[nPlayer].nTarget].sectnum < kMaxSectors);
|
||||
|
@ -833,11 +835,15 @@ loc_flag:
|
|||
auto pTargetSprite = &sprite[t];
|
||||
int angletotarget = bvectangbam(pTargetSprite->x - pPlayerSprite->x, pTargetSprite->y - pPlayerSprite->y).asbuild();
|
||||
int anglediff = (pPlayerSprite->ang - angletotarget) & 2047;
|
||||
if (anglediff < 512 || anglediff > 1536) target = t + 10000;
|
||||
if (anglediff < 512 || anglediff > 1536)
|
||||
{
|
||||
target = t;
|
||||
gottarg = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BuildBullet(nPlayerSprite, nAmmoType, nHeight, nAngle, target, var_1C);
|
||||
BuildBullet(pPlayerActor, nAmmoType, nHeight, nAngle,gottarg? &exhumedActors[target] : nullptr, var_1C);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1427,20 +1427,17 @@ void AITrap::Tick(RunListEvent* ev)
|
|||
return;
|
||||
}
|
||||
|
||||
int nBullet = BuildBullet(nSprite, nType, 0, pSprite->ang, 0, 1);
|
||||
if (nBullet > -1)
|
||||
auto pBullet = BuildBullet(&exhumedActors[nSprite], nType, 0, pSprite->ang, nullptr, 1);
|
||||
if (pBullet)
|
||||
{
|
||||
int nBulletSprite = nBullet & 0xFFFF; // isolate the sprite index (disregard top 16 bits)
|
||||
assert(nBulletSprite >= 0);
|
||||
|
||||
if (nType == 15)
|
||||
{
|
||||
sprite[nBulletSprite].ang = (sprite[nBulletSprite].ang - 512) & kAngleMask;
|
||||
D3PlayFX(StaticSound[kSound32], nSprite);
|
||||
pBullet->s().ang = (pBullet->s().ang - 512) & kAngleMask;
|
||||
D3PlayFX(StaticSound[kSound32], pBullet);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite[nBulletSprite].clipdist = 50;
|
||||
pBullet->s().clipdist = 50;
|
||||
|
||||
short nWall = sTrap[nTrap].field_6;
|
||||
if (nWall > -1)
|
||||
|
@ -1454,7 +1451,7 @@ void AITrap::Tick(RunListEvent* ev)
|
|||
wall[nWall].picnum = sTrap[nTrap].field_C + 1;
|
||||
}
|
||||
|
||||
D3PlayFX(StaticSound[kSound36], nSprite);
|
||||
D3PlayFX(StaticSound[kSound36], pBullet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1403,7 +1403,7 @@ void AIQueen::Tick(RunListEvent* ev)
|
|||
|
||||
if (!si)
|
||||
{
|
||||
BuildBullet(nSprite, 12, -1, pSprite->ang, nTarget + 10000, 1);
|
||||
BuildBullet(&exhumedActors[nSprite], 12, -1, pSprite->ang, &exhumedActors[nTarget], 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue