diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 3e7146abb..472899e20 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -4333,12 +4333,11 @@ void handle_se27(DDukeActor* actor) // //--------------------------------------------------------------------------- -void handle_se24(DDukeActor *actor, bool scroll, int shift) +void handle_se24(DDukeActor *actor, bool scroll, double mult) { if (actor->temp_data[4]) return; - int x = MulScale(actor->spr.yint, bcos(actor->int_ang()), 18); - int y = MulScale(actor->spr.yint, bsin(actor->int_ang()), 18); + auto vec = actor->spr.angle.ToVector() * actor->spr.yint / 256.; DukeSectIterator it(actor->sector()); while (auto a2 = it.Next()) @@ -4363,7 +4362,7 @@ void handle_se24(DDukeActor *actor, bool scroll, int shift) if (a2->spr.pos.Z > a2->floorz - 16) { - a2->add_int_pos({ x >> shift , y >> shift, 0 }); + a2->spr.pos += vec * mult; SetActor(a2, a2->spr.pos); @@ -4382,8 +4381,7 @@ void handle_se24(DDukeActor *actor, bool scroll, int shift) { if (abs(ps[p].pos.Z - ps[p].truefz) < gs.playerheight + 9) { - ps[p].fric.X += x * (1. / 64.); - ps[p].fric.Y += y * (1. / 64.); + ps[p].fric += vec * (1. / 4.); } } } diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 605e1c8b9..70e3d00cd 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -3383,7 +3383,7 @@ void moveeffectors_d(void) //STATNUM 3 case SE_24_CONVEYOR: case SE_34: { - handle_se24(act, true, 2); + handle_se24(act, true, 0.25); break; } case SE_35: diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 894345db9..1c0310ba6 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -3332,13 +3332,13 @@ void moveeffectors_r(void) //STATNUM 3 handle_se22(act); break; - case 156: + case SE_156_CONVEYOR_NOSCROLL: if (!isRRRA()) break; [[fallthrough]]; case SE_24_CONVEYOR: case SE_34: { - handle_se24(act, st != SE_156_CONVEYOR_NOSCROLL, 1); + handle_se24(act, st != SE_156_CONVEYOR_NOSCROLL, 0.5); break; } diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index 1dd6070d6..e3b23542b 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -85,7 +85,7 @@ void handle_se19(DDukeActor* i, int BIGFORCE); void handle_se20(DDukeActor* i); void handle_se21(DDukeActor* i); void handle_se22(DDukeActor* i); -void handle_se24(DDukeActor* actor, bool scroll, int shift); +void handle_se24(DDukeActor* actor, bool scroll, double shift); void handle_se25(DDukeActor* a, int snd1, int snd2); void handle_se26(DDukeActor* i); void handle_se27(DDukeActor* i);