From 7d23fcc063bb0067e7e051d98d18622a134d0248 Mon Sep 17 00:00:00 2001 From: Tyler McGavran Date: Mon, 15 Aug 2022 01:47:11 -0400 Subject: [PATCH] Fix some of the memory allocation in framebuffers (#182) * Fix some of the memory allocation in framebuffers Also includes a the questionable change of undoing a previously made match for func_80027A20. The changes made here remove an AVOID_UB usage and (I would argue) is therefore more "correct", but undoing a byte-for-byte match is admittedly bad. Also adds in some header files and updates some not-quite-right decomps to be slighly more accurate. Signed-off-by: Taggerung --- include/common_structs.h | 8 -- include/functions.h | 4 - include/variables.h | 2 - mk64.ld | 33 ++--- permuter_settings.toml | 2 + src/code_8001F980.c | 8 +- src/code_80027040.h | 206 ++++++++++++++++++++++++++++++ src/code_80027D00.h | 2 + src/framebuffers.c | 10 +- src/framebuffers.h | 65 +++++++++- src/kart_dma.c | 266 ++++++--------------------------------- src/spawn_players.c | 255 +++++++++++++++++++------------------ src/staff_ghosts.c | 133 +++++++++++++------- 13 files changed, 546 insertions(+), 448 deletions(-) create mode 100644 src/code_80027040.h diff --git a/include/common_structs.h b/include/common_structs.h index 8ff13c8c0..c39387d29 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -513,14 +513,6 @@ typedef struct /* 0x7F */ u8 checksum; } struct_8018EE10_entry; // size = 0x80 -typedef struct { - char unk_00[0x920]; -} struct_D_802DFB80; // size = 0x920 - -typedef struct { - char unk_00[0x1000]; -} struct_D_802BFB80; - typedef struct { /* 0x00 */ u16 red; /* 0x02 */ u16 green; diff --git a/include/functions.h b/include/functions.h index 6ad785b6e..0b220fa31 100644 --- a/include/functions.h +++ b/include/functions.h @@ -12,10 +12,6 @@ void func_802B6540(f32* arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4); void func_80295BF8(s32 arg0); void func_8005D6C0(Player* player); void func_8006B7E4(Player* player, s32 arg1); -void func_8002D268(Player* player, s32 arg1, s8 arg2, s8 arg3); -void func_8002934C(Player* player, s32 arg1, s8 arg2, s8 arg3); -void func_80027A20(Player* player, s8 arg1, s8 arg2, s32 arg3); -void func_80027040(Player* player, s8 arg1, s8 arg2, s8 arg3, s32 arg4); void func_800267AC(Player* player, s8 arg1, s8 arg2); void func_8005D290(void); // TODO: should rot, arg4, and arg5 be rotx, roty, and rotz? diff --git a/include/variables.h b/include/variables.h index 480b9bc99..0dce0af9d 100644 --- a/include/variables.h +++ b/include/variables.h @@ -91,8 +91,6 @@ extern Mtx D_80183D60[]; extern struct_D_8018CE10 D_8018CE10[]; extern struct_D_802874D8 D_802874D8; -//extern struct_D_802DFB80 D_802DFB80[][8]; -//extern struct_D_802BFB80 D_802BFB80[][8]; //extern struct GfxPool *gGfxPool; // D_8014EF40 diff --git a/mk64.ld b/mk64.ld index 69c7bedc9..ea4c34d25 100644 --- a/mk64.ld +++ b/mk64.ld @@ -344,22 +344,23 @@ SECTIONS } END_SEG(code_8028DF00) - BEGIN_NOLOAD(code_8028DF00) { - BUILD_DIR/src/race_logic.o(.bss); - BUILD_DIR/src/actors.o(.bss); - BUILD_DIR/src/memory.o(.bss); - BUILD_DIR/src/framebuffers.o(.bss*); - BUILD_DIR/src/audio/synthesis.o(.bss*); - BUILD_DIR/asm/bss_audio.o(.bss*); - . = ALIGN(0x8); - BUILD_DIR/asm/bss_sptask_audio.o(.bss); - } - END_NOLOAD(code_8028DF00) - - _code_8028DF00SegmentNoloadSize = SIZEOF(.code_8028DF00.noload) + 0x10; - - _code_8028DF00SegmentNoloadSizeHi = _code_8028DF00SegmentNoloadSize >> 16; - _code_8028DF00SegmentNoloadSizeLo = _code_8028DF00SegmentNoloadSize & 0xFFFF; + BEGIN_NOLOAD(code_8028DF00) + { + BUILD_DIR/src/race_logic.o(.bss); + BUILD_DIR/src/actors.o(.bss); + BUILD_DIR/src/memory.o(.bss); + BUILD_DIR/src/framebuffers.o(.bss*); + BUILD_DIR/src/audio/synthesis.o(.bss*); + BUILD_DIR/asm/bss_audio.o(.bss*); + . = ALIGN(0x8); + BUILD_DIR/asm/bss_sptask_audio.o(.bss); + } + END_NOLOAD(code_8028DF00) + + _code_8028DF00SegmentNoloadSize = SIZEOF(.code_8028DF00.noload) + 0x10; + + _code_8028DF00SegmentNoloadSizeHi = _code_8028DF00SegmentNoloadSize >> 16; + _code_8028DF00SegmentNoloadSizeLo = _code_8028DF00SegmentNoloadSize & 0xFFFF; /* 0x80280000 123640-12AAE0 [74A0] */ BEGIN_SEG(code_80280000, SEG_80280000) diff --git a/permuter_settings.toml b/permuter_settings.toml index b62bcba0f..ae07154b8 100644 --- a/permuter_settings.toml +++ b/permuter_settings.toml @@ -12,3 +12,5 @@ "PHYSICAL_.*" = "unsigned int" "TIME_TRIAL_.*" = "int" "TEXT_.*" = "int" +"OS_.*" = "int" +"SEGMENT_.*" = "int" diff --git a/src/code_8001F980.c b/src/code_8001F980.c index 49148762a..25af500ff 100644 --- a/src/code_8001F980.c +++ b/src/code_8001F980.c @@ -298,13 +298,13 @@ void func_80020524(void) { func_80027560(D_80164AD0[i], D_80164AB0[i], D_80164AC0[i], D_80164AC0[i], D_801651D0[D_80164AC0[i]][D_80164AB0[i]]); - mio0decode(&D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1] * 0x920], - &D_802BFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1] * 0x1000]); + mio0decode(&D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]], + &D_802BFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]]); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - mio0decode(&D_802DFB80[D_801651D0[D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58]]][D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58] * 0x920], - &D_802BFB80[D_801651D0[D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58]]][D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58] * 0x1000]); + mio0decode(&D_802DFB80[D_801651D0[D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58]]][D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58]], + &D_802BFB80[D_801651D0[D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58]]][D_80164ABE[D_800DDB58]][D_80164AAE[D_800DDB58]]); } #ifdef MIPS_TO_C diff --git a/src/code_80027040.h b/src/code_80027040.h new file mode 100644 index 000000000..b19ef62f2 --- /dev/null +++ b/src/code_80027040.h @@ -0,0 +1,206 @@ +#ifndef CODE_80027040_H +#define CODE_80027040_H + +#include "macros.h" +#include "common_structs.h" + +/* Function Prototypes */ + +void func_80027040(Player*, s8, s8, s8, s8); +void func_80027560(Player*, s8, s8, s8, s8); +void func_80027A20(Player*, s8, s8, s8); +void func_80027BDC(UNUSED Player*, s32, void*, u16); +void func_80027C74(UNUSED Player*, s32, void*, u16); + +/* This is where I'd put my static data, if I had any */ + +extern u16 D_800DDEB0[]; + +extern u8 _kart_texturesSegmentRomStart[]; + +extern uintptr_t **gKartMarioTable0[]; +extern uintptr_t **gKartLuigiTable0[]; +extern uintptr_t **gKartYoshiTable0[]; +extern uintptr_t **gKartToadTable0[]; +extern uintptr_t **gKartDKTable0[]; +extern uintptr_t **gKartWarioTable0[]; +extern uintptr_t **gKartPeachTable0[]; +extern uintptr_t **gKartBowserTable0[]; + +extern uintptr_t **gKartMarioTable1[]; +extern uintptr_t **gKartLuigiTable1[]; +extern uintptr_t **gKartYoshiTable1[]; +extern uintptr_t **gKartToadTable1[]; +extern uintptr_t **gKartDKTable1[]; +extern uintptr_t **gKartWarioTable1[]; +extern uintptr_t **gKartPeachTable1[]; +extern uintptr_t **gKartBowserTable1[]; + +extern uintptr_t ***gKartTextureTable0[]; +extern uintptr_t ***gKartTextureTable1[]; + +extern uintptr_t *gKartPalettes[]; + +extern uintptr_t *gKartTextureGroup18s[]; + +extern uintptr_t *gKartMarioGroup8[]; +extern uintptr_t *gKartMarioGroup7[]; +extern uintptr_t *gKartMarioGroup6[]; +extern uintptr_t *gKartMarioGroup5[]; +extern uintptr_t *gKartMarioGroup4[]; +extern uintptr_t *gKartMarioGroup3[]; +extern uintptr_t *gKartMarioGroup2[]; +extern uintptr_t *gKartMarioGroup1[]; +extern uintptr_t *gKartMarioGroup0[]; + +extern uintptr_t *gKartLuigiGroup8[]; +extern uintptr_t *gKartLuigiGroup7[]; +extern uintptr_t *gKartLuigiGroup6[]; +extern uintptr_t *gKartLuigiGroup5[]; +extern uintptr_t *gKartLuigiGroup4[]; +extern uintptr_t *gKartLuigiGroup3[]; +extern uintptr_t *gKartLuigiGroup2[]; +extern uintptr_t *gKartLuigiGroup1[]; +extern uintptr_t *gKartLuigiGroup0[]; + +extern uintptr_t *gKartYoshiGroup8[]; +extern uintptr_t *gKartYoshiGroup7[]; +extern uintptr_t *gKartYoshiGroup6[]; +extern uintptr_t *gKartYoshiGroup5[]; +extern uintptr_t *gKartYoshiGroup4[]; +extern uintptr_t *gKartYoshiGroup3[]; +extern uintptr_t *gKartYoshiGroup2[]; +extern uintptr_t *gKartYoshiGroup1[]; +extern uintptr_t *gKartYoshiGroup0[]; + +extern uintptr_t *gKartToadGroup8[]; +extern uintptr_t *gKartToadGroup7[]; +extern uintptr_t *gKartToadGroup6[]; +extern uintptr_t *gKartToadGroup5[]; +extern uintptr_t *gKartToadGroup4[]; +extern uintptr_t *gKartToadGroup3[]; +extern uintptr_t *gKartToadGroup2[]; +extern uintptr_t *gKartToadGroup1[]; +extern uintptr_t *gKartToadGroup0[]; + +extern uintptr_t *gKartDKGroup8[]; +extern uintptr_t *gKartDKGroup7[]; +extern uintptr_t *gKartDKGroup6[]; +extern uintptr_t *gKartDKGroup5[]; +extern uintptr_t *gKartDKGroup4[]; +extern uintptr_t *gKartDKGroup3[]; +extern uintptr_t *gKartDKGroup2[]; +extern uintptr_t *gKartDKGroup1[]; +extern uintptr_t *gKartDKGroup0[]; + +extern uintptr_t *gKartWarioGroup8[]; +extern uintptr_t *gKartWarioGroup7[]; +extern uintptr_t *gKartWarioGroup6[]; +extern uintptr_t *gKartWarioGroup5[]; +extern uintptr_t *gKartWarioGroup4[]; +extern uintptr_t *gKartWarioGroup3[]; +extern uintptr_t *gKartWarioGroup2[]; +extern uintptr_t *gKartWarioGroup1[]; +extern uintptr_t *gKartWarioGroup0[]; + +extern uintptr_t *gKartPeachGroup8[]; +extern uintptr_t *gKartPeachGroup7[]; +extern uintptr_t *gKartPeachGroup6[]; +extern uintptr_t *gKartPeachGroup5[]; +extern uintptr_t *gKartPeachGroup4[]; +extern uintptr_t *gKartPeachGroup3[]; +extern uintptr_t *gKartPeachGroup2[]; +extern uintptr_t *gKartPeachGroup1[]; +extern uintptr_t *gKartPeachGroup0[]; + +extern uintptr_t *gKartBowserGroup8[]; +extern uintptr_t *gKartBowserGroup7[]; +extern uintptr_t *gKartBowserGroup6[]; +extern uintptr_t *gKartBowserGroup5[]; +extern uintptr_t *gKartBowserGroup4[]; +extern uintptr_t *gKartBowserGroup3[]; +extern uintptr_t *gKartBowserGroup2[]; +extern uintptr_t *gKartBowserGroup1[]; +extern uintptr_t *gKartBowserGroup0[]; + +extern uintptr_t *gKartMarioGroup17[]; +extern uintptr_t *gKartMarioGroup16[]; +extern uintptr_t *gKartMarioGroup15[]; +extern uintptr_t *gKartMarioGroup14[]; +extern uintptr_t *gKartMarioGroup13[]; +extern uintptr_t *gKartMarioGroup12[]; +extern uintptr_t *gKartMarioGroup11[]; +extern uintptr_t *gKartMarioGroup10[]; +extern uintptr_t *gKartMarioGroup9[]; + +extern uintptr_t *gKartLuigiGroup17[]; +extern uintptr_t *gKartLuigiGroup16[]; +extern uintptr_t *gKartLuigiGroup15[]; +extern uintptr_t *gKartLuigiGroup14[]; +extern uintptr_t *gKartLuigiGroup13[]; +extern uintptr_t *gKartLuigiGroup12[]; +extern uintptr_t *gKartLuigiGroup11[]; +extern uintptr_t *gKartLuigiGroup10[]; +extern uintptr_t *gKartLuigiGroup9[]; + +extern uintptr_t *gKartYoshiGroup17[]; +extern uintptr_t *gKartYoshiGroup16[]; +extern uintptr_t *gKartYoshiGroup15[]; +extern uintptr_t *gKartYoshiGroup14[]; +extern uintptr_t *gKartYoshiGroup13[]; +extern uintptr_t *gKartYoshiGroup12[]; +extern uintptr_t *gKartYoshiGroup11[]; +extern uintptr_t *gKartYoshiGroup10[]; +extern uintptr_t *gKartYoshiGroup9[]; + +extern uintptr_t *gKartToadGroup17[]; +extern uintptr_t *gKartToadGroup16[]; +extern uintptr_t *gKartToadGroup15[]; +extern uintptr_t *gKartToadGroup14[]; +extern uintptr_t *gKartToadGroup13[]; +extern uintptr_t *gKartToadGroup12[]; +extern uintptr_t *gKartToadGroup11[]; +extern uintptr_t *gKartToadGroup10[]; +extern uintptr_t *gKartToadGroup9[]; + +extern uintptr_t *gKartDKGroup17[]; +extern uintptr_t *gKartDKGroup16[]; +extern uintptr_t *gKartDKGroup15[]; +extern uintptr_t *gKartDKGroup14[]; +extern uintptr_t *gKartDKGroup13[]; +extern uintptr_t *gKartDKGroup12[]; +extern uintptr_t *gKartDKGroup11[]; +extern uintptr_t *gKartDKGroup10[]; +extern uintptr_t *gKartDKGroup9[]; + +extern uintptr_t *gKartWarioGroup17[]; +extern uintptr_t *gKartWarioGroup16[]; +extern uintptr_t *gKartWarioGroup15[]; +extern uintptr_t *gKartWarioGroup14[]; +extern uintptr_t *gKartWarioGroup13[]; +extern uintptr_t *gKartWarioGroup12[]; +extern uintptr_t *gKartWarioGroup11[]; +extern uintptr_t *gKartWarioGroup10[]; +extern uintptr_t *gKartWarioGroup9[]; + +extern uintptr_t *gKartPeachGroup17[]; +extern uintptr_t *gKartPeachGroup16[]; +extern uintptr_t *gKartPeachGroup15[]; +extern uintptr_t *gKartPeachGroup14[]; +extern uintptr_t *gKartPeachGroup13[]; +extern uintptr_t *gKartPeachGroup12[]; +extern uintptr_t *gKartPeachGroup11[]; +extern uintptr_t *gKartPeachGroup10[]; +extern uintptr_t *gKartPeachGroup9[]; + +extern uintptr_t *gKartBowserGroup17[]; +extern uintptr_t *gKartBowserGroup16[]; +extern uintptr_t *gKartBowserGroup15[]; +extern uintptr_t *gKartBowserGroup14[]; +extern uintptr_t *gKartBowserGroup13[]; +extern uintptr_t *gKartBowserGroup12[]; +extern uintptr_t *gKartBowserGroup11[]; +extern uintptr_t *gKartBowserGroup10[]; +extern uintptr_t *gKartBowserGroup9[]; + +#endif diff --git a/src/code_80027D00.h b/src/code_80027D00.h index 7b9ffff4b..20c604132 100644 --- a/src/code_80027D00.h +++ b/src/code_80027D00.h @@ -14,6 +14,7 @@ void func_800291E8(); void func_800291F0(); void func_800291F8(); void func_80029200(Player*, s8); +void func_8002934C(Player*, Camera*, s8, s8); void func_8002A5F4(Vec3f, f32, Vec3f, f32, f32); void func_8002AAC0(Player*); void func_8002AB70(Player*); @@ -24,6 +25,7 @@ void func_8002B308(Player*, s8, s8); void func_8002B5C0(Player*, s8, s8); void func_8002B830(Player*, s8, s8); void func_8002C11C(Player*); +void func_8002D268(Player*, Camera*, s8, s8); void func_8002E4C4(Player*); void func_80030FC8(Player*); void func_80031F48(Player*, f32); diff --git a/src/framebuffers.c b/src/framebuffers.c index 16a8ebdf6..e28cc49e2 100644 --- a/src/framebuffers.c +++ b/src/framebuffers.c @@ -1,6 +1,7 @@ #include #include "config.h" +#include "framebuffers.h" u16 gRandomSeed16; @@ -8,12 +9,9 @@ u8 randomSeedPadding[216]; u8 frameBufferPadding[22544]; -u8 D_802BFB80[77824]; - -u8 D_802D2B80[32768]; // Luigi raceway course path ghost -u8 D_802DAB80[20480]; -u8 D_802DFB80[2][2][18688]; -u16 D_802F1F80[2][4][2048]; +struct_D_802BFB80 D_802BFB80[2][2][8]; +struct_D_802DFB80 D_802DFB80[2][2][8]; +u32 D_802F1F80[2][4][1024]; u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT]; diff --git a/src/framebuffers.h b/src/framebuffers.h index 42515e3a7..9d6199973 100644 --- a/src/framebuffers.h +++ b/src/framebuffers.h @@ -3,13 +3,68 @@ #include #include "config.h" +#include "common_structs.h" + +/* + * This type could reasonably be called decodedTexture or similar + * These are textures that have been passed through mio0decode + * + * According to http://ultra64.ca/files/documentation/online-manuals/man/app/te/us/tmf.html + * This is technically an array of u32's, but each u32 contains 8/4 pixels depending + * on pixel depth of the texure (4/8 bits respectively) so representing it as u8's should be fine + */ +typedef struct { + u8 pixel_index_array[0x1000]; +} struct_D_802BFB80; // size = 0x1000 + +/* + * Texture prior to be being decoded via mio0decode + * Likely over-sized due to encoded textures having variable size + */ +typedef struct { + char unk_00[0x920]; +} struct_D_802DFB80; // size = 0x920 + +typedef struct { + u16 red:5; + u16 green:5; + u16 blue:5; + u16 alpha:1; +} RGBA5551; + +/* + * This type could reasonably be called activeCharacterPalette or similar + * + * Appears to be a combination of 2 different palettes: + * kart_palette appears to be the palette for all non-wheel elements of the kart (including the driver). + * wheel_palette then is the palette for the wheels + * + * kart_palette does not appear to be used 100% of the time, more testing is needed to figure out what's going on + * wheel_palette changes as you drive around while kart_palette is constant + * + * The term "palette" appears to be synonymous with "texture lookup table (TLUT)", + * at least as far as the N64 texture engine is concerned + * According to http://ultra64.ca/files/documentation/online-manuals/man/app/te/us/tlf.html + * palettes are techinally arrays of u32's, but I feel using a more meaningful data type + * helps with understanding + */ +typedef struct { + /* 0x000 */ RGBA5551 kart_palette[0xC0]; + /* 0x180 */ RGBA5551 wheel_palette[0x40]; +} struct_D_802F1F80; // size = 0x200 extern u16 gRandomSeed16; -extern u8 D_802BFB80[2][2][0x8000]; -extern u8 D_802D2B80[32768]; -extern u8 D_802DAB80[20480]; -extern u8 D_802DFB80[2][2][18688]; -extern u16 D_802F1F80[2][4][2048]; +extern u8 randomSeedPadding[216]; +extern u8 frameBufferPadding[22544]; +extern struct_D_802BFB80 D_802BFB80[][2][8]; +extern struct_D_802DFB80 D_802DFB80[][2][8]; + +/** + * SO + * It would be nice to define D_802F1F80 as ```struct_D_802F1F80 D_802F1F80[2][4][8]```. + * But due to some register allocation issues in func_80027A20 we have to define it in a different manner + **/ +extern u32 D_802F1F80[][4][1024]; extern u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT]; diff --git a/src/kart_dma.c b/src/kart_dma.c index 6761c9706..d4daa2ad6 100644 --- a/src/kart_dma.c +++ b/src/kart_dma.c @@ -1,189 +1,10 @@ #include #include +#include "main.h" +#include "variables.h" +#include "framebuffers.h" #include "common_structs.h" - -extern OSIoMesg gDmaIoMesg; -extern OSMesgQueue gDmaMesgQueue; -extern OSMesg gMainReceivedMesg; - -extern u8 _kart_texturesSegmentRomStart[]; -extern uintptr_t *gKartPalettes[]; - -// arrays? -extern u16 D_802F1F80[2][4][2048]; -extern u8 D_802DFB80[2][2][18688]; - -extern u16 D_800DDEB0[]; -/* -u16 D_800DDEB0[] = { // sizes - 0x06c0, 0x06e0, 0x06e0, 0x0680, 0x07c0, 0x0700, 0x0680, 0x0910 -}; -*/ -extern s32 gActiveScreenMode; - -extern uintptr_t *gKartTextureGroup18s[]; - -extern uintptr_t *gKartMarioGroup8[]; -extern uintptr_t *gKartMarioGroup7[]; -extern uintptr_t *gKartMarioGroup6[]; -extern uintptr_t *gKartMarioGroup5[]; -extern uintptr_t *gKartMarioGroup4[]; -extern uintptr_t *gKartMarioGroup3[]; -extern uintptr_t *gKartMarioGroup2[]; -extern uintptr_t *gKartMarioGroup1[]; -extern uintptr_t *gKartMarioGroup0[]; - -extern uintptr_t *gKartLuigiGroup8[]; -extern uintptr_t *gKartLuigiGroup7[]; -extern uintptr_t *gKartLuigiGroup6[]; -extern uintptr_t *gKartLuigiGroup5[]; -extern uintptr_t *gKartLuigiGroup4[]; -extern uintptr_t *gKartLuigiGroup3[]; -extern uintptr_t *gKartLuigiGroup2[]; -extern uintptr_t *gKartLuigiGroup1[]; -extern uintptr_t *gKartLuigiGroup0[]; - -extern uintptr_t *gKartYoshiGroup8[]; -extern uintptr_t *gKartYoshiGroup7[]; -extern uintptr_t *gKartYoshiGroup6[]; -extern uintptr_t *gKartYoshiGroup5[]; -extern uintptr_t *gKartYoshiGroup4[]; -extern uintptr_t *gKartYoshiGroup3[]; -extern uintptr_t *gKartYoshiGroup2[]; -extern uintptr_t *gKartYoshiGroup1[]; -extern uintptr_t *gKartYoshiGroup0[]; - -extern uintptr_t *gKartToadGroup8[]; -extern uintptr_t *gKartToadGroup7[]; -extern uintptr_t *gKartToadGroup6[]; -extern uintptr_t *gKartToadGroup5[]; -extern uintptr_t *gKartToadGroup4[]; -extern uintptr_t *gKartToadGroup3[]; -extern uintptr_t *gKartToadGroup2[]; -extern uintptr_t *gKartToadGroup1[]; -extern uintptr_t *gKartToadGroup0[]; - -extern uintptr_t *gKartDKGroup8[]; -extern uintptr_t *gKartDKGroup7[]; -extern uintptr_t *gKartDKGroup6[]; -extern uintptr_t *gKartDKGroup5[]; -extern uintptr_t *gKartDKGroup4[]; -extern uintptr_t *gKartDKGroup3[]; -extern uintptr_t *gKartDKGroup2[]; -extern uintptr_t *gKartDKGroup1[]; -extern uintptr_t *gKartDKGroup0[]; - -extern uintptr_t *gKartWarioGroup8[]; -extern uintptr_t *gKartWarioGroup7[]; -extern uintptr_t *gKartWarioGroup6[]; -extern uintptr_t *gKartWarioGroup5[]; -extern uintptr_t *gKartWarioGroup4[]; -extern uintptr_t *gKartWarioGroup3[]; -extern uintptr_t *gKartWarioGroup2[]; -extern uintptr_t *gKartWarioGroup1[]; -extern uintptr_t *gKartWarioGroup0[]; - -extern uintptr_t *gKartPeachGroup8[]; -extern uintptr_t *gKartPeachGroup7[]; -extern uintptr_t *gKartPeachGroup6[]; -extern uintptr_t *gKartPeachGroup5[]; -extern uintptr_t *gKartPeachGroup4[]; -extern uintptr_t *gKartPeachGroup3[]; -extern uintptr_t *gKartPeachGroup2[]; -extern uintptr_t *gKartPeachGroup1[]; -extern uintptr_t *gKartPeachGroup0[]; - -extern uintptr_t *gKartBowserGroup8[]; -extern uintptr_t *gKartBowserGroup7[]; -extern uintptr_t *gKartBowserGroup6[]; -extern uintptr_t *gKartBowserGroup5[]; -extern uintptr_t *gKartBowserGroup4[]; -extern uintptr_t *gKartBowserGroup3[]; -extern uintptr_t *gKartBowserGroup2[]; -extern uintptr_t *gKartBowserGroup1[]; -extern uintptr_t *gKartBowserGroup0[]; - -extern uintptr_t *gKartMarioGroup17[]; -extern uintptr_t *gKartMarioGroup16[]; -extern uintptr_t *gKartMarioGroup15[]; -extern uintptr_t *gKartMarioGroup14[]; -extern uintptr_t *gKartMarioGroup13[]; -extern uintptr_t *gKartMarioGroup12[]; -extern uintptr_t *gKartMarioGroup11[]; -extern uintptr_t *gKartMarioGroup10[]; -extern uintptr_t *gKartMarioGroup9[]; - -extern uintptr_t *gKartLuigiGroup17[]; -extern uintptr_t *gKartLuigiGroup16[]; -extern uintptr_t *gKartLuigiGroup15[]; -extern uintptr_t *gKartLuigiGroup14[]; -extern uintptr_t *gKartLuigiGroup13[]; -extern uintptr_t *gKartLuigiGroup12[]; -extern uintptr_t *gKartLuigiGroup11[]; -extern uintptr_t *gKartLuigiGroup10[]; -extern uintptr_t *gKartLuigiGroup9[]; - -extern uintptr_t *gKartYoshiGroup17[]; -extern uintptr_t *gKartYoshiGroup16[]; -extern uintptr_t *gKartYoshiGroup15[]; -extern uintptr_t *gKartYoshiGroup14[]; -extern uintptr_t *gKartYoshiGroup13[]; -extern uintptr_t *gKartYoshiGroup12[]; -extern uintptr_t *gKartYoshiGroup11[]; -extern uintptr_t *gKartYoshiGroup10[]; -extern uintptr_t *gKartYoshiGroup9[]; - -extern uintptr_t *gKartToadGroup17[]; -extern uintptr_t *gKartToadGroup16[]; -extern uintptr_t *gKartToadGroup15[]; -extern uintptr_t *gKartToadGroup14[]; -extern uintptr_t *gKartToadGroup13[]; -extern uintptr_t *gKartToadGroup12[]; -extern uintptr_t *gKartToadGroup11[]; -extern uintptr_t *gKartToadGroup10[]; -extern uintptr_t *gKartToadGroup9[]; - -extern uintptr_t *gKartDKGroup17[]; -extern uintptr_t *gKartDKGroup16[]; -extern uintptr_t *gKartDKGroup15[]; -extern uintptr_t *gKartDKGroup14[]; -extern uintptr_t *gKartDKGroup13[]; -extern uintptr_t *gKartDKGroup12[]; -extern uintptr_t *gKartDKGroup11[]; -extern uintptr_t *gKartDKGroup10[]; -extern uintptr_t *gKartDKGroup9[]; - -extern uintptr_t *gKartWarioGroup17[]; -extern uintptr_t *gKartWarioGroup16[]; -extern uintptr_t *gKartWarioGroup15[]; -extern uintptr_t *gKartWarioGroup14[]; -extern uintptr_t *gKartWarioGroup13[]; -extern uintptr_t *gKartWarioGroup12[]; -extern uintptr_t *gKartWarioGroup11[]; -extern uintptr_t *gKartWarioGroup10[]; -extern uintptr_t *gKartWarioGroup9[]; - -extern uintptr_t *gKartPeachGroup17[]; -extern uintptr_t *gKartPeachGroup16[]; -extern uintptr_t *gKartPeachGroup15[]; -extern uintptr_t *gKartPeachGroup14[]; -extern uintptr_t *gKartPeachGroup13[]; -extern uintptr_t *gKartPeachGroup12[]; -extern uintptr_t *gKartPeachGroup11[]; -extern uintptr_t *gKartPeachGroup10[]; -extern uintptr_t *gKartPeachGroup9[]; - -extern uintptr_t *gKartBowserGroup17[]; -extern uintptr_t *gKartBowserGroup16[]; -extern uintptr_t *gKartBowserGroup15[]; -extern uintptr_t *gKartBowserGroup14[]; -extern uintptr_t *gKartBowserGroup13[]; -extern uintptr_t *gKartBowserGroup12[]; -extern uintptr_t *gKartBowserGroup11[]; -extern uintptr_t *gKartBowserGroup10[]; -extern uintptr_t *gKartBowserGroup9[]; - - +#include "code_80027040.h" uintptr_t **gKartMarioTable0[] = { gKartMarioGroup8, gKartMarioGroup7, gKartMarioGroup6, @@ -303,31 +124,26 @@ uintptr_t ***gKartTextureTable1[] = { * @param arg4 First buffer index always zero. **/ void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { - - s32 temp; - if (((((((player->unk_0BC & 0x80) == 0x80) || ((player->unk_0BC & 0x40) == 0x40)) || ((player->unk_0BC & 0x80000) == 0x80000)) || - ((player->unk_0BC & 0x800000) == 0x800000)) || ((player->unk_0BC & 0x20000) == 0x20000)) || ((player->unk_044 & 0x800) != 0)) - { - + s32 temp = player->unk_0BC; + if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { if (player->unk_244[arg2] != 0) { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - } else if (((((player->unk_0BC & 0x400) == 0x400) || ((player->unk_0BC & 0x1000000) == 0x1000000)) || - ((player->unk_0BC & 0x2000000) == 0x2000000)) || ((player->unk_0BC & 0x10000) == 0x10000)) - { - - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], 0x780U); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1 * 0x920], 0x900U, &gDmaMesgQueue); + } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780U); + // I think there's something off with the "player->unk_0A8 >> 8" + // I don't like that right-shift + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } } @@ -335,47 +151,43 @@ void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { s32 temp = player->unk_0BC; - if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || - ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) + if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { - if (player->unk_244[arg2] != 0) { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], 0x780); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1 * 0x920], 0x900, &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780); + // I think there's something off with the "player->unk_0A8 >> 8" + // I don't like that right-shift + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); } } void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) { - // @bug: Undefined Behaviour UB - // untested fix. [arg1 << 8] may be a fake match. - #ifdef AVOID_UB - void *temp_s0 = &D_802F1F80[arg3][arg2][0]; - #else - void *temp_s0 = &D_802F1F80[arg3][arg2][arg1 << 8]; - #endif - + // Weird typecasting is being done here. We define D_802F1F80 as a 3-dimensional u32 array, + // but its better to understand it as a 3-dimensional struct_D_802F1F80 array. + struct_D_802F1F80 *temp_s0 = &D_802F1F80[arg3][arg2][arg1 << 7]; switch(gActiveScreenMode) { - case 0: case 1: + case 0: + case 1: case 2: - osInvalDCache(temp_s0, 0x200); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, 0x200, &gDmaMesgQueue); + osInvalDCache(temp_s0, sizeof(struct_D_802F1F80)); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, sizeof(struct_D_802F1F80), &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); break; case 3: - osInvalDCache(temp_s0, 0x200); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, 0x200, &gDmaMesgQueue); + osInvalDCache(temp_s0, sizeof(struct_D_802F1F80)); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, sizeof(struct_D_802F1F80), &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); break; } @@ -383,11 +195,11 @@ void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) { void func_80027BDC(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { osInvalDCache(vAddr, size); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } void func_80027C74(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { osInvalDCache(vAddr, size); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); } diff --git a/src/spawn_players.c b/src/spawn_players.c index 46b10717b..c9d574b6c 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -4,6 +4,8 @@ #include "memory.h" #include "waypoints.h" #include "framebuffers.h" +#include "code_80027040.h" +#include "code_80027D00.h" extern s16 D_80165560[]; extern s32* D_800E3C50[]; @@ -277,10 +279,10 @@ void spawn_player(Player *player, s8 playerIndex, f32 arg2, f32 arg3, f32 arg4, player->boundingBoxCorners[BACK_RIGHT_TYRE].cornerY = 0.0f; player->boundingBoxCorners[BACK_RIGHT_TYRE].cornerZ = 0.0f; - player->boundingBoxCorners[FRONT_LEFT_TYRE].cornerGroundY = 0.0f; + player->boundingBoxCorners[ FRONT_LEFT_TYRE].cornerGroundY = 0.0f; player->boundingBoxCorners[FRONT_RIGHT_TYRE].cornerGroundY = 0.0f; - player->boundingBoxCorners[BACK_LEFT_TYRE].cornerGroundY = 0.0f; - player->boundingBoxCorners[BACK_RIGHT_TYRE].cornerGroundY = 0.0f; + player->boundingBoxCorners[ BACK_LEFT_TYRE].cornerGroundY = 0.0f; + player->boundingBoxCorners[ BACK_RIGHT_TYRE].cornerGroundY = 0.0f; player->unk_110.unk3C = 0.0f; player->unk_110.unk40 = 0.0f; @@ -454,38 +456,38 @@ void func_80039F44(f32 *arg0, f32 *arg1, f32 arg2) { D_8016556E = 0; if (D_800DC51C == 1) { spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU); - spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, D_80165560[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, D_80165560[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, D_80165560[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, D_80165560[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, D_80165560[4], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, D_80165560[5], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, D_80165560[6], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, D_80165560[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, D_80165560[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, D_80165560[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, D_80165560[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, D_80165560[4], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, D_80165560[5], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, D_80165560[6], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); D_80164A28 = 0; } else { spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, D_80165560[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, D_80165560[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, D_80165560[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, D_80165560[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, D_80165560[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, D_80165560[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, D_80165560[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, D_80165560[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, D_80165560[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, D_80165560[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, D_80165560[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, D_80165560[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, D_80165560[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, D_80165560[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 1; } func_80039AE4(); } void func_8003A59C(f32 *arg0, f32 *arg1, f32 arg2) { - spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[5], arg1[5], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[6], arg1[6], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); if (D_800DC51C == 1) { spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU); - spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); } else if (D_8015F890 != 1) { spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); if (D_80162DD4[0] == 0) { @@ -541,9 +543,9 @@ getRand: } spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, D_80165560[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, D_80165560[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, D_80165560[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, D_80165560[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, D_80165560[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, D_80165560[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, D_80165560[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, D_80165560[4], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, D_80165560[5], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); @@ -564,9 +566,9 @@ getRand: void func_8003AE24(f32 *arg0, f32 *arg1, f32 arg2) { spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[5], arg1[5], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[6], arg1[6], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU); if (D_800DC51C == 1) { @@ -586,15 +588,15 @@ void func_8003AE24(f32 *arg0, f32 *arg1, f32 arg2) { void spawn_players_2p_battle(f32 *arg0, f32 *arg1, f32 arg2) { if (gCurrentCourseId == COURSE_BIG_DONUT) { spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, -16384.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 16384.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 16384.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); } else { spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); } spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 0; @@ -602,18 +604,18 @@ void spawn_players_2p_battle(f32 *arg0, f32 *arg1, f32 arg2) { } void func_8003B318(f32 *arg0, f32 *arg1, f32 arg2) { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); if (D_800DC51C == 1) { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU); spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_HUMAN_AND_CPU); } - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 0; @@ -622,17 +624,17 @@ void func_8003B318(f32 *arg0, f32 *arg1, f32 arg2) { void spawn_players_3p_battle(f32 *arg0, f32 *arg1, f32 arg2) { if (gCurrentCourseId == COURSE_BIG_DONUT) { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, -16384.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 16384.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 0.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, -16384.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 16384.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 0.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); } else { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, -16384.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); } - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 0; @@ -640,18 +642,18 @@ void spawn_players_3p_battle(f32 *arg0, f32 *arg1, f32 arg2) { } void func_8003B870(f32 *arg0, f32 *arg1, f32 arg2) { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); if (D_800DC51C == 1) { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU); spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_HUMAN_AND_CPU); - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_HUMAN_AND_CPU); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_HUMAN_AND_CPU); } - spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 0; @@ -660,18 +662,18 @@ void func_8003B870(f32 *arg0, f32 *arg1, f32 arg2) { void spawn_players_4p_battle(f32 *arg0, f32 *arg1, f32 arg2) { if (gCurrentCourseId == COURSE_BIG_DONUT) { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, -16384.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 16384.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 0.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, -16384.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 16384.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 0.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); } else { - spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, -16384.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); - spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 16384.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 16384.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); } - spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); - spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU); + spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU); spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU); D_80164A28 = 0; @@ -679,18 +681,18 @@ void spawn_players_4p_battle(f32 *arg0, f32 *arg1, f32 arg2) { } void func_8003BE30(void) { - spawn_player(gPlayerOne, 0, -2770.774f, -345.187f, -34.6f, 0.0f, gCharacterIdByGPOverallRank[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); - spawn_player(gPlayerTwo, 1, -3691.506f, -6.822f, -6.95f, 36400.0f, gCharacterIdByGPOverallRank[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerOne, 0, -2770.774f, -345.187f, -34.6f, 0.0f, gCharacterIdByGPOverallRank[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerTwo, 1, -3691.506f, -6.822f, -6.95f, 36400.0f, gCharacterIdByGPOverallRank[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); spawn_player(gPlayerThree, 2, -3475.028f, -998.485f, -8.059f, 45500.0f, gCharacterIdByGPOverallRank[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); if (D_802874D8.unk_1D >= 3) { spawn_player(gPlayerFour, 3, -3025.772f, 110.039f, -23.224f, 28210.0f, D_802874D8.unk_1E, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); } else { spawn_player(gPlayerFour, 3, -3025.772f, 110.039f, -23.224f, 28210.0f, gCharacterIdByGPOverallRank[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); } - spawn_player(gPlayerFive, 4, -2770.774f, -345.187f, -34.6f, 0.0f, 0, 0x7000); - spawn_player(gPlayerSix, 5, -3691.506f, -6.822f, -6.95f, 36400.0f, 0, 0x7000); - spawn_player(gPlayerSeven, 6, -3475.028f, -998.485f, -8.059f, 45500.0f, 0, 0x7000); - spawn_player(gPlayerEight, 7, -3025.772f, 110.039f, -23.224f, 28210.0f, 0, 0x7000); + spawn_player(gPlayerFive, 4, -2770.774f, -345.187f, -34.6f, 0.0f, 0, 0x7000); + spawn_player(gPlayerSix, 5, -3691.506f, -6.822f, -6.95f, 36400.0f, 0, 0x7000); + spawn_player(gPlayerSeven, 6, -3475.028f, -998.485f, -8.059f, 45500.0f, 0, 0x7000); + spawn_player(gPlayerEight, 7, -3025.772f, 110.039f, -23.224f, 28210.0f, 0, 0x7000); D_80164A28 = 0; func_80039AE4(); } @@ -988,14 +990,14 @@ void func_8003C0F0(void) { D_80165230[5] = 130.0f; D_80165230[6] = 150.0f; D_80165230[7] = 170.0f; - spawn_player(gPlayerOneCopy, 0, D_80165210[0], D_80165230[0], sp5A, 32768.0f, gCharacterSelections[0], ((1 << 15) | (1 << 13)) | (1 << 14)); - spawn_player(gPlayerTwo, 1, D_80165210[1], D_80165230[1], sp5A, 32768.0f, 1, ((1 << 15) | (1 << 12)) | (1 << 13)); - spawn_player(gPlayerThree, 2, D_80165210[2], D_80165230[2], sp5A, 32768.0f, 2, ((1 << 15) | (1 << 12)) | (1 << 13)); - spawn_player(gPlayerFour, 3, D_80165210[3], D_80165230[3], sp5A, 32768.0f, 3, ((1 << 15) | (1 << 12)) | (1 << 13)); - spawn_player(gPlayerFive, 4, D_80165210[4], D_80165230[4], sp5A, 32768.0f, 4, ((1 << 15) | (1 << 12)) | (1 << 13)); - spawn_player(gPlayerSix, 5, D_80165210[5], D_80165230[5], sp5A, 32768.0f, 5, ((1 << 15) | (1 << 12)) | (1 << 13)); - spawn_player(gPlayerSeven, 6, D_80165210[6], D_80165230[6], sp5A, 32768.0f, 6, ((1 << 15) | (1 << 12)) | (1 << 13)); - spawn_player(gPlayerEight, 7, D_80165210[7], D_80165230[7], sp5A, 32768.0f, 7, ((1 << 15) | (1 << 12)) | (1 << 13)); + spawn_player(gPlayerOneCopy, 0, D_80165210[0], D_80165230[0], sp5A, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN); + spawn_player(gPlayerTwo, 1, D_80165210[1], D_80165230[1], sp5A, 32768.0f, 1, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerThree, 2, D_80165210[2], D_80165230[2], sp5A, 32768.0f, 2, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerFour, 3, D_80165210[3], D_80165230[3], sp5A, 32768.0f, 3, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerFive, 4, D_80165210[4], D_80165230[4], sp5A, 32768.0f, 4, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerSix, 5, D_80165210[5], D_80165230[5], sp5A, 32768.0f, 5, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerSeven, 6, D_80165210[6], D_80165230[6], sp5A, 32768.0f, 6, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); + spawn_player(gPlayerEight, 7, D_80165210[7], D_80165230[7], sp5A, 32768.0f, 7, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE); D_80164A28 = 0; break; } @@ -1016,18 +1018,15 @@ void func_8003CD98(Player *player, struct Camera *camera, s8 arg2, s8 arg3) { } func_8002934C(player, camera, arg3, arg2); if ((arg3 == 0) || (arg3 == 1)) { - s32 idx; - func_80027A20(player, arg2, arg3, 0); func_80027A20(player, arg2, arg3, 1); func_80027040(player, arg2, arg3, arg3, 0); - // mio0decode((u8*)&D_802DFB80[arg3][arg2], (u8*)&D_802BFB80[arg3][arg2]); // [0x8000][0x1000] - mio0decode((u8*)&D_802DFB80[0][0][(arg3 * 0x4900) + (arg2 * 0x920)], (u8*)&D_802BFB80[0][0][(arg3 << 0xF) + (arg2 << 0xC)]); + mio0decode(&D_802DFB80[0][arg3][arg2], &D_802BFB80[0][arg3][arg2]); } else { func_80027A20(player, arg2, arg3, 0); func_80027A20(player, arg2, arg3, 1); func_80027040(player, (s8) (arg2 + 4), arg3, (s8) (arg3 - 2), 0); - mio0decode((u8*)&D_802DFB80[0][0][(arg3 * 0x4900) + (arg2 * 0x920)] - 0x6D80, (u8*)&D_802BFB80[0][0][(arg3 << 0xF) + (arg2 << 0xC)] + 0xFFFF4000); + mio0decode(&D_802DFB80[0][arg3 - 2][arg2 + 4], &D_802BFB80[0][arg3 - 2][arg2 + 4]); } D_801650D0[arg3][arg2] = player->unk_244[arg3]; @@ -1050,7 +1049,7 @@ void func_8003D080(void) { } if (D_800DC51C == 0) { switch (gActiveScreenMode) { - case 0: + case SCREEN_MODE_1P: switch (gModeSelection) { case 0: if (gCurrentCourseId == 10) { @@ -1070,8 +1069,8 @@ void func_8003D080(void) { } break; - case 1: - case 2: + case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: + case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: switch (gModeSelection) { case 0: func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 1, 0); @@ -1093,8 +1092,8 @@ void func_8003D080(void) { } break; - case 3: - if (gModeSelection == 3) { + case SCREEN_MODE_3P_4P_SPLITSCREEN: + if (gModeSelection == BATTLE) { func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 9, 0); ptr++; func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 9, 1); @@ -1119,18 +1118,18 @@ void func_8003D080(void) { } } else { switch (gActiveScreenMode) { - case 0: + case SCREEN_MODE_1P: func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 3, 0); break; - case 1: - case 2: + case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: + case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 3, 0); ptr++; func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 3, 1); break; - case 3: + case SCREEN_MODE_3P_4P_SPLITSCREEN: func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 3, 0); ptr++; func_8001C4D0(ptr->pos[0], ptr->pos[1], ptr->pos[2], ptr->unk_02C[1], 3, 1); @@ -1143,54 +1142,54 @@ void func_8003D080(void) { } switch (gActiveScreenMode) { - case 0: - func_8003CD98(gPlayerOneCopy, camera1, 0, 0); // sic - func_8003CD98(gPlayerTwo, camera1, 1, 0); + case SCREEN_MODE_1P: + func_8003CD98(gPlayerOneCopy, camera1, 0, 0); // sic + func_8003CD98(gPlayerTwo, camera1, 1, 0); func_8003CD98(gPlayerThree, camera1, 2, 0); - func_8003CD98(gPlayerFour, camera1, 3, 0); - func_8003CD98(gPlayerFive, camera1, 4, 0); - func_8003CD98(gPlayerSix, camera1, 5, 0); + func_8003CD98(gPlayerFour, camera1, 3, 0); + func_8003CD98(gPlayerFive, camera1, 4, 0); + func_8003CD98(gPlayerSix, camera1, 5, 0); func_8003CD98(gPlayerSeven, camera1, 6, 0); func_8003CD98(gPlayerEight, camera1, 7, 0); break; - case 1: - case 2: + case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: + case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: func_8003CD98(gPlayerOneCopy, camera1, 0, 0); - func_8003CD98(gPlayerTwo, camera1, 1, 0); - func_8003CD98(gPlayerThree, camera1, 2, 0); - func_8003CD98(gPlayerFour, camera1, 3, 0); - func_8003CD98(gPlayerFive, camera1, 4, 0); - func_8003CD98(gPlayerSix, camera1, 5, 0); - func_8003CD98(gPlayerSeven, camera1, 6, 0); - func_8003CD98(gPlayerEight, camera1, 7, 0); + func_8003CD98(gPlayerTwo, camera1, 1, 0); + func_8003CD98(gPlayerThree, camera1, 2, 0); + func_8003CD98(gPlayerFour, camera1, 3, 0); + func_8003CD98(gPlayerFive, camera1, 4, 0); + func_8003CD98(gPlayerSix, camera1, 5, 0); + func_8003CD98(gPlayerSeven, camera1, 6, 0); + func_8003CD98(gPlayerEight, camera1, 7, 0); func_8003CD98(gPlayerOneCopy, camera2, 0, 1); - func_8003CD98(gPlayerTwo, camera2, 1, 1); - func_8003CD98(gPlayerThree, camera2, 2, 1); - func_8003CD98(gPlayerFour, camera2, 3, 1); - func_8003CD98(gPlayerFive, camera2, 4, 1); - func_8003CD98(gPlayerSix, camera2, 5, 1); - func_8003CD98(gPlayerSeven, camera2, 6, 1); - func_8003CD98(gPlayerEight, camera2, 7, 1); + func_8003CD98(gPlayerTwo, camera2, 1, 1); + func_8003CD98(gPlayerThree, camera2, 2, 1); + func_8003CD98(gPlayerFour, camera2, 3, 1); + func_8003CD98(gPlayerFive, camera2, 4, 1); + func_8003CD98(gPlayerSix, camera2, 5, 1); + func_8003CD98(gPlayerSeven, camera2, 6, 1); + func_8003CD98(gPlayerEight, camera2, 7, 1); break; - case 3: + case SCREEN_MODE_3P_4P_SPLITSCREEN: func_8003CD98(gPlayerOneCopy, camera1, 0, 0); - func_8003CD98(gPlayerTwo, camera1, 1, 0); - func_8003CD98(gPlayerThree, camera1, 2, 0); - func_8003CD98(gPlayerFour, camera1, 3, 0); + func_8003CD98(gPlayerTwo, camera1, 1, 0); + func_8003CD98(gPlayerThree, camera1, 2, 0); + func_8003CD98(gPlayerFour, camera1, 3, 0); func_8003CD98(gPlayerOneCopy, camera2, 0, 1); - func_8003CD98(gPlayerTwo, camera2, 1, 1); - func_8003CD98(gPlayerThree, camera2, 2, 1); - func_8003CD98(gPlayerFour, camera2, 3, 1); + func_8003CD98(gPlayerTwo, camera2, 1, 1); + func_8003CD98(gPlayerThree, camera2, 2, 1); + func_8003CD98(gPlayerFour, camera2, 3, 1); func_8003CD98(gPlayerOneCopy, camera3, 0, 2); - func_8003CD98(gPlayerTwo, camera3, 1, 2); - func_8003CD98(gPlayerThree, camera3, 2, 2); - func_8003CD98(gPlayerFour, camera3, 3, 2); + func_8003CD98(gPlayerTwo, camera3, 1, 2); + func_8003CD98(gPlayerThree, camera3, 2, 2); + func_8003CD98(gPlayerFour, camera3, 3, 2); func_8003CD98(gPlayerOneCopy, camera4, 0, 3); - func_8003CD98(gPlayerTwo, camera4, 1, 3); - func_8003CD98(gPlayerThree, camera4, 2, 3); - func_8003CD98(gPlayerFour, camera4, 3, 3); + func_8003CD98(gPlayerTwo, camera4, 1, 3); + func_8003CD98(gPlayerThree, camera4, 2, 3); + func_8003CD98(gPlayerFour, camera4, 3, 3); break; } } diff --git a/src/staff_ghosts.c b/src/staff_ghosts.c index cfcf1202b..91a7a85a8 100644 --- a/src/staff_ghosts.c +++ b/src/staff_ghosts.c @@ -3,6 +3,7 @@ #include #include #include +#include "framebuffers.h" extern s32 mio0encode(s32 input, s32, s32); extern s32 func_80040174(void *, s32, s32); @@ -51,12 +52,8 @@ s32 D_80162DFC; s32 D_80162E00; -extern u8 D_802BFB80[77824]; -extern u8 *D_802D2B80[32768]; -extern u8 *D_802DAB80[20480]; - -u32 *D_800DC710 = &D_802D2B80[0]; -u32 *D_800DC714 = &D_802DAB80[0]; +u32 *D_800DC710 = &D_802BFB80[0][2][3]; +u32 *D_800DC714 = &D_802BFB80[1][1][3]; extern OSIoMesg *gDmaIoMesg; extern u8 _kart_texturesSegmentRomStart; @@ -87,7 +84,7 @@ extern s32 D_80164394; extern s32 D_80164398; void func_80004EF0(void) { - D_80162DA4 = &D_802D2B80[0]; + D_80162DA4 = &D_802BFB80[0][2][3]; osInvalDCache(&D_80162DA4[0], 0x4000); osPiStartDma(&gDmaIoMesg, 0, 0, (D_80162DC4 & 0xFFFFFF) + &_kart_texturesSegmentRomStart, D_80162DA4, 0x4000, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, 1); @@ -96,13 +93,13 @@ void func_80004EF0(void) { } void func_80004FB0(void) { - D_80162DB4 = &D_802BFB80[(D_80162DD0 << 0xf) + 0x3000]; + D_80162DB4 = &D_802BFB80[0][D_80162DD0][3]; D_80162DAC = *D_80162DB4 & 0xFF0000; D_80162DB0 = 0; } void func_80004FF8(void) { - D_80162D94 = &D_802BFB80[(D_80162DC8 << 0xF) + 0x3000]; + D_80162D94 = &D_802BFB80[0][D_80162DC8][3]; D_80162D8C = (s32) *D_80162D94 & 0xFF0000; D_80162D90 = 0; } @@ -169,7 +166,7 @@ s32 func_800051C4(void) { } void func_8000522C(void) { - D_80162D94 = &D_802BFB80[(D_80162DC8 << 0xF) + 0x3000]; + D_80162D94 = &D_802BFB80[0][D_80162DC8][3]; mio0decode(D_800DC714, D_80162D94); D_80162D8C = (s32) (*D_80162D94 & 0xFF0000); D_80162D90 = 0; @@ -187,7 +184,7 @@ void func_800052A4(void) { D_80162DCC = 0; } temp_v0 = D_80162DB8; - D_80162D80 = (void *) &D_802BFB80[(D_80162DC8 << 0xF) + 0x3000]; + D_80162D80 = (void *) &D_802BFB80[0][D_80162DC8][3]; D_80162D84 = temp_v0; D_80162D86 = temp_v0; } @@ -221,8 +218,8 @@ void func_80005310(void) { } else { D_80162DD8 = 1U; - D_80162DBC = &D_802BFB80[(D_80162DCC << 0xF) + 0x3000]; - *D_80162DBC = 0xFFFFFFFF; + D_80162DBC = &D_802BFB80[0][D_80162DCC][3]; + D_80162DBC[0] = -1; D_80162DB8 = 0; D_80162DDC = 0; func_80091EE4(&D_80162DC0); @@ -483,42 +480,83 @@ void func_80005AE8(Player *ply) { } #ifdef NON_MATCHING +void func_80005B18(void) { + s16 *temp_v0_2; + s16 *temp_v0_3; + s32 temp_v0; + u16 *phi_a3; -void func_80005B18(void) -{ - if (gModeSelection == 1) - { - if (((gLapCountByPlayerId[0] == 3) && (D_80162DDC == 0)) && (D_80162DF8 != 1)) - { - if (D_80162DD4 == (u16)1) - { - D_80162DD0 = D_80162DCC; - func_800052A4(); - D_80162DD4 = 0; - D_80162DDC = 1; - D_80162DE0 = gPlayerOne->characterId; - D_80162DE8 = gPlayerOne->characterId; - D_80162E00 = 0; - D_80162DFC = D_8018CA78; - func_80005AE8(gPlayerTwo); - func_80005AE8(gPlayerThree); - } - else - { - if (gLapCountByPlayerId[4] != 3) - { - D_80162DD0 = D_80162DCC; - func_800052A4(); - D_80162DDC = 1; - D_80162DE0 = gPlayerOne->characterId; - D_80162DFC = D_8018CA78; - D_80162E00 = 0; - D_80162DE8 = gPlayerOne->characterId; - func_80005AE8(gPlayerTwo); - func_80005AE8(gPlayerThree); - return; + if (gModeSelection == TIME_TRIALS) { + temp_v0 = gLapCountByPlayerId[0]; + //phi_a3 = &D_80162DD4; + if ((gLapCountByPlayerId[0] == 3) && (D_80162DDC == 0) && D_80162DF8 != 1) { + //if (D_80162DF8 != 1) { + + if (D_80162DD4 == 1) { + D_80162DD0 = D_80162DCC; + func_800052A4(); //gModeSelection, &D_80162DDC, 3, &D_80162DD4); + D_80162DD4 = 0; + D_80162DDC = 1; + D_80162DE0 = gPlayerOne->characterId; + D_80162DE8 = gPlayerOne->characterId; + D_80162E00 = 0; + D_80162DFC = D_8018CA78; + func_80005AE8(gPlayerTwo); // (u16) &D_80162DDC); + func_80005AE8(gPlayerThree); + + } else { + if (gLapCountByPlayerId[4] != 3) { + D_80162DD0 = D_80162DCC; + func_800052A4(); // gModeSelection, &D_80162DDC, 3, &D_80162DD4); + D_80162DDC = 1; + D_80162DE0 = gPlayerOne->characterId; + D_80162DFC = D_8018CA78; + D_80162E00 = 0; + D_80162DE8 = gPlayerOne->characterId; + func_80005AE8(gPlayerTwo); // (u16) &D_80162DDC); + func_80005AE8(gPlayerThree); + return; + + } + } + D_80162D80 = (void *) &D_802BFB80[0][D_80162DC8][3]; + D_80162D84 = D_80162D86; + D_80162DD0 = D_80162DCC; + D_80162DE8 = gPlayerOne->characterId; + D_80162DD8 = 0; + D_80162DD4 = 0; + D_80162DDC = 1; + func_80005AE8(gPlayerTwo); // (u16) &D_80162DDC, 3, &D_80162DD4); + func_80005AE8(gPlayerThree); + + + return; + } + if ((gLapCountByPlayerId[0] == 3) && (D_80162DDC == 0) && (D_80162DF8 == 1)) { + D_80162D80 = (void *) &D_802BFB80[0][D_80162DC8][3]; + D_80162D84 = D_80162D86; + D_80162DDC = 1; + } + if (( gPlayerOne->unk_000 & PLAYER_CINEMATIC_MODE) == PLAYER_CINEMATIC_MODE) { + func_80005AE8(gPlayerTwo); // (u16) &D_80162DDC, 3, phi_a3); + func_80005AE8(gPlayerThree); + return; + }; + D_80162DEC++; + if (D_80162DEC > 100) { + D_80162DEC = 100; + } + if ((gModeSelection == TIME_TRIALS) && (gActiveScreenMode == 0)) { + if ((D_80162DD4 == 0) && (gLapCountByPlayerId[4] != 3)) { + func_800057DC(); //gModeSelection, &D_80162DDC, 3, &D_80162DD4); + } + if ((D_80162DD6 == 0) && (3 != gLapCountByPlayerId[8])) { + func_8000561C(); + } + if (( gPlayerOne->unk_000 & PLAYER_CINEMATIC_MODE) == 0) { + func_8000599C(); + } } - } D_80162D80 = &D_802BFB80[(D_80162DC8 << 0xF) + 0x3000]; D_80162D84 = D_80162D86; D_80162DD0 = D_80162DCC; @@ -563,7 +601,6 @@ void func_80005B18(void) func_8000599C(); } } - } } #else