| 3949 | } |
| 3950 | |
| 3951 | void cFodder::Briefing_Update_Helicopter() { |
| 3952 | |
| 3953 | mBriefingHelicopter_ScreenX = (((int)mHelicopterPosX - 0x20) >> 16); |
| 3954 | mBriefingHelicopter_ScreenY = (((int)mHelicopterPosY) >> 16); |
| 3955 | |
| 3956 | mBriefingHelicopter_NextUpdateCountdown -= mBriefingHelicopter_TimeScale; |
| 3957 | |
| 3958 | if (mBriefingHelicopter_NextUpdateCountdown <= 0.0f) { |
| 3959 | |
| 3960 | mBriefingHelicopter_TargetDirection = mBriefing_Helicopter_Offsets_Amiga[mHelicopterOffsetIndex]; |
| 3961 | mBriefingHelicopter_TargetSpeed = mBriefing_Helicopter_Offsets_Amiga[mHelicopterOffsetIndex + 1]; |
| 3962 | mBriefingHelicopter_NextUpdateCountdown = (mBriefing_Helicopter_Offsets_Amiga[mHelicopterOffsetIndex + 2]); |
| 3963 | |
| 3964 | if (mBriefingHelicopter_NextUpdateCountdown <= 0.0f) |
| 3965 | return; |
| 3966 | |
| 3967 | mHelicopterOffsetIndex += 3; |
| 3968 | } |
| 3969 | |
| 3970 | mBriefingHelicopter_DirectionIndex &= 0x1FE; |
| 3971 | uint16 bx = mBriefingHelicopter_DirectionIndex; |
| 3972 | |
| 3973 | int32 ax = mDirectionVectorTable[(bx / 2) & 0xFF]; |
| 3974 | ax >>= 2; |
| 3975 | |
| 3976 | mHelicopterPosX += (ax * mBriefingHelicopter_Speed * mBriefingHelicopter_TimeScale); |
| 3977 | |
| 3978 | bx += 0x80; |
| 3979 | bx &= 0x1FE; |
| 3980 | |
| 3981 | ax = mDirectionVectorTable[(bx / 2) & 0xFF]; |
| 3982 | ax >>= 2; |
| 3983 | |
| 3984 | mHelicopterPosY += (ax * mBriefingHelicopter_Speed * mBriefingHelicopter_TimeScale); |
| 3985 | |
| 3986 | bx = mBriefingHelicopter_TargetDirection - mBriefingHelicopter_DirectionIndex; |
| 3987 | bx >>= 5; |
| 3988 | --bx; |
| 3989 | bx ^= 0x0F; |
| 3990 | bx &= 0x0F; |
| 3991 | |
| 3992 | int16 al = mDirectionStepTable[bx]; |
| 3993 | al <<= 2; |
| 3994 | //mBriefingHelicopter_DirectionIndex += al; |
| 3995 | mBriefingHelicopter_DirectionIndex += static_cast<int>(al * mBriefingHelicopter_TimeScale); |
| 3996 | |
| 3997 | mBriefingHelicopter_DirectionIndex &= 0x1FE; |
| 3998 | |
| 3999 | if (mBriefingHelicopter_TargetSpeed != mBriefingHelicopter_Speed) { |
| 4000 | if (mBriefingHelicopter_Speed > mBriefingHelicopter_TargetSpeed) |
| 4001 | mBriefingHelicopter_Speed -= (1.0f * mBriefingHelicopter_TimeScale); |
| 4002 | else |
| 4003 | mBriefingHelicopter_Speed += (1.0f * mBriefingHelicopter_TimeScale); |
| 4004 | } |
| 4005 | |
| 4006 | if (mVersionCurrent->isCannonFodder1() && mVersionCurrent->isPC()) |
| 4007 | mBriefingHelicopter_FrameCounter += 1; |
| 4008 |
nothing calls this directly
no test coverage detected