mirror of
https://github.com/DrBeef/Raze.git
synced 2025-01-31 21:20:39 +00:00
- use backend's collision struct in SW.
This commit is contained in:
parent
b3bbf8932e
commit
30f36e4871
12 changed files with 81 additions and 159 deletions
|
@ -78,7 +78,7 @@ bool ActorMoveHitReact(DSWActor* actor)
|
|||
auto coll = u->coll;
|
||||
if (coll.type == kHitSprite)
|
||||
{
|
||||
auto hitActor = coll.actor;
|
||||
auto hitActor = coll.actor();
|
||||
if (hitActor->hasU() && hitActor->u()->PlayerP)
|
||||
{
|
||||
// if you ran into a player - call close range functions
|
||||
|
|
|
@ -228,7 +228,7 @@ int DoShadowFindGroundPoint(tspriteptr_t sp)
|
|||
{
|
||||
case kHitSprite:
|
||||
{
|
||||
hsp = &florhit.actor->s();
|
||||
hsp = &florhit.actor()->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_FLOOR))
|
||||
{
|
||||
|
|
|
@ -58,29 +58,10 @@ EXTERN_CVAR(Bool, sw_bunnyrockets)
|
|||
|
||||
BEGIN_SW_NS
|
||||
|
||||
// Wrapper around the insane collision info mess from Build.
|
||||
class DSWActor;
|
||||
struct Collision
|
||||
{
|
||||
int type;
|
||||
int index;
|
||||
int legacyVal; // should be removed later, but needed for converting back for unadjusted code.
|
||||
DSWActor* actor;
|
||||
using HitInfo = THitInfo<DSWActor>;
|
||||
using Collision = TCollision<DSWActor>;
|
||||
|
||||
Collision() = default;
|
||||
explicit Collision(int legacyval) { setFromEngine(legacyval); }
|
||||
|
||||
void invalidate() { type = -1; } // something invalid that's not a valid hit type.
|
||||
int setNone();
|
||||
int setSector(int num);
|
||||
int setWall(int num);
|
||||
int setSprite(DSWActor* num);
|
||||
int setSky();
|
||||
int setFromEngine(int value);
|
||||
|
||||
walltype* wall() const { assert(type == kHitWall); return &::wall[index]; }
|
||||
sectortype* sector() const { assert(type == kHitSector); return &::sector[index]; }
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -1059,7 +1040,6 @@ struct ROTATOR
|
|||
};
|
||||
|
||||
using ROTATORp = ROTATOR*;
|
||||
struct Collision;
|
||||
|
||||
//
|
||||
// User Extension record
|
||||
|
@ -1917,9 +1897,6 @@ inline bool FAF_ConnectArea(sectortype* sect)
|
|||
bool PlayerCeilingHit(PLAYERp pp, int zlimit);
|
||||
bool PlayerFloorHit(PLAYERp pp, int zlimit);
|
||||
|
||||
class DSWActor;
|
||||
using HitInfo = THitInfo<DSWActor>;
|
||||
|
||||
void FAFhitscan(int32_t x, int32_t y, int32_t z, sectortype* sectnum,
|
||||
int32_t xvect, int32_t yvect, int32_t zvect,
|
||||
HitInfo& hit, int32_t clipmask);
|
||||
|
@ -1936,12 +1913,6 @@ void FAFgetzrangepoint(int32_t x, int32_t y, int32_t z, sectortype* sect,
|
|||
int32_t* loz, Collision* florhit);
|
||||
|
||||
|
||||
void short_setinterpolation(short *posptr);
|
||||
void short_stopinterpolation(short *posptr);
|
||||
void short_updateinterpolations(void);
|
||||
void short_dointerpolations(int smoothratio);
|
||||
void short_restoreinterpolations(void);
|
||||
|
||||
enum SoundType
|
||||
{
|
||||
SOUND_OBJECT_TYPE,
|
||||
|
|
|
@ -410,7 +410,7 @@ int DoBloodSpray(DSWActor* actor)
|
|||
case kHitSprite:
|
||||
{
|
||||
short wall_ang;
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
SPRITEp hsp = &hitActor->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
|
@ -440,7 +440,7 @@ int DoBloodSpray(DSWActor* actor)
|
|||
WALLp wph;
|
||||
short wb;
|
||||
|
||||
wph = u->coll.wall();
|
||||
wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -613,7 +613,7 @@ int DoPhosphorus(DSWActor* actor)
|
|||
USERp hu;
|
||||
|
||||
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
hsp = &hitActor->s();
|
||||
hu = hitActor->u();
|
||||
|
||||
|
@ -648,7 +648,7 @@ int DoPhosphorus(DSWActor* actor)
|
|||
short hit_wall, nw, wall_ang;
|
||||
WALLp wph;
|
||||
|
||||
wph = u->coll.wall();
|
||||
wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -858,7 +858,7 @@ int DoChemBomb(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
auto wph = u->coll.wall();
|
||||
auto wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -1062,7 +1062,7 @@ int DoCaltrops(DSWActor* actor)
|
|||
|
||||
PlaySound(DIGI_CALTROPS, actor, v3df_dontpan);
|
||||
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
auto hsp = &hitActor->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
|
@ -1083,7 +1083,7 @@ int DoCaltrops(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
auto wph = u->coll.wall();
|
||||
auto wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
|
|
@ -1886,20 +1886,20 @@ void DoPlayerZrange(PLAYERp pp)
|
|||
|
||||
if (ceilColl.type == kHitSprite)
|
||||
{
|
||||
pp->highActor = ceilColl.actor;
|
||||
pp->highActor = ceilColl.actor();
|
||||
}
|
||||
else
|
||||
{
|
||||
pp->hi_sectp = ceilColl.sector();
|
||||
pp->hi_sectp = ceilColl.hitSector;
|
||||
}
|
||||
|
||||
if (floorColl.type == kHitSprite)
|
||||
{
|
||||
pp->lowActor = floorColl.actor;
|
||||
pp->lowActor = floorColl.actor();
|
||||
|
||||
// prevent player from standing on Zombies
|
||||
auto fsp = &floorColl.actor->s();
|
||||
if (fsp->statnum == STAT_ENEMY && floorColl.actor->u()->ID == ZOMBIE_RUN_R0)
|
||||
auto fsp = &floorColl.actor()->s();
|
||||
if (fsp->statnum == STAT_ENEMY && floorColl.actor()->u()->ID == ZOMBIE_RUN_R0)
|
||||
{
|
||||
pp->lo_sectp = fsp->sector();
|
||||
pp->loz = fsp->z;
|
||||
|
@ -1908,7 +1908,7 @@ void DoPlayerZrange(PLAYERp pp)
|
|||
}
|
||||
else
|
||||
{
|
||||
pp->lo_sectp = floorColl.sector();
|
||||
pp->lo_sectp = floorColl.hitSector;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5992,7 +5992,7 @@ void DoPlayerDeathMoveHead(PLAYERp pp)
|
|||
|
||||
//PlaySound(DIGI_DHCLUNK, pp, v3df_dontpan);
|
||||
|
||||
auto hit_sprite = u->coll.actor;
|
||||
auto hit_sprite = u->coll.actor();
|
||||
hsp = &hit_sprite->s();
|
||||
|
||||
if (!TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
|
@ -6008,7 +6008,7 @@ void DoPlayerDeathMoveHead(PLAYERp pp)
|
|||
}
|
||||
case kHitWall:
|
||||
{
|
||||
int wall_ang = NORM_ANGLE(getangle(u->coll.wall()->delta())-512);
|
||||
int wall_ang = NORM_ANGLE(getangle(u->coll.hitWall->delta())-512);
|
||||
|
||||
int dang = getincangle(wall_ang, u->slide_ang);
|
||||
u->slide_ang = NORM_ANGLE(wall_ang + 1024 - dang);
|
||||
|
|
|
@ -1021,7 +1021,7 @@ int DoRipperMoveHang(DSWActor* actor)
|
|||
u->WaitTics = 2 + ((RANDOM_P2(4 << 8) >> 8) * 120);
|
||||
|
||||
// hang flush with the wall
|
||||
sp->ang = NORM_ANGLE(getangle(u->coll.wall()->delta()) - 512);
|
||||
sp->ang = NORM_ANGLE(getangle(u->coll.hitWall->delta()) - 512);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1035,7 +1035,7 @@ int DoRipper2MoveHang(DSWActor* actor)
|
|||
u->WaitTics = 0; // Double jump
|
||||
|
||||
// hang flush with the wall
|
||||
sp->ang = NORM_ANGLE(getangle(u->coll.wall()->delta()) - 512);
|
||||
sp->ang = NORM_ANGLE(getangle(u->coll.hitWall->delta()) - 512);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -355,7 +355,7 @@ bool SectorZadjust(const Collision& ceilhit, int32_t* hiz, const Collision& flor
|
|||
{
|
||||
case kHitSector:
|
||||
{
|
||||
auto hit_sector = florhit.sector();
|
||||
auto hit_sector = florhit.hitSector;
|
||||
|
||||
// don't jack with connect sectors
|
||||
if (FAF_ConnectFloor(hit_sector))
|
||||
|
@ -409,7 +409,7 @@ bool SectorZadjust(const Collision& ceilhit, int32_t* hiz, const Collision& flor
|
|||
{
|
||||
case kHitSector:
|
||||
{
|
||||
auto hit_sector = ceilhit.sector();
|
||||
auto hit_sector = ceilhit.hitSector;
|
||||
|
||||
// don't jack with connect sectors
|
||||
if (FAF_ConnectCeiling(hit_sector))
|
||||
|
@ -460,7 +460,7 @@ void WaterAdjust(const Collision& florhit, int32_t* loz)
|
|||
{
|
||||
if (florhit.type == kHitSector)
|
||||
{
|
||||
auto sect = florhit.sector();
|
||||
auto sect = florhit.hitSector;
|
||||
if (!sect->hasU()) return;
|
||||
|
||||
if (sect->hasU() && FixedToInt(sect->depth_fixed))
|
||||
|
|
|
@ -843,7 +843,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, USER& w, USER* def
|
|||
("sz", w.sz, def->sz)
|
||||
("sang", w.sang, def->sang)
|
||||
("spal", w.spal, def->spal)
|
||||
("ret", w.coll.legacyVal, def->coll.legacyVal) // is this needed?
|
||||
//("ret", w.coll, def->coll) // is this needed?
|
||||
("Flag1", w.Flag1, def->Flag1)
|
||||
("LastWeaponNum", w.LastWeaponNum, def->LastWeaponNum)
|
||||
("WeaponNum", w.WeaponNum, def->WeaponNum)
|
||||
|
@ -864,7 +864,6 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, USER& w, USER* def
|
|||
if (arc.isReading())
|
||||
{
|
||||
w.oangdiff = 0;
|
||||
SetCollision(&w, w.coll.legacyVal);
|
||||
}
|
||||
}
|
||||
return arc;
|
||||
|
|
|
@ -4613,10 +4613,10 @@ void DoActorZrange(DSWActor* actor)
|
|||
switch (ceilhit.type)
|
||||
{
|
||||
case kHitSprite:
|
||||
u->highActor = ceilhit.actor;
|
||||
u->highActor = ceilhit.actor();
|
||||
break;
|
||||
case kHitSector:
|
||||
u->hi_sectp = ceilhit.sector();
|
||||
u->hi_sectp = ceilhit.hitSector;
|
||||
break;
|
||||
default:
|
||||
ASSERT(true==false);
|
||||
|
@ -4626,10 +4626,10 @@ void DoActorZrange(DSWActor* actor)
|
|||
switch (florhit.type)
|
||||
{
|
||||
case kHitSprite:
|
||||
u->lowActor = florhit.actor;
|
||||
u->lowActor = florhit.actor();
|
||||
break;
|
||||
case kHitSector:
|
||||
u->lo_sectp = florhit.sector();
|
||||
u->lo_sectp = florhit.hitSector;
|
||||
break;
|
||||
default:
|
||||
ASSERT(true==false);
|
||||
|
@ -4654,20 +4654,20 @@ int DoActorGlobZ(DSWActor* actor)
|
|||
switch (globhihit.type)
|
||||
{
|
||||
case kHitSprite:
|
||||
u->highActor = globhihit.actor;
|
||||
u->highActor = globhihit.actor();
|
||||
break;
|
||||
default:
|
||||
u->hi_sectp = globhihit.sector();
|
||||
u->hi_sectp = globhihit.hitSector;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (globlohit.type)
|
||||
{
|
||||
case kHitSprite:
|
||||
u->lowActor = globlohit.actor;
|
||||
u->lowActor = globlohit.actor();
|
||||
break;
|
||||
default:
|
||||
u->lo_sectp = globlohit.sector();
|
||||
u->lo_sectp = globlohit.hitSector;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -4697,7 +4697,7 @@ bool ActorDrop(DSWActor* actor, int x, int y, int z, sectortype* new_sector, sho
|
|||
{
|
||||
case kHitSprite:
|
||||
{
|
||||
SPRITEp hsp = &florhit.actor->s();
|
||||
SPRITEp hsp = &florhit.actor()->s();
|
||||
|
||||
// if its a floor sprite and not too far down
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_FLOOR) &&
|
||||
|
@ -6449,7 +6449,7 @@ void SpriteControl(void)
|
|||
|
||||
Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, int ceildist, int flordist, uint32_t cliptype, int numtics)
|
||||
{
|
||||
Collision retval(0);
|
||||
Collision retval{};
|
||||
int zh;
|
||||
int dasectnum;
|
||||
short tempshort;
|
||||
|
@ -6660,7 +6660,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i
|
|||
{
|
||||
USERp u = actor->u();
|
||||
SPRITEp sp = &actor->s();
|
||||
Collision retval(0);
|
||||
Collision retval{};
|
||||
int zh;
|
||||
int dasectnum, tempshort;
|
||||
short lastsectnum;
|
||||
|
@ -6692,7 +6692,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i
|
|||
if (dasectnum < 0)
|
||||
{
|
||||
// we've gone beyond a white wall - kill it
|
||||
retval.setSky();
|
||||
retval.setVoid();
|
||||
return retval;
|
||||
}
|
||||
retval.setFromEngine(cmret);
|
||||
|
@ -6767,7 +6767,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i
|
|||
{
|
||||
if (sp->z < sp->sector()->ceilingz)
|
||||
{
|
||||
retval.setSky();
|
||||
retval.setVoid();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6775,7 +6775,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i
|
|||
{
|
||||
if (sp->z > sp->sector()->floorz)
|
||||
{
|
||||
retval.setSky();
|
||||
retval.setVoid();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6788,7 +6788,7 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei
|
|||
USERp u = actor->u();
|
||||
SPRITEp sp = &actor->s();
|
||||
int daz;
|
||||
Collision retval(0);
|
||||
Collision retval{};
|
||||
int dasectnum;
|
||||
short lastsectnum;
|
||||
int ox,oy;
|
||||
|
@ -6843,7 +6843,7 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei
|
|||
if (dasectnum < 0)
|
||||
{
|
||||
// we've gone beyond a white wall - kill it
|
||||
retval.setSky();
|
||||
retval.setVoid();
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -6873,7 +6873,7 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei
|
|||
if (labs(u->hiz - u->loz) < Z(12))
|
||||
{
|
||||
// we've gone into a very small place - kill it
|
||||
retval.setSky();
|
||||
retval.setVoid();
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
|
@ -138,54 +138,6 @@ public:
|
|||
};
|
||||
|
||||
|
||||
|
||||
inline int Collision::setNone()
|
||||
{
|
||||
type = kHitNone;
|
||||
index = -1;
|
||||
legacyVal = 0;
|
||||
actor = nullptr;
|
||||
return kHitNone;
|
||||
}
|
||||
|
||||
inline int Collision::setSector(int num)
|
||||
{
|
||||
type = kHitSector;
|
||||
index = num;
|
||||
legacyVal = type | index;
|
||||
actor = nullptr;
|
||||
return kHitSector;
|
||||
}
|
||||
inline int Collision::setWall(int num)
|
||||
{
|
||||
type = kHitWall;
|
||||
index = num;
|
||||
legacyVal = type | index;
|
||||
actor = nullptr;
|
||||
return kHitWall;
|
||||
}
|
||||
inline int Collision::setSprite(DSWActor* num)
|
||||
{
|
||||
type = kHitSprite;
|
||||
index = -1;
|
||||
legacyVal = type | int(num - swActors);
|
||||
actor = num;
|
||||
return kHitSprite;
|
||||
}
|
||||
|
||||
int Collision::setSky() { setNone(); type = kHitVoid; return kHitVoid; }
|
||||
|
||||
inline int Collision::setFromEngine(int value)
|
||||
{
|
||||
legacyVal = value;
|
||||
type = value & kHitTypeMaskSW;
|
||||
if (type == 0) { index = -1; actor = nullptr; }
|
||||
else if (type != kHitSprite) { index = value & kHitIndexMask; actor = nullptr; }
|
||||
else { index = -1; actor = &swActors[value & kHitIndexMask]; }
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
inline FSerializer& Serialize(FSerializer& arc, const char* keyname, DSWActor*& w, DSWActor** def)
|
||||
{
|
||||
int index = w? int(w - swActors) : -1;
|
||||
|
|
|
@ -3834,9 +3834,9 @@ int DoVomit(DSWActor* actor)
|
|||
|
||||
if (u->coll.type == kHitSprite)
|
||||
{
|
||||
if (TEST(u->coll.actor->s().extra, SPRX_PLAYER_OR_ENEMY))
|
||||
if (TEST(u->coll.actor()->s().extra, SPRX_PLAYER_OR_ENEMY))
|
||||
{
|
||||
DoDamage(u->coll.actor, actor);
|
||||
DoDamage(u->coll.actor(), actor);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -4223,7 +4223,7 @@ bool VehicleMoveHit(DSWActor* actor)
|
|||
{
|
||||
case kHitSector:
|
||||
{
|
||||
SECTORp sectp = u->coll.sector();
|
||||
SECTORp sectp = u->coll.hitSector;
|
||||
|
||||
if (TEST(sectp->extra, SECTFX_SECTOR_OBJECT))
|
||||
{
|
||||
|
@ -4235,7 +4235,7 @@ bool VehicleMoveHit(DSWActor* actor)
|
|||
|
||||
case kHitSprite:
|
||||
{
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
SPRITEp hsp = &hitActor->s();
|
||||
|
||||
if (TEST(hsp->extra, SPRX_BREAKABLE))
|
||||
|
@ -4266,7 +4266,7 @@ bool VehicleMoveHit(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
auto wph = u->coll.wall();
|
||||
auto wph = u->coll.hitWall;
|
||||
|
||||
if (TEST(wph->extra, WALLFX_SECTOR_OBJECT))
|
||||
{
|
||||
|
@ -4309,7 +4309,7 @@ bool WeaponMoveHit(DSWActor* actor)
|
|||
SECTORp sectp;
|
||||
SECTOR_OBJECTp sop;
|
||||
|
||||
sectp = u->coll.sector();
|
||||
sectp = u->coll.hitSector;
|
||||
|
||||
ASSERT(sectp->extra != -1);
|
||||
|
||||
|
@ -4377,7 +4377,7 @@ bool WeaponMoveHit(DSWActor* actor)
|
|||
SPRITEp hsp;
|
||||
USERp hu;
|
||||
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
hsp = &hitActor->s();
|
||||
hu = hitActor->u();
|
||||
|
||||
|
@ -4453,7 +4453,7 @@ bool WeaponMoveHit(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
auto wph = u->coll.wall();
|
||||
auto wph = u->coll.hitWall;
|
||||
SECTOR_OBJECTp sop;
|
||||
|
||||
ASSERT(wph->extra != -1);
|
||||
|
@ -7602,7 +7602,7 @@ int DoStar(DSWActor* actor)
|
|||
short nw,wall_ang;
|
||||
WALLp wph;
|
||||
|
||||
wph = u->coll.wall();
|
||||
wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -7649,7 +7649,7 @@ int DoStar(DSWActor* actor)
|
|||
case kHitSector:
|
||||
{
|
||||
bool did_hit_wall;
|
||||
auto hit_sect = u->coll.sector();
|
||||
auto hit_sect = u->coll.hitSector;
|
||||
|
||||
if (sp->z > ((u->hiz + u->loz) >> 1))
|
||||
{
|
||||
|
@ -7735,9 +7735,9 @@ int DoStar(DSWActor* actor)
|
|||
|
||||
if (u->coll.type != kHitNone)
|
||||
{
|
||||
if (u->coll.type == kHitSprite && u->coll.actor->hasU())
|
||||
if (u->coll.type == kHitSprite && u->coll.actor()->hasU())
|
||||
{
|
||||
su = u->coll.actor->u();
|
||||
su = u->coll.actor()->u();
|
||||
if (su->ID == TRASHCAN || su->ID == ZILLA_RUN_R0)
|
||||
PlaySound(DIGI_STARCLINK, actor, v3df_none);
|
||||
}
|
||||
|
@ -8239,7 +8239,7 @@ int DoPlasma(DSWActor* actor)
|
|||
// if hit a player/enemy back up and do it again with blocking reset
|
||||
if (u->coll.type == kHitSprite)
|
||||
{
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
SPRITEp hsp = &hitActor->s();
|
||||
USERp hu = hitActor->u();
|
||||
|
||||
|
@ -8379,7 +8379,7 @@ bool SlopeBounce(DSWActor* actor, bool *hit_wall)
|
|||
int dax,day,daz;
|
||||
short daang;
|
||||
|
||||
auto hit_sector = u->coll.sector();
|
||||
auto hit_sector = u->coll.hitSector;
|
||||
|
||||
getzsofslopeptr(hit_sector, sp->x, sp->y, &hiz, &loz);
|
||||
|
||||
|
@ -8480,7 +8480,7 @@ int DoGrenade(DSWActor* actor)
|
|||
|
||||
PlaySound(DIGI_40MMBNCE, actor, v3df_dontpan);
|
||||
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
hsp = &hitActor->s();
|
||||
|
||||
// special case so grenade can ring gong
|
||||
|
@ -8520,7 +8520,7 @@ int DoGrenade(DSWActor* actor)
|
|||
short nw,wall_ang;
|
||||
WALLp wph;
|
||||
|
||||
wph = u->coll.wall();
|
||||
wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -8709,7 +8709,7 @@ int DoVulcanBoulder(DSWActor* actor)
|
|||
short wall_ang;
|
||||
SPRITEp hsp;
|
||||
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
hsp = &hitActor->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
|
@ -8733,7 +8733,7 @@ int DoVulcanBoulder(DSWActor* actor)
|
|||
short nw,wall_ang;
|
||||
WALLp wph;
|
||||
|
||||
wph = u->coll.wall();
|
||||
wph = u->coll.hitWall;
|
||||
|
||||
if (wph->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -9091,7 +9091,7 @@ int DoMine(DSWActor* actor)
|
|||
return 0;
|
||||
case kHitSprite:
|
||||
{
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
SPRITEp hsp = &hitActor->s();
|
||||
USERp hu = hitActor->u();
|
||||
|
||||
|
@ -9159,7 +9159,7 @@ int DoMine(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
auto hit_wall = u->coll.wall();
|
||||
auto hit_wall = u->coll.hitWall;
|
||||
|
||||
if (hit_wall->lotag == TAG_WALL_BREAK)
|
||||
{
|
||||
|
@ -9188,7 +9188,7 @@ int DoMine(DSWActor* actor)
|
|||
|
||||
case kHitSector:
|
||||
{
|
||||
auto hit_sect = u->coll.sector();
|
||||
auto hit_sect = u->coll.hitSector;
|
||||
|
||||
SetMineStuck(actor);
|
||||
|
||||
|
@ -9525,7 +9525,7 @@ int DoRail(DSWActor* actor)
|
|||
{
|
||||
if (u->coll.type == kHitSprite)
|
||||
{
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
auto hs = &hitActor->s();
|
||||
|
||||
if (hs->extra & SPRX_PLAYER_OR_ENEMY)
|
||||
|
@ -9967,7 +9967,7 @@ int DoElectro(DSWActor* actor)
|
|||
{
|
||||
case kHitSprite:
|
||||
{
|
||||
auto hitActor = u->coll.actor;
|
||||
auto hitActor = u->coll.actor();
|
||||
SPRITEp hsp = &hitActor->s();
|
||||
USERp hu = hitActor->u();
|
||||
|
||||
|
@ -11147,8 +11147,8 @@ int DoFireball(DSWActor* actor)
|
|||
if (TEST(hsp->extra, SPRX_BURNABLE))
|
||||
{
|
||||
if (!hu)
|
||||
hu = SpawnUser(u->coll.actor, hsp->picnum, nullptr);
|
||||
SpawnFireballFlames(actor, u->coll.actor);
|
||||
hu = SpawnUser(u->coll.actor(), hsp->picnum, nullptr);
|
||||
SpawnFireballFlames(actor, u->coll.actor());
|
||||
hit_burn = true;
|
||||
}
|
||||
|
||||
|
@ -11191,7 +11191,7 @@ int DoFindGround(DSWActor* actor)
|
|||
{
|
||||
case kHitSprite:
|
||||
{
|
||||
auto florActor = florhit.actor;
|
||||
auto florActor = florhit.actor();
|
||||
hsp = &florActor->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_FLOOR))
|
||||
|
@ -11215,7 +11215,7 @@ int DoFindGround(DSWActor* actor)
|
|||
}
|
||||
case kHitSector:
|
||||
{
|
||||
u->lo_sectp = florhit.sector();
|
||||
u->lo_sectp = florhit.hitSector;
|
||||
u->lowActor = nullptr;
|
||||
return true;
|
||||
}
|
||||
|
@ -11248,7 +11248,7 @@ int DoFindGroundPoint(DSWActor* actor)
|
|||
{
|
||||
case kHitSprite:
|
||||
{
|
||||
auto florActor = florhit.actor;
|
||||
auto florActor = florhit.actor();
|
||||
hsp = &florActor->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_FLOOR))
|
||||
|
@ -11272,7 +11272,7 @@ int DoFindGroundPoint(DSWActor* actor)
|
|||
}
|
||||
case kHitSector:
|
||||
{
|
||||
u->lo_sectp = florhit.sector();
|
||||
u->lo_sectp = florhit.hitSector;
|
||||
u->lowActor = nullptr;
|
||||
return true;
|
||||
}
|
||||
|
@ -11321,7 +11321,7 @@ int DoNapalm(DSWActor* actor)
|
|||
// if hit a player/enemy back up and do it again with blocking reset
|
||||
if (u->coll.type == kHitSprite)
|
||||
{
|
||||
SPRITEp hsp = &u->coll.actor->s();
|
||||
SPRITEp hsp = &u->coll.actor()->s();
|
||||
|
||||
if (TEST(hsp->cstat, CSTAT_SPRITE_BLOCK) && !TEST(hsp->cstat, CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
{
|
||||
|
@ -11503,8 +11503,8 @@ int DoSerpMeteor(DSWActor* actor)
|
|||
// if hit a player/enemy back up and do it again with blocking reset
|
||||
if (u->coll.type == kHitSprite)
|
||||
{
|
||||
SPRITEp hsp = &u->coll.actor->s();
|
||||
USERp hu = u->coll.actor->u();
|
||||
SPRITEp hsp = &u->coll.actor()->s();
|
||||
USERp hu = u->coll.actor()->u();
|
||||
|
||||
if (hu && hu->ID >= SKULL_R0 && hu->ID <= SKULL_SERP)
|
||||
{
|
||||
|
@ -14891,7 +14891,7 @@ int InitGoroChop(DSWActor* actor)
|
|||
|
||||
int InitHornetSting(DSWActor* actor)
|
||||
{
|
||||
DoDamage(actor->u()->coll.actor, actor);
|
||||
DoDamage(actor->u()->coll.actor(), actor);
|
||||
InitActorReposition(actor);
|
||||
return 0;
|
||||
}
|
||||
|
@ -18238,7 +18238,7 @@ bool MissileHitDiveArea(DSWActor* actor)
|
|||
|
||||
if (u->coll.type == kHitSector)
|
||||
{
|
||||
auto hit_sect = u->coll.sector();
|
||||
auto hit_sect = u->coll.hitSector;
|
||||
|
||||
if (SpriteInDiveArea(sp))
|
||||
{
|
||||
|
@ -18534,7 +18534,7 @@ bool TestDontStick(DSWActor* actor, walltype* hit_wall)
|
|||
ASSERT(actor != nullptr);
|
||||
USERp u = actor->u();
|
||||
if (u->coll.type != kHitWall) return true; // ain't got a wall here.
|
||||
hit_wall = u->coll.wall();
|
||||
hit_wall = u->coll.hitWall;
|
||||
}
|
||||
|
||||
wp = hit_wall;
|
||||
|
@ -19201,7 +19201,7 @@ int DoShrapVelocity(DSWActor* actor)
|
|||
short wall_ang;
|
||||
SPRITEp hsp;
|
||||
|
||||
auto hit_sprite = u->coll.actor;
|
||||
auto hit_sprite = u->coll.actor();
|
||||
hsp = &hit_sprite->s();
|
||||
|
||||
wall_ang = NORM_ANGLE(hsp->ang);
|
||||
|
@ -19213,7 +19213,7 @@ int DoShrapVelocity(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
int wall_ang = NORM_ANGLE(getangle(u->coll.wall()->delta())+512);
|
||||
int wall_ang = NORM_ANGLE(getangle(u->coll.hitWall->delta())+512);
|
||||
|
||||
WallBounce(actor, wall_ang);
|
||||
ScaleSpriteVector(actor, 32000);
|
||||
|
@ -19519,7 +19519,7 @@ int DoItemFly(DSWActor* actor)
|
|||
case kHitSprite:
|
||||
{
|
||||
short wall_ang;
|
||||
auto hit_sprite = u->coll.actor;
|
||||
auto hit_sprite = u->coll.actor();
|
||||
SPRITEp hsp;
|
||||
|
||||
hsp = &hit_sprite->s();
|
||||
|
@ -19541,7 +19541,7 @@ int DoItemFly(DSWActor* actor)
|
|||
|
||||
case kHitWall:
|
||||
{
|
||||
int wall_ang = NORM_ANGLE(getangle(u->coll.wall()->delta())+512);
|
||||
int wall_ang = NORM_ANGLE(getangle(u->coll.hitWall->delta())+512);
|
||||
WallBounce(actor, wall_ang);
|
||||
ScaleSpriteVector(actor, 32000);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue