diff --git a/source/games/sw/src/ai.cpp b/source/games/sw/src/ai.cpp index 8f8abaa51..01a2493a6 100644 --- a/source/games/sw/src/ai.cpp +++ b/source/games/sw/src/ai.cpp @@ -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 diff --git a/source/games/sw/src/draw.cpp b/source/games/sw/src/draw.cpp index 91b3b215d..333de67d4 100644 --- a/source/games/sw/src/draw.cpp +++ b/source/games/sw/src/draw.cpp @@ -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)) { diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index d2864a074..2358e7b6f 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -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; +using Collision = TCollision; - 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; - 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, diff --git a/source/games/sw/src/jweapon.cpp b/source/games/sw/src/jweapon.cpp index 72e23484a..65f863ede 100644 --- a/source/games/sw/src/jweapon.cpp +++ b/source/games/sw/src/jweapon.cpp @@ -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) { diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index 730a7f30b..b9766228c 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -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); diff --git a/source/games/sw/src/ripper.cpp b/source/games/sw/src/ripper.cpp index 0e2f372dd..be4f053bc 100644 --- a/source/games/sw/src/ripper.cpp +++ b/source/games/sw/src/ripper.cpp @@ -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; } diff --git a/source/games/sw/src/ripper2.cpp b/source/games/sw/src/ripper2.cpp index 083197a9b..57f5e3c97 100644 --- a/source/games/sw/src/ripper2.cpp +++ b/source/games/sw/src/ripper2.cpp @@ -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; } diff --git a/source/games/sw/src/rooms.cpp b/source/games/sw/src/rooms.cpp index 6c9ac00ae..6a490ec4a 100644 --- a/source/games/sw/src/rooms.cpp +++ b/source/games/sw/src/rooms.cpp @@ -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)) diff --git a/source/games/sw/src/save.cpp b/source/games/sw/src/save.cpp index 3d62b8cbd..9e6b60f8b 100644 --- a/source/games/sw/src/save.cpp +++ b/source/games/sw/src/save.cpp @@ -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; diff --git a/source/games/sw/src/sprite.cpp b/source/games/sw/src/sprite.cpp index f81d307e0..f616dea5a 100644 --- a/source/games/sw/src/sprite.cpp +++ b/source/games/sw/src/sprite.cpp @@ -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; } diff --git a/source/games/sw/src/swactor.h b/source/games/sw/src/swactor.h index 251e39fb6..c7b9dffb2 100644 --- a/source/games/sw/src/swactor.h +++ b/source/games/sw/src/swactor.h @@ -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; diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index 235433dca..d409b4665 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -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;