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
This commit is contained in:
parent
3781ce2830
commit
e135178097
|
|
@ -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
|
||||
make -j || ./first-diff.py
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ''}")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef WAYPOINTS_H
|
||||
#define WAYPOINTS_H
|
||||
|
||||
#include "common_structs.h"
|
||||
#include <common_structs.h>
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 posX;
|
||||
|
|
|
|||
6
mk64.ld
6
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*);
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef CODE_8003DC40_H
|
||||
#define CODE_8003DC40_H
|
||||
|
||||
#include "common_structs.h"
|
||||
#include <common_structs.h>
|
||||
|
||||
/* Function Prototypes */
|
||||
|
||||
|
|
|
|||
|
|
@ -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,7 +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 (playerId == screenId) {
|
||||
func_8006D474(player, playerId, screenId);
|
||||
}
|
||||
} else {
|
||||
func_8006D474(player, playerId, screenId);
|
||||
}
|
||||
func_8006DC54(player, playerId, screenId);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
|
@ -6607,7 +6620,7 @@ void func_8006E5AC(Player* player, s8 arg1, s8 arg2) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_8006E634(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) {
|
||||
|
|
@ -6620,20 +6633,7 @@ void func_8006E634(Player* player, s8 arg1, s8 arg2) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_8006E6BC(Player* player, s8 arg1, s8 arg2) {
|
||||
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
|
||||
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
|
||||
if (arg1 == arg2) {
|
||||
func_8006D474(player, arg1, arg2);
|
||||
}
|
||||
} else {
|
||||
func_8006D474(player, arg1, arg2);
|
||||
}
|
||||
func_8006DC54(player, arg1, 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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef EFFECTS_H
|
||||
#define EFFECTS_H
|
||||
|
||||
#include "common_structs.h"
|
||||
#include <common_structs.h>
|
||||
|
||||
/* Function Prototypes */
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef CODE_80280000_H
|
||||
#define CODE_80280000_H
|
||||
|
||||
#include "common_structs.h"
|
||||
#include <common_structs.h>
|
||||
|
||||
/* Function Prototypes */
|
||||
|
||||
|
|
|
|||
379
src/kart_dma.c
379
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);
|
||||
} else {
|
||||
osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
|
||||
osInvalDCache(&gEncodedKartTexture[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);
|
||||
#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(&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];
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
} else {
|
||||
osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]);
|
||||
#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
|
||||
);
|
||||
|
||||
// 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);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
#else
|
||||
gEncodedKartTexture[zero][screenId2][playerId].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
|
||||
#endif
|
||||
} else {
|
||||
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]);
|
||||
osInvalDCache(&gEncodedKartTexture[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]];
|
||||
#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]);
|
||||
osInvalDCache(&gEncodedKartTexture[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]];
|
||||
#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]);
|
||||
osInvalDCache(&gEncodedKartTexture[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]];
|
||||
#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
|
||||
// );
|
||||
#ifdef TARGET_N64
|
||||
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);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
#endif
|
||||
}
|
||||
|
||||
void func_80027C74(UNUSED Player *player, const char *texture, void *vAddr, u16 size) {
|
||||
//osInvalDCache(vAddr, size);
|
||||
/**
|
||||
* @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);
|
||||
|
||||
// osPiStartDma(
|
||||
// &gDmaIoMesg,
|
||||
// OS_MESG_PRI_NORMAL,
|
||||
// OS_READ,
|
||||
// (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)],
|
||||
// vAddr,
|
||||
// size,
|
||||
// &gDmaMesgQueue
|
||||
// );
|
||||
#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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) \
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#include "libultra_internal.h"
|
||||
|
||||
#include "PR/os_pi.h"
|
||||
#include <PR/os_pi.h>
|
||||
#include "controller.h"
|
||||
|
||||
OSPifRam __osPfsPifRam;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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++];
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
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
|
||||
}
|
||||
//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);
|
||||
#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);
|
||||
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
|
||||
}
|
||||
//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);
|
||||
#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);
|
||||
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
|
||||
}
|
||||
//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);
|
||||
#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);
|
||||
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_render_player(gPlayerOne, 0U, 0U);
|
||||
try_render_player(gPlayerTwo, 1U, 0U);
|
||||
try_render_player(gPlayerThree, 2U, 0U);
|
||||
try_render_player(gPlayerFour, 3U, 0U);
|
||||
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);
|
||||
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_render_player(gPlayerOne, 0, 1);
|
||||
try_render_player(gPlayerTwo, 1, 1);
|
||||
try_render_player(gPlayerThree, 2, 1);
|
||||
try_render_player(gPlayerFour, 3, 1);
|
||||
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");
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#define SAVE_H
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "common_structs.h"
|
||||
#include <common_structs.h>
|
||||
|
||||
/* define symbols */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#define SPAWN_PLAYERS_H
|
||||
|
||||
#include "camera.h"
|
||||
#include "common_structs.h"
|
||||
#include <common_structs.h>
|
||||
|
||||
/* Function Prototypes */
|
||||
/** @cond */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue