mirror of
https://github.com/pret/pokeheartgold.git
synced 2025-02-04 11:56:13 +00:00
29 lines
852 B
C
29 lines
852 B
C
#include <math.h>
|
|
#include "fx.h"
|
|
|
|
long long MakeFix(const struct FxConst *constdef) {
|
|
double ret_di, ret_df, value_abs;
|
|
long long ret_ii, ret_if, ret_val;
|
|
|
|
if (constdef->value == 0) {
|
|
return 0LL;
|
|
}
|
|
|
|
value_abs = constdef->value < 0 ? -constdef->value : constdef->value;
|
|
ret_di = floor(value_abs);
|
|
ret_df = value_abs - ret_di;
|
|
ret_ii = (long long)value_abs * (1LL << constdef->fxtype->fracpart);
|
|
ret_if = (long long)(ret_df * (double)(1LL << constdef->fxtype->fracpart) + 0.5);
|
|
ret_ii &= ~((1LL << constdef->fxtype->fracpart) - 1);
|
|
ret_if &= (1LL << constdef->fxtype->fracpart) - 1;
|
|
ret_val = ret_ii + ret_if;
|
|
if (constdef->value < 0) {
|
|
ret_val = -ret_val;
|
|
}
|
|
return ret_val;
|
|
}
|
|
|
|
int GetFxWidth(const struct FxSpec *fxtype) {
|
|
return fxtype->fracpart + fxtype->intpart + 1;
|
|
}
|