@@ -13,6 +13,7 @@ Record responsible of handling projection, similar to {ref}`MM2MS`.
1313 X, Y, Z, Pitch, Yaw, Scale, MinScale, MaxScale, ZOffset: Integer;
1414 Player, Center, Camera, Offset, ViewportOffset, Origin: TPoint;
1515 Sines, Cosines: array [0..2047] of Int32;
16+ ZoomScale, Radians: Single;
1617 const MIN_PITCH: Integer = 128;
1718 const MAX_PITCH: Integer = 383;
1819 end;
2223 i: Integer;
2324 percent: Double;
2425begin
26+ Self.ZoomScale := -1;
27+ Self.Radians := -1;
28+
2529 Self.Pitch := 383;
2630
2731 for i := 0 to 2047 do
@@ -71,19 +75,27 @@ begin
7175 Self.Y := Self.Player.Y - 674 - Round(235 * (Self.MAX_PITCH - value) / (Self.MAX_PITCH - Self.MIN_PITCH));
7276end;
7377
74- procedure TRSCamera.Update(zoom: Integer; rads: Double );
78+ procedure TRSCamera.Update(zoom: Integer; rads: Single );
7579begin
76- Self.Z := Self.ZOffset + Round(1237 * (Self.MAX_PITCH - Self.Pitch) / (Self.MAX_PITCH - Self.MIN_PITCH) - (zoom/100) * 75);
77- Self.Yaw := Trunc((rads / TAU) * 2047);
78- Self.Scale := Round(Self.MinScale + ZOOM2RSZOOM[zoom] * (Self.MaxScale-Self.MinScale));
79-
80- Self.Camera.X := Round(Self.Center.X + Cos(rads) * (Self.X - Self.Center.X) - Sin(rads) * (Self.Y - Self.Center.Y));
81- Self.Camera.Y := Round(Self.Center.Y + Sin(rads) * (Self.X - Self.Center.X) + Cos(rads) * (Self.Y - Self.Center.Y));
82- Self.Origin.X := Self.Camera.X - Self.Player.X;
83- Self.Origin.Y := Self.Camera.Y - Self.Player.Y;
84- end;
80+ if Self.ZoomScale <> ZOOM2RSZOOM[zoom] then
81+ begin
82+ Self.Z := Self.ZOffset + Round(1237 * (Self.MAX_PITCH - Self.Pitch) / (Self.MAX_PITCH - Self.MIN_PITCH) - (zoom/100) * 75);
83+ Self.ZoomScale := ZOOM2RSZOOM[zoom];
84+ Self.Scale := Round(Self.MinScale + Self.ZoomScale * (Self.MaxScale-Self.MinScale));
85+ end;
8586
87+ if Self.Radians <> rads then
88+ begin
89+ Self.Yaw := Trunc((rads / TAU) * 2047);
90+ Self.Camera.X := Round(Self.Center.X + Cos(rads) * (Self.X - Self.Center.X) - Sin(rads) * (Self.Y - Self.Center.Y));
91+ Self.Camera.Y := Round(Self.Center.Y + Sin(rads) * (Self.X - Self.Center.X) + Cos(rads) * (Self.Y - Self.Center.Y));
92+ Self.Origin.X := Self.Camera.X - Self.Player.X;
93+ Self.Origin.Y := Self.Camera.Y - Self.Player.Y;
94+ Self.Radians := rads;
95+ end;
96+ end;
8697
98+ //MM2MS
8799function TRSCamera.MinimapOffset(constref coordinate: TVector3): TVector3;
88100begin
89101 Result.X := (coordinate.X-Minimap.Center.X)/4*128 - Self.Origin.X;
@@ -103,8 +115,8 @@ begin
103115 y1 := Sar(y * Self.Cosines[Self.Yaw] - x * Self.Sines[Self.Yaw], 16);
104116 z1 := Sar(y1 * Self.Cosines[Self.Pitch] + z * Self.Sines[Self.Pitch], 16);
105117
106- if z1 < 50 then
107- Exit ;
118+ // if z1 < 50 then Exit;
119+ if z1 = 0 then z1 := 1 ;
108120
109121 x1 := Sar(x * Self.Cosines[Self.Yaw] + y * Self.Sines[Self.Yaw], 16);
110122 y2 := Sar(z * Self.Cosines[Self.Pitch] - y1 * Self.Sines[Self.Pitch], 16);
@@ -136,6 +148,7 @@ begin
136148end;
137149
138150
151+ //MS2MM not working
139152function TRSCamera.ReverseMinimapOffset(constref transformed: TVector3): TVector3;
140153begin
141154 Result.X := (transformed.X + Self.Origin.X)*4/128 + Minimap.Center.X;
0 commit comments