mirror of https://github.com/zeldaret/mm.git
Match `Environment_DrawSkyboxStarsImpl` (z_kankyo OK), introduce `rand.h` (#1476)
* match Environment_DrawSkyboxStarsImpl * revert * PR Review * small fix * group pads together * Color_RGBA8_u32
This commit is contained in:
parent
e96f18d4e7
commit
2823a720bc
|
@ -13,6 +13,12 @@
|
||||||
#define ALIGNED(x) __attribute__ ((aligned (x)))
|
#define ALIGNED(x) __attribute__ ((aligned (x)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __sgi /* IDO compiler */
|
||||||
|
#define UNALIGNED __unaligned
|
||||||
|
#else
|
||||||
|
#define UNALIGNED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __sgi /* IDO compiler */
|
#ifdef __sgi /* IDO compiler */
|
||||||
#define ALIGNOF(x) __builtin_alignof(x)
|
#define ALIGNOF(x) __builtin_alignof(x)
|
||||||
#elif (__STDC_VERSION__ >= 201112L) /* C11 */
|
#elif (__STDC_VERSION__ >= 201112L) /* C11 */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef _COLOR_H_
|
#ifndef COLOR_H
|
||||||
#define _COLOR_H_
|
#define COLOR_H
|
||||||
|
|
||||||
#include "PR/ultratypes.h"
|
#include "PR/ultratypes.h"
|
||||||
|
|
||||||
|
|
|
@ -65,15 +65,6 @@ void MtxConv_L2F(MtxF* mtx, Mtx* mf);
|
||||||
|
|
||||||
s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3);
|
s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3);
|
||||||
|
|
||||||
u32 Rand_Next(void);
|
|
||||||
void Rand_Seed(u32 seed);
|
|
||||||
f32 Rand_ZeroOne(void);
|
|
||||||
f32 Rand_Centered(void);
|
|
||||||
void Rand_Seed_Variable(u32* rndNum, u32 seed);
|
|
||||||
u32 Rand_Next_Variable(u32* rndNum);
|
|
||||||
f32 Rand_ZeroOne_Variable(u32* rndNum);
|
|
||||||
f32 Rand_Centered_Variable(u32* rndNum);
|
|
||||||
|
|
||||||
s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args);
|
s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args);
|
||||||
s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...);
|
s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...);
|
||||||
void Sleep_Cycles(OSTime time);
|
void Sleep_Cycles(OSTime time);
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef RAND_H
|
||||||
|
#define RAND_H
|
||||||
|
|
||||||
|
#include "PR/ultratypes.h"
|
||||||
|
|
||||||
|
//! These values are recommended by the algorithms book *Numerical Recipes in C. The Art of Scientific Computing*, 2nd
|
||||||
|
//! Edition, 1992, ISBN 0-521-43108-5. (p. 284):
|
||||||
|
//! > This is about as good as any 32-bit linear congruential generator, entirely adequate for many uses.
|
||||||
|
#define RAND_MULTIPLIER 1664525
|
||||||
|
#define RAND_INCREMENT 1013904223
|
||||||
|
|
||||||
|
u32 Rand_Next(void);
|
||||||
|
void Rand_Seed(u32 seed);
|
||||||
|
f32 Rand_ZeroOne(void);
|
||||||
|
f32 Rand_Centered(void);
|
||||||
|
void Rand_Seed_Variable(u32* rndNum, u32 seed);
|
||||||
|
u32 Rand_Next_Variable(u32* rndNum);
|
||||||
|
f32 Rand_ZeroOne_Variable(u32* rndNum);
|
||||||
|
f32 Rand_Centered_Variable(u32* rndNum);
|
||||||
|
|
||||||
|
extern u32 gRandFloat;
|
||||||
|
|
||||||
|
#endif
|
|
@ -31,7 +31,6 @@ extern u8* sYaz0MaxPtr;
|
||||||
extern void* gYaz0DecompressDstEnd;
|
extern void* gYaz0DecompressDstEnd;
|
||||||
|
|
||||||
// extern UNK_TYPE4 D_8009CD10;
|
// extern UNK_TYPE4 D_8009CD10;
|
||||||
extern u32 gRandFloat;
|
|
||||||
// extern UNK_TYPE4 sArenaLockMsg;
|
// extern UNK_TYPE4 sArenaLockMsg;
|
||||||
|
|
||||||
extern DmaEntry dmadata[1568];
|
extern DmaEntry dmadata[1568];
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "gfx.h"
|
#include "gfx.h"
|
||||||
#include "gfxprint.h"
|
#include "gfxprint.h"
|
||||||
#include "padutils.h"
|
#include "padutils.h"
|
||||||
|
#include "rand.h"
|
||||||
#include "sys_matrix.h"
|
#include "sys_matrix.h"
|
||||||
#include "tha.h"
|
#include "tha.h"
|
||||||
#include "thga.h"
|
#include "thga.h"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "global.h"
|
#include "rand.h"
|
||||||
|
|
||||||
//! The latest generated random number, used to generate the next number in the sequence.
|
//! The latest generated random number, used to generate the next number in the sequence.
|
||||||
static u32 sRandInt = 1;
|
static u32 sRandInt = 1;
|
||||||
|
@ -7,12 +7,6 @@ static u32 sRandInt = 1;
|
||||||
//! This can't be static because it is used in z_kankyo.
|
//! This can't be static because it is used in z_kankyo.
|
||||||
u32 gRandFloat;
|
u32 gRandFloat;
|
||||||
|
|
||||||
//! These values are recommended by the algorithms book *Numerical Recipes in C. The Art of Scientific Computing*, 2nd
|
|
||||||
//! Edition, 1992, ISBN 0-521-43108-5. (p. 284):
|
|
||||||
//! > This is about as good as any 32-bit linear congruential generator, entirely adequate for many uses.
|
|
||||||
#define RAND_MULTIPLIER 1664525
|
|
||||||
#define RAND_INCREMENT 1013904223
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates the next pseudo-random integer.
|
* Generates the next pseudo-random integer.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3108,10 +3108,6 @@ void Environment_DrawSkyboxStar(Gfx** gfxp, f32 x, f32 y, s32 width, s32 height)
|
||||||
*gfxp = gfx;
|
*gfxp = gfx;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NON_MATCHING
|
|
||||||
// `D_801DD900`is loading unaligned but storing aligned
|
|
||||||
// Also small float regalloc at the gRandFloat section
|
|
||||||
// https://decomp.me/scratch/3zFop
|
|
||||||
void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
||||||
static const Vec3s D_801DD880[] = {
|
static const Vec3s D_801DD880[] = {
|
||||||
{ 0x0384, 0x2328, 0xD508 }, { 0x09C4, 0x2328, 0xDA1C }, { 0x0E74, 0x22D8, 0xDA1C }, { 0x1450, 0x2468, 0xD8F0 },
|
{ 0x0384, 0x2328, 0xD508 }, { 0x09C4, 0x2328, 0xDA1C }, { 0x0E74, 0x22D8, 0xDA1C }, { 0x1450, 0x2468, 0xD8F0 },
|
||||||
|
@ -3119,24 +3115,26 @@ void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
||||||
{ 0xD058, 0x4C2C, 0x3A98 }, { 0xD8F0, 0x36B0, 0x47E0 }, { 0xD954, 0x3264, 0x3E1C }, { 0xD8F0, 0x3070, 0x37DC },
|
{ 0xD058, 0x4C2C, 0x3A98 }, { 0xD8F0, 0x36B0, 0x47E0 }, { 0xD954, 0x3264, 0x3E1C }, { 0xD8F0, 0x3070, 0x37DC },
|
||||||
{ 0xD8F0, 0x1F40, 0x5208 }, { 0xD760, 0x1838, 0x27D8 }, { 0x0000, 0x4E20, 0x4A38 }, { 0x076C, 0x2328, 0xDCD8 },
|
{ 0xD8F0, 0x1F40, 0x5208 }, { 0xD760, 0x1838, 0x27D8 }, { 0x0000, 0x4E20, 0x4A38 }, { 0x076C, 0x2328, 0xDCD8 },
|
||||||
};
|
};
|
||||||
// Possibly Color_RGBA8_u32
|
static const Color_RGBA8_u32 D_801DD8E0[] = {
|
||||||
static const u32 D_801DD8E0[] = {
|
{ 65, 164, 255, 255 }, { 131, 164, 230, 255 }, { 98, 205, 255, 255 }, { 82, 82, 255, 255 },
|
||||||
0x41A4FFFF, 0x83A4E6FF, 0x62CDFFFF, 0x5252FFFF, 0x7BA4A4FF, 0x62CDFFFF, 0x62A4E6FF, 0xFF5A00FF,
|
{ 123, 164, 164, 255 }, { 98, 205, 255, 255 }, { 98, 164, 230, 255 }, { 255, 90, 0, 255 },
|
||||||
};
|
};
|
||||||
static const u32 D_801DD900[] = {
|
UNALIGNED static const Color_RGBA8_u32 D_801DD900[] = {
|
||||||
0x405070FF, 0x606080FF, 0x807090FF, 0xA080A0FF, 0xC090A8FF, 0xE0A0B0FF, 0xE0A0B0FF, 0x686888FF,
|
{ 64, 80, 112, 255 }, { 96, 96, 128, 255 }, { 128, 112, 144, 255 }, { 160, 128, 160, 255 },
|
||||||
0x887898FF, 0xA888A8FF, 0xC898B8FF, 0xE8A8B8FF, 0xE0B0B8FF, 0xF0C0C0FF, 0xE8B8C0FF, 0xF8C8C0FF,
|
{ 192, 144, 168, 255 }, { 224, 160, 176, 255 }, { 224, 160, 176, 255 }, { 104, 104, 136, 255 },
|
||||||
|
{ 136, 120, 152, 255 }, { 168, 136, 168, 255 }, { 200, 152, 184, 255 }, { 232, 168, 184, 255 },
|
||||||
|
{ 224, 176, 184, 255 }, { 240, 192, 192, 255 }, { 232, 184, 192, 255 }, { 248, 200, 192, 255 },
|
||||||
};
|
};
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
s32 pad1;
|
f32 temp;
|
||||||
f32 imgY; // spF4
|
f32 imgY;
|
||||||
f32 imgX; // spF0
|
f32 imgX;
|
||||||
Gfx* gfx;
|
Gfx* gfx;
|
||||||
s32 phi_v1; // spE8
|
s32 phi_v1;
|
||||||
s32 negateY; // spE4
|
s32 negateY;
|
||||||
f32 invScale;
|
f32 invScale;
|
||||||
f32 temp_f20;
|
f32 temp_f20;
|
||||||
Gfx* gfxTemp; // spD8
|
Gfx* gfxTemp;
|
||||||
f32 scale;
|
f32 scale;
|
||||||
s32 i;
|
s32 i;
|
||||||
u32 randInt;
|
u32 randInt;
|
||||||
|
@ -3190,17 +3188,18 @@ void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
||||||
f32 temp_f2;
|
f32 temp_f2;
|
||||||
|
|
||||||
// temp_f4 = Rand_ZeroOne_Variable(&randInt);
|
// temp_f4 = Rand_ZeroOne_Variable(&randInt);
|
||||||
randInt = (randInt * 1664525) + 1013904223;
|
randInt = (randInt * RAND_MULTIPLIER) + RAND_INCREMENT;
|
||||||
gRandFloat = (randInt >> 9) | 0x3F800000;
|
gRandFloat = (randInt >> 9) | 0x3F800000;
|
||||||
temp_f4 = *((f32*)&gRandFloat) - 1.0f;
|
temp = *((f32*)&gRandFloat);
|
||||||
|
temp_f4 = temp - 1.0f;
|
||||||
|
|
||||||
// temp_f20 = Rand_ZeroOne_Variable(&randInt);
|
// temp_f20 = Rand_ZeroOne_Variable(&randInt);
|
||||||
randInt = (randInt * 1664525) + 1013904223;
|
randInt = (randInt * RAND_MULTIPLIER) + RAND_INCREMENT;
|
||||||
gRandFloat = (randInt >> 9) | 0x3F800000;
|
gRandFloat = (randInt >> 9) | 0x3F800000;
|
||||||
temp_f20 = ((*((f32*)&gRandFloat) - 1.0f) + temp_f4) * 0.5f;
|
temp_f20 = ((*((f32*)&gRandFloat) - 1.0f) + temp_f4) * 0.5f;
|
||||||
|
|
||||||
// randInt = Rand_Next_Variable(&randInt);
|
// randInt = Rand_Next_Variable(&randInt);
|
||||||
randInt = (randInt * 1664525) + 1013904223;
|
randInt = (randInt * RAND_MULTIPLIER) + RAND_INCREMENT;
|
||||||
|
|
||||||
// Set random position
|
// Set random position
|
||||||
pos.y = play->view.eye.y + (SQ(temp_f20) * SQ(128.0f)) - 1000.0f;
|
pos.y = play->view.eye.y + (SQ(temp_f20) * SQ(128.0f)) - 1000.0f;
|
||||||
|
@ -3208,7 +3207,7 @@ void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
||||||
pos.z = play->view.eye.z + (Math_CosS(randInt) * (1.2f - temp_f20) * SQ(128.0f));
|
pos.z = play->view.eye.z + (Math_CosS(randInt) * (1.2f - temp_f20) * SQ(128.0f));
|
||||||
|
|
||||||
// temp_f2 = Rand_ZeroOne_Variable(&randInt);
|
// temp_f2 = Rand_ZeroOne_Variable(&randInt);
|
||||||
randInt = (randInt * 1664525) + 1013904223;
|
randInt = (randInt * RAND_MULTIPLIER) + RAND_INCREMENT;
|
||||||
gRandFloat = ((randInt >> 9) | 0x3F800000);
|
gRandFloat = ((randInt >> 9) | 0x3F800000);
|
||||||
temp_f2 = *((f32*)&gRandFloat) - 1.0f;
|
temp_f2 = *((f32*)&gRandFloat) - 1.0f;
|
||||||
|
|
||||||
|
@ -3221,9 +3220,9 @@ void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((i < 15) || ((i == 15) && ((((void)0, gSaveContext.save.day) % 7) == 0))) {
|
if ((i < 15) || ((i == 15) && ((((void)0, gSaveContext.save.day) % 7) == 0))) {
|
||||||
gDPSetColor(gfx++, G_SETPRIMCOLOR, D_801DD8E0[i % ARRAY_COUNTU(D_801DD8E0)]);
|
gDPSetColor(gfx++, G_SETPRIMCOLOR, D_801DD8E0[i % ARRAY_COUNTU(D_801DD8E0)].rgba);
|
||||||
} else if (((i & 0x3F) == 0) || (i == 16)) {
|
} else if (((i & 0x3F) == 0) || (i == 16)) {
|
||||||
gDPSetColor(gfx++, G_SETPRIMCOLOR, D_801DD900[phi_v1 % ARRAY_COUNTU(D_801DD900)]);
|
gDPSetColor(gfx++, G_SETPRIMCOLOR, D_801DD900[phi_v1 % ARRAY_COUNTU(D_801DD900)].rgba);
|
||||||
phi_v1++;
|
phi_v1++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3265,10 +3264,6 @@ void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP) {
|
||||||
gDPPipeSync(gfx++);
|
gDPPipeSync(gfx++);
|
||||||
*gfxP = gfx;
|
*gfxP = gfx;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
void Environment_DrawSkyboxStarsImpl(PlayState* play, Gfx** gfxP);
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s")
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void Environment_Draw(PlayState* play) {
|
void Environment_Draw(PlayState* play) {
|
||||||
Environment_SetupSkyboxStars(play);
|
Environment_SetupSkyboxStars(play);
|
||||||
|
|
Loading…
Reference in New Issue