Document camera and sprites (#614)

This commit is contained in:
Unnunu
2025-06-11 15:36:25 +03:00
committed by GitHub
parent 700ca2495e
commit 4b07cfffa1
19 changed files with 677 additions and 513 deletions
+9 -9
View File
@@ -7,9 +7,9 @@ All versions are supported, and the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fd
<!-- README_SCORE_SUMMARY_BEGIN -->
As of June 11, 2025, this is our current score:
&emsp;&emsp;&emsp;&emsp;Decomp progress: 90.89%
&emsp;&emsp;&emsp;&emsp;Decomp progress: 90.87%
&emsp;&emsp;&emsp;&emsp;Documentation progress: 59.17%
&emsp;&emsp;&emsp;&emsp;Documentation progress: 59.40%
<!-- README_SCORE_SUMMARY_END -->
---
@@ -121,11 +121,11 @@ As of June 11, 2025, this is our current score:
```
====================================================================
ADVENTURE ONE (ASM -> C Decompilation)
-------------- 90.89% Complete (91.67% NON_MATCHING) ---------------
-------------- 90.87% Complete (91.65% NON_MATCHING) ---------------
# Decompiled functions: 1913
# GLOBAL_ASM remaining: 38
# GLOBAL_ASM remaining: 37
# NON_MATCHING functions: 4
# NON_EQUIVALENT WIP functions: 19
# NON_EQUIVALENT WIP functions: 29
--------------------------- Game Status ----------------------------
Balloons: 42/47, Keys: 4/4, Trophies: 4/5
T.T. Amulets: 4/4, Wizpig Amulets: 4/4
@@ -133,14 +133,14 @@ As of June 11, 2025, this is our current score:
We are racing in Star City. (Lap 3/3)
====================================================================
ADVENTURE TWO (Cleanup & Documentation)
------------------------- 59.17% Complete --------------------------
# Documented functions: 1206
# Undocumented remaining: 447
------------------------- 59.40% Complete --------------------------
# Documented functions: 1208
# Undocumented remaining: 445
--------------------------- Game Status ----------------------------
Balloons: 29/47, Keys: 3/4, Trophies: 2/5
T.T. Amulets: 3/4, Wizpig Amulets: 2/4
--------------------------------------------------------------------
We are collecting silver coins in Treasure Caves. (0/8 silver coins)
We are collecting silver coins in Treasure Caves. (1/8 silver coins)
====================================================================
```
<!-- README_SCORE_END -->
+39
View File
@@ -6,6 +6,44 @@
// This file is an extension of PR/gbi.h
/**
* This section explains how billboarding works from a 3D geometry perspective.
* Several modifications were made to the RSP to implement billboarding:
*
* 1) For the gSPVertexDKR command, the last parameter is either 0 or 1 (G_VTX_APPEND):
* - If 0: Vertices are always written to the beginning of RSP's internal vertex array, and their count is stored.
* - If 1: Vertices are appended after those written with flag 0.
*
* 2) The commands gDkrEnableBillboard and gDkrDisableBillboard control billboarding:
* - When gDkrEnableBillboard is active, vertices processed by gSPVertexDKR have their coordinates added to
* the coordinates of vertex 0 in RSP's vertex array.
* - This addition occurs after MVP matrix transformation but before perspective division (normalization of (x,y,z,w) to (x/w,y/w,z/w,1)).
*
* Implementation Steps:
* 1) First, push an anchor vertex using gSPVertexDKR. This vertex should have a standard MVP matrix applied
* (with normal perspective and camera setup like other 3D objects). Inside RSP, this vertex gets transformed
* to clip coordinates (x,y,z,w). Note: with standard perspective, w represents the vertex's distance from the camera.
*
* 2) Create a billboard matrix (simplest case: identity matrix) and store it in slot G_MTX_DKR_INDEX_2.
* More complex versions can tilt the sprite or scale it along two axes. This matrix will be used for subsequent
* billboard vertices (without camera or projection transformations).
*
* 3) Enable billboarding with gDkrEnableBillboard. All subsequent billboard vertices will be added to the anchor vertex.
*
* 4) Push billboard vertices using gSPVertexDKR and render primitives with gSPPolygon. These vertices use sprite-space coordinates.
* Example: For a 32×64 sprite, vertices would be (0,0,0), (32,0,0), (32,64,0), (0,64,0).
*
* How Coordinate Addition Works (Perspective Explanation):
* Let the anchor vertex have coordinates (x,y,z,w) and our sprite be 32×64 as above. After normalization:
* anchor becomes (x/w,y/w,z/w,1). A billboard vertex would have (x+32,y,z,w) → ((x+32)/w,y/w,z/w,1).
*
* Screen-space implications (assuming 320px viewport width):
* The sprite's on-screen width becomes (32/w)*160 pixels. Since w equals distance from camera, sprites
* farther away appear smaller (creating perspective). However, additional scaling is needed because
* without accounting for field of view and aspect ratio, a 32×64 sprite wouldn't match the size of
* a 32×64 3D object at the same location.
*/
// Color combiner values.
// cycle 1 modes
@@ -112,6 +150,7 @@
#define G_MTX_DKR_INDEX_2 2
#define G_MW_BILLBOARD 0x02 //0x01 = billboarding enabled, 0x00 = disabled
#define G_MW_MVPMATRIX 0x0A //Specifies the index of the mvp matrix.
#define G_VTX_APPEND 1
#define gDkrEnableBillboard(pkt) \
gMoveWd(pkt, G_MW_BILLBOARD, 0, 1)
+16 -14
View File
@@ -112,8 +112,8 @@ typedef struct TextureHeader {
// 6 = IA4
// 7 = CI4 (16 colors)
// 8 = CI8 (64 colors)
/* 0x03 */ s8 unk3;
/* 0x04 */ s8 unk4;
/* 0x03 */ s8 posX; // X coordinate of the texture in the sprite's 2D space
/* 0x04 */ s8 posY; // Y coordinate of the texture in the sprite's 2D space
/* 0x05 */ u8 numberOfInstances; // Always 1 in the ROM.
/* 0x06 */ s16 flags;
// 0x04 = Interlaced texture
@@ -151,19 +151,21 @@ typedef struct ShadowHeapProperties {
s16 vtxCount; // Offset from the center of the screen.
} ShadowHeapProperties;
typedef struct SpriteAsset {
/* 0x00 */ s16 baseTextureId;
/* 0x02 */ s16 numberOfFrames; // 1 means static texture
/* 0x04 */ Vec2s anchor; // 2D coordinates on the sprite used as the anchor point for positioning in 3D space
/* 0x08 */ s32 unused_field;
/* 0x0C */ u8 frameTexOffsets[1]; // actual size is numberOfFrames + 1
} SpriteAsset;
typedef struct Sprite {
/* 0x00 */ s16 baseTextureId;
/* 0x02 */ s16 numberOfFrames; // 1 means static texture
/* 0x04 */ s16 numberOfInstances;
/* 0x06 */ s16 drawFlags;
union {
/* 0x08 */ TextureHeader **frames;
/* 0x08 */ Gfx *gfx[1];
};
union {
/* 0x0C */ u8 val[1]; // Actual size varies.
/* 0x0C */ u8 *ptr[1]; // Display list?
} unkC;
/* 0x00 */ s16 numberOfFrames; // 1 means static texture
/* 0x02 */ s16 numberOfTextures;
/* 0x04 */ s16 numberOfInstances;
/* 0x06 */ s16 drawFlags;
/* 0x08 */ TextureHeader **textures;
/* 0x0C */ Gfx *frames[1]; // Actual size varies.
} Sprite;
/* Size: 0x20 bytes */
+1 -1
View File
@@ -194,7 +194,7 @@ void audspat_update_all(Object **objList, s32 numObjects, s32 updateRate) {
jingleVolume = 0;
viewportLayout = cam_get_viewport_layout();
numCameras = cam_set_layout(viewportLayout);
cameras = get_cutscene_camera_segment();
cameras = cam_get_cameras();
// Update audio points
for (i = 0; i < gNumAudioPoints; i++) {
+254 -171
View File
File diff suppressed because it is too large Load Diff
+7 -2
View File
@@ -37,6 +37,11 @@
#define VIEWPORT_AUTO 0x8000
enum SpriteAnimMode {
SPRITE_ANIM_NORMALIZED, // animFrame is a normalized value from 0 to 255 mapped across frames
SPRITE_ANIM_FRAME_INDEX // animFrame is treated as the exact frame ID (e.g., 0, 1, 2...)
};
enum ViewportCount {
VIEWPORT_LAYOUT_1_PLAYER,
VIEWPORT_LAYOUT_2_PLAYERS,
@@ -124,10 +129,10 @@ void mtx_perspective(Gfx **dList, Mtx **mtx);
void viewport_rsp_set(Gfx **dList, s32 halfWidth, s32 halfHeight, s32 centerX, s32 centerY);
void viewport_reset(Gfx **dList);
void mtx_world_origin(Gfx **dList, Mtx **mtx);
void sprite_anim_off(s32 setting);
void cam_set_sprite_anim_mode(s32 setting);
Camera *cam_get_active_camera_no_cutscenes(void);
Camera *cam_get_active_camera(void);
Camera *get_cutscene_camera_segment(void);
Camera *cam_get_cameras(void);
MtxF *get_projection_matrix_f32(void);
Mtx *get_projection_matrix_s16(void);
MtxF *get_camera_matrix(void);
+32 -32
View File
@@ -804,9 +804,9 @@ void hud_render_player(Gfx **dList, Mtx **mtx, Vertex **vertexList, Object *obj,
hud_main_time_trial(countdown, obj, updateRate);
} else {
if (cutscene_id() == 10) {
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_balloons(racer);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
} else {
switch (get_current_level_race_type()) {
case RACETYPE_DEFAULT:
@@ -836,7 +836,7 @@ void hud_render_player(Gfx **dList, Mtx **mtx, Vertex **vertexList, Object *obj,
}
}
if (racer->raceFinished == TRUE) {
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
if (is_in_time_trial()) {
hud_time_trial_finish(racer, updateRate);
} else if (cam_get_viewport_layout() == VIEWPORT_LAYOUT_1_PLAYER && racer->finishPosition == 1) {
@@ -852,7 +852,7 @@ void hud_render_player(Gfx **dList, Mtx **mtx, Vertex **vertexList, Object *obj,
block_95:
hud_race_finish_multiplayer(racer, updateRate);
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
gMinimapFade = FALSE;
sprite_opaque(TRUE);
@@ -949,7 +949,7 @@ void hud_audio_update(s32 updateRate) {
void hud_main_race(s32 countdown, Object *obj, s32 updateRate) {
Object_Racer *racer = &obj->unk64->racer;
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_course_arrows(racer, updateRate);
hud_wrong_way(racer, updateRate);
hud_race_start(countdown, updateRate);
@@ -968,7 +968,7 @@ void hud_main_race(s32 countdown, Object *obj, s32 updateRate) {
}
hud_weapon(obj, updateRate);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
/**
@@ -1080,7 +1080,7 @@ void hud_main_treasure(s32 countdown, Object *obj, s32 updateRate) {
racer = &obj->unk64->racer;
racers = get_racer_objects(&numRacers);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_race_start(countdown, updateRate);
switch (gNumActivePlayers) {
case 1:
@@ -1107,7 +1107,7 @@ void hud_main_treasure(s32 countdown, Object *obj, s32 updateRate) {
rendermode_reset(&gHudDL);
hud_bananas(racer, updateRate);
hud_weapon(obj, updateRate);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
/**
@@ -1116,7 +1116,7 @@ void hud_main_treasure(s32 countdown, Object *obj, s32 updateRate) {
void hud_main_eggs(s32 countdown, Object *obj, s32 updateRate) {
Object_Racer *racer = &obj->unk64->racer;
if (racer->raceFinished == FALSE) {
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_race_start(countdown, updateRate);
hud_weapon(obj, updateRate);
if ((127 - (updateRate * 2)) >= gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].challengeEggs.alphaTimer) {
@@ -1129,7 +1129,7 @@ void hud_main_eggs(s32 countdown, Object *obj, s32 updateRate) {
if (gNumActivePlayers != 2) {
hud_draw_eggs(obj, updateRate);
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
}
@@ -1167,7 +1167,7 @@ void hud_draw_eggs(Object *racerObj, s32 updateRate) {
racer = &racers[0]->unk64->racer;
}
if (numRacers == MAXCONTROLLERS) {
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
portraitX = gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.x;
portraitY = gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y;
diffX = (gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.x - portraitX);
@@ -1196,7 +1196,7 @@ void hud_draw_eggs(Object *racerObj, s32 updateRate) {
gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.x = portraitX + diffX;
gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y = portraitY;
gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.y = portraitY + diffY;
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
}
@@ -1253,7 +1253,7 @@ void hud_main_battle(s32 countdown, Object *obj, s32 updateRate) {
racer = &obj->unk64->racer;
if (gNumActivePlayers != 1 || racer->raceFinished == FALSE) {
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_race_start(countdown, updateRate);
hud_weapon(obj, updateRate);
racerObjs = get_racer_objects(&numRacers);
@@ -1277,7 +1277,7 @@ void hud_main_battle(s32 countdown, Object *obj, s32 updateRate) {
hud_bananas(racer, updateRate);
break;
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
}
@@ -1302,7 +1302,7 @@ void func_800A1E48(Object *racerObj, s32 updateRate) {
racer = &racers[PLAYER_ONE]->unk64->racer;
}
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
if (numRacers == 4) {
offsetX = 0;
offsetY = 0;
@@ -1350,7 +1350,7 @@ void func_800A1E48(Object *racerObj, s32 updateRate) {
gCurrentHud->entry[HUD_BATTLE_BANANA_COUNT_2].pos.y += tempY;
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
/**
@@ -1397,7 +1397,7 @@ void hud_main_boss(s32 countdown, Object *obj, s32 updateRate) {
LevelHeader *level;
Object_Racer *racer = &obj->unk64->racer;
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_wrong_way(racer, updateRate);
hud_race_start(countdown, updateRate);
hud_race_time(racer, updateRate);
@@ -1410,7 +1410,7 @@ void hud_main_boss(s32 countdown, Object *obj, s32 updateRate) {
hud_speedometre(obj, updateRate);
hud_race_position(racer, updateRate);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
/**
@@ -1419,14 +1419,14 @@ void hud_main_boss(s32 countdown, Object *obj, s32 updateRate) {
void hud_main_taj(s32 countdown, Object *obj, s32 updateRate) {
Object_Racer *racer = &obj->unk64->racer;
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_wrong_way(racer, updateRate);
hud_lap_count(racer, updateRate);
hud_race_position(racer, updateRate);
hud_race_time(racer, updateRate);
hud_race_start(countdown, updateRate);
hud_speedometre(obj, updateRate);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
/**
@@ -1439,7 +1439,7 @@ void hud_main_hub(Object *obj, s32 updateRate) {
if (cam_get_viewport_layout() == PLAYER_ONE) {
racer = &obj->unk64->racer;
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_balloons(racer);
hud_speedometre(obj, updateRate);
if (is_in_two_player_adventure()) {
@@ -1447,7 +1447,7 @@ void hud_main_hub(Object *obj, s32 updateRate) {
portrait->spriteID = (get_settings()->racers[1].character + HUD_SPRITE_PORTRAIT);
hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, portrait);
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
}
@@ -1576,7 +1576,7 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) {
}
obj68->animUpdateTimer = 0;
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
hud_course_arrows(curRacer, updateRate);
if (curRacer->raceFinished == FALSE) {
spB8 = gCurrentHud->entry[HUD_LAP_TIME_TEXT].pos.y;
@@ -1761,7 +1761,7 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) {
set_kerning(FALSE);
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
void hud_stopwatch_face(u8 arg0, u8 arg1, u8 animID, u8 arg3, u8 arg4) {
@@ -2019,13 +2019,13 @@ void hud_bananas(Object_Racer *racer, s32 updateRate) {
}
} else {
gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].spriteOffset = prevSprite + 128;
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sprite_opaque(TRUE);
enable_pal_viewport_height_adjust(TRUE);
hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN]);
sprite_opaque(FALSE);
enable_pal_viewport_height_adjust(FALSE);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].spriteOffset -= 128;
}
temp_lo = bananas / 10;
@@ -3435,11 +3435,11 @@ void hud_render_general(Gfx **dList, Mtx **mtx, Vertex **vtx, s32 updateRate) {
} else if (gHudLevelHeader->race_type == RACETYPE_CHALLENGE_BATTLE) {
// Show life counter and icons in 2 player.
if (gNumActivePlayers == 2 && gHudToggleSettings[gHUDNumPlayers] == 0) {
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
sprite_opaque(FALSE);
mtx_ortho(&gHudDL, &gHudMtx);
func_800A1E48(0, updateRate);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
rendermode_reset(&gHudDL);
sprite_opaque(TRUE);
} else {
@@ -3457,7 +3457,7 @@ void hud_render_general(Gfx **dList, Mtx **mtx, Vertex **vtx, s32 updateRate) {
spE0 = gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y;
sprite_opaque(FALSE);
mtx_ortho(&gHudDL, &gHudMtx);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.x = 225.0f;
if (osTvType == OS_TV_TYPE_PAL) {
gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y = 181.5f;
@@ -3514,7 +3514,7 @@ void hud_render_general(Gfx **dList, Mtx **mtx, Vertex **vtx, s32 updateRate) {
gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y = spE0;
sprite_opaque(TRUE);
rendermode_reset(&gHudDL);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
}
}
@@ -3606,7 +3606,7 @@ void hud_render_general(Gfx **dList, Mtx **mtx, Vertex **vtx, s32 updateRate) {
return;
}
someObjSeg = cam_get_active_camera();
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
minimap = (Sprite *) lvlMdl->minimapSpriteIndex;
switch (gHUDNumPlayers) {
case TWO_PLAYERS:
@@ -3761,7 +3761,7 @@ void hud_render_general(Gfx **dList, Mtx **mtx, Vertex **vtx, s32 updateRate) {
}
}
gDPPipeSync(gHudDL++);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sprite_opaque(TRUE);
*dList = gHudDL;
*mtx = gHudMtx;
+17 -17
View File
@@ -2692,7 +2692,7 @@ void menu_timestamp_render(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green,
xOffset3 = 5;
}
get_timestamp_from_frames(frameCount, &minutes, &seconds, &hundredths);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
sprite_opaque(FALSE);
gMenuImages[imageIndex].spriteOffset = minutes / 10;
@@ -2732,7 +2732,7 @@ void menu_timestamp_render(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green,
gMenuImages[imageIndex].trans.x_position = xPos;
menu_element_render(imageIndex);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sprite_opaque(TRUE);
sMenuGuiColourR = 255;
sMenuGuiColourG = 255;
@@ -2786,7 +2786,7 @@ void menu_number_render(s32 number, s32 x, s32 y, s32 r, s32 g, s32 b, s32 a, UN
sMenuGuiColourB = b;
sMenuGuiOpacity = a;
sprite_opaque(0);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
if (powerOfTen && number) {} // Fakematch
gMenuImages[0].trans.y_position = y;
for (i = 0; i < strLen; i++) {
@@ -2796,7 +2796,7 @@ void menu_number_render(s32 number, s32 x, s32 y, s32 r, s32 g, s32 b, s32 a, UN
x += 12;
}
sprite_opaque(1);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sMenuGuiColourR = 255;
sMenuGuiColourG = 255;
sMenuGuiColourB = 255;
@@ -2976,7 +2976,7 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) {
shouldResetRenderSettings = FALSE;
rendermode_reset(&sMenuCurrDisplayList);
}
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
sprite_opaque(FALSE);
gMenuImages[elems->t.assetID].trans.x_position = xPos - SCREEN_WIDTH_HALF;
gMenuImages[elems->t.assetID].trans.y_position =
@@ -2992,7 +2992,7 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) {
sMenuGuiColourBlendFactor = elems->filterBlendFactor;
sMenuGuiOpacity = elems->opacity;
menu_element_render(elems->t.assetID);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sprite_opaque(TRUE);
break;
case 6:
@@ -3377,7 +3377,7 @@ void render_title_screen(UNUSED s32 updateRate, f32 updateRateF) {
mtx_ortho(&sMenuCurrDisplayList, &sMenuCurrHudMat);
scale = (f32) gTitleRevealTimer * (1.0f / 32.0f);
sMenuGuiOpacity = (gTitleRevealTimer * 8) - 1;
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
if (scale != 1.0f) {
texrect_draw_scaled(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_FLOAT_HALF, 52.0f, scale,
scale, COLOUR_RGBA32(255, 255, 255, 254), TEXRECT_POINT);
@@ -4294,7 +4294,7 @@ void savemenu_render_element(SaveFileData *file, s32 x, s32 y) {
} else {
i = 120;
}
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
offsetY = (i - y);
gMenuImages[2].trans.y_position = offsetY - 49;
gMenuImages[spriteID].trans.y_position = offsetY - 24;
@@ -4308,7 +4308,7 @@ void savemenu_render_element(SaveFileData *file, s32 x, s32 y) {
sprite_opaque(1);
gMenuImages[spriteID].trans.x_position = x - (128 - SAVE_MENU_SPRITE_OFFSET);
menu_element_render(spriteID);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
if (drawTexture != NULL) {
texrect_draw(&sMenuCurrDisplayList, drawTexture, x + (60 + SAVE_MENU_TEXT_OFFSET_1), y + 6, 255, 255, 255, 255);
@@ -7609,14 +7609,14 @@ void fileselect_render(UNUSED s32 updateRate) {
}
fileselect_render_element(var_s2, gFileSelectButtons[i].x + gFileSelectElementPos[2],
gFileSelectButtons[i].y + gFileSelectElementPos[3], 0, 0, 0, 128);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
gMenuImages->spriteOffset = gSavefileInfo[i].balloonCount / 10;
fileselect_render_element(0, gFileSelectButtons[i].x + gFileSelectElementPos[6] - 6,
gFileSelectButtons[i].y + gFileSelectElementPos[7], 0, 0, 0, 128);
gMenuImages->spriteOffset = gSavefileInfo[i].balloonCount % 10;
fileselect_render_element(0, gFileSelectButtons[i].x + gFileSelectElementPos[6] + 6,
gFileSelectButtons[i].y + gFileSelectElementPos[7], 0, 0, 0, 128);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sMenuGuiColourG = 64;
sMenuGuiColourB = 64;
fileselect_render_element(10, gFileSelectButtons[i].x + gFileSelectElementPos[8],
@@ -9365,7 +9365,7 @@ void trackmenu_setup_render(UNUSED s32 updateRate) {
(gTwoPlayerRacerCountMenu.textPos[0] + gTwoPlayerRacerCountMenu.x) - 1,
(gTwoPlayerRacerCountMenu.textPos[1] + gTwoPlayerRacerCountMenu.y + regionOffset) - 1,
gMenuText[ASSET_MENU_TEXT_NUMBEROFRACERS], ALIGN_MIDDLE_CENTER);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
sprite_opaque(FALSE);
for (temp2 = 0; temp2 < 3; temp2++) {
@@ -9389,7 +9389,7 @@ void trackmenu_setup_render(UNUSED s32 updateRate) {
sMenuGuiColourB = 255;
}
sprite_opaque(TRUE);
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
}
}
@@ -11298,7 +11298,7 @@ void results_render(UNUSED s32 updateRate, f32 opacity) {
draw_text(&sMenuCurrDisplayList, time - 34, y2 + offsetY + 2, gRacePlacementsArray[spA0], ALIGN_MIDDLE_CENTER);
#endif
rendermode_reset(&sMenuCurrDisplayList);
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
sprite_opaque(FALSE);
sMenuGuiColourR = 255;
sMenuGuiColourG = 255 - 64 * spA0;
@@ -11342,7 +11342,7 @@ void results_render(UNUSED s32 updateRate, f32 opacity) {
menu_element_render(0);
}
y2 += 17;
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
sprite_opaque(TRUE);
sMenuGuiColourG = 255;
sMenuGuiColourBlendFactor = 0;
@@ -14579,7 +14579,7 @@ void dialogue_tt_gamestatus(void) {
return;
}
settings = get_settings();
sprite_anim_off(TRUE);
cam_set_sprite_anim_mode(SPRITE_ANIM_FRAME_INDEX);
if (osTvType == OS_TV_TYPE_PAL) {
y = 10;
} else {
@@ -14657,7 +14657,7 @@ void dialogue_tt_gamestatus(void) {
}
menu_element_render(14);
}
sprite_anim_off(FALSE);
cam_set_sprite_anim_mode(SPRITE_ANIM_NORMALIZED);
}
/**
+1 -1
View File
@@ -3044,7 +3044,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) {
if (var_f2 < 1000.0f) {
var_f2 = 1000.0f - var_f2;
sp3C = (127.0f * var_f2) / 1000.0f;
temp_v0_22 = get_cutscene_camera_segment();
temp_v0_22 = cam_get_cameras();
xPosDiff = obj->segment.trans.x_position - temp_v0_22->trans.x_position;
zPosDiff = obj->segment.trans.z_position - temp_v0_22->trans.z_position;
arctan = audspat_calculate_spatial_pan(xPosDiff, zPosDiff, temp_v0_22->trans.rotation.y_rotation);
+1 -1
View File
@@ -1104,7 +1104,7 @@ void func_8000CC7C(Vehicle vehicle, u32 arg1, s32 arg2) {
}
cutsceneID = -1;
if (is_time_trial_enabled() && raceType == RACETYPE_DEFAULT) {
cutsceneCameraSegment = get_cutscene_camera_segment();
cutsceneCameraSegment = cam_get_cameras();
cutsceneID = (u8) cutsceneCameraSegment->zoom;
cutsceneCameraSegment->zoom = 1;
}
+5 -5
View File
@@ -1555,7 +1555,7 @@ Particle *create_general_particle(Object *obj, ParticleEmitter *emitter) {
if (particle->kind == PARTICLE_KIND_SPRITE) {
particle->sprite = (Sprite *) tex_load_sprite(descriptor->textureID, 0);
if (particle->sprite != NULL) {
if (particle->sprite->frames[0]->flags & 4) {
if (particle->sprite->textures[0]->flags & 4) {
if (particle->descFlags & PARTICLE_DESC_FLAG_1000) {
particle->trans.flags |= OBJ_FLAGS_UNK_0100;
} else {
@@ -1563,7 +1563,7 @@ Particle *create_general_particle(Object *obj, ParticleEmitter *emitter) {
}
}
if (behaviour->flags & PARTICLE_RANDOM_TEXTURE_FRAME) {
particle->textureFrame = rand_range(0, particle->sprite->baseTextureId - 1) << 8;
particle->textureFrame = rand_range(0, particle->sprite->numberOfFrames - 1) << 8;
if ((particle->descFlags &
(PARTICLE_TEXTURE_ANIM_FORWARD_ENABLED | PARTICLE_TEXTURE_ANIM_BACKWARD_ENABLED)) ==
PARTICLE_TEXTURE_ANIM_BACKWARD_ENABLED) {
@@ -1572,7 +1572,7 @@ Particle *create_general_particle(Object *obj, ParticleEmitter *emitter) {
} else if ((particle->descFlags &
(PARTICLE_TEXTURE_ANIM_FORWARD_ENABLED | PARTICLE_TEXTURE_ANIM_BACKWARD_ENABLED)) ==
PARTICLE_TEXTURE_ANIM_BACKWARD_ENABLED) {
particle->textureFrame = (particle->sprite->baseTextureId << 8) - 1;
particle->textureFrame = (particle->sprite->numberOfFrames << 8) - 1;
} else {
particle->textureFrame = 0;
}
@@ -2173,7 +2173,7 @@ void update_particle_texture_frame(Particle *particle) {
keepGoing = -1;
i = 0; // required to match
textureCount = particle->kind == PARTICLE_KIND_SPRITE ? particle->sprite->baseTextureId * 256
textureCount = particle->kind == PARTICLE_KIND_SPRITE ? particle->sprite->numberOfFrames * 256
: particle->model->texture->numOfTextures;
forwardEnabled = particle->descFlags & PARTICLE_TEXTURE_ANIM_FORWARD_ENABLED;
@@ -2406,7 +2406,7 @@ void render_particle(Particle *particle, Gfx **dList, Mtx **mtx, Vertex **vtx, s
if (particle->kind == PARTICLE_KIND_SPRITE) {
temp = particle->textureFrame;
particle->textureFrame >>= 8;
particle->textureFrame = (particle->textureFrame * 255) / (particle->sprite->baseTextureId);
particle->textureFrame = (particle->textureFrame * 255) / (particle->sprite->numberOfFrames);
render_sprite_billboard(dList, mtx, vtx, (Object *) particle, particle->sprite, renderFlags);
particle->textureFrame = temp;
} else {
+207 -172
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -170,7 +170,7 @@ TextureHeader *set_animated_texture_header(TextureHeader *texHead, s32 offset);
TextureHeader *load_texture(s32 arg0);
s32 tex_asset_size(s32 id);
s32 tex_cache_asset_id(s32 cacheID);
s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 *numFramesOut, s32 *formatOut,
s32 load_sprite_info(s32 spriteIndex, s32 *anchorXOut, s32 *anchorYOut, s32 *numFramesOut, s32 *formatOut,
s32 *sizeOut);
void gfx_init_basic_xlu(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor);
void func_8007CA68(s32 arg0, s32 arg1, s32 *arg2, s32 *arg3, s32 *arg4);
@@ -179,6 +179,6 @@ void tex_init_textures(void);
void material_set_blinking_lights(Gfx **dList, TextureHeader *texture_list, u32 flags,
s32 texture_index);
void material_init(TextureHeader *tex, Gfx *_dList);
void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2);
void sprite_init_frame(SpriteAsset *sprite1, Sprite *sprite2, s32 arg2);
#endif
+1 -1
View File
@@ -4443,7 +4443,7 @@ void obj_loop_fogchanger(Object *obj) {
camera = NULL;
if (check_if_showing_cutscene_camera()) {
camera = get_cutscene_camera_segment();
camera = cam_get_cameras();
views = cam_get_viewport_layout() + 1;
} else {
racers = get_racer_objects(&views);
+17 -17
View File
@@ -913,7 +913,7 @@ mtx_perspective = 0x8006814C;
viewport_rsp_set = 0x80068228;
viewport_reset = 0x8006837C;
mtx_world_origin = 0x800684D8;
sprite_anim_off = 0x800685D8;
cam_set_sprite_anim_mode = 0x800685D8;
render_sprite_billboard = 0x800685E4;
render_ortho_triangle_image = 0x80068CC4;
mtx_shear_push = 0x80069078;
@@ -926,7 +926,7 @@ cam_move_dir = 0x80069C40;
cam_rotate = 0x80069D84;
cam_get_active_camera_no_cutscenes = 0x80069DCC;
cam_get_active_camera = 0x80069DF0;
get_cutscene_camera_segment = 0x80069E4C;
cam_get_cameras = 0x80069E4C;
get_projection_matrix_f32 = 0x80069E74;
get_projection_matrix_s16 = 0x80069E80;
get_camera_matrix = 0x80069E8C;
@@ -1292,7 +1292,7 @@ sprite_cache_asset_id = 0x8007CBB0;
load_sprite_info = 0x8007CBF0;
func_8007CA68 = 0x8007CD78;
sprite_free = 0x8007CFC0;
func_8007CDC0 = 0x8007D0D0;
sprite_init_frame = 0x8007D0D0;
material_init = 0x8007D404;
tex_palette_id = 0x8007F274;
tex_animate_texture = 0x8007F290;
@@ -3943,7 +3943,7 @@ gNumCameras = 0x80122758;
D_80120CEC = 0x8012275C;
gCameraTransform = 0x80122760;
gMtxOriginID = 0x80122778;
gSpriteAnimOff = 0x8012277C;
gSpriteAnimMode = 0x8012277C;
gCurCamFOV = 0x80122780;
gCutsceneCameraActive = 0x80122784;
gAdjustViewportHeight = 0x80122785;
@@ -3951,21 +3951,21 @@ gNoCamShake = 0x80122788;
gModelMatrixStackPos = 0x8012278C;
gCameraMatrixPos = 0x80122790;
D_80120D24 = 0x80122794;
gModelMatrixViewX = 0x80122798;
gModelMatrixViewY = 0x801227B0;
gModelMatrixViewZ = 0x801227C8;
gCameraRelPosStackX = 0x80122798;
gCameraRelPosStackY = 0x801227B0;
gCameraRelPosStackZ = 0x801227C8;
perspNorm = 0x801227DC;
gModelMatrixF = 0x801227E0;
gModelMatrix = 0x801227F8;
D_80120DA0 = 0x80122810;
gPerspectiveMatrixF = 0x80122950;
gViewMatrixF = 0x80122990;
gCameraMatrixF = 0x801229D0;
gProjectionMatrixF = 0x80122A10;
gProjectionMatrix = 0x80122A50;
gUnusedProjectionMatrix = 0x80122A90;
gViewProjMatrixF = 0x80122990;
gViewMatrixF = 0x801229D0;
gInverseViewMatrixF = 0x80122A10;
gPerspectiveMatrix = 0x80122A50;
gInverseViewMatrix = 0x80122A90;
gCurrentModelMatrixF = 0x80122AD0;
gCurrentModelMatrixS = 0x80122B10;
gCurrentMVPMatrixF = 0x80122B10;
// controller .bss
sSIMesgQueue = 0x80122B50;
@@ -4140,13 +4140,13 @@ gCiPalettesSize = 0x80127DD0;
gFirstTexIsLoaded = 0x80127DD4;
gSpriteOffsetTable = 0x80127DD8;
gSpriteCache = 0x80127DDC;
gCurrentSprite = 0x80127DE0;
gCurrentSpriteAsset = 0x80127DE0;
gSpriteTableSize = 0x80127DE4;
gSpriteCacheCount = 0x80127DE8;
D_8012635C = 0x80127DEC;
D_80126360 = 0x80127DF0;
D_80126364 = 0x80127DF4;
D_80126368 = 0x80127DF8;
gSpriteVertices = 0x80127DF0;
gSpriteDLists = 0x80127DF4;
gSpriteTriangles = 0x80127DF8;
gTempTextureHeader = 0x80127DFC;
D_80126370 = 0x80127E00;
gCurrentRenderFlags = 0x80127E04;
+17 -17
View File
@@ -911,7 +911,7 @@ mtx_perspective = 0x8006807C;
viewport_rsp_set = 0x80068158;
viewport_reset = 0x800682AC;
mtx_world_origin = 0x80068408;
sprite_anim_off = 0x80068508;
cam_set_sprite_anim_mode = 0x80068508;
render_sprite_billboard = 0x80068514;
render_ortho_triangle_image = 0x80068BF4;
mtx_shear_push = 0x80068FA8;
@@ -924,7 +924,7 @@ cam_move_dir = 0x80069B70;
cam_rotate = 0x80069CB4;
cam_get_active_camera_no_cutscenes = 0x80069CFC;
cam_get_active_camera = 0x80069D20;
get_cutscene_camera_segment = 0x80069D7C;
cam_get_cameras = 0x80069D7C;
get_projection_matrix_f32 = 0x80069DA4;
get_projection_matrix_s16 = 0x80069DB0;
get_camera_matrix = 0x80069DBC;
@@ -1288,7 +1288,7 @@ sprite_cache_asset_id = 0x8007C8A0;
load_sprite_info = 0x8007C8E0;
func_8007CA68 = 0x8007CA68;
sprite_free = 0x8007CCB0;
func_8007CDC0 = 0x8007CDC0;
sprite_init_frame = 0x8007CDC0;
material_init = 0x8007D0F4;
tex_palette_id = 0x8007EF64;
tex_animate_texture = 0x8007EF80;
@@ -3653,7 +3653,7 @@ gNumCameras = 0x80120D78;
D_80120CEC = 0x80120D7C;
gCameraTransform = 0x80120D80;
gMtxOriginID = 0x80120D98;
gSpriteAnimOff = 0x80120D9C;
gSpriteAnimMode = 0x80120D9C;
gCurCamFOV = 0x80120DA0;
gCutsceneCameraActive = 0x80120DA4;
gAdjustViewportHeight = 0x80120DA5;
@@ -3661,21 +3661,21 @@ gNoCamShake = 0x80120DA8;
gModelMatrixStackPos = 0x80120DAC;
gCameraMatrixPos = 0x80120DB0;
D_80120D24 = 0x80120DB4;
gModelMatrixViewX = 0x80120DB8;
gModelMatrixViewY = 0x80120DD0;
gModelMatrixViewZ = 0x80120DE8;
gCameraRelPosStackX = 0x80120DB8;
gCameraRelPosStackY = 0x80120DD0;
gCameraRelPosStackZ = 0x80120DE8;
perspNorm = 0x80120DFC;
gModelMatrixF = 0x80120E00;
gModelMatrix = 0x80120E18;
D_80120DA0 = 0x80120E30;
gPerspectiveMatrixF = 0x80120F70;
gViewMatrixF = 0x80120FB0;
gCameraMatrixF = 0x80120FF0;
gProjectionMatrixF = 0x80121030;
gProjectionMatrix = 0x80121070;
gUnusedProjectionMatrix = 0x801210B0;
gViewProjMatrixF = 0x80120FB0;
gViewMatrixF = 0x80120FF0;
gInverseViewMatrixF = 0x80121030;
gPerspectiveMatrix = 0x80121070;
gInverseViewMatrix = 0x801210B0;
gCurrentModelMatrixF = 0x801210F0;
gCurrentModelMatrixS = 0x80121130;
gCurrentMVPMatrixF = 0x80121130;
sSIMesgQueue = 0x80121170;
sSIMesgBuf = 0x80121188;
gSIMesg = 0x8012118C;
@@ -3826,13 +3826,13 @@ gCiPalettesSize = 0x801263D0;
gFirstTexIsLoaded = 0x801263D4;
gSpriteOffsetTable = 0x801263D8;
gSpriteCache = 0x801263DC;
gCurrentSprite = 0x801263E0;
gCurrentSpriteAsset = 0x801263E0;
gSpriteTableSize = 0x801263E4;
gSpriteCacheCount = 0x801263E8;
D_8012635C = 0x801263EC;
D_80126360 = 0x801263F0;
D_80126364 = 0x801263F4;
D_80126368 = 0x801263F8;
gSpriteVertices = 0x801263F0;
gSpriteDLists = 0x801263F4;
gSpriteTriangles = 0x801263F8;
gTempTextureHeader = 0x801263FC;
D_80126370 = 0x80126400;
gCurrentRenderFlags = 0x80126404;
+17 -17
View File
@@ -857,7 +857,7 @@ mtx_perspective = 0x800682BC;
viewport_rsp_set = 0x80068398;
viewport_reset = 0x800684EC;
mtx_world_origin = 0x80068648;
sprite_anim_off = 0x80068748;
cam_set_sprite_anim_mode = 0x80068748;
render_sprite_billboard = 0x80068754;
render_ortho_triangle_image = 0x80068E34;
mtx_shear_push = 0x800691E8;
@@ -870,7 +870,7 @@ cam_move_dir = 0x80069DB0;
cam_rotate = 0x80069EF4;
cam_get_active_camera_no_cutscenes = 0x80069F3C;
cam_get_active_camera = 0x80069F60;
get_cutscene_camera_segment = 0x80069FBC;
cam_get_cameras = 0x80069FBC;
get_projection_matrix_f32 = 0x80069FE4;
get_projection_matrix_s16 = 0x80069FF0;
get_camera_matrix = 0x80069FFC;
@@ -1211,7 +1211,7 @@ sprite_cache_asset_id = 0x8007CCF0;
load_sprite_info = 0x8007CD30;
func_8007CA68 = 0x8007CEB8;
sprite_free = 0x8007D100;
func_8007CDC0 = 0x8007D210;
sprite_init_frame = 0x8007D210;
material_init = 0x8007D544;
tex_palette_id = 0x8007F3B4;
tex_animate_texture = 0x8007F3D0;
@@ -3583,7 +3583,7 @@ gNumCameras = 0x801212F8;
D_80120CEC = 0x801212FC;
gCameraTransform = 0x80121300;
gMtxOriginID = 0x80121318;
gSpriteAnimOff = 0x8012131C;
gSpriteAnimMode = 0x8012131C;
gCurCamFOV = 0x80121320;
gCutsceneCameraActive = 0x80121324;
gAdjustViewportHeight = 0x80121325;
@@ -3591,21 +3591,21 @@ gNoCamShake = 0x80121328;
gModelMatrixStackPos = 0x8012132C;
gCameraMatrixPos = 0x80121330;
D_80120D24 = 0x80121334;
gModelMatrixViewX = 0x80121338;
gModelMatrixViewY = 0x80121350;
gModelMatrixViewZ = 0x80121368;
gCameraRelPosStackX = 0x80121338;
gCameraRelPosStackY = 0x80121350;
gCameraRelPosStackZ = 0x80121368;
perspNorm = 0x8012137C;
gModelMatrixF = 0x80121380;
gModelMatrix = 0x80121398;
D_80120DA0 = 0x801213B0;
gPerspectiveMatrixF = 0x801214F0;
gViewMatrixF = 0x80121530;
gCameraMatrixF = 0x80121570;
gProjectionMatrixF = 0x801215B0;
gProjectionMatrix = 0x801215F0;
gUnusedProjectionMatrix = 0x80121630;
gViewProjMatrixF = 0x80121530;
gViewMatrixF = 0x80121570;
gInverseViewMatrixF = 0x801215B0;
gPerspectiveMatrix = 0x801215F0;
gInverseViewMatrix = 0x80121630;
gCurrentModelMatrixF = 0x80121670;
gCurrentModelMatrixS = 0x801216B0;
gCurrentMVPMatrixF = 0x801216B0;
sSIMesgQueue = 0x801216F0;
sSIMesgBuf = 0x80121708;
gSIMesg = 0x8012170C;
@@ -3758,13 +3758,13 @@ gCiPalettesSize = 0x80126970;
gFirstTexIsLoaded = 0x80126974;
gSpriteOffsetTable = 0x80126978;
gSpriteCache = 0x8012697C;
gCurrentSprite = 0x80126980;
gCurrentSpriteAsset = 0x80126980;
gSpriteTableSize = 0x80126984;
gSpriteCacheCount = 0x80126988;
D_8012635C = 0x8012698C;
D_80126360 = 0x80126990;
D_80126364 = 0x80126994;
D_80126368 = 0x80126998;
gSpriteVertices = 0x80126990;
gSpriteDLists = 0x80126994;
gSpriteTriangles = 0x80126998;
gTempTextureHeader = 0x8012699C;
D_80126370 = 0x801269A0;
gCurrentRenderFlags = 0x801269A4;
+17 -17
View File
@@ -911,7 +911,7 @@ mtx_perspective = 0x8006807C;
viewport_rsp_set = 0x80068158;
viewport_reset = 0x800682AC;
mtx_world_origin = 0x80068408;
sprite_anim_off = 0x80068508;
cam_set_sprite_anim_mode = 0x80068508;
render_sprite_billboard = 0x80068514;
render_ortho_triangle_image = 0x80068BF4;
mtx_shear_push = 0x80068FA8;
@@ -924,7 +924,7 @@ cam_move_dir = 0x80069B70;
cam_rotate = 0x80069CB4;
cam_get_active_camera_no_cutscenes = 0x80069CFC;
cam_get_active_camera = 0x80069D20;
get_cutscene_camera_segment = 0x80069D7C;
cam_get_cameras = 0x80069D7C;
get_projection_matrix_f32 = 0x80069DA4;
get_projection_matrix_s16 = 0x80069DB0;
get_camera_matrix = 0x80069DBC;
@@ -1288,7 +1288,7 @@ sprite_cache_asset_id = 0x8007C8A0;
load_sprite_info = 0x8007C8E0;
func_8007CA68 = 0x8007CA68;
sprite_free = 0x8007CCB0;
func_8007CDC0 = 0x8007CDC0;
sprite_init_frame = 0x8007CDC0;
material_init = 0x8007D0F4;
tex_palette_id = 0x8007EF64;
tex_animate_texture = 0x8007EF80;
@@ -4058,7 +4058,7 @@ gNumCameras = 0x80120CE8;
D_80120CEC = 0x80120CEC;
gCameraTransform = 0x80120CF0;
gMtxOriginID = 0x80120D08;
gSpriteAnimOff = 0x80120D0C;
gSpriteAnimMode = 0x80120D0C;
gCurCamFOV = 0x80120D10;
gCutsceneCameraActive = 0x80120D14;
gAdjustViewportHeight = 0x80120D15;
@@ -4066,21 +4066,21 @@ gNoCamShake = 0x80120D18;
gModelMatrixStackPos = 0x80120D1C;
gCameraMatrixPos = 0x80120D20;
D_80120D24 = 0x80120D24;
gModelMatrixViewX = 0x80120D28;
gModelMatrixViewY = 0x80120D40;
gModelMatrixViewZ = 0x80120D58;
gCameraRelPosStackX = 0x80120D28;
gCameraRelPosStackY = 0x80120D40;
gCameraRelPosStackZ = 0x80120D58;
perspNorm = 0x80120D6C;
gModelMatrixF = 0x80120D70;
gModelMatrix = 0x80120D88;
D_80120DA0 = 0x80120DA0;
gPerspectiveMatrixF = 0x80120EE0;
gViewMatrixF = 0x80120F20;
gCameraMatrixF = 0x80120F60;
gProjectionMatrixF = 0x80120FA0;
gProjectionMatrix = 0x80120FE0;
gUnusedProjectionMatrix = 0x80121020;
gViewProjMatrixF = 0x80120F20;
gViewMatrixF = 0x80120F60;
gInverseViewMatrixF = 0x80120FA0;
gPerspectiveMatrix = 0x80120FE0;
gInverseViewMatrix = 0x80121020;
gCurrentModelMatrixF = 0x80121060;
gCurrentModelMatrixS = 0x801210A0;
gCurrentMVPMatrixF = 0x801210A0;
// controller .bss
sSIMesgQueue = 0x801210E0;
@@ -4253,13 +4253,13 @@ gCiPalettesSize = 0x80126340;
gFirstTexIsLoaded = 0x80126344;
gSpriteOffsetTable = 0x80126348;
gSpriteCache = 0x8012634C;
gCurrentSprite = 0x80126350;
gCurrentSpriteAsset = 0x80126350;
gSpriteTableSize = 0x80126354;
gSpriteCacheCount = 0x80126358;
D_8012635C = 0x8012635C;
D_80126360 = 0x80126360;
D_80126364 = 0x80126364;
D_80126368 = 0x80126368;
gSpriteVertices = 0x80126360;
gSpriteDLists = 0x80126364;
gSpriteTriangles = 0x80126368;
gTempTextureHeader = 0x8012636C;
D_80126370 = 0x80126370;
gCurrentRenderFlags = 0x80126374;
+17 -17
View File
@@ -857,7 +857,7 @@ mtx_perspective = 0x800682BC;
viewport_rsp_set = 0x80068398;
viewport_reset = 0x800684EC;
mtx_world_origin = 0x80068648;
sprite_anim_off = 0x80068748;
cam_set_sprite_anim_mode = 0x80068748;
render_sprite_billboard = 0x80068754;
render_ortho_triangle_image = 0x80068E34;
mtx_shear_push = 0x800691E8;
@@ -870,7 +870,7 @@ cam_move_dir = 0x80069DB0;
cam_rotate = 0x80069EF4;
cam_get_active_camera_no_cutscenes = 0x80069F3C;
cam_get_active_camera = 0x80069F60;
get_cutscene_camera_segment = 0x80069FBC;
cam_get_cameras = 0x80069FBC;
get_projection_matrix_f32 = 0x80069FE4;
get_projection_matrix_s16 = 0x80069FF0;
get_camera_matrix = 0x80069FFC;
@@ -1211,7 +1211,7 @@ sprite_cache_asset_id = 0x8007CCF0;
load_sprite_info = 0x8007CD30;
func_8007CA68 = 0x8007CEB8;
sprite_free = 0x8007D100;
func_8007CDC0 = 0x8007D210;
sprite_init_frame = 0x8007D210;
material_init = 0x8007D544;
tex_palette_id = 0x8007F3B4;
tex_animate_texture = 0x8007F3D0;
@@ -3579,7 +3579,7 @@ gNumCameras = 0x80121268;
D_80120CEC = 0x8012126C;
gCameraTransform = 0x80121270;
gMtxOriginID = 0x80121288;
gSpriteAnimOff = 0x8012128C;
gSpriteAnimMode = 0x8012128C;
gCurCamFOV = 0x80121290;
gCutsceneCameraActive = 0x80121294;
gAdjustViewportHeight = 0x80121295;
@@ -3587,21 +3587,21 @@ gNoCamShake = 0x80121298;
gModelMatrixStackPos = 0x8012129C;
gCameraMatrixPos = 0x801212A0;
D_80120D24 = 0x801212A4;
gModelMatrixViewX = 0x801212A8;
gModelMatrixViewY = 0x801212C0;
gModelMatrixViewZ = 0x801212D8;
gCameraRelPosStackX = 0x801212A8;
gCameraRelPosStackY = 0x801212C0;
gCameraRelPosStackZ = 0x801212D8;
perspNorm = 0x801212EC;
gModelMatrixF = 0x801212F0;
gModelMatrix = 0x80121308;
D_80120DA0 = 0x80121320;
gPerspectiveMatrixF = 0x80121460;
gViewMatrixF = 0x801214A0;
gCameraMatrixF = 0x801214E0;
gProjectionMatrixF = 0x80121520;
gProjectionMatrix = 0x80121560;
gUnusedProjectionMatrix = 0x801215A0;
gViewProjMatrixF = 0x801214A0;
gViewMatrixF = 0x801214E0;
gInverseViewMatrixF = 0x80121520;
gPerspectiveMatrix = 0x80121560;
gInverseViewMatrix = 0x801215A0;
gCurrentModelMatrixF = 0x801215E0;
gCurrentModelMatrixS = 0x80121620;
gCurrentMVPMatrixF = 0x80121620;
sSIMesgQueue = 0x80121660;
sSIMesgBuf = 0x80121678;
gSIMesg = 0x8012167C;
@@ -3754,13 +3754,13 @@ gCiPalettesSize = 0x801268E0;
gFirstTexIsLoaded = 0x801268E4;
gSpriteOffsetTable = 0x801268E8;
gSpriteCache = 0x801268EC;
gCurrentSprite = 0x801268F0;
gCurrentSpriteAsset = 0x801268F0;
gSpriteTableSize = 0x801268F4;
gSpriteCacheCount = 0x801268F8;
D_8012635C = 0x801268FC;
D_80126360 = 0x80126900;
D_80126364 = 0x80126904;
D_80126368 = 0x80126908;
gSpriteVertices = 0x80126900;
gSpriteDLists = 0x80126904;
gSpriteTriangles = 0x80126908;
gTempTextureHeader = 0x8012690C;
D_80126370 = 0x80126910;
gCurrentRenderFlags = 0x80126914;