summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2024-08-23 02:20:13 +0200
committerGitHub <noreply@github.com>2024-08-22 18:20:13 -0600
commite135178097f416bc54e36058e10d9b1c013929fd (patch)
tree0903c79b59ed716497e55618631d5e76611fe032
parent3781ce2830a143df855003b65fe069d2e26215d9 (diff)
Update from decomp (#34)
* Update menus.c (#634) * Update common_data.yml (#635) * Renames for screenId and other changes (#636) * screenId renames * Rename surface map to collision mesh (#637) * Rename some stack vars (#638) * Fix syntax error (#639) * Rename some stack vars * Update collision.c * Collision Documentation (#640) * Collision related renames * update doxygen (#649) * change bool (#644) * Update (#642) * Delete trig_tables_bss.c (#650) * fix typo audio (#656) * fix typo src actor (#657) * fix typo include (#658) * fix course (#659) * fix typo debug (#660) * fix typo data (#661) * Update common_structs.h * replace number with const (#665) * fix typo buffers (#655) * fix typo buffers * tweak ld file * rename to sMemoryPool * add a warning --------- * fix typo src (#654) * fix typo src * fix non matcing * Update code_80091750.c --------- * fix typo racing (#653) * fix typo racing * get it match * replace G_LINE3D to G_QUAD --------- * fix typo src (#652) * fix ending typo (#651) * Action more info when it doesn't match and fix first diff (#662) * Update linux-compile.yml * fix first-diff * Update first-diff.py --------- * document texture of kart (#663) * document texture of kart * change screenPlayerId to screenId * some documentation around object * Revert "some documentation around object" This reverts commit cbb39078e036bf2a417bed67359e910213acab28. * more rename --------- * Make evaluate_collision_players_palm_tree better (#667) This matches just the same as before, but using those two casts instead of shifts seems more likely to be accurate to the original source code Signed-off-by: Gabriel Ravier <gabravier@gmail.com> * add fedora instruciton (#666) * start documenting animation (#668) * start documenting animation * Update course_data.c * change comment * fix error of compilation * fix error of compilation * Update animation.c
-rw-r--r--.github/workflows/linux-compile.yml2
-rw-r--r--asm/eu_nonmatchings/audio_init.s4
-rw-r--r--asm/non_matchings/audio/load/audio_init.s4
-rw-r--r--courses/all_course_model.h2
-rw-r--r--courses/koopa_troopa_beach/course_offsets.c6
-rw-r--r--courses/rainbow_road/course_offsets.c6
-rw-r--r--courses/sherbet_land/course_offsets.c14
-rw-r--r--courses/staff_ghost_data.c2
-rw-r--r--courses/yoshi_valley/course_offsets.c6
-rw-r--r--ctx_includes.c2
-rw-r--r--docs/basics/compiling.md10
-rw-r--r--docs/basics/controlflow.md2
-rwxr-xr-xfirst-diff.py15
-rw-r--r--include/bomb_kart.h2
-rw-r--r--include/common_structs.h2
-rw-r--r--include/course_offsets.h66
-rw-r--r--include/decode.h2
-rw-r--r--include/defines.h17
-rw-r--r--include/objects.h2
-rw-r--r--include/save_data.h2
-rw-r--r--include/spline.h2
-rw-r--r--include/vehicles.h2
-rw-r--r--include/waypoints.h2
-rw-r--r--mk64.ld6
-rw-r--r--safe_gcc.mk2
-rw-r--r--src/animation.c177
-rw-r--r--src/animation.h (renamed from src/code_80004740.h)95
-rw-r--r--src/audio/data.c2
-rw-r--r--src/audio/data.h2
-rw-r--r--src/audio/heap.c4
-rw-r--r--src/audio/load.c4
-rw-r--r--src/audio/port_eu.c2
-rw-r--r--src/buffers.h14
-rw-r--r--src/buffers/buffers.c9
-rw-r--r--src/buffers/memory_pool.c3
-rw-r--r--src/camera.h2
-rw-r--r--src/code_800029B0.c2
-rw-r--r--src/code_80004740.c177
-rw-r--r--src/code_80005FD0.c4
-rw-r--r--src/code_8003DC40.c2
-rw-r--r--src/code_8003DC40.h2
-rw-r--r--src/code_80057C60.c112
-rw-r--r--src/code_80057C60.h10
-rw-r--r--src/code_8006E9C0.h2
-rw-r--r--src/code_80086E70.h2
-rw-r--r--src/code_80091750.c3
-rw-r--r--src/code_80091750.h2
-rw-r--r--src/code_800AF9B0.h2
-rw-r--r--src/data/path_spawn_metadata.h2
-rw-r--r--src/debug/all_variables.h2
-rw-r--r--src/effects.h2
-rw-r--r--src/ending/ceremony_and_credits.h2
-rw-r--r--src/ending/code_80280000.h2
-rw-r--r--src/kart_dma.c387
-rw-r--r--src/kart_dma.h8
-rw-r--r--src/main.c3
-rw-r--r--src/menus.c6
-rw-r--r--src/menus.h2
-rw-r--r--src/os/epidma.c2
-rw-r--r--src/os/leointerrupt.c2
-rw-r--r--src/os/osCartRomInit.c10
-rw-r--r--src/os/osEPiRawStartDma.c2
-rw-r--r--src/os/osPfsIsPlug.c2
-rw-r--r--src/player_controller.c14
-rw-r--r--src/player_controller.h2
-rw-r--r--src/racing/actors.c3
-rw-r--r--src/racing/actors_extended.h2
-rw-r--r--src/racing/collision.c5
-rw-r--r--src/racing/collision.h2
-rw-r--r--src/racing/memory.c11
-rw-r--r--src/racing/race_logic.c2
-rw-r--r--src/render_objects.c18
-rw-r--r--src/render_objects.h2
-rw-r--r--src/render_player.c585
-rw-r--r--src/render_player.h32
-rw-r--r--src/save.h2
-rw-r--r--src/spawn_players.c32
-rw-r--r--src/spawn_players.h2
-rw-r--r--src/staff_ghosts.h2
-rw-r--r--src/update_objects.c12
-rw-r--r--src/update_objects.h4
81 files changed, 1026 insertions, 956 deletions
diff --git a/.github/workflows/linux-compile.yml b/.github/workflows/linux-compile.yml
index c5893fe5d..b4c0b35b0 100644
--- a/.github/workflows/linux-compile.yml
+++ b/.github/workflows/linux-compile.yml
@@ -28,4 +28,4 @@ jobs:
cp -r complementary_file/* .
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
make assets
- make -j \ No newline at end of file
+ make -j || ./first-diff.py \ No newline at end of file
diff --git a/asm/eu_nonmatchings/audio_init.s b/asm/eu_nonmatchings/audio_init.s
index 653906ad3..75b04b516 100644
--- a/asm/eu_nonmatchings/audio_init.s
+++ b/asm/eu_nonmatchings/audio_init.s
@@ -26,8 +26,8 @@ glabel audio_init
.L800BC128:
/* BCD28 800BC128 19E0000C */ blez $t7, .L800BC15C
/* BCD2C 800BC12C 3C04803B */ lui $a0, %hi(gGfxSPTaskOutputBufferSize)
-/* BCD30 800BC130 3C18803B */ lui $t8, %hi(D_803B71B0)
-/* BCD34 800BC134 270271B0 */ addiu $v0, $t8, %lo(D_803B71B0)
+/* BCD30 800BC130 3C18803B */ lui $t8, %hi(gAudioHeap)
+/* BCD34 800BC134 270271B0 */ addiu $v0, $t8, %lo(gAudioHeap)
/* BCD38 800BC138 000FC8C0 */ sll $t9, $t7, 3
/* BCD3C 800BC13C 03221821 */ addu $v1, $t9, $v0
.L800BC140:
diff --git a/asm/non_matchings/audio/load/audio_init.s b/asm/non_matchings/audio/load/audio_init.s
index 60dee61bd..ca8215680 100644
--- a/asm/non_matchings/audio/load/audio_init.s
+++ b/asm/non_matchings/audio/load/audio_init.s
@@ -34,8 +34,8 @@ glabel audio_init
.L800BC128:
/* 0BCD28 800BC128 19E0000C */ blez $t7, .L800BC15C
/* 0BCD2C 800BC12C 3C04803B */ lui $a0, %hi(gGfxSPTaskOutputBufferSize) # 0x803b
-/* 0BCD30 800BC130 3C18803B */ lui $t8, %hi(D_803B71B0) # 0x803b
-/* 0BCD34 800BC134 270271B0 */ addiu $v0, $t8, %lo(D_803B71B0) # 0x71b0
+/* 0BCD30 800BC130 3C18803B */ lui $t8, %hi(gAudioHeap) # 0x803b
+/* 0BCD34 800BC134 270271B0 */ addiu $v0, $t8, %lo(gAudioHeap) # 0x71b0
/* 0BCD38 800BC138 000FC8C0 */ sll $t9, $t7, 3
/* 0BCD3C 800BC13C 03221821 */ addu $v1, $t9, $v0
.L800BC140:
diff --git a/courses/all_course_model.h b/courses/all_course_model.h
index 4ef3709d6..95759cb10 100644
--- a/courses/all_course_model.h
+++ b/courses/all_course_model.h
@@ -2,7 +2,7 @@
#define ALL_COURSE_MODEL_H
#include "macros.h"
-#include "common_structs.h"
+#include <common_structs.h>
/** WARNING!!!
* This header file has the sizes of the vertex array's hard coded.
diff --git a/courses/koopa_troopa_beach/course_offsets.c b/courses/koopa_troopa_beach/course_offsets.c
index 18ffb89c7..ef784168f 100644
--- a/courses/koopa_troopa_beach/course_offsets.c
+++ b/courses/koopa_troopa_beach/course_offsets.c
@@ -388,7 +388,7 @@ s16 d_course_koopa_troopa_beach_unk_data2[] = {
};
// 0x06014B50
-animation_type_3_triplet d_course_koopa_troopa_beach_unk_data3[] = {
+AnimationLimbVector d_course_koopa_troopa_beach_unk_data3[] = {
{
{ 0x0001, 0x0000 },
{ 0x0037, 0x0001 },
@@ -447,7 +447,7 @@ animation_type_3_triplet d_course_koopa_troopa_beach_unk_data3[] = {
};
// 0x06014BD4
-animation_type_2 d_course_koopa_troopa_beach_unk_data4 = {
+Animation d_course_koopa_troopa_beach_unk_data4 = {
0x00010000,
0x00000000,
0x0037,
@@ -599,7 +599,7 @@ uintptr_t d_course_koopa_troopa_beach_unk4[] = {
};
// 0x06016B60
-animation_type_2 *d_course_koopa_troopa_beach_unk_data5[] = {
+Animation *d_course_koopa_troopa_beach_unk_data5[] = {
&d_course_koopa_troopa_beach_unk_data4,
};
diff --git a/courses/rainbow_road/course_offsets.c b/courses/rainbow_road/course_offsets.c
index 5359dab9b..a555a72e7 100644
--- a/courses/rainbow_road/course_offsets.c
+++ b/courses/rainbow_road/course_offsets.c
@@ -97,7 +97,7 @@ s16 d_rainbow_road_chomp_jaw_animation[] = {
};
// 0x06016098
-animation_type_3_triplet d_rainbow_road_unk1[] = {
+AnimationLimbVector d_rainbow_road_unk1[] = {
{
{ 0x0001, 0x0000 },
{ 0x0001, 0x0000 },
@@ -141,7 +141,7 @@ animation_type_3_triplet d_rainbow_road_unk1[] = {
};
// 0x060160F8
-animation_type_2 d_rainbow_road_unk2 = {
+Animation d_rainbow_road_unk2 = {
0x00010000,
0x00000000,
0x0014,
@@ -151,7 +151,7 @@ animation_type_2 d_rainbow_road_unk2 = {
};
// 0x0601610C
-animation_type_2 *d_rainbow_road_unk3[] = {
+Animation *d_rainbow_road_unk3[] = {
&d_rainbow_road_unk2,
};
diff --git a/courses/sherbet_land/course_offsets.c b/courses/sherbet_land/course_offsets.c
index c942bf9a0..5cb3387c0 100644
--- a/courses/sherbet_land/course_offsets.c
+++ b/courses/sherbet_land/course_offsets.c
@@ -495,7 +495,7 @@ s16 d_course_sherbet_land_unk_data2[] = {
};
// 0x06009350
-animation_type_3_triplet d_course_sherbet_land_unk_data3[] = {
+AnimationLimbVector d_course_sherbet_land_unk_data3[] = {
{
{ 0x0001, 0x0000 },
{ 0x0001, 0x0001 },
@@ -559,7 +559,7 @@ animation_type_3_triplet d_course_sherbet_land_unk_data3[] = {
};
// 0x060093E0
-animation_type_2 d_course_sherbet_land_unk_data4 = {
+Animation d_course_sherbet_land_unk_data4 = {
0x00010000,
0x00050000,
0x0013,
@@ -720,7 +720,7 @@ s16 d_course_sherbet_land_unk_data5[] = {
};
// 0x06009640
-animation_type_3_triplet d_course_sherbet_land_unk_data6[] = {
+AnimationLimbVector d_course_sherbet_land_unk_data6[] = {
{
{ 0x0001, 0x0000 },
{ 0x0019, 0x0001 },
@@ -784,7 +784,7 @@ animation_type_3_triplet d_course_sherbet_land_unk_data6[] = {
};
// 0x060096D0
-animation_type_2 d_course_sherbet_land_unk_data7 = {
+Animation d_course_sherbet_land_unk_data7 = {
0x00000000,
0x00000000,
0x0019,
@@ -1006,7 +1006,7 @@ s16 d_course_sherbet_land_unk_data8[] = {
};
// 0x06009A24
-animation_type_3_triplet d_course_sherbet_land_unk_data9[] = {
+AnimationLimbVector d_course_sherbet_land_unk_data9[] = {
{
{ 0x0001, 0x0000 },
{ 0x0019, 0x0001 },
@@ -1070,7 +1070,7 @@ animation_type_3_triplet d_course_sherbet_land_unk_data9[] = {
};
// 0x06009AB4
-animation_type_2 d_course_sherbet_land_unk_data10 = {
+Animation d_course_sherbet_land_unk_data10 = {
0x00000000,
0x00000000,
0x0019,
@@ -1080,7 +1080,7 @@ animation_type_2 d_course_sherbet_land_unk_data10 = {
};
// 0x06009AC8
-animation_type_2 *d_course_sherbet_land_unk_data11[] = {
+Animation *d_course_sherbet_land_unk_data11[] = {
&d_course_sherbet_land_unk_data4,
&d_course_sherbet_land_unk_data7,
&d_course_sherbet_land_unk_data10,
diff --git a/courses/staff_ghost_data.c b/courses/staff_ghost_data.c
index 9483089ba..7ac7d2d2c 100644
--- a/courses/staff_ghost_data.c
+++ b/courses/staff_ghost_data.c
@@ -1,6 +1,6 @@
#include <libultraship.h>
#include <macros.h>
-#include "common_structs.h"
+#include <common_structs.h>
/*
* This file is required for data alignment
diff --git a/courses/yoshi_valley/course_offsets.c b/courses/yoshi_valley/course_offsets.c
index f5f5cfaf5..306cf6ccb 100644
--- a/courses/yoshi_valley/course_offsets.c
+++ b/courses/yoshi_valley/course_offsets.c
@@ -166,7 +166,7 @@ s16 d_course_yoshi_valley_unk1[] = {
};
// 0x06014714
-animation_type_3_triplet d_course_yoshi_valley_unk2[] = {
+AnimationLimbVector d_course_yoshi_valley_unk2[] = {
{
{ 0x0001, 0x0000 },
{ 0x0001, 0x0000 },
@@ -215,7 +215,7 @@ animation_type_3_triplet d_course_yoshi_valley_unk2[] = {
};
// 0x06014780
-animation_type_2 d_course_yoshi_valley_unk3 = {
+Animation d_course_yoshi_valley_unk3 = {
0x00010000,
0x00000000,
0x001d,
@@ -225,7 +225,7 @@ animation_type_2 d_course_yoshi_valley_unk3 = {
};
// 0x06014794
-animation_type_2 *d_course_yoshi_valley_unk4[] = {
+Animation *d_course_yoshi_valley_unk4[] = {
&d_course_yoshi_valley_unk3,
};
diff --git a/ctx_includes.c b/ctx_includes.c
index bbed5a4b9..defd80d04 100644
--- a/ctx_includes.c
+++ b/ctx_includes.c
@@ -65,7 +65,7 @@
#include "src/camera.h"
#include "src/camera_junk.h"
#include "src/code_800029B0.h"
-#include "src/code_80004740.h"
+#include "src/animation.h"
#include "src/code_80005FD0.h"
#include "src/code_8003DC40.h"
#include "src/code_80057C60.h"
diff --git a/docs/basics/compiling.md b/docs/basics/compiling.md
index efd1ed59d..1cfd50c94 100644
--- a/docs/basics/compiling.md
+++ b/docs/basics/compiling.md
@@ -13,10 +13,20 @@ To add submodules run `git submodule update --init --recursive` after cloning.
Run `make assets` to extract assets.
# Linux
+
+### Ubuntu
+
```bash
sudo apt install cmake build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
```
+### Fedora
+
+```bash
+sudo dnf install make automake gcc gcc-c++ kernel-devel cmake pkg-config git python3 zlib-devel audiofile-devel capstone
+```
+and install [gcc toolchain of libdragon](https://github.com/DragonMinded/libdragon/releases/tag/toolchain-continuous-prerelease) and add `export PATH="/opt/libdragon/bin:$PATH"` to ~/.bashrc
+
### Arch
```bash
diff --git a/docs/basics/controlflow.md b/docs/basics/controlflow.md
index 1790244c8..01af022b3 100644
--- a/docs/basics/controlflow.md
+++ b/docs/basics/controlflow.md
@@ -10,7 +10,7 @@ After boot, the game begins by setting up its four threads; [idle](@ref thread1_
The [idle thread](@ref thread1_idle) allows the cpu to sleep. Without it, if at any time execution of all threads were paused, the cpu would never be able to continue. The idle thread is active if all the other threads are paused.
-As such, the [idle thread](@ref thread1_idle) runs the following loop: `while(TRUE);` (it runs in a perpetual loop of nothing; sleep). In mips assembly it looks like this:
+As such, the [idle thread](@ref thread1_idle) runs the following loop: `while(true);` (it runs in a perpetual loop of nothing; sleep). In mips assembly it looks like this:
```
.L800005B8:
b .L800005B8
diff --git a/first-diff.py b/first-diff.py
index a208f4035..7b6d088cf 100755
--- a/first-diff.py
+++ b/first-diff.py
@@ -2,6 +2,7 @@
import os.path
import argparse
from subprocess import check_call
+import re
# TODO: -S argument for shifted ROMs
@@ -118,8 +119,9 @@ def search_map(rom_addr):
if "noload" in line or "noload" in prev_line:
ram_offset = None
continue
- ram = int(line[16 : 16 + 18], 0)
- rom = int(line[59 : 59 + 18], 0)
+ hex_number = re.findall(r"0x[0-9a-fA-F]+", line)
+ ram = int(hex_number[0], 0) # int(line[16 : 16 + 18], 0)
+ rom = int(hex_number[2], 0)# int(line[59 : 59 + 18], 0)
ram_offset = ram - rom
continue
prev_line = line
@@ -131,10 +133,11 @@ def search_map(rom_addr):
or " 0x" not in line
):
continue
- ram = int(line[16 : 16 + 18], 0)
+ hex_number = re.findall(r"0x[0-9a-fA-F]+", line)
+ ram = int(hex_number[0], 0) # int(line[16 : 16 + 18], 0)
rom = ram - ram_offset
fn = line.split()[-1]
- if "0x" in fn:
+ if fn.startswith("0x"):
ram_offset = None
continue
if rom > rom_addr or (rom_addr & 0x80000000 and ram > rom_addr):
@@ -265,7 +268,7 @@ for i in range(24, len(mybin), 4):
map_search_diff.append(search_map(i))
if diffs == 0:
print("No differences!")
- exit()
+ exit(0)
definite_shift = diffs > shift_cap
if not definite_shift:
if (diffs > 1):
@@ -288,7 +291,7 @@ if diffs > 100:
+ basemap
+ " and rerun this script."
)
- exit()
+ exit(1)
if not map_diff():
print(f"No ROM shift{' (!?)' if definite_shift else ''}")
diff --git a/include/bomb_kart.h b/include/bomb_kart.h
index 6f8bea8ca..528183949 100644
--- a/include/bomb_kart.h
+++ b/include/bomb_kart.h
@@ -1,7 +1,7 @@
#ifndef BOMB_KART_H
#define BOMB_KART_H
-#include "common_structs.h"
+#include <common_structs.h>
#include <mk64.h>
#define NUM_BOMB_KARTS_MAX 7
diff --git a/include/common_structs.h b/include/common_structs.h
index 76bd7ea83..b0abfcb91 100644
--- a/include/common_structs.h
+++ b/include/common_structs.h
@@ -203,7 +203,7 @@ typedef struct {
//bit 3: 1 = player tumbles upon contact (may fall right through)
/* 0x02 */ u16 surfaceType;
- // For AABB bounding-box style collision. Box collision is cheaper than checking each vtx.
+ // For AABB bounding-box style collision. Box style collision is cheaper than checking each vtx.
/* 0x04 */ s16 minX; // Minimum x coordinate
s16 minY; // Minimum y coordinate
s16 minZ; // Minimum z coordinate
diff --git a/include/course_offsets.h b/include/course_offsets.h
index b84888a63..72f046c75 100644
--- a/include/course_offsets.h
+++ b/include/course_offsets.h
@@ -5,7 +5,7 @@
#include <libultra/types.h>
#include <libultra/gbi.h>
#include <assets/other_textures.h>
-#include "code_80004740.h"
+#include "animation.h"
typedef struct
{
@@ -17,21 +17,21 @@ typedef struct
extern uintptr_t d_course_sherbet_land_unk_data1[];
extern s16 d_course_sherbet_land_unk_data2[];
-extern animation_type_3_triplet d_course_sherbet_land_unk_data3[];
-extern animation_type_2 d_course_sherbet_land_unk_data4;
+extern AnimationLimbVector d_course_sherbet_land_unk_data3[];
+extern Animation d_course_sherbet_land_unk_data4;
extern s16 d_course_sherbet_land_unk_data5[];
-extern animation_type_3_triplet d_course_sherbet_land_unk_data6[];
-extern animation_type_2 d_course_sherbet_land_unk_data7;
+extern AnimationLimbVector d_course_sherbet_land_unk_data6[];
+extern Animation d_course_sherbet_land_unk_data7;
extern s16 d_course_sherbet_land_unk_data8[];
-extern animation_type_3_triplet d_course_sherbet_land_unk_data9[];
-extern animation_type_2 d_course_sherbet_land_unk_data10;
-extern animation_type_2 *d_course_sherbet_land_unk_data11[];
+extern AnimationLimbVector d_course_sherbet_land_unk_data9[];
+extern Animation d_course_sherbet_land_unk_data10;
+extern Animation *d_course_sherbet_land_unk_data11[];
extern u32 d_course_sherbet_land_unk_data12[];
extern s16 d_rainbow_road_chomp_jaw_animation[];
-extern animation_type_3_triplet d_rainbow_road_unk1[];
-extern animation_type_2 d_rainbow_road_unk2;
-extern animation_type_2 *d_rainbow_road_unk3[];
+extern AnimationLimbVector d_rainbow_road_unk1[];
+extern Animation d_rainbow_road_unk2;
+extern Animation *d_rainbow_road_unk3[];
extern uintptr_t d_rainbow_road_unk4[];
extern u32 d_rainbow_road_unk5[];
@@ -39,51 +39,51 @@ extern Gfx *koopa_troopa_beach_dls1[];
extern Gfx *koopa_troopa_beach_dls2[];
extern u32 d_course_koopa_troopa_beach_unk_data1[];
extern s16 d_course_koopa_troopa_beach_unk_data2[];
-extern animation_type_3_triplet d_course_koopa_troopa_beach_unk_data3[];
-extern animation_type_2 d_course_koopa_troopa_beach_unk_data4;
+extern AnimationLimbVector d_course_koopa_troopa_beach_unk_data3[];
+extern Animation d_course_koopa_troopa_beach_unk_data4;
extern uintptr_t d_course_koopa_troopa_beach_unk4[];
-extern animation_type_2 *d_course_koopa_troopa_beach_unk_data5[];
+extern Animation *d_course_koopa_troopa_beach_unk_data5[];
extern u32 d_course_koopa_troopa_beach_unk_data6[];
extern s16 d_course_yoshi_valley_unk1[];
-extern animation_type_3_triplet d_course_yoshi_valley_unk2[];
-extern animation_type_2 d_course_yoshi_valley_unk3;
-extern animation_type_2 *d_course_yoshi_valley_unk4[];
+extern AnimationLimbVector d_course_yoshi_valley_unk2[];
+extern Animation d_course_yoshi_valley_unk3;
+extern Animation *d_course_yoshi_valley_unk4[];
extern uintptr_t d_course_yoshi_valley_unk5[];
extern u32 d_course_yoshi_valley_unk6[];
extern uintptr_t d_course_sherbet_land_unk_data1[];
extern s16 d_course_sherbet_land_unk_data2[];
-extern animation_type_3_triplet d_course_sherbet_land_unk_data3[];
-extern animation_type_2 d_course_sherbet_land_unk_data4;
+extern AnimationLimbVector d_course_sherbet_land_unk_data3[];
+extern Animation d_course_sherbet_land_unk_data4;
extern s16 d_course_sherbet_land_unk_data5[];
-extern animation_type_3_triplet d_course_sherbet_land_unk_data6[];
-extern animation_type_2 d_course_sherbet_land_unk_data7;
+extern AnimationLimbVector d_course_sherbet_land_unk_data6[];
+extern Animation d_course_sherbet_land_unk_data7;
extern s16 d_course_sherbet_land_unk_data8[];
-extern animation_type_3_triplet d_course_sherbet_land_unk_data9[];
-extern animation_type_2 d_course_sherbet_land_unk_data10;
-extern animation_type_2 *d_course_sherbet_land_unk_data11[];
+extern AnimationLimbVector d_course_sherbet_land_unk_data9[];
+extern Animation d_course_sherbet_land_unk_data10;
+extern Animation *d_course_sherbet_land_unk_data11[];
extern u32 d_course_sherbet_land_unk_data12[];
extern s16 d_rainbow_road_chomp_jaw_animation[];
-extern animation_type_3_triplet d_rainbow_road_unk1[];
-extern animation_type_2 d_rainbow_road_unk2;
-extern animation_type_2 *d_rainbow_road_unk3[];
+extern AnimationLimbVector d_rainbow_road_unk1[];
+extern Animation d_rainbow_road_unk2;
+extern Animation *d_rainbow_road_unk3[];
extern u32 d_rainbow_road_unk5[];
extern Gfx *koopa_troopa_beach_dls1[];
extern Gfx *koopa_troopa_beach_dls2[];
extern u32 d_course_koopa_troopa_beach_unk_data1[];
extern s16 d_course_koopa_troopa_beach_unk_data2[];
-extern animation_type_3_triplet d_course_koopa_troopa_beach_unk_data3[];
-extern animation_type_2 d_course_koopa_troopa_beach_unk_data4;
-extern animation_type_2 *d_course_koopa_troopa_beach_unk_data5[];
+extern AnimationLimbVector d_course_koopa_troopa_beach_unk_data3[];
+extern Animation d_course_koopa_troopa_beach_unk_data4;
+extern Animation *d_course_koopa_troopa_beach_unk_data5[];
extern u32 d_course_koopa_troopa_beach_unk_data6[];
extern s16 d_course_yoshi_valley_unk1[];
-extern animation_type_3_triplet d_course_yoshi_valley_unk2[];
-extern animation_type_2 d_course_yoshi_valley_unk3;
-extern animation_type_2 *d_course_yoshi_valley_unk4[];
+extern AnimationLimbVector d_course_yoshi_valley_unk2[];
+extern Animation d_course_yoshi_valley_unk3;
+extern Animation *d_course_yoshi_valley_unk4[];
extern u32 d_course_yoshi_valley_unk6[];
#endif // COURSE_OFFSETS_H
diff --git a/include/decode.h b/include/decode.h
index d8d644f26..f37cbedcd 100644
--- a/include/decode.h
+++ b/include/decode.h
@@ -1,7 +1,7 @@
#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_
-#include "common_structs.h"
+#include <common_structs.h>
// Unused mio0decode function.
void func_80040030(u8* arg0, u8* arg1);
diff --git a/include/defines.h b/include/defines.h
index 3a07955be..e18d6ac9c 100644
--- a/include/defines.h
+++ b/include/defines.h
@@ -76,8 +76,10 @@
#ifdef VERSION_EU
#define COURSE_TIMER_ITER 0.020041665999999999 // 1 / 50
+#define COURSE_TIMER_ITER_f 0.020041665999999999f // 1 / 50
#else
#define COURSE_TIMER_ITER 0.01666666 // 1 / 60
+#define COURSE_TIMER_ITER_f 0.01666666f // 1 / 60
#endif
#define V_BlANK_TIMER_ITER 0.01666666
@@ -109,10 +111,17 @@
#define FOUR_PLAYERS_SELECTED 4
#define SELECTED_PLAYER_DEFINES_TOTAL 5
-#define PLAYER_ONE 0
-#define PLAYER_TWO 1
-#define PLAYER_THREE 2
-#define PLAYER_FOUR 3
+enum PlayerId {
+ PLAYER_NONE = -1,
+ PLAYER_ONE = 0,
+ PLAYER_TWO = 1,
+ PLAYER_THREE = 2,
+ PLAYER_FOUR = 3,
+ PLAYER_FIVE = 4,
+ PLAYER_SIX = 5,
+ PLAYER_SEVEN = 6,
+ PLAYER_EIGHT = 7
+};
#define NUM_PLAYERS 8
diff --git a/include/objects.h b/include/objects.h
index 6a0a9b1ae..ec0f4ac4a 100644
--- a/include/objects.h
+++ b/include/objects.h
@@ -2,7 +2,7 @@
#define OBJECTS_H
#include "spline.h"
-#include "common_structs.h"
+#include <common_structs.h>
#define OBJECT_LIST_SIZE 0x226
#define SOME_OBJECT_INDEX_LIST_SIZE 32
diff --git a/include/save_data.h b/include/save_data.h
index 78495bba5..38d82c287 100644
--- a/include/save_data.h
+++ b/include/save_data.h
@@ -1,7 +1,7 @@
#ifndef SAVE_DATA_H
#define SAVE_DATA_H
-#include "common_structs.h"
+#include <common_structs.h>
typedef struct {
// 6 little endian 3-byte records.
diff --git a/include/spline.h b/include/spline.h
index 525faa6fa..a7f4d0c3b 100644
--- a/include/spline.h
+++ b/include/spline.h
@@ -1,7 +1,7 @@
#ifndef SPLINE_H
#define SPLINE_H
-#include "common_structs.h"
+#include <common_structs.h>
/*
These are some very good videos about splines/Bezier curves in general
diff --git a/include/vehicles.h b/include/vehicles.h
index 17e80587e..87f0f2a39 100644
--- a/include/vehicles.h
+++ b/include/vehicles.h
@@ -1,7 +1,7 @@
#ifndef VEHICLES_H
#define VEHICLES_H
-#include "common_structs.h"
+#include <common_structs.h>
#define NUM_1P_PASSENGER_CARS 4
#define NUM_2P_PASSENGER_CARS 1
diff --git a/include/waypoints.h b/include/waypoints.h
index bc5ef3237..9fc38dbd6 100644
--- a/include/waypoints.h
+++ b/include/waypoints.h
@@ -1,7 +1,7 @@
#ifndef WAYPOINTS_H
#define WAYPOINTS_H
-#include "common_structs.h"
+#include <common_structs.h>
typedef struct {
/* 0x00 */ s16 posX;
diff --git a/mk64.ld b/mk64.ld
index 3b56bd931..bb9a54ac6 100644
--- a/mk64.ld
+++ b/mk64.ld
@@ -49,7 +49,7 @@ SECTIONS
BUILD_DIR/src/code_800029B0.o(.text*);
BUILD_DIR/src/profiler.o(.text*);
BUILD_DIR/src/crash_screen.o(.text*);
- BUILD_DIR/src/code_80004740.o(.text*);
+ BUILD_DIR/src/animation.o(.text*);
BUILD_DIR/src/staff_ghosts.o(.text*);
BUILD_DIR/asm/unused_overflow_check.o(.text);
BUILD_DIR/src/code_80005FD0.jp.o(.text*);
@@ -267,7 +267,7 @@ SECTIONS
BUILD_DIR/src/os/osViData.o(.data*);
BUILD_DIR/src/os/_Litob.o(.data*);
BUILD_DIR/src/main.o(.rodata*);
- BUILD_DIR/src/code_80004740.o(.rodata*);
+ BUILD_DIR/src/animation.o(.rodata*);
BUILD_DIR/src/code_800029B0.o(.rodata*);
BUILD_DIR/src/code_80005FD0.jp.o(.rodata*);
BUILD_DIR/src/camera.o(.rodata*);
@@ -326,7 +326,7 @@ SECTIONS
BUILD_DIR/src/code_800029B0.o(.bss*);
BUILD_DIR/src/profiler.o(.bss*);
BUILD_DIR/src/crash_screen.o(.bss*);
- BUILD_DIR/src/code_80004740.o(.bss*);
+ BUILD_DIR/src/animation.o(.bss*);
BUILD_DIR/src/staff_ghosts.o(.bss*);
BUILD_DIR/src/code_80005FD0.jp.o(.bss*);
BUILD_DIR/src/camera.o(.bss*);
diff --git a/safe_gcc.mk b/safe_gcc.mk
index 0ced65167..00d271066 100644
--- a/safe_gcc.mk
+++ b/safe_gcc.mk
@@ -8,7 +8,7 @@ SAFE_C_FILES := \
build/us/src/effects.o \
build/us/src/code_80057C60_var.o \
build/us/src/code_800029B0.o \
- build/us/src/code_80004740.o \
+ build/us/src/animation.o \
build/us/src/player_controller.o \
build/us/src/profiler.o \
build/us/src/render_player.o \
diff --git a/src/animation.c b/src/animation.c
new file mode 100644
index 000000000..127c5ef02
--- /dev/null
+++ b/src/animation.c
@@ -0,0 +1,177 @@
+#include <libultraship.h>
+#include <macros.h>
+#include <mk64.h>
+#include "math_util.h"
+#include "animation.h"
+#include "memory.h"
+#include <main.h>
+#include <libultra/gbi.h>
+#include "code_80057C60.h"
+
+Vec3s sOriginalPosAnimation;
+s16 isNotTheFirst;
+s16 sMatrixShouldNotPop;
+s16 sMatrixStackSize;
+
+void convert_to_fixed_point_matrix_animation(Mtx *dest, Mat4 src) {
+#ifdef AVOID_UB
+ // Avoid type-casting which is technically UB by calling the equivalent
+ // guMtxF2L function. This helps little-endian systems, as well.
+ guMtxF2L(src, dest);
+#else
+ s32 asFixedPoint;
+ register s32 i;
+ register s16 *a3 = (s16 *) dest; // all integer parts stored in first 16 bytes
+ register s16 *t0 = (s16 *) dest + 16; // all fraction parts stored in last 16 bytes
+ register f32 *t1 = (f32 *) src;
+
+ for (i = 0; i < 16; i++) {
+ asFixedPoint = *t1++ * (1 << 16); //! float-to-integer conversion responsible for PU crashes
+ *a3++ = GET_HIGH_S16_OF_32(asFixedPoint); // integer part
+ *t0++ = GET_LOW_S16_OF_32(asFixedPoint); // fraction part
+ }
+#endif
+}
+
+void mtxf_translate_rotate2(Mat4 dest, Vec3f pos, Vec3s angle) {
+ register f32 sx = sins(angle[0]);
+ register f32 cx = coss(angle[0]);
+
+ register f32 sy = sins(angle[1]);
+ register f32 cy = coss(angle[1]);
+
+ register f32 sz = sins(angle[2]);
+ register f32 cz = coss(angle[2]);
+
+ dest[0][0] = cy * cz;
+ dest[0][1] = cy * sz;
+ dest[0][2] = -sy;
+ dest[0][3] = 0.0f;
+
+ dest[1][0] = sx * sy * cz - cx * sz;
+ dest[1][1] = sx * sy * sz + cx * cz;
+ dest[1][2] = sx * cy;
+ dest[1][3] = 0.0f;
+
+ dest[2][0] = cx * sy * cz + sx * sz;
+ dest[2][1] = cx * sy * sz - sx * cz;
+ dest[2][2] = cx * cy;
+ dest[2][3] = 0.0f;
+
+ dest[3][0] = pos[0];
+ dest[3][1] = pos[1];
+ dest[3][2] = pos[2];
+ dest[3][3] = 1.0f;
+}
+
+void render_limb_or_add_mtx(Armature *arg0, s16 *arg1, AnimationLimbVector arg2, s32 timeCycle) {
+ Vec3f pos;
+ Vec3s angle;
+ Mat4 modelMatrix;
+ s32 i;
+ s32 some_offset;
+ Gfx *model;
+ Gfx *virtualModel;
+ virtualModel = arg0->model;
+ if (isNotTheFirst == 0) {
+ for (i = 0; i < 3; i++) {
+ pos[i] = sOriginalPosAnimation[i] + arg0->pos[i];
+ }
+ isNotTheFirst += 1;
+ } else {
+ for (i = 0; i < 3; i++) {
+ pos[i] = arg0->pos[i];
+ }
+ }
+ for (i = 0; i < 3; i++) {
+ if (timeCycle < arg2[i].animation_length) {
+ some_offset = timeCycle;
+ } else {
+ some_offset = 0;
+ }
+ angle[i] = arg1[arg2[i].indexCycle + some_offset];
+ }
+
+ mtxf_translate_rotate2(modelMatrix, pos, angle);
+ convert_to_fixed_point_matrix_animation(&gGfxPool->mtxHud[gMatrixHudCount], modelMatrix);
+ sMatrixStackSize += 1;
+ gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
+ if (virtualModel != NULL) {
+ model = segmented_to_virtual(virtualModel);
+ gSPDisplayList(gDisplayListHead++, model);
+ }
+}
+
+void render_armature(Armature *animation, Animation *arg1, s16 timeCycle) {
+ UNUSED u32 *temp;
+ s16 *angle_array;
+ s32 some_offset;
+ AnimationLimbVector *animation_cycle_list;
+ s32 animation_type;
+ s32 someIndex;
+
+ angle_array = segmented_to_virtual(arg1->angle_array);
+ animation_cycle_list = segmented_to_virtual(arg1->animation_cycle_spec_vector);
+ sMatrixStackSize = 0;
+ isNotTheFirst = 0;
+ for (someIndex = 0; someIndex < 3; someIndex++) {
+ if (timeCycle < (*animation_cycle_list)[someIndex].animation_length) {
+ some_offset = timeCycle;
+ } else {
+ some_offset = 0;
+ }
+ sOriginalPosAnimation[someIndex] = angle_array[(*animation_cycle_list)[someIndex].indexCycle + some_offset];
+ }
+ animation_cycle_list++;
+ sMatrixShouldNotPop = 0;
+ do {
+ animation_type = animation->type;
+ switch (animation_type) { /* irregular */
+ case STOP_ANIMATION:
+ break;
+ case DISABLE_AUTOMATIC_POP_MATRIX:
+ sMatrixShouldNotPop = 1;
+ break;
+ case POP_MATRIX:
+ gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
+ sMatrixStackSize -= 1;
+ break;
+ case RENDER_MODEL_OR_ADD_POS:
+ if (sMatrixShouldNotPop == 0) {
+ gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
+ sMatrixStackSize -= 1;
+ }
+ render_limb_or_add_mtx(animation, angle_array, *animation_cycle_list, (s32) timeCycle);
+ sMatrixShouldNotPop = 0;
+ animation_cycle_list++;
+ break;
+ }
+ animation = (Armature *) ((uintptr_t *) animation + animation->size);
+ } while (animation_type != STOP_ANIMATION);
+}
+
+s16 render_animated_model(Armature *virtualArmature, Animation **virtualListAnimation, s16 animationIndex, s16 timeCycle) {
+ Armature *armature;
+ Animation *animation;
+ Animation **listAnimation;
+
+ armature = segmented_to_virtual(virtualArmature);
+ listAnimation = segmented_to_virtual(virtualListAnimation); // Convert the array's address
+ animation = segmented_to_virtual(listAnimation[animationIndex]); // Convert an array element's address
+ if (timeCycle >= animation->animation_length) {
+ timeCycle = 0;
+ }
+ render_armature(armature, animation, timeCycle);
+ timeCycle++;
+ if (timeCycle >= animation->animation_length) {
+ timeCycle = 0;
+ }
+ return timeCycle;
+}
+
+s16 get_animation_length(Animation **addr, s16 offset) {
+ Animation **item = segmented_to_virtual(addr);
+ Animation *temp = (Animation *) segmented_to_virtual((void *) item[offset]);
+
+ return temp->animation_length - 1;
+}
diff --git a/src/code_80004740.h b/src/animation.h
index 68d911ba6..b363dcf1c 100644
--- a/src/code_80004740.h
+++ b/src/animation.h
@@ -1,19 +1,19 @@
#ifndef CODE_80004740_H
#define CODE_80004740_H
-#include "common_structs.h"
+#include <common_structs.h>
/*
What I know about animation stuff so far
Its not clear to me exactly what animations even are in MK64, my speculation is that their some form of matrix manipulation sequence.
Presumably the "models" of the objects that are getting animated are a bunch of matrices and the animations somehow change them.
-code_80004740 appears to be responsible for the handling of animations.
+animation appears to be responsible for the handling of animations.
Animation seem to be reserved for objects, namely: seagulls in KTB, flags in YV, chain chomps in RR, and penguins in SL.
Each object has 2 pointers of interest, at offsets 0x70 and 0x74 (unk_070 and unk_074).
-These are passed to func_80004DFC, along with what appears to be an index and a timer.
-func_80004DFC(unk70, unk74, index, timer)
+These are passed to render_animated_model, along with what appears to be an index and a timer.
+render_animated_model(unk70, unk74, index, timer)
unk_070 points to what I will call a "Type 1" array.
I call it an array, but I don't think that's entirely accurate.
@@ -32,7 +32,7 @@ struct {
}
Again, note that types 1, 2, and 3 only have the "type" and "size" elements.
-They are handled in func_80004C30.
+They are handled in render_armature.
Each "type" indicates a different action to take while iterating over the array.
Type 1: Only used to modify Type 0's behaviour
Type 2: Pop a matrix
@@ -91,7 +91,7 @@ This is why I don't think referring to this as an "array" is really correct.
Iterating over this data not like iterating over a proper array at all.
I don't really understand the "thing" entries yet.
-They seem to be used in func_80004A1C to set some values in Vec3f which is then used to set some values in a Mat4.
+They seem to be used in render_limb_or_add_mtx to set some values in Vec3f which is then used to set some values in a Mat4.
This, I assume, is related to the matrix maniplation stuff that's used to actually accomplish the animation.
The unk_074 pointer points to a list of other pointers.
@@ -103,8 +103,8 @@ struct {
s32 always_zero_never_used;
s/u16 animation_length;
s/u16 has_value_but_never_used;
- s32 type_2_array_pointer;
- s32 type_3_array_pointer;
+ s32 angle_array;
+ s32 AnimationCycleSpecVector;
}
I will refer to these structs as Struct 2's.
@@ -115,15 +115,15 @@ Their use will be discussed later
Type 3 arrays appear to be arrays of pairs of s/u16 numbers that look like this struct:
struct {
- s/u16 some_limiter;
- s/u16 some_offset;
+ s/u16 animation_length;
+ s/u16 indexCycle;
};
Type 3 entires are interesting.
-They're used in func_80004C30 and func_80004A1C, and they're always used in triples
-The `timer` argument to func_80004DFC is compared to the `some_limiter` entry.
+They're used in render_armature and render_limb_or_add_mtx, and they're always used in triples
+The `timer` argument to render_animated_model is compared to the `animation_length` entry.
If it less than the limiter then its value it used elsewhere, otherwise 0 is used (more details below).
-The `some_offset` value is always used.
+The `indexCycle` value is always used.
Then, the 2 chosen values are used to select a value from the Type 2 array.
So, for example, if you have a Struct 2 like:
@@ -148,53 +148,70 @@ In practice the limiter value is always 1 or the animation length, meaning that
There's never a situation where you will choose the animation timer until it hits X and then swap to 0.
Its always one or the other, never swapping.
-The first triplet is used in func_80004C30 to access the Type 2 array and the values accessed is placed into D_80162D70.
-D_80162D70 is a Vec3s is then used to set the values of some Vec3f in func_80004A1C.
-All further triplets are used in func_80004A1C to collect Type 2 values to another Vec3s local to the function.
+The first triplet is used in render_armature to access the Type 2 array and the values accessed is placed into sOriginalPosAnimation.
+sOriginalPosAnimation is a Vec3s is then used to set the values of some Vec3f in render_limb_or_add_mtx.
+All further triplets are used in render_limb_or_add_mtx to collect Type 2 values to another Vec3s local to the function.
Both the local Vec3s and Vec3f are used to create a Mat4, which is then converted to a Mtx, which is then pushed into the matrix pool.
-The chosen values are then used to access the Type 2 array and the value accessed is placed into D_80162D70.
-D_80162D70 is a Vec3s that is used to set values in the some Vec3f that goes on to be used to modify the same Mat4 that the `thing` values are placed into.
+The chosen values are then used to access the Type 2 array and the value accessed is placed into sOriginalPosAnimation.
+sOriginalPosAnimation is a Vec3s that is used to set values in the some Vec3f that goes on to be used to modify the same Mat4 that the `thing` values are placed into.
*/
+#define SIMPLE_ANIMATION_INSTRUCTION(x) x, 0x00000002
+
+#define ANIMATION_DISABLE_AUTOMATIC_POP SIMPLE_ANIMATION_INSTRUCTION(DISABLE_AUTOMATIC_POP_MATRIX)
+#define ANIMATION_POP_MATRIX SIMPLE_ANIMATION_INSTRUCTION(POP_MATRIX)
+#define ANIMATION_STOP SIMPLE_ANIMATION_INSTRUCTION(STOP_ANIMATION)
+//! the pos is relative to the previous RENDER_MODEL_OR_ADD_POS if ANIMATION_DISABLE_AUTOMATIC_POP is used
+#define ANIMATION_RENDER_MODEL_AT(model, x, y, z) RENDER_MODEL_OR_ADD_POS, 0x00000007, 0x00000000, (u32) model, x, y, z
+//! use RENDER_MODEL_OR_ADD_POS
+#define ANIMATION_RENDER_MODEL(model) ANIMATION_RENDER_MODEL_AT(model, 0x00000000, 0x00000000, 0x00000000)
+//! use RENDER_MODEL_OR_ADD_POS
+#define ANIMATION_ADD_POS(x,y,z) ANIMATION_RENDER_MODEL_AT((u32)NULL, x, y, z)
+
+enum animation_type {
+ RENDER_MODEL_OR_ADD_POS,
+ DISABLE_AUTOMATIC_POP_MATRIX,
+ POP_MATRIX,
+ STOP_ANIMATION
+};
+
+/**
+ * @brief The armature is associated with an AnimationLimbVector which is equal to the number of RENDER_MODEL_OR_ADD_POS in the armature
+ */
typedef struct {
/* 0x00 */ s64 type;
/* 0x04 */ s64 size;
/* 0x08 */ s64 always_zero_never_used;
- /* 0x0C */ Gfx *optional_segmented_dl_address;
- /* 0x10 */ s64 thing[3];
-} animation_type_1;
+ /* 0x0C */ Gfx *model;
+ /* 0x10 */ s64 pos[3];
+} Armature;
typedef struct {
- /* 0x00 */ u16 some_limiter;
- /* 0x02 */ u16 some_offset;
-} animation_type_3;
+ /* 0x00 */ u16 animation_length;
+ /* 0x02 */ u16 indexCycle;
+} AnimationCycleSpec;
-typedef animation_type_3 animation_type_3_triplet[3];
+//! the first are the original position and other are animation specification for each "limb" who correspond to each RENDER_MODEL_OR_ADD_POS so ANIMATION_RENDER_MODEL and ANIMATION_ADD_POS
+typedef AnimationCycleSpec AnimationLimbVector[3];
typedef struct {
/* 0x00 */ s32 always_set_to_something_but_never_used;
/* 0x04 */ s32 always_zero_never_used;
/* 0x08 */ s16 animation_length;
/* 0x0A */ u16 has_value_but_never_used;
- /* 0x0C */ s16 *type_2_array_pointer;
- /* 0x10 */ animation_type_3_triplet *type_3_array_pointer;
-} animation_type_2;
-
-struct stru_80004EAC {
- s32 unk0;
- s32 unk4;
- s16 unk8;
-};
+ /* 0x0C */ s16 *angle_array;
+ /* 0x10 */ AnimationLimbVector *animation_cycle_spec_vector;
+} Animation;
/* Function Prototypes */
-void func_80004740(Mtx *dest, Mat4 src);
+void convert_to_fixed_point_matrix_animation(Mtx *dest, Mat4 src);
void mtxf_translate_rotate2(Mat4 dest, Vec3f b, Vec3s c);
-s16 func_80004EAC(void*, s16);
-void func_80004A1C(animation_type_1*, s16*, animation_type_3_triplet, s32);
-void func_80004C30(animation_type_1*, animation_type_2*, s16);
-s16 func_80004DFC(animation_type_1*, animation_type_2**, s16, s16);
+s16 get_animation_length(Animation **, s16);
+void render_limb_or_add_mtx(Armature*, s16*, AnimationLimbVector, s32);
+void render_armature(Armature*, Animation*, s16);
+s16 render_animated_model(Armature*, Animation**, s16, s16);
#endif
diff --git a/src/audio/data.c b/src/audio/data.c
index eac2a10ff..440b370d4 100644
--- a/src/audio/data.c
+++ b/src/audio/data.c
@@ -441,4 +441,4 @@ u16 D_803B7192; // unconfirmed
u32 gAudioRandom;
s32 gAudioErrorFlags;
u32 D_803B71A0[4]; // unconfirmed
-ALIGNED8 u8 D_803B71B0[4]; // unconfirmed
+ALIGNED8 u8 gAudioHeap[4]; // unconfirmed
diff --git a/src/audio/data.h b/src/audio/data.h
index 563352ce0..9f6ac88fc 100644
--- a/src/audio/data.h
+++ b/src/audio/data.h
@@ -57,7 +57,7 @@ extern u16 D_803B7192; // unconfirmed
extern u32 gAudioRandom;
extern s32 gAudioErrorFlags;
extern u32 D_803B71A0[]; // unconfirmed
-extern u8 D_803B71B0[]; // unconfirmed
+extern u8 gAudioHeap[]; // unconfirmed
extern struct ReverbSettingsEU sReverbSettings[];
extern struct AudioSessionSettingsEU gAudioSessionPresets[];
diff --git a/src/audio/heap.c b/src/audio/heap.c
index 1b04df782..e3cc92e33 100644
--- a/src/audio/heap.c
+++ b/src/audio/heap.c
@@ -195,8 +195,8 @@ void func_800B90E0(struct SoundAllocPool *pool) {
// inspired by sound_init_main_pools in sm64
void sound_init_main_pools(s32 arg0) {
- sound_alloc_pool_init(&gAudioInitPool, &D_803B71B0, arg0);
- sound_alloc_pool_init(&gAudioSessionPool, D_803B71B0 + arg0, gAudioHeapSize - arg0);
+ sound_alloc_pool_init(&gAudioInitPool, &gAudioHeap, arg0);
+ sound_alloc_pool_init(&gAudioSessionPool, gAudioHeap + arg0, gAudioHeapSize - arg0);
}
// inspired by session_pools_init in sm64
diff --git a/src/audio/load.c b/src/audio/load.c
index 08096203c..1b09fde17 100644
--- a/src/audio/load.c
+++ b/src/audio/load.c
@@ -787,10 +787,10 @@ void audio_init(void) {
gAudioLoadLock = 0;
// for (i = 0; i < gAudioHeapSize / 8; i++) {
- // ((u64 *) D_803B71B0)[i] = 0;
+ // ((u64 *) gAudioHeap)[i] = 0;
// }
- memset(D_803B71B0, 0, gAudioHeapSize);
+ memset(gAudioHeap, 0, gAudioHeapSize);
#ifdef TARGET_N64
// It seems boot.s doesn't clear the .bss area for audio, so do it here.
diff --git a/src/audio/port_eu.c b/src/audio/port_eu.c
index ceeaaddb4..38d229cbf 100644
--- a/src/audio/port_eu.c
+++ b/src/audio/port_eu.c
@@ -65,7 +65,7 @@ struct SPTask *create_next_audio_frame_task(void) {
OSMesg audioMesg; // <-- new
audioMesg.ptr = (void*)gAudioFrameCount; // <-- new
- //osSendMesg(D_800EA3A8, (OSMesg) gAudioFrameCount, 0); <-- original
+ //osSendMesg(D_800EA3A8, (OSMesg) gAudioFrameCount, OS_MESG_NOBLOCK); <-- original
osSendMesg(D_800EA3A8, audioMesg, OS_MESG_NOBLOCK); // <-- new
gAudioTaskIndex ^= 1;
diff --git a/src/buffers.h b/src/buffers.h
index f9b6a535e..d5addc6c5 100644
--- a/src/buffers.h
+++ b/src/buffers.h
@@ -3,7 +3,7 @@
#include <libultra/types.h>
#include <mk64.h>
-#include "common_structs.h"
+#include <common_structs.h>
/*
* This type could reasonably be called decodedTexture or similar
@@ -37,7 +37,7 @@ typedef union {
*/
typedef struct {
const char *unk_00; // Original 0x920 because compressed. But no longer compressed.
-} struct_D_802DFB80; // size = 0x1000
+} struct_gEncodedKartTexture; // size = 0x1000
typedef struct {
u16 red:5;
@@ -70,18 +70,18 @@ typedef struct {
extern u16 gRandomSeed16;
extern u8 randomSeedPadding[216];
extern union_D_802BFB80 D_802BFB80;
-extern struct_D_802DFB80 D_802DFB80[][2][8];
+extern struct_gEncodedKartTexture gEncodedKartTexture[][2][8];
/**
- * It would be nice to define D_802F1F80 as "struct_D_802F1F80 D_802F1F80[2][4][8]".
- * But due to register allocation issues in load_kart_palette / func_80026B4C
+ * It would be nice to define gPlayerPalettesList as "struct_D_802F1F80 gPlayerPalettesList[2][4][8]".
+ * But due to register allocation issues in load_kart_palette / update_wheel_palette
* we have to define it in a different manner to match those functions.
* If AVOID_UB is defined, the struct is properly defined with their correct pointers.
**/
#ifdef AVOID_UB
-extern struct_D_802F1F80 D_802F1F80[2][4][8];
+extern struct_D_802F1F80 gPlayerPalettesList[2][4][8];
#else
-extern u16 D_802F1F80[][4][0x100 * 8];
+extern u16 gPlayerPalettesList[][4][0x100 * 8];
#endif
extern u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT];
diff --git a/src/buffers/buffers.c b/src/buffers/buffers.c
index 30a9e700e..43af077c9 100644
--- a/src/buffers/buffers.c
+++ b/src/buffers/buffers.c
@@ -3,14 +3,17 @@
#include <mk64.h>
#include "buffers.h"
+/**
+ * @brief look like to be a buffer of decoded textures
+ */
ALIGNED8 union_D_802BFB80 D_802BFB80;
// [nothing][screen][player]
-ALIGNED8 struct_D_802DFB80 D_802DFB80[2][2][8];
+ALIGNED8 struct_gEncodedKartTexture gEncodedKartTexture[2][2][8];
#ifdef AVOID_UB
// [buffer][screen][player] Buffer might be two separate buffers or something?
-ALIGNED8 struct_D_802F1F80 D_802F1F80[2][4][8];
+ALIGNED8 struct_D_802F1F80 gPlayerPalettesList[2][4][8];
#else
-ALIGNED8 u16 D_802F1F80[2][4][0x100 * 8];
+ALIGNED8 u16 gPlayerPalettesList[2][4][0x100 * 8];
#endif
ALIGNED8 u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT];
diff --git a/src/buffers/memory_pool.c b/src/buffers/memory_pool.c
index ac222a43b..1caf4ba4e 100644
--- a/src/buffers/memory_pool.c
+++ b/src/buffers/memory_pool.c
@@ -7,5 +7,6 @@
/**
* Memory pool variable prevents code segments flowing into the memory pool
* for easier portability.
+ * @warning should not really be used.
*/
-u8 gMemoryPool[MEMORY_POOL_SIZE];
+u8 sMemoryPool[MEMORY_POOL_SIZE];
diff --git a/src/camera.h b/src/camera.h
index e9489b272..23e2807f8 100644
--- a/src/camera.h
+++ b/src/camera.h
@@ -2,7 +2,7 @@
#define CAMERA_H
#include <libultraship.h>
-#include "common_structs.h"
+#include <common_structs.h>
/**
* @todo put this define in types.h or similar.
diff --git a/src/code_800029B0.c b/src/code_800029B0.c
index dc5db613f..dd29d79b8 100644
--- a/src/code_800029B0.c
+++ b/src/code_800029B0.c
@@ -75,7 +75,7 @@ s16 gPlaceItemBoxes = 1;
// Technically a pointer to an array, but declaring it so creates regalloc issues.
CollisionTriangle *gCollisionMesh;
u16 *gCollisionIndices;
-u16 gCollisionMeshCount;
+u16 gCollisionMeshCount; // Number of entries in gCollisionMesh
u16 gNumCollisionTriangles;
u32 D_8015F58C;
diff --git a/src/code_80004740.c b/src/code_80004740.c
deleted file mode 100644
index b08164f6c..000000000
--- a/src/code_80004740.c
+++ /dev/null
@@ -1,177 +0,0 @@
-#include <libultraship.h>
-#include <macros.h>
-#include <mk64.h>
-#include "math_util.h"
-#include "code_80004740.h"
-#include "memory.h"
-#include <main.h>
-#include <libultra/gbi.h>
-#include "code_80057C60.h"
-
-Vec3s D_80162D70;
-s16 D_80162D76;
-s16 D_80162D78;
-s16 D_80162D7A;
-
-void func_80004740(Mtx *dest, Mat4 src) {
-#ifdef AVOID_UB
- // Avoid type-casting which is technically UB by calling the equivalent
- // guMtxF2L function. This helps little-endian systems, as well.
- guMtxF2L(src, dest);
-#else
- s32 asFixedPoint;
- register s32 i;
- register s16 *a3 = (s16 *) dest; // all integer parts stored in first 16 bytes
- register s16 *t0 = (s16 *) dest + 16; // all fraction parts stored in last 16 bytes
- register f32 *t1 = (f32 *) src;
-
- for (i = 0; i < 16; i++) {
- asFixedPoint = *t1++ * (1 << 16); //! float-to-integer conversion responsible for PU crashes
- *a3++ = GET_HIGH_S16_OF_32(asFixedPoint); // integer part
- *t0++ = GET_LOW_S16_OF_32(asFixedPoint); // fraction part
- }
-#endif
-}
-
-void mtxf_translate_rotate2(Mat4 dest, Vec3f b, Vec3s c) {
- register f32 sx = sins(c[0]);
- register f32 cx = coss(c[0]);
-
- register f32 sy = sins(c[1]);
- register f32 cy = coss(c[1]);
-
- register f32 sz = sins(c[2]);
- register f32 cz = coss(c[2]);
-
- dest[0][0] = cy * cz;
- dest[0][1] = cy * sz;
- dest[0][2] = -sy;
- dest[0][3] = 0.0f;
-
- dest[1][0] = sx * sy * cz - cx * sz;
- dest[1][1] = sx * sy * sz + cx * cz;
- dest[1][2] = sx * cy;
- dest[1][3] = 0.0f;
-
- dest[2][0] = cx * sy * cz + sx * sz;
- dest[2][1] = cx * sy * sz - sx * cz;
- dest[2][2] = cx * cy;
- dest[2][3] = 0.0f;
-
- dest[3][0] = b[0];
- dest[3][1] = b[1];
- dest[3][2] = b[2];
- dest[3][3] = 1.0f;
-}
-
-void func_80004A1C(animation_type_1 *arg0, s16 *arg1, animation_type_3_triplet arg2, s32 arg3) {
- Vec3f sp94;
- Vec3s sp8C;
- Mat4 sp4C;
- s32 someIndex;
- s32 some_offset;
- Gfx *some_dl;
- Gfx *some_segmented_dl;
- some_segmented_dl = arg0->optional_segmented_dl_address;
- if (D_80162D76 == 0) {
- for (someIndex = 0; someIndex < 3; someIndex++) {
- sp94[someIndex] = D_80162D70[someIndex] + arg0->thing[someIndex];
- }
- D_80162D76 += 1;
- } else {
- for (someIndex = 0; someIndex < 3; someIndex++) {
- sp94[someIndex] = arg0->thing[someIndex];
- }
- }
- for (someIndex = 0; someIndex < 3; someIndex++) {
- if (arg3 < arg2[someIndex].some_limiter) {
- some_offset = arg3;
- } else {
- some_offset = 0;
- }
- sp8C[someIndex] = arg1[arg2[someIndex].some_offset + some_offset];
- }
-
- mtxf_translate_rotate2(sp4C, sp94, sp8C);
- func_80004740(&gGfxPool->mtxHud[gMatrixHudCount], sp4C);
- D_80162D7A += 1;
- gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
- if (some_segmented_dl != NULL) {
- some_dl = segmented_to_virtual(some_segmented_dl);
- gSPDisplayList(gDisplayListHead++, some_dl);
- }
-}
-
-void func_80004C30(animation_type_1 *arg0, animation_type_2 *arg1, s16 timeCycle) {
- UNUSED u32 *temp;
- s16 *sp40;
- s32 some_offset;
- animation_type_3_triplet *temp_v0;
- s32 new_var;
- s32 someIndex;
-
- sp40 = segmented_to_virtual(arg1->type_2_array_pointer);
- temp_v0 = segmented_to_virtual(arg1->type_3_array_pointer);
- D_80162D7A = 0;
- D_80162D76 = 0;
- for (someIndex = 0; someIndex < 3; someIndex++) {
- if (timeCycle < (*temp_v0)[someIndex].some_limiter) {
- some_offset = timeCycle;
- } else {
- some_offset = 0;
- }
- D_80162D70[someIndex] = sp40[(*temp_v0)[someIndex].some_offset + some_offset];
- }
- temp_v0++;
- D_80162D78 = 0;
- do {
- new_var = arg0->type;
- switch (new_var) { /* irregular */
- case 3:
- break;
- case 1:
- D_80162D78 = 1;
- break;
- case 2:
- gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
- D_80162D7A -= 1;
- break;
- case 0:
- if (D_80162D78 == 0) {
- gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
- D_80162D7A -= 1;
- }
- func_80004A1C(arg0, sp40, *temp_v0, (s32) timeCycle);
- D_80162D78 = 0;
- temp_v0++;
- break;
- }
- arg0 = (animation_type_1 *) ((uintptr_t *) arg0 + arg0->size);
- } while (new_var != 3);
-}
-
-s16 func_80004DFC(animation_type_1 *arg0, animation_type_2 **arg1, s16 arg2, s16 timeCycle) {
- animation_type_1 *sp24;
- animation_type_2 *temp_v0;
- animation_type_2 **sp20;
-
- sp24 = segmented_to_virtual(arg0);
- sp20 = segmented_to_virtual(arg1); // Convert the array's address
- temp_v0 = segmented_to_virtual(sp20[arg2]); // Convert an array element's address
- if (timeCycle >= temp_v0->animation_length) {
- timeCycle = 0;
- }
- func_80004C30(sp24, temp_v0, timeCycle);
- timeCycle++;
- if (timeCycle >= temp_v0->animation_length) {
- timeCycle = 0;
- }
- return timeCycle;
-}
-
-s16 func_80004EAC(void *addr, s16 offset) {
- uintptr_t *item = segmented_to_virtual(addr);
- struct stru_80004EAC *temp = (struct stru_80004EAC *) segmented_to_virtual((void *) item[offset]);
-
- return temp->unk8 - 1;
-}
diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c
index a9ddf4917..b06034bf7 100644
--- a/src/code_80005FD0.c
+++ b/src/code_80005FD0.c
@@ -24,7 +24,7 @@
#include "bomb_kart.h"
#include "courses/all_course_data.h"
#include <assets/common_data.h>
-#include "common_structs.h"
+#include <common_structs.h>
#include "main.h"
#include "menus.h"
#include "code_80091750.h"
@@ -1412,7 +1412,7 @@ void func_800090F0(s32 playerId, Player *player) {
f32 func_80009258(UNUSED s32 playerId, f32 arg1, f32 arg2) {
f32 temp_f2 = D_8016344C - arg2;
f32 temp_f12 = arg1 - D_8016344C;
- return gCourseTimer - ( (COURSE_TIMER_ITER * temp_f2) / (temp_f2 + temp_f12) );
+ return gCourseTimer - ( (COURSE_TIMER_ITER_f * temp_f2) / (temp_f2 + temp_f12) );
}
#ifdef NON_MATCHING
diff --git a/src/code_8003DC40.c b/src/code_8003DC40.c
index d4e117b91..4c6125339 100644
--- a/src/code_8003DC40.c
+++ b/src/code_8003DC40.c
@@ -2,7 +2,7 @@
#include <macros.h>
#include <mk64.h>
#include "math_util.h"
-#include "common_structs.h"
+#include <common_structs.h>
#include "player_controller.h"
#include "effects.h"
#include "code_8003DC40.h"
diff --git a/src/code_8003DC40.h b/src/code_8003DC40.h
index ad009c61d..1f402bda6 100644
--- a/src/code_8003DC40.h
+++ b/src/code_8003DC40.h
@@ -1,7 +1,7 @@
#ifndef CODE_8003DC40_H
#define CODE_8003DC40_H
-#include "common_structs.h"
+#include <common_structs.h>
/* Function Prototypes */
diff --git a/src/code_80057C60.c b/src/code_80057C60.c
index cb8649fc2..86da985ae 100644
--- a/src/code_80057C60.c
+++ b/src/code_80057C60.c
@@ -6287,27 +6287,27 @@ void func_8006D194(Player *player, s8 arg1, s8 arg2) {
}
}
-void func_8006D474(Player *player, s8 arg1, s8 arg2) {
+void func_8006D474(Player *player, s8 playerId, s8 screenId) {
s16 var_s2;
- if ((player->unk_002 & (8 << (arg2 * 4))) == (8 << (arg2 * 4))) {
+ if ((player->unk_002 & (8 << (screenId * 4))) == (8 << (screenId * 4))) {
for (var_s2 = 0; var_s2 < 10; var_s2++) {
switch (player->unk_258[var_s2].unk_012) {
case 1:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- if (arg2 == arg1) {
- func_8006538C(player, arg1, var_s2, arg2);
+ if (screenId == playerId) {
+ func_8006538C(player, playerId, var_s2, screenId);
}
} else {
- func_8006538C(player, arg1, var_s2, arg2);
+ func_8006538C(player, playerId, var_s2, screenId);
}
break;
case 6:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- if (arg2 == arg1) {
- func_80066BAC(player, arg1, var_s2, arg2);
+ if (screenId == playerId) {
+ func_80066BAC(player, playerId, var_s2, screenId);
}
- } else if (arg2 == arg1) {
- func_80066BAC(player, arg1, var_s2, arg2);
+ } else if (screenId == playerId) {
+ func_80066BAC(player, playerId, var_s2, screenId);
}
break;
}
@@ -6315,69 +6315,69 @@ void func_8006D474(Player *player, s8 arg1, s8 arg2) {
case 1:
case 9:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_800691B8(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_800691B8(player, arg1, var_s2, arg2);
+ func_800691B8(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_800691B8(player, playerId, var_s2, screenId);
}
break;
case 2:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_800696CC(player, arg1, var_s2, arg2, player->unk_258[var_s2 + 30].unk_00C);
- } else if (arg2 == arg1) {
- func_800696CC(player, arg1, var_s2, arg2, player->unk_258[var_s2 + 30].unk_00C);
+ func_800696CC(player, playerId, var_s2, screenId, player->unk_258[var_s2 + 30].unk_00C);
+ } else if (screenId == playerId) {
+ func_800696CC(player, playerId, var_s2, screenId, player->unk_258[var_s2 + 30].unk_00C);
}
break;
case 3:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_80067280(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_80067280(player, (s32) arg1, var_s2, arg2);
+ func_80067280(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_80067280(player, (s32) playerId, var_s2, screenId);
}
break;
case 4:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_80069444(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_80069444(player, arg1, var_s2, arg2);
+ func_80069444(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_80069444(player, playerId, var_s2, screenId);
}
break;
case 5:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_80069938(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_80069938(player, arg1, var_s2, arg2);
+ func_80069938(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_80069938(player, playerId, var_s2, screenId);
}
break;
case 6:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_80069BA8(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_80069BA8(player, arg1, var_s2, arg2);
+ func_80069BA8(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_80069BA8(player, playerId, var_s2, screenId);
}
break;
case 7:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_80069DB8(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_80069DB8(player, arg1, var_s2, arg2);
+ func_80069DB8(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_80069DB8(player, playerId, var_s2, screenId);
}
break;
case 8:
if (gActiveScreenMode == SCREEN_MODE_1P) {
- func_80067604(player, arg1, var_s2, arg2);
- } else if (arg2 == arg1) {
- func_80067604(player, arg1, var_s2, arg2);
+ func_80067604(player, playerId, var_s2, screenId);
+ } else if (screenId == playerId) {
+ func_80067604(player, playerId, var_s2, screenId);
}
break;
}
switch (player->unk_258[var_s2 + 10].unk_012) {
case 1:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- if (arg2 == arg1) {
- func_80065AB0(player, arg1, var_s2, arg2);
+ if (screenId == playerId) {
+ func_80065AB0(player, playerId, var_s2, screenId);
}
} else {
- func_80065AB0(player, arg1, var_s2, arg2);
+ func_80065AB0(player, playerId, var_s2, screenId);
}
break;
case 2:
@@ -6385,36 +6385,36 @@ void func_8006D474(Player *player, s8 arg1, s8 arg2) {
case 4:
case 5:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- if (arg2 == arg1) {
- func_80065F0C(player, arg1, var_s2, arg2);
+ if (screenId == playerId) {
+ func_80065F0C(player, playerId, var_s2, screenId);
}
} else {
- func_80065F0C(player, arg1, var_s2, arg2);
+ func_80065F0C(player, playerId, var_s2, screenId);
}
break;
case 9:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- if (arg2 == arg1) {
- func_800664E0(player, (s32) arg1, var_s2, arg2);
+ if (screenId == playerId) {
+ func_800664E0(player, (s32) playerId, var_s2, screenId);
}
} else {
- func_800664E0(player, (s32) arg1, var_s2, arg2);
+ func_800664E0(player, (s32) playerId, var_s2, screenId);
}
break;
case 11:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- if (arg2 == arg1) {
- func_8006A01C(player, arg1, var_s2, arg2);
+ if (screenId == playerId) {
+ func_8006A01C(player, playerId, var_s2, screenId);
}
- } else if (arg2 == arg1) {
- func_8006A01C(player, arg1, var_s2, arg2);
+ } else if (screenId == playerId) {
+ func_8006A01C(player, playerId, var_s2, screenId);
}
break;
}
}
}
- if ((gModeSelection == BATTLE) && (player->unk_002 & (2 << (arg2 * 4)))) {
- func_8006BA94(player, arg1, arg2);
+ if ((gModeSelection == BATTLE) && (player->unk_002 & (2 << (screenId * 4)))) {
+ func_8006BA94(player, playerId, screenId);
}
}
@@ -6594,20 +6594,20 @@ void func_8006E420(Player* player, s8 arg1, s8 arg2) {
}
}
-void func_8006E5AC(Player* player, s8 arg1, s8 arg2) {
+void render_kart_particle_on_screen_one(Player* player, s8 playerId, s8 screenId) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
- if (arg1 == arg2) {
- func_8006D474(player, arg1, arg2);
+ if (playerId == screenId) {
+ func_8006D474(player, playerId, screenId);
}
} else {
- func_8006D474(player, arg1, arg2);
+ func_8006D474(player, playerId, screenId);
}
- func_8006DC54(player, arg1, arg2);
+ func_8006DC54(player, playerId, screenId);
}
}
-void func_8006E634(Player* player, s8 arg1, s8 arg2) {
+void render_kart_particle_on_screen_two(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
@@ -6620,7 +6620,7 @@ void func_8006E634(Player* player, s8 arg1, s8 arg2) {
}
}
-void func_8006E6BC(Player* player, s8 arg1, s8 arg2) {
+void render_kart_particle_on_screen_three(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
@@ -6633,7 +6633,7 @@ void func_8006E6BC(Player* player, s8 arg1, s8 arg2) {
}
}
-void func_8006E744(Player* player, s8 arg1, s8 arg2) {
+void render_kart_particle_on_screen_four(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
diff --git a/src/code_80057C60.h b/src/code_80057C60.h
index cb027ec06..2b76314cd 100644
--- a/src/code_80057C60.h
+++ b/src/code_80057C60.h
@@ -1,7 +1,7 @@
#ifndef CODE_80057C60_H
#define CODE_80057C60_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "objects.h"
#include "camera.h"
@@ -245,10 +245,10 @@ void func_8006DD3C(Player*, s8, s8);
void func_8006E058(void);
void func_8006E420(Player*, s8, s8);
-void func_8006E5AC(Player*, s8, s8);
-void func_8006E634(Player*, s8, s8);
-void func_8006E6BC(Player*, s8, s8);
-void func_8006E744(Player*, s8, s8);
+void render_kart_particle_on_screen_one(Player*, s8, s8);
+void render_kart_particle_on_screen_two(Player*, s8, s8);
+void render_kart_particle_on_screen_three(Player*, s8, s8);
+void render_kart_particle_on_screen_four(Player*, s8, s8);
void func_8006E7CC(Player*, s8, s8);
void func_8006E848(Player*, s8, s8);
void func_8006E8C4(Player*, s8, s8);
diff --git a/src/code_8006E9C0.h b/src/code_8006E9C0.h
index 175cf7792..9ebee2484 100644
--- a/src/code_8006E9C0.h
+++ b/src/code_8006E9C0.h
@@ -1,7 +1,7 @@
#ifndef CODE_8006E9C0_H
#define CODE_8006E9C0_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "update_objects.h"
void init_hud(void);
diff --git a/src/code_80086E70.h b/src/code_80086E70.h
index 03a1a6eaa..25d1a2e66 100644
--- a/src/code_80086E70.h
+++ b/src/code_80086E70.h
@@ -1,7 +1,7 @@
#ifndef CODE_80086E70_H
#define CODE_80086E70_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "camera.h"
#include "objects.h"
diff --git a/src/code_80091750.c b/src/code_80091750.c
index 843da50f2..41c3b3064 100644
--- a/src/code_80091750.c
+++ b/src/code_80091750.c
@@ -70,7 +70,8 @@ struct_8018E768_entry D_8018E768[D_8018E768_SIZE];
s32 gCycleFlashMenu;
s8 D_8018E7AC[5];
u32 D_8018E7B8[5];
-u32 D_8018E7D0[5];
+u32 D_8018E7D0[4];
+s32 D_8018E7E0;
struct UnkStruct_8018E7E8 D_8018E7E8[D_8018E7E8_SIZE];
struct UnkStruct_8018E7E8 D_8018E810[D_8018E810_SIZE];
s8 D_8018E838[4]; // Import to C was required for matching.
diff --git a/src/code_80091750.h b/src/code_80091750.h
index d5632677a..9b279f4c5 100644
--- a/src/code_80091750.h
+++ b/src/code_80091750.h
@@ -1,7 +1,7 @@
#ifndef CODE_80091750_H
#define CODE_80091750_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "textures.h"
#include "main.h"
diff --git a/src/code_800AF9B0.h b/src/code_800AF9B0.h
index 0bd894550..94a00493d 100644
--- a/src/code_800AF9B0.h
+++ b/src/code_800AF9B0.h
@@ -1,7 +1,7 @@
#ifndef CODE_800AF9B0_H
#define CODE_800AF9B0_H
-#include "common_structs.h"
+#include <common_structs.h>
/* Function Prototypes */
void func_800AF9B0(void);
diff --git a/src/data/path_spawn_metadata.h b/src/data/path_spawn_metadata.h
index 2ffe6cc32..4345d8519 100644
--- a/src/data/path_spawn_metadata.h
+++ b/src/data/path_spawn_metadata.h
@@ -2,7 +2,7 @@
#define PATH_SPAWN_METADATA_H
#include "waypoints.h"
-#include "common_structs.h"
+#include <common_structs.h>
#include <assets/common_data.h>
#include "include/bomb_kart.h"
diff --git a/src/debug/all_variables.h b/src/debug/all_variables.h
index 73b15e69d..dd1bd4d92 100644
--- a/src/debug/all_variables.h
+++ b/src/debug/all_variables.h
@@ -11,7 +11,7 @@
#include <camera_junk.h>
#include <ceremony_and_credits.h>
#include <code_800029B0.h>
-#include <code_80004740.h>
+#include <animation.h>
#include <code_80005FD0.h>
#include <render_player.h>
#include <player_controller.h>
diff --git a/src/effects.h b/src/effects.h
index 0210b0c22..2533daede 100644
--- a/src/effects.h
+++ b/src/effects.h
@@ -1,7 +1,7 @@
#ifndef EFFECTS_H
#define EFFECTS_H
-#include "common_structs.h"
+#include <common_structs.h>
/* Function Prototypes */
diff --git a/src/ending/ceremony_and_credits.h b/src/ending/ceremony_and_credits.h
index 3121c98f1..475a5278b 100644
--- a/src/ending/ceremony_and_credits.h
+++ b/src/ending/ceremony_and_credits.h
@@ -1,7 +1,7 @@
#ifndef CEREMONY_AND_CREDITS_H
#define CEREMONY_AND_CREDITS_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "camera.h"
struct struct_80283431 {
diff --git a/src/ending/code_80280000.h b/src/ending/code_80280000.h
index dd71642d1..c9cdbb81e 100644
--- a/src/ending/code_80280000.h
+++ b/src/ending/code_80280000.h
@@ -1,7 +1,7 @@
#ifndef CODE_80280000_H
#define CODE_80280000_H
-#include "common_structs.h"
+#include <common_structs.h>
/* Function Prototypes */
diff --git a/src/kart_dma.c b/src/kart_dma.c
index cfd88148b..b0f79bd98 100644
--- a/src/kart_dma.c
+++ b/src/kart_dma.c
@@ -2,7 +2,7 @@
#include <macros.h>
#include "main.h"
#include "buffers.h"
-#include "common_structs.h"
+#include <common_structs.h>
#include "kart_dma.h"
#include "defines.h"
#include <assets/mario_kart.h>
@@ -1706,140 +1706,167 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
s32 temp = player->effects;
if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) {
if (player->animFrameSelector[screenId] != 0) {
- osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL, OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
- // )],
- // &D_802DFB80[arg4][arg3][playerId],
- // D_800DDEB0[player->characterId],
- // &gDmaMesgQueue
- // );
- //printf("T1 kart %s\n", texture);
- D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ osInvalDCache(&gEncodedKartTexture[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL, OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
+ )],
+ &gEncodedKartTexture[zero][screenId2][playerId],
+ D_800DDEB0[player->characterId],
+ &gDmaMesgQueue
+ );
+
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ gEncodedKartTexture[zero][screenId2][playerId].unk_00 = gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
+ #endif
} else {
- osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
- // )],
- // &D_802DFB80[arg4][arg3][playerId],
- // D_800DDEB0[player->characterId],
- // &gDmaMesgQueue
- // );
- D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ osInvalDCache(&gEncodedKartTexture[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
+ )],
+ &gEncodedKartTexture[zero][screenId2][playerId],
+ D_800DDEB0[player->characterId],
+ &gDmaMesgQueue
+ );
+
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ gEncodedKartTexture[zero][screenId2][playerId].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
+ #endif
}
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) {
- osInvalDCache(&D_802DFB80[zero][screenId2][playerId], 0x780U);
+ osInvalDCache(&gEncodedKartTexture[zero][screenId2][playerId], 0x780U);
// player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number.
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]
- // )],
- // &D_802DFB80[arg4][arg3][playerId],
- // 0x900,
- // &gDmaMesgQueue
- // );
- D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]
+ )],
+ &gEncodedKartTexture[zero][screenId2][playerId],
+ 0x900,
+ &gDmaMesgQueue
+ );
+
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ gEncodedKartTexture[zero][screenId2][playerId].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
+ #endif
} else {
- osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
- // )],
- // &D_802DFB80[arg4][arg3][playerId],
- // D_800DDEB0[player->characterId],
- // &gDmaMesgQueue
- // );
- D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ osInvalDCache(&gEncodedKartTexture[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
+ )],
+ &gEncodedKartTexture[zero][screenId2][playerId],
+ D_800DDEB0[player->characterId],
+ &gDmaMesgQueue
+ );
+
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ gEncodedKartTexture[zero][screenId2][playerId].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
+ #endif
}
}
-void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) {
+void load_kart_texture_non_blocking(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
s32 temp = player->effects;
if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0))
{
if (player->animFrameSelector[arg2] != 0) {
- osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
- // )],
- // &D_802DFB80[arg4][arg3][arg1],
- // D_800DDEB0[player->characterId],
- // &gDmaMesgQueue
- // );
- D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
+ osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
+ )],
+ &gEncodedKartTexture[arg4][arg3][arg1],
+ D_800DDEB0[player->characterId],
+ &gDmaMesgQueue
+ );
+ #else
+ gEncodedKartTexture[arg4][arg3][arg1].unk_00 = gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
+ #endif
} else {
- osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
- // )],
- // &D_802DFB80[arg4][arg3][arg1],
- // D_800DDEB0[player->characterId],
- // &gDmaMesgQueue
- // );
- D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
+ osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
+ )],
+ &gEncodedKartTexture[arg4][arg3][arg1],
+ D_800DDEB0[player->characterId],
+ &gDmaMesgQueue
+ );
+ #else
+ gEncodedKartTexture[arg4][arg3][arg1].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
+ #endif
}
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) ||
((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000))
{
- osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780);
+ osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], 0x780);
// player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number.
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]
- // )],
- // &D_802DFB80[arg4][arg3][arg1],
- // 0x900,
- // &gDmaMesgQueue
- // );
- D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]
+ )],
+ &gEncodedKartTexture[arg4][arg3][arg1],
+ 0x900,
+ &gDmaMesgQueue
+ );
+ #else
+ gEncodedKartTexture[arg4][arg3][arg1].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
+ #endif
} else {
- osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
- // )],
- // &D_802DFB80[arg4][arg3][arg1],
- // D_800DDEB0[player->characterId],
- // &gDmaMesgQueue
- // );
- D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
+ osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
+ )],
+ &gEncodedKartTexture[arg4][arg3][arg1],
+ D_800DDEB0[player->characterId],
+ &gDmaMesgQueue
+ );
+ #else
+ gEncodedKartTexture[arg4][arg3][arg1].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
+ #endif
}
}
@@ -1847,93 +1874,107 @@ void load_kart_palette(Player *player, s8 playerId, s8 screenId, s8 buffer) {
u8 *asset;
size_t size;
#ifdef AVOID_UB
- struct_D_802F1F80 *temp_s0 = &D_802F1F80[buffer][screenId][playerId];
+ struct_D_802F1F80 *temp_s0 = &gPlayerPalettesList[buffer][screenId][playerId];
#else
- struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[buffer][screenId][playerId * 0x100];
+ struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &gPlayerPalettesList[buffer][screenId][playerId * 0x100];
#endif
switch(gActiveScreenMode) {
case SCREEN_MODE_1P:
case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL:
case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL:
osInvalDCache(temp_s0, sizeof(struct_D_802F1F80));
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartPalettes[player->characterId]
- // )],
- // temp_s0,
- // sizeof(struct_D_802F1F80),
- // &gDmaMesgQueue
- // );
-
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartPalettes[player->characterId]
+ )],
+ temp_s0,
+ sizeof(struct_D_802F1F80),
+ &gDmaMesgQueue
+ );
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
size = ResourceGetTexSizeByName(gKartPalettes[player->characterId]);
asset = (u8 *) LOAD_ASSET(gKartPalettes[player->characterId]);
- memcpy(&D_802F1F80[buffer][screenId][playerId], asset, size);
+ memcpy(&gPlayerPalettesList[buffer][screenId][playerId], asset, size);
+ #endif
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
break;
case SCREEN_MODE_3P_4P_SPLITSCREEN: // Code identical to above
osInvalDCache(temp_s0, sizeof(struct_D_802F1F80));
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
- // gKartPalettes[player->characterId]
- // )],
- // temp_s0,
- // sizeof(struct_D_802F1F80),
- // &gDmaMesgQueue
- // );
-
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
+ gKartPalettes[player->characterId]
+ )],
+ temp_s0,
+ sizeof(struct_D_802F1F80),
+ &gDmaMesgQueue
+ );
+
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
size = ResourceGetTexSizeByName(gKartPalettes[player->characterId]);
asset = (u8 *) LOAD_ASSET(gKartPalettes[player->characterId]);
- memcpy(&D_802F1F80[buffer][screenId][playerId], asset, size);
+ memcpy(&gPlayerPalettesList[buffer][screenId][playerId], asset, size);
+ #endif
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
break;
}
}
-void func_80027BDC(UNUSED Player *player, u8 *arg1, void *vAddr, u16 size) {
+void load_player_data(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) {
osInvalDCache(vAddr, size);
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)],
- // vAddr,
- // size,
- // &gDmaMesgQueue
- // );
-
- // u8 *asset = (u8 *) LOAD_ASSET(arg1);
- // size_t textureSize = ResourceGetTexSizeByName(asset);
- // memcpy(vAddr, asset, textureSize);
-
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)],
+ vAddr,
+ size,
+ &gDmaMesgQueue
+ );
+
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #endif
}
-void func_80027C74(UNUSED Player *player, const char *texture, void *vAddr, u16 size) {
- //osInvalDCache(vAddr, size);
-
- // osPiStartDma(
- // &gDmaIoMesg,
- // OS_MESG_PRI_NORMAL,
- // OS_READ,
- // (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)],
- // vAddr,
- // size,
- // &gDmaMesgQueue
- // );
+/**
+ * @brief read data from ROM and write it to the given virtual address
+ *
+ * @param player Player struct
+ * @param arg1 ROM offset
+ * @param vAddr Virtual address
+ * @param size Size of data to read
+ */
+void load_player_data_non_blocking(UNUSED Player *player, const char *texture, void *vAddr, u16 size) {
+ osInvalDCache(vAddr, size);
+
+ #ifdef TARGET_N64
+ osPiStartDma(
+ &gDmaIoMesg,
+ OS_MESG_PRI_NORMAL,
+ OS_READ,
+ (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)],
+ vAddr,
+ size,
+ &gDmaMesgQueue
+ );
+ #else
u16 *tex = (u16 *) LOAD_ASSET(texture);
//printf("wheeltex: %s\n",texture);
size_t textureSize = ResourceGetTexSizeByName(texture);
//vAddr = texture;
memcpy(vAddr, tex, size);
+ #endif
}
diff --git a/src/kart_dma.h b/src/kart_dma.h
index 7bef3306a..97d486afa 100644
--- a/src/kart_dma.h
+++ b/src/kart_dma.h
@@ -2,15 +2,15 @@
#define KART_DMA_H
#include "macros.h"
-#include "common_structs.h"
+#include <common_structs.h>
/* Function Prototypes */
void load_kart_texture(Player*, s8, s8, s8, s8);
-void func_80027560(Player*, s8, s8, s8, s8, size_t);
+void load_kart_texture_non_blocking(Player*, s8, s8, s8, s8);
void load_kart_palette(Player*, s8, s8, s8);
-void func_80027BDC(Player*, u8*, void*, u16);
-void func_80027C74(Player*, const char *, void*, u16);
+void load_player_data(Player*, s32, void*, u16);
+void load_player_data_non_blocking(Player*, const char *, void*, u16);
/* This is where I'd put my static data, if I had any */
diff --git a/src/main.c b/src/main.c
index 667887247..7274e4a67 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1210,7 +1210,8 @@ void thread5_game_loop(void) {
}
void thread5_iteration(void){
- // func_800CB2C4();
+ // while(true) {
+ // func_800CB2C4();
if (GfxDebuggerIsDebugging()) {
Graphics_PushFrame(gGfxPool->gfxPool);
diff --git a/src/menus.c b/src/menus.c
index b6720cdff..9604387fe 100644
--- a/src/menus.c
+++ b/src/menus.c
@@ -1519,7 +1519,7 @@ void player_select_menu_act(struct Controller *controller, u16 arg1) {
btnAndStick = (controller->buttonPressed) | (controller->stickPressed);
if (!gEnableDebugMode && btnAndStick & CONT_START) {
- btnAndStick |= CONT_A;
+ btnAndStick |= A_BUTTON;
}
if (!func_800B4520()) {
@@ -1528,14 +1528,14 @@ void player_select_menu_act(struct Controller *controller, u16 arg1) {
{
saved_selection = gCharacterGridSelections[arg1];
if (saved_selection == 0) {
- if (btnAndStick & CONT_B) {
+ if (btnAndStick & B_BUTTON) {
func_8009E208();
play_sound2(0x49008002);
}
return;
}
// L800B3630
- if (btnAndStick & CONT_B) {
+ if (btnAndStick & B_BUTTON) {
if (D_8018EDE8[arg1]) {
D_8018EDE8[arg1] = false;
play_sound2(SOUND_MENU_GO_BACK);
diff --git a/src/menus.h b/src/menus.h
index e789caf7b..8b766ffa9 100644
--- a/src/menus.h
+++ b/src/menus.h
@@ -1,7 +1,7 @@
#ifndef MENUS_H
#define MENUS_H
-#include "common_structs.h"
+#include <common_structs.h>
#include <defines.h>
// D_8018EDEC is position on options screen?
diff --git a/src/os/epidma.c b/src/os/epidma.c
index 3aa76f17a..fb9e36393 100644
--- a/src/os/epidma.c
+++ b/src/os/epidma.c
@@ -1,6 +1,6 @@
#ifdef VERSION_SH
-#include "PR/os_internal.h"
+#include <PR/os_internal.h>
#include "piint.h"
s32 osEPiStartDma(OSPiHandle *pihandle, OSIoMesg *mb, s32 direction) {
diff --git a/src/os/leointerrupt.c b/src/os/leointerrupt.c
index db221dba9..1bc26a1a9 100644
--- a/src/os/leointerrupt.c
+++ b/src/os/leointerrupt.c
@@ -1,5 +1,5 @@
#include "libultra_internal.h"
-#include "PR/rcp.h"
+#include <PR/rcp.h>
#include "bstring.h"
#include "piint.h"
#include "osint.h"
diff --git a/src/os/osCartRomInit.c b/src/os/osCartRomInit.c
index 389e69ea0..30af8aab6 100644
--- a/src/os/osCartRomInit.c
+++ b/src/os/osCartRomInit.c
@@ -1,10 +1,10 @@
#include "libultra_internal.h"
-#include "PR/os_vi.h"
-#include "PR/os_internal.h"
-#include "PR/R4300.h"
-#include "PR/rcp.h"
-#include "PR/os_pi.h"
+#include <PR/os_vi.h>
+#include <PR/os_internal.h>
+#include <PR/R4300.h>
+#include <PR/rcp.h>
+#include <PR/os_pi.h>
#include <libultraship.h>
OSPiHandle CartRomHandle;
diff --git a/src/os/osEPiRawStartDma.c b/src/os/osEPiRawStartDma.c
index 31d9fd37c..2c444d176 100644
--- a/src/os/osEPiRawStartDma.c
+++ b/src/os/osEPiRawStartDma.c
@@ -1,7 +1,7 @@
#include "libultra_internal.h"
#include "hardware.h"
#include "new_func.h"
-#include "PR/R4300.h"
+#include <PR/R4300.h>
//! @todo This define is from piint.h, but including that causes problems...
#define UPDATE_REG(reg, var) \
if (cHandle->var != pihandle->var) \
diff --git a/src/os/osPfsIsPlug.c b/src/os/osPfsIsPlug.c
index 4df1bf328..434a097c5 100644
--- a/src/os/osPfsIsPlug.c
+++ b/src/os/osPfsIsPlug.c
@@ -1,6 +1,6 @@
#include "libultra_internal.h"
-#include "PR/os_pi.h"
+#include <PR/os_pi.h>
#include "controller.h"
OSPifRam __osPfsPifRam;
diff --git a/src/player_controller.c b/src/player_controller.c
index 7f63e901d..bc0dd7649 100644
--- a/src/player_controller.c
+++ b/src/player_controller.c
@@ -951,7 +951,6 @@ void func_8002934C(Player *player, Camera *camera, s8 screenId, s8 playerId) {
|| (player->effects & 0x800000)
|| (player->effects & 0x20000)
|| (player->unk_044 & 0x800)) {
-
if ((player->animFrameSelector[screenId]) >= 0x14) {
player->animFrameSelector[screenId] = 0;
}
@@ -976,8 +975,8 @@ void func_8002934C(Player *player, Camera *camera, s8 screenId, s8 playerId) {
D_80165190[screenId][playerId] = 1;
if ((player->effects & 0x80) || (player->effects & 0x40)) {
- if ((player->animFrameSelector[screenId] == D_801650D0[screenId][playerId])
- && (player->animGroupSelector[screenId] == D_80165110[screenId][playerId])) {
+ if ((player->animFrameSelector[screenId] == gLastAnimFrameSelector[screenId][playerId])
+ && (player->animGroupSelector[screenId] == gLastAnimGroupSelector[screenId][playerId])) {
player->unk_002 &= ~(1 << (screenId * 4));
D_80165190[screenId][playerId] = 1;
}
@@ -986,11 +985,11 @@ void func_8002934C(Player *player, Camera *camera, s8 screenId, s8 playerId) {
}
} else {
player->unk_002 |= 1 << (screenId * 4);
- if (((player->animFrameSelector[screenId] == D_801650D0[screenId][playerId]) && (player->animGroupSelector[screenId] == D_80165110[screenId][playerId])) && ((D_80165190[screenId][playerId]) == 0)) {
+ if (((player->animFrameSelector[screenId] == gLastAnimFrameSelector[screenId][playerId]) && (player->animGroupSelector[screenId] == gLastAnimGroupSelector[screenId][playerId])) && ((D_80165190[screenId][playerId]) == 0)) {
player->unk_002 &= ~(1 << (screenId * 4));
}
}
- temp_a0_2 = D_801650D0[screenId][playerId] - player->animFrameSelector[screenId];
+ temp_a0_2 = gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId];
if ((temp_a0_2 >= 0x14) || (temp_a0_2 < (-0x13))) {
player->unk_002 |= 1 << (screenId * 4);
}
@@ -1029,7 +1028,6 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
player->tyres[FRONT_LEFT].pos[1] = player->pos[1] + sp8C[1];
player->tyres[FRONT_LEFT].pos[2] = player->pos[2] + sp8C[2];
process_collision(player, &player->tyres[FRONT_LEFT], sp80[0], sp80[1], sp80[2]);
-
sp8C[0] = (-var_f12) + 3.6;
sp8C[1] = -player->boundingBoxSize;
sp8C[2] = var_f12 - 2.0f;
@@ -1041,7 +1039,6 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
player->tyres[FRONT_RIGHT].pos[1] = player->pos[1] + sp8C[1];
player->tyres[FRONT_RIGHT].pos[2] = player->pos[2] + sp8C[2];
process_collision(player, &player->tyres[FRONT_RIGHT], sp80[0], sp80[1], sp80[2]);
-
sp8C[0] = var_f12 - 2.6;
sp8C[1] = -player->boundingBoxSize;
sp8C[2] = (-var_f12) + 4.0f;
@@ -1053,7 +1050,6 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
player->tyres[BACK_LEFT].pos[1] = player->pos[1] + sp8C[1];
player->tyres[BACK_LEFT].pos[2] = player->pos[2] + sp8C[2];
process_collision(player, &player->tyres[BACK_LEFT], sp80[0], sp80[1], sp80[2]);
-
sp8C[0] = (-var_f12) + 2.6;
sp8C[1] = -player->boundingBoxSize;
sp8C[2] = (-var_f12) + 4.0f;
@@ -1065,7 +1061,6 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
player->tyres[BACK_RIGHT].pos[1] = player->pos[1] + sp8C[1];
player->tyres[BACK_RIGHT].pos[2] = player->pos[2] + sp8C[2];
process_collision(player, &player->tyres[BACK_RIGHT], sp80[0], sp80[1], sp80[2]);
-
if (!(player->effects & 8)) {
a = (player->tyres[BACK_LEFT].baseHeight + player->tyres[FRONT_LEFT].baseHeight) / 2;
move_f32_towards(&player->unk_230, a, 0.5f);
@@ -2918,7 +2913,6 @@ void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 screenId, s8
player->velocity[0] = sp68[0];
player->velocity[1] = sp68[1];
player->velocity[2] = sp68[2];
-
D_80165070[playerId][0] = sp68[0];
D_80165070[playerId][1] = sp68[1];
D_80165070[playerId][2] = sp68[2];
diff --git a/src/player_controller.h b/src/player_controller.h
index d04024610..064202646 100644
--- a/src/player_controller.h
+++ b/src/player_controller.h
@@ -1,7 +1,7 @@
#ifndef player_controller_H
#define player_controller_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "camera.h"
/* Function Prototypes */
diff --git a/src/racing/actors.c b/src/racing/actors.c
index f0875e4e4..3b21366c2 100644
--- a/src/racing/actors.c
+++ b/src/racing/actors.c
@@ -569,8 +569,7 @@ void evaluate_collision_players_palm_trees(void) {
s32 index;
for (index = 0; index < 4; index++){
- // wtf is up with the << 0x18 >> 0x18? is it some weird type conversion? just use & 0xFF have the same effect to keep 8 first bit
- if (((gPlayers[index].type & 0xC000) != 0) && (((get_surface_type(gPlayers[index].collision.meshIndexZX) << 24) >> 24) == GRASS)) {
+ if (((gPlayers[index].type & 0xC000) != 0) && ((s8)(u8)get_surface_type(gPlayers[index].collision.meshIndexZX) == GRASS)) {
evaluate_collision_player_palm_trees(&gPlayers[index]);
}
}
diff --git a/src/racing/actors_extended.h b/src/racing/actors_extended.h
index ae6983748..cb8f0c6ca 100644
--- a/src/racing/actors_extended.h
+++ b/src/racing/actors_extended.h
@@ -1,7 +1,7 @@
#ifndef ACTORS_EXTENDED_H
#define ACTORS_EXTENDED_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "actor_types.h"
/** @cond */
diff --git a/src/racing/collision.c b/src/racing/collision.c
index 8c79d7976..a74aaddb8 100644
--- a/src/racing/collision.c
+++ b/src/racing/collision.c
@@ -1234,7 +1234,6 @@ u16 actor_terrain_collision(Collision *collision, f32 boundingBoxSize, f32 x1, f
u16 flags = 0;
s32 sectionX;
s32 sectionZ;
-
u16 i;
collision->unk30 = 0;
@@ -2001,7 +2000,7 @@ extern u32 D_8015F58C;
u32 numTimes = 0;
/**
- * Recursive search and set for vertex data
+ * Generate via a recursive search and set for vertex data.
*/
void generate_collision_mesh(Gfx *addr, s8 surfaceType, u16 sectionId) {
s32 opcode;
@@ -2042,7 +2041,7 @@ void generate_collision_mesh(Gfx *addr, s8 surfaceType, u16 sectionId) {
// printf(" w0 0x%llX", lo);
// printf(" w1 0x%llX\n", hi);
- generate_collision_mesh((Gfx *) (hi), surfaceType, sectionId);
+ generate_collision_mesh((Gfx *) hi, surfaceType, sectionId);
} else if (opcode == (G_VTX << 24)) {
set_vtx_buffer((hi), (lo >> 10) & 0x3F, ((lo >> 16) & 0xFF) >> 1);
diff --git a/src/racing/collision.h b/src/racing/collision.h
index 07702a9ca..b93e4b4d4 100644
--- a/src/racing/collision.h
+++ b/src/racing/collision.h
@@ -1,7 +1,7 @@
#ifndef collision_H
#define collision_H
-#include "common_structs.h"
+#include <common_structs.h>
#define COLLISION 0x1
#define NO_COLLISION 0x0
diff --git a/src/racing/memory.c b/src/racing/memory.c
index a537b316b..160b86801 100644
--- a/src/racing/memory.c
+++ b/src/racing/memory.c
@@ -458,9 +458,11 @@ UNUSED uintptr_t func_802A8348(s32 arg0, s32 arg1, s32 arg2) {
oldAddr = gNextFreeMemoryAddress;
newAddr = (void *) (oldAddr + offset);
pad = &newAddr;
- // osInvalDCache(newAddr, offset);
- //osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_other_texturesSegmentRomStart[SEGMENT_OFFSET(arg0)], newAddr, offset, &gDmaMesgQueue);
- // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, 1);
+ #ifdef TARGET_N64
+ osInvalDCache(newAddr, offset);
+ osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_other_texturesSegmentRomStart[SEGMENT_OFFSET(arg0)], newAddr, offset, &gDmaMesgQueue);
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, 1);
+ #endif
func_80040030((u8 *) newAddr, (u8 *) oldAddr);
gNextFreeMemoryAddress += offset;
@@ -1040,7 +1042,7 @@ void unpack_spline_3D(Gfx *gfx, u8 *arg1, UNUSED s8 arg2) {
temp_v0 = arg1[sPackedSeekPosition++];
phi_a0 |= (temp_v0 & 0xF) * 2;
}
- gfx[sGfxSeekPosition].words.w0 = ((uintptr_t)(uint8_t)G_LINE3D << 24);
+ gfx[sGfxSeekPosition].words.w0 = ((uintptr_t)(uint8_t)G_QUAD << 24);
gfx[sGfxSeekPosition].words.w1 =
((phi_a0 * 2) << 24) | ((phi_t0 * 2) << 16) | ((phi_a3 * 2) << 8) | (phi_a2 * 2);
sGfxSeekPosition++;
@@ -1080,7 +1082,6 @@ void displaylist_unpack(Gfx *gfx, u8 *data, uintptr_t arg2) {
while(true) {
-
// Seek to the next byte
opcode = packed_dl[sPackedSeekPosition++];
diff --git a/src/racing/race_logic.c b/src/racing/race_logic.c
index 31dec3e98..c0f8e4707 100644
--- a/src/racing/race_logic.c
+++ b/src/racing/race_logic.c
@@ -504,7 +504,7 @@ f32 func_8028EE8C(s32 arg0) {
f32 temp_v1 = gPlayers[arg0].copy_rotation_z;
f32 temp_f14 = D_8015F8D0[2] - temp_v0;
f32 temp_f16 = temp_v1 - D_8015F8D0[2];
- return gCourseTimer - ((COURSE_TIMER_ITER * temp_f14) / (temp_f14 + temp_f16));
+ return gCourseTimer - ((COURSE_TIMER_ITER_f * temp_f14) / (temp_f14 + temp_f16));
}
void func_8028EEF0(s32 i) {
diff --git a/src/render_objects.c b/src/render_objects.c
index e61f7526e..7dff32431 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -20,7 +20,7 @@
#include "bomb_kart.h"
#include <assets/common_data.h>
#include "render_player.h"
-#include "code_80004740.h"
+#include "animation.h"
#include "code_80005FD0.h"
#include "code_80057C60.h"
#include "code_8006E9C0.h"
@@ -3947,9 +3947,9 @@ void func_80055164(s32 objectIndex) {
gSPDisplayList(gDisplayListHead++, D_0D0077A0);
rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling);
if (gIsGamePaused == 0) {
- gObjectList[objectIndex].unk_0A2 = func_80004DFC((animation_type_1 *) gObjectList[objectIndex].model, (animation_type_2 **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
+ gObjectList[objectIndex].unk_0A2 = render_animated_model((Armature *) gObjectList[objectIndex].model, (Animation **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
} else {
- func_80004DFC((animation_type_1 *) gObjectList[objectIndex].model, (animation_type_2 **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
+ render_animated_model((Armature *) gObjectList[objectIndex].model, (Animation **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
}
}
}
@@ -3972,9 +3972,9 @@ void func_800552BC(s32 objectIndex) {
rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling);
gSPDisplayList(gDisplayListHead++, D_0D0077D0);
if (gIsGamePaused == 0) {
- gObjectList[objectIndex].unk_0A2 = func_80004DFC((animation_type_1 *) gObjectList[objectIndex].model, (animation_type_2 **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
+ gObjectList[objectIndex].unk_0A2 = render_animated_model((Armature *) gObjectList[objectIndex].model, (Animation **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
} else {
- func_80004DFC((animation_type_1 *) gObjectList[objectIndex].model, (animation_type_2 **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
+ render_animated_model((Armature *) gObjectList[objectIndex].model, (Animation **) gObjectList[objectIndex].vertex, 0, gObjectList[objectIndex].unk_0A2);
}
}
}
@@ -4074,7 +4074,7 @@ void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
sp34[2] = object->pos[2];
rsp_set_matrix_transformation_inverted_x_y_orientation(sp34, object->orientation, object->sizeScaling);
gSPDisplayList(gDisplayListHead++, D_0D0077D0);
- func_80004DFC((animation_type_1 *) object->model, (animation_type_2 **) object->vertex, (s16) object->unk_0D8, (s16) object->itemDisplay);
+ render_animated_model((Armature *) object->model, (Animation **) object->vertex, (s16) object->unk_0D8, (s16) object->itemDisplay);
}
} else if (arg1 < 0x15F91U) {
func_8004A7AC(objectIndex, 1.5f);
@@ -4082,7 +4082,7 @@ void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
}
rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling);
gSPDisplayList(gDisplayListHead++, D_0D0077D0);
- func_80004DFC((animation_type_1 *) object->model, (animation_type_2 **) object->vertex, (s16) object->unk_0D8, (s16) object->itemDisplay);
+ render_animated_model((Armature *) object->model, (Animation **) object->vertex, (s16) object->unk_0D8, (s16) object->itemDisplay);
}
}
@@ -4146,7 +4146,7 @@ void func_80055AB8(s32 objectIndex, s32 cameraId) {
} else {
rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling);
gSPDisplayList(gDisplayListHead++, D_0D0077D0);
- func_80004DFC((animation_type_1 *) gObjectList[objectIndex].model, (animation_type_2 **) gObjectList[objectIndex].vertex, 0, (s16) gObjectList[objectIndex].itemDisplay);
+ render_animated_model((Armature *) gObjectList[objectIndex].model, (Animation **) gObjectList[objectIndex].vertex, 0, (s16) gObjectList[objectIndex].itemDisplay);
}
}
}
@@ -4155,7 +4155,7 @@ void render_object_chain_chomps(s32 cameraId) {
s32 var_s1;
s32 objectIndex;
- for (var_s1 = 0; var_s1 < 3; var_s1++) {
+ for (var_s1 = 0; var_s1 < NUM_CHAIN_CHOMPS; var_s1++) {
objectIndex = indexObjectList2[var_s1];
func_8008A1D0(objectIndex, cameraId, 0x000005DC, 0x000009C4);
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
diff --git a/src/render_objects.h b/src/render_objects.h
index ab7c44f30..e7bc2a70c 100644
--- a/src/render_objects.h
+++ b/src/render_objects.h
@@ -1,7 +1,7 @@
#ifndef RENDER_OBJECTS_H
#define RENDER_OBJECTS_H
-#include "common_structs.h"
+#include <common_structs.h>
#include "main.h"
void func_80045738(u8*, u8*, s32, s32);
diff --git a/src/render_player.c b/src/render_player.c
index 39213a5e2..d02f73d66 100644
--- a/src/render_player.c
+++ b/src/render_player.c
@@ -43,9 +43,9 @@ UNUSED void *D_800DDB5C[3] = {
gFramebuffer0, gFramebuffer1, gFramebuffer2
};
-s16 D_80164AB0[8];
-s16 D_80164AC0[8];
-Player *D_80164AD0[8];
+s16 gPlayersToRenderPlayerId[8];
+s16 gPlayersToRenderScreenId[8];
+Player *gPlayersToRenderPlayer[8];
s16 gMatrixEffectCount;
s32 D_80164AF4[3];
struct_D_802F1F80 *gPlayerPalette;
@@ -57,13 +57,13 @@ u16 gPlayerBlueEffect[8];
u16 gPlayerCyanEffect[8];
u16 gPlayerMagentaEffect[8];
u16 gPlayerYellowEffect[8];
-// If it's also a colour effect like before
+// Likely an unused colour effect.
UNUSED u16 gPlayerWhiteEffect[8];
s32 D_80164B80[296];
s16 D_80165020[40];
Vec3f D_80165070[8];
-s16 D_801650D0[4][8];
-s16 D_80165110[4][8];
+s16 gLastAnimFrameSelector[4][8];
+s16 gLastAnimGroupSelector[4][8];
s16 D_80165150[4][8];
s16 D_80165190[4][8];
s16 D_801651D0[4][8];
@@ -179,6 +179,9 @@ u16 func_8001FD78(Player *player, f32 posX, UNUSED f32 arg2, f32 posZ) {
return ret;
}
+/**
+ * @brief one of his function is to put the frame to load in to a list to load it to be only applied for the next frame
+ */
void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId) {
UNUSED s32 pad[4];
s32 sp4C;
@@ -204,13 +207,13 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
temp_v0_2 = 1 << (screenId << 2);
if ((temp_v0 == (player->unk_002 & temp_v0)) && (temp_v0_2 == (player->unk_002 & temp_v0_2))) {
if ((check_player_camera_collision(player, camera, D_80165570 + sp4C, D_80165572 + sp48) == 1) & 0xFFFF) {
- D_80164AB0[gPlayersToRenderCount] = (s16) playerId;
- D_80164AC0[gPlayersToRenderCount] = (s16) screenId;
- D_80164AD0[gPlayersToRenderCount] = player;
+ gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
+ gPlayersToRenderScreenId[gPlayersToRenderCount] = (s16) screenId;
+ gPlayersToRenderPlayer[gPlayersToRenderCount] = player;
gPlayersToRenderCount += 1;
D_80165190[screenId][playerId] = 0;
- D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
- D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
+ gLastAnimFrameSelector[screenId][playerId] = player->animFrameSelector[screenId];
+ gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_801651D0[screenId][playerId] += 1;
if (D_801651D0[screenId][playerId] == 2) {
@@ -218,13 +221,13 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
}
} else {
if ((check_player_camera_collision(player, camera, D_80165574 + sp4C, D_80165576) == 1) & 0xFFFF) {
- if ((sRenderingFramebuffer == gRenderingFramebufferByPlayer[playerId]) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
- D_80164AB0[gPlayersToRenderCount] = (s16) playerId;
- D_80164AC0[gPlayersToRenderCount] = (s16) screenId;
- D_80164AD0[gPlayersToRenderCount] = player;
+ if ((sRenderingFramebuffer == gRenderingFramebufferByPlayer[playerId]) || ((gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
+ gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
+ gPlayersToRenderScreenId[gPlayersToRenderCount] = (s16) screenId;
+ gPlayersToRenderPlayer[gPlayersToRenderCount] = player;
gPlayersToRenderCount += 1;
- D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
- D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
+ gLastAnimFrameSelector[screenId][playerId] = player->animFrameSelector[screenId];
+ gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_80165190[screenId][playerId] = 0;
D_801651D0[screenId][playerId] += 1;
@@ -234,13 +237,13 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
}
} else {
if ((
- (D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
- D_80164AB0[gPlayersToRenderCount] = (s16) playerId;
- D_80164AC0[gPlayersToRenderCount] = (s16) screenId;
- D_80164AD0[gPlayersToRenderCount] = player;
+ (gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
+ gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
+ gPlayersToRenderScreenId[gPlayersToRenderCount] = (s16) screenId;
+ gPlayersToRenderPlayer[gPlayersToRenderCount] = player;
gPlayersToRenderCount += 1;
- D_801650D0[screenId][playerId] = (s16) player->animFrameSelector[screenId];
- D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
+ gLastAnimFrameSelector[screenId][playerId] = (s16) player->animFrameSelector[screenId];
+ gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_80165190[screenId][playerId] = 0;
D_801651D0[screenId][playerId] += 1;
@@ -254,142 +257,130 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
}
}
-void func_80020524(void) {
+void load_kart_texture_and_render_kart_particle_on_screen_one(void) {
s16 i;
- func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0);
- func_8006E5AC(gPlayerOneCopy, 0, 0);
- func_8006E5AC(gPlayerTwo, 1, 0);
- func_8006E5AC(gPlayerThree, 2, 0);
- func_8006E5AC(gPlayerFour, 3, 0);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0], gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0], D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
+ render_kart_particle_on_screen_one(gPlayerOneCopy, PLAYER_ONE, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerTwo, PLAYER_TWO, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerThree, PLAYER_THREE, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerFour, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- func_8006E5AC(gPlayerFive, 4, 0);
- func_8006E5AC(gPlayerSix, 5, 0);
- func_8006E5AC(gPlayerSeven, 6, 0);
- func_8006E5AC(gPlayerEight, 7, 0);
+ render_kart_particle_on_screen_one(gPlayerFive, PLAYER_FIVE, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerSix, PLAYER_SIX, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerSeven, PLAYER_SEVEN, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerEight, PLAYER_EIGHT, PLAYER_ONE);
}
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (i = 1; i < gPlayersToRenderCount; i++) {
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[i], gPlayersToRenderPlayerId[i], gPlayersToRenderScreenId[i], gPlayersToRenderScreenId[i], D_801651D0[gPlayersToRenderScreenId[i]][gPlayersToRenderPlayerId[i]]);
+ #ifdef TARGET_N64
- func_80027560(D_80164AD0[i], D_80164AB0[i], D_80164AC0[i], D_80164AC0[i], D_801651D0[D_80164AC0[i]][D_80164AB0[i]], i);
-
- //size_t textureSize = ResourceGetSizeByName(texture);
- //printf("test %s\n",texture);
- // memcpy(vAddr, texture, textureSize);
-
- //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00,
-// D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array);
-
- // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array,
- // D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00, 0x1000);
-
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00);
-
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]]][gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]]][gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]].pixel_index_array);
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]]][gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]]][gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]].unk_00);
+ #endif
}
- //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array);
-
- // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array,
- // D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000);
-
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00);
-
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].pixel_index_array);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].unk_00);
+ #endif
}
-void func_8002088C(void) {
+void load_kart_texture_and_render_kart_particle_on_screen_two(void) {
s16 var_s0;
- func_8006E634(gPlayerOneCopy, 0, 1);
- func_8006E634(gPlayerTwo, 1, 1);
- func_8006E634(gPlayerThree, 2, 1);
- func_8006E634(gPlayerFour, 3, 1);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0], gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0], D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
+ render_kart_particle_on_screen_two(gPlayerOneCopy, PLAYER_ONE, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerTwo, PLAYER_TWO, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerThree, PLAYER_THREE, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerFour, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- func_8006E634(gPlayerFive, 4, 1);
- func_8006E634(gPlayerSix, 5, 1);
- func_8006E634(gPlayerSeven, 6, 1);
- func_8006E634(gPlayerEight, 7, 1);
+ render_kart_particle_on_screen_two(gPlayerFive, PLAYER_FIVE, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerSix, PLAYER_SIX, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerSeven, PLAYER_SEVEN, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerEight, PLAYER_EIGHT, PLAYER_TWO);
}
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) {
- func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0], D_80164AC0[var_s0], D_80164AC0[var_s0], D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]], var_s0);
- //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array);
-
- // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array,
- // D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00, 0x1000);
-
-
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00);
- //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
- }
- //func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0);
-
- //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array);
- // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array,
- // D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000);
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[var_s0], gPlayersToRenderPlayerId[var_s0], gPlayersToRenderScreenId[var_s0], gPlayersToRenderScreenId[var_s0], D_801651D0[gPlayersToRenderScreenId[var_s0]][gPlayersToRenderPlayerId[var_s0]]);
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]].pixel_index_array);
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]].unk_00);
+ #endif
+ }
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].pixel_index_array);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].unk_00);
+ #endif
}
-void func_80020BF4(void) {
+void load_kart_texture_and_render_kart_particle_on_screen_three(void) {
s16 var_s0;
- func_8006E6BC(gPlayerOneCopy, 0, 2);
- func_8006E6BC(gPlayerTwo, 1, 2);
- func_8006E6BC(gPlayerThree, 2, 2);
- func_8006E6BC(gPlayerFour, 3, 2);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0] + 4, gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0] - 2, D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
+ render_kart_particle_on_screen_three(gPlayerOneCopy, PLAYER_ONE, PLAYER_THREE);
+ render_kart_particle_on_screen_three(gPlayerTwo, PLAYER_TWO, PLAYER_THREE);
+ render_kart_particle_on_screen_three(gPlayerThree, PLAYER_THREE, PLAYER_THREE);
+ render_kart_particle_on_screen_three(gPlayerFour, PLAYER_FOUR, PLAYER_THREE);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) {
- func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]], var_s0);
- // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array);
-
-
- // memcpy((u8*) &D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array,
- // D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00, 0x1000);
-
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00);
- // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
- }
- //func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0);
- //mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array);
-
- // memcpy((u8*) &D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, 0x1000);
-
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[var_s0], gPlayersToRenderPlayerId[var_s0] + 4, gPlayersToRenderScreenId[var_s0], gPlayersToRenderScreenId[var_s0] - 2, D_801651D0[gPlayersToRenderScreenId[var_s0]][gPlayersToRenderPlayerId[var_s0]]);
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].pixel_index_array);
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].unk_00);
+ #endif
+ }
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].pixel_index_array);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].unk_00);
+ #endif
}
-void func_80020F1C(void) {
+void load_kart_texture_and_render_kart_particle_on_screen_four(void) {
s16 var_s0;
- func_8006E744(gPlayerOneCopy, 0, 3);
- func_8006E744(gPlayerTwo, 1, 3);
- func_8006E744(gPlayerThree, 2, 3);
- func_8006E744(gPlayerFour, 3, 3);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0] + 4, gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0] - 2, D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
+ render_kart_particle_on_screen_four(gPlayerOneCopy, PLAYER_ONE, PLAYER_FOUR);
+ render_kart_particle_on_screen_four(gPlayerTwo, PLAYER_TWO, PLAYER_FOUR);
+ render_kart_particle_on_screen_four(gPlayerThree, PLAYER_THREE, PLAYER_FOUR);
+ render_kart_particle_on_screen_four(gPlayerFour, PLAYER_FOUR, PLAYER_FOUR);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) {
- func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]], var_s0);
- // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array);
- // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
-
-
- //memcpy((u8*) &D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00,0x1000);
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00);
- }
- //func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0);
- // mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00,
- // D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array);
-
- //memcpy((u8*) &D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, 0x1000);
- strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00);
+ load_kart_texture_non_blocking(gPlayersToRenderPlayer[var_s0], gPlayersToRenderPlayerId[var_s0] + 4, gPlayersToRenderScreenId[var_s0], gPlayersToRenderScreenId[var_s0] - 2, D_801651D0[gPlayersToRenderScreenId[var_s0]][gPlayersToRenderPlayerId[var_s0]]);
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].pixel_index_array);
+ osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].unk_00);
+ #endif
+ }
+ #ifdef TARGET_N64
+ mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].unk_00,
+ D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].pixel_index_array);
+ #else
+ strcpy(D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].pixel_index_array, gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].unk_00);
+ #endif
}
-void try_render_player(Player *player, s8 playerId, s8 arg2) {
+void try_rendering_player(Player *player, s8 playerId, s8 arg2) {
if (((player->type & PLAYER_EXISTS) == PLAYER_EXISTS)
&& ((player->type & PLAYER_UNKNOWN_0x40) == 0)) {
@@ -411,38 +402,38 @@ void render_players_on_screen_one(void) {
};
gPlayersToRenderCount = 0;
- init_render_player(gPlayerOneCopy, camera1, 0U, 0U);
- init_render_player(gPlayerTwo, camera1, 1U, 0U);
- init_render_player(gPlayerThree, camera1, 2U, 0U);
- init_render_player(gPlayerFour, camera1, 3U, 0U);
+ init_render_player(gPlayerOneCopy, camera1, PLAYER_ONE, PLAYER_ONE);
+ init_render_player(gPlayerTwo, camera1, PLAYER_TWO, PLAYER_ONE);
+ init_render_player(gPlayerThree, camera1, PLAYER_THREE, PLAYER_ONE);
+ init_render_player(gPlayerFour, camera1, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- init_render_player(gPlayerFive, camera1, 4U, 0U);
- init_render_player(gPlayerSix, camera1, 5U, 0U);
- init_render_player(gPlayerSeven, camera1, 6U, 0U);
- init_render_player(gPlayerEight, camera1, 7U, 0U);
- }
- try_render_player(gPlayerOne, 0U, 0U);
- try_render_player(gPlayerTwo, 1U, 0U);
- try_render_player(gPlayerThree, 2U, 0U);
- try_render_player(gPlayerFour, 3U, 0U);
+ init_render_player(gPlayerFive, camera1, PLAYER_FIVE, PLAYER_ONE);
+ init_render_player(gPlayerSix, camera1, PLAYER_SIX, PLAYER_ONE);
+ init_render_player(gPlayerSeven, camera1, PLAYER_SEVEN, PLAYER_ONE);
+ init_render_player(gPlayerEight, camera1, PLAYER_EIGHT, PLAYER_ONE);
+ }
+ try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_ONE);
+ try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_ONE);
+ try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_ONE);
+ try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- try_render_player(gPlayerFive, 4U, 0U);
- try_render_player(gPlayerSix, 5U, 0U);
- try_render_player(gPlayerSeven, 6U, 0U);
- try_render_player(gPlayerEight, 7U, 0U);
+ try_rendering_player(gPlayerFive, PLAYER_FIVE, PLAYER_ONE);
+ try_rendering_player(gPlayerSix, PLAYER_SIX, PLAYER_ONE);
+ try_rendering_player(gPlayerSeven, PLAYER_SEVEN, PLAYER_ONE);
+ try_rendering_player(gPlayerEight, PLAYER_EIGHT, PLAYER_ONE);
}
if (gPlayersToRenderCount != 0) {
- func_80020524();
+ load_kart_texture_and_render_kart_particle_on_screen_one();
} else {
- func_8006E5AC(gPlayerOneCopy, 0, 0);
- func_8006E5AC(gPlayerTwo, 1, 0);
- func_8006E5AC(gPlayerThree, 2, 0);
- func_8006E5AC(gPlayerFour, 3, 0);
+ render_kart_particle_on_screen_one(gPlayerOneCopy, PLAYER_ONE, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerTwo, PLAYER_TWO, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerThree, PLAYER_THREE, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerFour, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- func_8006E5AC(gPlayerFive, 4, 0);
- func_8006E5AC(gPlayerSix, 5, 0);
- func_8006E5AC(gPlayerSeven, 6, 0);
- func_8006E5AC(gPlayerEight, 7, 0);
+ render_kart_particle_on_screen_one(gPlayerFive, PLAYER_FIVE, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerSix, PLAYER_SIX, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerSeven, PLAYER_SEVEN, PLAYER_ONE);
+ render_kart_particle_on_screen_one(gPlayerEight, PLAYER_EIGHT, PLAYER_ONE);
}
}
gPlayersToRenderCount = 0;
@@ -614,38 +605,38 @@ s32 maybeCompilerPadding = 0;
void render_players_on_screen_two(void) {
gPlayersToRenderCount = 0;
- init_render_player(gPlayerOneCopy, camera2, 0, 1);
- init_render_player(gPlayerTwo, camera2, 1, 1);
- init_render_player(gPlayerThree, camera2, 2, 1);
- init_render_player(gPlayerFour, camera2, 3, 1);
+ init_render_player(gPlayerOneCopy, camera2, PLAYER_ONE, PLAYER_TWO);
+ init_render_player(gPlayerTwo, camera2, PLAYER_TWO, PLAYER_TWO);
+ init_render_player(gPlayerThree, camera2, PLAYER_THREE, PLAYER_TWO);
+ init_render_player(gPlayerFour, camera2, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- init_render_player(gPlayerFive, camera2, 4, 1);
- init_render_player(gPlayerSix, camera2, 5, 1);
- init_render_player(gPlayerSeven, camera2, 6, 1);
- init_render_player(gPlayerEight, camera2, 7, 1);
- }
- try_render_player(gPlayerOne, 0, 1);
- try_render_player(gPlayerTwo, 1, 1);
- try_render_player(gPlayerThree, 2, 1);
- try_render_player(gPlayerFour, 3, 1);
+ init_render_player(gPlayerFive, camera2, PLAYER_FIVE, PLAYER_TWO);
+ init_render_player(gPlayerSix, camera2, PLAYER_SIX, PLAYER_TWO);
+ init_render_player(gPlayerSeven, camera2, PLAYER_SEVEN, PLAYER_TWO);
+ init_render_player(gPlayerEight, camera2, PLAYER_EIGHT, PLAYER_TWO);
+ }
+ try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_TWO);
+ try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_TWO);
+ try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_TWO);
+ try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- try_render_player(gPlayerFive, 4, 1);
- try_render_player(gPlayerSix, 5, 1);
- try_render_player(gPlayerSeven, 6, 1);
- try_render_player(gPlayerEight, 7, 1);
+ try_rendering_player(gPlayerFive, PLAYER_FIVE, PLAYER_TWO);
+ try_rendering_player(gPlayerSix, PLAYER_SIX, PLAYER_TWO);
+ try_rendering_player(gPlayerSeven, PLAYER_SEVEN, PLAYER_TWO);
+ try_rendering_player(gPlayerEight, PLAYER_EIGHT, PLAYER_TWO);
}
if (gPlayersToRenderCount != 0) {
- func_8002088C();
+ load_kart_texture_and_render_kart_particle_on_screen_two();
} else {
- func_8006E634(gPlayerOneCopy, 0, 1);
- func_8006E634(gPlayerTwo, 1, 1);
- func_8006E634(gPlayerThree, 2, 1);
- func_8006E634(gPlayerFour, 3, 1);
+ render_kart_particle_on_screen_two(gPlayerOneCopy, PLAYER_ONE, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerTwo, PLAYER_TWO, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerThree, PLAYER_THREE, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerFour, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
- func_8006E634(gPlayerFive, 4, 1);
- func_8006E634(gPlayerSix, 5, 1);
- func_8006E634(gPlayerSeven, 6, 1);
- func_8006E634(gPlayerEight, 7, 1);
+ render_kart_particle_on_screen_two(gPlayerFive, PLAYER_FIVE, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerSix, PLAYER_SIX, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerSeven, PLAYER_SEVEN, PLAYER_TWO);
+ render_kart_particle_on_screen_two(gPlayerEight, PLAYER_EIGHT, PLAYER_TWO);
}
}
gPlayersToRenderCount = 0;
@@ -653,42 +644,42 @@ void render_players_on_screen_two(void) {
void render_players_on_screen_three(void) {
gPlayersToRenderCount = 0;
- init_render_player(gPlayerOneCopy, camera3, 0, 2);
- init_render_player(gPlayerTwo, camera3, 1, 2);
- init_render_player(gPlayerThree, camera3, 2, 2);
- init_render_player(gPlayerFour, camera3, 3, 2);
- try_render_player(gPlayerOne, 0, 2);
- try_render_player(gPlayerTwo, 1, 2);
- try_render_player(gPlayerThree, 2, 2);
- try_render_player(gPlayerFour, 3, 2);
+ init_render_player(gPlayerOneCopy, camera3, PLAYER_ONE, PLAYER_THREE);
+ init_render_player(gPlayerTwo, camera3, PLAYER_TWO, PLAYER_THREE);
+ init_render_player(gPlayerThree, camera3, PLAYER_THREE, PLAYER_THREE);
+ init_render_player(gPlayerFour, camera3, PLAYER_FOUR, PLAYER_THREE);
+ try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_THREE);
+ try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_THREE);
+ try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_THREE);
+ try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_THREE);
if (gPlayersToRenderCount != 0) {
- func_80020BF4();
+ load_kart_texture_and_render_kart_particle_on_screen_three();
} else {
- func_8006E6BC(gPlayerOneCopy, 0, 2);
- func_8006E6BC(gPlayerTwo, 1, 2);
- func_8006E6BC(gPlayerThree, 2, 2);
- func_8006E6BC(gPlayerFour, 3, 2);
+ render_kart_particle_on_screen_three(gPlayerOneCopy, PLAYER_ONE, PLAYER_THREE);
+ render_kart_particle_on_screen_three(gPlayerTwo, PLAYER_TWO, PLAYER_THREE);
+ render_kart_particle_on_screen_three(gPlayerThree, PLAYER_THREE, PLAYER_THREE);
+ render_kart_particle_on_screen_three(gPlayerFour, PLAYER_FOUR, PLAYER_THREE);
}
gPlayersToRenderCount = 0;
}
void render_players_on_screen_four(void) {
gPlayersToRenderCount = 0;
- init_render_player(gPlayerOneCopy, camera4, 0, 3);
- init_render_player(gPlayerTwo, camera4, 1, 3);
- init_render_player(gPlayerThree, camera4, 2, 3);
- init_render_player(gPlayerFour, camera4, 3, 3);
- try_render_player(gPlayerOne, 0, 3);
- try_render_player(gPlayerTwo, 1, 3);
- try_render_player(gPlayerThree, 2, 3);
- try_render_player(gPlayerFour, 3, 3);
+ init_render_player(gPlayerOneCopy, camera4, PLAYER_ONE, PLAYER_FOUR);
+ init_render_player(gPlayerTwo, camera4, PLAYER_TWO, PLAYER_FOUR);
+ init_render_player(gPlayerThree, camera4, PLAYER_THREE, PLAYER_FOUR);
+ init_render_player(gPlayerFour, camera4, PLAYER_FOUR, PLAYER_FOUR);
+ try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_FOUR);
+ try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_FOUR);
+ try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_FOUR);
+ try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_FOUR);
if (gPlayersToRenderCount != 0) {
- func_80020F1C();
+ load_kart_texture_and_render_kart_particle_on_screen_four();
} else {
- func_8006E744(gPlayerOneCopy, 0, 3);
- func_8006E744(gPlayerTwo, 1, 3);
- func_8006E744(gPlayerThree, 2, 3);
- func_8006E744(gPlayerFour, 3, 3);
+ render_kart_particle_on_screen_four(gPlayerOneCopy, PLAYER_ONE, PLAYER_FOUR);
+ render_kart_particle_on_screen_four(gPlayerTwo, PLAYER_TWO, PLAYER_FOUR);
+ render_kart_particle_on_screen_four(gPlayerThree, PLAYER_THREE, PLAYER_FOUR);
+ render_kart_particle_on_screen_four(gPlayerFour, PLAYER_FOUR, PLAYER_FOUR);
}
gPlayersToRenderCount = 0;
}
@@ -1061,24 +1052,24 @@ void func_80022BC4(Player *player, UNUSED s8 arg1) {
player->unk_DB4.unk2 = temp_v0;
}
-void func_80022CA8(Player *player, s8 arg1, UNUSED s8 arg2, s8 arg3) {
+void func_80022CA8(Player *player, s8 playerId, UNUSED s8 screenId, s8 arg3) {
s16 temp_v0 = player->unk_DA4;
- D_800DDBB4[arg1][arg3 + 0x0].v.ob[1] = 18 - (temp_v0 * 2.3);
- D_800DDBB4[arg1][arg3 + 0x1].v.ob[1] = 9 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x2].v.ob[1] = 9 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x3].v.ob[1] = 18 - (temp_v0 * 2.3);
- D_800DDBB4[arg1][arg3 + 0x4].v.ob[1] = 9 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x7].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x0].v.ob[1] = 18 - (temp_v0 * 2.3);
+ D_800DDBB4[playerId][arg3 + 0x1].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x2].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x3].v.ob[1] = 18 - (temp_v0 * 2.3);
+ D_800DDBB4[playerId][arg3 + 0x4].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x7].v.ob[1] = 9 - temp_v0;
}
/**
* Seems to stretch/warp a specific players texture for a
* short period of time. Perhaps does not do anything
**/
-void func_80022D60(UNUSED Player *player, s8 arg1, UNUSED s8 arg2, s8 arg3) {
- D_800DDBB4[arg1][arg3].v.ob[1] = 21;
- D_800DDBB4[arg1][arg3 + 0x3].v.ob[1] = 21;
+void func_80022D60(UNUSED Player *player, s8 playerId, UNUSED s8 screenId, s8 arg3) {
+ D_800DDBB4[playerId][arg3].v.ob[1] = 21;
+ D_800DDBB4[playerId][arg3 + 0x3].v.ob[1] = 21;
}
void func_80022DB4(Player *player, UNUSED s8 arg1) {
@@ -1106,15 +1097,15 @@ void func_80022DB4(Player *player, UNUSED s8 arg1) {
player->unk_DB4.unk18 = temp_v0;
}
-void func_80022E84(Player *player, s8 arg1, UNUSED s8 arg2, s8 arg3) {
+void func_80022E84(Player *player, s8 playerId, UNUSED s8 screenId, s8 arg3) {
s16 temp_v0 = player->unk_DB4.unk1E;
- D_800DDBB4[arg1][arg3 + 0x0].v.ob[1] = 18 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x1].v.ob[1] = 9 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x2].v.ob[1] = 9 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x3].v.ob[1] = 18 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x4].v.ob[1] = 9 - temp_v0;
- D_800DDBB4[arg1][arg3 + 0x7].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x0].v.ob[1] = 18 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x1].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x2].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x3].v.ob[1] = 18 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x4].v.ob[1] = 9 - temp_v0;
+ D_800DDBB4[playerId][arg3 + 0x7].v.ob[1] = 9 - temp_v0;
}
/**
@@ -1316,18 +1307,18 @@ void func_800235AC(Player *player, s8 arg1) {
}
}
-void func_80023BF0(Player *player, s8 arg1, s8 arg2, s8 arg3) {
+void func_80023BF0(Player *player, s8 playerId, s8 screenId, s8 arg3) {
if (((player->effects & HIT_EFFECT) == HIT_EFFECT) || ((player->effects & 0x8000000) == 0x8000000)) {
- func_80022CA8(player, arg1, arg2, arg3);
+ func_80022CA8(player, playerId, screenId, arg3);
} else {
- func_80022E84(player, arg1, arg2, arg3);
+ func_80022E84(player, playerId, screenId, arg3);
}
if ((player->unk_0CA & 2) == 2) {
- func_80022D60(player, arg1, arg2, arg3);
+ func_80022D60(player, playerId, screenId, arg3);
}
}
-void render_player_shadow(Player *player, s8 arg1, s8 arg2) {
+void render_player_shadow(Player *player, s8 playerId, s8 screenId) {
Mat4 sp118;
UNUSED Mat4 pad;
Vec3f spCC;
@@ -1340,7 +1331,7 @@ void render_player_shadow(Player *player, s8 arg1, s8 arg2) {
UNUSED Vec3f pad2;
f32 var_f2;
- temp_t9 = (u16)(player->unk_048[arg2] + player->rotation[1] + player->unk_0C0) / 128; // << 7) & 0xFFFF;
+ temp_t9 = (u16)(player->unk_048[screenId] + player->rotation[1] + player->unk_0C0) / 128; // << 7) & 0xFFFF;
spC0 = -player->rotation[1] - player->unk_0C0;
spB0 = -coss(temp_t9 << 7) * 2;
@@ -1379,9 +1370,9 @@ void render_player_shadow(Player *player, s8 arg1, s8 arg2) {
mtxf_translate_rotate(sp118, spCC, spC4);
mtxf_scale2(sp118, gCharacterSize[player->characterId] * player->size);
}
- convert_to_fixed_point_matrix(&gGfxPool->mtxShadow[arg1 + (arg2 * 8)], sp118);
+ convert_to_fixed_point_matrix(&gGfxPool->mtxShadow[playerId + (screenId * 8)], sp118);
- gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxShadow[arg1 + (arg2 * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxShadow[playerId + (screenId * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, D_0D008D58);
gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE);
@@ -1454,7 +1445,7 @@ void render_player_shadow_credits(Player *player, s8 playerId, s8 arg2) {
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
-void kart_render(Player *player, s8 playerId, s8 screenId, s8 arg3) {
+void render_kart(Player *player, s8 playerId, s8 screenId, s8 arg3) {
UNUSED s32 pad;
Mat4 sp1A4;
UNUSED s32 pad2[17];
@@ -1497,16 +1488,16 @@ void kart_render(Player *player, s8 playerId, s8 screenId, s8 arg3) {
}
}
#ifdef AVOID_UB
- gPlayerPalette = &D_802F1F80[D_801651D0[screenId][playerId]][screenId][playerId];
+ gPlayerPalette = &gPlayerPalettesList[D_801651D0[screenId][playerId]][screenId][playerId];
#else
- gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[D_801651D0[screenId][playerId]][screenId][playerId * 0x100];
+ gPlayerPalette = (struct_D_802F1F80 *) &gPlayerPalettesList[D_801651D0[screenId][playerId]][screenId][playerId * 0x100];
#endif
if ((screenId == 0) || (screenId == 1)) {
- sKartUpperTexture = D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array;
- //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0x7C0];
+ sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0];
+ // sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0x7C0];
} else {
- sKartUpperTexture = D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array;
- //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0x7C0];
+ sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0];
+ // sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0x7C0];
}
mtxf_translate_rotate(sp1A4, sp154, sp14C);
mtxf_scale2(sp1A4, gCharacterSize[player->characterId] * player->size);
@@ -1590,7 +1581,7 @@ void kart_render(Player *player, s8 playerId, s8 screenId, s8 arg3) {
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
}
-void ghost_render(Player *player, s8 playerId, s8 arg2, s8 arg3) {
+void render_ghost(Player *player, s8 playerId, s8 screenId, s8 arg3) {
UNUSED s32 pad;
Mat4 sp12C;
UNUSED s32 pad2[17];
@@ -1603,38 +1594,38 @@ void ghost_render(Player *player, s8 playerId, s8 arg2, s8 arg3) {
s16 spC2;
s16 thing;
- if (arg2) {}
+ if (screenId) {}
if (D_8015F890 == 1) {
spC2 = 0x00FF;
} else {
spC2 = 0x0070;
}
- thing = (u16)(player->unk_048[arg2] - player->rotation[1]);
+ thing = (u16)(player->unk_048[screenId] - player->rotation[1]);
spD4[0] = (-(s16)(sins(thing) * (0.0f * 0.0f)) * 0.8);
- spD4[1] = player->unk_048[arg2];
- spD4[2] = player->unk_050[arg2];
- func_80062B18(&spD0, &spCC, &spC8, 0, 1.5f, 0, -player->unk_048[arg2], player->unk_050[arg2]);
+ spD4[1] = player->unk_048[screenId];
+ spD4[2] = player->unk_050[screenId];
+ func_80062B18(&spD0, &spCC, &spC8, 0, 1.5f, 0, -player->unk_048[screenId], player->unk_050[screenId]);
spDC[1] = (player->pos[1] - player->boundingBoxSize) + (spCC - 2.0);
spDC[0] = player->pos[0] + spD0;
spDC[2] = player->pos[2] + spC8;
#ifdef AVOID_UB
- gPlayerPalette = &D_802F1F80[D_801651D0[arg2][playerId]][arg2][playerId];
+ gPlayerPalette = &gPlayerPalettesList[D_801651D0[screenId][playerId]][screenId][playerId];
#else
- gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[D_801651D0[arg2][playerId]][arg2][playerId * 0x100];
+ gPlayerPalette = (struct_D_802F1F80 *) &gPlayerPalettesList[D_801651D0[screenId][playerId]][screenId][playerId * 0x100];
#endif
- if ((arg2 == 0) || (arg2 == 1)) {
- sKartUpperTexture = D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2][playerId].pixel_index_array;
- //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2][playerId].pixel_index_array[0x7C0];
+ if ((screenId == 0) || (screenId == 1)) {
+ sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0];
+ // sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0x7C0];
} else {
- sKartUpperTexture = D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array;
- //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array[0x7C0];
+ sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0];
+ // sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0x7C0];
}
mtxf_translate_rotate(sp12C, spDC, spD4);
mtxf_scale2(sp12C, gCharacterSize[player->characterId] * player->size);
- convert_to_fixed_point_matrix(&gGfxPool->mtxKart[playerId + (arg2 * 8)], sp12C);
+ convert_to_fixed_point_matrix(&gGfxPool->mtxKart[playerId + (screenId * 8)], sp12C);
- gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (arg2 * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (screenId * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, common_setting_render_character);
gDPLoadTLUT_pal256(gDisplayListHead++, gPlayerPalette);
gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16);
@@ -1661,7 +1652,7 @@ void ghost_render(Player *player, s8 playerId, s8 arg2, s8 arg3) {
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
}
-void func_80025DE8(Player *player, s8 playerId, s8 arg2, s8 arg3) {
+void func_80025DE8(Player *player, s8 playerId, s8 screenId, s8 arg3) {
Mat4 spA8;
Vec3f sp9C;
Vec3s sp94;
@@ -1670,8 +1661,8 @@ void func_80025DE8(Player *player, s8 playerId, s8 arg2, s8 arg3) {
sp9C[1] = ((player->pos[1] - player->boundingBoxSize) + player->unk_108) + 0.1;
sp9C[2] = player->pos[2] + (coss(-player->rotation[1]) * -1.5);
sp94[0] = -0x00B6;
- sp94[1] = player->unk_048[arg2];
- sp94[2] = player->unk_050[arg2];
+ sp94[1] = player->unk_048[screenId];
+ sp94[2] = player->unk_050[screenId];
mtxf_translate_rotate(spA8, sp9C, sp94);
mtxf_scale2(spA8, gCharacterSize[player->characterId] * player->size);
@@ -1703,18 +1694,18 @@ void func_80025DE8(Player *player, s8 playerId, s8 arg2, s8 arg3) {
gMatrixEffectCount += 1;
}
-void player_ice_reflection_render(Player *player, s8 playerId, s8 arg2, s8 arg3) {
+void render_player_ice_reflection(Player *player, s8 playerId, s8 screenId, s8 arg3) {
Mat4 spA8;
Vec3f sp9C;
Vec3s sp94;
sp94[0] = 0;
- sp94[1] = player->unk_048[arg2];
- sp94[2] = player->unk_050[arg2] + 0x8000; // invert Y
+ sp94[1] = player->unk_048[screenId];
+ sp94[2] = player->unk_050[screenId] + 0x8000; // invert Y
sp9C[0] = player->pos[0];
sp9C[1] = player->unk_074 + (4.0f * player->size);
sp9C[2] = player->pos[2];
- if (!(player->unk_002 & (4 << (arg2 * 4)))) {
+ if (!(player->unk_002 & (4 << (screenId * 4)))) {
arg3 = 8;
} else {
arg3 = 0;
@@ -1755,7 +1746,7 @@ void render_player(Player *player, s8 playerId, s8 screenId) {
s32 var_v1;
OSMesg *sp34;
- func_80026B4C(player, playerId, screenId, D_801651D0[screenId][playerId]);
+ update_wheel_palette(player, playerId, screenId, D_801651D0[screenId][playerId]);
if (!(player->unk_002 & (4 << (screenId * 4)))) {
var_v1 = 0;
} else {
@@ -1773,13 +1764,13 @@ void render_player(Player *player, s8 playerId, s8 screenId) {
}
}
if ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB) {
- kart_render(player, playerId, screenId, var_v1);
+ render_kart(player, playerId, screenId, var_v1);
} else {
- ghost_render(player, playerId, screenId, var_v1);
+ render_ghost(player, playerId, screenId, var_v1);
}
osRecvMesg(&gDmaMesgQueue, (OSMesg *) &sp34, OS_MESG_BLOCK);
if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->surfaceType == ICE) && ((player->unk_0CA & 1) != 1) && (player->collision.surfaceDistance[2] <= 30.0f)) {
- player_ice_reflection_render(player, playerId, screenId, var_v1);
+ render_player_ice_reflection(player, playerId, screenId, var_v1);
}
if (player->boostPower >= 2.0f) {
func_80025DE8(player, playerId, screenId, var_v1);
@@ -1810,40 +1801,40 @@ void func_80026A48(Player *player, s8 arg1) {
// Properly define struct pointers, see buffers.h comment for more information.
#ifdef AVOID_UB
-#define D_802F1F80_WHEEL(a, b, c) &D_802F1F80[a][b][c].wheel_palette
+#define D_802F1F80_WHEEL(a, b, c) &gPlayerPalettesList[a][b][c].wheel_palette
#else
-#define D_802F1F80_WHEEL(a, b, c) &D_802F1F80[a][b][(c * 0x100) + 0xC0]
+#define D_802F1F80_WHEEL(a, b, c) &gPlayerPalettesList[a][b][(c * 0x100) + 0xC0]
#endif
-void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) {
- s16 temp_t0 = D_801650D0[screenId][playerId];
- s16 temp_t1 = D_80165110[screenId][playerId];
+void update_wheel_palette(Player *player, s8 playerId, s8 screenId, s8 arg3) {
+ s16 frameId = gLastAnimFrameSelector[screenId][playerId];
+ s16 groupId = gLastAnimGroupSelector[screenId][playerId];
s16 temp_t2 = player->unk_240;
s16 temp_num = 0x40; // setting this as a variable gets rid of regalloc
u8 character = player->characterId;
- u32 wheel0 = (D_800DDE34[player->characterId][temp_t1]);
- u32 wheel1 = (D_800DDE54[player->characterId][temp_t1]);
+ u32 wheel0 = (D_800DDE34[player->characterId][groupId]);
+ u32 wheel1 = (D_800DDE54[player->characterId][groupId]);
if (((player->effects & 0x4000) == 0x4000) && ((player->type & PLAYER_START_SEQUENCE) == 0)) {
if (((player->effects & 0x80) != 0x80) && ((player->effects & 0x40) != 0x40)
&& ((player->effects & 0x20000) != 0x20000) && ((player->effects & 0x80000) != 0x80000)
&& ((player->effects & 0x800000) != 0x800000) && ((player->unk_044 & 0x800) == 0)) {
- if (temp_t0 <= 20) {
- int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ if (frameId <= 20) {
+ int32_t offset = (((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
- int32_t offset = (((((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) ) + 0x600)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ int32_t offset = (((((frameId - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) ) + 0x600)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
} else {
- if (temp_t0 == 0) {
- int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ if (frameId == 0) {
+ int32_t offset = (((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
- int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ int32_t offset = (((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
}
} else {
@@ -1854,36 +1845,36 @@ void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) {
//printf("---start---\n");
- if (temp_t0 <= 20) {
- int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
-//printf("OFFSET VAL 0x%X\n", ((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)));
+ if (frameId <= 20) {
+ int32_t offset = (((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
+//printf("OFFSET VAL 0x%X\n", ((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)));
//printf("OFFSET IDX %d\n", offset);
- func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ load_player_data_non_blocking(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
// printf("wheel1\n");
-// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600)), temp_t0, temp_num, temp_t2, (temp_t2 >> 8));
-// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel1 + (((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600)), wheel1, temp_t0);
+// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (((frameId - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600)), frameId, temp_num, temp_t2, (temp_t2 >> 8));
+// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel1 + (((frameId - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600)), wheel1, frameId);
// printf("wheel: 0x%X, char: 0x%X, t1: 0x%X\n", wheel1, player->characterId, temp_t1);
- int32_t offset = (((((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40))+ 0x600)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ int32_t offset = (((((frameId - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40))+ 0x600)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
} else {
- if (temp_t0 == 0) {
+ if (frameId == 0) {
// printf("wheel0\n");
-// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40), temp_t0, temp_num, temp_t2, (temp_t2 >> 8));
-// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel0 + ((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), wheel0, temp_t0);
+// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40), frameId, temp_num, temp_t2, (temp_t2 >> 8));
+// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel0 + ((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), wheel0, frameId);
// printf("wheel: 0x%X, char: 0x%X, t1: 0x%X\n", wheel0, player->characterId, temp_t1);
- int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ int32_t offset = (((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
// printf("wheel1_2\n");
-// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40), temp_t0, temp_num, temp_t2, (temp_t2 >> 8));
-// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel1 + ((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), wheel1, temp_t0);
+// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40), frameId, temp_num, temp_t2, (temp_t2 >> 8));
+// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel1 + ((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), wheel1, frameId);
// printf("wheel: 0x%X, char: 0x%X, t1: 0x%X\n", wheel1, player->characterId, temp_t1);
- int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
- func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
+ int32_t offset = (((frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80;
+ load_player_data_non_blocking(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
}
//printf("---end---\n");
diff --git a/src/render_player.h b/src/render_player.h
index c6257f2a0..63e1a3afd 100644
--- a/src/render_player.h
+++ b/src/render_player.h
@@ -14,11 +14,11 @@ void func_8001F9E4(Player*, Camera*, s8);
u16 check_player_camera_collision(Player*, Camera*, f32, f32);
u16 func_8001FD78(Player*, f32, f32, f32);
void init_render_player(Player*, Camera*, s8, s8);
-void func_80020524(void);
-void func_8002088C(void);
-void func_80020BF4(void);
-void func_80020F1C(void);
-void try_render_player(Player*, s8, s8);
+void load_kart_texture_and_render_kart_particle_on_screen_one(void);
+void load_kart_texture_and_render_kart_particle_on_screen_two(void);
+void load_kart_texture_and_render_kart_particle_on_screen_three(void);
+void load_kart_texture_and_render_kart_particle_on_screen_four(void);
+void try_rendering_player(Player*, s8, s8);
void render_players_on_screen_one(void);
void render_players_on_screen_two(void);
void render_players_on_screen_three(void);
@@ -54,13 +54,13 @@ void func_800235AC(Player*, s8);
void func_80023BF0(Player*, s8, s8, s8);
void render_player_shadow(Player*, s8, s8);
void render_player_shadow_credits(Player*, s8, s8);
-void kart_render(Player*, s8, s8, s8);
-void ghost_render(Player*, s8, s8, s8);
+void render_kart(Player*, s8, s8, s8);
+void render_ghost(Player*, s8, s8, s8);
void func_80025DE8(Player*, s8, s8, s8);
-void player_ice_reflection_render(Player*, s8, s8, s8);
+void render_player_ice_reflection(Player*, s8, s8, s8);
void render_player(Player*, s8, s8);
void func_80026A48(Player*, s8);
-void func_80026B4C(Player*, s8, s8, s8);
+void update_wheel_palette(Player*, s8, s8, s8);
void func_80030A34(Player*);
void func_8002701C(void);
void func_80027024(s32, s32, s32);
@@ -70,10 +70,10 @@ void func_80027024(s32, s32, s32);
extern struct_D_802F1F80 *gPlayerPalette;
extern s32 D_80164A28;
-extern s16 D_80164AB0[];
+extern s16 gPlayersToRenderPlayerId[];
extern s16 D_80164ABE[];
-extern s16 D_80164AC0[];
-extern Player *D_80164AD0[];
+extern s16 gPlayersToRenderScreenId[];
+extern Player *gPlayersToRenderPlayer[];
extern s16 gMatrixEffectCount;
extern u16 gPlayerRedEffect[];
extern u16 gPlayerGreenEffect[];
@@ -124,8 +124,8 @@ extern u32 gKartWarioWheels0[];
extern u32 gKartWarioWheels1[];
-extern u32 *D_800DDE34[];
-extern u32 *D_800DDE54[];
+extern u32 *gKartWheels0[];
+extern u32 *gKartWheels1[];
// These all come the kart data stuff, they should end up in their own inc.c eventually
@@ -276,8 +276,8 @@ extern u32 *D_800DDE54[];
extern s16 D_80165020[40];
extern Vec3f D_80165070[8];
-extern s16 D_801650D0[4][8];
-extern s16 D_80165110[4][8];
+extern s16 gLastAnimFrameSelector[4][8];
+extern s16 gLastAnimGroupSelector[4][8];
extern s16 D_80165150[4][8];
extern s16 D_80165190[4][8];
extern s16 D_801651D0[4][8];
diff --git a/src/save.h b/src/save.h
index aadba2660..1fe150af8 100644
--- a/src/save.h
+++ b/src/save.h
@@ -2,7 +2,7 @@
#define SAVE_H
#include <libultraship.h>
-#include "common_structs.h"
+#include <common_structs.h>
/* define symbols */
diff --git a/src/spawn_players.c b/src/spawn_players.c
index 7f1547f02..7457c848a 100644
--- a/src/spawn_players.c
+++ b/src/spawn_players.c
@@ -252,14 +252,14 @@ void spawn_player(Player *player, s8 playerIndex, f32 startingRow, f32 startingC
idx = playerIndex;
- D_801650D0[0][idx] = 0;
- D_801650D0[1][idx] = 0;
- D_801650D0[2][idx] = 0;
- D_801650D0[3][idx] = 0;
- D_80165110[0][idx] = 0;
- D_80165110[1][idx] = 0;
- D_80165110[2][idx] = 0;
- D_80165110[3][idx] = 0;
+ gLastAnimFrameSelector[0][idx] = 0;
+ gLastAnimFrameSelector[1][idx] = 0;
+ gLastAnimFrameSelector[2][idx] = 0;
+ gLastAnimFrameSelector[3][idx] = 0;
+ gLastAnimGroupSelector[0][idx] = 0;
+ gLastAnimGroupSelector[1][idx] = 0;
+ gLastAnimGroupSelector[2][idx] = 0;
+ gLastAnimGroupSelector[3][idx] = 0;
D_80165190[0][idx] = 0;
D_80165190[1][idx] = 0;
D_80165190[2][idx] = 0;
@@ -1086,20 +1086,20 @@ void func_8003CD98(Player *player, Camera *camera, s8 playerId, s8 screenId) {
load_kart_palette(player, playerId, screenId, 0);
load_kart_palette(player, playerId, screenId, 1);
load_kart_texture(player, playerId, screenId, screenId, 0);
- //mio0decode((u8 *) &D_802DFB80[0][arg3][playerId], (u8 *) &D_802BFB80.arraySize8[0][arg3][playerId]);
- // This memcpy does not seem to be required for some reason
- //memcpy(&D_802BFB80.arraySize8[0][screenId][playerId], &D_802DFB80[0][screenId][playerId], 0x1000);
+ #ifdef TARGET_N64
+ mio0decode((u8 *) &gEncodedKartTexture[0][screenId][playerId], (u8 *) &D_802BFB80.arraySize8[0][screenId][playerId]);
+ #endif
} else {
load_kart_palette(player, playerId, screenId, 0);
load_kart_palette(player, playerId, screenId, 1);
load_kart_texture(player, (s8) (playerId + 4), screenId, (s8) (screenId - 2), 0);
- //mio0decode((u8 *) &D_802DFB80[0][arg3 - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][arg3 - 2][playerId + 4]);
- // This memcpy does not seem to be required for some reason
- //memcpy(&D_802BFB80.arraySize8[0][screenId - 2][playerId + 4], &D_802DFB80[0][screenId - 2][playerId + 4], 0x1000);
+ #ifdef TARGET_N64
+ mio0decode((u8 *) &gEncodedKartTexture[0][screenId - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][screenId - 2][playerId + 4]);
+ #endif
}
- D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
- D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
+ gLastAnimFrameSelector[screenId][playerId] = player->animFrameSelector[screenId];
+ gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_801651D0[screenId][playerId] = 0;
render_player(player, playerId, screenId);
diff --git a/src/spawn_players.h b/src/spawn_players.h
index e71325861..baec17a9a 100644
--- a/src/spawn_players.h
+++ b/src/spawn_players.h
@@ -2,7 +2,7 @@
#define SPAWN_PLAYERS_H
#include "camera.h"
-#include "common_structs.h"
+#include <common_structs.h>
/* Function Prototypes */
/** @cond */
diff --git a/src/staff_ghosts.h b/src/staff_ghosts.h
index 321b6aed7..d2321eecb 100644
--- a/src/staff_ghosts.h
+++ b/src/staff_ghosts.h
@@ -2,7 +2,7 @@
#define STAFF_GHOSTS_H
#include <libultraship.h>
-#include "common_structs.h"
+#include <common_structs.h>
void func_80005B18(void);
void func_80004EF0(void);
diff --git a/src/update_objects.c b/src/update_objects.c
index 03d085329..33474c201 100644
--- a/src/update_objects.c
+++ b/src/update_objects.c
@@ -7273,7 +7273,7 @@ void func_80084430(s32 objectIndex, UNUSED s32 arg1) {
func_80086EF0(objectIndex);
object->spline = D_800E672C[0];
set_object_flag_status_true(objectIndex, 0x04000800);
- object->type = func_80004EAC(d_course_sherbet_land_unk_data11, 0);
+ object->type = get_animation_length(d_course_sherbet_land_unk_data11, 0);
func_80072488(objectIndex);
}
@@ -7391,7 +7391,7 @@ void func_800845C8(s32 objectIndex, s32 arg1) {
}
func_80086EF0(objectIndex);
object->unk_034 = 0.0f;
- object->type = func_80004EAC(d_course_sherbet_land_unk_data11, 0);
+ object->type = get_animation_length(d_course_sherbet_land_unk_data11, 0);
func_80072488(objectIndex);
}
@@ -7464,7 +7464,7 @@ void func_80084D2C(s32 objectIndex, s32 arg1) {
gObjectList[objectIndex].unk_09C = 1;
gObjectList[objectIndex].unk_0D8 = 1;
gObjectList[objectIndex].itemDisplay = 0;
- gObjectList[objectIndex].type = func_80004EAC(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8);
+ gObjectList[objectIndex].type = get_animation_length(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8);
func_800726CC(objectIndex, 3);
func_80086FD4(objectIndex);
if (func_80072354(objectIndex, 0x00000020) != 0) {
@@ -7504,7 +7504,7 @@ void func_80084D2C(s32 objectIndex, s32 arg1) {
func_800722A4(objectIndex, 2);
gObjectList[objectIndex].unk_0D8 = 2;
gObjectList[objectIndex].itemDisplay = 0;
- gObjectList[objectIndex].type = func_80004EAC(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8);
+ gObjectList[objectIndex].type = get_animation_length(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8);
func_800726CC(objectIndex, 3);
func_80086FD4(objectIndex);
}
@@ -7513,7 +7513,7 @@ void func_80084D2C(s32 objectIndex, s32 arg1) {
if (func_80072354(objectIndex, 2) != 0) {
gObjectList[objectIndex].unk_0D8 = 0;
gObjectList[objectIndex].itemDisplay = 0;
- gObjectList[objectIndex].type = func_80004EAC(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8);
+ gObjectList[objectIndex].type = get_animation_length(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8);
gObjectList[objectIndex].unk_0C6 += 0x8000;
func_800726CC(objectIndex, 2);
func_8008701C(objectIndex, 1);
@@ -7727,7 +7727,7 @@ void func_80085878(s32 objectIndex, s32 arg1) {
set_obj_origin_offset(objectIndex, temp_v0->posX, temp_v0->posY, temp_v0->posZ);
set_obj_direction_angle(objectIndex, 0U, 0U, 0U);
object->unk_034 = 4.0f;
- object->type = func_80004EAC(d_rainbow_road_unk3, 0);
+ object->type = get_animation_length(d_rainbow_road_unk3, 0);
func_80072488(objectIndex);
}
diff --git a/src/update_objects.h b/src/update_objects.h
index fa3fb49fe..debfcee2d 100644
--- a/src/update_objects.h
+++ b/src/update_objects.h
@@ -1,8 +1,8 @@
#ifndef UPDATE_OBJECTS_H
#define UPDATE_OBJECTS_H
-#include "code_80004740.h"
-#include "common_structs.h"
+#include "animation.h"
+#include <common_structs.h>
#include "camera.h"
#include "objects.h"