Rename fixed point math routines again
This commit is contained in:
@@ -1532,7 +1532,7 @@ void AnimAirWaveProjectile(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 8;
|
||||
task->data[5] = 4;
|
||||
a = invfx16(0x1000);
|
||||
a = Q_8_8_inv(0x1000);
|
||||
sprite->pos1.x += sprite->pos2.x;
|
||||
sprite->pos1.y += sprite->pos2.y;
|
||||
sprite->pos2.y = 0;
|
||||
@@ -1551,8 +1551,8 @@ void AnimAirWaveProjectile(struct Sprite *sprite)
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[3] = mulfx16(mulfx16(b, a), invfx16(0x1C0));
|
||||
sprite->data[4] = mulfx16(mulfx16(c, a), invfx16(0x1C0));
|
||||
sprite->data[3] = Q_8_8_mul(Q_8_8_mul(b, a), Q_8_8_inv(0x1C0));
|
||||
sprite->data[4] = Q_8_8_mul(Q_8_8_mul(c, a), Q_8_8_inv(0x1C0));
|
||||
sprite->callback = AnimAirWaveProjectile_Step1;
|
||||
}
|
||||
}
|
||||
@@ -1643,18 +1643,18 @@ void AnimTask_AirCutterProjectile(u8 taskId)
|
||||
else
|
||||
xDiff = attackerX - targetX;
|
||||
|
||||
gTasks[taskId].data[5] = mulfx16(xDiff, invfx16(gBattleAnimArgs[2] & ~1));
|
||||
gTasks[taskId].data[6] = mulfx16(gTasks[taskId].data[5], 0x80);
|
||||
gTasks[taskId].data[5] = Q_8_8_mul(xDiff, Q_8_8_inv(gBattleAnimArgs[2] & ~1));
|
||||
gTasks[taskId].data[6] = Q_8_8_mul(gTasks[taskId].data[5], 0x80);
|
||||
gTasks[taskId].data[7] = gBattleAnimArgs[2];
|
||||
if (targetY >= attackerY)
|
||||
{
|
||||
yDiff = targetY - attackerY;
|
||||
gTasks[taskId].data[8] = mulfx16(yDiff, invfx16(gTasks[taskId].data[5])) & ~1;
|
||||
gTasks[taskId].data[8] = Q_8_8_mul(yDiff, Q_8_8_inv(gTasks[taskId].data[5])) & ~1;
|
||||
}
|
||||
else
|
||||
{
|
||||
yDiff = attackerY - targetY;
|
||||
gTasks[taskId].data[8] = mulfx16(yDiff, invfx16(gTasks[taskId].data[5])) | 1;
|
||||
gTasks[taskId].data[8] = Q_8_8_mul(yDiff, Q_8_8_inv(gTasks[taskId].data[5])) | 1;
|
||||
}
|
||||
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
|
||||
+23
-23
@@ -1052,10 +1052,10 @@ static void SaveResults(void)
|
||||
|
||||
time = sGame->results.time;
|
||||
time = Q_24_8(time);
|
||||
time = divfx32(time, Q_24_8(60));
|
||||
time = Q_24_8_div(time, Q_24_8(60));
|
||||
presses = sGame->results.totalAPresses;
|
||||
presses = Q_24_8(presses);
|
||||
presses = divfx32(presses, time) & 0xFFFF;
|
||||
presses = Q_24_8_div(presses, time) & 0xFFFF;
|
||||
sGame->pressingSpeed = presses;
|
||||
|
||||
switch (sGame->playerCount)
|
||||
@@ -1402,7 +1402,7 @@ static u32 Cmd_WaitForOthersToPickBerries(struct BerryCrushGame * game, u8 *args
|
||||
}
|
||||
game->cmdTimer = 0;
|
||||
ResetBlockReceivedFlags();
|
||||
game->targetDepth = divfx32(Q_24_8(game->targetAPresses), Q_24_8(32));
|
||||
game->targetDepth = Q_24_8_div(Q_24_8(game->targetAPresses), Q_24_8(32));
|
||||
break;
|
||||
case 5:
|
||||
ClearDialogWindowAndFrame(0, TRUE);
|
||||
@@ -1630,7 +1630,7 @@ static void HandlePartnerInput(struct BerryCrushGame * game)
|
||||
{
|
||||
temp = game->totalAPresses;
|
||||
temp = Q_24_8(temp);
|
||||
temp = divfx32(temp, game->targetDepth);
|
||||
temp = Q_24_8_div(temp, game->targetDepth);
|
||||
temp = Q_24_8_TO_INT(temp);
|
||||
game->newDepth = (u8)temp;
|
||||
return;
|
||||
@@ -2030,16 +2030,16 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame * game, UNUSED u8 *args)
|
||||
// Silkiness is the percentage of times big sparkles were produced when possible,
|
||||
// which itself depends on the number of A presses every 30 frames
|
||||
// (numBigSparkles * 50 / numBigSparkleChecks) + 50
|
||||
temp1 = mulfx32(Q_24_8(game->numBigSparkles), Q_24_8(50));
|
||||
temp1 = divfx32(temp1, Q_24_8(game->numBigSparkleChecks)) + Q_24_8(50);
|
||||
temp1 = Q_24_8_mul(Q_24_8(game->numBigSparkles), Q_24_8(50));
|
||||
temp1 = Q_24_8_div(temp1, Q_24_8(game->numBigSparkleChecks)) + Q_24_8(50);
|
||||
temp1 = Q_24_8_TO_INT(temp1);
|
||||
game->results.silkiness = temp1 & 0x7F;
|
||||
|
||||
// Calculate amount of powder
|
||||
temp1 = Q_24_8(temp1);
|
||||
temp1 = divfx32(temp1, Q_24_8(100));
|
||||
temp1 = Q_24_8_div(temp1, Q_24_8(100));
|
||||
temp2 = Q_24_8(game->powder * game->playerCount);
|
||||
temp2 = mulfx32(temp2, temp1);
|
||||
temp2 = Q_24_8_mul(temp2, temp1);
|
||||
game->results.powder = Q_24_8_TO_INT(temp2);
|
||||
|
||||
// Choose random second results page
|
||||
@@ -2061,10 +2061,10 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame * game, UNUSED u8 *args)
|
||||
// "Neat" inputs are those done at a regular interval
|
||||
temp1 = game->players[i].maxNeatInputStreak;
|
||||
temp1 = Q_24_8(temp1);
|
||||
temp1 = mulfx32(temp1, Q_24_8(100));
|
||||
temp1 = Q_24_8_mul(temp1, Q_24_8(100));
|
||||
temp2 = game->players[i].numAPresses;
|
||||
temp2 = Q_24_8(temp2);
|
||||
temp2 = divfx32(temp1, temp2);
|
||||
temp2 = Q_24_8_div(temp1, temp2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2078,10 +2078,10 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame * game, UNUSED u8 *args)
|
||||
// done at the same time as another player
|
||||
temp1 = game->players[i].numSyncedAPresses;
|
||||
temp1 = Q_24_8(temp1);
|
||||
temp1 = mulfx32(temp1, Q_24_8(100));
|
||||
temp1 = Q_24_8_mul(temp1, Q_24_8(100));
|
||||
temp2 = game->players[i].numAPresses;
|
||||
temp2 = Q_24_8(temp2);
|
||||
temp2 = divfx32(temp1, temp2);
|
||||
temp2 = Q_24_8_div(temp1, temp2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2104,10 +2104,10 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame * game, UNUSED u8 *args)
|
||||
// player spent pressing A
|
||||
temp1 = game->players[i].timePressingA;
|
||||
temp1 = Q_24_8(temp1);
|
||||
temp1 = mulfx32(temp1, Q_24_8(100));
|
||||
temp1 = Q_24_8_mul(temp1, Q_24_8(100));
|
||||
temp2 = game->timer;
|
||||
temp2 = Q_24_8(temp2);
|
||||
temp2 = divfx32(temp1, temp2);
|
||||
temp2 = Q_24_8_div(temp1, temp2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2716,12 +2716,12 @@ static void CreateBerrySprites(struct BerryCrushGame * game, struct BerryCrushGa
|
||||
distance = Q_N_S(7, distance);
|
||||
var2 = speed + Q_8_8(0.125);
|
||||
var2 = var2 / 2; // go from Q8.8 to Q9.7
|
||||
var1 = divfxn16(7, Q_N_S(7, 127), var2);
|
||||
var1 = Q_N_S_div(7, Q_N_S(7, 127), var2);
|
||||
sX = Q_N_S(7, (u16)spritesManager->berrySprites[i]->pos1.x);
|
||||
sXSpeed = divfxn16(7, distance, var1);
|
||||
var1 = mulfxn16(7, var1, Q_N_S(7, 0.666666667));
|
||||
sXSpeed = Q_N_S_div(7, distance, var1);
|
||||
var1 = Q_N_S_mul(7, var1, Q_N_S(7, 0.666666667));
|
||||
sSinIdx = 0;
|
||||
sSinSpeed = divfxn16(7, Q_N_S(7, 127), var1);
|
||||
sSinSpeed = Q_N_S_div(7, Q_N_S(7, 127), var1);
|
||||
sBitfield |= F_MOVE_HORIZ;
|
||||
if (spritesManager->playerCoords[i]->berryXOffset < 0)
|
||||
StartSpriteAffineAnim(spritesManager->berrySprites[i], 1);
|
||||
@@ -2883,7 +2883,7 @@ static void FramesToMinSec(struct BerryCrushGame_Gfx * gfx, u16 frames)
|
||||
|
||||
gfx->minutes = frames / 3600;
|
||||
gfx->secondsInt = (frames % 3600) / 60;
|
||||
frac_secs = mulfx16(Q_8_8(frames % 60), Q_8_8(0.016666667));
|
||||
frac_secs = Q_8_8_mul(Q_8_8(frames % 60), Q_8_8(0.016666667));
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
@@ -3461,12 +3461,12 @@ static void SpriteCB_Sparkle_Init(struct Sprite * sprite)
|
||||
targetY = 168;
|
||||
sBitfield = targetY;
|
||||
xMult = Q_N_S(7, sprite->pos2.x);
|
||||
var = divfxn16(7, Q_N_S(7, targetY - (u16)sprite->pos1.y), (speed + Q_8_8(0.125)) >> 1);
|
||||
var = Q_N_S_div(7, Q_N_S(7, targetY - (u16) sprite->pos1.y), (speed + Q_8_8(0.125)) >> 1);
|
||||
sprite->sX = Q_N_S(7, (u16)sprite->pos1.x);
|
||||
sXSpeed = divfxn16(7, xMult, var);
|
||||
speed = mulfxn16(7, var, Q_N_S(7, 0.666666667));
|
||||
sXSpeed = Q_N_S_div(7, xMult, var);
|
||||
speed = Q_N_S_mul(7, var, Q_N_S(7, 0.666666667));
|
||||
sSinIdx = zero;
|
||||
sSinSpeed = divfxn16(7, Q_N_S(7, 127), speed);
|
||||
sSinSpeed = Q_N_S_div(7, Q_N_S(7, 127), speed);
|
||||
sAmplitude = sprite->pos2.x / 4;
|
||||
sBitfield |= F_MOVE_HORIZ;
|
||||
sprite->pos2.y = zero;
|
||||
|
||||
+9
-9
@@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "math_util.h"
|
||||
|
||||
fx16 mulfx16(fx16 x, fx16 y)
|
||||
fx16 Q_8_8_mul(fx16 x, fx16 y)
|
||||
{
|
||||
s32 result;
|
||||
|
||||
@@ -11,7 +11,7 @@ fx16 mulfx16(fx16 x, fx16 y)
|
||||
return result;
|
||||
}
|
||||
|
||||
fxn16 mulfxn16(u8 s, fxn16 x, fxn16 y)
|
||||
fxn16 Q_N_S_mul(u8 s, fxn16 x, fxn16 y)
|
||||
{
|
||||
s32 result;
|
||||
|
||||
@@ -21,7 +21,7 @@ fxn16 mulfxn16(u8 s, fxn16 x, fxn16 y)
|
||||
return result;
|
||||
}
|
||||
|
||||
fx32 mulfx32(fx32 x, fx32 y)
|
||||
fx32 Q_24_8_mul(fx32 x, fx32 y)
|
||||
{
|
||||
s64 result;
|
||||
|
||||
@@ -31,7 +31,7 @@ fx32 mulfx32(fx32 x, fx32 y)
|
||||
return result;
|
||||
}
|
||||
|
||||
fx16 divfx16(fx16 x, fx16 y)
|
||||
fx16 Q_8_8_div(fx16 x, fx16 y)
|
||||
{
|
||||
if (y == 0)
|
||||
{
|
||||
@@ -40,7 +40,7 @@ fx16 divfx16(fx16 x, fx16 y)
|
||||
return (x << 8) / y;
|
||||
}
|
||||
|
||||
fxn16 divfxn16(u8 s, fxn16 x, fxn16 y)
|
||||
fxn16 Q_N_S_div(u8 s, fxn16 x, fxn16 y)
|
||||
{
|
||||
if (y == 0)
|
||||
{
|
||||
@@ -49,7 +49,7 @@ fxn16 divfxn16(u8 s, fxn16 x, fxn16 y)
|
||||
return (x << s) / y;
|
||||
}
|
||||
|
||||
fx32 divfx32(fx32 x, fx32 y)
|
||||
fx32 Q_24_8_div(fx32 x, fx32 y)
|
||||
{
|
||||
s64 _x;
|
||||
|
||||
@@ -62,7 +62,7 @@ fx32 divfx32(fx32 x, fx32 y)
|
||||
return _x / y;
|
||||
}
|
||||
|
||||
fx16 invfx16(fx16 y)
|
||||
fx16 Q_8_8_inv(fx16 y)
|
||||
{
|
||||
s32 x;
|
||||
|
||||
@@ -70,7 +70,7 @@ fx16 invfx16(fx16 y)
|
||||
return x / y;
|
||||
}
|
||||
|
||||
fxn16 invfxn16(u8 s, fxn16 y)
|
||||
fxn16 Q_N_S_inv(u8 s, fxn16 y)
|
||||
{
|
||||
s32 x;
|
||||
|
||||
@@ -78,7 +78,7 @@ fxn16 invfxn16(u8 s, fxn16 y)
|
||||
return x / y;
|
||||
}
|
||||
|
||||
fx32 invfx32(fx32 y)
|
||||
fx32 Q_24_8_inv(fx32 y)
|
||||
{
|
||||
s64 x;
|
||||
|
||||
|
||||
+2
-2
@@ -1418,8 +1418,8 @@ static void Task_OakSpeech39(u8 taskId)
|
||||
PlaySE(SE_WARP_IN);
|
||||
r0 = data[2];
|
||||
data[2] -= 32;
|
||||
x = invfx16(r0 - 8);
|
||||
y = invfx16(data[2] - 16);
|
||||
x = Q_8_8_inv(r0 - 8);
|
||||
y = Q_8_8_inv(data[2] - 16);
|
||||
SetBgAffine(2, 0x7800, 0x5400, 0x78, 0x54, x, y, 0);
|
||||
if (data[2] <= 96)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user