From 9cd57f4510e35bdaab6a995151f41c09d278dec7 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 5 Feb 2022 12:47:05 +0100 Subject: [PATCH] - pushmove wrapper and a few other replacements. --- source/games/duke/src/actors.cpp | 10 ++++------ source/games/duke/src/inlines.h | 6 ++++++ source/games/duke/src/player.cpp | 2 +- source/games/duke/src/player_d.cpp | 4 ++-- source/games/duke/src/player_r.cpp | 14 ++++++-------- source/games/duke/src/types.h | 10 ++++++++++ 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index a5dc5faf3..04b6e3cd7 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -455,9 +455,7 @@ void moveplayers(void) } else { - p->__int_pos.X = act->int_pos().X; - p->__int_pos.Y = act->int_pos().Y; - p->__int_pos.Z = act->int_pos().Z - (20 << 8); + p->getposfromactor(act, -20); p->newOwner = nullptr; @@ -794,7 +792,7 @@ void movecrane(DDukeActor *actor, int crane) ps[p].__int_pos.X = actor->int_pos().X - bcos(ang, -6); ps[p].__int_pos.Y = actor->int_pos().Y - bsin(ang, -6); ps[p].__int_pos.Z = actor->int_pos().Z + (2 << 8); - SetActor(ps[p].GetActor(), ps[p].__int_pos); + SetActor(ps[p].GetActor(), ps[p].player_int_pos()); ps[p].setCursector(ps[p].GetActor()->sector()); } } @@ -2685,7 +2683,7 @@ void handle_se00(DDukeActor* actor) ps[p].__int_pos.Z += zchange; vec2_t res; - rotatepoint(Owner->int_pos().vec2, ps[p].__int_pos.vec2, (q * l), &res); + rotatepoint(Owner->int_pos().vec2, ps[p].player_int_pos().vec2, (q * l), &res); ps[p].bobpos.X += res.X - ps[p].player_int_pos().X; ps[p].bobpos.Y += res.Y - ps[p].player_int_pos().Y; @@ -2859,7 +2857,7 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) if (actor->sector() == psp->sector()) { - rotatepoint(actor->int_pos().vec2, ps[p].__int_pos.vec2, q, &ps[p].__int_pos.vec2); + rotatepoint(actor->int_pos().vec2, ps[p].player_int_pos().vec2, q, &ps[p].__int_pos.vec2); ps[p].__int_pos.X += m; ps[p].__int_pos.Y +=x; diff --git a/source/games/duke/src/inlines.h b/source/games/duke/src/inlines.h index df39e4ac0..db4587dc3 100644 --- a/source/games/duke/src/inlines.h +++ b/source/games/duke/src/inlines.h @@ -247,4 +247,10 @@ inline ESpriteFlags randomXFlip() return CSTAT_SPRITE_XFLIP; } +inline int pushmove_p(player_struct* actor, sectortype** const sect, int32_t const walldist, int32_t const ceildist, int32_t const flordist, + uint32_t const cliptype, bool clear = true) +{ + return ::pushmove(&actor->__int_pos, sect, walldist, ceildist, flordist, cliptype, clear); +} + END_DUKE_NS diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index ea57cd6cc..5e4b93432 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -631,7 +631,7 @@ void playerisdead(int snum, int psectlotag, int fz, int cz) updatesector(p->player_int_pos().X, p->player_int_pos().Y, &p->cursector); - pushmove(&p->__int_pos, &p->cursector, 128L, (4 << 8), (20 << 8), CLIPMASK0); + pushmove_p(p, &p->cursector, 128L, (4 << 8), (20 << 8), CLIPMASK0); if (fz > cz + (16 << 8) && actor->spr.pal != 1) p->angle.rotscrnang = buildang(p->dead_flag + ((fz + p->player_int_pos().Z) >> 7)); diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index b759db319..b1c0bbfa2 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -2009,7 +2009,7 @@ int operateTripbomb(int snum) auto p = &ps[snum]; HitInfo hit{}; - hitscan(p->__int_pos, p->cursector, { p->angle.ang.bcos(), p->angle.ang.bsin(), -p->horizon.sum().asq16() >> 11 }, hit, CLIPMASK1); + hitscan(p->player_int_pos(), p->cursector, { p->angle.ang.bcos(), p->angle.ang.bsin(), -p->horizon.sum().asq16() >> 11 }, hit, CLIPMASK1); if (hit.hitSector == nullptr || hit.actor()) return 0; @@ -3083,7 +3083,7 @@ HORIZONLY: while (ud.clipping == 0) { int blocked; - blocked = (pushmove(&p->__int_pos, &p->cursector, 164, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); + blocked = (pushmove_p(p, &p->cursector, 164, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) { diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 904b71718..487936c81 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3830,10 +3830,10 @@ HORIZONLY: if (wal->lotag < 44) { dofurniture(clip.hitWall, p->cursector, snum); - pushmove(&p->__int_pos, &p->cursector, 172L, (4L << 8), (4L << 8), CLIPMASK0); + pushmove_p(p, &p->cursector, 172L, (4L << 8), (4L << 8), CLIPMASK0); } else - pushmove(&p->__int_pos, &p->cursector, 172L, (4L << 8), (4L << 8), CLIPMASK0); + pushmove_p(p, &p->cursector, 172L, (4L << 8), (4L << 8), CLIPMASK0); } } } @@ -3934,9 +3934,9 @@ HORIZONLY: { int blocked; if (pact->spr.clipdist == 64) - blocked = (pushmove(&p->__int_pos, &p->cursector, 128, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); + blocked = (pushmove_p(p, &p->cursector, 128, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); else - blocked = (pushmove(&p->__int_pos, &p->cursector, 16, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); + blocked = (pushmove_p(p, &p->cursector, 16, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) { @@ -4048,8 +4048,7 @@ void OnMotorcycle(struct player_struct *p, DDukeActor* motosprite) { if (motosprite) { - p->__int_pos.X = motosprite->int_pos().X; - p->__int_pos.Y = motosprite->int_pos().Y; + p->getxyfromactor(motosprite); p->angle.ang = buildang(motosprite->spr.ang); p->ammo_amount[MOTORCYCLE_WEAPON] = motosprite->saved_ammo; deletesprite(motosprite); @@ -4128,8 +4127,7 @@ void OnBoat(struct player_struct *p, DDukeActor* boat) { if (boat) { - p->__int_pos.X = boat->int_pos().X; - p->__int_pos.Y = boat->int_pos().Y; + p->getxyfromactor(boat); p->angle.ang = buildang(boat->spr.ang); p->ammo_amount[BOAT_WEAPON] = boat->saved_ammo; deletesprite(boat); diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 73115bc62..e85ac0492 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -418,6 +418,16 @@ struct player_struct return { int(opos.X * worldtoint), int(opos.Y * worldtoint),int(opos.Z * zworldtoint) }; } + void player_add_int_z(int z) + { + __int_pos.Z += z; + } + + void player_set_int_z(int z) + { + __int_pos.Z = z; + } + }; struct Cycler