Document shadows a bit after learning some stuff about them (#513)

This commit is contained in:
Fazana
2025-04-16 13:09:08 -04:00
committed by GitHub
parent c3abf7244d
commit a2636b9708
10 changed files with 291 additions and 264 deletions
+11 -4
View File
@@ -152,6 +152,13 @@ typedef struct DrawTexture {
s16 yOffset; // Offset from the center of the screen.
} DrawTexture;
// Probably not unique to the boot menu.
typedef struct ShadowHeapProperties {
TextureHeader *texture; // Pointer to texture to draw.
s16 triCount; // Offset from the center of the screen.
s16 vtxCount; // Offset from the center of the screen.
} ShadowHeapProperties;
typedef struct Sprite {
/* 0x00 */ s16 baseTextureId;
/* 0x02 */ s16 numberOfFrames; // 1 means static texture
@@ -791,10 +798,10 @@ typedef struct ObjectHeader {
/* 0x40 */ s16 shadeAngleZ;
/* 0x42 */ s16 unk42;
/* 0x44 */ s16 unk44;
/* 0x48 */ s16 unk46;
/* 0x48 */ s16 unk48;
/* 0x4A */ s16 unk4A;
/* 0x4C */ s16 unk4C;
/* 0x48 */ s16 shadowBottom; // Lower bounds for shadow
/* 0x48 */ s16 shadowTop; // Upper bounds for shadow
/* 0x4A */ s16 shadowFadeMin; // Close reference distance for shadow opacity
/* 0x4C */ s16 shadowFadeMax; // Far reference distance for shadow opacity
/* 0x4E */ s16 drawDistance;
/* 0x50 */ s16 unk50;
/* 0x52 */ s8 unk52;
+4 -2
View File
@@ -5610,9 +5610,11 @@ void pakmenu_render(UNUSED s32 updateRate) {
set_dialogue_font(6, ASSET_FONTS_FUNFONT);
set_current_text_colour(6, 255, 255, 255, 0, 255);
set_current_text_background_colour(6, 0, 0, 0, 0);
render_dialogue_text(6, POS_CENTRED, 2 - PAKMENU_JP_OFFSET, gMenuText[ASSET_MENU_TEXT_CONTPAK1 + gMenuOption], 1,
render_dialogue_text(6, POS_CENTRED, 2 - PAKMENU_JP_OFFSET, gMenuText[ASSET_MENU_TEXT_CONTPAK1 + gMenuOption],
1,
HORZ_ALIGN_CENTER); // CONTROLLER PAK 1 / 2 / 3 / 4
render_dialogue_text(6, POS_CENTRED, 16 - PAKMENU_JP_OFFSET, gMenuText[ASSET_MENU_TEXT_FREEPAGESX], sCurrentControllerPakFreePages,
render_dialogue_text(6, POS_CENTRED, 16 - PAKMENU_JP_OFFSET, gMenuText[ASSET_MENU_TEXT_FREEPAGESX],
sCurrentControllerPakFreePages,
HORZ_ALIGN_CENTER); // FREE PAGES: ~
render_dialogue_box(&sMenuCurrDisplayList, NULL, NULL, 6);
+9
View File
@@ -95,6 +95,15 @@ typedef enum TransFlags {
OBJ_FLAGS_DEACTIVATED = (1 << 15) // Object is invisible and inactive.
} TransFlags;
typedef enum HeaderFlags {
HEADER_FLAGS_NONE,
HEADER_FLAGS_UNK_0001 = (1 << 0),
HEADER_FLAGS_UNK_0002 = (1 << 1),
HEADER_FLAGS_UNK_0004 = (1 << 2),
HEADER_FLAGS_UNK_0008 = (1 << 3),
HEADER_FLAGS_WATER_EFFECT = (1 << 4),
} HeaderFlags;
#define TEX_TABLE_2D 0
#define TEX_TABLE_3D 1
+163 -154
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -169,13 +169,13 @@ s32 check_if_inside_segment(Object *obj, s32 segmentIndex);
s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos);
void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, u8 *segmentsOrder, s32 *segmentsOrderIndex);
void render_level_geometry_and_objects(void);
void render_object_water_effects(Object *obj, WaterEffect *effect);
void render_object_shadow(Object *obj, ShadowData *shadow);
void watereffect_render(Object *obj, WaterEffect *effect);
void shadow_render(Object *obj, ShadowData *shadow);
s32 should_segment_be_visible(LevelModelSegmentBoundingBox *bb);
s32 check_if_in_draw_range(Object *obj);
void func_8002C954(LevelModelSegment *segment, LevelModelSegmentBoundingBox *bbox, s32 arg2);
void draw_gradient_background(void);
void update_shadows(s32 group, s32 waterGroup, s32 updateRate);
void shadow_update(s32 group, s32 waterGroup, s32 updateRate);
void obj_loop_fogchanger(Object* obj);
void initialise_player_viewport_vars(s32 updateRate);
s32 get_wave_properties(f32 yPos, f32 *waterHeight, Vec3f *rotation);
@@ -200,7 +200,7 @@ void update_colour_cycle(LevelHeader_70 *arg0, s32 updateRate);
void func_800B9C18(s32);
void func_800BA8E4(Gfx**, MatrixS**, s32);
void func_8002DE30(Object*);
void func_8002E234(Object*, s32);
void shadow_generate(Object*, s32);
void func_8002E904(LevelModelSegment *, s32, s32 bool);
void func_8002EEEC(s32 arg0);
void func_8002F2AC(void);
+20 -20
View File
@@ -450,11 +450,11 @@ free_track = 0x8002C7D4;
func_8002C954 = 0x8002C954;
func_8002CC30 = 0x8002CC30;
trackMakeAbsolute = 0x8002D30C;
render_object_shadow = 0x8002D384;
render_object_water_effects = 0x8002D670;
update_shadows = 0x8002D8DC;
shadow_render = 0x8002D384;
watereffect_render = 0x8002D670;
shadow_update = 0x8002D8DC;
func_8002DE30 = 0x8002DE30;
func_8002E234 = 0x8002E234;
shadow_generate = 0x8002E234;
func_8002E904 = 0x8002E904;
func_8002EEEC = 0x8002EEEC;
func_8002F2AC = 0x8002F2AC;
@@ -3714,8 +3714,8 @@ gIsNearCurrBBox = 0x8011CB2C;
D_8011B0C0 = 0x8011CB30;
gDisableShadows = 0x8011CB34;
gShadowHeapFlip = 0x8011CB38;
D_8011B0CC = 0x8011CB3C;
gShadowIndex = 0x8011CB40;
gShadowIndex = 0x8011CB3C;
gWaterEffectIndex = 0x8011CB40;
gSceneStartSegment = 0x8011CB44;
D_8011B0D8 = 0x8011CB48;
gSceneRenderSkyDome = 0x8011CB4C;
@@ -3748,16 +3748,16 @@ D_8011C3B8 = 0x8011DE28;
D_8011C8B8 = 0x8011E328;
D_8011D0B8 = 0x8011EB28;
D_8011D0BC = 0x8011EB2C;
D_8011D0C0 = 0x8011EB30;
D_8011D0C4 = 0x8011EB34;
gNewShadowTexture = 0x8011EB30;
gNewShadowObj = 0x8011EB34;
D_8011D0C8 = 0x8011EB38;
D_8011D0CC = 0x8011EB3C;
D_8011D0CE = 0x8011EB3E;
gNewShadowY1 = 0x8011EB3C;
gNewShadowY2 = 0x8011EB3E;
D_8011D0D0 = 0x8011EB40;
gShadowOpacity = 0x8011EB44;
D_8011D0D8 = 0x8011EB48;
D_8011D0DC = 0x8011EB4C;
D_8011D0E0 = 0x8011EB50;
gNewShadowScale = 0x8011EB48;
gNewShadowWidth = 0x8011EB4C;
gNewShadowLength = 0x8011EB50;
D_8011D0E4 = 0x8011EB54;
D_8011D0E8 = 0x8011EB58;
D_8011D0EC = 0x8011EB5C;
@@ -3776,16 +3776,16 @@ gPrevCameraX = 0x8011ED84;
gPrevCameraY = 0x8011ED88;
gPrevCameraZ = 0x8011ED8C;
gShadowHeapTris = 0x8011ED90;
gCurrentShadowTris = 0x8011EDA0;
gCurrShadowTris = 0x8011EDA0;
D_8011D334 = 0x8011EDA4;
gShadowHeapVerts = 0x8011EDA8;
gCurrentShadowVerts = 0x8011EDB8;
gCurrShadowVerts = 0x8011EDB8;
D_8011D34C = 0x8011EDBC;
gShadowHeapTextures = 0x8011EDC0;
gCurrentShadowTexture = 0x8011EDD0;
D_8011D364 = 0x8011EDD4;
D_8011D368 = 0x8011EDD8;
D_8011D36C = 0x8011EDDC;
gShadowHeapData = 0x8011EDC0;
gCurrShadowHeapData = 0x8011EDD0;
gShadowTail = 0x8011EDD4;
gNewShadowTriCount = 0x8011EDD8;
gNewShadowVtxCount = 0x8011EDDC;
D_8011D370 = 0x8011EDE0;
D_8011D374 = 0x8011EDE4;
D_8011D378 = 0x8011EDE8;
+20 -20
View File
@@ -450,11 +450,11 @@ free_track = 0x8002C7D4;
func_8002C954 = 0x8002C954;
func_8002CC30 = 0x8002CC30;
trackMakeAbsolute = 0x8002D30C;
render_object_shadow = 0x8002D384;
render_object_water_effects = 0x8002D670;
update_shadows = 0x8002D8DC;
shadow_render = 0x8002D384;
watereffect_render = 0x8002D670;
shadow_update = 0x8002D8DC;
func_8002DE30 = 0x8002DE30;
func_8002E234 = 0x8002E234;
shadow_generate = 0x8002E234;
func_8002E904 = 0x8002E904;
func_8002EEEC = 0x8002EEEC;
func_8002F2AC = 0x8002F2AC;
@@ -3459,8 +3459,8 @@ gIsNearCurrBBox = 0x8011B14C;
D_8011B0C0 = 0x8011B150;
gDisableShadows = 0x8011B154;
gShadowHeapFlip = 0x8011B158;
D_8011B0CC = 0x8011B15C;
gShadowIndex = 0x8011B160;
gShadowIndex = 0x8011B15C;
gWaterEffectIndex = 0x8011B160;
gSceneStartSegment = 0x8011B164;
D_8011B0D8 = 0x8011B168;
gSceneRenderSkyDome = 0x8011B16C;
@@ -3493,16 +3493,16 @@ D_8011C3B8 = 0x8011C448;
D_8011C8B8 = 0x8011C948;
D_8011D0B8 = 0x8011D148;
D_8011D0BC = 0x8011D14C;
D_8011D0C0 = 0x8011D150;
D_8011D0C4 = 0x8011D154;
gNewShadowTexture = 0x8011D150;
gNewShadowObj = 0x8011D154;
D_8011D0C8 = 0x8011D158;
D_8011D0CC = 0x8011D15C;
D_8011D0CE = 0x8011D15E;
gNewShadowY1 = 0x8011D15C;
gNewShadowY2 = 0x8011D15E;
D_8011D0D0 = 0x8011D160;
gShadowOpacity = 0x8011D164;
D_8011D0D8 = 0x8011D168;
D_8011D0DC = 0x8011D16C;
D_8011D0E0 = 0x8011D170;
gNewShadowScale = 0x8011D168;
gNewShadowWidth = 0x8011D16C;
gNewShadowLength = 0x8011D170;
D_8011D0E4 = 0x8011D174;
D_8011D0E8 = 0x8011D178;
D_8011D0EC = 0x8011D17C;
@@ -3521,16 +3521,16 @@ gPrevCameraX = 0x8011D3A4;
gPrevCameraY = 0x8011D3A8;
gPrevCameraZ = 0x8011D3AC;
gShadowHeapTris = 0x8011D3B0;
gCurrentShadowTris = 0x8011D3C0;
gCurrShadowTris = 0x8011D3C0;
D_8011D334 = 0x8011D3C4;
gShadowHeapVerts = 0x8011D3C8;
gCurrentShadowVerts = 0x8011D3D8;
gCurrShadowVerts = 0x8011D3D8;
D_8011D34C = 0x8011D3DC;
gShadowHeapTextures = 0x8011D3E0;
gCurrentShadowTexture = 0x8011D3F0;
D_8011D364 = 0x8011D3F4;
D_8011D368 = 0x8011D3F8;
D_8011D36C = 0x8011D3FC;
gShadowHeapData = 0x8011D3E0;
gCurrShadowHeapData = 0x8011D3F0;
gShadowTail = 0x8011D3F4;
gNewShadowTriCount = 0x8011D3F8;
gNewShadowVtxCount = 0x8011D3FC;
D_8011D370 = 0x8011D400;
D_8011D374 = 0x8011D404;
D_8011D378 = 0x8011D408;
+20 -20
View File
@@ -446,11 +446,11 @@ free_track = 0x8002C814;
func_8002C954 = 0x8002C994;
func_8002CC30 = 0x8002CC70;
trackMakeAbsolute = 0x8002D34C;
render_object_shadow = 0x8002D3C4;
render_object_water_effects = 0x8002D6B0;
update_shadows = 0x8002D91C;
shadow_render = 0x8002D3C4;
watereffect_render = 0x8002D6B0;
shadow_update = 0x8002D91C;
func_8002DE30 = 0x8002DE70;
func_8002E234 = 0x8002E274;
shadow_generate = 0x8002E274;
func_8002E904 = 0x8002E944;
func_8002EEEC = 0x8002EF2C;
func_8002F2AC = 0x8002F2EC;
@@ -3389,8 +3389,8 @@ gIsNearCurrBBox = 0x8011B6CC;
D_8011B0C0 = 0x8011B6D0;
gDisableShadows = 0x8011B6D4;
gShadowHeapFlip = 0x8011B6D8;
D_8011B0CC = 0x8011B6DC;
gShadowIndex = 0x8011B6E0;
gShadowIndex = 0x8011B6DC;
gWaterEffectIndex = 0x8011B6E0;
gSceneStartSegment = 0x8011B6E4;
D_8011B0D8 = 0x8011B6E8;
gSceneRenderSkyDome = 0x8011B6EC;
@@ -3423,16 +3423,16 @@ D_8011C3B8 = 0x8011C9C8;
D_8011C8B8 = 0x8011CEC8;
D_8011D0B8 = 0x8011D6C8;
D_8011D0BC = 0x8011D6CC;
D_8011D0C0 = 0x8011D6D0;
D_8011D0C4 = 0x8011D6D4;
gNewShadowTexture = 0x8011D6D0;
gNewShadowObj = 0x8011D6D4;
D_8011D0C8 = 0x8011D6D8;
D_8011D0CC = 0x8011D6DC;
D_8011D0CE = 0x8011D6DE;
gNewShadowY1 = 0x8011D6DC;
gNewShadowY2 = 0x8011D6DE;
D_8011D0D0 = 0x8011D6E0;
gShadowOpacity = 0x8011D6E4;
D_8011D0D8 = 0x8011D6E8;
D_8011D0DC = 0x8011D6EC;
D_8011D0E0 = 0x8011D6F0;
gNewShadowScale = 0x8011D6E8;
gNewShadowWidth = 0x8011D6EC;
gNewShadowLength = 0x8011D6F0;
D_8011D0E4 = 0x8011D6F4;
D_8011D0E8 = 0x8011D6F8;
D_8011D0EC = 0x8011D6FC;
@@ -3451,16 +3451,16 @@ gPrevCameraX = 0x8011D924;
gPrevCameraY = 0x8011D928;
gPrevCameraZ = 0x8011D92C;
gShadowHeapTris = 0x8011D930;
gCurrentShadowTris = 0x8011D940;
gCurrShadowTris = 0x8011D940;
D_8011D334 = 0x8011D944;
gShadowHeapVerts = 0x8011D948;
gCurrentShadowVerts = 0x8011D958;
gCurrShadowVerts = 0x8011D958;
D_8011D34C = 0x8011D95C;
gShadowHeapTextures = 0x8011D960;
gCurrentShadowTexture = 0x8011D970;
D_8011D364 = 0x8011D974;
D_8011D368 = 0x8011D978;
D_8011D36C = 0x8011D97C;
gShadowHeapData = 0x8011D960;
gCurrShadowHeapData = 0x8011D970;
gShadowTail = 0x8011D974;
gNewShadowTriCount = 0x8011D978;
gNewShadowVtxCount = 0x8011D97C;
D_8011D370 = 0x8011D980;
D_8011D374 = 0x8011D984;
D_8011D378 = 0x8011D988;
+20 -20
View File
@@ -450,11 +450,11 @@ free_track = 0x8002C7D4;
func_8002C954 = 0x8002C954;
func_8002CC30 = 0x8002CC30;
trackMakeAbsolute = 0x8002D30C;
render_object_shadow = 0x8002D384;
render_object_water_effects = 0x8002D670;
update_shadows = 0x8002D8DC;
shadow_render = 0x8002D384;
watereffect_render = 0x8002D670;
shadow_update = 0x8002D8DC;
func_8002DE30 = 0x8002DE30;
func_8002E234 = 0x8002E234;
shadow_generate = 0x8002E234;
func_8002E904 = 0x8002E904;
func_8002EEEC = 0x8002EEEC;
func_8002F2AC = 0x8002F2AC;
@@ -3838,8 +3838,8 @@ gIsNearCurrBBox = 0x8011B0BC;
D_8011B0C0 = 0x8011B0C0;
gDisableShadows = 0x8011B0C4;
gShadowHeapFlip = 0x8011B0C8;
D_8011B0CC = 0x8011B0CC;
gShadowIndex = 0x8011B0D0;
gShadowIndex = 0x8011B0CC;
gWaterEffectIndex = 0x8011B0D0;
gSceneStartSegment = 0x8011B0D4;
D_8011B0D8 = 0x8011B0D8;
gSceneRenderSkyDome = 0x8011B0DC;
@@ -3872,16 +3872,16 @@ D_8011C3B8 = 0x8011C3B8;
D_8011C8B8 = 0x8011C8B8;
D_8011D0B8 = 0x8011D0B8;
D_8011D0BC = 0x8011D0BC;
D_8011D0C0 = 0x8011D0C0;
D_8011D0C4 = 0x8011D0C4;
gNewShadowTexture = 0x8011D0C0;
gNewShadowObj = 0x8011D0C4;
D_8011D0C8 = 0x8011D0C8;
D_8011D0CC = 0x8011D0CC;
D_8011D0CE = 0x8011D0CE;
gNewShadowY1 = 0x8011D0CC;
gNewShadowY2 = 0x8011D0CE;
D_8011D0D0 = 0x8011D0D0;
gShadowOpacity = 0x8011D0D4;
D_8011D0D8 = 0x8011D0D8;
D_8011D0DC = 0x8011D0DC;
D_8011D0E0 = 0x8011D0E0;
gNewShadowScale = 0x8011D0D8;
gNewShadowWidth = 0x8011D0DC;
gNewShadowLength = 0x8011D0E0;
D_8011D0E4 = 0x8011D0E4;
D_8011D0E8 = 0x8011D0E8;
D_8011D0EC = 0x8011D0EC;
@@ -3900,16 +3900,16 @@ gPrevCameraX = 0x8011D314;
gPrevCameraY = 0x8011D318;
gPrevCameraZ = 0x8011D31C;
gShadowHeapTris = 0x8011D320;
gCurrentShadowTris = 0x8011D330;
gCurrShadowTris = 0x8011D330;
D_8011D334 = 0x8011D334;
gShadowHeapVerts = 0x8011D338;
gCurrentShadowVerts = 0x8011D348;
gCurrShadowVerts = 0x8011D348;
D_8011D34C = 0x8011D34C;
gShadowHeapTextures = 0x8011D350;
gCurrentShadowTexture = 0x8011D360;
D_8011D364 = 0x8011D364;
D_8011D368 = 0x8011D368;
D_8011D36C = 0x8011D36C;
gShadowHeapData = 0x8011D350;
gCurrShadowHeapData = 0x8011D360;
gShadowTail = 0x8011D364;
gNewShadowTriCount = 0x8011D368;
gNewShadowVtxCount = 0x8011D36C;
D_8011D370 = 0x8011D370;
D_8011D374 = 0x8011D374;
D_8011D378 = 0x8011D378;
+20 -20
View File
@@ -446,11 +446,11 @@ free_track = 0x8002C814;
func_8002C954 = 0x8002C994;
func_8002CC30 = 0x8002CC70;
trackMakeAbsolute = 0x8002D34C;
render_object_shadow = 0x8002D3C4;
render_object_water_effects = 0x8002D6B0;
update_shadows = 0x8002D91C;
shadow_render = 0x8002D3C4;
watereffect_render = 0x8002D6B0;
shadow_update = 0x8002D91C;
func_8002DE30 = 0x8002DE70;
func_8002E234 = 0x8002E274;
shadow_generate = 0x8002E274;
func_8002E904 = 0x8002E944;
func_8002EEEC = 0x8002EF2C;
func_8002F2AC = 0x8002F2EC;
@@ -3385,8 +3385,8 @@ gIsNearCurrBBox = 0x8011B63C;
D_8011B0C0 = 0x8011B640;
gDisableShadows = 0x8011B644;
gShadowHeapFlip = 0x8011B648;
D_8011B0CC = 0x8011B64C;
gShadowIndex = 0x8011B650;
gShadowIndex = 0x8011B64C;
gWaterEffectIndex = 0x8011B650;
gSceneStartSegment = 0x8011B654;
D_8011B0D8 = 0x8011B658;
gSceneRenderSkyDome = 0x8011B65C;
@@ -3419,16 +3419,16 @@ D_8011C3B8 = 0x8011C938;
D_8011C8B8 = 0x8011CE38;
D_8011D0B8 = 0x8011D638;
D_8011D0BC = 0x8011D63C;
D_8011D0C0 = 0x8011D640;
D_8011D0C4 = 0x8011D644;
gNewShadowTexture = 0x8011D640;
gNewShadowObj = 0x8011D644;
D_8011D0C8 = 0x8011D648;
D_8011D0CC = 0x8011D64C;
D_8011D0CE = 0x8011D64E;
gNewShadowY1 = 0x8011D64C;
gNewShadowY2 = 0x8011D64E;
D_8011D0D0 = 0x8011D650;
gShadowOpacity = 0x8011D654;
D_8011D0D8 = 0x8011D658;
D_8011D0DC = 0x8011D65C;
D_8011D0E0 = 0x8011D660;
gNewShadowScale = 0x8011D658;
gNewShadowWidth = 0x8011D65C;
gNewShadowLength = 0x8011D660;
D_8011D0E4 = 0x8011D664;
D_8011D0E8 = 0x8011D668;
D_8011D0EC = 0x8011D66C;
@@ -3447,16 +3447,16 @@ gPrevCameraX = 0x8011D894;
gPrevCameraY = 0x8011D898;
gPrevCameraZ = 0x8011D89C;
gShadowHeapTris = 0x8011D8A0;
gCurrentShadowTris = 0x8011D8B0;
gCurrShadowTris = 0x8011D8B0;
D_8011D334 = 0x8011D8B4;
gShadowHeapVerts = 0x8011D8B8;
gCurrentShadowVerts = 0x8011D8C8;
gCurrShadowVerts = 0x8011D8C8;
D_8011D34C = 0x8011D8CC;
gShadowHeapTextures = 0x8011D8D0;
gCurrentShadowTexture = 0x8011D8E0;
D_8011D364 = 0x8011D8E4;
D_8011D368 = 0x8011D8E8;
D_8011D36C = 0x8011D8EC;
gShadowHeapData = 0x8011D8D0;
gCurrShadowHeapData = 0x8011D8E0;
gShadowTail = 0x8011D8E4;
gNewShadowTriCount = 0x8011D8E8;
gNewShadowVtxCount = 0x8011D8EC;
D_8011D370 = 0x8011D8F0;
D_8011D374 = 0x8011D8F4;
D_8011D378 = 0x8011D8F8;