- InitSobjMachineGun

This commit is contained in:
Christoph Oelckers 2021-11-04 00:40:25 +01:00
parent 60d5490654
commit 9eb1f9963a

View file

@ -18033,23 +18033,18 @@ InitTurretLaser(short SpriteNum, PLAYERp pp)
return 0; return 0;
} }
int int InitSobjMachineGun(DSWActor* actor, PLAYERp pp)
InitSobjMachineGun(short SpriteNum, PLAYERp pp)
{ {
DSWActor* actor = &swActors[SpriteNum]; USERp u = actor->u();
USERp u = User[SpriteNum].Data(); SPRITEp sp = &actor->s();
SPRITEp sp = u->SpriteP;
short daang; short daang;
hitdata_t hitinfo; HITINFO hitinfo;
short nsect; short nsect;
int daz; int daz;
int nx,ny,nz; int nx,ny,nz;
short cstat = 0; short cstat = 0;
short spark; short spark;
//static sound = 0;
//sound = (++sound)&1;
//if (sound == 0)
PlaySound(DIGI_BOATFIRE, pp, v3df_dontpan|v3df_doppler); PlaySound(DIGI_BOATFIRE, pp, v3df_dontpan|v3df_doppler);
nx = sp->x; nx = sp->x;
@ -18058,7 +18053,7 @@ InitSobjMachineGun(short SpriteNum, PLAYERp pp)
nsect = sp->sectnum; nsect = sp->sectnum;
if (RANDOM_P2(1024) < 200) if (RANDOM_P2(1024) < 200)
InitTracerTurret(short(sp - sprite), pp->PlayerSprite, pp->horizon.horiz.asq16()); InitTracerTurret(actor->GetSpriteIndex(), pp->PlayerSprite, pp->horizon.horiz.asq16());
daang = 64; daang = 64;
if (WeaponAutoAimHitscan(actor, &daz, &daang, false) != nullptr) if (WeaponAutoAimHitscan(actor, &daz, &daang, false) != nullptr)
@ -18088,7 +18083,7 @@ InitSobjMachineGun(short SpriteNum, PLAYERp pp)
return 0; return 0;
} }
if (hitinfo.sprite < 0 && hitinfo.wall < 0) if (hitinfo.hitactor == nullptr && hitinfo.wall < 0)
{ {
if (labs(hitinfo.pos.z - sector[hitinfo.sect].ceilingz) <= Z(1)) if (labs(hitinfo.pos.z - sector[hitinfo.sect].ceilingz) <= Z(1))
{ {
@ -18110,38 +18105,38 @@ InitSobjMachineGun(short SpriteNum, PLAYERp pp)
} }
// hit a sprite? // hit a sprite?
if (hitinfo.sprite >= 0) if (hitinfo.hitactor != nullptr)
{ {
SPRITEp hsp = &sprite[hitinfo.sprite]; SPRITEp hsp = &hitinfo.hitactor->s();
if (sprite[hitinfo.sprite].lotag == TAG_SPRITE_HIT_MATCH) if (hsp->lotag == TAG_SPRITE_HIT_MATCH)
{ {
// spawn sparks here and pass the sprite as SO_MISSILE // spawn sparks here and pass the sprite as SO_MISSILE
spark = SpawnBoatSparks(pp, hitinfo.sect, hitinfo.wall, hitinfo.pos.x, hitinfo.pos.y, hitinfo.pos.z, daang); spark = SpawnBoatSparks(pp, hitinfo.sect, hitinfo.wall, hitinfo.pos.x, hitinfo.pos.y, hitinfo.pos.z, daang);
SET(User[spark]->Flags2, SPR2_SO_MISSILE); SET(User[spark]->Flags2, SPR2_SO_MISSILE);
if (MissileHitMatch(spark, -1, hitinfo.sprite)) if (MissileHitMatch(spark, -1, hitinfo.hitactor->GetSpriteIndex()))
return 0; return 0;
return 0; return 0;
} }
if (TEST(hsp->extra, SPRX_BREAKABLE)) if (TEST(hsp->extra, SPRX_BREAKABLE))
{ {
HitBreakSprite(&swActors[hitinfo.sprite],0); HitBreakSprite(hitinfo.hitactor, 0);
return 0; return 0;
} }
if (BulletHitSprite(pp->SpriteP, hitinfo.sprite, hitinfo.pos.x, hitinfo.pos.y, hitinfo.pos.z, 0)) if (BulletHitSprite(pp->SpriteP, hitinfo.hitactor->GetSpriteIndex(), hitinfo.pos.x, hitinfo.pos.y, hitinfo.pos.z, 0))
return 0; return 0;
// hit a switch? // hit a switch?
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL) && (hsp->lotag || hsp->hitag)) if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL) && (hsp->lotag || hsp->hitag))
{ {
ShootableSwitch(&swActors[hitinfo.sprite]); ShootableSwitch(hitinfo.hitactor);
} }
} }
spark = SpawnBoatSparks(pp, hitinfo.sect, hitinfo.wall, hitinfo.pos.x, hitinfo.pos.y, hitinfo.pos.z, daang); spark = SpawnBoatSparks(pp, hitinfo.sect, hitinfo.wall, hitinfo.pos.x, hitinfo.pos.y, hitinfo.pos.z, daang);
DoHitscanDamage(spark, hitinfo.sprite); DoHitscanDamage(spark, hitinfo.hitactor->GetSpriteIndex());
return 0; return 0;
} }
@ -18195,7 +18190,7 @@ int InitSobjGun(PLAYERp pp)
case 1: case 1:
SpawnVis(actor, -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
SpawnBigGunFlames(actor->GetSpriteIndex(), pp->PlayerSprite, pp->sop, true); SpawnBigGunFlames(actor->GetSpriteIndex(), pp->PlayerSprite, pp->sop, true);
InitSobjMachineGun(actor->GetSpriteIndex(), pp); InitSobjMachineGun(actor, pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
pp->FirePause = 10; pp->FirePause = 10;
else else