From 3c1970e9e093c95c7510cf4c865d6ad7cc049595 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 12 Sep 2022 22:37:08 +0200 Subject: [PATCH] - floatified alterang and changed return type of furthestangle --- source/games/duke/src/actors.cpp | 35 +++++++++++++++--------------- source/games/duke/src/actors_r.cpp | 2 +- source/games/duke/src/constants.h | 1 + source/games/duke/src/funct.h | 2 +- source/games/duke/src/player_d.cpp | 2 +- source/games/duke/src/player_r.cpp | 4 ++-- 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 380dda5fa..3b2e1cfc1 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -4912,7 +4912,7 @@ int dodge(DDukeActor* actor) // //--------------------------------------------------------------------------- -int furthestangle(DDukeActor *actor, int angs) +DAngle furthestangle(DDukeActor *actor, int angs) { int j, furthest_angle = 0, angincs; int d, greatestd; @@ -4922,7 +4922,7 @@ int furthestangle(DDukeActor *actor, int angs) angincs = 2048 / angs; if (!actor->isPlayer()) - if ((actor->temp_data[0] & 63) > 2) return(actor->int_ang() + 1024); + if ((actor->temp_data[0] & 63) > 2) return(actor->spr.angle + DAngle180); for (j = actor->int_ang(); j < (2048 + actor->int_ang()); j += angincs) { @@ -4936,7 +4936,7 @@ int furthestangle(DDukeActor *actor, int angs) furthest_angle = j; } } - return (furthest_angle & 2047); + return DAngle::fromBuild(furthest_angle & 2047); } //--------------------------------------------------------------------------- @@ -4982,14 +4982,15 @@ int furthestcanseepoint(DDukeActor *actor, DDukeActor* tosee, int* dax, int* day void alterang(int ang, DDukeActor* actor, int playernum) { - int aang, angdif, goalang, j; + DAngle goalang, aang, angdif; + int j; int ticselapsed; auto moveptr = &ScriptCode[actor->temp_data[1]]; ticselapsed = (actor->temp_data[0]) & 31; - aang = actor->int_ang(); + aang = actor->spr.angle; actor->vel.X += (moveptr[0] / 16 - actor->vel.X) / 5; if (actor->vel.Z < (648 / 256.)) @@ -5011,31 +5012,31 @@ void alterang(int ang, DDukeActor* actor, int playernum) auto Owner = actor->GetOwner(); if (Owner->isPlayer()) - goalang = getangle(actor->ovel.X - actor->int_pos().X, actor->ovel.Y - actor->int_pos().Y); + goalang = VecToAngle(actor->ovel.X - actor->int_pos().X, actor->ovel.Y - actor->int_pos().Y); else - goalang = getangle(Owner->spr.pos.XY() - actor->spr.pos.XY()); + goalang = VecToAngle(Owner->spr.pos.XY() - actor->spr.pos.XY()); if (actor->vel.X != 0 && actor->spr.picnum != TILE_DRONE) { - angdif = getincangle(aang, goalang); + angdif = absangle(aang, goalang); if (ticselapsed < 2) { - if (abs(angdif) < 256) + if (angdif < DAngle45) { - j = 128 - (krand() & 256); - actor->add_int_ang(j); + DAngle add = DAngle22_5 * ((krand() & 256)? 1 : -1); + actor->spr.angle += add; if (hits(actor) < 844) - actor->add_int_ang(-j); + actor->spr.angle -= add; } } else if (ticselapsed > 18 && ticselapsed < 26) // choose { - if (abs(angdif >> 2) < 128) actor->set_int_ang(goalang); - else actor->add_int_ang(angdif >> 2); + if (angdif < DAngle90) actor->spr.angle = goalang; + else actor->spr.angle += angdif * 0.25; } } - else actor->set_int_ang(goalang); + else actor->spr.angle = goalang; } if (ticselapsed < 1) @@ -5044,14 +5045,14 @@ void alterang(int ang, DDukeActor* actor, int playernum) if (ang & furthestdir) { goalang = furthestangle(actor, j); - actor->set_int_ang(goalang); + actor->spr.angle = goalang; actor->SetOwner(ps[playernum].GetActor()); } if (ang & fleeenemy) { goalang = furthestangle(actor, j); - actor->set_int_ang(goalang); // += angdif; // = getincangle(aang,goalang)>>1; + actor->spr.angle = goalang; } } } diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index e11950a88..0acbfa896 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -3358,7 +3358,7 @@ void moveeffectors_r(void) //STATNUM 3 case SE_24_CONVEYOR: case SE_34: { - handle_se24(act, st != 156, 1); + handle_se24(act, st != SE_156_CONVEYOR_NOSCROLL, 1); break; } diff --git a/source/games/duke/src/constants.h b/source/games/duke/src/constants.h index 9306c135f..95df57167 100644 --- a/source/games/duke/src/constants.h +++ b/source/games/duke/src/constants.h @@ -91,6 +91,7 @@ enum SE_128_GLASS_BREAKING = 128, SE_130 = 130, SE_131 = 131, + SE_156_CONVEYOR_NOSCROLL = 156, }; // sector lotags, also from EDuke32, for the same reason as above. diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index fe0d7238c..fa15cd25a 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -175,7 +175,7 @@ void clearcamera(player_struct* ps); void LoadActor(DDukeActor* i, int p, int x); void execute(DDukeActor* s, int p, int d); void makeitfall(DDukeActor* s); -int furthestangle(DDukeActor* snum, int angDiv); +DAngle furthestangle(DDukeActor* snum, int angDiv); void getglobalz(DDukeActor* s); void OnEvent(int id, int pnum = -1, DDukeActor* snum = nullptr, int dist = -1); diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 1c5c5349d..df5347a1b 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -3090,7 +3090,7 @@ HORIZONLY: while (ud.clipping == 0) { int blocked; - blocked = (pushmove(p->pos, &p->cursector, 164, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); + blocked = (pushmove(p->pos, &p->cursector, 164, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); 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 35df62a09..1b93bebfe 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3917,9 +3917,9 @@ HORIZONLY: { int blocked; if (pact->native_clipdist() == 64) - blocked = (pushmove(p->pos, &p->cursector, 128, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); + blocked = (pushmove(p->pos, &p->cursector, 128, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); else - blocked = (pushmove(p->pos, &p->cursector, 16, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < 512); + blocked = (pushmove(p->pos, &p->cursector, 16, (4 << 8), (4 << 8), CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) {