Scalevar: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
Fox (talk | contribs)
Created page with "'''mulscale''' <Result> <Factor 1> <Factor 2> <Divisor> In C terms, this command performs roughly the expression <code><Result> = (<Factor 1> * <Factor 2>) / <Divisor></code>..."
 
Fox (talk | contribs)
No edit summary
(2 intermediate revisions by the same user not shown)
Line 10: Line 10:


The main difference is that the calculation uses 64 bits to prevent overflow, while using gamevars for intermediate values would limit it to 31 bits.
The main difference is that the calculation uses 64 bits to prevent overflow, while using gamevars for intermediate values would limit it to 31 bits.
For example, [[statusbarscale]] use a scaling factor of 100. If you wanted to scale the screen coordinates of a sprite, you would do:
 
  '''scalevar''' Result Coordinate userdef[].statusbarscale 100
Note that the equation above is very likely to surpass 31 bits. Using 16 bits of precision for rotatesprite, the maximum screen coordinate would be 327. So '''scalevar''' is required.
See also [[mulscale]] and [[divscale]].


[[Category:EDuke32 specific commands]]
[[Category:EDuke32 specific commands]]
[[Category:Gamevar manipulation]]
[[Category:Gamevar manipulation]]

Revision as of 13:09, 14 November 2019

mulscale <Result> <Factor 1> <Factor 2> <Divisor>

In C terms, this command performs roughly the expression <Result> = (<Factor 1> * <Factor 2>) / <Divisor>.

In CON terms, it is very similar to the following series of commands:

set <Result> <Factor 1>
mul <Result> <Factor 2>
div <Result> <Divisor>

The main difference is that the calculation uses 64 bits to prevent overflow, while using gamevars for intermediate values would limit it to 31 bits.

For example, statusbarscale use a scaling factor of 100. If you wanted to scale the screen coordinates of a sprite, you would do:

 scalevar Result Coordinate userdef[].statusbarscale 100

Note that the equation above is very likely to surpass 31 bits. Using 16 bits of precision for rotatesprite, the maximum screen coordinate would be 327. So scalevar is required.

See also mulscale and divscale.