Cool. I'll try those next time I get a chance. Thanks a lot.
One question I forgot.
When I arrive at an objective, I get a hint that says something like, "Objective 2: 5123.45m in 448.164s, averaging 11.4321m/s. 12.5269 percent under par: 3131.73 points." When I depart for the next objective, I get something like "Your next objective is 2385.19m away, bearing 97.3982 degrees."
I would much rather have messages like "Objective 2: 5123m in 448s, averaging 11.4m/s. 13 percent under par: 3132 points." and "Your next objective is 2400m away, bearing 100 degrees." Is there any easy way, either in the numeric or the string domain, to do something like that?
If nothing else, I suppose I can use multiplication and addition to exceed the available precision. For example, if there are six digits of precision available, and I want to convert 2385.19 to 2400, I'd do this: first add half of what we're rounding to the nearest of...rounding to nearest 100, so add 50: 2435.19. Then add 10,000,000, which ought to result in 10,002,435.19, except that that's ten digits of precision where only six are available; so it gets truncated to 10,002400. So then I subtract my ten million back out, and I have my 2400.
The problem with this is that it's messy and hard to understand, for one: I'm sure OFP has many, many more than six digits of precision. For another, I'll bet the arithmetic is done in binary, and onlly represented in decimal, so the number of decimal digits of precision won't be a whole number. I could drag out Knuth's Seminumerical Algorithms and figure out how to do the rounding in binary, but I want round decimal numbers, not round binary numbers. 2432 may be much better-looking in binary than 2435.19, but it's not appreciably better-looking in decimal!