From fe7dfa1c53892d6553a94eb6677cd8176cdf7bf1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 11 Sep 2022 19:05:14 +0200 Subject: [PATCH] - floatify angle stuff for bowling, henstand etc. in RR. --- source/games/duke/src/inlines.h | 10 ++++++++++ source/games/duke/src/sectors_r.cpp | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/source/games/duke/src/inlines.h b/source/games/duke/src/inlines.h index c8a3b3957..8e75c5495 100644 --- a/source/games/duke/src/inlines.h +++ b/source/games/duke/src/inlines.h @@ -247,4 +247,14 @@ inline ESpriteFlags randomXFlip() return CSTAT_SPRITE_XFLIP; } +inline DAngle randomAngle(double span) +{ + return DAngle::fromDeg(krandf(span)); +} + +inline DAngle randomAngle(DAngle span) +{ + return DAngle::fromDeg(krandf(span.Degrees())); +} + END_DUKE_NS diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp index 11dc5c891..2bc992673 100644 --- a/source/games/duke/src/sectors_r.cpp +++ b/source/games/duke/src/sectors_r.cpp @@ -2076,31 +2076,31 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj) case HENSTAND + 1: if (proj->spr.picnum == QUEBALL || proj->spr.picnum == STRIPEBALL) { - proj->set_int_xvel((targ->int_xvel() >> 1) + (targ->int_xvel() >> 2)); - proj->add_int_ang(-((targ->int_ang() << 1) + 1024)); - targ->set_int_ang(getangle(targ->int_pos().X - proj->int_pos().X, targ->int_pos().Y - proj->int_pos().Y) - 512); + proj->vel.X *= 0.75; + proj->spr.angle -= targ->spr.angle * 2 + DAngle180; + targ->spr.angle = VecToAngle(targ->spr.pos.XY() - proj->spr.pos.XY()) - DAngle90; if (S_CheckSoundPlaying(POOLBALLHIT) < 2) S_PlayActorSound(POOLBALLHIT, targ); } else if (proj->spr.picnum == BOWLINGPIN || proj->spr.picnum == BOWLINGPIN + 1) { - proj->set_int_xvel((targ->int_xvel() >> 1) + (targ->int_xvel() >> 2)); - proj->add_int_ang(-(((targ->int_ang() << 1) + krand()) & 64)); - targ->set_int_ang((targ->int_ang() + krand()) & 16); + proj->vel.X *= 0.75; + proj->spr.angle -= targ->spr.angle * 2 + randomAngle(11.25); + targ->spr.angle += randomAngle(22.5 / 8); S_PlayActorSound(355, targ); } else if (proj->spr.picnum == HENSTAND || proj->spr.picnum == HENSTAND + 1) { - proj->set_int_xvel((targ->int_xvel() >> 1) + (targ->int_xvel() >> 2)); - proj->add_int_ang(-(((targ->int_ang() << 1) + krand()) & 16)); - targ->set_int_ang((targ->int_ang() + krand()) & 16); + proj->vel.X *= 0.75; + proj->spr.angle -= targ->spr.angle * 2 + randomAngle(22.5 / 8); + targ->spr.angle += randomAngle(22.5 / 8); S_PlayActorSound(355, targ); } else { if (krand() & 3) { - targ->set_int_xvel(164); + targ->vel.X = 10.25; targ->spr.angle = proj->spr.angle; } }