Renames & seg 3 & 5 texture fixes (#19)
* Remove tools/torch * Auto compile torch and extract * Re-implement soh's implementation of lus implementation of an array * Fix static actors in mr * Update * Updated torch * Updated lus * uncomment * Fix collision * Renames * More renaming * Collision Renames * Update collision.c * Collision Documentation (#640) * Collision related renames * Update * update lus * Bug fixes * remove tabs * fixes * fixes * Fix kart textures * Networking * net * Add networking * Update * Cleanup * Fix balloon rendering * Fix lakitu and red shell * fixes * Implement new random system --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
This commit is contained in:
parent
dd5844ab81
commit
532ad5a4c0
|
|
@ -35,6 +35,7 @@
|
|||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
*.log
|
||||
|
||||
# Text editor remnants
|
||||
*.swp
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ endif()
|
|||
|
||||
# Set game compilation version
|
||||
set(VERSION us)
|
||||
set(USE_NETWORKING OFF)
|
||||
set(USE_NETWORKING ON)
|
||||
set(SKIP_XCODE_VERSION_CHECK ON)
|
||||
set(GFX_DEBUG_DISASSEMBLER ON)
|
||||
|
||||
|
|
@ -93,6 +93,7 @@ include_directories(
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/src/buffers
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/audio
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/debug
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/networking
|
||||
)
|
||||
|
||||
# Collect source files to build the executable
|
||||
|
|
@ -130,6 +131,8 @@ file(GLOB_RECURSE ALL_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
|||
"assets/code/*.c"
|
||||
"courses/*.c"
|
||||
"courses/*.h"
|
||||
"src/networking/*.c"
|
||||
"src/networking/*.h"
|
||||
)
|
||||
|
||||
list(APPEND ALL_FILES ${ALL_FILES_ROOT})
|
||||
|
|
@ -321,14 +324,15 @@ else()
|
|||
)
|
||||
endif()
|
||||
|
||||
|
||||
if(USE_NETWORKING)
|
||||
if(MSVC)
|
||||
vcpkg_install_packages(sdl2-net)
|
||||
endif()
|
||||
find_package(SDL2_net REQUIRED)
|
||||
include_directories(${SDL2_NET_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net::SDL2_net)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_NETWORKING)
|
||||
if(MSVC)
|
||||
vcpkg_install_packages(sdl2-net)
|
||||
endif()
|
||||
find_package(SDL2_net REQUIRED)
|
||||
include_directories(${SDL2_NET_INCLUDE_DIRS})
|
||||
#target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net::SDL2_net)
|
||||
#target_compile_definitions(${PROJECT_NAME} PRIVATE USE_NETWORKING)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
|
||||
|
|
@ -336,13 +340,13 @@ target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES
|
|||
if(CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch")
|
||||
|
||||
nx_generate_nacp(Lylat.nacp
|
||||
NAME "${PROJECT_NAME}"
|
||||
AUTHOR "${PROJECT_TEAM}"
|
||||
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
|
||||
NAME "${PROJECT_NAME}"
|
||||
AUTHOR "${PROJECT_TEAM}"
|
||||
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
|
||||
)
|
||||
|
||||
nx_create_nro(${PROJECT_NAME}
|
||||
NACP Lylat.nacp
|
||||
NACP Lylat.nacp
|
||||
)
|
||||
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.nro DESTINATION . COMPONENT ${PROJECT_NAME})
|
||||
|
|
@ -351,6 +355,9 @@ endif()
|
|||
################################################################################
|
||||
# Compile and link options
|
||||
################################################################################
|
||||
|
||||
option(GBI_UCODE "Use F3DEX_GBI" F3DEX_GBI)
|
||||
|
||||
if(MSVC)
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
|
|
@ -542,9 +549,9 @@ endif()
|
|||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(torch
|
||||
PREFIX torch
|
||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}/torch
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/torch
|
||||
PREFIX torch
|
||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}/torch
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/torch
|
||||
)
|
||||
|
||||
ExternalProject_Get_Property(torch install_dir)
|
||||
|
|
@ -560,4 +567,4 @@ add_custom_target(
|
|||
COMMAND ${TORCH_EXECUTABLE} pack assets ship.otr
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/spaghetti.otr" "${CMAKE_BINARY_DIR}/spaghetti.otr"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/ship.otr" "${CMAKE_BINARY_DIR}/ship.otr"
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ glabel func_8000929C
|
|||
/* 009F04 80009304 E7AC004C */ swc1 $f12, 0x4c($sp)
|
||||
/* 009F08 80009308 0C003349 */ jal func_8000CD24
|
||||
/* 009F0C 8000930C AFB80018 */ sw $t8, 0x18($sp)
|
||||
/* 009F10 80009310 3C058016 */ lui $a1, %hi(D_80162FCE) # $a1, 0x8016
|
||||
/* 009F14 80009314 24A52FCE */ addiu $a1, %lo(D_80162FCE) # addiu $a1, $a1, 0x2fce
|
||||
/* 009F10 80009310 3C058016 */ lui $a1, %hi(sSomeNearestWaypoint) # $a1, 0x8016
|
||||
/* 009F14 80009314 24A52FCE */ addiu $a1, %lo(sSomeNearestWaypoint) # addiu $a1, $a1, 0x2fce
|
||||
/* 009F18 80009318 A4A20000 */ sh $v0, ($a1)
|
||||
/* 009F1C 8000931C 84A70000 */ lh $a3, ($a1)
|
||||
/* 009F20 80009320 8FA80030 */ lw $t0, 0x30($sp)
|
||||
|
|
@ -57,8 +57,8 @@ glabel func_8000929C
|
|||
/* 009F50 80009350 AFA40050 */ sw $a0, 0x50($sp)
|
||||
/* 009F54 80009354 0C0023CE */ jal func_80008F38
|
||||
/* 009F58 80009358 E7AC004C */ swc1 $f12, 0x4c($sp)
|
||||
/* 009F5C 8000935C 3C078016 */ lui $a3, %hi(D_80162FCE) # $a3, 0x8016
|
||||
/* 009F60 80009360 84E72FCE */ lh $a3, %lo(D_80162FCE)($a3)
|
||||
/* 009F5C 8000935C 3C078016 */ lui $a3, %hi(sSomeNearestWaypoint) # $a3, 0x8016
|
||||
/* 009F60 80009360 84E72FCE */ lh $a3, %lo(sSomeNearestWaypoint)($a3)
|
||||
/* 009F64 80009364 8FA40050 */ lw $a0, 0x50($sp)
|
||||
/* 009F68 80009368 C7AC004C */ lwc1 $f12, 0x4c($sp)
|
||||
.L8000936C:
|
||||
|
|
@ -321,7 +321,7 @@ glabel func_8000929C
|
|||
/* 00A328 80009728 8FAA0054 */ lw $t2, 0x54($sp)
|
||||
.L8000972C:
|
||||
/* 00A32C 8000972C 3C068016 */ lui $a2, %hi(D_80163448) # 0x8016
|
||||
/* 00A330 80009730 3C038016 */ lui $v1, %hi(D_80162FCE) # 0x8016
|
||||
/* 00A330 80009730 3C038016 */ lui $v1, %hi(sSomeNearestWaypoint) # 0x8016
|
||||
/* 00A334 80009734 95420000 */ lhu $v0, ($t2)
|
||||
/* 00A338 80009738 304B4000 */ andi $t3, $v0, 0x4000
|
||||
/* 00A33C 8000973C 11600020 */ beqz $t3, .L800097C0
|
||||
|
|
@ -335,7 +335,7 @@ glabel func_8000929C
|
|||
/* 00A35C 8000975C 8FA40050 */ lw $a0, 0x50($sp)
|
||||
/* 00A360 80009760 3C068016 */ lui $a2, %hi(D_80163448) # $a2, 0x8016
|
||||
/* 00A364 80009764 15A00013 */ bnez $t5, .L800097B4
|
||||
/* 00A368 80009768 3C038016 */ lui $v1, %hi(D_80162FCE) # $v1, 0x8016
|
||||
/* 00A368 80009768 3C038016 */ lui $v1, %hi(sSomeNearestWaypoint) # $v1, 0x8016
|
||||
/* 00A36C 8000976C 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019
|
||||
/* 00A370 80009770 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6)
|
||||
/* 00A374 80009774 24010002 */ li $at, 2
|
||||
|
|
@ -358,10 +358,10 @@ glabel func_8000929C
|
|||
.L800097B4:
|
||||
/* 00A3B4 800097B4 8CC63448 */ lw $a2, %lo(D_80163448)($a2)
|
||||
/* 00A3B8 800097B8 10000003 */ b .L800097C8
|
||||
/* 00A3BC 800097BC 84632FCE */ lh $v1, %lo(D_80162FCE)($v1)
|
||||
/* 00A3BC 800097BC 84632FCE */ lh $v1, %lo(sSomeNearestWaypoint)($v1)
|
||||
.L800097C0:
|
||||
/* 00A3C0 800097C0 8CC63448 */ lw $a2, %lo(D_80163448)($a2) # 0x3448($a2)
|
||||
/* 00A3C4 800097C4 84632FCE */ lh $v1, %lo(D_80162FCE)($v1)
|
||||
/* 00A3C4 800097C4 84632FCE */ lh $v1, %lo(sSomeNearestWaypoint)($v1)
|
||||
.L800097C8:
|
||||
/* 00A3C8 800097C8 0C002E57 */ jal func_8000B95C
|
||||
/* 00A3CC 800097CC 3065FFFF */ andi $a1, $v1, 0xffff
|
||||
|
|
|
|||
|
|
@ -514,8 +514,8 @@ glabel func_80009B60
|
|||
/* 00AE78 8000A278 1000002C */ b .L8000A32C
|
||||
/* 00AE7C 8000A27C E4700004 */ swc1 $f16, 4($v1)
|
||||
.L8000A280:
|
||||
/* 00AE80 8000A280 3C0F8016 */ lui $t7, %hi(D_80162FCE) # $t7, 0x8016
|
||||
/* 00AE84 8000A284 85EF2FCE */ lh $t7, %lo(D_80162FCE)($t7)
|
||||
/* 00AE80 8000A280 3C0F8016 */ lui $t7, %hi(sSomeNearestWaypoint) # $t7, 0x8016
|
||||
/* 00AE84 8000A284 85EF2FCE */ lh $t7, %lo(sSomeNearestWaypoint)($t7)
|
||||
/* 00AE88 8000A288 3C0B8016 */ lui $t3, %hi(D_801645E0) # $t3, 0x8016
|
||||
/* 00AE8C 8000A28C 8D6B45E0 */ lw $t3, %lo(D_801645E0)($t3)
|
||||
/* 00AE90 8000A290 000F7040 */ sll $t6, $t7, 1
|
||||
|
|
@ -560,7 +560,7 @@ glabel func_80009B60
|
|||
/* 00AF28 8000A328 E5040000 */ swc1 $f4, ($t0)
|
||||
.L8000A32C:
|
||||
/* 00AF2C 8000A32C 8FA400D0 */ lw $a0, 0xd0($sp)
|
||||
/* 00AF30 8000A330 0C004C77 */ jal func_800131DC
|
||||
/* 00AF30 8000A330 0C004C77 */ jal check_ai_crossing_distance
|
||||
/* 00AF34 8000A334 AFA8003C */ sw $t0, 0x3c($sp)
|
||||
/* 00AF38 8000A338 0C0034EE */ jal func_8000D3B8
|
||||
/* 00AF3C 8000A33C 8FA400D0 */ lw $a0, 0xd0($sp)
|
||||
|
|
@ -726,8 +726,8 @@ glabel func_80009B60
|
|||
/* 00B18C 8000A58C 0002C823 */ negu $t9, $v0
|
||||
/* 00B190 8000A590 01981821 */ addu $v1, $t4, $t8
|
||||
/* 00B194 8000A594 A4790000 */ sh $t9, ($v1)
|
||||
/* 00B198 8000A598 3C0F8016 */ lui $t7, %hi(D_80162FCE) # $t7, 0x8016
|
||||
/* 00B19C 8000A59C 85EF2FCE */ lh $t7, %lo(D_80162FCE)($t7)
|
||||
/* 00B198 8000A598 3C0F8016 */ lui $t7, %hi(sSomeNearestWaypoint) # $t7, 0x8016
|
||||
/* 00B19C 8000A59C 85EF2FCE */ lh $t7, %lo(sSomeNearestWaypoint)($t7)
|
||||
/* 00B1A0 8000A5A0 3C0D8016 */ lui $t5, %hi(D_80164430) # $t5, 0x8016
|
||||
/* 00B1A4 8000A5A4 95AD4430 */ lhu $t5, %lo(D_80164430)($t5)
|
||||
/* 00B1A8 8000A5A8 25EA0002 */ addiu $t2, $t7, 2
|
||||
|
|
@ -893,18 +893,18 @@ glabel func_80009B60
|
|||
/* 00B3E8 8000A7E8 10000252 */ b .L8000B134
|
||||
/* 00B3EC 8000A7EC 8FBF0014 */ lw $ra, 0x14($sp)
|
||||
.L8000A7F0:
|
||||
/* 00B3F0 8000A7F0 3C058016 */ lui $a1, %hi(D_80162FCE) # $a1, 0x8016
|
||||
/* 00B3F0 8000A7F0 3C058016 */ lui $a1, %hi(sSomeNearestWaypoint) # $a1, 0x8016
|
||||
/* 00B3F4 8000A7F4 254D0014 */ addiu $t5, $t2, 0x14
|
||||
/* 00B3F8 8000A7F8 AFAD001C */ sw $t5, 0x1c($sp)
|
||||
/* 00B3FC 8000A7FC 0C002DF9 */ jal func_8000B7E4
|
||||
/* 00B400 8000A800 94A52FCE */ lhu $a1, %lo(D_80162FCE)($a1)
|
||||
/* 00B400 8000A800 94A52FCE */ lhu $a1, %lo(sSomeNearestWaypoint)($a1)
|
||||
/* 00B404 8000A804 8FAF0038 */ lw $t7, 0x38($sp)
|
||||
/* 00B408 8000A808 3C0B8016 */ lui $t3, %hi(D_801630B8) # $t3, 0x8016
|
||||
/* 00B40C 8000A80C 256B30B8 */ addiu $t3, %lo(D_801630B8) # addiu $t3, $t3, 0x30b8
|
||||
/* 00B410 8000A810 01EB1821 */ addu $v1, $t7, $t3
|
||||
/* 00B414 8000A814 AC620000 */ sw $v0, ($v1)
|
||||
/* 00B418 8000A818 3C058016 */ lui $a1, %hi(D_80162FCE) # $a1, 0x8016
|
||||
/* 00B41C 8000A81C 94A52FCE */ lhu $a1, %lo(D_80162FCE)($a1)
|
||||
/* 00B418 8000A818 3C058016 */ lui $a1, %hi(sSomeNearestWaypoint) # $a1, 0x8016
|
||||
/* 00B41C 8000A81C 94A52FCE */ lhu $a1, %lo(sSomeNearestWaypoint)($a1)
|
||||
/* 00B420 8000A820 AFA30028 */ sw $v1, 0x28($sp)
|
||||
/* 00B424 8000A824 0C00350E */ jal func_8000D438
|
||||
/* 00B428 8000A828 8FA400D0 */ lw $a0, 0xd0($sp)
|
||||
|
|
@ -1520,7 +1520,7 @@ glabel func_80009B60
|
|||
/* 00BD08 8000B108 3C018016 */ lui $at, %hi(D_80163210)
|
||||
/* 00BD0C 8000B10C 002F0821 */ addu $at, $at, $t7
|
||||
/* 00BD10 8000B110 8FA400D0 */ lw $a0, 0xd0($sp)
|
||||
/* 00BD14 8000B114 0C004C77 */ jal func_800131DC
|
||||
/* 00BD14 8000B114 0C004C77 */ jal check_ai_crossing_distance
|
||||
/* 00BD18 8000B118 E4303210 */ swc1 $f16, %lo(D_80163210)($at)
|
||||
/* 00BD1C 8000B11C 3C058016 */ lui $a1, %hi(D_8016320C) # $a1, 0x8016
|
||||
/* 00BD20 8000B120 8CA5320C */ lw $a1, %lo(D_8016320C)($a1)
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ glabel L8001AFD8
|
|||
/* 01BC94 8001B094 46283280 */ add.d $f10, $f6, $f8
|
||||
/* 01BC98 8001B098 8D86001C */ lw $a2, 0x1c($t4)
|
||||
/* 01BC9C 8001B09C AFA70028 */ sw $a3, 0x28($sp)
|
||||
/* 01BCA0 8001B0A0 0C0AB870 */ jal func_802AE1C0
|
||||
/* 01BCA0 8001B0A0 0C0AB870 */ jal spawn_actor_on_surface
|
||||
/* 01BCA4 8001B0A4 462053A0 */ cvt.s.d $f14, $f10
|
||||
/* 01BCA8 8001B0A8 8FA70028 */ lw $a3, 0x28($sp)
|
||||
/* 01BCAC 8001B0AC 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
||||
|
|
@ -582,7 +582,7 @@ glabel L8001B3B4
|
|||
/* 01C054 8001B454 E4E00028 */ swc1 $f0, 0x28($a3)
|
||||
/* 01C058 8001B458 E4E0002C */ swc1 $f0, 0x2c($a3)
|
||||
/* 01C05C 8001B45C AFA70028 */ sw $a3, 0x28($sp)
|
||||
/* 01C060 8001B460 0C0AB870 */ jal func_802AE1C0
|
||||
/* 01C060 8001B460 0C0AB870 */ jal spawn_actor_on_surface
|
||||
/* 01C064 8001B464 462033A0 */ cvt.s.d $f14, $f6
|
||||
/* 01C068 8001B468 8FA70028 */ lw $a3, 0x28($sp)
|
||||
/* 01C06C 8001B46C 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
||||
|
|
@ -1122,7 +1122,7 @@ glabel L8001BB30
|
|||
/* 01C7F4 8001BBF4 46249180 */ add.d $f6, $f18, $f4
|
||||
/* 01C7F8 8001BBF8 8CE60020 */ lw $a2, 0x20($a3)
|
||||
/* 01C7FC 8001BBFC AFA70028 */ sw $a3, 0x28($sp)
|
||||
/* 01C800 8001BC00 0C0AB870 */ jal func_802AE1C0
|
||||
/* 01C800 8001BC00 0C0AB870 */ jal spawn_actor_on_surface
|
||||
/* 01C804 8001BC04 462033A0 */ cvt.s.d $f14, $f6
|
||||
/* 01C808 8001BC08 8FA70028 */ lw $a3, 0x28($sp)
|
||||
/* 01C80C 8001BC0C C4E8000C */ lwc1 $f8, 0xc($a3)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
#include "courses/toads_turnpike/course_data.h"
|
||||
#include "courses/kalimari_desert/course_data.h"
|
||||
#include "courses/koopa_troopa_beach/course_data.h"
|
||||
#include "courses/luigi_raceway/course_data.h"
|
||||
#include "courses/moo_moo_farm/course_data.h"
|
||||
#include "courses/banshee_boardwalk/course_data.h"
|
||||
#include "courses/dks_jungle_parkway/course_data.h"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,174 +0,0 @@
|
|||
#ifndef LUIGI_RACEWAY_COURSE_DATA_H
|
||||
#define LUIGI_RACEWAY_COURSE_DATA_H
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <libultra/gbi.h>
|
||||
#include <actor_types.h>
|
||||
#include <waypoints.h>
|
||||
#include <course.h>
|
||||
|
||||
extern Gfx d_course_luigi_raceway_dl_0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1A8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_328[];
|
||||
extern Gfx d_course_luigi_raceway_dl_480[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6E0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_868[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9F8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_B48[];
|
||||
extern Gfx d_course_luigi_raceway_dl_D80[];
|
||||
extern Gfx d_course_luigi_raceway_dl_EE8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1058[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1198[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1398[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1538[];
|
||||
extern Gfx d_course_luigi_raceway_dl_16D8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1888[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1B00[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1C78[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1E30[];
|
||||
extern Gfx d_course_luigi_raceway_dl_1FD0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2240[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2348[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2518[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2658[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2860[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2978[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2BC0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2D00[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2F08[];
|
||||
extern Gfx d_course_luigi_raceway_dl_2FF8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_32C0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3408[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3610[];
|
||||
extern Gfx d_course_luigi_raceway_dl_36A8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3928[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3AB0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3C18[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3CA0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_3EB0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4058[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4198[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4240[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4440[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4638[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4720[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4828[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4A18[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4C60[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4CF8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4E38[];
|
||||
extern Gfx d_course_luigi_raceway_dl_4FD8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5220[];
|
||||
extern Gfx d_course_luigi_raceway_dl_52D0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5420[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5558[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5728[];
|
||||
extern Gfx d_course_luigi_raceway_dl_57F8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5940[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5A60[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5BA0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5CB8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5E10[];
|
||||
extern Gfx d_course_luigi_raceway_dl_5F08[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6018[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6150[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6288[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6350[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6400[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6558[];
|
||||
extern Gfx d_course_luigi_raceway_dl_65B0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6608[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6658[];
|
||||
extern Gfx d_course_luigi_raceway_dl_66B8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6708[];
|
||||
extern Gfx d_course_luigi_raceway_dl_67A0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6810[];
|
||||
extern Gfx d_course_luigi_raceway_dl_68C0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6930[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6A00[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6A90[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6B58[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6C40[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6DA0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6EB0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_6FF0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7110[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7248[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7388[];
|
||||
extern Gfx d_course_luigi_raceway_dl_74B0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_75F0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7750[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7928[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7A18[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7BB0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7CD0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7EE8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_7FA0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8158[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8260[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8450[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8508[];
|
||||
extern Gfx d_course_luigi_raceway_dl_86F8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8790[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8958[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8A70[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8CC8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8D68[];
|
||||
extern Gfx d_course_luigi_raceway_dl_8F00[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9058[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9310[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9408[];
|
||||
extern Gfx d_course_luigi_raceway_dl_95A0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_97B0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_99C0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9AD0[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9C50[];
|
||||
extern Gfx d_course_luigi_raceway_dl_9E58[];
|
||||
extern Gfx d_course_luigi_raceway_dl_A028[];
|
||||
extern Gfx d_course_luigi_raceway_dl_A178[];
|
||||
extern Gfx d_course_luigi_raceway_dl_A320[];
|
||||
extern TrackWaypoint d_course_luigi_raceway_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_luigi_raceway_track_waypoints[];
|
||||
extern Vtx d_course_luigi_raceway_basket_model_lod2[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model1[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model2[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model3[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model4[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model5[];
|
||||
extern Lights1 d_course_luigi_raceway_light1;
|
||||
extern Vtx d_course_luigi_raceway_basket_model_lod1[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model6[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model7[];
|
||||
extern Vtx d_course_luigi_raceway_unknown_model8[];
|
||||
extern u8 d_course_luigi_raceway_sign_left[];
|
||||
extern u8 d_course_luigi_raceway_sign_right[];
|
||||
extern u8 d_course_luigi_raceway_balloon_basket[];
|
||||
extern u8 d_course_luigi_raceway_balloon_rope[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F588[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F630[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F640[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F650[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F660[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F718[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F728[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F938[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F948[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F960[];
|
||||
extern Gfx d_course_luigi_raceway_dl_F970[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FA00[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FA10[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FA20[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FA30[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FB10[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FB20[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FBB8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FBC8[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FBE0[];
|
||||
extern Vtx d_course_luigi_raceway_tree_model[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FC70[];
|
||||
extern Gfx d_course_luigi_raceway_dl_FD40[];
|
||||
extern struct ActorSpawnData d_course_luigi_raceway_item_box_spawns[];
|
||||
extern struct ActorSpawnData d_course_luigi_raceway_tree_spawn[];
|
||||
extern TrackSections d_course_luigi_raceway_addr[];
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,363 +1,4 @@
|
|||
#include <libultra/gbi.h>
|
||||
#include "macros.h"
|
||||
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_78[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_108[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_118[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_190[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_208[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_280[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_370[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3E8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_450[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_528[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5A0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_610[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_688[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_700[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_778[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_858[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_938[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A98[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B48[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BD0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C58[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_CE0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_D68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_DF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_E78[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_F00[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_F88[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1000[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1088[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1110[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_11B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1260[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1308[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_13B0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1438[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_14E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1558[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_15E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1688[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1730[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_17E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1848[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_18B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1920[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1988[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1A28[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1AC8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1B28[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1BD8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1C90[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1D00[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1D68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1E10[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1E70[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1F18[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1F90[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_1FF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2050[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_20C0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2130[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_21A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2210[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2280[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_22F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2368[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_23E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2458[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_24E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2560[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_25E8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2658[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_26B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2720[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2798[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2810[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2888[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2900[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2978[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_29F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2A68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2AE0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2B58[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2BC8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2C40[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2CB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2D30[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2DA8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2E20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2E90[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2EF8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_2F60[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3080[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_30F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3170[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_31E8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3260[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_32D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3350[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_33C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3448[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_34C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3548[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_35D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3678[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_36F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3768[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_37E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3858[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_38D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3948[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_39C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3A58[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3AD0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3B38[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3BD0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3C40[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3CF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3D60[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3DD8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3EB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_3FC0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4148[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4330[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4518[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4540[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_45B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_46A0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4860[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4880[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4960[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_49B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4A28[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4B10[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4C28[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4EE8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_4F20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5038[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_51D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_53E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_55E8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5788[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_58A0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_59B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5AB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5BB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5CD0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_5ED8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_60E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6300[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6418[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6558[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_65D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6680[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6728[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_67D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6878[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6920[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_69C0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6A58[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6B00[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6BF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6CA8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6D60[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6E18[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6EF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_6FA8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7050[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_70F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_71A0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7248[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_72F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7398[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7440[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_74F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_75A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7650[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_76F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_77B0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7878[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7940[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_79E8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7A88[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7B80[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7BF8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7C80[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7CF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7D60[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7DD8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7E50[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7EB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7EF8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7F68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_7FE0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8048[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_80B0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8128[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8190[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8200[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8240[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8320[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_83C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_83E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8448[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_84B0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_84C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8528[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_85F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8768[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8788[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_87F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8858[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_88C0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8928[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8990[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_89F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8A58[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8AB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8B18[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8B80[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8BE8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8C50[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8CB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8D20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8D88[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8DE8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8E50[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8EB0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8F18[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8F80[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_8FE8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9098[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9120[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_91A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9230[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_92B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9340[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_93C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9440[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_94B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9530[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_95B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9640[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_96C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9750[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_97D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9860[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_98D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9960[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_99D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9A60[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9AE8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9B70[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9C20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9EC0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9ED0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_9F70[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A010[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A028[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A088[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A0F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A150[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A1B0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A210[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A270[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A2A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A308[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A368[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A3C8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A430[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A490[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A4F8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A558[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A5C0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A620[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A688[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A6E8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A748[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A7A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A810[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A870[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A8D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A930[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_A998[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AA00[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AA68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AAD0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AB38[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_ABA0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AC08[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AC70[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_ACD8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AD40[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_ADA8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AE10[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AE78[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AEE0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AF48[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_AFB0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B010[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B078[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B198[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B200[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B268[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B2D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B338[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B3A0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B408[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B470[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B4D0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B530[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B590[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B600[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B678[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B6D8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B740[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B7A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B810[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B878[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B8E0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B948[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_B9B8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BA20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BA80[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BAF0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BB50[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BBC0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BC20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BC88[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BD68[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BDC8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BE28[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BE88[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BF20[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_BFB8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C050[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C0F0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C1A0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C200[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C260[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C300[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C3A8[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C410[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C4C0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C540[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C5C0[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C640[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C668[];
|
||||
extern Gfx d_course_luigi_raceway_packed_dl_C730[2];
|
||||
|
||||
#define d_course_luigi_raceway_packed_end GET_PACKED_END(d_course_luigi_raceway_packed_dl_C730)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#include <libultra/types.h>
|
||||
#include "course_offsets.h"
|
||||
#include "course_data.h"
|
||||
#include <assets/luigi_raceway_data.h>
|
||||
|
||||
const course_texture luigi_raceway_textures[] = {
|
||||
{gTextureSignShellShot0, 0x038C, 0x1000, 0x0},
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -96,11 +96,11 @@ index 0000000..5569838
|
|||
+#define SENSITIVITY_X 0.0003f
|
||||
+#define SENSITIVITY_Y 0.0003f
|
||||
+
|
||||
+u32 isFlycam = FALSE;
|
||||
+u32 isFlycam = false;
|
||||
+u32 fRankIndex = 0;
|
||||
+u32 fTargetPlayer = FALSE;
|
||||
+u32 fTargetPlayer = false;
|
||||
+u32 fMode; // flycam mode should probably be an enum
|
||||
+u32 fModeInit = FALSE;
|
||||
+u32 fModeInit = false;
|
||||
+
|
||||
+typedef struct {
|
||||
+ Vec3f pos;
|
||||
|
|
@ -217,7 +217,7 @@ index 0000000..5569838
|
|||
+ fState.rot[0] = camera->rot[0];
|
||||
+ fState.rot[1] = camera->rot[1];
|
||||
+ fState.rot[2] = camera->rot[2];
|
||||
+ fModeInit = TRUE;
|
||||
+ fModeInit = true;
|
||||
+}
|
||||
+
|
||||
+void flycam_load_state(Camera *camera) {
|
||||
|
|
@ -365,7 +365,7 @@ index 0000000..5569838
|
|||
+ f32 pitchChange = controller->rawStickY * SENSITIVITY_Y;
|
||||
+ Vec3f forwardVector;
|
||||
+
|
||||
+ func_802ADDC8(&camera->unk_54, 50, camera->pos[0], camera->pos[1], camera->pos[2]);
|
||||
+ check_bounding_collision(&camera->collision, 50, camera->pos[0], camera->pos[1], camera->pos[2]);
|
||||
+
|
||||
+ camera->rot[1] += (short)(yawChange * 65535.0f / (2 * M_PI)); // Convert radians to 0-65535 range
|
||||
+
|
||||
|
|
@ -430,7 +430,7 @@ diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c
|
|||
index c2a84aa..338e2bd 100644
|
||||
--- a/src/racing/render_courses.c
|
||||
+++ b/src/racing/render_courses.c
|
||||
@@ -180,6 +180,11 @@ void load_surface_map(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
|
||||
@@ -180,6 +180,11 @@ void render_course_segments(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
|
||||
arg1->pathCounter = temp_v1;
|
||||
temp_v1 = ((temp_v1 - 1) * 4) + var_a3;
|
||||
|
||||
|
|
|
|||
|
|
@ -139,11 +139,11 @@ typedef struct {
|
|||
/* 0x00 */ u16 unk30;
|
||||
/* 0x02 */ u16 unk32;
|
||||
/* 0x04 */ u16 unk34;
|
||||
/* 0x06 */ u16 unk36;
|
||||
/* 0x08 */ u16 unk38;
|
||||
/* 0x06 */ u16 meshIndexYX;
|
||||
/* 0x08 */ u16 meshIndexZY;
|
||||
// This may be an index to the tilemap?
|
||||
/* 0x0A */ u16 unk3A;
|
||||
/* 0x0C */ Vec3f unk3C;
|
||||
/* 0x0A */ u16 meshIndexZX;
|
||||
/* 0x0C */ Vec3f surfaceDistance; // Appears to be distance from actor to surface for zx, yx, and zy planes.
|
||||
/* 0x18 */ Vec3f unk48;
|
||||
/* 0x24 */ Vec3f unk54;
|
||||
/* 0x30 */ Vec3f orientationVector;
|
||||
|
|
@ -185,7 +185,6 @@ typedef struct {
|
|||
s16 ob[3]; /* x, y, z */
|
||||
s16 tc[2]; /* texture coord */
|
||||
s8 ca[4]; /* color & alpha */
|
||||
|
||||
} CourseVtx;
|
||||
|
||||
/*
|
||||
|
|
@ -203,53 +202,41 @@ typedef struct {
|
|||
//bit 4: 1 = out of bounds
|
||||
//bit 3: 1 = player tumbles upon contact (may fall right through)
|
||||
/* 0x02 */ u16 surfaceType;
|
||||
/* 0x04 */ s16 vtx31;
|
||||
s16 vtx32;
|
||||
s16 vtx33; //X, Y, Z of poly's third vertex
|
||||
s16 vtx21;
|
||||
s16 vtx22;
|
||||
/* 0x0A */ s16 vtx23; //X, Y, Z of poly's second vertex
|
||||
/* 0x10 */ Vtx *vtxPoly1; //pointer to the 3 vertices of this poly
|
||||
Vtx *vtxPoly2;
|
||||
Vtx *vtxPoly3;
|
||||
//unsure why this exists along with a copy of two of the vertices.
|
||||
//both are involved in hit detection.
|
||||
/* 0x1C */ f32 height;
|
||||
//normally 0; read at 0x802AB1A4. this value is added to the height Lakitu
|
||||
//drops you at. changing it seems to make the surface intangible.
|
||||
/* 0x20 */ f32 gravity;
|
||||
//normally 1. The height Lakitu drops you off at is divided by this value
|
||||
//(before adding the value at 0x1C), although if set to zero, he just tries
|
||||
//to drop you at about the height of the finish line banner. Changing it
|
||||
//has various unusual effects, making the polygon intangible or
|
||||
//significantly reducing the gravity above it, probably depending on its Y
|
||||
//position.
|
||||
/* 0x24 */ f32 rotation; //normally about -0.001. no idea what this actually is.
|
||||
/* 0x28 */ f32 height2; //changes Y position of all vertices (but not graphics or
|
||||
//Lakitu drop position). Normally set to (track_height * -1) + about 6.
|
||||
} mk64_surface_map_ram; // size = 0x2C
|
||||
|
||||
// For AABB bounding-box style collision. Box collision is cheaper than checking each vtx.
|
||||
/* 0x04 */ s16 minX; // Minimum x coordinate
|
||||
s16 minY; // Minimum y coordinate
|
||||
s16 minZ; // Minimum z coordinate
|
||||
s16 maxX; // Maximum x coordinate
|
||||
s16 maxY; // Maximum y coordinate
|
||||
/* 0x0A */ s16 maxZ; // Maximum z coordinate
|
||||
// Three vertices to make a triangle
|
||||
/* 0x10 */ Vtx *vtx1;
|
||||
Vtx *vtx2;
|
||||
Vtx *vtx3;
|
||||
// Face normal. Should really be Vec3f normal
|
||||
/* 0x1C */ f32 normalX;
|
||||
/* 0x20 */ f32 normalY;
|
||||
/* 0x24 */ f32 normalZ;
|
||||
/* 0x28 */ f32 distance;
|
||||
} CollisionTriangle; // size = 0x2C
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3f cornerPos;
|
||||
// Type of surface the corner is above
|
||||
/* 0x0C */ u8 surfaceType;
|
||||
// Close to being a copy of the top byte of the surface_map "flag" member
|
||||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ u8 surfaceType; // Surface type that the tyre is touching.
|
||||
/* 0x0D */ u8 surfaceFlags;
|
||||
// Don't know if "tile" is right the right term
|
||||
// gSurfaceMap is a pointer to an array of "tile" structs. This is an index to that array
|
||||
/* 0x0E */ u16 surfaceMapIndex;
|
||||
// cornerPos places the corner "in the air" as it were, this member indicates the Y position of the corner's "on the ground" sibling
|
||||
// On flat ground this value should be cornerY - gKartBoundingBoxTable[characterId]
|
||||
/* 0x10 */ f32 cornerGroundY;
|
||||
/* 0x0E */ u16 collisionMeshIndex; // Index into gCollisionMesh
|
||||
// Height of tyre attached to ground. When flying it floats with the kart.
|
||||
/* 0x10 */ f32 baseHeight;
|
||||
// Something lighting related. 1 when in a shaded region, 2 when in a tree's shadow
|
||||
// 3 when getting crushed by a whomp, but curiously only the front left tyre will ever have this value
|
||||
/* 0x14 */ s32 unk_14;
|
||||
} KartBoundingBoxCorner; // size = 0x18
|
||||
} KartTyre; // size = 0x18
|
||||
|
||||
#define FRONT_LEFT_TYRE 0
|
||||
#define FRONT_RIGHT_TYRE 1
|
||||
#define BACK_LEFT_TYRE 2
|
||||
#define BACK_RIGHT_TYRE 3
|
||||
#define FRONT_LEFT 0
|
||||
#define FRONT_RIGHT 1
|
||||
#define BACK_LEFT 2
|
||||
#define BACK_RIGHT 3
|
||||
|
||||
struct UnkPlayerInner {
|
||||
/* 0xDB4 */ s16 unk0;
|
||||
|
|
@ -343,10 +330,10 @@ typedef struct {
|
|||
/* 0x0108 */ f32 unk_108;
|
||||
/* 0x010C */ s16 unk_10C;
|
||||
/* 0x010E */ char unk_10E[0x2];
|
||||
/* 0x0110 */ Collision unk_110;
|
||||
/* 0x0110 */ Collision collision;
|
||||
/* 0x0150 */ Mat3 unk_150;
|
||||
/* 0x0174 */ Mat3 orientationMatrix;
|
||||
/* 0x0198 */ KartBoundingBoxCorner boundingBoxCorners[4];
|
||||
/* 0x0198 */ KartTyre tyres[4];
|
||||
/* 0x01F8 */ f32 unk_1F8;
|
||||
/* 0x01FC */ f32 unk_1FC;
|
||||
/* 0x0200 */ u32 unk_200; // May be s32. but less casting required if u32
|
||||
|
|
@ -386,17 +373,10 @@ typedef struct {
|
|||
/* 0x0DAC */ f32 unk_DAC;
|
||||
/* 0x0DB0 */ f32 unk_DB0;
|
||||
/* 0x0DB4 */ struct UnkPlayerInner unk_DB4;
|
||||
/* 0x0DB6 */ // s16 unk_DB6;
|
||||
/* 0x0DB8 */ // f32 unk_DB8;
|
||||
/* 0x0DBC */ //f32 unk_DBC;
|
||||
/* 0x0DC0 */ // f32 unk_DC0;
|
||||
/* 0x0DC4 */ // f32 unk_DC4;
|
||||
/* 0x0DC8 */ // f32 unk_DC8;
|
||||
/* 0x0DCC */ // s16 unk_DCC;
|
||||
/* 0x0DCE */ // s16 unk_DCE;
|
||||
/* 0x0DD0 */ // s16 unk_DD0;
|
||||
/* 0x0DD2 */ // s16 unk_DD2;
|
||||
/* 0x0DD4 */ // s16 unk_DD4;
|
||||
u32 nControlFlags; // Is racer human, ai, or networked controlled?
|
||||
s32 nCharacter; // Networked character choice
|
||||
s32 nStartingRank;
|
||||
u32 nHasAuthority;
|
||||
} Player; // size = 0xDD8
|
||||
|
||||
typedef struct
|
||||
|
|
|
|||
|
|
@ -312,7 +312,8 @@ enum ITEMS {
|
|||
/* 0x0C */ ITEM_MUSHROOM,
|
||||
/* 0x0D */ ITEM_DOUBLE_MUSHROOM,
|
||||
/* 0x0E */ ITEM_TRIPLE_MUSHROOM,
|
||||
/* 0x0F */ ITEM_SUPER_MUSHROOM
|
||||
/* 0x0F */ ITEM_SUPER_MUSHROOM,
|
||||
/* 0x0G */ ITEM_MAX,
|
||||
};
|
||||
|
||||
enum KART_AI_BEHAVIOURS {
|
||||
|
|
@ -384,3 +385,16 @@ enum KART_AI_BEHAVIOURS {
|
|||
#define COLOR_BLACK GPACK_RGB888(0, 0, 0)
|
||||
|
||||
#endif // DEFINES_H
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Collision mesh flags
|
||||
*
|
||||
*/
|
||||
|
||||
#define GRID_SIZE 32
|
||||
|
||||
#define FACING_Y_AXIS 0x4000
|
||||
#define FACING_X_AXIS 0x8000
|
||||
#define FACING_Z_AXIS 0x2000
|
||||
|
|
|
|||
|
|
@ -83,6 +83,14 @@
|
|||
// aligns an address to the next 16 bytes
|
||||
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
|
||||
|
||||
// Envelopes are always stored as big endian, to match sequence files which are
|
||||
// byte blobs and can embed envelopes. Hence this byteswapping macro.
|
||||
#if IS_BIG_ENDIAN
|
||||
#define BSWAP16(x) (x)
|
||||
#else
|
||||
#define BSWAP16(x) (((x) & 0xff) << 8 | (((x) >> 8) & 0xff))
|
||||
#endif
|
||||
|
||||
/**
|
||||
* (u8*) dl : Cast array down to u8's
|
||||
* + sizeof(dl) : go to the end of the array
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ typedef struct
|
|||
/* 0x28 */ Vec3f offset;
|
||||
/* 0x34 */ f32 unk_034;
|
||||
/* 0x38 */ Vec3f velocity; // acceleration
|
||||
/* 0x44 */ f32 unk_044;
|
||||
/* 0x44 */ f32 surfaceHeight;
|
||||
/* 0x48 */ s32 unk_048;
|
||||
/* 0x4C */ s32 unk_04C;
|
||||
/* 0x50 */ s32 unk_050;
|
||||
|
|
@ -79,9 +79,9 @@ typedef struct
|
|||
/* 0xDD */ u8 unk_0DD;
|
||||
/* 0xDE */ s8 unk_0DE;
|
||||
/* 0xDF */ u8 unk_0DF;
|
||||
} Objects; // size = 0xE0
|
||||
} Object; // size = 0xE0
|
||||
|
||||
extern Objects gObjectList[];
|
||||
extern Object gObjectList[];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,6 +10,11 @@
|
|||
#define NUM_TRAINS 2
|
||||
#define LOCOMOTIVE_ONLY 0
|
||||
|
||||
#define NUM_CROSSINGS 2
|
||||
// This allows karts to jump the train despite the crossing being activated.
|
||||
// but still stop for the train once it's close
|
||||
#define FRAMES_SINCE_CROSSING_ACTIVATED 240
|
||||
|
||||
// It seems like there's room for 2 Ferries, but only 1 is ever active
|
||||
#define NUM_ACTIVE_PADDLE_BOATS 1
|
||||
#define NUM_PADDLE_BOATS 2
|
||||
|
|
@ -24,6 +29,12 @@
|
|||
#define NUM_TIME_TRIAL_TANKER_TRUCKS (NUM_RACE_TANKER_TRUCKS + 1)
|
||||
#define NUM_TIME_TRIAL_CARS (NUM_RACE_CARS + 1)
|
||||
|
||||
#define TRAIN_SMOKE_RENDER_DISTANCE 2000.0f
|
||||
#define TRAIN_CROSSING_AI_DISTANCE 1000.0f
|
||||
#define BOAT_SMOKE_RENDER_DISTANCE 2000.0f
|
||||
|
||||
#define RENDER_VEHICLE 1
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 isActive; // Only used for Tender and Passenger Cars, unused for Locomotives
|
||||
/* 0x02 */ s16 compilerPadding;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ extern s16 *D_801645A0[];
|
|||
* a given player is on, the specific value may change
|
||||
**/
|
||||
// Shadows values from gNearestWaypointByPlayerId
|
||||
extern s16 D_80162FCE;
|
||||
extern s16 sSomeNearestWaypoint;
|
||||
// Shadows values from gPathIndexByPlayerId
|
||||
extern s32 D_80163448;
|
||||
// Shadows values from D_80164560
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit fccf181b449f82f3e6ae5cdc666319847f78e0a1
|
||||
Subproject commit a5203ea0ea36a0fe059818044f8daa730b119c4d
|
||||
|
|
@ -47,7 +47,7 @@ void update_actor_banana(struct BananaActor *banana) {
|
|||
banana->pos[1] = player->pos[1] - temp_f14 - 2.0f;
|
||||
banana->pos[2] = player->pos[2] - temp_f16;
|
||||
}
|
||||
func_802ADDC8(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
func_802B4E30((struct Actor *) banana);
|
||||
if ((player->type & PLAYER_HUMAN) != 0) {
|
||||
if (gDemoMode) {
|
||||
|
|
@ -99,15 +99,15 @@ void update_actor_banana(struct BananaActor *banana) {
|
|||
if ((banana->pos[2] < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < banana->pos[2]) || (banana->pos[0] < (f32) gCourseMinX) || ((f32) gCourseMaxX < banana->pos[0]) || (banana->pos[1] < (f32) gCourseMinY)) {
|
||||
destroy_destructable_actor((struct Actor *) banana);
|
||||
} else {
|
||||
func_802ADDC8(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
banana->unk30.unk34 = 1;
|
||||
if ((banana->unk30.unk34 != 0) && (banana->unk30.unk3C[2] < 0.0f)) {
|
||||
if ((banana->unk30.unk34 != 0) && (banana->unk30.surfaceDistance[2] < 0.0f)) {
|
||||
someOtherVelocity[0] = -banana->unk30.orientationVector[0];
|
||||
someOtherVelocity[1] = -banana->unk30.orientationVector[1];
|
||||
someOtherVelocity[2] = -banana->unk30.orientationVector[2];
|
||||
banana->pos[0] += someOtherVelocity[0] * banana->unk30.unk3C[2];
|
||||
banana->pos[1] += someOtherVelocity[1] * banana->unk30.unk3C[2];
|
||||
banana->pos[2] += someOtherVelocity[2] * banana->unk30.unk3C[2];
|
||||
banana->pos[0] += someOtherVelocity[0] * banana->unk30.surfaceDistance[2];
|
||||
banana->pos[1] += someOtherVelocity[1] * banana->unk30.surfaceDistance[2];
|
||||
banana->pos[2] += someOtherVelocity[2] * banana->unk30.surfaceDistance[2];
|
||||
banana->flags &= ~0x1000;
|
||||
banana->state = 4;
|
||||
}
|
||||
|
|
@ -137,7 +137,7 @@ void update_actor_banana(struct BananaActor *banana) {
|
|||
banana->pos[1] = unkY - temp_f14 - 2.0f;
|
||||
banana->pos[2] = unkZ - temp_f16;
|
||||
}
|
||||
func_802ADDC8(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
func_802B4E30((struct Actor *) banana);
|
||||
break;
|
||||
case BANANA_BUNCH_BANANA:
|
||||
|
|
@ -159,7 +159,7 @@ void update_actor_banana(struct BananaActor *banana) {
|
|||
banana->pos[2] = elderBanana->pos[2] - temp_f16;
|
||||
}
|
||||
var_f8 = banana->pos[2];
|
||||
func_802ADDC8(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
|
||||
func_802B4E30((struct Actor *) banana);
|
||||
break;
|
||||
case DESTROYED_BANANA:
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ void func_802B3B44(struct ShellActor *shell) {
|
|||
shell->pos[0] += temp_f12_3;
|
||||
shell->pos[1] += temp_f14_2;
|
||||
shell->pos[2] += temp_f16_2;
|
||||
func_802AD950(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
|
||||
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
|
||||
func_802B4E30((struct Actor *) shell);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -142,7 +142,7 @@ void func_802B3E7C(struct ShellActor *shell, Player *player) {
|
|||
if (player->effects & BOO_EFFECT) {
|
||||
destroy_destructable_actor((struct Actor *) shell);
|
||||
} else {
|
||||
func_802AD950(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], newPosition[0], newPosition[1], newPosition[2]);
|
||||
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], newPosition[0], newPosition[1], newPosition[2]);
|
||||
func_802B4E30((struct Actor *) shell);
|
||||
func_802B4104(shell);
|
||||
}
|
||||
|
|
@ -177,11 +177,11 @@ s16 func_802B3FD0(Player *owner, struct ShellActor *shell) {
|
|||
}
|
||||
|
||||
void func_802B4104(struct ShellActor *shell) {
|
||||
if ((shell->unk30.unk3C[0] < 0.0f) && ((shell->unk30.unk48[1] < 0.25f) || (shell->unk30.unk48[1] > -0.25f))) {
|
||||
if ((shell->unk30.surfaceDistance[0] < 0.0f) && ((shell->unk30.unk48[1] < 0.25f) || (shell->unk30.unk48[1] > -0.25f))) {
|
||||
destroy_destructable_actor((struct Actor *) shell);
|
||||
func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
|
||||
shell->flags |= 0x80;
|
||||
} else if ((shell->unk30.unk3C[1] < 0.0f) && ((shell->unk30.unk54[1] < 0.25f) || (shell->unk30.unk54[1] < -0.25f))) {
|
||||
} else if ((shell->unk30.surfaceDistance[1] < 0.0f) && ((shell->unk30.unk54[1] < 0.25f) || (shell->unk30.unk54[1] < -0.25f))) {
|
||||
destroy_destructable_actor((struct Actor *) shell);
|
||||
func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
|
||||
shell->flags |= 0x80;
|
||||
|
|
@ -196,7 +196,7 @@ void func_802B4104(struct ShellActor *shell) {
|
|||
void update_actor_red_blue_shell(struct ShellActor *shell) {
|
||||
UNUSED f32 pad9;
|
||||
Player *player;
|
||||
f32 temp_f0;
|
||||
f32 height;
|
||||
UNUSED f32 temp_f14;
|
||||
f32 temp_f2;
|
||||
s16 temp_v0;
|
||||
|
|
@ -235,7 +235,7 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
switch (shell->state) {
|
||||
case HELD_SHELL:
|
||||
player = &gPlayers[shell->playerId];
|
||||
copy_collision(&player->unk_110, &shell->unk30);
|
||||
copy_collision(&player->collision, &shell->unk30);
|
||||
somePosVel[0] = 0.0f;
|
||||
somePosVel[1] = player->boundingBoxSize;
|
||||
somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f);
|
||||
|
|
@ -243,11 +243,11 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
shell->pos[0] = player->pos[0] + somePosVel[0];
|
||||
pad7 = player->pos[1] - somePosVel[1];
|
||||
shell->pos[2] = player->pos[2] + somePosVel[2];
|
||||
temp_f0 = func_802ABE30(shell->pos[0], pad7, shell->pos[2], player->unk_110.unk3A);
|
||||
temp_f2 = pad7 - temp_f0;
|
||||
height = calculate_surface_height(shell->pos[0], pad7, shell->pos[2], player->collision.meshIndexZX);
|
||||
temp_f2 = pad7 - height;
|
||||
|
||||
if ((temp_f2 < 5.0f) && (temp_f2 > -5.0f)) {
|
||||
shell->pos[1] = shell->boundingBoxSize + temp_f0;
|
||||
shell->pos[1] = shell->boundingBoxSize + height;
|
||||
} else {
|
||||
shell->pos[1] = pad7;
|
||||
}
|
||||
|
|
@ -303,13 +303,13 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
}
|
||||
if (shell->state == MOVING_SHELL) {
|
||||
shell->someTimer = 0x001E;
|
||||
temp_f0 = 8.0f;
|
||||
height = 8.0f;
|
||||
if (player->unk_094 > 8.0f) {
|
||||
temp_f0 = player->unk_094 * 1.2f;
|
||||
height = player->unk_094 * 1.2f;
|
||||
}
|
||||
somePosVel[0] = 0.0f;
|
||||
somePosVel[1] = 0.0f;
|
||||
somePosVel[2] = temp_f0;
|
||||
somePosVel[2] = height;
|
||||
func_802B64C4(somePosVel, (s16) (player->rotation[1] + player->unk_0C0));
|
||||
shell->velocity[0] = somePosVel[0];
|
||||
shell->velocity[1] = somePosVel[1];
|
||||
|
|
@ -385,7 +385,7 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
shell->pos[0] += shell->velocity[0];
|
||||
shell->pos[1] += shell->velocity[1];
|
||||
shell->pos[2] += shell->velocity[2];
|
||||
func_802AD950(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
|
||||
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
|
||||
func_802B4E30((struct Actor *) shell);
|
||||
func_802B4104(shell);
|
||||
break;
|
||||
|
|
@ -405,11 +405,11 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
case GREEN_SHELL_HIT_A_RACER:
|
||||
func_802B3B44(shell);
|
||||
player = &gPlayers[shell->targetPlayer];
|
||||
temp_f0 = player->pos[0];
|
||||
temp_f0 -= shell->pos[0];
|
||||
height = player->pos[0];
|
||||
height -= shell->pos[0];
|
||||
temp_f2 = player->pos[2];
|
||||
temp_f2 -= shell->pos[2];
|
||||
if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) < 40000.0f) {
|
||||
if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
|
||||
shell->state = RED_SHELL_LOCK_ON;
|
||||
}
|
||||
break;
|
||||
|
|
@ -430,7 +430,7 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
shell->pos[0] = player->pos[0] + somePosVel[0];
|
||||
shell->pos[1] = player->pos[1] + somePosVel[1];
|
||||
shell->pos[2] = player->pos[2] + somePosVel[2];
|
||||
func_802AD950(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
|
||||
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
|
||||
func_802B4E30((struct Actor *) shell);
|
||||
}
|
||||
break;
|
||||
|
|
@ -450,11 +450,11 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
|
|||
func_802B3B44(shell);
|
||||
shell->targetPlayer = gPlayerPositionLUT[0];
|
||||
player = &gPlayers[gPlayerPositionLUT[0]];
|
||||
temp_f0 = player->pos[0];
|
||||
temp_f0 -= shell->pos[0];
|
||||
height = player->pos[0];
|
||||
height -= shell->pos[0];
|
||||
temp_f2 = player->pos[2];
|
||||
temp_f2 -= shell->pos[2];
|
||||
if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) < 40000.0f) {
|
||||
if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
|
||||
shell->state = BLUE_SHELL_TARGET_ELIMINATED;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
|
|||
fake_item_box->pos[0] = temp_v0_4->pos[0] - temp_f14;
|
||||
fake_item_box->pos[1] = (temp_v0_4->pos[1] - temp_f16) - 1.0f;
|
||||
fake_item_box->pos[2] = temp_v0_4->pos[2] - temp_f18;
|
||||
func_802ADDC8(&fake_item_box->unk30, fake_item_box->boundingBoxSize, fake_item_box->pos[0], fake_item_box->pos[1], fake_item_box->pos[2]);
|
||||
check_bounding_collision(&fake_item_box->unk30, fake_item_box->boundingBoxSize, fake_item_box->pos[0], fake_item_box->pos[1], fake_item_box->pos[2]);
|
||||
func_802B4E30((struct Actor *)fake_item_box);
|
||||
temp_v1_3 = &gControllers[temp_v1];
|
||||
if ((temp_v0_4->type & 0x4000) != 0) {
|
||||
|
|
|
|||
|
|
@ -13,25 +13,25 @@ void render_actor_falling_rock(Camera *camera, struct FallingRock *rock) {
|
|||
Vec3s sp98;
|
||||
Vec3f sp8C;
|
||||
Mat4 sp4C;
|
||||
f32 temp_f0;
|
||||
f32 height;
|
||||
UNUSED s32 pad[4];
|
||||
|
||||
if (rock->respawnTimer != 0) { return; }
|
||||
|
||||
temp_f0 = is_within_render_distance(camera->pos, rock->pos, camera->rot[1], 400.0f, gCameraZoom[camera - camera1], 4000000.0f);
|
||||
height = is_within_render_distance(camera->pos, rock->pos, camera->rot[1], 400.0f, gCameraZoom[camera - camera1], 4000000.0f);
|
||||
|
||||
if (temp_f0 < 0.0f) { return; }
|
||||
if (height < 0.0f) { return; }
|
||||
|
||||
if (temp_f0 < 250000.0f) {
|
||||
if (height < 250000.0f) {
|
||||
|
||||
if (rock->unk30.unk34 == 1) {
|
||||
sp8C[0] = rock->pos[0];
|
||||
sp8C[2] = rock->pos[2];
|
||||
temp_f0 = func_802ABE30(sp8C[0], rock->pos[1], sp8C[2], rock->unk30.unk3A);
|
||||
height = calculate_surface_height(sp8C[0], rock->pos[1], sp8C[2], rock->unk30.meshIndexZX);
|
||||
sp98[0] = 0;
|
||||
sp98[1] = 0;
|
||||
sp98[2] = 0;
|
||||
sp8C[1] = temp_f0 + 2.0f;
|
||||
sp8C[1] = height + 2.0f;
|
||||
mtxf_pos_rotation_xyz(sp4C, sp8C, sp98);
|
||||
if (render_set_position(sp4C, 0) == 0) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -73,20 +73,20 @@ void update_actor_falling_rocks(struct FallingRock *rock) {
|
|||
rock->pos[1] += rock->velocity[1];
|
||||
rock->pos[2] += rock->velocity[2];
|
||||
pad1 = rock->velocity[1];
|
||||
func_802ADDC8(&rock->unk30, 10.0f, rock->pos[0], rock->pos[1], rock->pos[2]);
|
||||
pad0 = rock->unk30.unk3C[2];
|
||||
check_bounding_collision(&rock->unk30, 10.0f, rock->pos[0], rock->pos[1], rock->pos[2]);
|
||||
pad0 = rock->unk30.surfaceDistance[2];
|
||||
if (pad0 < 0.0f) {
|
||||
unkVec[0] = -rock->unk30.orientationVector[0];
|
||||
unkVec[1] = -rock->unk30.orientationVector[1];
|
||||
unkVec[2] = -rock->unk30.orientationVector[2];
|
||||
rock->pos[0] += unkVec[0] * rock->unk30.unk3C[2];
|
||||
rock->pos[1] += unkVec[1] * rock->unk30.unk3C[2];
|
||||
rock->pos[2] += unkVec[2] * rock->unk30.unk3C[2];
|
||||
func_802AC114(unkVec, pad0, rock->velocity, 2.0f);
|
||||
rock->pos[0] += unkVec[0] * rock->unk30.surfaceDistance[2];
|
||||
rock->pos[1] += unkVec[1] * rock->unk30.surfaceDistance[2];
|
||||
rock->pos[2] += unkVec[2] * rock->unk30.surfaceDistance[2];
|
||||
adjust_pos_orthogonally(unkVec, pad0, rock->velocity, 2.0f);
|
||||
rock->velocity[1] = -1.2f * pad1;
|
||||
func_800C98B8(rock->pos, rock->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x0F));
|
||||
}
|
||||
pad0 = rock->unk30.unk3C[0];
|
||||
pad0 = rock->unk30.surfaceDistance[0];
|
||||
if (pad0 < 0.0f) {
|
||||
unkVec[1] = -rock->unk30.unk48[1];
|
||||
if (unkVec[1] == 0.0f) {
|
||||
|
|
@ -96,15 +96,15 @@ void update_actor_falling_rocks(struct FallingRock *rock) {
|
|||
else {
|
||||
unkVec[0] = -rock->unk30.unk48[0];
|
||||
unkVec[2] = -rock->unk30.unk48[2];
|
||||
rock->pos[0] += unkVec[0] * rock->unk30.unk3C[0];
|
||||
rock->pos[1] += unkVec[1] * rock->unk30.unk3C[0];
|
||||
rock->pos[2] += unkVec[2] * rock->unk30.unk3C[0];
|
||||
func_802AC114(unkVec, pad0, rock->velocity, 2.0f);
|
||||
rock->pos[0] += unkVec[0] * rock->unk30.surfaceDistance[0];
|
||||
rock->pos[1] += unkVec[1] * rock->unk30.surfaceDistance[0];
|
||||
rock->pos[2] += unkVec[2] * rock->unk30.surfaceDistance[0];
|
||||
adjust_pos_orthogonally(unkVec, pad0, rock->velocity, 2.0f);
|
||||
rock->velocity[1] = -1.2f * pad1;
|
||||
func_800C98B8(rock->pos, rock->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x0F));
|
||||
}
|
||||
}
|
||||
pad0 = rock->unk30.unk3C[1];
|
||||
pad0 = rock->unk30.surfaceDistance[1];
|
||||
if (pad0 < 0.0f) {
|
||||
unkVec[1] = -rock->unk30.unk54[1];
|
||||
if (unkVec[1] == 0.0f) {
|
||||
|
|
@ -113,11 +113,11 @@ void update_actor_falling_rocks(struct FallingRock *rock) {
|
|||
else {
|
||||
unkVec[0] = -rock->unk30.unk54[0];
|
||||
unkVec[2] = -rock->unk30.unk54[2];
|
||||
rock->pos[0] += unkVec[0] * rock->unk30.unk3C[1];
|
||||
rock->pos[1] += unkVec[1] * rock->unk30.unk3C[1];
|
||||
rock->pos[2] += unkVec[2] * rock->unk30.unk3C[1];
|
||||
rock->pos[0] += unkVec[0] * rock->unk30.surfaceDistance[1];
|
||||
rock->pos[1] += unkVec[1] * rock->unk30.surfaceDistance[1];
|
||||
rock->pos[2] += unkVec[2] * rock->unk30.surfaceDistance[1];
|
||||
pad1 = rock->velocity[1];
|
||||
func_802AC114(unkVec, pad0, rock->velocity, 2.0f);
|
||||
adjust_pos_orthogonally(unkVec, pad0, rock->velocity, 2.0f);
|
||||
rock->velocity[1] = -1.2f * pad1;
|
||||
func_800C98B8(rock->pos, rock->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x0F));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,27 +18,27 @@ void update_actor_green_shell(struct ShellActor *shell) {
|
|||
f32 var_f2;
|
||||
struct Controller *controller;
|
||||
TripleShellParent *parent;
|
||||
UNUSED f32 pad0;
|
||||
UNUSED f32 pad1;
|
||||
f32 height;
|
||||
f32 z;
|
||||
UNUSED f32 pad2;
|
||||
UNUSED f32 pad3;
|
||||
UNUSED f32 pad4;
|
||||
UNUSED f32 pad5;
|
||||
UNUSED f32 pad6;
|
||||
f32 y;
|
||||
UNUSED f32 pad7;
|
||||
UNUSED f32 pad8;
|
||||
|
||||
pad0 = shell->pos[0];
|
||||
pad6 = shell->pos[1];
|
||||
pad1 = shell->pos[2];
|
||||
if ((pad1 < gCourseMinZ) || (gCourseMaxZ < pad1) || (pad0 < gCourseMinX) || (gCourseMaxX < pad0) || (pad6 < gCourseMinY)) {
|
||||
height = shell->pos[0];
|
||||
y = shell->pos[1];
|
||||
z = shell->pos[2];
|
||||
if ((z < gCourseMinZ) || (gCourseMaxZ < z) || (height < gCourseMinX) || (gCourseMaxX < height) || (y < gCourseMinY)) {
|
||||
destroy_destructable_actor((struct Actor *) shell);
|
||||
}
|
||||
shell->rotVelocity += 0x71C;
|
||||
switch (shell->state) {
|
||||
case HELD_SHELL:
|
||||
player = &gPlayers[shell->playerId];
|
||||
copy_collision(&player->unk_110, &shell->unk30);
|
||||
copy_collision(&player->collision, &shell->unk30);
|
||||
somePosVel[0] = 0.0f;
|
||||
somePosVel[1] = player->boundingBoxSize;
|
||||
somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f);
|
||||
|
|
@ -46,10 +46,10 @@ void update_actor_green_shell(struct ShellActor *shell) {
|
|||
shell->pos[0] = player->pos[0] + somePosVel[0];
|
||||
pad2 = player->pos[1] - somePosVel[1];
|
||||
shell->pos[2] = player->pos[2] + somePosVel[2];
|
||||
pad0 = func_802ABE30(shell->pos[0], pad2, shell->pos[2], player->unk_110.unk3A);
|
||||
pad1 = pad2 - pad0;
|
||||
if ((pad1 < 5.0f) && (pad1 > -5.0f)) {
|
||||
shell->pos[1] = shell->boundingBoxSize + pad0;
|
||||
height = calculate_surface_height(shell->pos[0], pad2, shell->pos[2], player->collision.meshIndexZX);
|
||||
z = pad2 - height;
|
||||
if ((z < 5.0f) && (z > -5.0f)) {
|
||||
shell->pos[1] = shell->boundingBoxSize + height;
|
||||
} else {
|
||||
shell->pos[1] = pad2;
|
||||
}
|
||||
|
|
@ -145,9 +145,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
|
|||
shell->pos[0] += shell->velocity[0];
|
||||
shell->pos[1] += shell->velocity[1];
|
||||
shell->pos[2] += shell->velocity[2];
|
||||
func_802AD950(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0], somePos2[1], somePos2[2]);
|
||||
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0], somePos2[1], somePos2[2]);
|
||||
func_802B4E30((struct Actor *) shell);
|
||||
if ((shell->unk30.unk3C[0] < 0.0f) || (shell->unk30.unk3C[1] < 0.0f)) {
|
||||
if ((shell->unk30.surfaceDistance[0] < 0.0f) || (shell->unk30.surfaceDistance[1] < 0.0f)) {
|
||||
shell_collision(&shell->unk30, shell->velocity);
|
||||
func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
|
||||
shell->flags |= 0x80;
|
||||
|
|
@ -170,7 +170,7 @@ void update_actor_green_shell(struct ShellActor *shell) {
|
|||
shell->pos[0] = player->pos[0] + somePosVel[0];
|
||||
shell->pos[1] = player->pos[1] + somePosVel[1];
|
||||
shell->pos[2] = player->pos[2] + somePosVel[2];
|
||||
func_802AD950(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0], somePos2[1], somePos2[2]);
|
||||
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0], somePos2[1], somePos2[2]);
|
||||
func_802B4E30((struct Actor *) shell);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@ void update_actor_kiwano_fruit(struct KiwanoFruit *fruit) {
|
|||
s32 nearestWaypoint;
|
||||
|
||||
player = &gPlayers[fruit->targetPlayer];
|
||||
if (((player->type & PLAYER_KART_AI) != 0) || (player->unk_110.unk34 == 0)) {
|
||||
if (((player->type & PLAYER_KART_AI) != 0) || (player->collision.unk34 == 0)) {
|
||||
fruit->state = 0;
|
||||
return;
|
||||
}
|
||||
switch (fruit->state) { /* irregular */
|
||||
case 0:
|
||||
if ((get_surface_type(player->unk_110.unk3A) & 0xFF) != GRASS) {
|
||||
if ((get_surface_type(player->collision.meshIndexZX) & 0xFF) != GRASS) {
|
||||
return;
|
||||
}
|
||||
fruit->state = 1;
|
||||
|
|
|
|||
|
|
@ -26,14 +26,6 @@
|
|||
#define ADSR_GOTO -2
|
||||
#define ADSR_RESTART -3
|
||||
|
||||
// Envelopes are always stored as big endian, to match sequence files which are
|
||||
// byte blobs and can embed envelopes. Hence this byteswapping macro.
|
||||
#if IS_BIG_ENDIAN
|
||||
#define BSWAP16(x) (x)
|
||||
#else
|
||||
#define BSWAP16(x) (((x) & 0xff) << 8 | (((x) >> 8) & 0xff))
|
||||
#endif
|
||||
|
||||
void sequence_channel_process_sound(struct SequenceChannel *seqChannel, s32 recalculateVolume);
|
||||
void sequence_player_process_sound(struct SequencePlayer *seqPlayer);
|
||||
f32 get_portamento_freq_scale(struct Portamento *p);
|
||||
|
|
|
|||
|
|
@ -230,11 +230,11 @@ char external_unused_string_eu_03[] = "SE FADE OUT TIME %d\n";
|
|||
#endif
|
||||
|
||||
#ifdef VERSION_EU
|
||||
#define AUDIO_LEFT_TYRE FRONT_LEFT_TYRE
|
||||
#define AUDIO_RIGHT_TYRE FRONT_RIGHT_TYRE
|
||||
#define AUDIO_LEFT_TYRE FRONT_LEFT
|
||||
#define AUDIO_RIGHT_TYRE FRONT_RIGHT
|
||||
#else
|
||||
#define AUDIO_LEFT_TYRE BACK_LEFT_TYRE
|
||||
#define AUDIO_RIGHT_TYRE BACK_RIGHT_TYRE
|
||||
#define AUDIO_LEFT_TYRE BACK_LEFT
|
||||
#define AUDIO_RIGHT_TYRE BACK_RIGHT
|
||||
#endif
|
||||
|
||||
// Requires void in the argument list to match properly.
|
||||
|
|
@ -674,8 +674,8 @@ void func_800C2474(void) {
|
|||
D_800E9E74[var_v0] = 0;
|
||||
D_800E9E84[var_v0] = 0;
|
||||
D_800E9E94[var_v0] = 0;
|
||||
gPlayers[var_v0].boundingBoxCorners[AUDIO_LEFT_TYRE ].surfaceType = 0;
|
||||
gPlayers[var_v0].boundingBoxCorners[AUDIO_RIGHT_TYRE].surfaceType = 0;
|
||||
gPlayers[var_v0].tyres[AUDIO_LEFT_TYRE ].surfaceType = 0;
|
||||
gPlayers[var_v0].tyres[AUDIO_RIGHT_TYRE].surfaceType = 0;
|
||||
gPlayers[var_v0].effects = 0;
|
||||
gPlayers[var_v0].unk_20C = 0.0f;
|
||||
gPlayers[var_v0].unk_0C0 = 0;
|
||||
|
|
@ -1933,15 +1933,15 @@ void func_800C5E38(u8 playerId) {
|
|||
}
|
||||
|
||||
void func_800C6108(u8 playerId) {
|
||||
Player *temp_v1;
|
||||
Player *player;
|
||||
|
||||
temp_v1 = &gPlayers[playerId];
|
||||
D_800E9E64[playerId] = (temp_v1->unk_098 / D_800E9DC4[playerId]) + D_800E9DD4[playerId];
|
||||
if ((temp_v1->unk_098 < 1800.0f) && ((temp_v1->unk_044 & 0x20) != 0x20)) {
|
||||
D_800E9E64[playerId] = (temp_v1->unk_098 / D_800E9F7C[playerId].unk_34) + D_800E9F7C[playerId].unk_28;
|
||||
player = &gPlayers[playerId];
|
||||
D_800E9E64[playerId] = (player->unk_098 / D_800E9DC4[playerId]) + D_800E9DD4[playerId];
|
||||
if ((player->unk_098 < 1800.0f) && ((player->unk_044 & 0x20) != 0x20)) {
|
||||
D_800E9E64[playerId] = (player->unk_098 / D_800E9F7C[playerId].unk_34) + D_800E9F7C[playerId].unk_28;
|
||||
if(D_800E9EC4){} // ?
|
||||
}
|
||||
if (temp_v1->unk_094 > 4.75f) {
|
||||
if (player->unk_094 > 4.75f) {
|
||||
if (D_800E9EB4[playerId] < (D_800E9F7C[playerId].unk_18 + 0.4f)) {
|
||||
D_800E9DE4[playerId] += 0.005f;
|
||||
}
|
||||
|
|
@ -1949,11 +1949,11 @@ void func_800C6108(u8 playerId) {
|
|||
D_800E9DE4[playerId] = 0.0f;
|
||||
}
|
||||
if (gPlayers[playerId].unk_0C0 > 0) {
|
||||
D_800E9E54[playerId] = (f32) temp_v1->unk_0C0;
|
||||
D_800E9E54[playerId] = (f32) player->unk_0C0;
|
||||
} else {
|
||||
D_800E9E54[playerId] = (f32) -temp_v1->unk_0C0;
|
||||
D_800E9E54[playerId] = (f32) -player->unk_0C0;
|
||||
}
|
||||
if ((temp_v1->effects & 0x10) == 0x10) {
|
||||
if ((player->effects & 0x10) == 0x10) {
|
||||
D_800E9EB4[playerId] = D_800E9E64[playerId] + D_800E9DE4[playerId];
|
||||
} else {
|
||||
D_800E9EB4[playerId] = D_800E9E64[playerId] + D_800E9DE4[playerId] - (D_800E9E54[playerId] / 12000.0f);
|
||||
|
|
@ -2196,7 +2196,7 @@ void func_800C70A8(u8 playerId) {
|
|||
D_800E9E74[playerId] = 0;
|
||||
if ((D_800E9E54[playerId] > 3500.0f) || ((gPlayers[playerId].effects & 0x10) == 0x10)) {
|
||||
D_800E9E74[playerId] = 1;
|
||||
switch (gPlayers[playerId].boundingBoxCorners[AUDIO_LEFT_TYRE].surfaceType) {
|
||||
switch (gPlayers[playerId].tyres[AUDIO_LEFT_TYRE].surfaceType) {
|
||||
case DIRT: /* switch 1 */
|
||||
D_800E9E74[playerId] = 0x0000000D;
|
||||
break;
|
||||
|
|
@ -2228,7 +2228,7 @@ void func_800C70A8(u8 playerId) {
|
|||
}
|
||||
if ((gPlayers[playerId].effects & 0x10) == 0x10) {
|
||||
D_800E9E74[playerId] = 2;
|
||||
switch (gPlayers[playerId].boundingBoxCorners[AUDIO_LEFT_TYRE].surfaceType) { /* switch 2 */
|
||||
switch (gPlayers[playerId].tyres[AUDIO_LEFT_TYRE].surfaceType) { /* switch 2 */
|
||||
case DIRT: /* switch 2 */
|
||||
D_800E9E74[playerId] = 0x0000000D;
|
||||
break;
|
||||
|
|
@ -2258,7 +2258,7 @@ void func_800C70A8(u8 playerId) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
switch (gPlayers[playerId].boundingBoxCorners[AUDIO_LEFT_TYRE].surfaceType) { /* switch 3 */
|
||||
switch (gPlayers[playerId].tyres[AUDIO_LEFT_TYRE].surfaceType) { /* switch 3 */
|
||||
case GRASS: /* switch 3 */
|
||||
if (D_800E9E74[playerId] == 6) {
|
||||
D_800E9E74[playerId] = 4;
|
||||
|
|
@ -2318,7 +2318,7 @@ void func_800C70A8(u8 playerId) {
|
|||
D_800E9E74[playerId] = 0x0000001B;
|
||||
break;
|
||||
}
|
||||
switch (gPlayers[playerId].boundingBoxCorners[AUDIO_RIGHT_TYRE].surfaceType) { /* switch 4 */
|
||||
switch (gPlayers[playerId].tyres[AUDIO_RIGHT_TYRE].surfaceType) { /* switch 4 */
|
||||
case GRASS: /* switch 4 */
|
||||
if (D_800E9E74[playerId] == 5) {
|
||||
D_800E9E74[playerId] = 4;
|
||||
|
|
|
|||
36
src/camera.c
36
src/camera.c
|
|
@ -641,23 +641,23 @@ void func_8001E0C4(Camera *camera, Player *player, s8 arg2) {
|
|||
adjust_angle(&camera->unk_2C, player->rotation[1], var_a2);
|
||||
func_8001CA78(player, camera, sp60, &sp74, &sp70, &sp6C, camera->unk_2C, arg2);
|
||||
camera->someBitFlags &= ~0x0004;
|
||||
temp_t7 = func_802ADDC8(&camera->unk_54, test, sp74, sp70, sp6C);
|
||||
if (camera->unk_54.unk3C[2] < 0.0f) {
|
||||
sp74 += -camera->unk_54.orientationVector[0] * camera->unk_54.unk3C[2] * 1;
|
||||
sp70 += -camera->unk_54.orientationVector[1] * camera->unk_54.unk3C[2] * 0.5;
|
||||
sp6C += -camera->unk_54.orientationVector[2] * camera->unk_54.unk3C[2] * 1;
|
||||
temp_t7 = check_bounding_collision(&camera->collision, test, sp74, sp70, sp6C);
|
||||
if (camera->collision.surfaceDistance[2] < 0.0f) {
|
||||
sp74 += -camera->collision.orientationVector[0] * camera->collision.surfaceDistance[2] * 1;
|
||||
sp70 += -camera->collision.orientationVector[1] * camera->collision.surfaceDistance[2] * 0.5;
|
||||
sp6C += -camera->collision.orientationVector[2] * camera->collision.surfaceDistance[2] * 1;
|
||||
}
|
||||
if (camera->unk_54.unk3C[0] < 0.0f) {
|
||||
if (camera->collision.surfaceDistance[0] < 0.0f) {
|
||||
camera->someBitFlags = camera->someBitFlags | 4 | 2;
|
||||
sp74 += -camera->unk_54.unk48[0] * camera->unk_54.unk3C[0] * 1.5;
|
||||
sp70 += -camera->unk_54.unk48[1] * camera->unk_54.unk3C[0] * 1;
|
||||
sp6C += -camera->unk_54.unk48[2] * camera->unk_54.unk3C[0] * 1.5;
|
||||
sp74 += -camera->collision.unk48[0] * camera->collision.surfaceDistance[0] * 1.5;
|
||||
sp70 += -camera->collision.unk48[1] * camera->collision.surfaceDistance[0] * 1;
|
||||
sp6C += -camera->collision.unk48[2] * camera->collision.surfaceDistance[0] * 1.5;
|
||||
}
|
||||
if (camera->unk_54.unk3C[1] < 0.0f) {
|
||||
if (camera->collision.surfaceDistance[1] < 0.0f) {
|
||||
camera->someBitFlags = camera->someBitFlags | 4 | 2;
|
||||
sp74 += -camera->unk_54.unk54[0] * camera->unk_54.unk3C[1] * 1.5;
|
||||
sp70 += -camera->unk_54.unk54[1] * camera->unk_54.unk3C[1] * 1;
|
||||
sp6C += -camera->unk_54.unk54[2] * camera->unk_54.unk3C[1] * 1.5;
|
||||
sp74 += -camera->collision.unk54[0] * camera->collision.surfaceDistance[1] * 1.5;
|
||||
sp70 += -camera->collision.unk54[1] * camera->collision.surfaceDistance[1] * 1;
|
||||
sp6C += -camera->collision.unk54[2] * camera->collision.surfaceDistance[1] * 1.5;
|
||||
}
|
||||
if ((temp_t7 == 0) && ((camera->someBitFlags & 2) != 2)) {
|
||||
camera->unk_AC = camera->unk_2C;
|
||||
|
|
@ -740,7 +740,7 @@ void func_8001E45C(Camera *camera, Player *player, s8 arg2) {
|
|||
if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40) ||
|
||||
((player->effects & 0x4000) == 0x4000) || ((player->effects & 0x80000) == 0x80000) ||
|
||||
((player->effects & 0x800000) == 0x800000) || (((player->effects & 0x20) == 0x20) && (player->unk_078 != 0)) ||
|
||||
(player->unk_110.unk3C[0] <= 0.0f) || (player->unk_110.unk3C[1] <= 0.0f) || ((player->effects & 0x20000) == 0x20000)) {
|
||||
(player->collision.surfaceDistance[0] <= 0.0f) || (player->collision.surfaceDistance[1] <= 0.0f) || ((player->effects & 0x20000) == 0x20000)) {
|
||||
func_8001CCEC(player, camera, sp64, &sp84, &sp80, &sp7C, &sp58, (s32) camera->unk_2C, (s32) arg2);
|
||||
} else {
|
||||
adjust_angle(&camera->unk_2C, (s16) (player->rotation[1] + camera->unk_B0), var_a3);
|
||||
|
|
@ -748,7 +748,7 @@ void func_8001E45C(Camera *camera, Player *player, s8 arg2) {
|
|||
}
|
||||
temp = 3;
|
||||
camera->someBitFlags &= 0xFFFB;
|
||||
func_802ADDC8(&camera->unk_54, temp, sp84, sp80, sp7C);
|
||||
check_bounding_collision(&camera->collision, temp, sp84, sp80, sp7C);
|
||||
|
||||
camera->pos[0] = sp84;
|
||||
camera->pos[1] = sp80;
|
||||
|
|
@ -783,7 +783,7 @@ void func_8001E8E8(Camera *camera, Player *player, s8 arg2) {
|
|||
camera->unk_B0 = 0;
|
||||
camera->unk_2C = player->rotation[1];
|
||||
func_8001D53C(player, camera, sp5C, &sp7C, &sp78, &sp74, (s16) (s32) player->rotation[1], (s16) (s32) arg2);
|
||||
func_802ADDC8(&camera->unk_54, 5.0f, sp7C, sp78, sp74);
|
||||
check_bounding_collision(&camera->collision, 5.0f, sp7C, sp78, sp74);
|
||||
camera->lookAt[0] = sp5C[0];
|
||||
camera->lookAt[1] = sp5C[1];
|
||||
camera->lookAt[2] = sp5C[2];
|
||||
|
|
@ -862,7 +862,7 @@ void func_8001EA0C(Camera *camera, Player *player, s8 arg2) {
|
|||
if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40) ||
|
||||
((player->effects & 0x4000) == 0x4000) || ((player->effects & 0x80000) == 0x80000) ||
|
||||
((player->effects & 0x800000) == 0x800000) || (((player->effects & 0x20) == 0x20) && (player->unk_078 != 0)) ||
|
||||
(player->unk_110.unk3C[0] <= 0.0f) || (player->unk_110.unk3C[1] <= 0.0f) || ((player->effects & 0x20000) == 0x20000)) {
|
||||
(player->collision.surfaceDistance[0] <= 0.0f) || (player->collision.surfaceDistance[1] <= 0.0f) || ((player->effects & 0x20000) == 0x20000)) {
|
||||
func_8001D944(player, camera, sp64, &sp84, &sp80, &sp7C, &sp58, (s32) camera->unk_2C, (s32) arg2);
|
||||
} else {
|
||||
adjust_angle(&camera->unk_2C, (s16) (player->rotation[1] + camera->unk_B0), var_a3);
|
||||
|
|
@ -870,7 +870,7 @@ void func_8001EA0C(Camera *camera, Player *player, s8 arg2) {
|
|||
}
|
||||
temp = 3;
|
||||
camera->someBitFlags &= 0xFFFB;
|
||||
func_802ADDC8(&camera->unk_54, temp, sp84, sp80, sp7C);
|
||||
check_bounding_collision(&camera->collision, temp, sp84, sp80, sp7C);
|
||||
|
||||
camera->pos[0] = sp84;
|
||||
camera->pos[1] = sp80;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ typedef struct {
|
|||
/* 0x48 */ s32 unk_48;
|
||||
/* 0x4C */ s32 unk_4C;
|
||||
/* 0x50 */ s32 unk_50;
|
||||
/* 0x54 */ Collision unk_54;
|
||||
/* 0x54 */ Collision collision;
|
||||
// When you hit a wall (or another driver) the camera's pos and lookAt bounce up and down. This is the velocity(?) of that bouncing
|
||||
/* 0x94 */ UnkCameraInner unk_94;
|
||||
// Timer for wall-hit bounce. Counts up instead of down
|
||||
|
|
|
|||
|
|
@ -72,10 +72,10 @@ s16 gCreditsCourseId = COURSE_LUIGI_RACEWAY;
|
|||
s16 gPlaceItemBoxes = 1;
|
||||
|
||||
// Technically a pointer to an array, but declaring it so creates regalloc issues.
|
||||
mk64_surface_map_ram *gSurfaceMap;
|
||||
u16 *D_8015F584;
|
||||
u16 D_8015F588; // Number of entries in gSurfaceMap
|
||||
u16 D_8015F58A;
|
||||
CollisionTriangle *gCollisionMesh;
|
||||
u16 *gCollisionIndices;
|
||||
u16 gCollisionMeshCount;
|
||||
u16 gNumCollisionTriangles;
|
||||
u32 D_8015F58C;
|
||||
|
||||
Vec3f D_8015F590;
|
||||
|
|
@ -311,7 +311,7 @@ void func_80003040(void) {
|
|||
case COURSE_MARIO_RACEWAY:
|
||||
struct ActorSpawnData *a_d_course_mario_raceway_tree_spawns = (struct ActorSpawnData *) LOAD_ASSET(d_course_mario_raceway_tree_spawns);
|
||||
dma_textures(gTextureTrees1, 0x35B, 0x800);
|
||||
//spawn_foliage(a_d_course_mario_raceway_tree_spawns);
|
||||
spawn_foliage(a_d_course_mario_raceway_tree_spawns);
|
||||
break;
|
||||
case COURSE_BOWSER_CASTLE:
|
||||
// d_course_bowsers_castle_packed_dl_1350
|
||||
|
|
|
|||
|
|
@ -67,10 +67,10 @@ extern s32 gIsMirrorMode; // D_800DC604
|
|||
extern s16 gCreditsCourseId;
|
||||
extern s16 gPlaceItemBoxes;
|
||||
|
||||
extern mk64_surface_map_ram *gSurfaceMap;
|
||||
extern u16 *D_8015F584;
|
||||
extern u16 D_8015F588;
|
||||
extern u16 D_8015F58A;
|
||||
extern CollisionTriangle *gCollisionMesh;
|
||||
extern u16 *gCollisionIndices;
|
||||
extern u16 gCollisionMeshCount;
|
||||
extern u16 gNumCollisionTriangles;
|
||||
extern u32 D_8015F58C;
|
||||
|
||||
extern Vec3f D_8015F590;
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ Vec3f D_80162FA0;
|
|||
Vec3f D_80162FB0;
|
||||
Vec3f D_80162FC0;
|
||||
s16 D_80162FCC;
|
||||
s16 D_80162FCE;
|
||||
s16 sSomeNearestWaypoint;
|
||||
s16 D_80162FD0;
|
||||
f32 gCourseCompletionPercentByRank[NUM_PLAYERS];
|
||||
/*
|
||||
|
|
@ -132,7 +132,7 @@ s16 D_8016348C;
|
|||
s16 D_80163490[12];
|
||||
s16 D_801634A8[12];
|
||||
s16 D_801634C0[12];
|
||||
s16 D_801634D8[10];
|
||||
s16 bStopAICrossing[10];
|
||||
s16 D_801634EC;
|
||||
s32 D_801634F0;
|
||||
s32 D_801634F4;
|
||||
|
|
@ -140,8 +140,8 @@ Test D_801634F8[10];
|
|||
PathNoY *D_80163598;
|
||||
s32 D_8016359C;
|
||||
TrainStuff gTrainList[NUM_TRAINS];
|
||||
u16 isCrossingTriggeredByIndex[2];
|
||||
u16 D_801637BC[2];
|
||||
u16 isCrossingTriggeredByIndex[NUM_CROSSINGS];
|
||||
u16 sCrossingActiveTimer[NUM_CROSSINGS];
|
||||
PaddleBoatStuff gPaddleBoats[NUM_PADDLE_BOATS];
|
||||
VehicleStuff gBoxTruckList[NUM_RACE_BOX_TRUCKS];
|
||||
VehicleStuff gSchoolBusList[NUM_RACE_SCHOOL_BUSES];
|
||||
|
|
@ -601,61 +601,69 @@ void func_80006114(Vec3f arg0, Vec3f arg1, s16 arg2) {
|
|||
arg0[2] = arg1[2] + temp2;
|
||||
}
|
||||
|
||||
s32 func_800061DC(Vec3f arg0, f32 arg1, s32 arg2) {
|
||||
Camera *var_a0_2;
|
||||
Player *var_a0;
|
||||
f32 temp_f0;
|
||||
f32 temp_f2;
|
||||
f32 temp_f12;
|
||||
f32 temp_f14;
|
||||
s32 var_a1;
|
||||
s32 var_v1;
|
||||
s8 var_v0;
|
||||
s32 set_vehicle_render_distance_flags(Vec3f vehiclePos, f32 renderDistance, s32 flags) {
|
||||
Camera *camera;
|
||||
Player *player;
|
||||
f32 x;
|
||||
f32 z;
|
||||
f32 playerX;
|
||||
f32 playerZ;
|
||||
s32 i;
|
||||
s32 flag;
|
||||
s8 numScreens;
|
||||
|
||||
temp_f0 = arg0[0];
|
||||
temp_f2 = arg0[2];
|
||||
x = vehiclePos[0];
|
||||
z = vehiclePos[2];
|
||||
switch (gActiveScreenMode) {
|
||||
case SCREEN_MODE_1P:
|
||||
var_v0 = 1;
|
||||
numScreens = 1;
|
||||
break;
|
||||
case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL:
|
||||
case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL:
|
||||
var_v0 = 2;
|
||||
numScreens = 2;
|
||||
break;
|
||||
case SCREEN_MODE_3P_4P_SPLITSCREEN:
|
||||
var_v0 = gPlayerCount;
|
||||
numScreens = gPlayerCount;
|
||||
break;
|
||||
default:
|
||||
var_v0 = 1;
|
||||
numScreens = 1;
|
||||
break;
|
||||
}
|
||||
var_v1 = arg2;
|
||||
flag = flags;
|
||||
if (!gDemoMode) {
|
||||
var_a0 = gPlayerOne;
|
||||
for(var_a1 = 0; var_a1 < gPlayerCount; var_a1++, var_a0++) {
|
||||
if (((var_a0->type & 0x4000) != 0) && ((var_a0->type & 0x1000) == 0)) {
|
||||
temp_f12 = var_a0->pos[0];
|
||||
temp_f14 = var_a0->pos[2];
|
||||
if (((temp_f12 - arg1) < temp_f0) && (temp_f0 < (temp_f12 + arg1)) && ((temp_f14 - arg1) < temp_f2) && (temp_f2 < (temp_f14 + arg1))) {
|
||||
var_v1 |= (1 << var_a1);
|
||||
player = gPlayerOne;
|
||||
// Checks distance from each player.
|
||||
for(i = 0; i < gPlayerCount; i++, player++) {
|
||||
if (((player->type & PLAYER_HUMAN) != 0) && ((player->type & PLAYER_KART_AI) == 0)) {
|
||||
playerX = player->pos[0];
|
||||
playerZ = player->pos[2];
|
||||
|
||||
// Is player within render distance
|
||||
if (((playerX - renderDistance) < x) &&
|
||||
((playerX + renderDistance) > x) &&
|
||||
((playerZ - renderDistance) < z) &&
|
||||
((playerZ + renderDistance) > z)) {
|
||||
// Sets the render flag to on for each player.
|
||||
flag |= (RENDER_VEHICLE << i);
|
||||
} else {
|
||||
var_v1 &= ~(1 << var_a1);
|
||||
// Sets the render flag to off for each player.
|
||||
flag &= ~(RENDER_VEHICLE << i);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var_a0_2 = camera1;
|
||||
for(var_a1 = 0; var_a1 < var_v0; var_a1++, var_a0_2++) {
|
||||
temp_f12 = var_a0_2->pos[0];
|
||||
temp_f14 = var_a0_2->pos[2];
|
||||
if (((temp_f12 - arg1) < temp_f0) && (temp_f0 < (temp_f12 + arg1)) && ((temp_f14 - arg1) < temp_f2) && (temp_f2 < (temp_f14 + arg1))) {
|
||||
var_v1 |= (1 << var_a1);
|
||||
} else { // Demo cinematic uses the camera to check render distance
|
||||
camera = camera1;
|
||||
for(i = 0; i < numScreens; i++, camera++) {
|
||||
playerX = camera->pos[0];
|
||||
playerZ = camera->pos[2];
|
||||
if (((playerX - renderDistance) < x) && (x < (playerX + renderDistance)) && ((playerZ - renderDistance) < z) && (z < (playerZ + renderDistance))) {
|
||||
flag |= (RENDER_VEHICLE << i);
|
||||
} else {
|
||||
var_v1 &= ~(1 << var_a1);
|
||||
flag &= ~(RENDER_VEHICLE << i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return var_v1;
|
||||
return flag;
|
||||
}
|
||||
|
||||
void func_800065D0(s32 playerId, Player *player) {
|
||||
|
|
@ -995,7 +1003,7 @@ void func_80007D04(s32 playerId, Player* player) {
|
|||
D_801634C0[playerId] = 2;
|
||||
} else {
|
||||
player->effects &= ~0x200000;
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
D_801634C0[playerId] = -1;
|
||||
}
|
||||
}
|
||||
|
|
@ -1012,35 +1020,35 @@ void func_80007FA4(s32 arg0, Player *player, f32 arg2) {
|
|||
if (arg0 == 3) {
|
||||
if ((temp_f12 < 25.0f) && (D_80163410[arg0] < 5)) {
|
||||
D_80163410[arg0] = 4;
|
||||
(arg2 < ((2.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : func_80031F48(player, 1.0f);
|
||||
(arg2 < ((2.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_ai_player(player, 1.0f);
|
||||
} else if ((temp_f12 < 3600.0f) && (D_80163410[arg0] < 4)) {
|
||||
D_80163410[arg0] = 3;
|
||||
(arg2 < ((5.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : func_80031F48(player, 5.0f);
|
||||
(arg2 < ((5.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_ai_player(player, 5.0f);
|
||||
} else {
|
||||
(arg2 < ((20.0 * 18.0) / 216.0)) ? func_80038BE4(player, 10) : func_80031F48(player, 1.0f);
|
||||
(arg2 < ((20.0 * 18.0) / 216.0)) ? func_80038BE4(player, 10) : decelerate_ai_player(player, 1.0f);
|
||||
}
|
||||
} else {
|
||||
if ((temp_f12 < 25.0f) && (D_80163410[arg0] < 5)) {
|
||||
D_80163410[arg0] = 4;
|
||||
test = 2;
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : func_80031F48(player, 1.0f);
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_ai_player(player, 1.0f);
|
||||
} else if ((temp_f12 < 4900.0f) && (D_80163410[arg0] < 4)) {
|
||||
D_80163410[arg0] = 3;
|
||||
test = 5;
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : func_80031F48(player, 15.0f);
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_ai_player(player, 15.0f);
|
||||
} else if ((temp_f12 < 22500.0f) && (D_80163410[arg0] < 3)) {
|
||||
D_80163410[arg0] = 2;
|
||||
test = 20;
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 5) : func_80031F48(player, 1.0f);
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 5) : decelerate_ai_player(player, 1.0f);
|
||||
} else if ((temp_f12 < 90000.0f) && (D_80163410[arg0] < 2)) {
|
||||
D_80163410[arg0] = 1;
|
||||
test = 30;
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 6) : func_80031F48(player, 1.0f);
|
||||
(arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 6) : decelerate_ai_player(player, 1.0f);
|
||||
} else if (D_80163410[arg0] == 0) {
|
||||
test = 35;
|
||||
(arg2 < (((test^0) * 18.0) / 216.0)) ? func_80038BE4(player, 2) : func_80031F48(player, 1.0f);
|
||||
(arg2 < (((test^0) * 18.0) / 216.0)) ? func_80038BE4(player, 2) : decelerate_ai_player(player, 1.0f);
|
||||
} else {
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1061,8 +1069,8 @@ void func_80008424(s32 playerId, f32 arg1, Player *player) {
|
|||
!(player->soundEffects & 4)) {
|
||||
if (gCurrentCourseId == COURSE_AWARD_CEREMONY) {
|
||||
func_80007FA4(playerId, player, var_f2);
|
||||
} else if ((D_801634D8[playerId] == 1) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) {
|
||||
func_80031F48(player, 10.0f);
|
||||
} else if ((bStopAICrossing[playerId] == 1) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) {
|
||||
decelerate_ai_player(player, 10.0f);
|
||||
if (player->currentSpeed == 0.0) {
|
||||
player->velocity[0] = 0.0f;
|
||||
player->velocity[2] = 0.0f;
|
||||
|
|
@ -1089,7 +1097,7 @@ void func_80008424(s32 playerId, f32 arg1, Player *player) {
|
|||
player_speed(player);
|
||||
} else {
|
||||
player->effects &= ~0x00200000;
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
}
|
||||
} else if ((D_801631E0[playerId] == 1) && (D_80163330[playerId] != 1)) {
|
||||
if (func_800088D8(playerId, gLapCountByPlayerId[playerId], D_80164408[playerId]) == 1) {
|
||||
|
|
@ -1097,7 +1105,7 @@ void func_80008424(s32 playerId, f32 arg1, Player *player) {
|
|||
player_speed(player);
|
||||
} else {
|
||||
player->effects &= ~0x00200000;
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
}
|
||||
} else {
|
||||
var_a1 = 1;
|
||||
|
|
@ -1132,14 +1140,14 @@ void func_80008424(s32 playerId, f32 arg1, Player *player) {
|
|||
player_speed(player);
|
||||
} else {
|
||||
player->effects &= ~0x00200000;
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
}
|
||||
} else {
|
||||
player->effects &= ~0x00200000;
|
||||
if (arg1 > 1.0f) {
|
||||
func_80031F48(player, 2.0f);
|
||||
decelerate_ai_player(player, 2.0f);
|
||||
} else {
|
||||
func_80031F48(player, 5.0f);
|
||||
decelerate_ai_player(player, 5.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1312,10 +1320,10 @@ s32 func_80008E58(s32 payerId, s32 pathIndex) {
|
|||
posY = player->pos[1];
|
||||
posZ = player->pos[2];
|
||||
stackPadding = pathIndex;
|
||||
trackSegment = func_802ABD40(player->unk_110.unk3A);
|
||||
trackSegment = get_section_id(player->collision.meshIndexZX);
|
||||
D_80163318[payerId] = trackSegment;
|
||||
D_80162FCE = func_8000C0BC(posX, posY, posZ, trackSegment, &pathIndex);
|
||||
gNearestWaypointByPlayerId[payerId] = D_80162FCE;
|
||||
sSomeNearestWaypoint = func_8000C0BC(posX, posY, posZ, trackSegment, &pathIndex);
|
||||
gNearestWaypointByPlayerId[payerId] = sSomeNearestWaypoint;
|
||||
if(pathIndex) {};
|
||||
gPathIndexByPlayerId[payerId] = pathIndex;
|
||||
func_80008DC0(pathIndex);
|
||||
|
|
@ -1326,7 +1334,7 @@ s32 func_80008E58(s32 payerId, s32 pathIndex) {
|
|||
void func_80008F38(s32 playerId) {
|
||||
f32 temp_f0;
|
||||
|
||||
D_80164450[playerId] = (gLapCountByPlayerId[playerId] * gWaypointCountByPathIndex[0]) + D_80162FCE;
|
||||
D_80164450[playerId] = (gLapCountByPlayerId[playerId] * gWaypointCountByPathIndex[0]) + sSomeNearestWaypoint;
|
||||
temp_f0 = (f32) gNearestWaypointByPlayerId[playerId] / (f32) gWaypointCountByPathIndex[gPathIndexByPlayerId[playerId]];
|
||||
gLapCompletionPercentByPlayerId[playerId] = temp_f0;
|
||||
gCourseCompletionPercentByPlayerId[playerId] = temp_f0;
|
||||
|
|
@ -1337,26 +1345,26 @@ void func_80009000(s32 playerId) {
|
|||
s16 temp_v0;
|
||||
|
||||
temp_v0 = D_801644F8[playerId];
|
||||
if (D_80162FCE >= 0x6D) {
|
||||
if (sSomeNearestWaypoint >= 0x6D) {
|
||||
D_801644F8[playerId] = 1;
|
||||
switch (D_80163448) {
|
||||
case 0:
|
||||
if (D_80162FCE >= 0x20F) {
|
||||
if (sSomeNearestWaypoint >= 0x20F) {
|
||||
D_801644F8[playerId] = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (D_80162FCE >= 0x206) {
|
||||
if (sSomeNearestWaypoint >= 0x206) {
|
||||
D_801644F8[playerId] = 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (D_80162FCE >= 0x211) {
|
||||
if (sSomeNearestWaypoint >= 0x211) {
|
||||
D_801644F8[playerId] = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (D_80162FCE >= 0x283) {
|
||||
if (sSomeNearestWaypoint >= 0x283) {
|
||||
D_801644F8[playerId] = 0;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1381,15 +1389,15 @@ void func_800090F0(s32 playerId, Player *player) {
|
|||
posZ = player->pos[2];
|
||||
if (D_80163490[playerId] == 1) {
|
||||
D_80163448 = func_80008E58(playerId, random_int(4U));
|
||||
D_80162FCE = func_8000CD24(posX, posY, posZ, 0, player, playerId, D_80163448);
|
||||
gNearestWaypointByPlayerId[playerId] = D_80162FCE;
|
||||
sSomeNearestWaypoint = func_8000CD24(posX, posY, posZ, 0, player, playerId, D_80163448);
|
||||
gNearestWaypointByPlayerId[playerId] = sSomeNearestWaypoint;
|
||||
func_80008F38(playerId);
|
||||
D_80163490[playerId] = 0;
|
||||
}
|
||||
if (D_801634A8[playerId] == 1) {
|
||||
D_80163448 = func_80008E58(playerId, 0);
|
||||
D_80162FCE = func_8000CD24(posX, posY, posZ, 0, player, playerId, D_80163448);
|
||||
gNearestWaypointByPlayerId[playerId] = D_80162FCE;
|
||||
sSomeNearestWaypoint = func_8000CD24(posX, posY, posZ, 0, player, playerId, D_80163448);
|
||||
gNearestWaypointByPlayerId[playerId] = sSomeNearestWaypoint;
|
||||
func_80008F38(playerId);
|
||||
D_801634A8[playerId] = 0;
|
||||
}
|
||||
|
|
@ -1401,8 +1409,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 - ( (0.01666666f * temp_f2) / (temp_f2 + temp_f12) );
|
||||
return gCourseTimer - ( (COURSE_TIMER_ITER * temp_f2) / (temp_f2 + temp_f12) );
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
|
|
@ -1423,18 +1430,18 @@ void func_8000929C(s32 playerId, Player *player) {
|
|||
tempPos2 = player->pos[2];
|
||||
D_801630E2 = 0;
|
||||
D_80163240[playerId] = 0;
|
||||
D_80162FCE = func_8000CD24(tempPos0, tempPos1, tempPos2, gNearestWaypointByPlayerId[playerId], player, playerId, D_80163448);
|
||||
D_801630E0 = D_80162FCE;
|
||||
if (gNearestWaypointByPlayerId[playerId] != D_80162FCE) {
|
||||
gNearestWaypointByPlayerId[playerId] = D_80162FCE;
|
||||
sSomeNearestWaypoint = func_8000CD24(tempPos0, tempPos1, tempPos2, gNearestWaypointByPlayerId[playerId], player, playerId, D_80163448);
|
||||
D_801630E0 = sSomeNearestWaypoint;
|
||||
if (gNearestWaypointByPlayerId[playerId] != sSomeNearestWaypoint) {
|
||||
gNearestWaypointByPlayerId[playerId] = sSomeNearestWaypoint;
|
||||
D_801630E2 = 1;
|
||||
func_80008F38(playerId);
|
||||
}
|
||||
if (gCurrentCourseId == 0x0014) {
|
||||
func_8000B95C(playerId, D_80162FCE, D_80163448);
|
||||
func_8000B95C(playerId, sSomeNearestWaypoint, D_80163448);
|
||||
return;
|
||||
}
|
||||
if ((D_80162FCE < 0x14) || ((gWaypointCountByPathIndex[D_80163448] - 0x14) < D_80162FCE) || (gCurrentCourseId == 0x000B)) {
|
||||
if ((sSomeNearestWaypoint < 0x14) || ((gWaypointCountByPathIndex[D_80163448] - 0x14) < sSomeNearestWaypoint) || (gCurrentCourseId == 0x000B)) {
|
||||
var_v1 = 0;
|
||||
var_t0 = 0;
|
||||
if (gCurrentCourseId == 0x000B) {
|
||||
|
|
@ -1468,10 +1475,10 @@ void func_8000929C(s32 playerId, Player *player) {
|
|||
someTemp0 = D_80163450[playerId];
|
||||
if ((var_v1 != 0) && (tempPos2 <= D_8016344C)) {
|
||||
if (D_8016344C < someTemp0) {
|
||||
gLapCountByPlayerId[playerId]++;
|
||||
gLapCountByPlayerId[playerId]++;
|
||||
if ((gModeSelection == 0) && (gLapCountByPlayerId[playerId] == 5)) {
|
||||
if (D_80164408[playerId] == 7) {
|
||||
for (var_v0 = 0; var_v0 < 8; var_v0++) { gLapCountByPlayerId[var_v0]--; }
|
||||
for (var_v0 = 0; var_v0 < 8; var_v0++) { gLapCountByPlayerId[var_v0]--; }
|
||||
}
|
||||
}
|
||||
D_80163240[playerId] = 1;
|
||||
|
|
@ -1489,11 +1496,11 @@ void func_8000929C(s32 playerId, Player *player) {
|
|||
}
|
||||
}
|
||||
D_80163450[playerId] = tempPos2;
|
||||
if ((gCurrentCourseId == 4) && (D_801630E2 == 1)) {
|
||||
func_80009000(playerId);
|
||||
if (((player->type & 0x4000) == 0) || (player->type & 0x1000)) {
|
||||
func_800090F0(playerId, player);
|
||||
}
|
||||
if ((gCurrentCourseId == COURSE_YOSHI_VALLEY) && (D_801630E2 == 1)) {
|
||||
func_80009000(playerId);
|
||||
if (((player->type & 0x4000) == 0) || (player->type & 0x1000)) {
|
||||
func_800090F0(playerId, player);
|
||||
}
|
||||
}
|
||||
if ((player->type & 0x4000) && !(player->type & 0x1000)) {
|
||||
func_800065D0(playerId, player);
|
||||
|
|
@ -1507,7 +1514,7 @@ void func_8000929C(s32 playerId, Player *player) {
|
|||
} else {
|
||||
//????
|
||||
}
|
||||
func_8000B95C(playerId, D_80162FCE, D_80163448);
|
||||
func_8000B95C(playerId, sSomeNearestWaypoint, D_80163448);
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8000929C.s")
|
||||
|
|
@ -1558,9 +1565,9 @@ void func_800098FC(s32 arg0, Player *player) {
|
|||
}
|
||||
if (D_801633B0[arg0] >= 0xB) {
|
||||
if ((player->soundEffects & 0x400000) || (player->soundEffects & 0x01000000) || (player->soundEffects & 2) || (player->soundEffects & 4) || (player->effects & HIT_EFFECT)) {
|
||||
func_800C92CC(arg0, 0x2900800BU);
|
||||
D_801633B0[arg0] = 0;
|
||||
}
|
||||
func_800C92CC(arg0, 0x2900800BU);
|
||||
D_801633B0[arg0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1761,12 +1768,12 @@ void func_80009B60(s32 playerId) {
|
|||
} else if (D_80162FD0 == (s16) 1U) {
|
||||
D_80163210[playerId] = D_0D0096B8[gCurrentCourseId][gCCSelection];
|
||||
D_801634F8[playerId].unk4 = -0.5f;
|
||||
} else if (D_801645E0[D_80162FCE] > 0) {
|
||||
} else if (D_801645E0[sSomeNearestWaypoint] > 0) {
|
||||
D_80163210[playerId] = D_0D009418[gCurrentCourseId][gCCSelection];
|
||||
} else {
|
||||
D_80163210[playerId] = D_0D009568[gCurrentCourseId][gCCSelection];
|
||||
}
|
||||
func_800131DC(playerId);
|
||||
check_ai_crossing_distance(playerId);
|
||||
func_8000D3B8(playerId);
|
||||
func_8000D438(playerId, D_801630E0);
|
||||
temp_f0 = D_80162FA0[0] - player->pos[0];
|
||||
|
|
@ -1795,7 +1802,7 @@ void func_80009B60(s32 playerId) {
|
|||
}
|
||||
if (D_801630E8[playerId] != 0) {
|
||||
D_80163300[playerId] = -get_angle_between_two_vectors(&player->copy_rotation_x, player->pos);
|
||||
var_a0_2 = (D_801631DC[(D_80162FCE + 2) % D_80164430] * 0x168) / 65535;
|
||||
var_a0_2 = (D_801631DC[(sSomeNearestWaypoint + 2) % D_80164430] * 0x168) / 65535;
|
||||
var_a1 = (D_80163300[playerId] * 0x168) / 65535;
|
||||
if (var_a0_2 < -0xB4) {
|
||||
var_a0_2 += 0x168;
|
||||
|
|
@ -1844,8 +1851,8 @@ void func_80009B60(s32 playerId) {
|
|||
func_80008424(playerId, D_80163210[playerId], player);
|
||||
return;
|
||||
}
|
||||
D_801630B8[playerId] = func_8000B7E4(playerId, D_80162FCE);
|
||||
func_8000D438(playerId, D_80162FCE);
|
||||
D_801630B8[playerId] = func_8000B7E4(playerId, sSomeNearestWaypoint);
|
||||
func_8000D438(playerId, sSomeNearestWaypoint);
|
||||
if (gCurrentCourseId != 0x0014) {
|
||||
if (D_80164450[playerId] < 0xB) {
|
||||
stackPadding1A = D_801630E0;
|
||||
|
|
@ -1969,7 +1976,7 @@ void func_80009B60(s32 playerId) {
|
|||
D_8016320C = D_80163028[playerId];
|
||||
player->effects &= ~0x00200000;
|
||||
D_80163210[playerId] = D_8016320C;
|
||||
func_800131DC(playerId);
|
||||
check_ai_crossing_distance(playerId);
|
||||
func_80008424(playerId, D_8016320C, player);
|
||||
}
|
||||
}
|
||||
|
|
@ -2479,7 +2486,7 @@ s16 func_8000CC88(f32 posX, f32 posY, f32 posZ, Player *player, s32 playerId, s3
|
|||
u16 trackSegment;
|
||||
s16 ret;
|
||||
|
||||
trackSegment = func_802ABD40(player->unk_110.unk3A);
|
||||
trackSegment = get_section_id(player->collision.meshIndexZX);
|
||||
if ((trackSegment <= 0) || (trackSegment >= 0x33)) {
|
||||
trackSegment = D_80163318[playerId];
|
||||
}
|
||||
|
|
@ -2497,7 +2504,7 @@ s16 func_8000CD24(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, Player *playe
|
|||
TrackWaypoint *temp_v1;
|
||||
|
||||
if ((player->type & 0x4000) && !(player->type & 0x1000)) {
|
||||
sp5E = func_8000C884(posX, posY, posZ, waypointIndex, pathIndex, (u16) func_802ABD40(player->unk_110.unk3A));
|
||||
sp5E = func_8000C884(posX, posY, posZ, waypointIndex, pathIndex, (u16) get_section_id(player->collision.meshIndexZX));
|
||||
if (sp5E == -1) {
|
||||
sp5E = func_8000CC88(posX, posY, posZ, player, playerId, &pathIndex);
|
||||
}
|
||||
|
|
@ -2512,8 +2519,8 @@ s16 func_8000CD24(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, Player *playe
|
|||
return waypointIndex;
|
||||
}
|
||||
if (playerId == ((s32) D_80163488 % 8)) {
|
||||
func_802ADDC8(&player->unk_110, 10.0f, posX, posY, posZ);
|
||||
D_80163318[playerId] = func_802ABD40(player->unk_110.unk3A);
|
||||
check_bounding_collision(&player->collision, 10.0f, posX, posY, posZ);
|
||||
D_80163318[playerId] = get_section_id(player->collision.meshIndexZX);
|
||||
sp5E = func_8000C884(posX, posY, posZ, waypointIndex, pathIndex, D_80163318[playerId]);
|
||||
if (sp5E == -1) {
|
||||
sp5E = func_8000C9DC(posX, posY, posZ, waypointIndex, pathIndex);
|
||||
|
|
@ -2536,8 +2543,8 @@ s16 func_8000CD24(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, Player *playe
|
|||
player->pos[0] = posX;
|
||||
player->pos[1] = posY;
|
||||
player->pos[2] = posZ;
|
||||
func_802ADDC8(&player->unk_110, 10.0f, posX, posY, posZ);
|
||||
D_80163318[playerId] = func_802ABD40(player->unk_110.unk3A);
|
||||
check_bounding_collision(&player->collision, 10.0f, posX, posY, posZ);
|
||||
D_80163318[playerId] = get_section_id(player->collision.meshIndexZX);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2547,7 +2554,7 @@ s16 func_8000CD24(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, Player *playe
|
|||
}
|
||||
}
|
||||
func_8000CBA4(posX, posY, posZ, &sp5E, pathIndex);
|
||||
}
|
||||
}
|
||||
func_8000CBF8(posX, posY, posZ, &sp5E, pathIndex);
|
||||
return sp5E;
|
||||
}
|
||||
|
|
@ -2589,8 +2596,8 @@ s16 func_8000D24C(f32 posX, f32 posY, f32 posZ, s32 *pathIndex) {
|
|||
UNUSED s32 pad;
|
||||
Collision sp24;
|
||||
|
||||
func_802ADDC8(&sp24, 10.0f, posX, posY, posZ);
|
||||
return func_8000C0BC(posX, posY, posZ, func_802ABD40(sp24.unk3A), pathIndex);
|
||||
check_bounding_collision(&sp24, 10.0f, posX, posY, posZ);
|
||||
return func_8000C0BC(posX, posY, posZ, get_section_id(sp24.meshIndexZX), pathIndex);
|
||||
}
|
||||
|
||||
s16 func_8000D2B4(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, s32 pathIndex) {
|
||||
|
|
@ -2907,7 +2914,7 @@ void set_bomb_kart_spawn_positions(void) {
|
|||
case COURSE_YOSHI_VALLEY:
|
||||
startingXPos = temp_s1->startingXPos;
|
||||
startingZPos = temp_s1->startingZPos;
|
||||
startingYPos = func_802AE1C0(startingXPos, 2000.0f, startingZPos);
|
||||
startingYPos = spawn_actor_on_surface(startingXPos, 2000.0f, startingZPos);
|
||||
break;
|
||||
case COURSE_AWARD_CEREMONY:
|
||||
temp_v0 = &D_80164550[3][temp_s1->waypointIndex];
|
||||
|
|
@ -2945,7 +2952,7 @@ void set_bomb_kart_spawn_positions(void) {
|
|||
gBombKarts[var_s3].unk_4A = 0;
|
||||
gBombKarts[var_s3].unk_4C = 1;
|
||||
gBombKarts[var_s3].yPos = startingYPos;
|
||||
func_802ADDC8(&D_80164038[var_s3], 2.0f, startingXPos, startingYPos, startingZPos);
|
||||
check_bounding_collision(&D_80164038[var_s3], 2.0f, startingXPos, startingYPos, startingZPos);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3144,11 +3151,11 @@ void func_8000DF8C(s32 bombKartId) {
|
|||
var_f24 += temp_f16 / 5.0f;
|
||||
}
|
||||
temp_a0_4 = &D_80164038[bombKartId];
|
||||
var_f20 = func_802ABE30(var_f22, 2000.0f, var_f24, temp_a0_4->unk3A) + 3.5f;
|
||||
var_f20 = calculate_surface_height(var_f22, 2000.0f, var_f24, temp_a0_4->meshIndexZX) + 3.5f;
|
||||
if (var_f20 < (-1000.0)) {
|
||||
var_f20 = bombKart->bombPos[1];
|
||||
}
|
||||
func_802ADDC8(temp_a0_4, 10.0f, var_f22, var_f20, var_f24);
|
||||
check_bounding_collision(temp_a0_4, 10.0f, var_f22, var_f20, var_f24);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
|
|
@ -3282,7 +3289,7 @@ void func_8000EEDC(void) {
|
|||
s32 i;
|
||||
|
||||
for (i = 0; i < NUM_PLAYERS; i++) {
|
||||
phi = &gUnexpiredActorsList[i];
|
||||
phi = &gUnexpiredActorsList[i];
|
||||
phi->unkC = 0;
|
||||
phi->actorIndex = 1000; // out of bounds
|
||||
}
|
||||
|
|
@ -3536,12 +3543,19 @@ void func_8000F628(void) {
|
|||
D_80163150[i] = -1;
|
||||
D_80164538[i] = -1;
|
||||
D_801634C0[i] = 0;
|
||||
D_801634D8[i] = 0;
|
||||
bStopAICrossing[i] = 0;
|
||||
D_801630B8[i] = 1;
|
||||
|
||||
}
|
||||
D_801637BC[0] = 0;
|
||||
D_801637BC[1] = 0;
|
||||
|
||||
#ifdef AVOID_UB
|
||||
for (i = 0; i < NUM_CROSSINGS; i++) {
|
||||
sCrossingActiveTimer[i] = 0;
|
||||
}
|
||||
#else
|
||||
sCrossingActiveTimer[0] = 0;
|
||||
sCrossingActiveTimer[1] = 0;
|
||||
#endif
|
||||
if (gDemoMode == DEMO_MODE_INACTIVE) {
|
||||
|
||||
if (gModeSelection == GRAND_PRIX) {
|
||||
|
|
@ -3883,14 +3897,14 @@ void func_80010E6C(s32 pathIndex) {
|
|||
}
|
||||
|
||||
f32 func_80010F40(f32 arg0, f32 arg1, f32 arg2, UNUSED s32 arg3, UNUSED s32 arg4) {
|
||||
arg1 = func_802AE1C0(arg0, 2000.0f, arg2);
|
||||
func_802ADDC8(&D_80162E70, 1.0f, arg0, arg1, arg2);
|
||||
arg1 = spawn_actor_on_surface(arg0, 2000.0f, arg2);
|
||||
check_bounding_collision(&D_80162E70, 1.0f, arg0, arg1, arg2);
|
||||
return arg1;
|
||||
}
|
||||
|
||||
f32 func_80010FA0(f32 arg0, f32 arg1, f32 arg2, UNUSED s32 arg3, UNUSED s32 arg4) {
|
||||
arg1 = func_802AE1C0(arg0, (f32) ((f64) arg1 + 30.0), arg2);
|
||||
func_802ADDC8(&D_80162E70, 10.0f, arg0, arg1, arg2);
|
||||
arg1 = spawn_actor_on_surface(arg0, (f32) ((f64) arg1 + 30.0), arg2);
|
||||
check_bounding_collision(&D_80162E70, 10.0f, arg0, arg1, arg2);
|
||||
return arg1;
|
||||
}
|
||||
|
||||
|
|
@ -3969,7 +3983,7 @@ s32 func_80011014(TrackWaypoint *pathDest, TrackWaypoint *path, s32 numPathPoint
|
|||
|
||||
|
||||
pathDest->posZ = (s16) temp_f22;
|
||||
pathDest->trackSegment = func_802ABD40(D_80162E70.unk3A);
|
||||
pathDest->trackSegment = get_section_id(D_80162E70.meshIndexZX);
|
||||
|
||||
if (var_f20_2 < -500.0) {
|
||||
var_f20_2 = var_f28;
|
||||
|
|
@ -4261,7 +4275,7 @@ void kart_ai_behaviour(s32 playerIndex) {
|
|||
|
||||
void func_80011EC0(s32 arg0, Player *player, s32 arg2, UNUSED u16 arg3) {
|
||||
if ((((player->unk_094 / 18.0f) * 216.0f) >= 45.0f) && (D_801630E8[arg0] == 0)) {
|
||||
switch (D_801631D8[D_80162FCE]) {
|
||||
switch (D_801631D8[sSomeNearestWaypoint]) {
|
||||
case 0:
|
||||
case 2:
|
||||
if ((arg2 >= -9) && (D_80162FF8[arg0] == 0)) {
|
||||
|
|
@ -4305,7 +4319,7 @@ void func_800120C8(void) {
|
|||
|
||||
temp = D_80163598;
|
||||
D_8016359C = func_8001168C(temp, waypoint, i - 1);
|
||||
D_80162EB0 = func_802AE1C0(temp[0].x, 2000.0f, temp[0].z);
|
||||
D_80162EB0 = spawn_actor_on_surface(temp[0].x, 2000.0f, temp[0].z);
|
||||
}
|
||||
|
||||
void func_80012190(void) {
|
||||
|
|
@ -4568,7 +4582,8 @@ void update_vehicle_trains(void) {
|
|||
func_800C98B8(gTrainList[i].locomotive.position, gTrainList[i].locomotive.velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x0D));
|
||||
}
|
||||
|
||||
gTrainList[i].someFlags = func_800061DC(gTrainList[i].locomotive.position, 2000.0f, gTrainList[i].someFlags);
|
||||
gTrainList[i].someFlags = set_vehicle_render_distance_flags(gTrainList[i].locomotive.position, TRAIN_SMOKE_RENDER_DISTANCE, gTrainList[i].someFlags);
|
||||
// Renders locomotive smoke on all screens if any player is within range.
|
||||
if ((((s16) D_80162FCC % 5) == 0) && (gTrainList[i].someFlags != 0)) {
|
||||
sp90[0] = gTrainList[i].locomotive.position[0];
|
||||
sp90[1] = (f32) ((f64) gTrainList[i].locomotive.position[1] + 65.0);
|
||||
|
|
@ -4655,7 +4670,7 @@ void func_80012DC0(s32 playerId, Player *player) {
|
|||
|
||||
/**
|
||||
* Appears to check if the train is close to the crossing.
|
||||
* Implements D_801637BC as a counter
|
||||
* Implements sCrossingActiveTimer as a counter
|
||||
*/
|
||||
void func_80013054(void) {
|
||||
f32 temp_f16;
|
||||
|
|
@ -4682,31 +4697,31 @@ void func_80013054(void) {
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < NUM_TRAINS; i++) {
|
||||
for (i = 0; i < NUM_CROSSINGS; i++) {
|
||||
if (isCrossingTriggeredByIndex[i] == 1) {
|
||||
D_801637BC[i] += 1;
|
||||
sCrossingActiveTimer[i] += 1;
|
||||
} else {
|
||||
D_801637BC[i] = 0;
|
||||
sCrossingActiveTimer[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_800131DC(s32 playerId) {
|
||||
D_801634D8[playerId] = 0;
|
||||
void check_ai_crossing_distance(s32 playerId) {
|
||||
bStopAICrossing[playerId] = 0;
|
||||
if (gCurrentCourseId == COURSE_KALAMARI_DESERT) {
|
||||
if ((!(D_801631E0[playerId] != 0))
|
||||
|| (func_800061DC(gPlayers[playerId].pos, 1000.0f, 0))) {
|
||||
|| (set_vehicle_render_distance_flags(gPlayers[playerId].pos, TRAIN_CROSSING_AI_DISTANCE, 0))) {
|
||||
|
||||
if ((isCrossingTriggeredByIndex[1] == 1)
|
||||
&& ((D_801637BC[1]) > 240)) {
|
||||
|
||||
if ((D_80162FCE > 176) && (D_80162FCE < 182)) {
|
||||
D_801634D8[playerId] = 1;
|
||||
&& ((sCrossingActiveTimer[1]) > FRAMES_SINCE_CROSSING_ACTIVATED)) {
|
||||
|
||||
if ((sSomeNearestWaypoint > 176) && (sSomeNearestWaypoint < 182)) {
|
||||
bStopAICrossing[playerId] = 1;
|
||||
}
|
||||
}
|
||||
if ((isCrossingTriggeredByIndex[0] == 1) && (( D_801637BC[0]) > 240)) {
|
||||
if ((D_80162FCE >= 306) && (D_80162FCE < 0x136)) {
|
||||
D_801634D8[playerId] = 1;
|
||||
if ((isCrossingTriggeredByIndex[0] == 1) && (( sCrossingActiveTimer[0]) > FRAMES_SINCE_CROSSING_ACTIVATED)) {
|
||||
if ((sSomeNearestWaypoint >= 306) && (sSomeNearestWaypoint < 310)) {
|
||||
bStopAICrossing[playerId] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4766,7 +4781,7 @@ void update_vehicle_paddle_boats(void) {
|
|||
temp_f28 = paddleBoat->position[1];
|
||||
temp_f30 = paddleBoat->position[2];
|
||||
func_8000DBAC(paddleBoat->position, (s16*)&paddleBoat->waypointIndex, paddleBoat->someMultiplier);
|
||||
paddleBoat->someFlags = func_800061DC(paddleBoat->position, 2000.0f, paddleBoat->someFlags);
|
||||
paddleBoat->someFlags = set_vehicle_render_distance_flags(paddleBoat->position, BOAT_SMOKE_RENDER_DISTANCE, paddleBoat->someFlags);
|
||||
if ((((s16) D_801630FC % 10) == 0) && (paddleBoat->someFlags != 0)) {
|
||||
sp78[0] = (f32) ((f64) paddleBoat->position[0] - 30.0);
|
||||
sp78[1] = (f32) ((f64) paddleBoat->position[1] + 180.0);
|
||||
|
|
@ -4881,39 +4896,39 @@ void func_800139E4(f32 arg0, f32 arg1, s32 arg2, s32 arg3, VehicleStuff *vehicle
|
|||
u16 waypointOffset;
|
||||
s32 numWaypoints = gWaypointCountByPathIndex[0];
|
||||
for (i = 0; i < arg2; i++) {
|
||||
waypointOffset = (((i * numWaypoints) / arg2) + arg3) % numWaypoints;
|
||||
veh = &vehicle[i];
|
||||
temp_v0 = &waypointList[waypointOffset];
|
||||
veh->position[0] = (f32) temp_v0->posX;
|
||||
veh->position[1] = (f32) temp_v0->posY;
|
||||
veh->position[2] = (f32) temp_v0->posZ;
|
||||
veh->actorIndex = -1;
|
||||
veh->waypointIndex = waypointOffset;
|
||||
veh->unused = 0;
|
||||
veh->velocity[0] = 0.0f;
|
||||
veh->velocity[1] = 0.0f;
|
||||
veh->velocity[2] = 0.0f;
|
||||
veh->someFlags = 0;
|
||||
veh->someFlagsTheSequel = 0;
|
||||
if (gModeSelection == TIME_TRIALS) {
|
||||
veh->someType = (i % 3);
|
||||
} else {
|
||||
veh->someType = random_int(3);
|
||||
}
|
||||
veh->someMultiplierTheSequel = (f32) ((f64) (f32) (veh->someType - 1) * 0.6);
|
||||
if (((gCCSelection > CC_50) || (gModeSelection == TIME_TRIALS)) && (veh->someType == 2)) {
|
||||
veh->someMultiplier = arg0;
|
||||
} else {
|
||||
veh->someMultiplier = arg1;
|
||||
}
|
||||
veh->rotation[0] = 0;
|
||||
veh->rotation[2] = 0;
|
||||
if (D_8016347A == 0) {
|
||||
veh->rotation[1] = func_8000D6D0(veh->position, (s16*)&veh->waypointIndex, veh->someMultiplier, veh->someMultiplierTheSequel, 0, 3);
|
||||
} else {
|
||||
veh->rotation[1] = func_8000D940(veh->position, (s16*)&veh->waypointIndex, veh->someMultiplier, veh->someMultiplierTheSequel, 0);
|
||||
}
|
||||
waypointOffset = (((i * numWaypoints) / arg2) + arg3) % numWaypoints;
|
||||
veh = &vehicle[i];
|
||||
temp_v0 = &waypointList[waypointOffset];
|
||||
veh->position[0] = (f32) temp_v0->posX;
|
||||
veh->position[1] = (f32) temp_v0->posY;
|
||||
veh->position[2] = (f32) temp_v0->posZ;
|
||||
veh->actorIndex = -1;
|
||||
veh->waypointIndex = waypointOffset;
|
||||
veh->unused = 0;
|
||||
veh->velocity[0] = 0.0f;
|
||||
veh->velocity[1] = 0.0f;
|
||||
veh->velocity[2] = 0.0f;
|
||||
veh->someFlags = 0;
|
||||
veh->someFlagsTheSequel = 0;
|
||||
if (gModeSelection == TIME_TRIALS) {
|
||||
veh->someType = (i % 3);
|
||||
} else {
|
||||
veh->someType = random_int(3);
|
||||
}
|
||||
veh->someMultiplierTheSequel = (f32) ((f64) (f32) (veh->someType - 1) * 0.6);
|
||||
if (((gCCSelection > CC_50) || (gModeSelection == TIME_TRIALS)) && (veh->someType == 2)) {
|
||||
veh->someMultiplier = arg0;
|
||||
} else {
|
||||
veh->someMultiplier = arg1;
|
||||
}
|
||||
veh->rotation[0] = 0;
|
||||
veh->rotation[2] = 0;
|
||||
if (D_8016347A == 0) {
|
||||
veh->rotation[1] = func_8000D6D0(veh->position, (s16*)&veh->waypointIndex, veh->someMultiplier, veh->someMultiplierTheSequel, 0, 3);
|
||||
} else {
|
||||
veh->rotation[1] = func_8000D940(veh->position, (s16*)&veh->waypointIndex, veh->someMultiplier, veh->someMultiplierTheSequel, 0);
|
||||
}
|
||||
}
|
||||
D_801631C8 = 10;
|
||||
}
|
||||
|
||||
|
|
@ -5052,12 +5067,12 @@ void func_80013F7C(s32 playerId, Player *player, VehicleStuff *vehicle, f32 arg3
|
|||
(temp_f22 > -20.0)) && (temp_f22 < 20.0) && (((temp_f14) > -300.0)) && ((temp_f14) < 300.0)) {
|
||||
if ((D_801631C8 > 0) && (vehicle->someFlags == 0)) {
|
||||
D_801631C8 -= 1;
|
||||
vehicle->someFlags |= (1 << playerId);
|
||||
vehicle->someFlags |= (RENDER_VEHICLE << playerId);
|
||||
func_800C9D80(vehicle->position, vehicle->velocity, soundBits);
|
||||
}
|
||||
} else {
|
||||
if (vehicle->someFlags != 0) {
|
||||
vehicle->someFlags &= ~(1 << playerId);
|
||||
vehicle->someFlags &= ~(RENDER_VEHICLE << playerId);
|
||||
if (vehicle->someFlags == 0) {
|
||||
D_801631C8 += 1;
|
||||
func_800C9EF4(vehicle->position, soundBits);
|
||||
|
|
@ -5201,7 +5216,7 @@ void func_800146B8(s32 playerId, s32 arg1, VehicleStuff *vehicle) {
|
|||
for (var_s2 = 0; var_s2 < arg1; var_s2++, vehicle++) {
|
||||
temp_a1 = vehicle->waypointIndex;
|
||||
for (var_v0 = 0; var_v0 < 0x18; var_v0 += 3) {
|
||||
if (((D_80162FCE + var_v0) % waypointCount) == temp_a1) {
|
||||
if (((sSomeNearestWaypoint + var_v0) % waypointCount) == temp_a1) {
|
||||
D_801634F8[playerId].unk4 = func_800145A8(vehicle->someType, D_80163068[playerId], temp_a1);
|
||||
return;
|
||||
}
|
||||
|
|
@ -5322,7 +5337,7 @@ void func_80014D30(s32 cameraId, s32 pathIndex) {
|
|||
|
||||
cameraWaypoint = gNearestWaypointByCameraId[cameraId];
|
||||
temp_v0 = &D_80164550[pathIndex][cameraWaypoint];
|
||||
func_802ADDC8(&cameras[cameraId].unk_54, 10.0f, (f32) temp_v0->posX, (f32) temp_v0->posY + 30.0f, (f32) temp_v0->posZ);
|
||||
check_bounding_collision(&cameras[cameraId].collision, 10.0f, (f32) temp_v0->posX, (f32) temp_v0->posY + 30.0f, (f32) temp_v0->posZ);
|
||||
}
|
||||
|
||||
void func_80014DE4(s32 arg0) {
|
||||
|
|
@ -5509,7 +5524,7 @@ void func_80015390(Camera *camera, UNUSED Player *player, UNUSED s32 arg2) {
|
|||
adjust_angle(&camera->unk_2C, temp_s1->rotation[1], var_a2);
|
||||
}
|
||||
func_8001D794(temp_s1, camera, sp64, &sp84, &sp80, &sp7C, camera->unk_2C);
|
||||
func_802ADDC8(&camera->unk_54, 10.0f, sp84, sp80, sp7C);
|
||||
check_bounding_collision(&camera->collision, 10.0f, sp84, sp80, sp7C);
|
||||
camera->lookAt[0] = sp64[0];
|
||||
camera->lookAt[1] = sp64[1];
|
||||
camera->lookAt[2] = sp64[2];
|
||||
|
|
@ -5543,7 +5558,7 @@ void func_80015544(s32 playerId, f32 arg1, s32 cameraId, s32 pathIndex) {
|
|||
|
||||
temp_f2 = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].posY;
|
||||
|
||||
temp_f12 = func_802AE1C0(D_80162FA0[0], (f32) (temp_f2 + 30.0), D_80162FA0[2]);
|
||||
temp_f12 = spawn_actor_on_surface(D_80162FA0[0], (f32) (temp_f2 + 30.0), D_80162FA0[2]);
|
||||
if ((temp_f12 < (temp_f2 - 20.0)) || (temp_f12 >= 3000.0)) {
|
||||
D_80164618[cameraId] = (f32) (temp_f2 + 10.0);
|
||||
} else {
|
||||
|
|
@ -5694,7 +5709,7 @@ void func_80015C94(Camera *camera, UNUSED Player *unusedPlayer, UNUSED s32 arg2,
|
|||
}
|
||||
camera->pos[0] = midX;
|
||||
camera->pos[2] = midZ;
|
||||
temp_f2_2 = func_802AE1C0(midX, (midY + 30.0), midZ);
|
||||
temp_f2_2 = spawn_actor_on_surface(midX, (midY + 30.0), midZ);
|
||||
if ((temp_f2_2 < (midY - 20.0)) || (temp_f2_2 >= 3000.0)) {
|
||||
camera->pos[1] = midY + 10.0;
|
||||
} else {
|
||||
|
|
@ -5820,7 +5835,7 @@ void func_80016494(Camera *camera, UNUSED Player *unusedPlayer, UNUSED s32 arg2,
|
|||
}
|
||||
camera->pos[0] = midX;
|
||||
camera->pos[2] = midZ;
|
||||
temp_f2_5 = func_802AE1C0(midX, midY + 30.0, midZ);
|
||||
temp_f2_5 = spawn_actor_on_surface(midX, midY + 30.0, midZ);
|
||||
if ((temp_f2_5 < (midY - 20.0)) || (temp_f2_5 >= 3000.0)) {
|
||||
camera->pos[1] = midY + 10.0;
|
||||
} else {
|
||||
|
|
@ -6340,7 +6355,7 @@ void func_800188F4(Camera *camera, UNUSED Player *unusePlayer, UNUSED s32 arg2,
|
|||
}
|
||||
camera->pos[0] = midX;
|
||||
camera->pos[2] = midZ;
|
||||
temp_f2_4 = func_802AE1C0(midX, midY + 30.0, midZ);
|
||||
temp_f2_4 = spawn_actor_on_surface(midX, midY + 30.0, midZ);
|
||||
if ((temp_f2_4 < (midY - 20.0)) || (temp_f2_4 >= 3000.0)) {
|
||||
camera->pos[1] = midY + 10.0;
|
||||
} else {
|
||||
|
|
@ -6377,7 +6392,7 @@ void func_80019118(s32 playerId, f32 arg1, s32 cameraId, UNUSED s16 pathIndex) {
|
|||
D_80164638[cameraId] = D_80162FA0[2];
|
||||
temp_f2 = (f32) D_80164550[0][gNearestWaypointByCameraId[cameraId]].posY;
|
||||
|
||||
temp_f12 = func_802AE1C0(D_80162FA0[0], (f32) (temp_f2 + 30.0), D_80162FA0[2]);
|
||||
temp_f12 = spawn_actor_on_surface(D_80162FA0[0], (f32) (temp_f2 + 30.0), D_80162FA0[2]);
|
||||
|
||||
if ((temp_f12 < (temp_f2 - 20.0)) || (temp_f12 >= 3000.0)) {
|
||||
D_80164618[cameraId] = (f32) (temp_f2 + 10.0);
|
||||
|
|
@ -7080,7 +7095,7 @@ void kart_ai_use_item_strategy(s32 playerId) {
|
|||
banana->velocity[1] = 0.0f;
|
||||
banana->velocity[2] = 0.0f;
|
||||
if (D_801631E0[playerId] == ((u16) 1)) {
|
||||
banana->pos[1] = func_802AE1C0(player->pos[0], (f32) (((f64) player->pos[1]) + 30.0), player->pos[2]) + (banana->boundingBoxSize + 1.0f);
|
||||
banana->pos[1] = spawn_actor_on_surface(player->pos[0], (f32) (((f64) player->pos[1]) + 30.0), player->pos[2]) + (banana->boundingBoxSize + 1.0f);
|
||||
}
|
||||
}
|
||||
player->soundEffects &= ~0x00040000;
|
||||
|
|
@ -7136,7 +7151,7 @@ void kart_ai_use_item_strategy(s32 playerId) {
|
|||
banana->velocity[0] = 0.0f;
|
||||
banana->velocity[1] = 0.0f;
|
||||
banana->velocity[2] = 0.0f;
|
||||
banana->pos[1] = func_802AE1C0(banana->pos[0], (f32) (((f64) banana->pos[1]) + 30.0), banana->pos[2]) + (banana->boundingBoxSize + 1.0f);
|
||||
banana->pos[1] = spawn_actor_on_surface(banana->pos[0], (f32) (((f64) banana->pos[1]) + 30.0), banana->pos[2]) + (banana->boundingBoxSize + 1.0f);
|
||||
}
|
||||
player->soundEffects &= ~0x00040000;
|
||||
temp_s0->unk_00 = 0;
|
||||
|
|
@ -7344,7 +7359,7 @@ void kart_ai_use_item_strategy(s32 playerId) {
|
|||
} else {
|
||||
func_802A1064(fakeItemBox);
|
||||
if (D_801631E0[playerId] == 1) {
|
||||
fakeItemBox->pos[1] = func_802AE1C0(fakeItemBox->pos[0], fakeItemBox->pos[1] + 30.0, fakeItemBox->pos[2]) + fakeItemBox->boundingBoxSize;
|
||||
fakeItemBox->pos[1] = spawn_actor_on_surface(fakeItemBox->pos[0], fakeItemBox->pos[1] + 30.0, fakeItemBox->pos[2]) + fakeItemBox->boundingBoxSize;
|
||||
}
|
||||
}
|
||||
temp_s0->unk_00 = 0;
|
||||
|
|
@ -7480,7 +7495,7 @@ void func_8001BE78(void) {
|
|||
}
|
||||
temp_s0 = &D_80164550[i][gNearestWaypointByPlayerId[i]];
|
||||
temp_s1->pos[0] = (f32) temp_s0->posX;
|
||||
temp_s1->pos[1] = func_802AE1C0((f32) temp_s0->posX, 2000.0f, (f32) temp_s0->posZ) + temp_s1->boundingBoxSize;
|
||||
temp_s1->pos[1] = spawn_actor_on_surface((f32) temp_s0->posX, 2000.0f, (f32) temp_s0->posZ) + temp_s1->boundingBoxSize;
|
||||
temp_s1->pos[2] = (f32) temp_s0->posZ;
|
||||
temp_s1->rotation[1] = (s16) *D_80164590[i];
|
||||
func_8003680C(temp_s1, 0);
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ s16 func_80005FD0(Vec3f, Vec3f);
|
|||
|
||||
s32 func_80006018(f32, f32, f32, f32, f32, f32, f32, f32);
|
||||
void func_80006114(Vec3f, Vec3f, s16);
|
||||
s32 func_800061DC(Vec3f, f32, s32);
|
||||
s32 set_vehicle_render_distance_flags(Vec3f, f32, s32);
|
||||
void func_800065D0(s32, Player*);
|
||||
void set_places(void);
|
||||
|
||||
|
|
@ -163,7 +163,7 @@ void update_vehicle_trains(void);
|
|||
void func_80012DC0(s32, Player*);
|
||||
|
||||
void func_80013054(void);
|
||||
void func_800131DC(s32);
|
||||
void check_ai_crossing_distance(s32);
|
||||
void func_800132F4(void);
|
||||
void update_vehicle_paddle_boats(void);
|
||||
void func_80013854(Player*);
|
||||
|
|
@ -352,7 +352,7 @@ extern s16 D_8016348C;
|
|||
extern s16 D_80163490[];
|
||||
extern s16 D_801634A8[];
|
||||
extern s16 D_801634C0[];
|
||||
extern s16 D_801634D8[];
|
||||
extern s16 bStopAICrossing[];
|
||||
extern s16 D_801634EC;
|
||||
extern s32 D_801634F0;
|
||||
extern s32 D_801634F4;
|
||||
|
|
@ -360,7 +360,7 @@ extern Test D_801634F8[];
|
|||
extern PathNoY *D_80163598;
|
||||
extern s32 D_8016359C;
|
||||
extern u16 isCrossingTriggeredByIndex[];
|
||||
extern u16 D_801637BC[];
|
||||
extern u16 sCrossingActiveTimer[];
|
||||
extern s32 D_80163DD8[];
|
||||
extern struct unexpiredActors gUnexpiredActorsList[];
|
||||
extern D_801642D8_entry D_801642D8[];
|
||||
|
|
|
|||
|
|
@ -18,14 +18,14 @@ UNUSED void func_8003DC50(Player *player, Vec3f arg1) {
|
|||
// Praise Fake Match!!
|
||||
if(player){};
|
||||
if (player->unk_230 <= player->unk_23C) {
|
||||
if (player->unk_110.unk48[1] >= 0.1736) {
|
||||
if (player->collision.unk48[1] >= 0.1736) {
|
||||
arg1[0] = (player->unk_206 / 182) * 0x78;
|
||||
arg1[2] = -(player->slopeAccel / 182) * 0x78;
|
||||
} else {
|
||||
arg1[0] = thing1;
|
||||
arg1[2] = thing2;
|
||||
}
|
||||
} else if (player->unk_110.unk48[1] >= 0.1736) {
|
||||
} else if (player->collision.unk48[1] >= 0.1736) {
|
||||
arg1[0] = (player->unk_206 / 182) * 0x78;
|
||||
arg1[2] = -(player->slopeAccel / 182) * 0x78;
|
||||
} else {
|
||||
|
|
@ -42,14 +42,14 @@ UNUSED void func_8003DE4C(Player *player, Vec3f arg1) {
|
|||
// Praise Fake Match!!
|
||||
if(player){};
|
||||
if (player->unk_230 <= player->unk_23C) {
|
||||
if (player->unk_110.unk54[1] >= 0.1736) {
|
||||
if (player->collision.unk54[1] >= 0.1736) {
|
||||
arg1[0] = (player->unk_206 / 182) * 0x78;
|
||||
arg1[2] = -(player->slopeAccel / 182) * 0x78;
|
||||
} else {
|
||||
arg1[0] = thing1;
|
||||
arg1[2] = thing2;
|
||||
}
|
||||
} else if (player->unk_110.unk54[1] >= 0.1736) {
|
||||
} else if (player->collision.unk54[1] >= 0.1736) {
|
||||
arg1[0] = (player->unk_206 / 182) * 0x78;
|
||||
arg1[2] = -(player->slopeAccel / 182) * 0x78;
|
||||
} else {
|
||||
|
|
@ -61,14 +61,14 @@ UNUSED void func_8003DE4C(Player *player, Vec3f arg1) {
|
|||
}
|
||||
// Stick to ground?
|
||||
void func_8003E048(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 1, 2);
|
||||
if (player->unk_110.orientationVector[1] <= 0.8829f) {
|
||||
if (player->collision.orientationVector[1] <= 0.8829f) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0xB4);
|
||||
arg3[2] = (-(player->slopeAccel / 182) * 0xB4);
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
player->unk_DAC = 0.5f;
|
||||
if ((player->effects & BOOST_EFFECT) != 0) {
|
||||
remove_boost_effect(player);
|
||||
|
|
@ -87,15 +87,15 @@ void func_8003E048(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4
|
|||
}
|
||||
|
||||
void func_8003E37C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 0.2;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 0.2;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 0.5f, 2);
|
||||
if ((player->unk_110.orientationVector[1] <= 0.7318f) || (player->surfaceType == CLIFF)) {
|
||||
if ((player->collision.orientationVector[1] <= 0.7318f) || (player->surfaceType == CLIFF)) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0xB4);
|
||||
arg3[2] = (-(player->slopeAccel / 182) * 0xB4);
|
||||
if (((player->unk_094 / 18.0f) * 216.0f) >= 8.0f) {
|
||||
func_80031F48(player, 5.0f);
|
||||
decelerate_ai_player(player, 5.0f);
|
||||
}
|
||||
player->unk_DAC = 0.5f;
|
||||
if ((player->effects & BOOST_EFFECT) != 0) {
|
||||
|
|
@ -115,14 +115,14 @@ void func_8003E37C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4
|
|||
}
|
||||
|
||||
void func_8003E6EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 0.5f, 2);
|
||||
if (player->unk_110.orientationVector[1] <= 0.8829f) {
|
||||
if (player->collision.orientationVector[1] <= 0.8829f) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0xB4);
|
||||
arg3[2] = (-(player->slopeAccel / 182) * 0xB4);
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
func_8003DC40(player);
|
||||
} else if ((((player->unk_094 / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0x32);
|
||||
|
|
@ -136,18 +136,18 @@ void func_8003E6EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4
|
|||
}
|
||||
|
||||
void func_8003E9EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 1.2f, 2);
|
||||
if (player->unk_110.orientationVector[1] <= 0.8357f) {
|
||||
if (player->collision.orientationVector[1] <= 0.8357f) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0x78);
|
||||
arg3[2] = (-(player->slopeAccel / 182) * 0xB4);
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
func_8003DC40(player);
|
||||
} else {
|
||||
if ((((player->unk_094 / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) {
|
||||
if ((player->boundingBoxCorners[2].surfaceType == ASPHALT) || (player->boundingBoxCorners[3].surfaceType == ASPHALT) || (player->boundingBoxCorners[1].surfaceType == ASPHALT) || (player->boundingBoxCorners[0].surfaceType == ASPHALT)) {
|
||||
if ((player->tyres[BACK_LEFT].surfaceType == ASPHALT) || (player->tyres[BACK_RIGHT].surfaceType == ASPHALT) || (player->tyres[FRONT_RIGHT].surfaceType == ASPHALT) || (player->tyres[FRONT_LEFT].surfaceType == ASPHALT)) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 5);
|
||||
} else {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0x28);
|
||||
|
|
@ -167,14 +167,14 @@ void func_8003E9EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4
|
|||
}
|
||||
|
||||
void func_8003EE2C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 0.5f, 2);
|
||||
if (player->unk_110.orientationVector[1] <= 0.8357f) {
|
||||
if (player->collision.orientationVector[1] <= 0.8357f) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0x78);
|
||||
arg3[2] = (-(player->slopeAccel / 182) * 0xB4);
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
func_8003DC40(player);
|
||||
} else if ((((player->unk_094 / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0x32);
|
||||
|
|
@ -188,17 +188,17 @@ void func_8003EE2C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4
|
|||
}
|
||||
|
||||
void func_8003F138(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 0.1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 0.5f, 2);
|
||||
if (player->surfaceType == GRASS) {
|
||||
player->unk_044 &= ~1;
|
||||
}
|
||||
if (player->unk_110.orientationVector[1] <= 0.8357f) {
|
||||
if (player->collision.orientationVector[1] <= 0.8357f) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0xC8);
|
||||
arg3[2] = (-(player->slopeAccel / 182) * 0xC8);
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
player->unk_DAC = 0.5f;
|
||||
arg3[0] = 0;
|
||||
} else if ((((player->unk_094 / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) {
|
||||
|
|
@ -215,13 +215,13 @@ void func_8003F138(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4
|
|||
}
|
||||
|
||||
void func_8003F46C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) {
|
||||
arg1[0] = -player->unk_110.orientationVector[0];
|
||||
arg1[1] = -player->unk_110.orientationVector[1];
|
||||
arg1[2] = -player->unk_110.orientationVector[2];
|
||||
if ((player->unk_110.orientationVector[1] < 0.0f) && ((player->unk_0CA & 2) == 0)) {
|
||||
*arg5 += arg1[0] * player->unk_110.unk3C[2] * 1;
|
||||
*arg6 += arg1[1] * player->unk_110.unk3C[2] * 1;
|
||||
*arg7 += arg1[2] * player->unk_110.unk3C[2] * 1;
|
||||
arg1[0] = -player->collision.orientationVector[0];
|
||||
arg1[1] = -player->collision.orientationVector[1];
|
||||
arg1[2] = -player->collision.orientationVector[2];
|
||||
if ((player->collision.orientationVector[1] < 0.0f) && ((player->unk_0CA & 2) == 0)) {
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 1.2f, 0.0f);
|
||||
player->kartHopJerk = 0.0f;
|
||||
player->kartHopAcceleration = 0.0f;
|
||||
|
|
@ -263,43 +263,43 @@ void func_8003F734(Player *player, Vec3f arg1, Vec3f arg2, f32 *arg3, f32 *arg4,
|
|||
f32 temp_f14;
|
||||
f32 temp_f0_2;
|
||||
|
||||
arg1[0] = -player->unk_110.unk48[0];
|
||||
arg1[1] = -player->unk_110.unk48[1];
|
||||
arg1[2] = -player->unk_110.unk48[2];
|
||||
if (player->unk_110.unk48[1] == 0) {
|
||||
*arg4 += arg1[0] * player->unk_110.unk3C[0] * 1;
|
||||
*arg5 += arg1[1] * player->unk_110.unk3C[0] * 0.1;
|
||||
*arg6 += arg1[2] * player->unk_110.unk3C[0] * 1;
|
||||
arg1[0] = -player->collision.unk48[0];
|
||||
arg1[1] = -player->collision.unk48[1];
|
||||
arg1[2] = -player->collision.unk48[2];
|
||||
if (player->collision.unk48[1] == 0) {
|
||||
*arg4 += arg1[0] * player->collision.surfaceDistance[0] * 1;
|
||||
*arg5 += arg1[1] * player->collision.surfaceDistance[0] * 0.1;
|
||||
*arg6 += arg1[2] * player->collision.surfaceDistance[0] * 1;
|
||||
if ((player->slopeAccel < 0) && (((player->unk_094 / 18.0f) * 216.0f) < 10.0f)) {
|
||||
func_8002A5F4(arg1, *arg3, arg2, 2.5f, 0);
|
||||
} else {
|
||||
func_8002A5F4(arg1, *arg3, arg2, 0.5f, 0);
|
||||
}
|
||||
} else if (player->unk_110.unk48[1] <= 0.5) {
|
||||
*arg4 += arg1[0] * player->unk_110.unk3C[0] * 1;
|
||||
*arg5 += arg1[1] * player->unk_110.unk3C[0] * 0.1;
|
||||
*arg6 += arg1[2] * player->unk_110.unk3C[0] * 1;
|
||||
} else if (player->collision.unk48[1] <= 0.5) {
|
||||
*arg4 += arg1[0] * player->collision.surfaceDistance[0] * 1;
|
||||
*arg5 += arg1[1] * player->collision.surfaceDistance[0] * 0.1;
|
||||
*arg6 += arg1[2] * player->collision.surfaceDistance[0] * 1;
|
||||
func_8002A5F4(arg1, *arg3, arg2, 1, 0);
|
||||
if ((!(player->effects & 0x10000)) && ((player->effects & 8) == 0)) {
|
||||
arg2[1] *= -1e-05;
|
||||
}
|
||||
} else {
|
||||
*arg4 += arg1[0] * player->unk_110.unk3C[0] * 1;
|
||||
temp_f0_2 = player->unk_110.unk3C[0] * arg1[1];
|
||||
*arg4 += arg1[0] * player->collision.surfaceDistance[0] * 1;
|
||||
temp_f0_2 = player->collision.surfaceDistance[0] * arg1[1];
|
||||
if (temp_f0_2 < 0) {
|
||||
*arg5 += temp_f0_2 * 0.1;
|
||||
} else {
|
||||
*arg5 += temp_f0_2 * 0;
|
||||
}
|
||||
*arg6 += arg1[2] * player->unk_110.unk3C[0] * 1;
|
||||
*arg6 += arg1[2] * player->collision.surfaceDistance[0] * 1;
|
||||
func_8002A5F4(arg1, *arg3, arg2, 1.2f, 0);
|
||||
if ((!(player->effects & 0x10000)) && ((player->effects & 8) == 0)) {
|
||||
arg2[1] *= -1e-05;
|
||||
}
|
||||
}
|
||||
player->effects &= ~0x10;
|
||||
temp_f12 = player->unk_110.unk3C[0] * arg1[0];
|
||||
temp_f14 = player->unk_110.unk3C[0] * arg1[2];
|
||||
temp_f12 = player->collision.surfaceDistance[0] * arg1[0];
|
||||
temp_f14 = player->collision.surfaceDistance[0] * arg1[2];
|
||||
if (((temp_f12 >= 0) && (temp_f14 >= 0)) || ((temp_f12 < 0) && (temp_f14 >= 0))) {
|
||||
temp_f0_2 = player->boundingBoxSize / 2;
|
||||
player->unk_218 = *arg4 - temp_f12 - temp_f0_2;
|
||||
|
|
@ -317,43 +317,43 @@ void func_8003FBAC(Player *player, Vec3f arg1, Vec3f arg2, f32 *arg3, f32 *arg4,
|
|||
f32 temp_f12;
|
||||
f32 temp_f14;
|
||||
|
||||
arg1[0] = -player->unk_110.unk54[0];
|
||||
arg1[1] = -player->unk_110.unk54[1];
|
||||
arg1[2] = -player->unk_110.unk54[2];
|
||||
if (player->unk_110.unk54[1] == 0) {
|
||||
*arg4 += arg1[0] * player->unk_110.unk3C[1] * 1;
|
||||
*arg5 += arg1[1] * player->unk_110.unk3C[1] * 0.1;
|
||||
*arg6 += arg1[2] * player->unk_110.unk3C[1] * 1;
|
||||
arg1[0] = -player->collision.unk54[0];
|
||||
arg1[1] = -player->collision.unk54[1];
|
||||
arg1[2] = -player->collision.unk54[2];
|
||||
if (player->collision.unk54[1] == 0) {
|
||||
*arg4 += arg1[0] * player->collision.surfaceDistance[1] * 1;
|
||||
*arg5 += arg1[1] * player->collision.surfaceDistance[1] * 0.1;
|
||||
*arg6 += arg1[2] * player->collision.surfaceDistance[1] * 1;
|
||||
if ((player->slopeAccel < 0) && (((player->unk_094 / 18.0f) * 216.0f) < 10.0f)) {
|
||||
func_8002A5F4(arg1, *arg3, arg2, 1.5f, 0);
|
||||
} else {
|
||||
func_8002A5F4(arg1, *arg3, arg2, 0.5f, 0);
|
||||
}
|
||||
} else if (player->unk_110.unk54[1] <= 0.5) {
|
||||
*arg4 += arg1[0] * player->unk_110.unk3C[1] * 1;
|
||||
*arg5 += arg1[1] * player->unk_110.unk3C[1] * 0.1;
|
||||
*arg6 += arg1[2] * player->unk_110.unk3C[1] * 1;
|
||||
} else if (player->collision.unk54[1] <= 0.5) {
|
||||
*arg4 += arg1[0] * player->collision.surfaceDistance[1] * 1;
|
||||
*arg5 += arg1[1] * player->collision.surfaceDistance[1] * 0.1;
|
||||
*arg6 += arg1[2] * player->collision.surfaceDistance[1] * 1;
|
||||
func_8002A5F4(arg1, *arg3, arg2, 1, 0);
|
||||
if ((!(player->effects & 0x10000)) && ((player->effects & 8) == 0)) {
|
||||
arg2[1] *= -1e-05;
|
||||
}
|
||||
} else {
|
||||
*arg4 += arg1[0] * player->unk_110.unk3C[1] * 1;
|
||||
temp_f0_2 = player->unk_110.unk3C[1] * arg1[1];
|
||||
*arg4 += arg1[0] * player->collision.surfaceDistance[1] * 1;
|
||||
temp_f0_2 = player->collision.surfaceDistance[1] * arg1[1];
|
||||
if (temp_f0_2 < 0) {
|
||||
*arg5 += temp_f0_2 * 0.1;
|
||||
} else {
|
||||
*arg5 += temp_f0_2 * 0;
|
||||
}
|
||||
*arg6 += arg1[2] * player->unk_110.unk3C[1] * 1;
|
||||
*arg6 += arg1[2] * player->collision.surfaceDistance[1] * 1;
|
||||
func_8002A5F4(arg1, *arg3, arg2, 1.2f, 0);
|
||||
if ((!(player->effects & 0x10000)) && ((player->effects & 8) == 0)) {
|
||||
arg2[1] *= -1e-05;
|
||||
}
|
||||
}
|
||||
player->effects &= ~0x10;
|
||||
temp_f12 = player->unk_110.unk3C[1] * arg1[0];
|
||||
temp_f14 = player->unk_110.unk3C[1] * arg1[2];
|
||||
temp_f12 = player->collision.surfaceDistance[1] * arg1[0];
|
||||
temp_f14 = player->collision.surfaceDistance[1] * arg1[2];
|
||||
if (((temp_f12 >= 0) && (temp_f14 >= 0)) || ((temp_f12 >= 0) && (temp_f14 < 0))) {
|
||||
temp_f0_2 = player->boundingBoxSize / 2;
|
||||
player->unk_218 = *arg4 - temp_f12 - temp_f0_2;
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@ UNUSED s32 D_80165910[96];
|
|||
s8 D_80165A90;
|
||||
UNUSED s32 D_80165AA0[95];
|
||||
UNUSED s32 D_80165C14;
|
||||
Objects gObjectList[OBJECT_LIST_SIZE];
|
||||
Object gObjectList[OBJECT_LIST_SIZE];
|
||||
UNUSED s32 D_80183D58;
|
||||
s32 objectListSize;
|
||||
Mtx D_80183D60;
|
||||
|
|
@ -2849,9 +2849,9 @@ void func_8005D898(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UN
|
|||
s32 temp_lo;
|
||||
|
||||
if (player->unk_0C0 >= 0) {
|
||||
func_8005D794(player, &player->unk_258[10 + arg1], player->boundingBoxCorners[2].cornerPos[0], player->boundingBoxCorners[2].cornerGroundY + 2.0f, player->boundingBoxCorners[2].cornerPos[2], player->boundingBoxCorners[2].surfaceType, 1);
|
||||
func_8005D794(player, &player->unk_258[10 + arg1], player->tyres[BACK_LEFT].pos[0], player->tyres[BACK_LEFT].baseHeight + 2.0f, player->tyres[BACK_LEFT].pos[2], player->tyres[BACK_LEFT].surfaceType, 1);
|
||||
} else {
|
||||
func_8005D794(player, &player->unk_258[10 + arg1], player->boundingBoxCorners[3].cornerPos[0], player->boundingBoxCorners[3].cornerGroundY + 2.0f, player->boundingBoxCorners[3].cornerPos[2], player->boundingBoxCorners[3].surfaceType, 0);
|
||||
func_8005D794(player, &player->unk_258[10 + arg1], player->tyres[BACK_RIGHT].pos[0], player->tyres[BACK_RIGHT].baseHeight + 2.0f, player->tyres[BACK_RIGHT].pos[2], player->tyres[BACK_RIGHT].surfaceType, 0);
|
||||
}
|
||||
|
||||
temp_lo = player->unk_0C0 / 182;
|
||||
|
|
@ -2911,18 +2911,18 @@ void func_8005DAF4(Player *player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8
|
|||
surfaceType = 0x000000FF;
|
||||
temp_v0 = random_int(test);
|
||||
if ((temp_v0 == 0) || (temp_v0 == 4)) {
|
||||
var_f2 = player->boundingBoxCorners[2].cornerPos[0];
|
||||
var_f12 = player->boundingBoxCorners[2].cornerGroundY + 2.0f;
|
||||
var_f14 = player->boundingBoxCorners[2].cornerPos[2];
|
||||
var_f2 = player->tyres[BACK_LEFT].pos[0];
|
||||
var_f12 = player->tyres[BACK_LEFT].baseHeight + 2.0f;
|
||||
var_f14 = player->tyres[BACK_LEFT].pos[2];
|
||||
var_t3 = 1;
|
||||
surfaceType = player->boundingBoxCorners[2].surfaceType;
|
||||
surfaceType = player->tyres[BACK_LEFT].surfaceType;
|
||||
}
|
||||
if ((temp_v0 == 2) || (temp_v0 == 6)) {
|
||||
var_f2 = player->boundingBoxCorners[3].cornerPos[0];
|
||||
var_f12 = player->boundingBoxCorners[3].cornerGroundY + 2.0f;
|
||||
var_f14 = player->boundingBoxCorners[3].cornerPos[2];
|
||||
var_f2 = player->tyres[BACK_RIGHT].pos[0];
|
||||
var_f12 = player->tyres[BACK_RIGHT].baseHeight + 2.0f;
|
||||
var_f14 = player->tyres[BACK_RIGHT].pos[2];
|
||||
var_t3 = 0;
|
||||
surfaceType = player->boundingBoxCorners[3].surfaceType;
|
||||
surfaceType = player->tyres[BACK_RIGHT].surfaceType;
|
||||
}
|
||||
switch (surfaceType) {
|
||||
case DIRT:
|
||||
|
|
@ -3105,19 +3105,19 @@ void func_8005EA94(Player *player, s16 arg1, s32 arg2, s8 arg3, UNUSED s8 arg4)
|
|||
var_t0 = 0x000000FF;
|
||||
temp_v0 = random_int(test);
|
||||
if ((temp_v0 == 0) || (temp_v0 == 8)) {
|
||||
if ((D_801652A0[arg3] - player->boundingBoxCorners[2].cornerGroundY) >= 3.5) {
|
||||
var_f2 = player->boundingBoxCorners[2].cornerPos[0];
|
||||
var_f12 = player->boundingBoxCorners[2].cornerGroundY + 2.0f;
|
||||
var_f14 = player->boundingBoxCorners[2].cornerPos[2];
|
||||
if ((D_801652A0[arg3] - player->tyres[BACK_LEFT].baseHeight) >= 3.5) {
|
||||
var_f2 = player->tyres[BACK_LEFT].pos[0];
|
||||
var_f12 = player->tyres[BACK_LEFT].baseHeight + 2.0f;
|
||||
var_f14 = player->tyres[BACK_LEFT].pos[2];
|
||||
var_t1 = 1;
|
||||
var_t0 = 0;
|
||||
}
|
||||
}
|
||||
if ((temp_v0 == 2) || (temp_v0 == 6)) {
|
||||
if ((D_801652A0[arg3] - player->boundingBoxCorners[3].cornerGroundY) >= 3.5) {
|
||||
var_f2 = player->boundingBoxCorners[3].cornerPos[0];
|
||||
var_f12 = player->boundingBoxCorners[3].cornerGroundY + 2.0f;
|
||||
var_f14 = player->boundingBoxCorners[3].cornerPos[2];
|
||||
if ((D_801652A0[arg3] - player->tyres[BACK_RIGHT].baseHeight) >= 3.5) {
|
||||
var_f2 = player->tyres[BACK_RIGHT].pos[0];
|
||||
var_f12 = player->tyres[BACK_RIGHT].baseHeight + 2.0f;
|
||||
var_f14 = player->tyres[BACK_RIGHT].pos[2];
|
||||
var_t1 = 0;
|
||||
var_t0 = 0;
|
||||
}
|
||||
|
|
@ -3150,18 +3150,18 @@ void func_8005ED48(Player *player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8
|
|||
surfaceType = 0x000000FF;
|
||||
temp_v0 = random_int(test);
|
||||
if ((temp_v0 == 2) || (temp_v0 == 4)) {
|
||||
var_f0 = player->boundingBoxCorners[2].cornerPos[0];
|
||||
var_f2 = player->boundingBoxCorners[2].cornerGroundY + 2.0f;
|
||||
var_f12 = player->boundingBoxCorners[2].cornerPos[2];
|
||||
var_f0 = player->tyres[BACK_LEFT].pos[0];
|
||||
var_f2 = player->tyres[BACK_LEFT].baseHeight + 2.0f;
|
||||
var_f12 = player->tyres[BACK_LEFT].pos[2];
|
||||
var_t3 = 1;
|
||||
surfaceType = player->boundingBoxCorners[2].surfaceType;
|
||||
surfaceType = player->tyres[BACK_LEFT].surfaceType;
|
||||
}
|
||||
if ((temp_v0 == 0) || (temp_v0 == 6)) {
|
||||
var_f0 = player->boundingBoxCorners[3].cornerPos[0];
|
||||
var_f2 = player->boundingBoxCorners[3].cornerGroundY + 2.0f;
|
||||
var_f12 = player->boundingBoxCorners[3].cornerPos[2];
|
||||
var_f0 = player->tyres[BACK_RIGHT].pos[0];
|
||||
var_f2 = player->tyres[BACK_RIGHT].baseHeight + 2.0f;
|
||||
var_f12 = player->tyres[BACK_RIGHT].pos[2];
|
||||
var_t3 = 0;
|
||||
surfaceType = player->boundingBoxCorners[3].surfaceType;
|
||||
surfaceType = player->tyres[BACK_RIGHT].surfaceType;
|
||||
}
|
||||
switch (surfaceType) {
|
||||
case DIRT:
|
||||
|
|
@ -3333,12 +3333,12 @@ void func_8005F90C(Player *player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8
|
|||
var_f2 = player->pos[1] - player->boundingBoxSize;
|
||||
var_f12 = player->pos[2];
|
||||
var_t1 = 1;
|
||||
surfaceType = player->boundingBoxCorners[2].surfaceType;
|
||||
surfaceType = player->tyres[BACK_LEFT].surfaceType;
|
||||
} else {
|
||||
var_f0 = player->pos[0];
|
||||
var_f2 = player->pos[1] - player->boundingBoxSize;
|
||||
var_f12 = player->pos[2];
|
||||
surfaceType = player->boundingBoxCorners[3].surfaceType;
|
||||
surfaceType = player->tyres[BACK_RIGHT].surfaceType;
|
||||
}
|
||||
switch (surfaceType) {
|
||||
case DIRT:
|
||||
|
|
@ -4280,11 +4280,11 @@ void func_80063268(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
|||
|
||||
void func_80063408(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
||||
if (player->unk_258[10 + arg1].unk_010 == 1) {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[2].cornerPos[2] + (player->unk_258[10 + arg1].unk_01E * -7) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[2].cornerPos[0] + (player->unk_258[10 + arg1].unk_01E * -7) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + (player->unk_258[10 + arg1].unk_01E * -7) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + (player->unk_258[10 + arg1].unk_01E * -7) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
} else {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[3].cornerPos[2] + (player->unk_258[10 + arg1].unk_01E * -7) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[3].cornerPos[0] + (player->unk_258[10 + arg1].unk_01E * -7) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + (player->unk_258[10 + arg1].unk_01E * -7) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + (player->unk_258[10 + arg1].unk_01E * -7) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
}
|
||||
|
||||
++player->unk_258[10 + arg1].unk_01E;
|
||||
|
|
@ -4319,19 +4319,19 @@ void func_800635D4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
|||
if (player->unk_258[10 + arg1].unk_010 == 1) {
|
||||
if ((player->effects & LIGHTNING_EFFECT)) {
|
||||
func_80062B18(&sp44, &sp40, &sp3C, -2.0f, 0.0f, (-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16, -player->unk_258[10 + arg1].unk_020, 2 * -player->unk_206);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[2].cornerPos[0] + sp44;
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[2].cornerPos[2] + sp3C;
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + sp44;
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + sp3C;
|
||||
} else {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[2].cornerPos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[2].cornerPos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
}
|
||||
} else if ((player->effects & LIGHTNING_EFFECT)) {
|
||||
func_80062B18(&sp44, &sp40, &sp3C, 2.0f, 0.0f, (-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16, - player->unk_258[10 + arg1].unk_020, 2 * -player->unk_206);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[3].cornerPos[0] + sp44;
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[3].cornerPos[2] + sp3C;
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + sp44;
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + sp3C;
|
||||
} else {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[3].cornerPos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[3].cornerPos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 16) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
}
|
||||
|
||||
++player->unk_258[10 + arg1].unk_01E;
|
||||
|
|
@ -4367,11 +4367,11 @@ void func_800635D4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
|||
|
||||
void func_800639DC(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
||||
if (player->unk_258[10 + arg1].unk_010 == 1) {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[2].cornerPos[2] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[2].cornerPos[0] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
} else {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[3].cornerPos[2] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[3].cornerPos[0] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + (-1.8f * player->unk_258[10 + arg1].unk_01E) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
}
|
||||
++player->unk_258[10 + arg1].unk_01E;
|
||||
player->unk_258[10 + arg1].unk_000[1] += 0.3;
|
||||
|
|
@ -4402,11 +4402,11 @@ void func_800639DC(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
|||
|
||||
void func_80063BD4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
||||
if (player->unk_258[10 + arg1].unk_010 == 1) {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[2].cornerPos[2] + (-2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020));
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[2].cornerPos[0] + (-2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020));
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + (-2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020));
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + (-2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020));
|
||||
} else {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[3].cornerPos[2] + (-2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020));
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[3].cornerPos[0] + (-2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020));
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + (-2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020));
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + (-2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020));
|
||||
}
|
||||
|
||||
++player->unk_258[10 + arg1].unk_01E;
|
||||
|
|
@ -4423,11 +4423,11 @@ void func_80063BD4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
|||
|
||||
void func_80063D58(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) {
|
||||
if (player->unk_258[10 + arg1].unk_010 == 1) {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[2].cornerPos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[2].cornerPos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
} else {
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->boundingBoxCorners[3].cornerPos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->boundingBoxCorners[3].cornerPos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * coss(player->unk_258[10 + arg1].unk_020);
|
||||
player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + ((-player->unk_258[10 + arg1].unk_01E * (player->unk_094 / 18.0f) * 216.0f) / 20.0f) * sins(player->unk_258[10 + arg1].unk_020);
|
||||
}
|
||||
|
||||
++player->unk_258[10 + arg1].unk_01E;
|
||||
|
|
@ -5101,22 +5101,49 @@ void func_80066998(Player *player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
|
|||
}
|
||||
}
|
||||
|
||||
Vtx D_800E8900a[][4] = {
|
||||
{
|
||||
{{{ 2, 4, 0}, 0, { 0, 0}, { 0, 255, 255, 112}}},
|
||||
{{{ 2, 0, 0}, 0, { 0, 4032}, { 0, 255, 255, 112}}},
|
||||
{{{ 0, 0, 0}, 0, { 1984, 4032}, {255, 255, 0, 112}}},
|
||||
{{{ 0, 4, 0}, 0, { 1984, 0}, { 0, 255, 255, 112}}},
|
||||
},
|
||||
{
|
||||
{{{ 0, 4, 0}, 0, { 0, 0}, { 0, 255, 255, 112}}},
|
||||
{{{ 0, 0, 0}, 0, { 0, 4032}, {255, 255, 0, 112}}},
|
||||
{{{ -2, 0, 0}, 0, { 1984, 4032}, { 0, 255, 255, 112}}},
|
||||
{{{ -2, 4, 0}, 0, { 1984, 0}, { 0, 255, 255, 112}}},
|
||||
},
|
||||
{
|
||||
{{{ 2, 4, 0}, 0, { 1984, 0}, { 0, 255, 255, 112}}},
|
||||
{{{ 2, 0, 0}, 0, { 1984, 4032}, { 0, 255, 255, 112}}},
|
||||
{{{ 0, 0, 0}, 0, { 0, 4032}, {255, 255, 0, 112}}},
|
||||
{{{ 0, 4, 0}, 0, { 0, 0}, { 0, 255, 255, 112}}},
|
||||
},
|
||||
{
|
||||
{{{ 0, 4, 0}, 0, { 1984, 0}, { 0, 255, 255, 112}}},
|
||||
{{{ 0, 0, 0}, 0, { 1984, 4032}, {255, 255, 0, 112}}},
|
||||
{{{ -2, 0, 0}, 0, { 0, 4032}, { 0, 255, 255, 112}}},
|
||||
{{{ -2, 4, 0}, 0, { 0, 0}, { 0, 255, 255, 112}}},
|
||||
},
|
||||
};
|
||||
|
||||
void func_80066BAC(Player *player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
|
||||
Vec3f spDC;
|
||||
Vec3s spD4;
|
||||
UNUSED s32 stackPadding;
|
||||
//Vtx **A_800E8900 = (Vtx **) LOAD_ASSET(D_800E8900);
|
||||
|
||||
if ((player->unk_258[arg2].unk_01C == 1) && (player->unk_258[arg2].unk_038 != 0x00FF)) {
|
||||
Vtx **A_800E8900 = *(Vtx **) LOAD_ASSET(D_800E8900);
|
||||
|
||||
if (player->unk_110.unk3C[2] >= 300.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 300.0f) {
|
||||
spDC[1] = player->pos[1] + 5.0f;
|
||||
} else {
|
||||
spDC[1] = player->pos[1] - 3.0f;
|
||||
}
|
||||
spDC[2] = player->pos[2] + (coss(player->unk_048[arg3]) * -10.0f);
|
||||
spDC[0] = player->pos[0] + (sins(player->unk_048[arg3]) * -10.0f);
|
||||
if (player->unk_110.unk3C[2] >= 300.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 300.0f) {
|
||||
spD4[0] = cameras[arg3].rot[0] - 0x4000;
|
||||
} else {
|
||||
spD4[0] = 0;
|
||||
|
|
@ -5129,20 +5156,20 @@ void func_80066BAC(Player *player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
|
|||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2);
|
||||
gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C4, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPVertex(gDisplayListHead++, &A_800E8900[0][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPVertex(gDisplayListHead++, &D_800E8900a[0][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
|
||||
gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C8, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPVertex(gDisplayListHead++, &A_800E8900[1][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPVertex(gDisplayListHead++, &D_800E8900a[1][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, D_0D008DA0);
|
||||
} else {
|
||||
gSPDisplayList(gDisplayListHead++, D_0D008DB8);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2);
|
||||
gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C8, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPVertex(gDisplayListHead++, &A_800E8900[0][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPVertex(gDisplayListHead++, &D_800E8900a[0][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
|
||||
gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C4, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPVertex(gDisplayListHead++, &A_800E8900[1][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPVertex(gDisplayListHead++, &D_800E8900a[1][player->unk_258[arg2].unk_038], 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, D_0D008DA0);
|
||||
}
|
||||
gMatrixEffectCount += 1;
|
||||
|
|
@ -6034,7 +6061,7 @@ void func_8006C6AC(Player *player, s16 arg1, s8 arg2, s8 arg3) {
|
|||
} else if (!(player->effects & 8) && !(player->effects & 2)) {
|
||||
if (((player->effects & 0x10) == 0x10) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
|
||||
func_8005DA30(player, arg1, sp28, arg2_copy, arg3);
|
||||
} else if (((f64) (D_801652A0[arg2_copy] - player->boundingBoxCorners[3].cornerGroundY) >= 3.5) || ((f64) (D_801652A0[arg2_copy] - player->boundingBoxCorners[2].cornerGroundY) >= 3.5)) {
|
||||
} else if (((f64) (D_801652A0[arg2_copy] - player->tyres[BACK_RIGHT].baseHeight) >= 3.5) || ((f64) (D_801652A0[arg2_copy] - player->tyres[BACK_LEFT].baseHeight) >= 3.5)) {
|
||||
func_8005EA94(player, arg1, sp28, arg2_copy, arg3);
|
||||
} else if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) {
|
||||
func_8005F90C(player, arg1, sp28, arg2_copy, arg3);
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ extern s16 D_80165900;
|
|||
extern s8 D_80165908;
|
||||
|
||||
extern s8 D_80165A90;
|
||||
// extern Objects gObjectList[]; -> objects.h
|
||||
// extern Object gObjectList[]; -> objects.h
|
||||
|
||||
extern s32 objectListSize;
|
||||
extern Mtx D_80183D60;
|
||||
|
|
@ -542,7 +542,7 @@ extern u8 D_8018D228;
|
|||
extern s32 D_8018D22C;
|
||||
// extern s8 D_8018D230; -> objects.h
|
||||
|
||||
extern s32 D_8018D240;
|
||||
extern uintptr_t D_8018D240;
|
||||
extern u8 *D_8018D248[];
|
||||
extern f32 D_8018D2A0;
|
||||
extern s32 D_8018D2A4;
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ s32 D_8018D22C;
|
|||
//! Something related to the display of the clouds/stars?
|
||||
s8 D_8018D230;
|
||||
UNUSED s32 D_8018D238[2];
|
||||
s32 D_8018D240;
|
||||
uintptr_t D_8018D240;
|
||||
u8 *D_8018D248[22];
|
||||
f32 D_8018D2A0;
|
||||
s32 D_8018D2A4;
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ void func_8006EB10(void) {
|
|||
}
|
||||
|
||||
void clear_object_list() {
|
||||
bzero(gObjectList, OBJECT_LIST_SIZE * sizeof(Objects));
|
||||
bzero(gObjectList, OBJECT_LIST_SIZE * sizeof(Object));
|
||||
objectListSize = -1;
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ void init_item_window(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_8006EEE8(s32 courseId) {
|
||||
D_8018D240 = (s32)dma_textures(gCourseOutlineTextures[courseId], D_800E5520[courseId], D_800E5520[courseId]);
|
||||
D_8018D240 = (uintptr_t)dma_textures(gCourseOutlineTextures[courseId], D_800E5520[courseId], D_800E5520[courseId]);
|
||||
// This is incredibly dumb. D_800E5548 ought to be something more like
|
||||
// `u16 D_800E5548[][2]` but that doesn't match for some insane reason
|
||||
D_8018D2B0 = D_800E5548[courseId * 2];
|
||||
|
|
@ -824,7 +824,7 @@ void init_course_object(void) {
|
|||
objectId = indexObjectList2[i];
|
||||
init_object(objectId, 0);
|
||||
gObjectList[objectId].pos[0] = gObjectList[objectId].origin_pos[0] = gHedgehogSpawns[i].pos[0] * xOrientation;
|
||||
gObjectList[objectId].pos[1] = gObjectList[objectId].unk_044 = gHedgehogSpawns[i].pos[1] + 6.0;
|
||||
gObjectList[objectId].pos[1] = gObjectList[objectId].surfaceHeight = gHedgehogSpawns[i].pos[1] + 6.0;
|
||||
gObjectList[objectId].pos[2] = gObjectList[objectId].origin_pos[2] = gHedgehogSpawns[i].pos[2];
|
||||
gObjectList[objectId].unk_0D5 = gHedgehogSpawns[i].unk_06;
|
||||
gObjectList[objectId].unk_09C = gHedgehogPatrolPoints[i][0] * xOrientation;
|
||||
|
|
@ -1020,7 +1020,7 @@ void init_hud_one_player(void) {
|
|||
D_8018CFEC = playerHUD[PLAYER_ONE].speedometerX + 0x18;
|
||||
D_8018CFF4 = playerHUD[PLAYER_ONE].speedometerY + 6;
|
||||
D_8016579E = 0xDD00;
|
||||
playerHUD[PLAYER_ONE].rankX = 0x0034;
|
||||
playerHUD[PLAYER_ONE].rankX = 52;
|
||||
playerHUD[PLAYER_ONE].rankY = 0x00C8;
|
||||
playerHUD[PLAYER_ONE].slideRankX = 0;
|
||||
playerHUD[PLAYER_ONE].slideRankY = 0;
|
||||
|
|
|
|||
|
|
@ -425,33 +425,33 @@ void func_80088150(s32 arg0) {
|
|||
|
||||
void func_80088178(s32 objectIndex, s32 arg1) {
|
||||
s16 temp_a1;
|
||||
Objects *temp_v1;
|
||||
Object *object;
|
||||
|
||||
temp_v1 = &gObjectList[objectIndex];
|
||||
object = &gObjectList[objectIndex];
|
||||
temp_a1 = atan2s(D_80165760[1] - D_80165760[0], D_80165780[1] - D_80165780[0]);
|
||||
temp_a1 -= temp_v1->direction_angle[1];
|
||||
temp_a1 -= object->direction_angle[1];
|
||||
if (temp_a1 > 0) {
|
||||
temp_v1->direction_angle[1] += (arg1 << 8);
|
||||
object->direction_angle[1] += (arg1 << 8);
|
||||
} else if (temp_a1 < 0) {
|
||||
temp_v1->direction_angle[1] -= (arg1 << 8);
|
||||
object->direction_angle[1] -= (arg1 << 8);
|
||||
}
|
||||
}
|
||||
|
||||
// if the code is too ugly for you, then go fix it without tampering with the register allocations
|
||||
void func_80088228(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->unk_084[9] = 0;
|
||||
temp_v0->controlPoints = temp_v0->spline->controlPoints;
|
||||
Object *object;
|
||||
object = &gObjectList[objectIndex];
|
||||
object->unk_084[9] = 0;
|
||||
object->controlPoints = object->spline->controlPoints;
|
||||
/*
|
||||
This is INCREDIBLY stupid. This should really be
|
||||
temp_v0->unk_084[8] = temp_v0->spline->numControlPoints;
|
||||
but for some unholy reason that doesn't match
|
||||
*/
|
||||
temp_v0->unk_084[8] = *((s16*)temp_v0->controlPoints - 1);
|
||||
temp_v0->offset[0] = temp_v0->controlPoints[0].pos[0];
|
||||
temp_v0->offset[1] = temp_v0->controlPoints[0].pos[1];
|
||||
temp_v0->offset[2] = temp_v0->controlPoints[0].pos[2];
|
||||
object->unk_084[8] = *((s16*)object->controlPoints - 1);
|
||||
object->offset[0] = object->controlPoints[0].pos[0];
|
||||
object->offset[1] = object->controlPoints[0].pos[1];
|
||||
object->offset[2] = object->controlPoints[0].pos[2];
|
||||
func_80086FD4(objectIndex);
|
||||
}
|
||||
|
||||
|
|
@ -473,16 +473,16 @@ s32 func_800882B0(s32 objectIndex, s32 arg1) {
|
|||
}
|
||||
|
||||
void func_80088364(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
func_800880E4(objectIndex);
|
||||
func_80088178(objectIndex, 1);
|
||||
func_800876A0(objectIndex);
|
||||
if (func_800882B0(objectIndex, 0x0000000A) != 0) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->unk_084[9] = (u16) temp_v0->unk_084[9] + 1;
|
||||
if (((u16)temp_v0->unk_084[9] + 3) == (u16) temp_v0->unk_084[8]) {
|
||||
temp_v0->unk_0AE += 1;
|
||||
object = &gObjectList[objectIndex];
|
||||
object->unk_084[9] = (u16) object->unk_084[9] + 1;
|
||||
if (((u16)object->unk_084[9] + 3) == (u16) object->unk_084[8]) {
|
||||
object->unk_0AE += 1;
|
||||
} else {
|
||||
func_80088150(objectIndex);
|
||||
}
|
||||
|
|
@ -511,12 +511,12 @@ s32 func_8008847C(s32 objectIndex) {
|
|||
sp2C = 0;
|
||||
set_object_flag_status_false(objectIndex, 0x00800000);
|
||||
if (is_obj_flag_status_active(objectIndex, 0x00000400) != 0) {
|
||||
func_802ADDC8(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
check_bounding_collision(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
if (D_8018C3B0.unk34 == 1) {
|
||||
sp2C = 1;
|
||||
set_object_flag_status_true(objectIndex, 0x00800000);
|
||||
}
|
||||
gObjectList[objectIndex].unk_044 = func_802ABE30(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.unk3A);
|
||||
gObjectList[objectIndex].surfaceHeight = calculate_surface_height(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.meshIndexZX);
|
||||
}
|
||||
return sp2C;
|
||||
}
|
||||
|
|
@ -527,12 +527,12 @@ s32 func_80088538(s32 objectIndex) {
|
|||
sp2C = 0;
|
||||
set_object_flag_status_false(objectIndex, 0x00800000);
|
||||
if (is_obj_flag_status_active(objectIndex, 0x00000400) != 0) {
|
||||
func_802ADDC8(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
check_bounding_collision(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
if (D_8018C3B0.unk34 == 1) {
|
||||
sp2C = 1;
|
||||
set_object_flag_status_true(objectIndex, 0x00800000);
|
||||
}
|
||||
gObjectList[objectIndex].unk_044 = func_802ABE30(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.unk3A);
|
||||
gObjectList[objectIndex].surfaceHeight = calculate_surface_height(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.meshIndexZX);
|
||||
gObjectList[objectIndex].unk_0B8[0] = atan2s(D_8018C3B0.orientationVector[2], D_8018C3B0.orientationVector[1]) + 0x4000;
|
||||
gObjectList[objectIndex].unk_0B8[2] = atan2s(D_8018C3B0.orientationVector[0], D_8018C3B0.orientationVector[1]);
|
||||
}
|
||||
|
|
@ -545,12 +545,12 @@ s32 func_8008861C(s32 objectIndex) {
|
|||
sp2C = 0;
|
||||
set_object_flag_status_false(objectIndex, 0x00800000);
|
||||
if (is_obj_flag_status_active(objectIndex, 0x00000400) != 0) {
|
||||
func_802ADDC8(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
check_bounding_collision(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
if (D_8018C3B0.unk34 == 1) {
|
||||
sp2C = 1;
|
||||
set_object_flag_status_true(objectIndex, 0x00800000);
|
||||
}
|
||||
gObjectList[objectIndex].unk_044 = func_802ABE30(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.unk3A);
|
||||
gObjectList[objectIndex].surfaceHeight = calculate_surface_height(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.meshIndexZX);
|
||||
gObjectList[objectIndex].unk_01C[0] = D_8018C3B0.orientationVector[0];
|
||||
gObjectList[objectIndex].unk_01C[1] = D_8018C3B0.orientationVector[1];
|
||||
gObjectList[objectIndex].unk_01C[2] = D_8018C3B0.orientationVector[2];
|
||||
|
|
@ -559,10 +559,10 @@ s32 func_8008861C(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_800886F4(s32 objectIndex) {
|
||||
func_802ADDC8(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
check_bounding_collision(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
if (D_8018C3B0.unk34 == 1) {
|
||||
set_object_flag_status_true(objectIndex, 0x00800000);
|
||||
gObjectList[objectIndex].unk_044 = func_802ABE30(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.unk3A);
|
||||
gObjectList[objectIndex].surfaceHeight = calculate_surface_height(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.meshIndexZX);
|
||||
gObjectList[objectIndex].unk_0B8[0] = atan2s(D_8018C3B0.orientationVector[2], D_8018C3B0.orientationVector[1]) + 0x4000;
|
||||
gObjectList[objectIndex].unk_0B8[2] = atan2s(D_8018C3B0.orientationVector[0], D_8018C3B0.orientationVector[1]);
|
||||
return;
|
||||
|
|
@ -571,10 +571,10 @@ void func_800886F4(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_800887C0(s32 objectIndex) {
|
||||
func_802ADDC8(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
check_bounding_collision(&D_8018C3B0, 10.0f, gObjectList[objectIndex].pos[0], 20.0f, gObjectList[objectIndex].pos[2]);
|
||||
if (D_8018C3B0.unk34 == 1) {
|
||||
set_object_flag_status_true(objectIndex, 0x00800000);
|
||||
gObjectList[objectIndex].unk_044 = func_802ABE30(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.unk3A);
|
||||
gObjectList[objectIndex].surfaceHeight = calculate_surface_height(gObjectList[objectIndex].pos[0], 0.0f, gObjectList[objectIndex].pos[2], D_8018C3B0.meshIndexZX);
|
||||
gObjectList[objectIndex].velocity[0] = D_8018C3B0.orientationVector[0];
|
||||
gObjectList[objectIndex].velocity[1] = D_8018C3B0.orientationVector[1];
|
||||
gObjectList[objectIndex].velocity[2] = D_8018C3B0.orientationVector[2];
|
||||
|
|
@ -1005,26 +1005,26 @@ f32 func_8008933C(Player *player, s32 objectIndex, f32 arg2, f32 arg3) {
|
|||
f32 var_f2;
|
||||
f32 something;
|
||||
s32 playerId;
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
struct_D_8018CE10 *temp_v1;
|
||||
|
||||
playerId = player - gPlayerOne;
|
||||
temp_v1 = &D_8018CE10[playerId];
|
||||
var_f2 = 0.0f;
|
||||
if (temp_v1->unk_18[6] == 0) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
object = &gObjectList[objectIndex];
|
||||
player->unk_046 |= 2;
|
||||
player->effects |= 0x8000;
|
||||
temp_v1->unk_18[6] = 4;
|
||||
something = (player->pos[0] - temp_v0->pos[0]) * temp_v0->velocity[0];
|
||||
something = (player->pos[0] - object->pos[0]) * object->velocity[0];
|
||||
if (something >= 0.0f) {
|
||||
temp_v1->unk_04[0] = (-player->velocity[0] * arg2) + (temp_v0->velocity[0] * arg3);
|
||||
temp_v1->unk_04[0] = (-player->velocity[0] * arg2) + (object->velocity[0] * arg3);
|
||||
} else {
|
||||
temp_v1->unk_04[0] = -player->velocity[0] * arg2;
|
||||
}
|
||||
something = (player->pos[2] - temp_v0->pos[2]) * temp_v0->velocity[2];
|
||||
something = (player->pos[2] - object->pos[2]) * object->velocity[2];
|
||||
if (something >= 0.0f) {
|
||||
temp_v1->unk_04[2] = (-player->velocity[2] * arg2) + (temp_v0->velocity[2] * arg3);
|
||||
temp_v1->unk_04[2] = (-player->velocity[2] * arg2) + (object->velocity[2] * arg3);
|
||||
} else {
|
||||
temp_v1->unk_04[2] = -player->velocity[2] * arg2;
|
||||
}
|
||||
|
|
@ -1415,11 +1415,11 @@ UNUSED void func_8008A850(s32 arg0) {
|
|||
}
|
||||
|
||||
UNUSED s32 func_8008A870(Player *player) {
|
||||
return func_802ABD40(player->unk_110.unk3A);
|
||||
return get_section_id(player->collision.meshIndexZX);
|
||||
}
|
||||
|
||||
s32 func_8008A890(Camera *camera) {
|
||||
return func_802ABD40(camera->unk_54.unk3A);
|
||||
return get_section_id(camera->collision.meshIndexZX);
|
||||
}
|
||||
|
||||
s32 func_8008A8B0(s16 arg0, s16 arg1) {
|
||||
|
|
@ -1447,48 +1447,48 @@ void func_8008A920(s32 objectIndex) {
|
|||
|
||||
void func_8008A9B8(s32 objectIndex) {
|
||||
UNUSED s32 temp_t9;
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->controlPoints++;
|
||||
temp_v0->unk_09A = (s16) (10000 / (s16) (temp_v0->controlPoints[0].velocity));
|
||||
temp_v0->timer = 0;
|
||||
object = &gObjectList[objectIndex];
|
||||
object->controlPoints++;
|
||||
object->unk_09A = (s16) (10000 / (s16) (object->controlPoints[0].velocity));
|
||||
object->timer = 0;
|
||||
func_8008A920(objectIndex);
|
||||
}
|
||||
|
||||
void func_8008AA3C(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->controlPoints = temp_v0->spline->controlPoints;
|
||||
temp_v0->unk_084[9] = 0;
|
||||
temp_v0->timer = 0;
|
||||
Object *object;
|
||||
object = &gObjectList[objectIndex];
|
||||
object->controlPoints = object->spline->controlPoints;
|
||||
object->unk_084[9] = 0;
|
||||
object->timer = 0;
|
||||
/*
|
||||
This is INCREDIBLY stupid. This should really be
|
||||
temp_v0->unk_084[8] = temp_v0->spline->numControlPoints;
|
||||
but for some unholy reason that doesn't match
|
||||
*/
|
||||
temp_v0->unk_084[8] = *((s16*)temp_v0->controlPoints - 1);
|
||||
temp_v0->offset[0] = temp_v0->controlPoints[0].pos[0];
|
||||
temp_v0->offset[1] = temp_v0->controlPoints[0].pos[1];
|
||||
temp_v0->offset[2] = temp_v0->controlPoints[0].pos[2];
|
||||
temp_v0->unk_09A = (s16) (10000 / temp_v0->controlPoints[0].velocity);
|
||||
object->unk_084[8] = *((s16*)object->controlPoints - 1);
|
||||
object->offset[0] = object->controlPoints[0].pos[0];
|
||||
object->offset[1] = object->controlPoints[0].pos[1];
|
||||
object->offset[2] = object->controlPoints[0].pos[2];
|
||||
object->unk_09A = (s16) (10000 / object->controlPoints[0].velocity);
|
||||
func_8008A920(objectIndex);
|
||||
func_80086FD4(objectIndex);
|
||||
}
|
||||
|
||||
void func_8008AB10(s32 objectIndex) {
|
||||
UNUSED s16 temp_t3;
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->offset[0] += temp_v0->velocity[0];
|
||||
temp_v0->offset[1] += temp_v0->velocity[1];
|
||||
temp_v0->offset[2] += temp_v0->velocity[2];
|
||||
temp_v0->timer += (u16)temp_v0->unk_09A;
|
||||
if (temp_v0->timer >= 0x2710) {
|
||||
temp_v0->unk_084[9] = (u16)temp_v0->unk_084[9] + 1;
|
||||
if (((u16)temp_v0->unk_084[9] + 1) == (u16) temp_v0->unk_084[8]) {
|
||||
temp_v0->unk_0AE += 1;
|
||||
object = &gObjectList[objectIndex];
|
||||
object->offset[0] += object->velocity[0];
|
||||
object->offset[1] += object->velocity[1];
|
||||
object->offset[2] += object->velocity[2];
|
||||
object->timer += (u16)object->unk_09A;
|
||||
if (object->timer >= 0x2710) {
|
||||
object->unk_084[9] = (u16)object->unk_084[9] + 1;
|
||||
if (((u16)object->unk_084[9] + 1) == (u16) object->unk_084[8]) {
|
||||
object->unk_0AE += 1;
|
||||
} else {
|
||||
func_8008A9B8(objectIndex);
|
||||
}
|
||||
|
|
@ -1577,12 +1577,12 @@ UNUSED void func_8008AE94(void) {
|
|||
|
||||
// D_80183DC8 is where the spline's derivative polynomial calculations are stored
|
||||
void func_8008AE9C(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->velocity[0] = (D_80183DC8[0] * D_80165760[0]) + (D_80183DC8[1] * D_80165760[1]) + (D_80183DC8[2] * D_80165760[2]) + (D_80183DC8[3] * D_80165760[3]);
|
||||
temp_v0->velocity[1] = (D_80183DC8[0] * D_80165770[0]) + (D_80183DC8[1] * D_80165770[1]) + (D_80183DC8[2] * D_80165770[2]) + (D_80183DC8[3] * D_80165770[3]);
|
||||
temp_v0->velocity[2] = (D_80183DC8[0] * D_80165780[0]) + (D_80183DC8[1] * D_80165780[1]) + (D_80183DC8[2] * D_80165780[2]) + (D_80183DC8[3] * D_80165780[3]);
|
||||
object = &gObjectList[objectIndex];
|
||||
object->velocity[0] = (D_80183DC8[0] * D_80165760[0]) + (D_80183DC8[1] * D_80165760[1]) + (D_80183DC8[2] * D_80165760[2]) + (D_80183DC8[3] * D_80165760[3]);
|
||||
object->velocity[1] = (D_80183DC8[0] * D_80165770[0]) + (D_80183DC8[1] * D_80165770[1]) + (D_80183DC8[2] * D_80165770[2]) + (D_80183DC8[3] * D_80165770[3]);
|
||||
object->velocity[2] = (D_80183DC8[0] * D_80165780[0]) + (D_80183DC8[1] * D_80165780[1]) + (D_80183DC8[2] * D_80165780[2]) + (D_80183DC8[3] * D_80165780[3]);
|
||||
}
|
||||
|
||||
void func_8008AFE0(s32 objectIndex, f32 arg1) {
|
||||
|
|
@ -1608,12 +1608,12 @@ UNUSED void func_8008B030(void) {
|
|||
|
||||
// D_80183DA8 is where the spline's polynomial calculations are stored
|
||||
void func_8008B038(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->offset[0] = (D_80183DA8[0] * D_80165760[0]) + (D_80183DA8[1] * D_80165760[1]) + (D_80183DA8[2] * D_80165760[2]) + (D_80183DA8[3] * D_80165760[3]);
|
||||
temp_v0->offset[1] = (D_80183DA8[0] * D_80165770[0]) + (D_80183DA8[1] * D_80165770[1]) + (D_80183DA8[2] * D_80165770[2]) + (D_80183DA8[3] * D_80165770[3]);
|
||||
temp_v0->offset[2] = (D_80183DA8[0] * D_80165780[0]) + (D_80183DA8[1] * D_80165780[1]) + (D_80183DA8[2] * D_80165780[2]) + (D_80183DA8[3] * D_80165780[3]);
|
||||
object = &gObjectList[objectIndex];
|
||||
object->offset[0] = (D_80183DA8[0] * D_80165760[0]) + (D_80183DA8[1] * D_80165760[1]) + (D_80183DA8[2] * D_80165760[2]) + (D_80183DA8[3] * D_80165760[3]);
|
||||
object->offset[1] = (D_80183DA8[0] * D_80165770[0]) + (D_80183DA8[1] * D_80165770[1]) + (D_80183DA8[2] * D_80165770[2]) + (D_80183DA8[3] * D_80165770[3]);
|
||||
object->offset[2] = (D_80183DA8[0] * D_80165780[0]) + (D_80183DA8[1] * D_80165780[1]) + (D_80183DA8[2] * D_80165780[2]) + (D_80183DA8[3] * D_80165780[3]);
|
||||
}
|
||||
|
||||
void func_8008B17C(s32 objectIndex, f32 arg1) {
|
||||
|
|
@ -1683,20 +1683,20 @@ void func_8008B284(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_8008B3E4(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
UNUSED SplineData *spline;
|
||||
|
||||
if (is_obj_index_flag_status_inactive(objectIndex, 8) != 0) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
temp_v0->unk_084[9] = 0;
|
||||
temp_v0->timer = 0;
|
||||
temp_v0->controlPoints = temp_v0->spline->controlPoints;
|
||||
object = &gObjectList[objectIndex];
|
||||
object->unk_084[9] = 0;
|
||||
object->timer = 0;
|
||||
object->controlPoints = object->spline->controlPoints;
|
||||
/*
|
||||
This is INCREDIBLY stupid. This should really be
|
||||
temp_v0->unk_084[8] = temp_v0->spline->numControlPoints;
|
||||
but for some unholy reason that doesn't match
|
||||
*/
|
||||
temp_v0->unk_084[8] = *(((s16*)temp_v0->controlPoints) - 1);
|
||||
object->unk_084[8] = *(((s16*)object->controlPoints) - 1);
|
||||
|
||||
set_object_flag_status_true(objectIndex, 8);
|
||||
}
|
||||
|
|
@ -1741,15 +1741,15 @@ void func_8008B478(s32 objectIndex, s32 arg1) {
|
|||
|
||||
void func_8008B620(s32 objectIndex) {
|
||||
UNUSED s16 temp_t0;
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
func_8008B478(objectIndex, 0);
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
if (temp_v0->timer >= 0x2710) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->timer >= 0x2710) {
|
||||
// Have to do it this way due to the u16 cast
|
||||
temp_v0->unk_084[9] = (u16) temp_v0->unk_084[9] + 1;
|
||||
if (((u16) temp_v0->unk_084[9] + 3) == (u16) temp_v0->unk_084[8]) {
|
||||
temp_v0->unk_0AE += 1;
|
||||
object->unk_084[9] = (u16) object->unk_084[9] + 1;
|
||||
if (((u16) object->unk_084[9] + 3) == (u16) object->unk_084[8]) {
|
||||
object->unk_0AE += 1;
|
||||
} else {
|
||||
func_8008B44C(objectIndex);
|
||||
}
|
||||
|
|
@ -1757,14 +1757,14 @@ void func_8008B620(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_8008B6A4(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
func_8008B478(objectIndex, 1);
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
if (temp_v0->timer >= 0x2710) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->timer >= 0x2710) {
|
||||
// Have to do it this way due to the u16 cast
|
||||
temp_v0->unk_084[9] = (u16) temp_v0->unk_084[9] + 1;
|
||||
if ((u16)temp_v0->unk_084[9] == (u16)temp_v0->unk_084[8]) {
|
||||
object->unk_084[9] = (u16) object->unk_084[9] + 1;
|
||||
if ((u16)object->unk_084[9] == (u16)object->unk_084[8]) {
|
||||
set_object_flag_status_false(objectIndex, 8);
|
||||
} else {
|
||||
func_8008B44C(objectIndex);
|
||||
|
|
@ -1834,19 +1834,19 @@ void set_obj_velocity(s32 objectIndex, f32 arg1, f32 arg2, f32 arg3) {
|
|||
}
|
||||
|
||||
void func_8008B928(s32 objectIndex, s16 arg1, s16 arg2, s16 arg3, SplineData *spline) {
|
||||
Objects *temp_s0;
|
||||
Object *object;
|
||||
|
||||
temp_s0 = &gObjectList[objectIndex];
|
||||
temp_s0->origin_pos[0] = (f32) arg1;
|
||||
temp_s0->origin_pos[1] = (f32) arg2;
|
||||
temp_s0->spline = spline;
|
||||
temp_s0->origin_pos[2] = (f32) arg3;
|
||||
temp_s0->velocity[0] = (f32) (spline->controlPoints[1].pos[0] - spline->controlPoints[0].pos[0]);
|
||||
temp_s0->velocity[1] = (f32) (spline->controlPoints[1].pos[1] - spline->controlPoints[0].pos[1]);
|
||||
temp_s0->velocity[2] = (f32) (spline->controlPoints[1].pos[2] - spline->controlPoints[0].pos[2]);
|
||||
temp_s0->direction_angle[1] = get_y_direction_angle(objectIndex);
|
||||
temp_s0->velocity[2] = func_800416D8(temp_s0->velocity[2], temp_s0->velocity[0], -temp_s0->direction_angle[1]);
|
||||
temp_s0->direction_angle[0] = get_x_direction_angle(objectIndex);
|
||||
object = &gObjectList[objectIndex];
|
||||
object->origin_pos[0] = (f32) arg1;
|
||||
object->origin_pos[1] = (f32) arg2;
|
||||
object->spline = spline;
|
||||
object->origin_pos[2] = (f32) arg3;
|
||||
object->velocity[0] = (f32) (spline->controlPoints[1].pos[0] - spline->controlPoints[0].pos[0]);
|
||||
object->velocity[1] = (f32) (spline->controlPoints[1].pos[1] - spline->controlPoints[0].pos[1]);
|
||||
object->velocity[2] = (f32) (spline->controlPoints[1].pos[2] - spline->controlPoints[0].pos[2]);
|
||||
object->direction_angle[1] = get_y_direction_angle(objectIndex);
|
||||
object->velocity[2] = func_800416D8(object->velocity[2], object->velocity[0], -object->direction_angle[1]);
|
||||
object->direction_angle[0] = get_x_direction_angle(objectIndex);
|
||||
}
|
||||
|
||||
UNUSED void object_origin_pos_randomize_around_x(s32 objectIndex, s16 x, u16 arg2) {
|
||||
|
|
@ -1924,15 +1924,15 @@ void object_calculate_new_pos_offset(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_8008BF64(s32 objectIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
D_80183E40[0] = temp_v0->pos[0];
|
||||
D_80183E40[1] = temp_v0->pos[1];
|
||||
D_80183E40[2] = temp_v0->pos[2];
|
||||
D_80183E80[0] = temp_v0->direction_angle[0];
|
||||
D_80183E80[1] = temp_v0->direction_angle[1];
|
||||
D_80183E80[2] = temp_v0->direction_angle[2];
|
||||
object = &gObjectList[objectIndex];
|
||||
D_80183E40[0] = object->pos[0];
|
||||
D_80183E40[1] = object->pos[1];
|
||||
D_80183E40[2] = object->pos[2];
|
||||
D_80183E80[0] = object->direction_angle[0];
|
||||
D_80183E80[1] = object->direction_angle[1];
|
||||
D_80183E80[2] = object->direction_angle[2];
|
||||
}
|
||||
|
||||
void func_8008BFC0(s32 objectIndex) {
|
||||
|
|
@ -1941,17 +1941,17 @@ void func_8008BFC0(s32 objectIndex) {
|
|||
}
|
||||
|
||||
void func_8008BFFC(s32 objectIndex) {
|
||||
Objects *temp_v1;
|
||||
Object *object;
|
||||
|
||||
temp_v1 = &gObjectList[objectIndex];
|
||||
switch (temp_v1->unk_0DE) {
|
||||
object = &gObjectList[objectIndex];
|
||||
switch (object->unk_0DE) {
|
||||
case 1:
|
||||
if (temp_v1->unk_0AE == 1) {
|
||||
if (object->unk_0AE == 1) {
|
||||
func_8008B620(objectIndex);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
switch (temp_v1->unk_0AE) {
|
||||
switch (object->unk_0AE) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -1960,7 +1960,7 @@ void func_8008BFFC(s32 objectIndex) {
|
|||
}
|
||||
break;
|
||||
case 3:
|
||||
switch (temp_v1->unk_0AE) {
|
||||
switch (object->unk_0AE) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -1969,7 +1969,7 @@ void func_8008BFFC(s32 objectIndex) {
|
|||
}
|
||||
break;
|
||||
case 4:
|
||||
switch (temp_v1->unk_0AE) { /* switch 1; irregular */
|
||||
switch (object->unk_0AE) { /* switch 1; irregular */
|
||||
case 0: /* switch 1 */
|
||||
break;
|
||||
case 1: /* switch 1 */
|
||||
|
|
@ -1981,7 +1981,7 @@ void func_8008BFFC(s32 objectIndex) {
|
|||
}
|
||||
break;
|
||||
case 5:
|
||||
switch (temp_v1->unk_0AE) { /* switch 2; irregular */
|
||||
switch (object->unk_0AE) { /* switch 2; irregular */
|
||||
case 0: /* switch 2 */
|
||||
break;
|
||||
case 1: /* switch 2 */
|
||||
|
|
@ -1993,7 +1993,7 @@ void func_8008BFFC(s32 objectIndex) {
|
|||
}
|
||||
break;
|
||||
case 6:
|
||||
switch (temp_v1->unk_0AE) {
|
||||
switch (object->unk_0AE) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -2002,7 +2002,7 @@ void func_8008BFFC(s32 objectIndex) {
|
|||
}
|
||||
break;
|
||||
case 7:
|
||||
switch (temp_v1->unk_0AE) { /* switch 3; irregular */
|
||||
switch (object->unk_0AE) { /* switch 3; irregular */
|
||||
case 0: /* switch 3 */
|
||||
break;
|
||||
case 1: /* switch 3 */
|
||||
|
|
|
|||
|
|
@ -47,9 +47,10 @@ UNUSED void func_800914E0(void) {
|
|||
camera->pos[1] = (f32) (tempData->pos[1] + 7);
|
||||
camera->pos[2] = (f32) (tempData->pos[2] - 20);
|
||||
camera->lookAt[0] = gPlayerOneCopy->pos[0];
|
||||
|
||||
camera->lookAt[1] = gPlayerOneCopy->pos[1];
|
||||
camera->lookAt[2] = gPlayerOneCopy->pos[2];
|
||||
func_802ADDC8(&camera->unk_54, 20.0f, camera->pos[0], camera->pos[1], camera->pos[2]);
|
||||
check_bounding_collision(&camera->collision, 20.0f, camera->pos[0], camera->pos[1], camera->pos[2]);
|
||||
sp38 = camera->lookAt[0] - camera->pos[0];
|
||||
sp34 = camera->lookAt[1] - camera->pos[1];
|
||||
sp30 = camera->lookAt[2] - camera->pos[2];
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@ void func_80091440(s8);
|
|||
void func_800914A0(void);
|
||||
void func_800914E0(void);
|
||||
|
||||
#endif // CODE_80091440_H
|
||||
#endif // CODE_80091440_H
|
||||
|
|
|
|||
|
|
@ -2319,7 +2319,7 @@ void func_80093C98(s32 arg0) {
|
|||
guOrtho(&gGfxPool->mtxEffect[gMatrixEffectCount], 0.0f, 319.0f, 239.0f, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxEffect[gMatrixEffectCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
gSPDisplayList(gDisplayListHead++, D_02007F18);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
func_800A8250();
|
||||
if (arg0 == 0) {
|
||||
func_800A54EC();
|
||||
|
|
@ -2365,7 +2365,7 @@ void func_80093F10(void) {
|
|||
guOrtho(&gGfxPool->mtxEffect[gMatrixEffectCount], 0.0f, 319.0f, 239.0f, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxEffect[gMatrixEffectCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
gSPDisplayList(gDisplayListHead++, D_02007F18);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
func_80092290(4, D_8018E850, D_8018E858);
|
||||
func_80092290(5, (s32 *) &D_8018E850[1], (s32 *) &D_8018E858[1]);
|
||||
func_8009C918();
|
||||
|
|
@ -2381,7 +2381,7 @@ void func_80093F10(void) {
|
|||
|
||||
void func_800940EC(s32 arg0) {
|
||||
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(D_802B8880));
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
guOrtho(&gGfxPool->mtxEffect[gMatrixEffectCount], 0.0f, 319.0f, 239.0f, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxEffect[gMatrixEffectCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
gSPDisplayList(gDisplayListHead++, D_02007F18);
|
||||
|
|
@ -2476,7 +2476,7 @@ void func_80094A64(struct GfxPool *pool) {
|
|||
gMatrixHudCount = 0;
|
||||
gMatrixEffectCount = 0;
|
||||
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(D_802B8880));
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
guOrtho(&pool->mtxScreen, 0.0f, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
gSPMatrix(gDisplayListHead++, &pool->mtxScreen, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
gSPDisplayList(gDisplayListHead++, D_02007650);
|
||||
|
|
@ -3452,11 +3452,11 @@ Gfx *draw_box_fill(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, s32
|
|||
if ((lrx < 0) || (lry < 0)) {
|
||||
return displayListHead;
|
||||
}
|
||||
if (lrx >= 0x140) {
|
||||
lrx = 0x13F;
|
||||
if (lrx >= SCREEN_WIDTH) {
|
||||
lrx = SCREEN_WIDTH - 1;
|
||||
}
|
||||
if (lry >= 0xF0) {
|
||||
lry = 0xEF;
|
||||
if (lry >= SCREEN_HEIGHT) {
|
||||
lry = SCREEN_HEIGHT - 1;
|
||||
}
|
||||
gSPDisplayList(displayListHead++, D_02008030);
|
||||
gDPSetFillColor(displayListHead++, (GPACK_RGBA5551(red, green, (u32)blue, alpha) << 0x10 | GPACK_RGBA5551(red, green, (u32)blue, alpha)));
|
||||
|
|
@ -3465,6 +3465,44 @@ Gfx *draw_box_fill(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, s32
|
|||
return displayListHead;
|
||||
}
|
||||
|
||||
// draw a box filled with a solid color
|
||||
Gfx *draw_box_fill_wide(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, s32 red, s32 green, s32 blue, s32 alpha) {
|
||||
red &= 0xFF;
|
||||
green &= 0xFF;
|
||||
blue &= 0xFF;
|
||||
alpha &= 0xFF;
|
||||
if (lrx < ulx) {
|
||||
swap_values(&ulx, &lrx);
|
||||
}
|
||||
if (lry < uly) {
|
||||
swap_values(&uly, &lry);
|
||||
}
|
||||
if ((ulx >= 0x140) || (uly >= 0xF0)) {
|
||||
return displayListHead;
|
||||
}
|
||||
if (ulx < 0) {
|
||||
ulx = 0;
|
||||
}
|
||||
if (uly < 0) {
|
||||
uly = 0;
|
||||
}
|
||||
if ((lrx < 0) || (lry < 0)) {
|
||||
return displayListHead;
|
||||
}
|
||||
if (lrx >= SCREEN_WIDTH) {
|
||||
lrx = SCREEN_WIDTH - 1;
|
||||
}
|
||||
if (lry >= SCREEN_HEIGHT) {
|
||||
lry = SCREEN_HEIGHT - 1;
|
||||
}
|
||||
gSPDisplayList(displayListHead++, D_02008030);
|
||||
gDPSetFillColor(displayListHead++, (GPACK_RGBA5551(red, green, (u32)blue, alpha) << 0x10 | GPACK_RGBA5551(red, green, (u32)blue, alpha)));
|
||||
gDPFillWideRectangle(displayListHead++, OTRGetDimensionFromLeftEdge(ulx), uly, OTRGetDimensionFromRightEdge(lrx), lry);
|
||||
//gDPFillRectangle(displayListHead++, ulx, uly, lrx, lry);
|
||||
gSPDisplayList(displayListHead++, D_02008058);
|
||||
return displayListHead;
|
||||
}
|
||||
|
||||
// draw a box with a solid outline
|
||||
Gfx *draw_box(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, u32 green, u32 blue, u32 alpha) {
|
||||
red &= 0xFF;
|
||||
|
|
@ -3497,11 +3535,17 @@ Gfx *draw_box(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red,
|
|||
}
|
||||
gSPDisplayList(displayListHead++, D_02008008);
|
||||
gDPSetPrimColor(displayListHead++, 0, 0, red, green, blue, alpha);
|
||||
//gDPFillWideRectangle(displayListHead++, OTRGetRectDimensionFromLeftEdge(0), uly, OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), lry);
|
||||
gDPFillRectangle(displayListHead++, ulx, uly, lrx, lry);
|
||||
gDPPipeSync(displayListHead++);
|
||||
return displayListHead;
|
||||
}
|
||||
|
||||
//! @todo Need to call this somewhere on func_800A2D1C
|
||||
Gfx *draw_box_fill_wide_wrap(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry) {
|
||||
return draw_box_fill_wide(displayListHead, ulx, uly, lrx, lry, 0, 0, 0, 0xFF);
|
||||
}
|
||||
|
||||
Gfx *func_80098FC8(Gfx *displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry) {
|
||||
return draw_box_fill(displayListHead, ulx, uly, lrx, lry, 0, 0, 0, 0xFF);
|
||||
}
|
||||
|
|
@ -3558,6 +3602,7 @@ void func_80099184(MkTexture *arg0) {
|
|||
MkTexture *texture = arg0;
|
||||
UNUSED struct_8018E118_entry *thing;
|
||||
while (texture->textureData != NULL) {
|
||||
u8 *textureData = (u8 *) LOAD_ASSET(texture->textureData);
|
||||
var_a1 = 0;
|
||||
for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) {
|
||||
// wtf is going on here?
|
||||
|
|
@ -3579,14 +3624,17 @@ void func_80099184(MkTexture *arg0) {
|
|||
//dma_copy_base_729a30(texture->textureData, var_a1_2, D_8018D9B4);
|
||||
//mio0decode(D_8018D9B4, (u8*)&D_8018D9B0[gD_8018E118TotalSize]);
|
||||
// * 2 here is just a guess
|
||||
memcpy(&D_8018D9B0[gD_8018E118TotalSize], texture->textureData, texture->height * texture->width * 2);
|
||||
size_t size = ResourceGetTexSizeByName(texture->textureData);
|
||||
memcpy(&D_8018D9B0[gD_8018E118TotalSize], textureData, size);
|
||||
} else {
|
||||
//dma_copy_base_729a30(texture->textureData, texture->height * texture->width * 2, &D_8018D9B0[gD_8018E118TotalSize]);
|
||||
// * 2 here is just a guess
|
||||
memcpy(&D_8018D9B0[gD_8018E118TotalSize], texture->textureData, texture->height * texture->width * 2);
|
||||
size_t size = ResourceGetTexSizeByName(texture->textureData);
|
||||
memcpy(&D_8018D9B0[gD_8018E118TotalSize], textureData, size);
|
||||
}
|
||||
|
||||
thing = &D_8018E118[gNumD_8018E118Entries];
|
||||
printf("test: %s\n",texture->textureData);
|
||||
thing->textureData = texture->textureData;
|
||||
thing = &D_8018E118[gNumD_8018E118Entries];
|
||||
thing->offset = gD_8018E118TotalSize;
|
||||
|
|
@ -3595,7 +3643,7 @@ void func_80099184(MkTexture *arg0) {
|
|||
gNumD_8018E118Entries += 1;
|
||||
gD_8018E118TotalSize = ((gD_8018E118TotalSize / 8) * 8) + 8;
|
||||
}
|
||||
//texture++;
|
||||
texture++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -6496,7 +6544,7 @@ s32 func_800A095C(char *someString, s32 len, s32 column, s32 row) {
|
|||
// Same functionality, but doesn't match byte for byte :/
|
||||
void func_800A09E0(struct_8018D9E0_entry *arg0) {
|
||||
s32 table_row, x = 0x20, y;
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 319, 194);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH - 1, 194);
|
||||
for(table_row = 0; table_row < 9; table_row++) {
|
||||
if ((D_800E86D0[0] != 0) || ((table_row != 0) && (table_row != 8))) {
|
||||
y = (table_row * 0xA) + arg0->row;
|
||||
|
|
@ -6558,7 +6606,7 @@ void func_800A0B80(struct_8018D9E0_entry *arg0) {
|
|||
} while (var_s0 != 0);
|
||||
}
|
||||
}
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 319, 239);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
|
||||
}
|
||||
|
||||
void func_800A0DFC(void) {
|
||||
|
|
@ -7145,8 +7193,8 @@ GLOBAL_ASM("asm/non_matchings/code_80091750/func_800A1FB0.s")
|
|||
void func_800A2D1C(struct_8018D9E0_entry *arg0) {
|
||||
switch (D_80164A28) {
|
||||
case 1:
|
||||
gDisplayListHead = func_80098FC8(gDisplayListHead, 0, 0, 0x13F, 0x28);
|
||||
gDisplayListHead = func_80098FC8(gDisplayListHead, 0, 0xC7, 0x13F, 0xEF);
|
||||
gDisplayListHead = func_80098FC8(gDisplayListHead, 0, 0, SCREEN_WIDTH - 1, 40);
|
||||
gDisplayListHead = func_80098FC8(gDisplayListHead, 0, 0xC7, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
|
||||
arg0->unk1C = 0x28;
|
||||
break;
|
||||
case 2:
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "courses/all_course_data.h"
|
||||
#include <assets/ceremony_data.h>
|
||||
#include <assets/mario_raceway_data.h>
|
||||
#include <assets/luigi_raceway_data.h>
|
||||
|
||||
// @warning Array contains an extra zero element at the end.
|
||||
KartAIBehaviour *gKartAIBehaviourLUT[] = {
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ void func_8008C528(Player *player, s8 arg1) {
|
|||
|
||||
void func_8008C62C(Player *player, s8 arg1) {
|
||||
|
||||
func_80031F48(player, 5.0f);
|
||||
decelerate_ai_player(player, 5.0f);
|
||||
player->unk_0A8 += (s16)0xA0;
|
||||
player->unk_042 += (s16)0x71C;
|
||||
if (player->unk_0A8 >= 0x2000) {
|
||||
|
|
@ -356,15 +356,15 @@ void func_8008C9EC(Player *player, s8 arg1) {
|
|||
player->unk_206 = 0;
|
||||
player->slopeAccel = 0;
|
||||
if ((player->unk_046 & 0x40) == 0x40) {
|
||||
func_80031F48(player, 100.0f);
|
||||
decelerate_ai_player(player, 100.0f);
|
||||
} else {
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
} else {
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
}
|
||||
if (!(player->type & PLAYER_HUMAN)) {
|
||||
func_80031F48(player, 30.0f);
|
||||
decelerate_ai_player(player, 30.0f);
|
||||
}
|
||||
}
|
||||
if ((player->effects & 0x80) == 0x80) {
|
||||
|
|
@ -756,7 +756,7 @@ void apply_hit_effect(Player* player, s8 arg1) {
|
|||
player->unk_0C0 = 0;
|
||||
player->unk_08C = 0.0f;
|
||||
player->currentSpeed = 0.0f;
|
||||
if ((player->unk_110.unk3C[2] >= 600.0f) || ((player->effects & 0x1000) != 0)) { D_8018D990[arg1] = 3; } // placed block on same line to match
|
||||
if ((player->collision.surfaceDistance[2] >= 600.0f) || ((player->effects & 0x1000) != 0)) { D_8018D990[arg1] = 3; } // placed block on same line to match
|
||||
|
||||
switch (D_8018D990[arg1]) {
|
||||
case 0:
|
||||
|
|
@ -822,7 +822,7 @@ void apply_hit_effect(Player* player, s8 arg1) {
|
|||
player->unk_238 = 0;
|
||||
}
|
||||
|
||||
if (player->unk_110.unk3C[2] >= 600.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 600.0f) {
|
||||
D_8018D990[arg1] = 3;
|
||||
}
|
||||
|
||||
|
|
@ -920,7 +920,7 @@ void apply_lightning_effect(Player *player, s8 arg1) {
|
|||
D_80165190[3][arg1] = 1;
|
||||
}
|
||||
}
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
} else {
|
||||
player->unk_0B0 += 1;
|
||||
player->unk_08C = (f32) ((f64) player->unk_08C * 0.6);
|
||||
|
|
|
|||
|
|
@ -150,10 +150,10 @@ void load_credits(void) {
|
|||
D_8015F59C = 0;
|
||||
D_8015F5A0 = 0;
|
||||
D_8015F58C = 0;
|
||||
D_8015F588 = 0;
|
||||
gCollisionMeshCount = 0;
|
||||
D_800DC5BC = 0;
|
||||
D_800DC5C8 = 0;
|
||||
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
|
||||
gCollisionMesh = (CollisionTriangle *) gNextFreeMemoryAddress;
|
||||
camera->pos[0] = 1400.0f;
|
||||
camera->pos[1] = 300.0f;
|
||||
camera->pos[2] = 1400.0f;
|
||||
|
|
|
|||
|
|
@ -131,21 +131,21 @@ void load_ceremony_cutscene(void) {
|
|||
D_8015F59C = 0;
|
||||
D_8015F5A0 = 0;
|
||||
D_8015F58C = 0;
|
||||
D_8015F588 = (u16)0;
|
||||
gCollisionMeshCount = (u16)0;
|
||||
D_800DC5BC = (u16)0;
|
||||
D_800DC5C8 = (u16)0;
|
||||
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
|
||||
gCollisionMesh = (CollisionTriangle *) gNextFreeMemoryAddress;
|
||||
//! @bug these segmented addresses need to be symbols for mobility
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_67E8, -1);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_AEF8, -1);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_A970, 8);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_AC30, 8);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_CE0, 0x10);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_E88, 0x10);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_23F8, 1);
|
||||
set_vertex_data_with_default_section_id(d_course_royal_raceway_packed_dl_2478, 1);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_67E8, -1);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_AEF8, -1);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A970, 8);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_AC30, 8);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_CE0, 0x10);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_E88, 0x10);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_23F8, 1);
|
||||
generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_2478, 1);
|
||||
func_80295C6C();
|
||||
debug_switch_character_ceremony_cutscene();
|
||||
func_802818BC();
|
||||
|
|
|
|||
|
|
@ -1717,18 +1717,18 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
|
|||
// &gDmaIoMesg,
|
||||
// OS_MESG_PRI_NORMAL, OS_READ,
|
||||
// (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
|
||||
// gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
|
||||
// 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);
|
||||
//printf("T1 kart %s\n", texture);
|
||||
|
||||
//return gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size);
|
||||
memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
} else {
|
||||
|
|
@ -1748,9 +1748,9 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
|
|||
|
||||
texture = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
printf("T0 kart %s\n",texture);
|
||||
//printf("T0 kart %s\n",texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size);
|
||||
memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000);
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) {
|
||||
|
|
@ -1768,10 +1768,10 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
|
|||
// &gDmaMesgQueue
|
||||
// );
|
||||
texture = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
|
||||
printf("Tum Kart %s\n",texture);
|
||||
//printf("Tum Kart %s\n",texture);
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size);
|
||||
memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000);
|
||||
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
} else {
|
||||
|
|
@ -1790,10 +1790,10 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
|
|||
// );
|
||||
|
||||
texture = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]];
|
||||
printf("T0 kart 2 %s\n", texture);
|
||||
//printf("T0 kart 2 %s\n", texture);
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
memcpy(&D_802BFB80.arraySize8[zero][screenId2][playerId], asset, size);
|
||||
memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
|
|
@ -1823,10 +1823,10 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i)
|
|||
// );
|
||||
|
||||
texture = gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
|
||||
printf("T1 kart 2 %s\n", texture);
|
||||
//printf("T1 kart 2 %s\n", texture);
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
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,
|
||||
memcpy(&D_802DFB80[arg4][arg3][arg1],
|
||||
asset, size);
|
||||
|
||||
} else {
|
||||
|
|
@ -1844,10 +1844,10 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i)
|
|||
// &gDmaMesgQueue
|
||||
// );
|
||||
texture = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
|
||||
printf("T0 kart 3 %s\n", texture);
|
||||
//printf("T0 kart 3 %s\n", texture);
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
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, asset, size);
|
||||
memcpy(&D_802DFB80[arg4][arg3][arg1], asset, size);
|
||||
}
|
||||
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) ||
|
||||
((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000))
|
||||
|
|
@ -1866,10 +1866,10 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i)
|
|||
// &gDmaMesgQueue
|
||||
// );
|
||||
texture = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8];
|
||||
printf("Tum kart 2 %s\n", texture);
|
||||
//printf("Tum kart 2 %s\n", texture);
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
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, asset, size);
|
||||
memcpy(&D_802DFB80[arg4][arg3][arg1], asset, size);
|
||||
} else {
|
||||
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
|
||||
|
||||
|
|
@ -1885,10 +1885,10 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i)
|
|||
// &gDmaMesgQueue
|
||||
// );
|
||||
texture = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]];
|
||||
printf("T0 kart 4 %s 0x%llX\n", texture, &D_802DFB80[arg4][arg3][arg1]);
|
||||
//printf("T0 kart 4 %s 0x%llX\n", texture, &D_802DFB80[arg4][arg3][arg1]);
|
||||
size = ResourceGetTexSizeByName(texture);
|
||||
asset = (u8 *) LOAD_ASSET(texture);
|
||||
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, asset, size);
|
||||
memcpy(&D_802DFB80[arg4][arg3][arg1], asset, size);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1920,7 +1920,7 @@ void load_kart_palette(Player *player, s8 playerId, s8 screenId, s8 buffer) {
|
|||
|
||||
size = ResourceGetTexSizeByName(gKartPalettes[player->characterId]);
|
||||
asset = (u8 *) LOAD_ASSET(gKartPalettes[player->characterId]);
|
||||
memcpy(temp_s0, asset, size);
|
||||
memcpy(&D_802F1F80[buffer][screenId][playerId], asset, size);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
break;
|
||||
|
|
@ -1941,7 +1941,7 @@ void load_kart_palette(Player *player, s8 playerId, s8 screenId, s8 buffer) {
|
|||
|
||||
size = ResourceGetTexSizeByName(gKartPalettes[player->characterId]);
|
||||
asset = (u8 *) LOAD_ASSET(gKartPalettes[player->characterId]);
|
||||
memcpy(temp_s0, asset, size);
|
||||
memcpy(&D_802F1F80[buffer][screenId][playerId], asset, size);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
break;
|
||||
|
|
@ -1961,14 +1961,15 @@ void func_80027BDC(UNUSED Player *player, u8 *arg1, void *vAddr, u16 size) {
|
|||
// &gDmaMesgQueue
|
||||
// );
|
||||
|
||||
// u8 *asset = (u8 *) LOAD_ASSET(arg1);
|
||||
// memcpy(vAddr, asset, size);
|
||||
// u8 *asset = (u8 *) LOAD_ASSET(arg1);
|
||||
// size_t textureSize = ResourceGetTexSizeByName(asset);
|
||||
// memcpy(vAddr, asset, textureSize);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void func_80027C74(UNUSED Player *player, u8 *texture, void *vAddr, u16 size) {
|
||||
osInvalDCache(vAddr, size);
|
||||
//osInvalDCache(vAddr, size);
|
||||
|
||||
// osPiStartDma(
|
||||
// &gDmaIoMesg,
|
||||
|
|
@ -1979,7 +1980,8 @@ void func_80027C74(UNUSED Player *player, u8 *texture, void *vAddr, u16 size) {
|
|||
// size,
|
||||
// &gDmaMesgQueue
|
||||
// );
|
||||
// size_t textureSize = ResourceGetTexSizeByName(texture);
|
||||
// printf("test %s\n",texture);
|
||||
// memcpy(vAddr, texture, textureSize);
|
||||
|
||||
//printf("test %s\n",texture);
|
||||
//size_t textureSize = ResourceGetTexSizeByName(texture);
|
||||
memcpy(vAddr, texture, size);
|
||||
}
|
||||
|
|
|
|||
11
src/main.c
11
src/main.c
|
|
@ -9,6 +9,8 @@
|
|||
#include <mk64.h>
|
||||
#include <stubs.h>
|
||||
|
||||
#include "networking/networking.h"
|
||||
|
||||
#include "profiler.h"
|
||||
#include "main.h"
|
||||
#include "racing/memory.h"
|
||||
|
|
@ -109,7 +111,8 @@ OSMesg gSIEventMesgBuf[3];
|
|||
OSContStatus gControllerStatuses[4];
|
||||
OSContPad gControllerPads[4];
|
||||
u8 gControllerBits;
|
||||
struct UnkStruct_8015F584 D_8014F110[1024];
|
||||
// Contains a 32x32 grid of indices into gCollisionIndices containing indices into gCollisionMesh
|
||||
CollisionGrid gCollisionGrid[1024];
|
||||
u16 gNumActors;
|
||||
u16 gMatrixObjectCount;
|
||||
s32 gTickSpeed;
|
||||
|
|
@ -596,6 +599,12 @@ void race_logic_loop(void) {
|
|||
case SCREEN_MODE_1P:
|
||||
gTickSpeed = 2;
|
||||
staff_ghosts_loop();
|
||||
|
||||
// Wait for all racers to load
|
||||
if (gNetwork.enabled) {
|
||||
network_all_players_loaded();
|
||||
}
|
||||
|
||||
if (gIsGamePaused == 0) {
|
||||
for (i = 0; i < gTickSpeed; i++) {
|
||||
if (D_8015011E) {
|
||||
|
|
|
|||
10
src/main.h
10
src/main.h
|
|
@ -58,10 +58,10 @@ struct GfxPool {
|
|||
/* 0x28B20 */ struct SPTask spTask;
|
||||
}; // size = 0x28B70
|
||||
|
||||
struct UnkStruct_8015F584 {
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
};
|
||||
typedef struct {
|
||||
u16 triangle; // Index for gCollisionIndices which has indexes for gCollisionMesh
|
||||
u16 numTriangles;
|
||||
} CollisionGrid;
|
||||
|
||||
void create_thread(OSThread*, OSId, void (*entry)(void *), void*, void*, OSPri);
|
||||
void main_func(void);
|
||||
|
|
@ -159,7 +159,7 @@ extern OSContStatus gControllerStatuses[];
|
|||
extern OSContPad gControllerPads[];
|
||||
extern u8 gControllerBits;
|
||||
|
||||
extern struct UnkStruct_8015F584 D_8014F110[];
|
||||
extern CollisionGrid gCollisionGrid[];
|
||||
extern u16 gNumActors;
|
||||
extern u16 gMatrixObjectCount;
|
||||
extern s32 gTickSpeed;
|
||||
|
|
|
|||
|
|
@ -444,7 +444,7 @@ s32 func_800418E8(f32 arg0, f32 arg1, Vec3f arg2) {
|
|||
s32 func_80041924(Collision *arg0, Vec3f arg1) {
|
||||
s32 ret = 0;
|
||||
|
||||
func_802ADDC8(arg0, 10.0f, arg1[0], arg1[1], arg1[2]);
|
||||
check_bounding_collision(arg0, 10.0f, arg1[0], arg1[1], arg1[2]);
|
||||
if (arg0->unk34 == 1) {
|
||||
ret = 1;
|
||||
}
|
||||
|
|
@ -802,32 +802,32 @@ void mtxf_set_matrix_scale_transl(Mat4 transformMatrix, Vec3f vec1, Vec3f vec2,
|
|||
|
||||
void mtxf_set_matrix_gObjectList(s32 objectIndex, Mat4 transformMatrix) {
|
||||
f32 sinX;
|
||||
Objects *temp_s0 = &gObjectList[objectIndex];
|
||||
Object *object = &gObjectList[objectIndex];
|
||||
f32 sinY;
|
||||
f32 cosY;
|
||||
f32 sinZ;
|
||||
f32 cosZ;
|
||||
f32 cosX;
|
||||
|
||||
sinX = sins(temp_s0->orientation[0]);
|
||||
cosX = coss(temp_s0->orientation[0]);
|
||||
sinY = sins(temp_s0->orientation[1]);
|
||||
cosY = coss(temp_s0->orientation[1]);
|
||||
sinZ = sins(temp_s0->orientation[2]);
|
||||
cosZ = coss(temp_s0->orientation[2]);
|
||||
sinX = sins(object->orientation[0]);
|
||||
cosX = coss(object->orientation[0]);
|
||||
sinY = sins(object->orientation[1]);
|
||||
cosY = coss(object->orientation[1]);
|
||||
sinZ = sins(object->orientation[2]);
|
||||
cosZ = coss(object->orientation[2]);
|
||||
|
||||
transformMatrix[0][0] = temp_s0->sizeScaling * ((cosY * cosZ) + (sinX * sinY * sinZ));
|
||||
transformMatrix[1][0] = temp_s0->sizeScaling * ((-cosY * sinZ) + sinX * sinY * cosZ);
|
||||
transformMatrix[2][0] = temp_s0->sizeScaling * (cosX * sinY);
|
||||
transformMatrix[3][0] = temp_s0->pos[0];
|
||||
transformMatrix[0][1] = temp_s0->sizeScaling * (cosX * sinZ);
|
||||
transformMatrix[1][1] = temp_s0->sizeScaling * (cosX * cosZ);
|
||||
transformMatrix[2][1] = temp_s0->sizeScaling * -sinX;
|
||||
transformMatrix[3][1] = temp_s0->pos[1];
|
||||
transformMatrix[0][2] = temp_s0->sizeScaling * ((-sinY * cosZ) + (sinX * cosY * sinZ));
|
||||
transformMatrix[1][2] = temp_s0->sizeScaling * ((sinY * sinZ) + (sinX * cosY * cosZ));
|
||||
transformMatrix[2][2] = temp_s0->sizeScaling * (cosX * cosY);
|
||||
transformMatrix[3][2] = temp_s0->pos[2];
|
||||
transformMatrix[0][0] = object->sizeScaling * ((cosY * cosZ) + (sinX * sinY * sinZ));
|
||||
transformMatrix[1][0] = object->sizeScaling * ((-cosY * sinZ) + sinX * sinY * cosZ);
|
||||
transformMatrix[2][0] = object->sizeScaling * (cosX * sinY);
|
||||
transformMatrix[3][0] = object->pos[0];
|
||||
transformMatrix[0][1] = object->sizeScaling * (cosX * sinZ);
|
||||
transformMatrix[1][1] = object->sizeScaling * (cosX * cosZ);
|
||||
transformMatrix[2][1] = object->sizeScaling * -sinX;
|
||||
transformMatrix[3][1] = object->pos[1];
|
||||
transformMatrix[0][2] = object->sizeScaling * ((-sinY * cosZ) + (sinX * cosY * sinZ));
|
||||
transformMatrix[1][2] = object->sizeScaling * ((sinY * sinZ) + (sinX * cosY * cosZ));
|
||||
transformMatrix[2][2] = object->sizeScaling * (cosX * cosY);
|
||||
transformMatrix[3][2] = object->pos[2];
|
||||
transformMatrix[0][3] = 0.0f;
|
||||
transformMatrix[1][3] = 0.0f;
|
||||
transformMatrix[2][3] = 0.0f;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,237 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_net.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include "networking.h"
|
||||
#include "main.h"
|
||||
|
||||
#define BUFFER_SIZE 10240
|
||||
|
||||
NetworkClient dummyClient; // For use before server sends the real client
|
||||
NetworkClient *localClient = NULL;
|
||||
NetworkClient clients[NETWORK_MAX_PLAYERS];
|
||||
|
||||
Network gNetwork = {
|
||||
.enabled = false,
|
||||
.tcpSocket = NULL,
|
||||
.address = {0, 64010},
|
||||
.localPlayer = &gPlayerOne,
|
||||
.isConnected = false,
|
||||
.loaded = false, // local player loaded?
|
||||
.playersLoaded = false,
|
||||
.gameStarted = false,
|
||||
};
|
||||
|
||||
// Global variables
|
||||
|
||||
|
||||
HANDLE sNetworkThread;
|
||||
DWORD threadID;
|
||||
bool threadStarted = false;
|
||||
|
||||
int isNetworkingThreadEnabled = true;
|
||||
void (*remoteConnectedHandler)(void);
|
||||
|
||||
void ConnectToServer(char* ip, uint16_t port, char *username) {
|
||||
if (!threadStarted) {
|
||||
threadStarted = true;
|
||||
networking_init(ip, port);
|
||||
|
||||
SDL_Delay(20);
|
||||
|
||||
localClient = &dummyClient; // Temporary until server sends the real data
|
||||
set_username(username);
|
||||
send_str_packet(gNetwork.tcpSocket, PACKET_JOIN, localClient->username);
|
||||
send_int_packet(gNetwork.tcpSocket, PACKET_SET_CHARACTER, 2, sizeof(uint32_t));
|
||||
send_str_packet(gNetwork.tcpSocket, PACKET_MESSAGE, "a message");
|
||||
send_str_packet(gNetwork.tcpSocket, PACKET_MESSAGE, "another message");
|
||||
}
|
||||
}
|
||||
|
||||
void set_username(const char *username) {
|
||||
//srand(time(NULL) + rand()); // Use a different seed for each call
|
||||
//int random_number = rand() % 10000; // Generate a random number between 0 and 9999
|
||||
//snprintf(localClient->username, sizeof(localClient->username), "%s%d", username, random_number);
|
||||
|
||||
strncpy(localClient->username, username, sizeof(localClient->username) - 1);
|
||||
localClient->username[sizeof(localClient->username) - 1] = '\0'; // Ensure null-termination
|
||||
}
|
||||
|
||||
void networking_init(char* ip, uint16_t port) {
|
||||
if (SDL_Init(0) == -1) {
|
||||
fprintf(stderr, "SDL_Init: %s\n", SDL_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (SDLNet_Init() == -1) {
|
||||
fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError());
|
||||
SDL_Quit();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (SDLNet_ResolveHost(&gNetwork.address, ip, port) == -1) {
|
||||
printf("[GameInteractor] SDLNet_ResolveHost: %s\n", SDLNet_GetError());
|
||||
}
|
||||
|
||||
// Ensure no thread is already running
|
||||
if (sNetworkThread != NULL) {
|
||||
WaitForSingleObject(sNetworkThread, INFINITE);
|
||||
CloseHandle(sNetworkThread);
|
||||
sNetworkThread = NULL;
|
||||
}
|
||||
|
||||
sNetworkThread = CreateThread(
|
||||
NULL, // default security attributes
|
||||
0, // default stack size
|
||||
networking_loop, // thread function
|
||||
NULL, // argument to thread function
|
||||
0, // default creation flags
|
||||
&threadID // receive thread identifier
|
||||
);
|
||||
|
||||
if (sNetworkThread == NULL) {
|
||||
printf("CreateThread failed: %d\n", GetLastError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
//sNetworkThread = std::thread(&GameInteractor::ReceiveFromServer, this);
|
||||
}
|
||||
|
||||
DWORD WINAPI networking_loop(LPVOID arg) {
|
||||
while (isNetworkingThreadEnabled) {
|
||||
while (!gNetwork.isConnected && isNetworkingThreadEnabled) { // && isRemoteInteractorEnabled) {
|
||||
printf("[SpaghettiOnline] Attempting to make connection to server...\n");
|
||||
gNetwork.tcpSocket = SDLNet_TCP_Open(&gNetwork.address);
|
||||
|
||||
if (gNetwork.tcpSocket) {
|
||||
gNetwork.isConnected = true;
|
||||
printf("[SpaghettiOnline] Connection to server established!\n");
|
||||
|
||||
if (remoteConnectedHandler) {
|
||||
remoteConnectedHandler();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SDLNet_SocketSet socketSet = SDLNet_AllocSocketSet(1);
|
||||
if (gNetwork.tcpSocket) {
|
||||
SDLNet_TCP_AddSocket(socketSet, gNetwork.tcpSocket);
|
||||
}
|
||||
|
||||
// Listen to socket messages
|
||||
while (gNetwork.isConnected && gNetwork.tcpSocket && isNetworkingThreadEnabled) { // && isRemoteInteractorEnabled) {
|
||||
// we check first if socket has data, to not block in the TCP_Recv
|
||||
int socketsReady = SDLNet_CheckSockets(socketSet, 0);
|
||||
|
||||
if (socketsReady == -1) {
|
||||
printf("[SpaghettiOnline] SDLNet_CheckSockets: %s\n", SDLNet_GetError());
|
||||
break;
|
||||
}
|
||||
|
||||
if (socketsReady == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
char remoteDataReceived[512];
|
||||
memset(remoteDataReceived, 0, sizeof(remoteDataReceived));
|
||||
int len = SDLNet_TCP_Recv(gNetwork.tcpSocket, &remoteDataReceived, sizeof(remoteDataReceived));
|
||||
if (!len || !gNetwork.tcpSocket || len == -1) {
|
||||
printf("[SpaghettiOnline] SDLNet_TCP_Recv: %s\n", SDLNet_GetError());
|
||||
break;
|
||||
}
|
||||
|
||||
handleReceivedData(remoteDataReceived, len); //HandleRemoteData(remoteDataReceived);
|
||||
|
||||
// receivedData.append(remoteDataReceived, len);
|
||||
|
||||
// // Process all complete packets
|
||||
// size_t delimiterPos = receivedData.find('\0');
|
||||
// while (delimiterPos != std::string::npos) {
|
||||
// // Extract the complete packet until the delimiter
|
||||
// std::string packet = receivedData.substr(0, delimiterPos);
|
||||
// // Remove the packet (including the delimiter) from the received data
|
||||
// receivedData.erase(0, delimiterPos + 1);
|
||||
// HandleRemoteJson(packet);
|
||||
// // Find the next delimiter
|
||||
// delimiterPos = receivedData.find('\0');
|
||||
// }
|
||||
}
|
||||
|
||||
if (gNetwork.isConnected) {
|
||||
//SDLNet_TCP_Close(gNetwork.tcpSocket);
|
||||
gNetwork.isConnected = false;
|
||||
//if (networking_cleanup) {
|
||||
networking_cleanup(socketSet);
|
||||
//}
|
||||
printf("[SpaghettiOnline] Ending receiving thread...\n");
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void networking_ready_up(bool value) {
|
||||
send_int_packet(gNetwork.tcpSocket, PACKET_READY_UP, value, sizeof(int));
|
||||
}
|
||||
|
||||
void handleReceivedData(const char *buffer, size_t bufSize) {
|
||||
if (bufSize < 4) {
|
||||
printf("Malformed packet received: too short\n");
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t type = (uint8_t)buffer[0];
|
||||
uint16_t length = (uint16_t)buffer[1] | ((uint16_t)buffer[2] << 8);
|
||||
|
||||
// Validate buffer size
|
||||
if (bufSize < 3 + length) {
|
||||
printf("Malformed packet received: declared length exceeds buffer size\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// Point to the data
|
||||
const char *data = buffer + 3;
|
||||
|
||||
switch (type) {
|
||||
case PACKET_JOIN:
|
||||
handleJoinPacket(data);
|
||||
break;
|
||||
case PACKET_LEAVE:
|
||||
handleLeavePacket(data);
|
||||
break;
|
||||
case PACKET_MESSAGE:
|
||||
handleMessagePacket(data);
|
||||
break;
|
||||
case PACKET_LOADED:
|
||||
handle_start_game(data);
|
||||
break;
|
||||
case PACKET_PLAYER:
|
||||
replicate_player(data);
|
||||
break;
|
||||
case PACKET_COURSE:
|
||||
set_course(data);
|
||||
break;
|
||||
case PACKET_PLAYER_ASSIGN_SLOTS:
|
||||
printf("\n\n\nASSIGN SLOT\n\n\n");
|
||||
assign_player_slots(data);
|
||||
break;
|
||||
case PACKET_START_SESSION:
|
||||
networking_start_session(data);
|
||||
break;
|
||||
default:
|
||||
printf("Unknown packet type received: %d\n", type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void networking_cleanup(SDLNet_SocketSet socketSet) {
|
||||
send_str_packet(gNetwork.tcpSocket, PACKET_LEAVE, localClient->username);
|
||||
SDLNet_TCP_Close(gNetwork.tcpSocket);
|
||||
SDLNet_FreeSocketSet(socketSet);
|
||||
SDLNet_Quit();
|
||||
SDL_Quit;
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
#ifndef NETWORKING_H
|
||||
#define NETWORKING_H
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <common_structs.h>
|
||||
#include <SDL2/SDL_net.h>
|
||||
#include <windows.h>
|
||||
|
||||
#define NETWORK_MAX_PLAYERS 8
|
||||
#define NETWORK_USERNAME_LENGTH 32
|
||||
|
||||
enum {
|
||||
PACKET_JOIN,
|
||||
PACKET_LEAVE,
|
||||
PACKET_MESSAGE,
|
||||
PACKET_LOADED,
|
||||
PACKET_READY_UP,
|
||||
PACKET_SET_CHARACTER,
|
||||
PACKET_COURSE,
|
||||
PACKET_PLAYER_ASSIGN_SLOTS,
|
||||
PACKET_START_SESSION,
|
||||
PACKET_PLAYER,
|
||||
PACKET_ACTOR,
|
||||
PACKET_OBJECT
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
bool enabled; // Enables networking
|
||||
TCPsocket tcpSocket;
|
||||
IPaddress address;
|
||||
Player *localPlayer;
|
||||
bool isConnected;
|
||||
bool loaded;
|
||||
bool playersLoaded; // Are all players loaded?
|
||||
bool gameStarted;
|
||||
} Network;
|
||||
|
||||
extern Network gNetwork;
|
||||
|
||||
typedef struct {
|
||||
char username[NETWORK_USERNAME_LENGTH];
|
||||
s32 slot;
|
||||
s32 isPlayer;
|
||||
s32 isAI;
|
||||
s32 character;
|
||||
s32 hasAuthority;
|
||||
} NetworkClient;
|
||||
|
||||
extern NetworkClient dummyClient;
|
||||
extern NetworkClient *localClient;
|
||||
extern NetworkClient clients[];
|
||||
|
||||
|
||||
/* Main Networking */
|
||||
void ConnectToServer(char* ip, uint16_t port, char *username);
|
||||
void networking_init(char* ip, uint16_t port);
|
||||
void networking_update(void);
|
||||
void networking_ready_up(bool);
|
||||
void networking_cleanup(void);
|
||||
DWORD WINAPI networking_loop(LPVOID);
|
||||
void handleReceivedData(const char *, size_t);
|
||||
void set_username(const char *username);
|
||||
|
||||
/* Start Game */
|
||||
void spawn_network_players(f32*,f32*,f32);
|
||||
s32 network_all_players_loaded(void);
|
||||
void set_course(const char *data);
|
||||
void networking_start_session(const char *data);
|
||||
|
||||
/* Replication */
|
||||
void replicate_player(const char* data);
|
||||
void assign_player_slots(const char* data);
|
||||
|
||||
/* Packets */
|
||||
void send_int_packet(TCPsocket socket, uint8_t type, uint32_t payload, uint16_t size);
|
||||
void handleJoinPacket(const char *data);
|
||||
void handleLeavePacket(const char *data);
|
||||
void handleMessagePacket(const char *data);
|
||||
|
||||
|
||||
#endif // NETWORKING_H
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
#include <libultraship.h>
|
||||
#include <SDL2/SDL_net.h>
|
||||
#include "networking.h"
|
||||
#include "code_800029B0.h"
|
||||
|
||||
void handleJoinPacket(const char *data) {
|
||||
printf("Join packet received: %s\n", data);
|
||||
// Handle join logic here
|
||||
}
|
||||
|
||||
void handleLeavePacket(const char *data) {
|
||||
printf("Leave packet received: %s\n", data);
|
||||
// Handle leave logic here
|
||||
}
|
||||
|
||||
void handleMessagePacket(const char *data) {
|
||||
printf("%s\n", data);
|
||||
// Handle message logic here
|
||||
}
|
||||
|
||||
void handleMessageNumberPacket(const char *data) {
|
||||
printf("%s\n", data);
|
||||
// Handle message logic here
|
||||
}
|
||||
|
||||
void handle_start_game() {
|
||||
gNetwork.playersLoaded = true;
|
||||
gIsGamePaused = false;
|
||||
}
|
||||
|
||||
#define BUFFER_SIZE 1024
|
||||
void send_data_packet(TCPsocket socket, int type, const uint8_t* payload, size_t payload_size) {
|
||||
// uint8_t buffer[BUFFER_SIZE];
|
||||
// size_t packet_size = sizeof(type) + payload_size;
|
||||
// if (packet_size > BUFFER_SIZE) {
|
||||
// fprintf(stderr, "Packet size exceeds buffer size\n");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// memcpy(buffer, &type, sizeof(type));
|
||||
// memcpy(buffer + sizeof(type), payload, payload_size);
|
||||
|
||||
// int len = SDLNet_TCP_Send(socket, buffer, packet_size);
|
||||
// if (len < packet_size) {
|
||||
// fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError());
|
||||
// }
|
||||
}
|
||||
|
||||
void send_str_packet(TCPsocket socket, uint8_t type, const char *payload) {
|
||||
char buffer[BUFFER_SIZE];
|
||||
int offset = 0;
|
||||
|
||||
// Copy the integer type into the buffer
|
||||
buffer[offset] = type;
|
||||
offset += sizeof(uint8_t);
|
||||
|
||||
// Copy the payload into the buffer
|
||||
int size = strlen(payload);
|
||||
if (offset + size >= BUFFER_SIZE) {
|
||||
fprintf(stderr, "Payload is too large to fit in buffer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
*(uint16_t *)(buffer + offset) = size;
|
||||
offset += sizeof(uint16_t);
|
||||
|
||||
memcpy(buffer + offset, payload, size);
|
||||
offset += size;
|
||||
|
||||
// Send the buffer through the socket
|
||||
int len = SDLNet_TCP_Send(socket, buffer, offset);
|
||||
if (len < offset) {
|
||||
fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError());
|
||||
}
|
||||
}
|
||||
|
||||
// void send_packet(TCPsocket socket, uint8_t type, const char *payload, uint16_t size) {
|
||||
// // Ensure the buffer is large enough to hold the type, colon, and payload
|
||||
// if (sizeof(int) + 1 + size > BUFFER_SIZE) {
|
||||
// fprintf(stderr, "Sending data too big for the buffer\n");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// char buffer[BUFFER_SIZE];
|
||||
// int offset = 0;
|
||||
|
||||
// // Copy the type into the buffer
|
||||
// buffer[offset] = type;
|
||||
// offset += sizeof(uint8_t);
|
||||
|
||||
// // Copy the payload into the buffer
|
||||
// memcpy(buffer + offset, payload, size);
|
||||
// offset += size;
|
||||
|
||||
// // Send the buffer through the socket
|
||||
// int len = SDLNet_TCP_Send(socket, buffer, offset);
|
||||
// if (len < offset) {
|
||||
// fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError());
|
||||
// }
|
||||
// }
|
||||
|
||||
void send_int_packet(TCPsocket socket, uint8_t type, uint32_t payload, uint16_t size) {
|
||||
// Ensure the buffer is large enough to hold the type, colon, and payload
|
||||
if (sizeof(int) + 1 + size > BUFFER_SIZE) {
|
||||
fprintf(stderr, "Sending data too big for the buffer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
char buffer[BUFFER_SIZE];
|
||||
int offset = 0;
|
||||
|
||||
// Write the packet type into the buffer
|
||||
buffer[offset] = type;
|
||||
offset += sizeof(uint8_t);
|
||||
|
||||
// Write the data size into the buffer
|
||||
*(uint16_t *)(buffer +offset) = size;
|
||||
offset += sizeof(uint16_t);
|
||||
|
||||
// Write the payload into the buffer
|
||||
*(uint32_t *)(buffer + offset) = payload;
|
||||
offset += sizeof(uint32_t);
|
||||
|
||||
// Send the buffer through the socket
|
||||
int len = SDLNet_TCP_Send(socket, buffer, offset);
|
||||
if (len < offset) {
|
||||
fprintf(stderr, "SDLNet_TCP_Send: %s\n", SDLNet_GetError());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#include <libultraship.h>
|
||||
#include "networking.h"
|
||||
#include "main.h"
|
||||
|
||||
void replicate_player(const char* data) {
|
||||
// gPlayerOne->pos[0];
|
||||
//send_data_packet(client, PACKET_PLAYER, &gPlayerOne, sizeof(Player));
|
||||
}
|
||||
|
||||
void ActorReplication() {
|
||||
|
||||
}
|
||||
|
||||
void ObjectReplication() {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
#include <libultraship.h>
|
||||
#include <defines.h>
|
||||
#include "main.h"
|
||||
#include "spawn_players.h"
|
||||
#include "networking.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "menus.h"
|
||||
|
||||
// PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN
|
||||
// PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI
|
||||
|
||||
void assign_player_control_types(void) {
|
||||
printf("Assign player control types\n");
|
||||
for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) {
|
||||
s32 playerIndex = clients[i].slot;
|
||||
|
||||
gPlayers[playerIndex].nCharacter = clients[i].character;
|
||||
gPlayers[playerIndex].nStartingRank = clients[i].slot;
|
||||
|
||||
//printf("CHAR %d\n", clients[i].character);
|
||||
//printf("CHAR2 %d\n", gPlayers[playerIndex].nCharacter);
|
||||
|
||||
if (clients[i].isAI) {
|
||||
gPlayers[playerIndex].nControlFlags = 0;
|
||||
} else if (clients[i].hasAuthority) {
|
||||
//printf("PLAYER SLOT %d, INDEX %d\n", clients[i].slot, clients[i].character);
|
||||
gPlayers[playerIndex].nControlFlags = PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE; // Requires server replication to move.
|
||||
}
|
||||
|
||||
//printf("Player Slot %d, character %d\n", playerIndex, clients[i].character);
|
||||
}
|
||||
|
||||
// Get and Set player
|
||||
// gNetwork.localPlayer = &gPlayers[i];
|
||||
}
|
||||
|
||||
void set_course(const char* data) {
|
||||
if (data != NULL) {
|
||||
gCurrentCourseId = 8; //*(s16 *) data;
|
||||
}
|
||||
}
|
||||
|
||||
s32 testa = 0;
|
||||
|
||||
void assign_player_slots(const char* data) {
|
||||
if (testa) {
|
||||
return;
|
||||
}
|
||||
testa = 1;
|
||||
int offset = 0;
|
||||
printf("Assign Player Slots\n");
|
||||
for (int i = 0; i < NETWORK_MAX_PLAYERS; ++i) {
|
||||
// Read username
|
||||
|
||||
int usernameLength = *(int*)(data + offset);
|
||||
offset += sizeof(int);
|
||||
|
||||
memcpy(clients[i].username, data + offset, usernameLength);
|
||||
offset += usernameLength;
|
||||
|
||||
// Read slot
|
||||
clients[i].slot = *(int*)(data + offset);
|
||||
offset += sizeof(int);
|
||||
|
||||
// Read isPlayer
|
||||
clients[i].isPlayer = *(int*)(data + offset);
|
||||
offset += sizeof(int);
|
||||
|
||||
// Read IsAI
|
||||
clients[i].isAI = *(int*)(data + offset);
|
||||
offset += sizeof(int);
|
||||
|
||||
// Read character
|
||||
clients[i].character = *(int*)(data + offset);
|
||||
offset += sizeof(int);
|
||||
|
||||
//gCharacterSelections[i] = clients[i].character;
|
||||
|
||||
// Read hasAuthority
|
||||
clients[i].hasAuthority = *(int*)(data + offset);
|
||||
|
||||
if (clients[i].hasAuthority) {
|
||||
localClient = &clients[i];
|
||||
gPlayers[clients[i].slot].nHasAuthority = true;
|
||||
printf("You have been assigned slot %d\n", clients[i].slot + 1);
|
||||
}
|
||||
|
||||
offset += sizeof(int);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
s32 sessionBool = 0;
|
||||
|
||||
// Duplicate of setup_race
|
||||
void networking_start_session(const char *data) {
|
||||
if (sessionBool) {
|
||||
return;
|
||||
}
|
||||
sessionBool = 1;
|
||||
printf("Start session\n");
|
||||
//gIsInQuitToMenuTransition = 1;
|
||||
//gQuitToMenuTransitionCounter = 5;
|
||||
gGotoMode = RACING; // Enter race state
|
||||
gGamestateNext = RACING;
|
||||
gCCSelection = CC_150;
|
||||
gCupSelection = FLOWER_CUP;
|
||||
gCupCourseSelection = CUP_COURSE_FOUR;
|
||||
gScreenModeSelection = SCREEN_MODE_1P;
|
||||
gModeSelection = GRAND_PRIX;
|
||||
gPlayerCount = 1;
|
||||
gCurrentCourseId = 8;
|
||||
gDebugMenuSelection = DEBUG_MENU_EXITED;
|
||||
func_8009E1C0();
|
||||
func_800CA330(0x19);
|
||||
}
|
||||
|
||||
// Wait for all players to load
|
||||
s32 network_all_players_loaded() {
|
||||
if (gNetwork.gameStarted) { return; }
|
||||
if (!gNetwork.loaded) {
|
||||
gNetwork.loaded = true;
|
||||
send_int_packet(gNetwork.tcpSocket, PACKET_LOADED, true, sizeof(int));
|
||||
}
|
||||
if (gNetwork.playersLoaded) {
|
||||
gNetwork.gameStarted = true;
|
||||
gIsGamePaused = false;
|
||||
} else {
|
||||
gIsGamePaused = true;
|
||||
}
|
||||
}
|
||||
|
||||
s32 currentNetworkPlayers = 0;
|
||||
|
||||
void spawn_network_players(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
if (currentNetworkPlayers) {
|
||||
return;
|
||||
}
|
||||
currentNetworkPlayers = 1;
|
||||
|
||||
assign_player_control_types();
|
||||
|
||||
u32 posX[] = {0, 1, 3, 2, 5, 4, 7, 6};
|
||||
u32 posZ[] = {0, 1, 2, 3, 4, 5, 6, 7};
|
||||
|
||||
u32 pos[] = {0, 1, 2, 3, 4, 5, 6, 7};
|
||||
|
||||
|
||||
printf("----- Spawn Players ------\n");
|
||||
//for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) {
|
||||
//s32 playerIndex = clients[i].slot;
|
||||
//printf("Spawned %s, in slot %d as char %d with flags 0x%X", clients[i].username, clients[i].slot, gPlayers[playerIndex].nCharacter, gPlayers[playerIndex].nControlFlags);
|
||||
|
||||
|
||||
//if (gPlayers[playerIndex].nCharacter == -1) {
|
||||
// printf("\n\nCORRUPT PLAYER DATA\n\n");
|
||||
//} else {
|
||||
//printf(" X: %d, Z: %d\n", arg0[D_80165270[posX[playerIndex]]], arg1[D_80165270[posZ[playerIndex]]] + 250.0f) ;
|
||||
//spawn_player(&gPlayers[clients[i].slot], clients[i].slot, arg0[D_80165270[posX[clients[i].slot]]], arg1[D_80165270[posZ[clients[i].slot]]] + 250.0f, arg2, 32768.0f, clients[i].character, gPlayers[playerIndex].nControlFlags);
|
||||
//}
|
||||
// This index isn't right like this ^
|
||||
|
||||
//if localClient.Slots
|
||||
|
||||
spawn_player(&gPlayers[clients[0].slot], clients[0].slot, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2, 32768.0f, clients[0].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(&gPlayers[clients[1].slot], clients[1].slot, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, clients[1].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(&gPlayers[clients[2].slot], clients[2].slot, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, clients[2].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(&gPlayers[clients[3].slot], clients[3].slot, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, clients[3].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(&gPlayers[clients[4].slot], clients[4].slot, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, clients[4].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(&gPlayers[clients[5].slot], clients[5].slot, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, clients[5].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(&gPlayers[clients[6].slot], clients[6].slot, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, clients[6].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(&gPlayers[clients[7].slot], clients[7].slot, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, clients[7].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
|
||||
|
||||
//}
|
||||
printf("--------------------------\n");
|
||||
// gPlayers[i].nControlFlags
|
||||
// spawn_player(&gPlayers[clients[0].slot], clients[0].slot, 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(&gPlayers[clients[1].slot], clients[1].slot, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
// spawn_player(&gPlayers[clients[2].slot], clients[2].slot, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
// spawn_player(&gPlayers[clients[3].slot], clients[3].slot, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
// spawn_player(&gPlayers[clients[4].slot], clients[4].slot, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
// spawn_player(&gPlayers[clients[5].slot], clients[5].slot, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
// spawn_player(&gPlayers[clients[6].slot], clients[6].slot, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
// spawn_player(&gPlayers[clients[7].slot], clients[7].slot, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
|
||||
}
|
||||
|
|
@ -1022,61 +1022,61 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
|
|||
sp8C[1] = -player->boundingBoxSize;
|
||||
sp8C[2] = var_f12 - 2.0f;
|
||||
mtxf_translate_vec3f_mat3(sp8C, sp5C);
|
||||
sp80[0] = player->boundingBoxCorners[0].cornerPos[0];
|
||||
sp80[1] = player->boundingBoxCorners[0].cornerPos[1];
|
||||
sp80[2] = player->boundingBoxCorners[0].cornerPos[2];
|
||||
player->boundingBoxCorners[0].cornerPos[0] = player->pos[0] + sp8C[0];
|
||||
player->boundingBoxCorners[0].cornerPos[1] = player->pos[1] + sp8C[1];
|
||||
player->boundingBoxCorners[0].cornerPos[2] = player->pos[2] + sp8C[2];
|
||||
process_collision(player, &player->boundingBoxCorners[0], sp80[0], sp80[1], sp80[2]);
|
||||
sp80[0] = player->tyres[FRONT_LEFT].pos[0];
|
||||
sp80[1] = player->tyres[FRONT_LEFT].pos[1];
|
||||
sp80[2] = player->tyres[FRONT_LEFT].pos[2];
|
||||
player->tyres[FRONT_LEFT].pos[0] = player->pos[0] + sp8C[0];
|
||||
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;
|
||||
mtxf_translate_vec3f_mat3(sp8C, sp5C);
|
||||
sp80[0] = player->boundingBoxCorners[1].cornerPos[0];
|
||||
sp80[1] = player->boundingBoxCorners[1].cornerPos[1];
|
||||
sp80[2] = player->boundingBoxCorners[1].cornerPos[2];
|
||||
player->boundingBoxCorners[1].cornerPos[0] = player->pos[0] + sp8C[0];
|
||||
player->boundingBoxCorners[1].cornerPos[1] = player->pos[1] + sp8C[1];
|
||||
player->boundingBoxCorners[1].cornerPos[2] = player->pos[2] + sp8C[2];
|
||||
process_collision(player, &player->boundingBoxCorners[1], sp80[0], sp80[1], sp80[2]);
|
||||
sp80[0] = player->tyres[FRONT_RIGHT].pos[0];
|
||||
sp80[1] = player->tyres[FRONT_RIGHT].pos[1];
|
||||
sp80[2] = player->tyres[FRONT_RIGHT].pos[2];
|
||||
player->tyres[FRONT_RIGHT].pos[0] = player->pos[0] + sp8C[0];
|
||||
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;
|
||||
mtxf_translate_vec3f_mat3(sp8C, sp5C);
|
||||
sp80[0] = player->boundingBoxCorners[2].cornerPos[0];
|
||||
sp80[1] = player->boundingBoxCorners[2].cornerPos[1];
|
||||
sp80[2] = player->boundingBoxCorners[2].cornerPos[2];
|
||||
player->boundingBoxCorners[2].cornerPos[0] = player->pos[0] + sp8C[0];
|
||||
player->boundingBoxCorners[2].cornerPos[1] = player->pos[1] + sp8C[1];
|
||||
player->boundingBoxCorners[2].cornerPos[2] = player->pos[2] + sp8C[2];
|
||||
process_collision(player, &player->boundingBoxCorners[2], sp80[0], sp80[1], sp80[2]);
|
||||
sp80[0] = player->tyres[BACK_LEFT].pos[0];
|
||||
sp80[1] = player->tyres[BACK_LEFT].pos[1];
|
||||
sp80[2] = player->tyres[BACK_LEFT].pos[2];
|
||||
player->tyres[BACK_LEFT].pos[0] = player->pos[0] + sp8C[0];
|
||||
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;
|
||||
mtxf_translate_vec3f_mat3(sp8C, sp5C);
|
||||
sp80[0] = player->boundingBoxCorners[3].cornerPos[0];
|
||||
sp80[1] = player->boundingBoxCorners[3].cornerPos[1];
|
||||
sp80[2] = player->boundingBoxCorners[3].cornerPos[2];
|
||||
player->boundingBoxCorners[3].cornerPos[0] = player->pos[0] + sp8C[0];
|
||||
player->boundingBoxCorners[3].cornerPos[1] = player->pos[1] + sp8C[1];
|
||||
player->boundingBoxCorners[3].cornerPos[2] = player->pos[2] + sp8C[2];
|
||||
process_collision(player, &player->boundingBoxCorners[3], sp80[0], sp80[1], sp80[2]);
|
||||
sp80[0] = player->tyres[BACK_RIGHT].pos[0];
|
||||
sp80[1] = player->tyres[BACK_RIGHT].pos[1];
|
||||
sp80[2] = player->tyres[BACK_RIGHT].pos[2];
|
||||
player->tyres[BACK_RIGHT].pos[0] = player->pos[0] + sp8C[0];
|
||||
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->boundingBoxCorners[2].cornerGroundY + player->boundingBoxCorners[0].cornerGroundY) / 2;
|
||||
a = (player->tyres[BACK_LEFT].baseHeight + player->tyres[FRONT_LEFT].baseHeight) / 2;
|
||||
move_f32_towards(&player->unk_230, a, 0.5f);
|
||||
|
||||
b = (player->boundingBoxCorners[3].cornerGroundY + player->boundingBoxCorners[1].cornerGroundY) / 2;
|
||||
b = (player->tyres[BACK_RIGHT].baseHeight + player->tyres[FRONT_RIGHT].baseHeight) / 2;
|
||||
move_f32_towards(&player->unk_23C, b, 0.5f);
|
||||
|
||||
c = (player->boundingBoxCorners[1].cornerGroundY + player->boundingBoxCorners[0].cornerGroundY) / 2;
|
||||
c = (player->tyres[FRONT_RIGHT].baseHeight + player->tyres[FRONT_LEFT].baseHeight) / 2;
|
||||
move_f32_towards(&player->unk_1FC, c, 0.5f);
|
||||
|
||||
d = (player->boundingBoxCorners[3].cornerGroundY + player->boundingBoxCorners[2].cornerGroundY) / 2;
|
||||
d = (player->tyres[BACK_RIGHT].baseHeight + player->tyres[BACK_LEFT].baseHeight) / 2;
|
||||
move_f32_towards(&player->unk_1F8, d, 0.5f);
|
||||
}
|
||||
temp_f2_3 = ((gCharacterSize[player->characterId] * 18.0f) + 1.0f) * player->size;
|
||||
|
|
@ -1103,7 +1103,7 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
|
|||
if (((player->effects & 8) == 8) && ((player->unk_0CA & 2) == 2)) {
|
||||
player->slopeAccel = (s16) ((s32) player->unk_D9C);
|
||||
}
|
||||
player->surfaceType = get_surface_type(player->unk_110.unk3A) & 0xFF;
|
||||
player->surfaceType = get_surface_type(player->collision.meshIndexZX) & 0xFF;
|
||||
if (player->surfaceType == BOOST_RAMP_ASPHALT) {
|
||||
if (((player->effects & BOOST_RAMP_ASPHALT_EFFECT) != BOOST_RAMP_ASPHALT_EFFECT) && ((player->effects & 8) != 8)) {
|
||||
player->soundEffects |= BOOST_RAMP_ASPHALT_SOUND_EFFECT;
|
||||
|
|
@ -1133,36 +1133,36 @@ void func_8002A194(Player *player, f32 arg1, f32 arg2, f32 arg3) {
|
|||
var_f20 = (((gCharacterSize[player->characterId] * 18) / 2) * player->size) - 1;
|
||||
}
|
||||
|
||||
player->boundingBoxCorners[0].cornerPos[2] = (coss(temp_v1 + 0x2000) * var_f20) + arg3;
|
||||
player->tyres[FRONT_LEFT].pos[2] = (coss(temp_v1 + 0x2000) * var_f20) + arg3;
|
||||
temp_f12 = (sins(temp_v1 + 0x2000) * var_f20) + arg1;
|
||||
player->boundingBoxCorners[0].cornerPos[0] = temp_f12;
|
||||
player->boundingBoxCorners[0].cornerGroundY = func_802ABE30(temp_f12, arg2, player->boundingBoxCorners[0].cornerPos[2], player->unk_110.unk3A);
|
||||
player->tyres[FRONT_LEFT].pos[0] = temp_f12;
|
||||
player->tyres[FRONT_LEFT].baseHeight = calculate_surface_height(temp_f12, arg2, player->tyres[FRONT_LEFT].pos[2], player->collision.meshIndexZX);
|
||||
|
||||
player->boundingBoxCorners[1].cornerPos[2] = (coss(temp_v1 - 0x2000) * var_f20) + arg3;
|
||||
player->tyres[FRONT_RIGHT].pos[2] = (coss(temp_v1 - 0x2000) * var_f20) + arg3;
|
||||
temp_f12 = (sins(temp_v1 - 0x2000) * var_f20) + arg1;
|
||||
player->boundingBoxCorners[1].cornerPos[0] = temp_f12;
|
||||
player->boundingBoxCorners[1].cornerGroundY = func_802ABE30(temp_f12, arg2, player->boundingBoxCorners[1].cornerPos[2], player->unk_110.unk3A);
|
||||
player->tyres[FRONT_RIGHT].pos[0] = temp_f12;
|
||||
player->tyres[FRONT_RIGHT].baseHeight = calculate_surface_height(temp_f12, arg2, player->tyres[FRONT_RIGHT].pos[2], player->collision.meshIndexZX);
|
||||
|
||||
player->boundingBoxCorners[2].cornerPos[2] = (coss(temp_v1 + 0x6000) * var_f20) + arg3;
|
||||
player->tyres[BACK_LEFT].pos[2] = (coss(temp_v1 + 0x6000) * var_f20) + arg3;
|
||||
temp_f12 = (sins(temp_v1 + 0x6000) * var_f20) + arg1;
|
||||
player->boundingBoxCorners[2].cornerPos[0] = temp_f12;
|
||||
player->boundingBoxCorners[2].cornerGroundY = func_802ABE30(temp_f12, arg2, player->boundingBoxCorners[2].cornerPos[2], player->unk_110.unk3A);
|
||||
player->tyres[BACK_LEFT].pos[0] = temp_f12;
|
||||
player->tyres[BACK_LEFT].baseHeight = calculate_surface_height(temp_f12, arg2, player->tyres[BACK_LEFT].pos[2], player->collision.meshIndexZX);
|
||||
|
||||
player->boundingBoxCorners[3].cornerPos[2] = (coss(temp_v1 - 0x6000) * var_f20) + arg3;
|
||||
player->boundingBoxCorners[3].cornerPos[0] = (sins(temp_v1 - 0x6000) * var_f20) + arg1;
|
||||
player->boundingBoxCorners[3].cornerGroundY = func_802ABE30(player->boundingBoxCorners[2].cornerPos[0], arg2, player->boundingBoxCorners[2].cornerPos[2], player->unk_110.unk3A);
|
||||
player->tyres[BACK_RIGHT].pos[2] = (coss(temp_v1 - 0x6000) * var_f20) + arg3;
|
||||
player->tyres[BACK_RIGHT].pos[0] = (sins(temp_v1 - 0x6000) * var_f20) + arg1;
|
||||
player->tyres[BACK_RIGHT].baseHeight = calculate_surface_height(player->tyres[BACK_LEFT].pos[0], arg2, player->tyres[BACK_LEFT].pos[2], player->collision.meshIndexZX);
|
||||
|
||||
if ((player->effects & 8) != 8) {
|
||||
player->unk_230 = (player->boundingBoxCorners[2].cornerGroundY + player->boundingBoxCorners[0].cornerGroundY) / 2;
|
||||
player->unk_23C = (player->boundingBoxCorners[3].cornerGroundY + player->boundingBoxCorners[1].cornerGroundY) / 2;
|
||||
player->unk_1FC = (player->boundingBoxCorners[1].cornerGroundY + player->boundingBoxCorners[0].cornerGroundY) / 2;
|
||||
player->unk_1F8 = (player->boundingBoxCorners[3].cornerGroundY + player->boundingBoxCorners[2].cornerGroundY) / 2;
|
||||
player->unk_230 = (player->tyres[BACK_LEFT].baseHeight + player->tyres[FRONT_LEFT].baseHeight) / 2;
|
||||
player->unk_23C = (player->tyres[BACK_RIGHT].baseHeight + player->tyres[FRONT_RIGHT].baseHeight) / 2;
|
||||
player->unk_1FC = (player->tyres[FRONT_RIGHT].baseHeight + player->tyres[FRONT_LEFT].baseHeight) / 2;
|
||||
player->unk_1F8 = (player->tyres[BACK_RIGHT].baseHeight + player->tyres[BACK_LEFT].baseHeight) / 2;
|
||||
}
|
||||
player->surfaceType = (u8)get_surface_type(player->unk_110.unk3A);
|
||||
player->boundingBoxCorners[3].surfaceType = player->surfaceType;
|
||||
player->boundingBoxCorners[2].surfaceType = player->surfaceType;
|
||||
player->boundingBoxCorners[1].surfaceType = player->surfaceType;
|
||||
player->boundingBoxCorners[0].surfaceType = player->surfaceType;
|
||||
player->surfaceType = (u8)get_surface_type(player->collision.meshIndexZX);
|
||||
player->tyres[BACK_RIGHT].surfaceType = player->surfaceType;
|
||||
player->tyres[BACK_LEFT].surfaceType = player->surfaceType;
|
||||
player->tyres[FRONT_RIGHT].surfaceType = player->surfaceType;
|
||||
player->tyres[FRONT_LEFT].surfaceType = player->surfaceType;
|
||||
var_f20 = (gCharacterSize[player->characterId] * 18) + 1;
|
||||
temp_f0 = (player->unk_23C - player->unk_230);
|
||||
player->unk_206 = -func_802B7C40(temp_f0 / var_f20);
|
||||
|
|
@ -1179,10 +1179,10 @@ void func_8002A194(Player *player, f32 arg1, f32 arg2, f32 arg3) {
|
|||
}
|
||||
move_s16_towards(&player->slopeAccel, var_a1, 0.5f);
|
||||
}
|
||||
if (func_802ABD7C(player->unk_110.unk3A) != 0) {
|
||||
player->boundingBoxCorners[3].unk_14 |= 1;
|
||||
if (func_802ABD7C(player->collision.meshIndexZX) != 0) {
|
||||
player->tyres[BACK_RIGHT].unk_14 |= 1;
|
||||
} else {
|
||||
player->boundingBoxCorners[3].unk_14 &= ~1;
|
||||
player->tyres[BACK_RIGHT].unk_14 &= ~1;
|
||||
}
|
||||
if (player->surfaceType == BOOST_RAMP_ASPHALT) {
|
||||
if (((player->effects & BOOST_RAMP_ASPHALT_EFFECT) != BOOST_RAMP_ASPHALT_EFFECT) && ((player->effects & 8) != 8)) {
|
||||
|
|
@ -1196,7 +1196,7 @@ void func_8002A194(Player *player, f32 arg1, f32 arg2, f32 arg3) {
|
|||
}
|
||||
}
|
||||
|
||||
// Near identical to func_802AC114 in memory.c
|
||||
// Near identical to adjust_pos_orthogonally in memory.c
|
||||
void func_8002A5F4(Vec3f arg0, f32 arg1, Vec3f arg2, f32 arg3, f32 arg4) {
|
||||
f32 temp_f0;
|
||||
f32 temp_f2;
|
||||
|
|
@ -1368,7 +1368,7 @@ void func_8002AB70(Player *player) {
|
|||
move_f32_towards(&player->unk_DAC, 1.0f, 0.07f);
|
||||
}
|
||||
} else {
|
||||
if (player->unk_110.unk3C[2] >= 50.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 50.0f) {
|
||||
player->unk_DAC = 2.0f;
|
||||
}
|
||||
move_f32_towards(&player->kartGravity, gKartGravityTable[player->characterId], 0.02f);
|
||||
|
|
@ -1860,7 +1860,7 @@ void func_8002C11C(Player *player) {
|
|||
void func_8002C17C(Player *player, s8 playerId) {
|
||||
switch (gCurrentCourseId) { /* irregular */
|
||||
case COURSE_YOSHI_VALLEY:
|
||||
if ((player->unk_110.unk3C[2] >= 600.0f) && (D_80165330[playerId] == 0)) {
|
||||
if ((player->collision.surfaceDistance[2] >= 600.0f) && (D_80165330[playerId] == 0)) {
|
||||
D_80165330[playerId] = 1;
|
||||
gCopyNearestWaypointByPlayerId[playerId] = gNearestWaypointByPlayerId[playerId];
|
||||
gCopyPathIndexByPlayerId[playerId] = gPathIndexByPlayerId[playerId];
|
||||
|
|
@ -1868,7 +1868,7 @@ void func_8002C17C(Player *player, s8 playerId) {
|
|||
gCopyNearestWaypointByPlayerId[playerId] = gNearestWaypointByPlayerId[playerId];
|
||||
gCopyPathIndexByPlayerId[playerId] = gPathIndexByPlayerId[playerId];
|
||||
} else if (!(player->effects & 8)) {
|
||||
if (func_802ABDF4(player->unk_110.unk3A) == 0) {
|
||||
if (func_802ABDF4(player->collision.meshIndexZX) == 0) {
|
||||
D_80165330[playerId] = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1896,7 +1896,7 @@ void func_8002C17C(Player *player, s8 playerId) {
|
|||
}
|
||||
break;
|
||||
case COURSE_RAINBOW_ROAD:
|
||||
if ((player->unk_110.unk3C[2] >= 600.0f) && (D_80165330[playerId] == 0)) {
|
||||
if ((player->collision.surfaceDistance[2] >= 600.0f) && (D_80165330[playerId] == 0)) {
|
||||
D_80165330[playerId] = 1;
|
||||
gCopyNearestWaypointByPlayerId[playerId] = gNearestWaypointByPlayerId[playerId];
|
||||
gCopyPathIndexByPlayerId[playerId] = gPathIndexByPlayerId[playerId];
|
||||
|
|
@ -1949,15 +1949,15 @@ void func_8002C4F8(Player *player, s8 arg1) {
|
|||
(gCurrentCourseId == COURSE_RAINBOW_ROAD)) {
|
||||
player->unk_0DE &= ~0x000C;
|
||||
}
|
||||
if ((player->boundingBoxSize < (D_801652A0[arg1] - player->pos[1])) && (player->unk_110.unk3C[2] >= 600.0f)) {
|
||||
if ((player->boundingBoxSize < (D_801652A0[arg1] - player->pos[1])) && (player->collision.surfaceDistance[2] >= 600.0f)) {
|
||||
player->unk_0CA |= 1;
|
||||
}
|
||||
if (player->unk_110.unk3C[2] >= 600.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 600.0f) {
|
||||
player->unk_0CA |= 0x0100;
|
||||
} else if ((player->effects & 8) != 8) {
|
||||
player->unk_0CA &= ~0x0100;
|
||||
}
|
||||
if ((player->type & PLAYER_KART_AI) && ((func_802ABDF4(player->unk_110.unk3A) != 0) || (player->unk_0CA & 1))) {
|
||||
if ((player->type & PLAYER_KART_AI) && ((func_802ABDF4(player->collision.meshIndexZX) != 0) || (player->unk_0CA & 1))) {
|
||||
if (!(player->unk_0CA & 2) && !(player->unk_0CA & 8) && !(player->effects & 0x1000)) {
|
||||
func_80090778(player);
|
||||
func_80090868(player);
|
||||
|
|
@ -2017,20 +2017,21 @@ void func_8002C954(Player *player, s8 playerId, Vec3f arg2) {
|
|||
f32 zdist;
|
||||
|
||||
temp_f0 = player->pos[1] - player->unk_074;
|
||||
if (((((player->effects & 0x10000) != 0x10000) &&
|
||||
((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT)) ||
|
||||
((((temp_f0 >= 20.0f) ||
|
||||
(temp_f0 < (-1.0f))) &&
|
||||
((player->effects & 0x10000) == 0)) &&
|
||||
(player->effects & 8)) ||
|
||||
((player->unk_110.unk34 == 0) &&
|
||||
((player->effects & 0x10000) == 0))) &&
|
||||
(((player->unk_0CA & 2) == 0) ||
|
||||
|
||||
if (((((player->effects & 0x10000) != 0x10000) &&
|
||||
((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT)) ||
|
||||
((((temp_f0 >= 20.0f) ||
|
||||
(temp_f0 < (-1.0f))) &&
|
||||
((player->effects & 0x10000) == 0)) &&
|
||||
(player->effects & 8)) ||
|
||||
((player->collision.unk34 == 0) &&
|
||||
((player->effects & 0x10000) == 0))) &&
|
||||
(((player->unk_0CA & 2) == 0) ||
|
||||
(!(player->unk_0CA & 8)))) {
|
||||
func_8008F494(player, playerId);
|
||||
}
|
||||
if ((player->unk_046 & 0x20) != 0x20) {
|
||||
if ((player->unk_110.unk3C[0] < (-1.0f)) || (player->unk_110.unk3C[1] < (-1.0f))) {
|
||||
if ((player->collision.surfaceDistance[0] < (-1.0f)) || (player->collision.surfaceDistance[1] < (-1.0f))) {
|
||||
player->unk_256 = 1;
|
||||
}
|
||||
player->unk_046 |= 0x20;
|
||||
|
|
@ -2044,7 +2045,7 @@ void func_8002C954(Player *player, s8 playerId, Vec3f arg2) {
|
|||
player->unk_256 = 0;
|
||||
}
|
||||
if ((player->slopeAccel >= 0) && (((player->unk_094 / 18.0f) * 216.0f) > 5.0f)) {
|
||||
func_80031F48(player, 18.0f);
|
||||
decelerate_ai_player(player, 18.0f);
|
||||
}
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
xdist = D_80165070[playerId][0] - arg2[0];
|
||||
|
|
@ -2110,7 +2111,7 @@ void apply_effect(Player *player, s8 arg1, s8 arg2) {
|
|||
apply_boo_effect(player, arg1);
|
||||
}
|
||||
if (((player->effects & 0x20000000) == 0x20000000) && (player->unk_228 >= 0x64)) {
|
||||
func_80031F48(player, 4.0f);
|
||||
decelerate_ai_player(player, 4.0f);
|
||||
}
|
||||
if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) {
|
||||
func_8008C9EC(player, arg1);
|
||||
|
|
@ -2132,7 +2133,7 @@ void apply_effect(Player *player, s8 arg1, s8 arg2) {
|
|||
}
|
||||
if ((player->effects & 0x800000) == 0x800000) {
|
||||
func_8008D8B4(player, arg1);
|
||||
func_80031F48(player, 10.0f);
|
||||
decelerate_ai_player(player, 10.0f);
|
||||
}
|
||||
if (D_800DC510 != 5) {
|
||||
if (player->soundEffects & 0x04000000) {
|
||||
|
|
@ -2249,19 +2250,19 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
player->unk_064[0] *= -1.0f;
|
||||
player->unk_064[2] *= -1.0f;
|
||||
}
|
||||
if ((player->boundingBoxCorners[2].surfaceType == ASPHALT) && (player->boundingBoxCorners[3].surfaceType == ASPHALT)) {
|
||||
spB4 = (-1 * (player->unk_064[0] + sp16C[0])) + ((-player->unk_110.orientationVector[0] * player->kartGravity) * 0.925);
|
||||
spB0 = (-player->unk_110.orientationVector[1] * player->kartGravity);
|
||||
spAC = (-1 * (player->unk_064[2] + sp16C[2])) + ((-player->unk_110.orientationVector[2] * player->kartGravity) * 0.925);
|
||||
if ((player->tyres[BACK_LEFT].surfaceType == ASPHALT) && (player->tyres[BACK_RIGHT].surfaceType == ASPHALT)) {
|
||||
spB4 = (-1 * (player->unk_064[0] + sp16C[0])) + ((-player->collision.orientationVector[0] * player->kartGravity) * 0.925);
|
||||
spB0 = (-player->collision.orientationVector[1] * player->kartGravity);
|
||||
spAC = (-1 * (player->unk_064[2] + sp16C[2])) + ((-player->collision.orientationVector[2] * player->kartGravity) * 0.925);
|
||||
} else {
|
||||
temp3 = (((player->unk_094 / 18.0f) * 216.0f) / 10.0f);
|
||||
if (temp3 >= 10)
|
||||
{
|
||||
temp3 = 10;
|
||||
}
|
||||
spB4 = -1 * (player->unk_064[0] + sp16C[0]) + ((-player->unk_110.orientationVector[0] * player->kartGravity) * sp104[temp3]);
|
||||
spB0 = (-player->unk_110.orientationVector[1] * player->kartGravity);
|
||||
spAC = -1 * (player->unk_064[2] + sp16C[2]) + ((-player->unk_110.orientationVector[2] * player->kartGravity) * sp104[temp3]);
|
||||
spB4 = -1 * (player->unk_064[0] + sp16C[0]) + ((-player->collision.orientationVector[0] * player->kartGravity) * sp104[temp3]);
|
||||
spB0 = (-player->collision.orientationVector[1] * player->kartGravity);
|
||||
spAC = -1 * (player->unk_064[2] + sp16C[2]) + ((-player->collision.orientationVector[2] * player->kartGravity) * sp104[temp3]);
|
||||
}
|
||||
if (((player->effects & 8) != 8) && ((player->effects & 0x20) == 0x20)) {
|
||||
spB4 = 0 * (player->unk_064[0] + sp16C[0]);
|
||||
|
|
@ -2340,7 +2341,7 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
spF8 += player->kartHopVelocity;
|
||||
spF8 -= 0.02;
|
||||
}
|
||||
func_802AD950(&player->unk_110, player->boundingBoxSize, spFC, spF8, spF4, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
actor_terrain_collision(&player->collision, player->boundingBoxSize, spFC, spF8, spF4, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
player->unk_058 = 0.0f;
|
||||
player->unk_060 = 0.0f;
|
||||
player->unk_05C = 1.0f;
|
||||
|
|
@ -2351,7 +2352,7 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
}
|
||||
player->effects |= 8;
|
||||
player->unk_0C2 += 1;
|
||||
temp_var = player->unk_110.unk3C[2];
|
||||
temp_var = player->collision.surfaceDistance[2];
|
||||
if (temp_var <= 0.0f) {
|
||||
player->effects = player->effects & (~2);
|
||||
player->effects = player->effects & (~8);
|
||||
|
|
@ -2402,23 +2403,23 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
player->unk_0C2 = 0;
|
||||
player->kartHopVelocity = player->unk_0C2;
|
||||
}
|
||||
temp_var = player->unk_110.unk3C[2];
|
||||
temp_var = player->collision.surfaceDistance[2];
|
||||
if (temp_var <= 0.0f) {
|
||||
func_8003F46C(player, sp8C, sp98, sp178, &temp_var, &spFC, &spF8, &spF4);
|
||||
}
|
||||
temp_var = player->unk_110.unk3C[0];
|
||||
temp_var = player->collision.surfaceDistance[0];
|
||||
if (temp_var < 0.0f) {
|
||||
func_8003F734(player, sp8C, sp98, &temp_var, &spFC, &spF8, &spF4);
|
||||
func_8002C954(player, playerId, sp98);
|
||||
}
|
||||
temp_var = player->unk_110.unk3C[1];
|
||||
temp_var = player->collision.surfaceDistance[1];
|
||||
if (temp_var < 0.0f) {
|
||||
func_8003FBAC(player, sp8C, sp98, &temp_var, &spFC, &spF8, &spF4);
|
||||
func_8002C954(player, playerId, sp98);
|
||||
}
|
||||
temp_var = player->unk_110.unk3C[0];
|
||||
temp_var = player->collision.surfaceDistance[0];
|
||||
if (temp_var >= 0.0f) {
|
||||
temp_var = player->unk_110.unk3C[1];
|
||||
temp_var = player->collision.surfaceDistance[1];
|
||||
if (temp_var >= 0.0f) {
|
||||
player->unk_046 &= 0xFFDF;
|
||||
if (player->unk_256 != 0) {
|
||||
|
|
@ -2430,14 +2431,14 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
}
|
||||
}
|
||||
}
|
||||
if (((!(player->effects & 8)) && (func_802ABDB8(player->unk_110.unk3A) != 0)) && ((player->effects & 0x10000) != 0x10000)) {
|
||||
if (((!(player->effects & 8)) && (func_802ABDB8(player->collision.meshIndexZX) != 0)) && ((player->effects & 0x10000) != 0x10000)) {
|
||||
if ((!(player->unk_0CA & 2)) || (!(player->unk_0CA & 8))) {
|
||||
func_8008F494(player, playerId);
|
||||
}
|
||||
} else if (((!(player->effects & 8)) && (func_802ABDB8(player->unk_110.unk3A) == 0)) && (player->effects & 0x10000)) {
|
||||
} else if (((!(player->effects & 8)) && (func_802ABDB8(player->collision.meshIndexZX) == 0)) && (player->effects & 0x10000)) {
|
||||
func_8008F5A4(player, playerId);
|
||||
}
|
||||
player->unk_074 = func_802ABE30(spFC, spF8, spF4, player->unk_110.unk3A);
|
||||
player->unk_074 = calculate_surface_height(spFC, spF8, spF4, player->collision.meshIndexZX);
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && (((gActiveScreenMode == SCREEN_MODE_1P) || (gActiveScreenMode == SCREEN_MODE_2P_SPLITSCREEN_VERTICAL)) || (gActiveScreenMode == SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL))) {
|
||||
func_80029B4C(player, spFC, spF8, spF4);
|
||||
} else {
|
||||
|
|
@ -2489,7 +2490,7 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
player->unk_094 = 1;
|
||||
}
|
||||
}
|
||||
if (player->unk_110.unk3C[2] >= 500.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 500.0f) {
|
||||
player->unk_078 = (s16) (((s16) player->unk_078) / 2);
|
||||
}
|
||||
func_8002C4F8(player, playerId);
|
||||
|
|
@ -2502,7 +2503,7 @@ void func_8002E4C4(Player *player) {
|
|||
player->kartHopJerk = 0.0f;
|
||||
player->kartHopAcceleration = 0.0f;
|
||||
player->kartHopVelocity = 0.0f;
|
||||
player->pos[1] = func_802AE1C0(player->pos[0], D_80164510[player_index] + 10.0f, player->pos[2]) + player->boundingBoxSize;
|
||||
player->pos[1] = spawn_actor_on_surface(player->pos[0], D_80164510[player_index] + 10.0f, player->pos[2]) + player->boundingBoxSize;
|
||||
if (((player->pos[1] - D_80164510[player_index]) > 1200.0f) || ((player->pos[1] - D_80164510[player_index]) < -1200.0f)) {
|
||||
player->pos[1] = player->copy_rotation_y;
|
||||
}
|
||||
|
|
@ -2549,9 +2550,9 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
if ((((player->effects & 0x80) == 0x80)
|
||||
|| ((player->effects & 0x40) == 0x40))
|
||||
|| ((player->effects & 0x20000) == 0x20000)) {
|
||||
sp80 = -1 * (player->unk_064[0]) + (((-player->unk_110.orientationVector[0]) * player->kartGravity) * 0.1);
|
||||
sp7C = (-player->unk_110.orientationVector[1]) * player->kartGravity;
|
||||
sp78 = -1 * (player->unk_064[2]) + (((-player->unk_110.orientationVector[2]) * player->kartGravity) * 0.1);
|
||||
sp80 = -1 * (player->unk_064[0]) + (((-player->collision.orientationVector[0]) * player->kartGravity) * 0.1);
|
||||
sp7C = (-player->collision.orientationVector[1]) * player->kartGravity;
|
||||
sp78 = -1 * (player->unk_064[2]) + (((-player->collision.orientationVector[2]) * player->kartGravity) * 0.1);
|
||||
} else {
|
||||
sp80 = -1 * player->unk_064[0];
|
||||
sp7C = -1 * player->kartGravity;
|
||||
|
|
@ -2605,13 +2606,13 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
spC8 = posZ + player->velocity[2] + D_8018CE10[playerId].unk_04[2];
|
||||
func_8002AAC0(player);
|
||||
spCC += player->kartHopVelocity;
|
||||
func_802AD950(&player->unk_110, player->boundingBoxSize, spD0, spCC, spC8, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
actor_terrain_collision(&player->collision, player->boundingBoxSize, spD0, spCC, spC8, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
player->effects |= 8;
|
||||
player->unk_0C2 += 1;
|
||||
player->unk_058 = 0.0f;
|
||||
player->unk_060 = 0.0f;
|
||||
player->unk_05C = 1.0f;
|
||||
sp74 = player->unk_110.unk3C[2];
|
||||
sp74 = player->collision.surfaceDistance[2];
|
||||
if (sp74 <= 0.0f) {
|
||||
player->effects &= ~2;
|
||||
player->effects &= ~8;
|
||||
|
|
@ -2674,25 +2675,25 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
}
|
||||
player->kartHopVelocity = (f32) player->unk_0C2;
|
||||
}
|
||||
sp74 = player->unk_110.unk3C[2];
|
||||
sp74 = player->collision.surfaceDistance[2];
|
||||
if (sp74 <= 0.0f) {
|
||||
func_8003F46C(player, sp48, sp54, spE0, &sp74, &spD0, &spCC, &spC8);
|
||||
}
|
||||
sp74 = player->unk_110.unk3C[0];
|
||||
sp74 = player->collision.surfaceDistance[0];
|
||||
if (sp74 < 0.0f) {
|
||||
func_8003F734(player, sp48, sp54, &sp74, &spD0, &spCC, &spC8);
|
||||
func_8002C954(player, playerId, sp54);
|
||||
func_80031F48(player, 6.0f);
|
||||
decelerate_ai_player(player, 6.0f);
|
||||
}
|
||||
sp74 = player->unk_110.unk3C[1];
|
||||
sp74 = player->collision.surfaceDistance[1];
|
||||
if (sp74 < 0.0f) {
|
||||
func_8003FBAC(player, sp48, sp54, &sp74, &spD0, &spCC, &spC8);
|
||||
func_8002C954(player, playerId, sp54);
|
||||
func_80031F48(player, 6.0f);
|
||||
decelerate_ai_player(player, 6.0f);
|
||||
}
|
||||
sp74 = player->unk_110.unk3C[0];
|
||||
sp74 = player->collision.surfaceDistance[0];
|
||||
if (sp74 >= 0.0f) {
|
||||
sp74 = player->unk_110.unk3C[1];
|
||||
sp74 = player->collision.surfaceDistance[1];
|
||||
if (sp74 >= 0.0f) {
|
||||
player->unk_046 &= 0xFFDF;
|
||||
if (player->unk_256 != 0) {
|
||||
|
|
@ -2704,14 +2705,14 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 screenId, s8 player
|
|||
}
|
||||
}
|
||||
}
|
||||
if (((func_802ABDB8(player->unk_110.unk3A) != 0) && ((player->effects & 0x10000) != 0x10000)) && (((player->unk_094 / 18.0f) * 216.0f) >= 20.0f)) {
|
||||
if (((func_802ABDB8(player->collision.meshIndexZX) != 0) && ((player->effects & 0x10000) != 0x10000)) && (((player->unk_094 / 18.0f) * 216.0f) >= 20.0f)) {
|
||||
if ((!(player->unk_0CA & 2)) || (!(player->unk_0CA & 8))) {
|
||||
func_8008F494(player, playerId);
|
||||
}
|
||||
} else if (((!(player->effects & 8)) && (func_802ABDB8(player->unk_110.unk3A) == 0)) && (player->effects & 0x10000)) {
|
||||
} else if (((!(player->effects & 8)) && (func_802ABDB8(player->collision.meshIndexZX) == 0)) && (player->effects & 0x10000)) {
|
||||
func_8008F5A4(player, playerId);
|
||||
}
|
||||
player->unk_074 = func_802ABE30(spD0, spCC, spC8, player->unk_110.unk3A);
|
||||
player->unk_074 = calculate_surface_height(spD0, spCC, spC8, player->collision.meshIndexZX);
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && (((gActiveScreenMode == SCREEN_MODE_1P) || (gActiveScreenMode == SCREEN_MODE_2P_SPLITSCREEN_VERTICAL)) || (gActiveScreenMode == SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL))) {
|
||||
func_80029B4C(player, spD0, spCC, spC8);
|
||||
} else {
|
||||
|
|
@ -2881,18 +2882,18 @@ void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 screenId, s8
|
|||
func_8002AAC0(player);
|
||||
|
||||
spC8 += player->kartHopVelocity;
|
||||
func_802AD950(&player->unk_110, player->boundingBoxSize, spCC, spC8, spC4, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
actor_terrain_collision(&player->collision, player->boundingBoxSize, spCC, spC8, spC4, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
player->unk_058 = 0.0f;
|
||||
player->unk_05C = 1.0f;
|
||||
player->unk_060 = 0.0f;
|
||||
calculate_orientation_matrix(player->orientationMatrix, 0.0f, 1.0f, 0.0f, (s16) (s32) player->rotation[1]);
|
||||
player->effects &= ~8;
|
||||
sp78 = player->unk_110.unk3C[2];
|
||||
sp78 = player->collision.surfaceDistance[2];
|
||||
if (sp78 <= 0.0f) {
|
||||
if(1) {};
|
||||
func_8003F46C(player, sp5C, sp68, spE8, &sp78, &spCC, &spC8, &spC4);
|
||||
}
|
||||
player->unk_074 = func_802ABE30(spCC, spC8, spC4, player->unk_110.unk3A);
|
||||
player->unk_074 = calculate_surface_height(spCC, spC8, spC4, player->collision.meshIndexZX);
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((gActiveScreenMode == SCREEN_MODE_1P) || (gActiveScreenMode == SCREEN_MODE_2P_SPLITSCREEN_VERTICAL) || (gActiveScreenMode == SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL))) {
|
||||
func_80029B4C(player, spCC, spC8, spC4);
|
||||
} else {
|
||||
|
|
@ -2941,17 +2942,17 @@ void func_8002FCA8(Player *player, s8 arg1) {
|
|||
|
||||
var_f0 = 0.0f;
|
||||
if ((player->effects & STAR_EFFECT) != STAR_EFFECT) {
|
||||
if ((s32) player->boundingBoxCorners[3].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2A90[player->characterId][player->boundingBoxCorners[3].surfaceType];
|
||||
if ((s32) player->tyres[BACK_RIGHT].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2A90[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
}
|
||||
if ((s32) player->boundingBoxCorners[2].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2A90[player->characterId][player->boundingBoxCorners[2].surfaceType];
|
||||
if ((s32) player->tyres[BACK_LEFT].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2A90[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
}
|
||||
if ((s32) player->boundingBoxCorners[1].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2AB0[player->characterId][player->boundingBoxCorners[1].surfaceType];
|
||||
if ((s32) player->tyres[FRONT_RIGHT].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2AB0[player->characterId][player->tyres[FRONT_RIGHT].surfaceType];
|
||||
}
|
||||
if ((s32) player->boundingBoxCorners[0].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2AB0[player->characterId][player->boundingBoxCorners[0].surfaceType];
|
||||
if ((s32) player->tyres[FRONT_LEFT].surfaceType < 0xF) {
|
||||
var_f0 += D_800E2AB0[player->characterId][player->tyres[FRONT_LEFT].surfaceType];
|
||||
}
|
||||
}
|
||||
if (D_801652C0[arg1] & 4) {
|
||||
|
|
@ -3003,12 +3004,12 @@ void func_8002FE84(Player *player, f32 arg1) {
|
|||
var_f0 += (temp_lo * 0.025) / 1.2;
|
||||
}
|
||||
player->unk_098 = arg1 * (1.0f - var_f0);
|
||||
if (player->boundingBoxCorners[3].surfaceType == GRASS) {
|
||||
var_f0 += D_800E2E90[player->characterId][player->boundingBoxCorners[3].surfaceType] * 0.7;
|
||||
if (player->tyres[BACK_RIGHT].surfaceType == GRASS) {
|
||||
var_f0 += D_800E2E90[player->characterId][player->tyres[BACK_RIGHT].surfaceType] * 0.7;
|
||||
}
|
||||
if (player->boundingBoxCorners[2].surfaceType == GRASS) {
|
||||
if (player->tyres[BACK_LEFT].surfaceType == GRASS) {
|
||||
// The unecessary "* 1.0" here is to force the compiler to save this 0.7 as a separate RO value from the 0.7 just above this comment
|
||||
var_f0 += D_800E2E90[player->characterId][player->boundingBoxCorners[2].surfaceType] * (0.7 * 1.0);
|
||||
var_f0 += D_800E2E90[player->characterId][player->tyres[BACK_LEFT].surfaceType] * (0.7 * 1.0);
|
||||
}
|
||||
test = player->unk_0C0 / 182;
|
||||
if (test < 0) {
|
||||
|
|
@ -3033,21 +3034,21 @@ f32 func_80030150(Player *player, s8 arg1) {
|
|||
var_f2 = (player->unk_094 / 18.0f) * 216.0f;
|
||||
if (var_f2 >= 8.0f) {
|
||||
if ((player->effects & STAR_EFFECT) != STAR_EFFECT) {
|
||||
if ((s32) player->boundingBoxCorners[3].surfaceType >= 0xF) {
|
||||
if ((s32) player->tyres[BACK_RIGHT].surfaceType >= 0xF) {
|
||||
// ???????
|
||||
if(1) {}
|
||||
} else {
|
||||
var_f0 += D_800E2E90[player->characterId][player->boundingBoxCorners[3].surfaceType];
|
||||
var_f0 += D_800E2E90[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
}
|
||||
|
||||
if ((s32) player->boundingBoxCorners[2].surfaceType < 0xF)
|
||||
var_f0 += D_800E2E90[player->characterId][player->boundingBoxCorners[2].surfaceType];
|
||||
|
||||
if ((s32) player->boundingBoxCorners[1].surfaceType < 0xF)
|
||||
var_f0 += D_800E2EB0[player->characterId][player->boundingBoxCorners[1].surfaceType];
|
||||
|
||||
if ((s32) player->boundingBoxCorners[0].surfaceType < 0xF)
|
||||
var_f0 += D_800E2E90[player->characterId][player->boundingBoxCorners[0].surfaceType];
|
||||
|
||||
if ((s32) player->tyres[BACK_LEFT].surfaceType < 0xF)
|
||||
var_f0 += D_800E2E90[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
|
||||
if ((s32) player->tyres[FRONT_RIGHT].surfaceType < 0xF)
|
||||
var_f0 += D_800E2EB0[player->characterId][player->tyres[FRONT_RIGHT].surfaceType];
|
||||
|
||||
if ((s32) player->tyres[FRONT_LEFT].surfaceType < 0xF)
|
||||
var_f0 += D_800E2E90[player->characterId][player->tyres[FRONT_LEFT].surfaceType];
|
||||
}
|
||||
if (((player->effects & 8) != 8) && ((player->unk_0CA & 2) != 2)) {
|
||||
temp_lo = player->slopeAccel / 182;
|
||||
|
|
@ -3095,7 +3096,7 @@ f32 func_80030150(Player *player, s8 arg1) {
|
|||
if ((player->unk_0DE & 2) == 2) {
|
||||
var_f0 += 0.15;
|
||||
}
|
||||
if (((D_801652A0[arg1] - player->boundingBoxCorners[2].cornerGroundY) >= 3.5) || ((D_801652A0[arg1] - player->boundingBoxCorners[3].cornerGroundY) >= 3.5)) {
|
||||
if (((D_801652A0[arg1] - player->tyres[BACK_LEFT].baseHeight) >= 3.5) || ((D_801652A0[arg1] - player->tyres[BACK_RIGHT].baseHeight) >= 3.5)) {
|
||||
var_f0 += 0.05;
|
||||
}
|
||||
}
|
||||
|
|
@ -3405,11 +3406,11 @@ void player_speed(Player *player) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_80031F48(Player *player, f32 arg1) {
|
||||
void decelerate_ai_player(Player *player, f32 speed) {
|
||||
s32 player_index;
|
||||
player_index = get_player_index_for_player(player);
|
||||
|
||||
player->currentSpeed -= arg1;
|
||||
player->currentSpeed -= speed;
|
||||
if (player->currentSpeed <= 0.0f) {
|
||||
player->currentSpeed = 0.0f;
|
||||
}
|
||||
|
|
@ -3584,14 +3585,14 @@ void func_800323E4(Player *player) {
|
|||
player->effects |= 1;
|
||||
// This check will never be true, why is it here?
|
||||
if ((player->effects & 0x20) == 0x20) {
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
player->unk_20C = var_f2;
|
||||
} else {
|
||||
if ((s32) player->boundingBoxCorners[3].surfaceType < 0xF) {
|
||||
var_f2 += D_800E3210[player->characterId][player->boundingBoxCorners[3].surfaceType];
|
||||
if ((s32) player->tyres[BACK_RIGHT].surfaceType < 0xF) {
|
||||
var_f2 += D_800E3210[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
}
|
||||
if ((s32) player->boundingBoxCorners[2].surfaceType < 0xF) {
|
||||
var_f2 += D_800E3210[player->characterId][player->boundingBoxCorners[2].surfaceType];
|
||||
if ((s32) player->tyres[BACK_LEFT].surfaceType < 0xF) {
|
||||
var_f2 += D_800E3210[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
}
|
||||
test = player->unk_22C - player->unk_094;
|
||||
if (test <= 0.0f) {
|
||||
|
|
@ -3604,18 +3605,18 @@ void func_800323E4(Player *player) {
|
|||
}
|
||||
if (gIsPlayerTripleBButtonCombo[var_v1] == true) {
|
||||
if (player->unk_20C >= 2.0f) {
|
||||
func_80031F48(player, (1.0f - var_f2) * 5.0f);
|
||||
decelerate_ai_player(player, (1.0f - var_f2) * 5.0f);
|
||||
} else {
|
||||
func_80031F48(player, (1.0f - var_f2) * 3.0f);
|
||||
decelerate_ai_player(player, (1.0f - var_f2) * 3.0f);
|
||||
}
|
||||
} else {
|
||||
if (((player->unk_094 / 18.0f) * 216.0f) <= 20.0f) {
|
||||
func_80031F48(player, (1.0f - var_f2) * 4.0f);
|
||||
decelerate_ai_player(player, (1.0f - var_f2) * 4.0f);
|
||||
}
|
||||
if (player->unk_20C >= 2.0f) {
|
||||
func_80031F48(player, (1.0f - var_f2) * 2.5);
|
||||
decelerate_ai_player(player, (1.0f - var_f2) * 2.5);
|
||||
} else {
|
||||
func_80031F48(player, (1.0f - var_f2) * 1.2);
|
||||
decelerate_ai_player(player, (1.0f - var_f2) * 1.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3938,13 +3939,13 @@ void func_80033AE0(Player *player, struct Controller *controller, s8 arg2) {
|
|||
player->soundEffects |= 0x80;
|
||||
}
|
||||
}
|
||||
if (((s32) player->boundingBoxCorners[3].surfaceType) < 0xF)
|
||||
if (((s32) player->tyres[BACK_RIGHT].surfaceType) < 0xF)
|
||||
{
|
||||
var_f2 += D_800E3610[player->characterId][player->boundingBoxCorners[3].surfaceType];
|
||||
var_f2 += D_800E3610[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
}
|
||||
if (((s32) player->boundingBoxCorners[2].surfaceType) < 0xF)
|
||||
if (((s32) player->tyres[BACK_LEFT].surfaceType) < 0xF)
|
||||
{
|
||||
var_f2 += D_800E3610[player->characterId][player->boundingBoxCorners[2].surfaceType];
|
||||
var_f2 += D_800E3610[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
}
|
||||
if ((player->effects & 0x20) == 0x20)
|
||||
{
|
||||
|
|
@ -4014,7 +4015,7 @@ void func_80033AE0(Player *player, struct Controller *controller, s8 arg2) {
|
|||
sp2C8 *= 1.2;
|
||||
sp2CC *= 1.2;
|
||||
}
|
||||
if ((((f64) (D_801652A0[arg2] - player->boundingBoxCorners[2].cornerGroundY)) >= 3.5) || (((f64) (D_801652A0[arg2] - player->boundingBoxCorners[3].cornerGroundY)) >= 3.5))
|
||||
if ((((f64) (D_801652A0[arg2] - player->tyres[BACK_LEFT].baseHeight)) >= 3.5) || (((f64) (D_801652A0[arg2] - player->tyres[BACK_RIGHT].baseHeight)) >= 3.5))
|
||||
{
|
||||
sp2C8 *= 1.05;
|
||||
sp2CC *= 1.05;
|
||||
|
|
@ -4146,17 +4147,17 @@ void func_80033AE0(Player *player, struct Controller *controller, s8 arg2) {
|
|||
func_8002BD58(player);
|
||||
}
|
||||
player->effects &= 0xDFFFFFFF;
|
||||
if (((s32) player->boundingBoxCorners[3].surfaceType) > 0xE)
|
||||
if (((s32) player->tyres[BACK_RIGHT].surfaceType) > 0xE)
|
||||
{
|
||||
var_f12 = var_f12;
|
||||
}
|
||||
else
|
||||
{
|
||||
var_f12 += D_800E3410[player->characterId][player->boundingBoxCorners[3].surfaceType];
|
||||
var_f12 += D_800E3410[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
}
|
||||
if (((s32) player->boundingBoxCorners[2].surfaceType) < 0xF)
|
||||
if (((s32) player->tyres[BACK_LEFT].surfaceType) < 0xF)
|
||||
{
|
||||
var_f12 += D_800E3410[player->characterId][player->boundingBoxCorners[2].surfaceType];
|
||||
var_f12 += D_800E3410[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
}
|
||||
if (((player->effects & 2) != 2) && ((player->effects & 0x10) != 0x10))
|
||||
{
|
||||
|
|
@ -4650,7 +4651,7 @@ void func_80037CFC(Player *player, struct Controller *controller, s8 arg2) {
|
|||
}
|
||||
if ((player->effects & 8) != 8) {
|
||||
func_80033AE0(player, controller, arg2);
|
||||
} else if (((player->effects & 2) == 2) && (player->unk_110.unk3C[2] <= 5.0f)) {
|
||||
} else if (((player->effects & 2) == 2) && (player->collision.surfaceDistance[2] <= 5.0f)) {
|
||||
func_80033AE0(player, controller, arg2);
|
||||
}
|
||||
player->effects &= ~1;
|
||||
|
|
@ -4678,11 +4679,11 @@ void func_80037CFC(Player *player, struct Controller *controller, s8 arg2) {
|
|||
} else {
|
||||
if (gModeSelection == BATTLE)
|
||||
{
|
||||
func_80031F48(player, 2.0f);
|
||||
decelerate_ai_player(player, 2.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
func_80031F48(player, 1.0f);
|
||||
decelerate_ai_player(player, 1.0f);
|
||||
}
|
||||
detect_triple_a_combo_a_released(player);
|
||||
}
|
||||
|
|
@ -4715,7 +4716,7 @@ void func_80037CFC(Player *player, struct Controller *controller, s8 arg2) {
|
|||
if (controller->button & A_BUTTON) {
|
||||
player_speed(player);
|
||||
} else {
|
||||
func_80031F48(player, 5.0f);
|
||||
decelerate_ai_player(player, 5.0f);
|
||||
}
|
||||
}
|
||||
if (((((player->effects & 0x80) == 0x80) ||
|
||||
|
|
@ -5012,42 +5013,42 @@ void func_80038C6C(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId)
|
|||
func_8002AAC0(player);
|
||||
spE8 += player->kartHopVelocity;
|
||||
spE8 -= 0.02;
|
||||
func_802AD950(&player->unk_110, player->boundingBoxSize, spEC, spE8, spE4, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
actor_terrain_collision(&player->collision, player->boundingBoxSize, spEC, spE8, spE4, player->copy_rotation_x, player->copy_rotation_y, player->copy_rotation_z);
|
||||
player->unk_058 = 0;
|
||||
player->unk_060 = 0;
|
||||
player->unk_05C = 1.0f;
|
||||
calculate_orientation_matrix(player->orientationMatrix, 0, 1.0f, 0, player->rotation[1]);
|
||||
player->effects |= 8;
|
||||
player->unk_0C2 += 1;
|
||||
sp98 = player->unk_110.unk3C[2];
|
||||
sp98 = player->collision.surfaceDistance[2];
|
||||
if (sp98 <= 0) {
|
||||
player->unk_0C2 = 0;
|
||||
player->effects &= ~2;
|
||||
player->effects &= ~8;
|
||||
player->kartHopVelocity = player->unk_0C2;
|
||||
}
|
||||
sp98 = player->unk_110.unk3C[2];
|
||||
sp98 = player->collision.surfaceDistance[2];
|
||||
if (sp98 <= 0) {
|
||||
func_8003F46C(player, sp7C, sp88, sp108, &sp98, &spEC, &spE8, &spE4);
|
||||
}
|
||||
sp98 = player->unk_110.unk3C[0];
|
||||
sp98 = player->collision.surfaceDistance[0];
|
||||
if (sp98 < 0) {
|
||||
func_8003F734(player, sp7C, sp88, &sp98, &spEC, &spE8, &spE4);
|
||||
func_8002C954(player, playerId, sp88);
|
||||
}
|
||||
sp98 = player->unk_110.unk3C[1];
|
||||
sp98 = player->collision.surfaceDistance[1];
|
||||
if (sp98 < 0) {
|
||||
func_8003FBAC(player, sp7C, sp88, &sp98, &spEC, &spE8, &spE4);
|
||||
func_8002C954(player, playerId, sp88);
|
||||
}
|
||||
sp98 = player->unk_110.unk3C[0];
|
||||
sp98 = player->collision.surfaceDistance[0];
|
||||
if (sp98 >= 0) {
|
||||
sp98 = player->unk_110.unk3C[1];
|
||||
sp98 = player->collision.surfaceDistance[1];
|
||||
if (sp98 >= 0) {
|
||||
player->unk_046 &= 0xFFDF;
|
||||
}
|
||||
}
|
||||
player->unk_074 = func_802ABE30(spEC, spE8, spE4, player->unk_110.unk3A);
|
||||
player->unk_074 = calculate_surface_height(spEC, spE8, spE4, player->collision.meshIndexZX);
|
||||
func_80029B4C(player, spEC, spE8, spE4);
|
||||
func_8002AE38(player, playerId, posX, posZ, spEC, spE4);
|
||||
sqrt = (sp88[0] * sp88[0]) + (sp88[2] * sp88[2]);
|
||||
|
|
@ -5086,7 +5087,7 @@ void func_80038C6C(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId)
|
|||
player->unk_094 = 1.0f;
|
||||
}
|
||||
}
|
||||
if (player->unk_110.unk3C[2] >= 500.0f) {
|
||||
if (player->collision.surfaceDistance[2] >= 500.0f) {
|
||||
player->unk_078 /= 2;
|
||||
}
|
||||
func_8002C4F8(player, playerId);
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ void func_80030A34(Player*);
|
|||
void detect_triple_a_combo_a_released(Player*);
|
||||
void detect_triple_a_combo_a_pressed(Player*);
|
||||
void player_speed(Player*);
|
||||
void func_80031F48(Player*, f32);
|
||||
void decelerate_ai_player(Player*, f32);
|
||||
void detect_triple_b_combo_b_released(Player*);
|
||||
void detect_triple_b_combo_b_pressed(Player*);
|
||||
void func_800323E4(Player*);
|
||||
|
|
|
|||
|
|
@ -226,3 +226,23 @@ extern "C" void Timer_SetValue(int32_t* address, int32_t value) {
|
|||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
extern "C" float OTRGetAspectRatio() {
|
||||
return gfx_current_dimensions.aspect_ratio;
|
||||
}
|
||||
|
||||
extern "C" float OTRGetDimensionFromLeftEdge(float v) {
|
||||
return (SCREEN_WIDTH / 2 - SCREEN_HEIGHT / 2 * OTRGetAspectRatio() + (v));
|
||||
}
|
||||
|
||||
extern "C" int16_t OTRGetRectDimensionFromLeftEdge(float v) {
|
||||
return ((int)floorf(OTRGetDimensionFromLeftEdge(v)));
|
||||
}
|
||||
|
||||
extern "C" float OTRGetDimensionFromRightEdge(float v) {
|
||||
return (SCREEN_WIDTH / 2 + SCREEN_HEIGHT / 2 * OTRGetAspectRatio() - (SCREEN_WIDTH - v));
|
||||
}
|
||||
|
||||
extern "C" int16_t OTRGetRectDimensionFromRightEdge(float v) {
|
||||
return ((int)ceilf(OTRGetDimensionFromRightEdge(v)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,11 @@ class GameEngine {
|
|||
void ProcessFrame(void (*run_one_game_iter)()) const;
|
||||
static void Destroy();
|
||||
static void ProcessGfxCommands(Gfx* commands);
|
||||
float OTRGetAspectRatio(void);
|
||||
float OTRGetDimensionFromLeftEdge(float v);
|
||||
float OTRGetDimensionFromRightEdge(float v);
|
||||
int16_t OTRGetRectDimensionFromLeftEdge(float v);
|
||||
int16_t OTRGetRectDimensionFromRightEdge(float v);
|
||||
};
|
||||
#else
|
||||
void GameEngine_ProcessGfxCommands(Gfx* commands);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ extern "C" {
|
|||
#include "main.h"
|
||||
#include "audio/load.h"
|
||||
#include "audio/external.h"
|
||||
#include "networking/networking.h"
|
||||
}
|
||||
|
||||
extern "C"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,84 @@
|
|||
#include "GameInfoWindow.h"
|
||||
#include "UIWidgets.h"
|
||||
#include "libultraship/src/Context.h"
|
||||
|
||||
#include <imgui.h>
|
||||
#include <libultraship/libultraship.h>
|
||||
#include "spdlog/spdlog.h"
|
||||
#include <common_structs.h>
|
||||
#include <defines.h>
|
||||
|
||||
extern "C" {
|
||||
#include "../../../src/main.h"
|
||||
#include "networking/networking.h"
|
||||
}
|
||||
|
||||
namespace GameInfo {
|
||||
GameInfoWindow::~GameInfoWindow() {
|
||||
SPDLOG_TRACE("destruct game info window");
|
||||
}
|
||||
|
||||
void GameInfoWindow::InitElement() {
|
||||
}
|
||||
|
||||
static s32 sReadyUpBool = false;
|
||||
|
||||
void GameInfoWindow::DrawElement() {
|
||||
const float framerate = ImGui::GetIO().Framerate;
|
||||
const float deltatime = ImGui::GetIO().DeltaTime;
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
|
||||
|
||||
static char username[NETWORK_USERNAME_LENGTH] = "TestUser";
|
||||
|
||||
ImGui::Text("Username:");
|
||||
ImGui::InputText("##edit", username, IM_ARRAYSIZE(username));
|
||||
|
||||
static char address[32] = "127.0.0.1:64010";
|
||||
static char addressCopy[32];
|
||||
strncpy(addressCopy, address, sizeof(addressCopy));
|
||||
addressCopy[sizeof(addressCopy) - 1] = '\0'; // Ensure null termination
|
||||
|
||||
ImGui::Text("Host:");
|
||||
ImGui::InputText("##edit3", addressCopy, IM_ARRAYSIZE(addressCopy));
|
||||
|
||||
if (ImGui::Button("Connect!")) {
|
||||
char* ip = NULL;
|
||||
uint16_t port = 0;
|
||||
|
||||
char* token = strtok(addressCopy, ":");
|
||||
ip = token;
|
||||
|
||||
token = strtok(NULL, ":");
|
||||
if (token != NULL) {
|
||||
port = (uint16_t)atoi(token);
|
||||
}
|
||||
|
||||
gNetwork.enabled = true;
|
||||
ConnectToServer(ip, port, username);
|
||||
}
|
||||
|
||||
char buttonLabel[32];
|
||||
|
||||
if (sReadyUpBool) {
|
||||
strcpy(buttonLabel, "Lets Go!");
|
||||
} else {
|
||||
strcpy(buttonLabel, "Ready Up!");
|
||||
}
|
||||
|
||||
if (ImGui::Button(buttonLabel)) {
|
||||
sReadyUpBool = !sReadyUpBool;
|
||||
networking_ready_up(sReadyUpBool);
|
||||
}
|
||||
|
||||
if (gGamestate == RACING) {
|
||||
|
||||
for (int i = 0; i < NUM_PLAYERS; i++) {
|
||||
ImGui::Text("Player %d: type: %X, char: %d, rank: %d, hasAuthority: %d", i, gPlayers[i].type, gPlayers[i].characterId, gPlayers[i].currentRank, gPlayers[i].nHasAuthority);
|
||||
}
|
||||
}
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
|
||||
void GameInfoWindow::UpdateElement() {
|
||||
}
|
||||
} // namespace GameInfo
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship/libultraship.h>
|
||||
|
||||
namespace GameInfo {
|
||||
class GameInfoWindow : public Ship::GuiWindow {
|
||||
public:
|
||||
using Ship::GuiWindow::GuiWindow;
|
||||
~GameInfoWindow();
|
||||
|
||||
private:
|
||||
void InitElement() override;
|
||||
void DrawElement() override;
|
||||
void UpdateElement() override;
|
||||
};
|
||||
} // namespace GameInfo
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
#include "ImguiUI.h"
|
||||
#include "UIWidgets.h"
|
||||
#include "ResolutionEditor.h"
|
||||
#include "GameInfoWindow.h"
|
||||
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <imgui.h>
|
||||
|
|
@ -22,6 +23,7 @@ std::shared_ptr<Ship::GuiWindow> mConsoleWindow;
|
|||
std::shared_ptr<Ship::GuiWindow> mStatsWindow;
|
||||
std::shared_ptr<Ship::GuiWindow> mInputEditorWindow;
|
||||
std::shared_ptr<Ship::GuiWindow> mGfxDebuggerWindow;
|
||||
std::shared_ptr<Ship::GuiWindow> mGameInfoWindow;
|
||||
std::shared_ptr<AdvancedResolutionSettings::AdvancedResolutionSettingsWindow> mAdvancedResolutionSettingsWindow;
|
||||
|
||||
void SetupGuiElements() {
|
||||
|
|
@ -34,6 +36,12 @@ void SetupGuiElements() {
|
|||
|
||||
mGameMenuBar = std::make_shared<GameMenuBar>("gOpenMenuBar", CVarGetInteger("gOpenMenuBar", 0));
|
||||
gui->SetMenuBar(mGameMenuBar);
|
||||
|
||||
mGameInfoWindow = gui->GetGuiWindow("GameInfo");
|
||||
if (mGameInfoWindow == nullptr) {
|
||||
SPDLOG_ERROR("Could not find game info window");
|
||||
}
|
||||
|
||||
mStatsWindow = gui->GetGuiWindow("Stats");
|
||||
if (mStatsWindow == nullptr) {
|
||||
SPDLOG_ERROR("Could not find stats window");
|
||||
|
|
@ -55,12 +63,16 @@ void SetupGuiElements() {
|
|||
SPDLOG_ERROR("Could not find input GfxDebuggerWindow");
|
||||
}
|
||||
|
||||
mGameInfoWindow = std::make_shared<GameInfo::GameInfoWindow>("gGameInfoEnabled", "Game info");
|
||||
gui->AddGuiWindow(mGameInfoWindow);
|
||||
|
||||
mAdvancedResolutionSettingsWindow = std::make_shared<AdvancedResolutionSettings::AdvancedResolutionSettingsWindow>("gAdvancedResolutionEditorEnabled", "Advanced Resolution Settings");
|
||||
gui->AddGuiWindow(mAdvancedResolutionSettingsWindow);
|
||||
}
|
||||
|
||||
void Destroy() {
|
||||
mAdvancedResolutionSettingsWindow = nullptr;
|
||||
mGameInfoWindow = nullptr;
|
||||
mConsoleWindow = nullptr;
|
||||
mStatsWindow = nullptr;
|
||||
mInputEditorWindow = nullptr;
|
||||
|
|
@ -476,6 +488,10 @@ void DrawDebugMenu() {
|
|||
|
||||
UIWidgets::Spacer(0);
|
||||
|
||||
UIWidgets::WindowButton("GameInfo", "gGameInfoEnabled", GameUI::mGameInfoWindow, {
|
||||
.tooltip = "Shows the game info window, contains player and actor information"
|
||||
});
|
||||
|
||||
UIWidgets::WindowButton("Stats", "gStatsEnabled", GameUI::mStatsWindow, {
|
||||
.tooltip = "Shows the stats window, with your FPS and frametimes, and the OS you're playing on"
|
||||
});
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include <common_structs.h>
|
||||
#include <actor_types.h>
|
||||
#include <defines.h>
|
||||
#include <macros.h>
|
||||
|
||||
#include "code_800029B0.h"
|
||||
#include "main.h"
|
||||
|
|
@ -27,6 +28,7 @@
|
|||
#include "main.h"
|
||||
#include <assets/other_textures.h>
|
||||
#include <assets/mario_raceway_data.h>
|
||||
#include <assets/luigi_raceway_data.h>
|
||||
|
||||
// Appears to be textures
|
||||
// or tluts
|
||||
|
|
@ -259,7 +261,7 @@ void actor_init(struct Actor *actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
|||
actor->flags = actor->flags | 0x4000 | 0x1000;
|
||||
actor->unk_08 = 0.35f;
|
||||
actor->boundingBoxSize = 1.925f;
|
||||
func_802ADDC8(&actor->unk30, 1.925f, actor->pos[0], actor->pos[1], actor->pos[2]);
|
||||
check_bounding_collision(&actor->unk30, 1.925f, actor->pos[0], actor->pos[1], actor->pos[2]);
|
||||
break;
|
||||
case ACTOR_HOT_AIR_BALLOON_ITEM_BOX:
|
||||
actor->flags |= 0x4000;
|
||||
|
|
@ -378,35 +380,37 @@ void func_80297760(struct Actor *arg0, Vec3f arg1) {
|
|||
arg1[0] = arg0->pos[0];
|
||||
arg1[1] = arg0->pos[1];
|
||||
arg1[2] = arg0->pos[2];
|
||||
arg1[1] = func_802ABE30(arg1[0], arg1[1], arg1[2], arg0->unk30.unk3A);
|
||||
arg1[1] = calculate_surface_height(arg1[0], arg1[1], arg1[2], arg0->unk30.meshIndexZX);
|
||||
}
|
||||
|
||||
void func_802977B0(Player *arg0) {
|
||||
arg0->boundingBoxCorners[1].unk_14 |= 2;
|
||||
arg0->boundingBoxCorners[0].unk_14 |= 2;
|
||||
arg0->boundingBoxCorners[3].unk_14 |= 2;
|
||||
arg0->boundingBoxCorners[2].unk_14 |= 2;
|
||||
arg0->tyres[FRONT_RIGHT].unk_14 |= 2;
|
||||
arg0->tyres[FRONT_LEFT].unk_14 |= 2;
|
||||
arg0->tyres[BACK_RIGHT].unk_14 |= 2;
|
||||
arg0->tyres[BACK_LEFT].unk_14 |= 2;
|
||||
}
|
||||
|
||||
void func_802977E4(Player *arg0) {
|
||||
arg0->boundingBoxCorners[1].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->boundingBoxCorners[0].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->boundingBoxCorners[3].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->boundingBoxCorners[2].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->tyres[FRONT_RIGHT].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->tyres[FRONT_LEFT].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->tyres[BACK_RIGHT].unk_14 &= ~2 & 0xFFFF;
|
||||
arg0->tyres[BACK_LEFT].unk_14 &= ~2 & 0xFFFF;
|
||||
}
|
||||
|
||||
// Invert green and red on green shell texture
|
||||
// Generate the red shell tlut by invert green the green one
|
||||
void init_red_shell_texture(void) {
|
||||
s16 *tlut = (s16 *) LOAD_ASSET(common_tlut_green_shell);
|
||||
s16 *red_shell_texture = (s16 *) &gTLUTRedShell[0];
|
||||
s16 *green_shell_texture = (s16 *) common_tlut_green_shell;
|
||||
s16 *green_shell_texture = (s16 *) tlut;
|
||||
s16 color_pixel, red_color, green_color, blue_color, alpha_color;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
color_pixel = *green_shell_texture;
|
||||
red_color = color_pixel & 0xF800;
|
||||
green_color = color_pixel & 0x7C0;
|
||||
blue_color = color_pixel & 0x3E;
|
||||
alpha_color = color_pixel & 0x1;
|
||||
color_pixel = BSWAP16(*green_shell_texture);
|
||||
red_color = BSWAP16(color_pixel & 0xF800);
|
||||
green_color = BSWAP16(color_pixel & 0x7C0);
|
||||
blue_color = BSWAP16(color_pixel & 0x3E);
|
||||
alpha_color = BSWAP16(color_pixel & 0x1);
|
||||
|
||||
*red_shell_texture = (red_color >> 5) | (green_color << 5) | blue_color | alpha_color; // Invert green to red
|
||||
green_shell_texture++;
|
||||
|
|
@ -563,7 +567,7 @@ void evaluate_collision_players_palm_trees(void) {
|
|||
|
||||
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].unk_110.unk3A) << 24) >> 24) == GRASS)) {
|
||||
if (((gPlayers[index].type & 0xC000) != 0) && (((get_surface_type(gPlayers[index].collision.meshIndexZX) << 24) >> 24) == GRASS)) {
|
||||
evaluate_collision_player_palm_trees(&gPlayers[index]);
|
||||
}
|
||||
}
|
||||
|
|
@ -845,7 +849,7 @@ void spawn_palm_trees(struct ActorSpawnData *spawnData) {
|
|||
temp_v1 = (struct PalmTree *) &gActorList[temp];
|
||||
|
||||
temp_v1->variant = temp_s0->someId;
|
||||
func_802ADDC8((Collision *) &temp_v1->unk30, 5.0f, temp_v1->pos[0], temp_v1->pos[1], temp_v1->pos[2]);
|
||||
check_bounding_collision((Collision *) &temp_v1->unk30, 5.0f, temp_v1->pos[0], temp_v1->pos[1], temp_v1->pos[2]);
|
||||
func_802976EC((Collision *) &temp_v1->unk30, temp_v1->rot);
|
||||
temp_s0++;
|
||||
}
|
||||
|
|
@ -923,9 +927,9 @@ void spawn_foliage(struct ActorSpawnData *arg0) {
|
|||
if (gGamestate == CREDITS_SEQUENCE) {
|
||||
func_802976D8(temp_s0->rot);
|
||||
} else {
|
||||
func_802ADDC8(&temp_s0->unk30, 5.0f, temp_s0->pos[0], temp_s0->pos[1], temp_s0->pos[2]);
|
||||
if (temp_s0->unk30.unk3C[2] < 0.0f) {
|
||||
temp_s0->pos[1] = func_802ABE30(temp_s0->pos[0], temp_s0->pos[1], temp_s0->pos[2], temp_s0->unk30.unk3A);
|
||||
check_bounding_collision(&temp_s0->unk30, 5.0f, temp_s0->pos[0], temp_s0->pos[1], temp_s0->pos[2]);
|
||||
if (temp_s0->unk30.surfaceDistance[2] < 0.0f) {
|
||||
temp_s0->pos[1] = calculate_surface_height(temp_s0->pos[0], temp_s0->pos[1], temp_s0->pos[2], temp_s0->unk30.meshIndexZX);
|
||||
}
|
||||
func_802976EC(&temp_s0->unk30, temp_s0->rot);
|
||||
}
|
||||
|
|
@ -953,7 +957,7 @@ void spawn_all_item_boxes(struct ActorSpawnData *spawnData) {
|
|||
startingRot[1] = random_u16();
|
||||
startingRot[2] = random_u16();
|
||||
temp_s1 = add_actor_to_empty_slot(startingPos, startingRot, startingVelocity, ACTOR_ITEM_BOX);
|
||||
temp_f0 = func_802AE1C0(startingPos[0], startingPos[1] + 10.0f, startingPos[2]);
|
||||
temp_f0 = spawn_actor_on_surface(startingPos[0], startingPos[1] + 10.0f, startingPos[2]);
|
||||
|
||||
// Should be struct ItemBox but not enough space in the stack.
|
||||
// It's either the ItemBox or the SEGMENT/OFFSET variables.
|
||||
|
|
@ -1150,7 +1154,7 @@ void spawn_course_actors(void) {
|
|||
*
|
||||
*/
|
||||
void init_actors_and_load_textures(void) {
|
||||
set_segment_base_addr(3, (void *) gNextFreeMemoryAddress);
|
||||
set_segment_base_addr_x64(3, (void *) gNextFreeMemoryAddress);
|
||||
D_802BA050 = dma_textures(gTextureGreenShell0, 0x00000257U, 0x00000400U);
|
||||
dma_textures(gTextureGreenShell1, 0x00000242U, 0x00000400U);
|
||||
dma_textures(gTextureGreenShell2, 0x00000259U, 0x00000400U);
|
||||
|
|
@ -1806,18 +1810,18 @@ void destroy_destructable_actor(struct Actor *actor) {
|
|||
Player *player;
|
||||
|
||||
switch (actor->type) {
|
||||
case ACTOR_BANANA:
|
||||
banana = (struct BananaActor *)actor;
|
||||
switch (banana->state) {
|
||||
case FIRST_BANANA_BUNCH_BANANA:
|
||||
case BANANA_BUNCH_BANANA:
|
||||
destroy_banana_in_banana_bunch(banana);
|
||||
break;
|
||||
case HELD_BANANA:
|
||||
player = &gPlayers[banana->playerId];
|
||||
player->soundEffects &= ~0x00040000;
|
||||
/* fallthrough */
|
||||
case BANANA_ON_GROUND:
|
||||
case ACTOR_BANANA:
|
||||
banana = (struct BananaActor *)actor;
|
||||
switch (banana->state) {
|
||||
case FIRST_BANANA_BUNCH_BANANA:
|
||||
case BANANA_BUNCH_BANANA:
|
||||
destroy_banana_in_banana_bunch(banana);
|
||||
break;
|
||||
case HELD_BANANA:
|
||||
player = &gPlayers[banana->playerId];
|
||||
player->soundEffects &= ~0x00040000;
|
||||
/* fallthrough */
|
||||
case BANANA_ON_GROUND:
|
||||
banana->flags = -0x8000;
|
||||
banana->unk_04 = 0x003C;
|
||||
banana->state = DESTROYED_BANANA;
|
||||
|
|
|
|||
|
|
@ -16,20 +16,20 @@
|
|||
#include "effects.h"
|
||||
#include "sounds.h"
|
||||
|
||||
void copy_collision(Collision *arg0, Collision *arg1) {
|
||||
arg1->unk30 = arg0->unk30;
|
||||
arg1->unk32 = arg0->unk32;
|
||||
arg1->unk34 = arg0->unk34;
|
||||
arg1->unk36 = arg0->unk36;
|
||||
arg1->unk38 = arg0->unk38;
|
||||
arg1->unk3A = arg0->unk3A;
|
||||
arg1->unk3C[0] = arg0->unk3C[0];
|
||||
arg1->unk3C[1] = arg0->unk3C[1];
|
||||
arg1->unk3C[2] = arg0->unk3C[2];
|
||||
void copy_collision(Collision *src, Collision *dest) {
|
||||
dest->unk30 = src->unk30;
|
||||
dest->unk32 = src->unk32;
|
||||
dest->unk34 = src->unk34;
|
||||
dest->meshIndexYX = src->meshIndexYX;
|
||||
dest->meshIndexZY = src->meshIndexZY;
|
||||
dest->meshIndexZX = src->meshIndexZX;
|
||||
dest->surfaceDistance[0] = src->surfaceDistance[0];
|
||||
dest->surfaceDistance[1] = src->surfaceDistance[1];
|
||||
dest->surfaceDistance[2] = src->surfaceDistance[2];
|
||||
|
||||
vec3f_copy_return(arg1->unk48, arg0->unk48);
|
||||
vec3f_copy_return(arg1->unk54, arg0->unk54);
|
||||
vec3f_copy_return(arg1->orientationVector, arg0->orientationVector);
|
||||
vec3f_copy_return(dest->unk48, src->unk48);
|
||||
vec3f_copy_return(dest->unk54, src->unk54);
|
||||
vec3f_copy_return(dest->orientationVector, src->orientationVector);
|
||||
}
|
||||
|
||||
void triple_shell_actor_collide_with_player(struct ShellActor *shell, s32 shellType) {
|
||||
|
|
@ -572,7 +572,7 @@ s32 init_triple_shell(TripleShellParent *parent, Player *player, s16 shellType,
|
|||
startingPos[0] = player->pos[0];
|
||||
startingPos[1] = player->pos[1];
|
||||
startingPos[2] = player->pos[2];
|
||||
func_802AD950(&shell->unk30, shell->boundingBoxSize + 1.0f, shell->pos[0], shell->pos[1], shell->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
actor_terrain_collision(&shell->unk30, shell->boundingBoxSize + 1.0f, shell->pos[0], shell->pos[1], shell->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
func_802B4E30((struct Actor *)shell);
|
||||
shell->flags = 0x9000;
|
||||
switch (shellType) {
|
||||
|
|
@ -622,7 +622,7 @@ s32 use_green_shell_item(Player *player) {
|
|||
startingPos[0] = player->pos[0];
|
||||
startingPos[1] = player->pos[1];
|
||||
startingPos[2] = player->pos[2];
|
||||
func_802AD950(&shell->unk30, shell->boundingBoxSize + 1.0f, shell->pos[0], shell->pos[1], shell->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
actor_terrain_collision(&shell->unk30, shell->boundingBoxSize + 1.0f, shell->pos[0], shell->pos[1], shell->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
func_802B4E30((struct Actor *)shell);
|
||||
shell->state = HELD_SHELL;
|
||||
shell->rotVelocity = 0;
|
||||
|
|
@ -661,7 +661,7 @@ s32 use_red_shell_item(Player *player) {
|
|||
startingPos[0] = player->pos[0];
|
||||
startingPos[1] = player->pos[1];
|
||||
startingPos[2] = player->pos[2];
|
||||
func_802AD950(&shell->unk30, shell->boundingBoxSize + 1.0f, shell->pos[0], shell->pos[1], shell->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
actor_terrain_collision(&shell->unk30, shell->boundingBoxSize + 1.0f, shell->pos[0], shell->pos[1], shell->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
func_802B4E30((struct Actor *)shell);
|
||||
shell->state = HELD_SHELL;
|
||||
shell->rotVelocity = 0;
|
||||
|
|
@ -708,7 +708,7 @@ void func_802B2914(struct BananaBunchParent *banana_bunch, Player *player, s16 b
|
|||
startingPos[0] = player->pos[0];
|
||||
startingPos[1] = player->pos[1];
|
||||
startingPos[2] = player->pos[2];
|
||||
func_802AD950(&newBanana->unk30, newBanana->boundingBoxSize + 1.0f, newBanana->pos[0], newBanana->pos[1], newBanana->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
actor_terrain_collision(&newBanana->unk30, newBanana->boundingBoxSize + 1.0f, newBanana->pos[0], newBanana->pos[1], newBanana->pos[2], startingPos[0], startingPos[1], startingPos[2]);
|
||||
func_802B4E30((struct Actor*)newBanana);
|
||||
newBanana->flags = 0x9000;
|
||||
newBanana->playerId = player - gPlayerOne;
|
||||
|
|
@ -960,19 +960,19 @@ void check_player_use_item(void) {
|
|||
#include "actors/blue_and_red_shells/update.inc.c"
|
||||
|
||||
void func_802B4E30(struct Actor *arg0) {
|
||||
if ((arg0->unk30.unk3C[2] < 0.0f) && (arg0->unk30.unk34 == 1)) {
|
||||
arg0->pos[0] -= (arg0->unk30.orientationVector[0] * arg0->unk30.unk3C[2]);
|
||||
arg0->pos[1] -= (arg0->unk30.orientationVector[1] * arg0->unk30.unk3C[2]);
|
||||
arg0->pos[2] -= (arg0->unk30.orientationVector[2] * arg0->unk30.unk3C[2]);
|
||||
if ((arg0->unk30.surfaceDistance[2] < 0.0f) && (arg0->unk30.unk34 == 1)) {
|
||||
arg0->pos[0] -= (arg0->unk30.orientationVector[0] * arg0->unk30.surfaceDistance[2]);
|
||||
arg0->pos[1] -= (arg0->unk30.orientationVector[1] * arg0->unk30.surfaceDistance[2]);
|
||||
arg0->pos[2] -= (arg0->unk30.orientationVector[2] * arg0->unk30.surfaceDistance[2]);
|
||||
}
|
||||
if ((arg0->unk30.unk3C[0] < 0.0f) && (arg0->unk30.unk30 == 1)) {
|
||||
arg0->pos[0] -= (arg0->unk30.unk48[0] * arg0->unk30.unk3C[0]);
|
||||
arg0->pos[1] -= (arg0->unk30.unk48[1] * arg0->unk30.unk3C[0]);
|
||||
arg0->pos[2] -= (arg0->unk30.unk48[2] * arg0->unk30.unk3C[0]);
|
||||
if ((arg0->unk30.surfaceDistance[0] < 0.0f) && (arg0->unk30.unk30 == 1)) {
|
||||
arg0->pos[0] -= (arg0->unk30.unk48[0] * arg0->unk30.surfaceDistance[0]);
|
||||
arg0->pos[1] -= (arg0->unk30.unk48[1] * arg0->unk30.surfaceDistance[0]);
|
||||
arg0->pos[2] -= (arg0->unk30.unk48[2] * arg0->unk30.surfaceDistance[0]);
|
||||
}
|
||||
if ((arg0->unk30.unk3C[1] < 0.0f) && (arg0->unk30.unk32 == 1)) {
|
||||
arg0->pos[0] -= (arg0->unk30.unk54[0] * arg0->unk30.unk3C[1]);
|
||||
arg0->pos[1] -= (arg0->unk30.unk54[1] * arg0->unk30.unk3C[1]);
|
||||
arg0->pos[2] -= (arg0->unk30.unk54[2] * arg0->unk30.unk3C[1]);
|
||||
if ((arg0->unk30.surfaceDistance[1] < 0.0f) && (arg0->unk30.unk32 == 1)) {
|
||||
arg0->pos[0] -= (arg0->unk30.unk54[0] * arg0->unk30.surfaceDistance[1]);
|
||||
arg0->pos[1] -= (arg0->unk30.unk54[1] * arg0->unk30.surfaceDistance[1]);
|
||||
arg0->pos[2] -= (arg0->unk30.unk54[2] * arg0->unk30.surfaceDistance[1]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -9,31 +9,31 @@
|
|||
void nullify_displaylist(uintptr_t);
|
||||
void func_802AAAAC(Collision*);
|
||||
f32 func_802AAB4C(Player*);
|
||||
s32 func_802AAE4C(Collision*, f32, f32, f32, f32, u16);
|
||||
s32 func_802AB288(Collision*, f32, f32, f32, f32, u16);
|
||||
s32 func_802AB6C4(Collision*, f32, f32, f32, f32, u16);
|
||||
s32 check_collision_zx(Collision*, f32, f32, f32, f32, u16);
|
||||
s32 check_collision_yx(Collision*, f32, f32, f32, f32, u16);
|
||||
s32 check_collision_zy(Collision*, f32, f32, f32, f32, u16);
|
||||
s8 get_surface_type(u16);
|
||||
s16 func_802ABD40(u16);
|
||||
s16 get_section_id(u16);
|
||||
s16 func_802ABD7C(u16);
|
||||
s16 func_802ABDB8(u16);
|
||||
s16 func_802ABDF4(u16);
|
||||
f32 func_802ABE30(f32, f32, f32, u16);
|
||||
f32 calculate_surface_height(f32, f32, f32, u16);
|
||||
f32 func_802ABEAC(Collision*, Vec3f);
|
||||
void shell_collision(Collision *, Vec3f);
|
||||
void process_shell_collision(Vec3f, f32, Vec3f, f32);
|
||||
u16 process_collision(Player*, KartBoundingBoxCorner*, f32, f32, f32);
|
||||
void func_802AC114(Vec3f, f32, Vec3f, f32);
|
||||
s32 func_802AC22C(KartBoundingBoxCorner*);
|
||||
u16 func_802AD950(Collision*, f32, f32, f32, f32, f32, f32, f32);
|
||||
u16 func_802ADDC8(Collision*, f32, f32, f32, f32);
|
||||
f32 func_802AE1C0(f32, f32, f32);
|
||||
u16 process_collision(Player*, KartTyre*, f32, f32, f32);
|
||||
void adjust_pos_orthogonally(Vec3f, f32, Vec3f, f32);
|
||||
s32 detect_tyre_collision(KartTyre*);
|
||||
u16 actor_terrain_collision(Collision*, f32, f32, f32, f32, f32, f32, f32);
|
||||
u16 check_bounding_collision(Collision*, f32, f32, f32, f32);
|
||||
f32 spawn_actor_on_surface(f32, f32, f32);
|
||||
void set_vtx_buffer(uintptr_t, u32, u32);
|
||||
s32 is_line_intersecting_rectangle(s16, s16, s16, s16, s16, s16, s16, s16);
|
||||
s32 is_triangle_intersecting_bounding_box(s16, s16, s16, s16, u16);
|
||||
void func_802AF314(void);
|
||||
void set_vertex_data_with_defaults(Gfx*);
|
||||
void set_vertex_data_with_default_section_id(Gfx*, s8);
|
||||
void find_and_set_vertex_data(Gfx*, s8, u16);
|
||||
void generate_collision_grid(void);
|
||||
void generate_collision_mesh_with_defaults(Gfx*);
|
||||
void generate_collision_mesh_with_default_section_id(Gfx*, s8);
|
||||
void generate_collision_mesh(Gfx*, s8, u16);
|
||||
void find_and_set_tile_size(uintptr_t, s32, s32);
|
||||
void set_vertex_colours(uintptr_t, u32, s32, s8, u8, u8, u8);
|
||||
void find_vtx_and_set_colours(uintptr_t, s8, u8, u8, u8);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,180 @@
|
|||
// #include <libultraship.h>
|
||||
// #include "framebuffer_effects.h"
|
||||
// #include "mk64.h"
|
||||
// #include <assets/common_data.h>
|
||||
|
||||
|
||||
// int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height,
|
||||
// uint8_t resize);
|
||||
|
||||
// s32 gPauseFrameBuffer = -1;
|
||||
// s32 gBlurFrameBuffer = -1;
|
||||
// // A framebuffer that should only be used for drawing in the same frame that it is copied too
|
||||
// // i.e. the VisMono and VisFbuf effects
|
||||
// s32 gReusableFrameBuffer = -1;
|
||||
|
||||
// // N64 resolution sized buffer (320x240), used by picto box and deku bubble
|
||||
// s32 gN64ResFrameBuffer = -1;
|
||||
|
||||
// void FB_CreateFramebuffers(void) {
|
||||
// if (gPauseFrameBuffer == -1) {
|
||||
// gPauseFrameBuffer = gfx_create_framebuffer(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, true);
|
||||
// }
|
||||
|
||||
// if (gBlurFrameBuffer == -1) {
|
||||
// gBlurFrameBuffer = gfx_create_framebuffer(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, true);
|
||||
// }
|
||||
|
||||
// if (gReusableFrameBuffer == -1) {
|
||||
// gReusableFrameBuffer = gfx_create_framebuffer(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, true);
|
||||
// }
|
||||
|
||||
// if (gN64ResFrameBuffer == -1) {
|
||||
// gN64ResFrameBuffer = gfx_create_framebuffer(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, false);
|
||||
// }
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Copies the current texture data from the source frame buffer to the destination frame buffer
|
||||
// * Setting oncePerFrame ensures that the copy will only happen once every game frame. This
|
||||
// * is important for effects that could be affected by increased frame interpolation (like motion blur).
|
||||
// * A pointer to a boolean is passed to the render for the render to set once the copy has been performed.
|
||||
// * This function uses opcodes from f3dex2 but may be called when s2dex is loaded, such as during shrink window. Make
|
||||
// * sure f3dex2 is loaded before this function is called.
|
||||
// */
|
||||
|
||||
// void FB_CopyToFramebuffer(Gfx** gfxp, s32 fb_src, s32 fb_dest, u8 oncePerFrame, u8* hasCopied) {
|
||||
// Gfx* gfx = *gfxp;
|
||||
|
||||
// gSPMatrix(gfx++, &D_0D008E98, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
// gDPSetOtherMode(gfx++,
|
||||
// G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE |
|
||||
// G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
|
||||
// G_AC_NONE | G_ZS_PRIM | G_RM_OPA_SURF | G_RM_OPA_SURF2);
|
||||
|
||||
// gSPClearGeometryMode(gfx++, G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
||||
// gSPSetGeometryMode(gfx++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
|
||||
|
||||
// gDPSetBlendColor(gfx++, 255, 255, 255, 8);
|
||||
// gDPSetPrimDepth(gfx++, 0xFFFF, 0xFFFF);
|
||||
|
||||
// gDPSetEnvColor(gfx++, 255, 255, 255, 255);
|
||||
// gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0,
|
||||
// ENVIRONMENT);
|
||||
|
||||
// gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
|
||||
// gDPCopyFB(gfx++, fb_dest, fb_src, oncePerFrame, hasCopied);
|
||||
|
||||
// *gfxp = gfx;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Copies a 4:3 slice of the current framebuffer scaled down to 320x240 to a CPU buffer address.
|
||||
// * The buffer output will be in RGBA16 format.
|
||||
// * Specify the byteswap flag to force the buffer data to be written as BigEndian, which is
|
||||
// * required if the buffer is being used as a texture in F3D.
|
||||
// */
|
||||
// void FB_WriteFramebufferSliceToCPU(Gfx** gfxp, void* buffer, u8 byteSwap) {
|
||||
// Gfx* gfx = *gfxp;
|
||||
|
||||
// FB_CopyToFramebuffer(&gfx, 0, gReusableFrameBuffer, false, NULL);
|
||||
|
||||
// // Set the N64 resolution framebuffer as the draw target (320x240)
|
||||
// gsSPSetFB(gfx++, gN64ResFrameBuffer);
|
||||
// // Reset scissor for new framebuffer
|
||||
// gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
|
||||
// int16_t s0 = 0, t0 = 0;
|
||||
// int16_t s1 = OTRGetGameRenderWidth();
|
||||
// int16_t t1 = OTRGetGameRenderHeight();
|
||||
|
||||
// float aspectRatio = OTRGetAspectRatio();
|
||||
// float fourByThree = 4.0f / 3.0f;
|
||||
|
||||
// // Adjust the texture coordinates so that only a 4:3 region from the center is drawn
|
||||
// // to the N64 resolution buffer. Currently ratios smaller than 4:3 will just stretch to fill.
|
||||
// if (aspectRatio > fourByThree) {
|
||||
// int16_t adjustedWidth = OTRGetGameRenderWidth() / (aspectRatio / fourByThree);
|
||||
// s0 = (OTRGetGameRenderWidth() - adjustedWidth) / 2;
|
||||
// s1 -= s0;
|
||||
// }
|
||||
|
||||
// gDPSetTextureImageFB(gfx++, 0, 0, 0, gReusableFrameBuffer);
|
||||
// gDPImageRectangle(gfx++, 0 << 2, 0 << 2, s0, t0, SCREEN_WIDTH << 2, SCREEN_HEIGHT << 2, s1, t1, G_TX_RENDERTILE,
|
||||
// OTRGetGameRenderWidth(), OTRGetGameRenderHeight());
|
||||
|
||||
// // Read the final N64 framebuffer back as rgba16 into the CPU-side buffer
|
||||
// gDPReadFB(gfx++, gN64ResFrameBuffer, buffer, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, byteSwap);
|
||||
|
||||
// gsSPResetFB(gfx++);
|
||||
// // Reset scissor for original framebuffer
|
||||
// gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
|
||||
// *gfxp = gfx;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Draws the texture data from the specified frame buffer as a full screen image
|
||||
// */
|
||||
// void FB_DrawFromFramebuffer(Gfx** gfxp, s32 fb, u8 alpha) {
|
||||
// Gfx* gfx = *gfxp;
|
||||
|
||||
// gSPMatrix(gfx++, &D_0D008E98, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
// gDPSetEnvColor(gfx++, 255, 255, 255, alpha);
|
||||
|
||||
// gDPSetOtherMode(gfx++,
|
||||
// G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP |
|
||||
// G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
|
||||
// G_AC_NONE | G_ZS_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2);
|
||||
|
||||
// gSPClearGeometryMode(gfx++, G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
||||
// gSPSetGeometryMode(gfx++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
|
||||
|
||||
// gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0,
|
||||
// ENVIRONMENT);
|
||||
|
||||
// gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
|
||||
// gDPSetTextureImageFB(gfx++, 0, 0, 0, fb);
|
||||
// gDPImageRectangle(gfx++, OTRGetRectDimensionFromLeftEdge(0) << 2, 0 << 2, 0, 0,
|
||||
// OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH) << 2, SCREEN_HEIGHT << 2, OTRGetGameRenderWidth(),
|
||||
// OTRGetGameRenderHeight(), G_TX_RENDERTILE, OTRGetGameRenderWidth(), OTRGetGameRenderHeight());
|
||||
|
||||
// *gfxp = gfx;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Similar to FB_DrawFromFramebuffer, but scales the image relative to the center of the screen.
|
||||
// * This function uses opcodes from f3dex2 but may be called when s2dex is loaded, such as during shrink window. Make
|
||||
// * sure f3dex2 is loaded before this function is called.
|
||||
// */
|
||||
// void FB_DrawFromFramebufferScaled(Gfx** gfxp, s32 fb, u8 alpha, float scaleX, float scaleY) {
|
||||
// Gfx* gfx = *gfxp;
|
||||
|
||||
// gDPSetEnvColor(gfx++, 255, 255, 255, alpha);
|
||||
|
||||
// gDPSetOtherMode(gfx++,
|
||||
// G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP |
|
||||
// G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
|
||||
// G_AC_NONE | G_ZS_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2);
|
||||
|
||||
// gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0,
|
||||
// ENVIRONMENT);
|
||||
|
||||
// gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
|
||||
// gDPSetTextureImageFB(gfx++, 0, 0, 0, fb);
|
||||
|
||||
// float x0 = SCREEN_WIDTH * 0.5f * scaleX;
|
||||
// float y0 = SCREEN_HEIGHT * 0.5f * scaleY;
|
||||
|
||||
// gDPImageRectangle(gfx++, OTRGetRectDimensionFromLeftEdge(x0) << 2, (int)(y0) << 2, 0, 0,
|
||||
// OTRGetRectDimensionFromRightEdge((float)(SCREEN_WIDTH - x0)) << 2,
|
||||
// (int)((float)(SCREEN_HEIGHT - y0)) << 2, OTRGetGameRenderWidth(), OTRGetGameRenderHeight(),
|
||||
// G_TX_RENDERTILE, OTRGetGameRenderWidth(), OTRGetGameRenderHeight());
|
||||
|
||||
// *gfxp = gfx;
|
||||
// }
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
// #include <libultraship.h>
|
||||
|
||||
// void FB_DrawFromFramebuffer(Gfx** gfxp, s32 fb, u8 alpha);
|
||||
// void FB_DrawFromFramebufferScaled(Gfx** gfxp, s32 fb, u8 alpha, float scaleX, float scaleY);
|
||||
|
|
@ -1197,16 +1197,16 @@ void func_802B8614(Player *arg0) {
|
|||
f64 temp_f4;
|
||||
f64 temp_f6;
|
||||
|
||||
temp_f6 = (f64) arg0->boundingBoxCorners[1].cornerPos[0];
|
||||
temp_f6 = (f64) arg0->tyres[FRONT_RIGHT].pos[0];
|
||||
sp78 = temp_f6;
|
||||
sp70 = (f64) arg0->boundingBoxCorners[1].cornerGroundY;
|
||||
sp68 = (f64) arg0->boundingBoxCorners[1].cornerPos[2];
|
||||
temp_f30 = (f64) arg0->boundingBoxCorners[0].cornerPos[0];
|
||||
sp58 = (f64) arg0->boundingBoxCorners[0].cornerGroundY;
|
||||
sp50 = (f64) arg0->boundingBoxCorners[0].cornerPos[2];
|
||||
sp48 = (f64) arg0->boundingBoxCorners[3].cornerPos[0];
|
||||
sp40 = (f64) arg0->boundingBoxCorners[3].cornerGroundY;
|
||||
temp_f4 = (f64) arg0->boundingBoxCorners[3].cornerPos[2];
|
||||
sp70 = (f64) arg0->tyres[FRONT_RIGHT].baseHeight;
|
||||
sp68 = (f64) arg0->tyres[FRONT_RIGHT].pos[2];
|
||||
temp_f30 = (f64) arg0->tyres[FRONT_LEFT].pos[0];
|
||||
sp58 = (f64) arg0->tyres[FRONT_LEFT].baseHeight;
|
||||
sp50 = (f64) arg0->tyres[FRONT_LEFT].pos[2];
|
||||
sp48 = (f64) arg0->tyres[BACK_RIGHT].pos[0];
|
||||
sp40 = (f64) arg0->tyres[BACK_RIGHT].baseHeight;
|
||||
temp_f4 = (f64) arg0->tyres[BACK_RIGHT].pos[2];
|
||||
temp_f2 = sp58 - sp70;
|
||||
sp38 = temp_f4;
|
||||
temp_f12 = temp_f4 - sp50;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@
|
|||
#include <assets/mario_raceway_displaylists.h>
|
||||
#include <assets/mario_raceway_vertices.h>
|
||||
#include <assets/mario_raceway_data.h>
|
||||
|
||||
#include <assets/luigi_raceway_displaylists.h>
|
||||
#include <assets/luigi_raceway_vertices.h>
|
||||
#include <assets/luigi_raceway_data.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <course_offsets.h>
|
||||
|
||||
|
|
@ -80,6 +85,11 @@ uintptr_t set_segment_base_addr(s32 segment, void *addr) {
|
|||
return gSegmentTable[segment];
|
||||
}
|
||||
|
||||
uintptr_t set_segment_base_addr_x64(s32 segment, void *addr) {
|
||||
gSegmentTable[segment] = (uintptr_t) addr;
|
||||
return gSegmentTable[segment];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the physical memory location of a segment.
|
||||
* @param permits segment numbers from 0x0 to 0xF.
|
||||
|
|
@ -104,13 +114,13 @@ void *segment_offset_to_virtual(uint32_t segment, uint32_t offset) {
|
|||
}
|
||||
|
||||
void *segment_vtx_to_virtual(size_t offset) {
|
||||
printf("seg_vtx_to_virt: 0x%llX to 0x%llX\n", offset, (gSegmentTable[0x04] + offset));
|
||||
//printf("seg_vtx_to_virt: 0x%llX to 0x%llX\n", offset, (gSegmentTable[0x04] + offset));
|
||||
|
||||
return (void *) (gSegmentTable[0x04] + (offset));
|
||||
}
|
||||
|
||||
void *segmented_texture_to_virtual(size_t offset) {
|
||||
printf("seg_texture_to_virt: 0x%llX to 0x%llX\n", offset, (gSegmentTable[0x05] + offset));
|
||||
//printf("seg_texture_to_virt: 0x%llX to 0x%llX\n", offset, (gSegmentTable[0x05] + offset));
|
||||
|
||||
return (void *) (gSegmentTable[0x05] + (offset));
|
||||
}
|
||||
|
|
@ -123,7 +133,7 @@ void *segmented_uintptr_t_to_virtual(uintptr_t addr) {
|
|||
uint32_t numCommands = offset / 8;
|
||||
offset = numCommands * sizeof(Gfx);
|
||||
|
||||
printf("seg_uintptr_t_to_virt: 0x%llX to 0x%llX\n", newAddr, (gSegmentTable[segment] + offset));
|
||||
//printf("seg_uintptr_t_to_virt: 0x%llX to 0x%llX\n", newAddr, (gSegmentTable[segment] + offset));
|
||||
|
||||
return (void *) ((gSegmentTable[segment] + offset));
|
||||
}
|
||||
|
|
@ -135,7 +145,7 @@ void *segmented_gfx_to_virtual(const void *addr) {
|
|||
uint32_t numCommands = offset / 8;
|
||||
offset = numCommands * sizeof(Gfx);
|
||||
|
||||
printf("seg_gfx_to_virt: 0x%llX to 0x%llX\n", addr, (gSegmentTable[segment] + offset));
|
||||
//printf("seg_gfx_to_virt: 0x%llX to 0x%llX\n", addr, (gSegmentTable[segment] + offset));
|
||||
|
||||
return (void *) ((gSegmentTable[segment] + offset));
|
||||
}
|
||||
|
|
@ -466,13 +476,13 @@ UNUSED u8 *func_802A841C(u8* arg0, s32 arg1, s32 arg2) {
|
|||
return temp_v0;
|
||||
}
|
||||
|
||||
u8 *dma_textures(u8 texture[], size_t arg1, size_t arg2) {
|
||||
u8 *dma_textures(const char *texture, size_t arg1, size_t arg2) {
|
||||
u8 *temp_v0;
|
||||
void *temp_a0;
|
||||
|
||||
u8* tex = (u8 *) LOAD_ASSET(texture);
|
||||
|
||||
temp_v0 = (u8 *) gNextFreeMemoryAddress;
|
||||
temp_v0 = (u8 *) allocate_memory(arg2); // gNextFreeMemoryAddress;
|
||||
temp_a0 = temp_v0 + arg2;
|
||||
arg1 = ALIGN16(arg1);
|
||||
arg2 = ALIGN16(arg2);
|
||||
|
|
@ -481,7 +491,7 @@ u8 *dma_textures(u8 texture[], size_t arg1, size_t arg2) {
|
|||
// osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, (int) 1);
|
||||
// mio0decode((u8 *) temp_a0, temp_v0);
|
||||
memcpy(temp_v0, tex, arg2);
|
||||
gNextFreeMemoryAddress += arg2;
|
||||
//gNextFreeMemoryAddress += arg2;
|
||||
return temp_v0;
|
||||
}
|
||||
|
||||
|
|
@ -1416,20 +1426,126 @@ Gfx *testaaa;
|
|||
* @brief Loads & DMAs course data. Vtx, textures, displaylists, etc.
|
||||
* @param courseId
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
char* data;
|
||||
char* vtx;
|
||||
size_t vtxSize;
|
||||
course_texture* textures;
|
||||
char* displaylists;
|
||||
size_t dlSize;
|
||||
} NewCourseTable;
|
||||
|
||||
NewCourseTable gNewCourseTable[] = {
|
||||
{
|
||||
.data = d_course_mario_raceway_dl_0,
|
||||
.vtx = d_course_mario_raceway_vertex,
|
||||
.vtxSize = 5757,
|
||||
.textures = mario_raceway_textures,
|
||||
.displaylists = d_course_mario_raceway_packed_dls,
|
||||
.dlSize = 3367
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = NULL,
|
||||
.vtx = NULL,
|
||||
.vtxSize = 0,
|
||||
.textures = NULL,
|
||||
.displaylists = NULL,
|
||||
.dlSize = 0
|
||||
}, {
|
||||
.data = d_course_luigi_raceway_dl_0,
|
||||
.vtx = d_course_luigi_raceway_vertex,
|
||||
.vtxSize = 5936,
|
||||
.textures = luigi_raceway_textures,
|
||||
.displaylists = d_course_luigi_raceway_packed_dls,
|
||||
.dlSize = 6377
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** Load Lakitu Textures **/
|
||||
u8 *load_lakitu_textures_x64(const char** textureList, size_t length) {
|
||||
// Calculate lakitu texture size to allocate
|
||||
size_t size = 0;
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
size += ResourceGetTexSizeByName(textureList[i]);
|
||||
}
|
||||
|
||||
u8 *textures = (u8 *) gNextFreeMemoryAddress;
|
||||
gNextFreeMemoryAddress += size;
|
||||
size_t offset = 0;
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
u8 *tex = (u8 *) LOAD_ASSET(textureList[i]);
|
||||
size_t texSize = ResourceGetTexSizeByName(textureList[i]);
|
||||
memcpy(&textures[offset], tex, texSize);
|
||||
offset += texSize;
|
||||
}
|
||||
return textures;
|
||||
}
|
||||
|
||||
void load_luigi_raceway(void);
|
||||
void load_course(s32 courseId) {
|
||||
printf("Loading Course Data\n");
|
||||
|
||||
testaaa = (Gfx *) LOAD_ASSET(d_course_mario_raceway_dl_0);
|
||||
char* data = gNewCourseTable[courseId].data;
|
||||
char* vtxData = gNewCourseTable[courseId].vtx;
|
||||
size_t vtxSize = gNewCourseTable[courseId].vtxSize;
|
||||
course_texture *textures = gNewCourseTable[courseId].textures;
|
||||
char* displaylists = gNewCourseTable[courseId].displaylists;
|
||||
size_t dlSize = gNewCourseTable[courseId].dlSize;
|
||||
|
||||
testaaa = (Gfx *) LOAD_ASSET(data);
|
||||
|
||||
// Convert course vtx to vtx
|
||||
CourseVtx *cvtx = (CourseVtx *) LOAD_ASSET(d_course_mario_raceway_vertex);
|
||||
Vtx *vtx = (Vtx *) allocate_memory(sizeof(Vtx) * 5757);
|
||||
CourseVtx *cvtx = (CourseVtx *) LOAD_ASSET(vtxData);
|
||||
Vtx *vtx = (Vtx *) allocate_memory(sizeof(Vtx) * vtxSize);
|
||||
gSegmentTable[4] = &vtx[0];
|
||||
func_802A86A8(cvtx, vtx, 5757);
|
||||
vtxSegEnd = &vtx[5757];
|
||||
func_802A86A8(cvtx, vtx, vtxSize);
|
||||
vtxSegEnd = &vtx[vtxSize];
|
||||
|
||||
// Load and allocate memory for course textures
|
||||
course_texture *asset = mario_raceway_textures;
|
||||
course_texture *asset = textures;
|
||||
u8 *freeMemory = NULL;
|
||||
u8 *texture = NULL;
|
||||
size_t size = 0;
|
||||
|
|
@ -1440,7 +1556,7 @@ void load_course(s32 courseId) {
|
|||
|
||||
texture = (u8 *) LOAD_ASSET(asset->addr);
|
||||
if (texture) {
|
||||
if (asset == &mario_raceway_textures[0]) {
|
||||
if (asset == &textures[0]) {
|
||||
gSegmentTable[5] = &freeMemory[0];
|
||||
}
|
||||
memcpy(freeMemory, texture, size);
|
||||
|
|
@ -1453,11 +1569,11 @@ void load_course(s32 courseId) {
|
|||
texSegEnd = &((u8 *)gSegmentTable[5])[texSegSize];
|
||||
|
||||
// Extract packed DLs
|
||||
u8 *packed = (u8 *) LOAD_ASSET(d_course_mario_raceway_packed_dls);
|
||||
Gfx *gfx = (Gfx *) allocate_memory(sizeof(Gfx) * 3367); // Size of unpacked DLs
|
||||
u8 *packed = (u8 *) LOAD_ASSET(displaylists);
|
||||
Gfx *gfx = (Gfx *) allocate_memory(sizeof(Gfx) * dlSize); // Size of unpacked DLs
|
||||
gSegmentTable[7] = &gfx[0];
|
||||
displaylist_unpack(gfx, packed, 0);
|
||||
dlSegEnd = &gfx[3367];
|
||||
dlSegEnd = &gfx[dlSize];
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ struct AllocOnlyPool {
|
|||
|
||||
extern f32 vtxStretchY;
|
||||
|
||||
u8 *load_lakitu_textures_x64(const char** textureList, size_t length);
|
||||
void *get_next_available_memory_addr(uintptr_t);
|
||||
uintptr_t set_segment_base_addr(s32, void*);
|
||||
void *get_segment_base_addr(s32);
|
||||
|
|
@ -69,7 +70,7 @@ void func_802A81EC(void);
|
|||
struct AllocOnlyPool *alloc_only_pool_init(uintptr_t, uintptr_t);
|
||||
uintptr_t func_802A82AC(s32);
|
||||
uintptr_t func_802A8348(s32, s32, s32);
|
||||
u8 *dma_textures(u8*, size_t, size_t);
|
||||
u8 *dma_textures(const char*, size_t, size_t);
|
||||
uintptr_t MIO0_0F(u8*, uintptr_t, uintptr_t);
|
||||
void func_802A8844(void);
|
||||
void unpack_lights(Gfx*, u8*, s8);
|
||||
|
|
|
|||
|
|
@ -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 - ((0.01666666f * temp_f14) / (temp_f14 + temp_f16));
|
||||
return gCourseTimer - ((COURSE_TIMER_ITER * temp_f14) / (temp_f14 + temp_f16));
|
||||
}
|
||||
|
||||
void func_8028EEF0(s32 i) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
#include "courses/all_course_offsets.h"
|
||||
#include <assets/mario_raceway_data.h>
|
||||
#include <assets/mario_raceway_displaylists.h>
|
||||
#include <assets/luigi_raceway_data.h>
|
||||
#include <assets/luigi_raceway_displaylists.h>
|
||||
|
||||
s16 D_802B87B0 = 995;
|
||||
s16 D_802B87B4 = 1000;
|
||||
|
|
@ -35,13 +37,13 @@ s16 D_802B87D4 = 0;
|
|||
s16 currentScreenSection = 0;
|
||||
|
||||
s32 func_80290C20(Camera *camera) {
|
||||
if (camera->unk_54.unk34 == 0) {
|
||||
if (camera->collision.unk34 == 0) {
|
||||
return 1;
|
||||
}
|
||||
if ((camera->unk_54.unk30 == 1) && (camera->unk_54.unk3C[0] < 3.0f)) {
|
||||
if ((camera->collision.unk30 == 1) && (camera->collision.surfaceDistance[0] < 3.0f)) {
|
||||
return 1;
|
||||
}
|
||||
if ((camera->unk_54.unk32 == 1) && (camera->unk_54.unk3C[1] < 3.0f)) {
|
||||
if ((camera->collision.unk32 == 1) && (camera->collision.surfaceDistance[1] < 3.0f)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -60,7 +62,7 @@ void parse_course_displaylists(TrackSectionsI *addr) {
|
|||
section->sectionId = addr->sectionId;
|
||||
section->surfaceType = addr->surfaceType;
|
||||
|
||||
printf("SECTION ADDR: 0x%X\n", section->addr);
|
||||
//printf("SECTION ADDR: 0x%X\n", section->addr);
|
||||
section++;
|
||||
addr++;
|
||||
}
|
||||
|
|
@ -85,18 +87,18 @@ void parse_course_displaylists(TrackSectionsI *addr) {
|
|||
} else {
|
||||
D_8015F5A4 = 0;
|
||||
}
|
||||
find_and_set_vertex_data(section->addr, section->surfaceType, section->sectionId);
|
||||
generate_collision_mesh(section->addr, section->surfaceType, section->sectionId);
|
||||
section++;
|
||||
}
|
||||
}
|
||||
|
||||
extern u32 isFlycam;
|
||||
|
||||
void load_surface_map(const char* addr[], struct UnkStruct_800DC5EC *arg1) {
|
||||
void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC *arg1) {
|
||||
Player *player = arg1->player;
|
||||
Camera *camera = arg1->camera;
|
||||
s16 var_a3;
|
||||
s16 temp_v1;
|
||||
s16 index;
|
||||
s16 sp1E;
|
||||
s16 temp_v0_3;
|
||||
u16 rot;
|
||||
|
|
@ -133,72 +135,71 @@ void load_surface_map(const char* addr[], struct UnkStruct_800DC5EC *arg1) {
|
|||
arg1->playerDirection = var_a3;
|
||||
|
||||
if (D_80152300[camera - camera1] == 1) {
|
||||
printf("LOGIC\n");
|
||||
sp1E = func_802ABD40(camera->unk_54.unk3A);
|
||||
temp_v0_3 = func_802ABD40(player->unk_110.unk3A);
|
||||
temp_v1 = sp1E - temp_v0_3;
|
||||
if ((temp_v1 < 2) && (temp_v1 >= -1)) {
|
||||
sp1E = get_section_id(camera->collision.meshIndexZX);
|
||||
temp_v0_3 = get_section_id(player->collision.meshIndexZX);
|
||||
index = sp1E - temp_v0_3;
|
||||
if ((index < 2) && (index >= -1)) {
|
||||
if (sp1E == 255) {
|
||||
if (temp_v0_3 == 255) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
} else if (player->unk_110.unk3C[2] > 30.0f) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
index = arg1->pathCounter;
|
||||
} else if (player->collision.surfaceDistance[2] > 30.0f) {
|
||||
index = arg1->pathCounter;
|
||||
} else {
|
||||
temp_v1 = temp_v0_3;
|
||||
index = temp_v0_3;
|
||||
}
|
||||
} else if (camera->unk_54.unk3C[2] > 30.0f) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
} else if (camera->collision.surfaceDistance[2] > 30.0f) {
|
||||
index = arg1->pathCounter;
|
||||
} else {
|
||||
temp_v1 = sp1E;
|
||||
index = sp1E;
|
||||
}
|
||||
} else {
|
||||
|
||||
switch(gCurrentCourseId) {
|
||||
case COURSE_BOWSER_CASTLE:
|
||||
if ((temp_v0_3 >= 0x11) && (temp_v0_3 < 0x18)) {
|
||||
temp_v1 = temp_v0_3;
|
||||
index = temp_v0_3;
|
||||
} else if ((temp_v0_3 == 255) && (sp1E != 255)) {
|
||||
temp_v1 = sp1E;
|
||||
index = sp1E;
|
||||
} else if ((temp_v0_3 != 255) && (sp1E == 255)) {
|
||||
temp_v1 = temp_v0_3;
|
||||
index = temp_v0_3;
|
||||
} else {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
index = arg1->pathCounter;
|
||||
}
|
||||
break;
|
||||
case COURSE_CHOCO_MOUNTAIN:
|
||||
if ((temp_v0_3 >= 0xE) && (temp_v0_3 < 0x16)) {
|
||||
temp_v1 = temp_v0_3;
|
||||
index = temp_v0_3;
|
||||
} else if ((temp_v0_3 == 255) && (sp1E != 255)) {
|
||||
temp_v1 = sp1E;
|
||||
index = sp1E;
|
||||
} else if ((temp_v0_3 != 255) && (sp1E == 255)) {
|
||||
temp_v1 = temp_v0_3;
|
||||
index = temp_v0_3;
|
||||
} else {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
index = arg1->pathCounter;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (temp_v0_3 == 255) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
} else if (player->unk_110.unk3C[2] > 30.0f) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
index = arg1->pathCounter;
|
||||
} else if (player->collision.surfaceDistance[2] > 30.0f) {
|
||||
index = arg1->pathCounter;
|
||||
} else {
|
||||
temp_v1 = temp_v0_3;
|
||||
index = temp_v0_3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
temp_v1 = func_802ABD40(camera->unk_54.unk3A);
|
||||
if (camera->unk_54.unk3C[2] > 30.0f) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
} else if (temp_v1 == 255) {
|
||||
temp_v1 = arg1->pathCounter;
|
||||
index = get_section_id(camera->collision.meshIndexZX);
|
||||
if (camera->collision.surfaceDistance[2] > 30.0f) {
|
||||
index = arg1->pathCounter;
|
||||
} else if (index == 255) {
|
||||
index = arg1->pathCounter;
|
||||
}
|
||||
}
|
||||
|
||||
arg1->pathCounter = temp_v1;
|
||||
temp_v1 = ((temp_v1 - 1) * 4) + var_a3;
|
||||
gSPDisplayList(gDisplayListHead++, addr[temp_v1]);
|
||||
arg1->pathCounter = index;
|
||||
index = ((index - 1) * 4) + var_a3;
|
||||
gSPDisplayList(gDisplayListHead++, addr[index]);
|
||||
}
|
||||
|
||||
void func_80291198(void) {
|
||||
|
|
@ -304,7 +305,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
|
|||
gDPSetBlendMask(gDisplayListHead++, 0xFF);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
load_surface_map((uintptr_t)d_course_koopa_troopa_beach_dl_list2, arg0);
|
||||
render_course_segments((uintptr_t)d_course_koopa_troopa_beach_dl_list2, arg0);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF);
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
|
||||
|
|
@ -322,7 +323,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
|
|||
|
||||
mtxf_identity(matrix);
|
||||
render_set_position(matrix, 0);
|
||||
load_surface_map((uintptr_t) sherbet_land_dls_2, arg0);
|
||||
render_course_segments((uintptr_t) sherbet_land_dls_2, arg0);
|
||||
|
||||
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
|
||||
if ((func_80290C20(arg0->camera) == 1) && (func_802AAB4C(player) < player->pos[1])) {
|
||||
|
|
@ -339,7 +340,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
|
|||
mtxf_identity(matrix);
|
||||
render_set_position(matrix, 0);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
load_surface_map((uintptr_t) &d_course_rainbow_road_dl_list, arg0);
|
||||
render_course_segments((uintptr_t) &d_course_rainbow_road_dl_list, arg0);
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
|
|
@ -624,9 +625,9 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) {
|
|||
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x07003240)));
|
||||
// d_course_mario_raceway_packed_dl_14A0
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x070014A0)));
|
||||
printf("LOADING SURFACE MAP\n");
|
||||
load_surface_map(mario_raceway_dls, arg0);
|
||||
printf("SURFACE MAP LOADED\n");
|
||||
//printf("LOADING SURFACE MAP\n");
|
||||
render_course_segments(mario_raceway_dls, arg0);
|
||||
//printf("SURFACE MAP LOADED\n");
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
|
|
@ -639,7 +640,7 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) {
|
|||
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x070000E0)));
|
||||
// d_course_mario_raceway_packed_dl_160
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x07000160)));
|
||||
printf("RENDERED COURSE\n");
|
||||
//printf("RENDERED COURSE\n");
|
||||
}
|
||||
|
||||
void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
|
||||
|
|
@ -674,7 +675,7 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
|
|||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005868));
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
|
||||
load_surface_map((uintptr_t) choco_mountain_dls, arg0);
|
||||
render_course_segments((uintptr_t) choco_mountain_dls, arg0);
|
||||
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
|
||||
|
|
@ -712,7 +713,7 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC *arg0) {
|
|||
if (D_802B87BC > 255) {
|
||||
D_802B87BC = 0;
|
||||
}
|
||||
load_surface_map((uintptr_t) bowsers_castle_dls, arg0);
|
||||
render_course_segments((uintptr_t) bowsers_castle_dls, arg0);
|
||||
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
|
||||
|
|
@ -751,7 +752,7 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) {
|
|||
// d_course_banshee_boardwalk_packed_dl_69B0
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070069B0));
|
||||
|
||||
load_surface_map((uintptr_t) banshee_boardwalk_dls, arg0);
|
||||
render_course_segments((uintptr_t) banshee_boardwalk_dls, arg0);
|
||||
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
|
|
@ -785,7 +786,7 @@ void render_yoshi_valley(struct UnkStruct_800DC5EC *arg0) {
|
|||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
load_surface_map((uintptr_t) d_course_yoshi_valley_dl_list, arg0);
|
||||
render_course_segments((uintptr_t) d_course_yoshi_valley_dl_list, arg0);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
}
|
||||
|
||||
|
|
@ -804,7 +805,7 @@ void render_frappe_snowland(struct UnkStruct_800DC5EC *arg0) {
|
|||
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
load_surface_map((uintptr_t) d_course_frappe_snowland_dl_list, arg0);
|
||||
render_course_segments((uintptr_t) d_course_frappe_snowland_dl_list, arg0);
|
||||
}
|
||||
|
||||
void render_koopa_troopa_beach(struct UnkStruct_800DC5EC *arg0) {
|
||||
|
|
@ -824,7 +825,7 @@ void render_koopa_troopa_beach(struct UnkStruct_800DC5EC *arg0) {
|
|||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
// d_course_koopa_troopa_beach_packed_dl_9688
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009688));
|
||||
load_surface_map((uintptr_t) d_course_koopa_troopa_beach_dl_list1, arg0);
|
||||
render_course_segments((uintptr_t) d_course_koopa_troopa_beach_dl_list1, arg0);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
|
||||
|
|
@ -852,7 +853,7 @@ void render_royal_raceway(struct UnkStruct_800DC5EC *arg0) {
|
|||
// d_course_royal_raceway_packed_dl_A648
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A648));
|
||||
|
||||
load_surface_map((uintptr_t) royal_raceway_dls, arg0);
|
||||
render_course_segments((uintptr_t) royal_raceway_dls, arg0);
|
||||
|
||||
// d_course_royal_raceway_packed_dl_11A8
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070011A8));
|
||||
|
|
@ -878,20 +879,20 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC *arg0) {
|
|||
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
// d_course_luigi_raceway_packed_dl_9EC0
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009EC0));
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07009EC0)));
|
||||
}
|
||||
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
|
||||
load_surface_map((uintptr_t) luigi_raceway_dls, arg0);
|
||||
render_course_segments(luigi_raceway_dls, arg0);
|
||||
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
|
||||
// d_course_luigi_raceway_packed_dl_E0
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0));
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x070000E0)));
|
||||
// d_course_luigi_raceway_packed_dl_68
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068));
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000068)));
|
||||
|
||||
D_800DC5DC = 88;
|
||||
D_800DC5E0 = 72;
|
||||
|
|
@ -955,7 +956,7 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) {
|
|||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005640));
|
||||
gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4);
|
||||
|
||||
load_surface_map((uintptr_t) moo_moo_farm_dls, arg0);
|
||||
render_course_segments((uintptr_t) moo_moo_farm_dls, arg0);
|
||||
|
||||
if ((temp_s0 < 14) && (temp_s0 > 10)) {
|
||||
if ((temp_s1 == 2) || (temp_s1 == 3) || (temp_s1 == 1))
|
||||
|
|
@ -1022,7 +1023,7 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC *arg0) {
|
|||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_PASS2);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
|
||||
|
||||
load_surface_map((uintptr_t) d_course_toads_turnpike_dl_list, arg0);
|
||||
render_course_segments((uintptr_t) d_course_toads_turnpike_dl_list, arg0);
|
||||
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2);
|
||||
|
|
@ -1053,7 +1054,7 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC *arg0) {
|
|||
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
load_surface_map((uintptr_t) kalimari_desert_dls, arg0);
|
||||
render_course_segments((uintptr_t) kalimari_desert_dls, arg0);
|
||||
// d_course_kalimari_desert_packed_dl_1ED8
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001ED8));
|
||||
// d_course_kalimari_desert_packed_dl_1B18
|
||||
|
|
@ -1077,7 +1078,7 @@ void render_sherbet_land(struct UnkStruct_800DC5EC *arg0) {
|
|||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
load_surface_map((uintptr_t) sherbet_land_dls, arg0);
|
||||
render_course_segments((uintptr_t) sherbet_land_dls, arg0);
|
||||
}
|
||||
|
||||
void render_rainbow_road(UNUSED struct UnkStruct_800DC5EC *arg0) {
|
||||
|
|
@ -1107,7 +1108,7 @@ void render_wario_stadium(struct UnkStruct_800DC5EC *arg0) {
|
|||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGBA, G_CC_MODULATERGBA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
|
||||
load_surface_map((uintptr_t) wario_stadium_dls, arg0);
|
||||
render_course_segments((uintptr_t) wario_stadium_dls, arg0);
|
||||
|
||||
// d_course_wario_stadium_packed_dl_A228
|
||||
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A228));
|
||||
|
|
@ -1220,7 +1221,7 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC *arg0) {
|
|||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
|
||||
load_surface_map((uintptr_t) d_course_dks_jungle_parkway_unknown_dl_list, arg0);
|
||||
render_course_segments((uintptr_t) d_course_dks_jungle_parkway_unknown_dl_list, arg0);
|
||||
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
|
||||
}
|
||||
|
|
@ -1388,27 +1389,29 @@ void render_course(struct UnkStruct_800DC5EC *arg0) {
|
|||
|
||||
void func_80295BF8(s32 playerIndex) {
|
||||
Player* player = &gPlayers[playerIndex];
|
||||
func_802AAAAC(&player->unk_110);
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceFlags = 0;
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceFlags = 0;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceFlags = 0;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceFlags = 0;
|
||||
func_802AAAAC(&player->collision);
|
||||
player->tyres[FRONT_RIGHT].surfaceFlags = 0;
|
||||
player->tyres[FRONT_LEFT].surfaceFlags = 0;
|
||||
player->tyres[BACK_RIGHT].surfaceFlags = 0;
|
||||
player->tyres[BACK_LEFT].surfaceFlags = 0;
|
||||
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceMapIndex = 0x1388;
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceMapIndex = 0x1388;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceMapIndex = 0x1388;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceMapIndex = 0x1388;
|
||||
player->tyres[FRONT_RIGHT].collisionMeshIndex = 0x1388;
|
||||
player->tyres[FRONT_LEFT].collisionMeshIndex = 0x1388;
|
||||
player->tyres[BACK_RIGHT].collisionMeshIndex = 0x1388;
|
||||
player->tyres[BACK_LEFT].collisionMeshIndex = 0x1388;
|
||||
}
|
||||
|
||||
void func_80295C6C(void) {
|
||||
gNextFreeMemoryAddress += ALIGN16(D_8015F588 * sizeof(mk64_surface_map_ram));
|
||||
gNextFreeMemoryAddress += ALIGN16(gCollisionMeshCount * sizeof(CollisionTriangle));
|
||||
gCourseMaxX += 20;
|
||||
gCourseMaxZ += 20;
|
||||
gCourseMinX += -20;
|
||||
gCourseMinZ += -20;
|
||||
gCourseMinY += -20;
|
||||
func_802AF314();
|
||||
gNextFreeMemoryAddress += ALIGN16(D_8015F58A * 2);
|
||||
|
||||
gCollisionIndices = (u16 *) gNextFreeMemoryAddress;
|
||||
generate_collision_grid();
|
||||
gNextFreeMemoryAddress += ALIGN16(gNumCollisionTriangles * sizeof(u16));
|
||||
}
|
||||
|
||||
UNUSED void func_80295D50(s16 arg0, s16 arg1) {
|
||||
|
|
@ -1436,20 +1439,20 @@ void func_80295D88(void) {
|
|||
D_8015F5A0 = 0;
|
||||
func_80295D6C();
|
||||
D_8015F58C = 0;
|
||||
D_8015F588 = 0;
|
||||
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
|
||||
gCollisionMeshCount = 0;
|
||||
gCollisionMesh = (CollisionTriangle *) gNextFreeMemoryAddress;
|
||||
D_800DC5BC = 0;
|
||||
D_800DC5C8 = 0;
|
||||
switch (gCurrentCourseId) {
|
||||
case COURSE_MARIO_RACEWAY:
|
||||
// d_course_mario_raceway_packed_dl_1140
|
||||
set_vertex_data_with_defaults((Gfx *) segmented_gfx_to_virtual(0x07001140));
|
||||
generate_collision_mesh_with_defaults((Gfx *) segmented_gfx_to_virtual(0x07001140));
|
||||
if (gScreenModeSelection == SCREEN_MODE_1P) {
|
||||
// d_course_mario_raceway_packed_dl_8E8
|
||||
set_vertex_data_with_defaults((Gfx *) segmented_gfx_to_virtual(0x070008E8));
|
||||
generate_collision_mesh_with_defaults((Gfx *) segmented_gfx_to_virtual(0x070008E8));
|
||||
} else {
|
||||
// d_course_mario_raceway_packed_dl_2D68
|
||||
set_vertex_data_with_defaults((Gfx *) segmented_gfx_to_virtual(0x07002D68));
|
||||
generate_collision_mesh_with_defaults((Gfx *) segmented_gfx_to_virtual(0x07002D68));
|
||||
}
|
||||
TrackSectionsI *section = (TrackSectionsI *) LOAD_ASSET(d_course_mario_raceway_addr);
|
||||
|
||||
|
|
@ -1527,7 +1530,8 @@ void func_80295D88(void) {
|
|||
D_8015F8E4 = -60.0f;
|
||||
break;
|
||||
case COURSE_LUIGI_RACEWAY:
|
||||
parse_course_displaylists((uintptr_t) d_course_luigi_raceway_addr);
|
||||
TrackSectionsI *section8 = (TrackSectionsI *) LOAD_ASSET(d_course_luigi_raceway_addr);
|
||||
parse_course_displaylists(section8);
|
||||
func_80295C6C();
|
||||
D_8015F8E4 = gCourseMinY - 10.0f;
|
||||
break;
|
||||
|
|
@ -1599,22 +1603,22 @@ void func_80295D88(void) {
|
|||
break;
|
||||
case COURSE_BLOCK_FORT:
|
||||
// d_course_block_fort_packed_dl_15C0
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x070015C0, 1);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x070015C0, 1);
|
||||
func_80295C6C();
|
||||
D_8015F8E4 = gCourseMinY - 10.0f;
|
||||
break;
|
||||
case COURSE_SKYSCRAPER:
|
||||
// d_course_skyscraper_packed_dl_1110
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07001110, 1);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07001110, 1);
|
||||
// d_course_skyscraper_packed_dl_258
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07000258, 1);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07000258, 1);
|
||||
func_80295C6C();
|
||||
|
||||
D_8015F8E4 = -480.0f;
|
||||
break;
|
||||
case COURSE_DOUBLE_DECK:
|
||||
// d_course_double_deck_packed_dl_738
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07000738, 1);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07000738, 1);
|
||||
func_80295C6C();
|
||||
D_8015F8E4 = gCourseMinY - 10.0f;
|
||||
break;
|
||||
|
|
@ -1627,15 +1631,15 @@ void func_80295D88(void) {
|
|||
break;
|
||||
case COURSE_BIG_DONUT:
|
||||
// d_course_big_donut_packed_dl_1018
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07001018, 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07001018, 6);
|
||||
// d_course_big_donut_packed_dl_450
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07000450, 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07000450, 6);
|
||||
// d_course_big_donut_packed_dl_AC0
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07000AC0, 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07000AC0, 6);
|
||||
// d_course_big_donut_packed_dl_B58
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07000B58, 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07000B58, 6);
|
||||
// d_course_big_donut_packed_dl_230
|
||||
set_vertex_data_with_default_section_id((Gfx *)0x07000230, 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx *)0x07000230, 6);
|
||||
func_80295C6C();
|
||||
D_8015F8E4 = 100.0f;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ typedef struct {
|
|||
void func_8029122C(struct UnkStruct_800DC5EC*, s32);
|
||||
s32 func_80290C20(Camera*);
|
||||
void parse_course_displaylists(TrackSectionsI*);
|
||||
void load_surface_map(const char*[], struct UnkStruct_800DC5EC*);
|
||||
void render_course_segments(const char*[], struct UnkStruct_800DC5EC*);
|
||||
void func_80291198(void);
|
||||
void func_802911C4(void);
|
||||
void render_mario_raceway(struct UnkStruct_800DC5EC*);
|
||||
|
|
@ -57,6 +57,6 @@ extern Lights1 D_800DC610[];
|
|||
|
||||
extern Lights1 D_800DC610[]; // Light data?
|
||||
|
||||
extern u16 D_8015F58A;
|
||||
extern u16 gNumCollisionTriangles;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include <vehicles.h>
|
||||
#include "data/some_data.h"
|
||||
#include <assets/some_data.h>
|
||||
#include <assets/luigi_raceway_data.h>
|
||||
|
||||
void func_800431B0(Vec3f pos, Vec3su orientation, f32 scale, Vtx *vtx) {
|
||||
rsp_set_matrix_transformation(pos, orientation, scale);
|
||||
|
|
@ -229,14 +230,14 @@ void func_80044924(u8 *texture, s32 width, s32 height) {
|
|||
// See comment above the `gDPLoadBlock` macro
|
||||
//gDPLoadTextureBlock_4b(gDisplayListHead++, texture, G_IM_FMT_I, width, height, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
// gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, texture);
|
||||
// gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, G_TX_RENDERTILE, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
// gDPLoadSync(gDisplayListHead++);
|
||||
// // The last argument to this macro really should be `CALC_DXT_4b(width)` but that creates a massive diff
|
||||
// gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, (((width * height) + 3) >> 2) - 1, ((width / 16) + 2047) / (width / 16));
|
||||
// gDPPipeSync(gDisplayListHead++);
|
||||
// gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_4b, (((width >> 1) + 7) >> 3), G_TX_RENDERTILE, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
// gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (width-1) << G_TEXTURE_IMAGE_FRAC, (height-1) << G_TEXTURE_IMAGE_FRAC);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, texture);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, G_TX_RENDERTILE, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPLoadSync(gDisplayListHead++);
|
||||
// The last argument to this macro really should be `CALC_DXT_4b(width)` but that creates a massive diff
|
||||
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, (((width * height) + 3) >> 2) - 1, ((width / 16) + 2047) / (width / 16));
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_4b, (((width >> 1) + 7) >> 3), G_TX_RENDERTILE, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (width-1) << G_TEXTURE_IMAGE_FRAC, (height-1) << G_TEXTURE_IMAGE_FRAC);
|
||||
}
|
||||
|
||||
UNUSED void func_80044AB8(u8 *texture, s32 width, s32 height) {
|
||||
|
|
@ -574,11 +575,13 @@ UNUSED void func_80046D40(Vec3f arg0, Vec3su arg1, f32 arg2, u8 *texture) {
|
|||
}
|
||||
|
||||
UNUSED void func_80046D90(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
|
||||
func_800464D0(arg0, arg1, arg2, arg3, texture, common_vtx_hedgehog, 64, 64, 64, 32);
|
||||
Vtx *vtx = (Vtx *) LOAD_ASSET(common_vtx_hedgehog);
|
||||
func_800464D0(arg0, arg1, arg2, arg3, texture, vtx, 64, 64, 64, 32);
|
||||
}
|
||||
|
||||
UNUSED void func_80046DF4(s32 arg0, s32 arg1, u16 arg2, f32 arg3, s32 arg4, u8 *texture) {
|
||||
func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, common_vtx_hedgehog, 64, 64, 64, 32);
|
||||
Vtx *vtx = (Vtx *) LOAD_ASSET(common_vtx_hedgehog);
|
||||
func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, vtx, 64, 64, 64, 32);
|
||||
}
|
||||
|
||||
void load_texture_and_tlut(u8 *tlut, u8 *texture, s32 width, s32 height) {
|
||||
|
|
@ -1197,7 +1200,7 @@ UNUSED void func_8004A5E4(Vec3f arg0, Vec3su arg1, f32 arg2, u8 *texture, Vtx *a
|
|||
void func_8004A630(Collision *arg0, Vec3f arg1, f32 arg2) {
|
||||
if (func_80041924(arg0, arg1) != 0) {
|
||||
D_80183E50[0] = arg1[0];
|
||||
D_80183E50[1] = func_802ABE30(arg1[0], 0.0f, arg1[2], arg0->unk3A) + 0.8;
|
||||
D_80183E50[1] = calculate_surface_height(arg1[0], 0.0f, arg1[2], arg0->meshIndexZX) + 0.8;
|
||||
D_80183E50[2] = arg1[2];
|
||||
rsp_set_matrix_transl_rot_scale(D_80183E50, arg0->orientationVector, arg2);
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007B98);
|
||||
|
|
@ -1205,26 +1208,26 @@ void func_8004A630(Collision *arg0, Vec3f arg1, f32 arg2) {
|
|||
}
|
||||
|
||||
void func_8004A6EC(s32 objectIndex, f32 scale) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
if ((is_obj_flag_status_active(objectIndex, 0x00000020) != 0) && (is_obj_flag_status_active(objectIndex, 0x00800000) != 0)) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
D_80183E50[0] = temp_v0->pos[0];
|
||||
D_80183E50[1] = temp_v0->unk_044 + 0.8;
|
||||
D_80183E50[2] = temp_v0->pos[2];
|
||||
rsp_set_matrix_transformation(D_80183E50, temp_v0->unk_0B8, scale);
|
||||
object = &gObjectList[objectIndex];
|
||||
D_80183E50[0] = object->pos[0];
|
||||
D_80183E50[1] = object->surfaceHeight + 0.8;
|
||||
D_80183E50[2] = object->pos[2];
|
||||
rsp_set_matrix_transformation(D_80183E50, object->unk_0B8, scale);
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007B20);
|
||||
}
|
||||
}
|
||||
|
||||
void func_8004A7AC(s32 objectIndex, f32 arg1) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
if (is_obj_flag_status_active(objectIndex, 0x00000020) != 0) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
D_80183E50[0] = temp_v0->pos[0];
|
||||
D_80183E50[1] = temp_v0->unk_044 + 0.8;
|
||||
D_80183E50[2] = temp_v0->pos[2];
|
||||
object = &gObjectList[objectIndex];
|
||||
D_80183E50[0] = object->pos[0];
|
||||
D_80183E50[1] = object->surfaceHeight + 0.8;
|
||||
D_80183E50[2] = object->pos[2];
|
||||
D_80183E98[0] = 0x4000;
|
||||
D_80183E98[1] = 0;
|
||||
D_80183E98[2] = 0;
|
||||
|
|
@ -1235,14 +1238,14 @@ void func_8004A7AC(s32 objectIndex, f32 arg1) {
|
|||
|
||||
void func_8004A870(s32 objectIndex, f32 arg1) {
|
||||
Mat4 sp30;
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
if ((is_obj_flag_status_active(objectIndex, 0x00000020) != 0) && (is_obj_flag_status_active(objectIndex, 0x00800000) != 0)) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
D_80183E50[0] = temp_v0->pos[0];
|
||||
D_80183E50[1] = temp_v0->unk_044 + 0.8;
|
||||
D_80183E50[2] = temp_v0->pos[2];
|
||||
set_transform_matrix(sp30, temp_v0->unk_01C, D_80183E50, 0U, arg1);
|
||||
object = &gObjectList[objectIndex];
|
||||
D_80183E50[0] = object->pos[0];
|
||||
D_80183E50[1] = object->surfaceHeight + 0.8;
|
||||
D_80183E50[2] = object->pos[2];
|
||||
set_transform_matrix(sp30, object->unk_01C, D_80183E50, 0U, arg1);
|
||||
convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], sp30);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007B98);
|
||||
|
|
@ -2195,27 +2198,27 @@ UNUSED void func_8004E604(s32 arg0, s32 arg1, u8 *tlut, u8 *texture) {
|
|||
|
||||
void draw_item_window(s32 playerId) {
|
||||
s32 objectIndex;
|
||||
Objects *temp_v1;
|
||||
Object *object;
|
||||
hud_player *temp_v0;
|
||||
|
||||
objectIndex = gItemWindowObjectByPlayerId[playerId];
|
||||
temp_v1 = &gObjectList[objectIndex];
|
||||
if (temp_v1->state >= 2) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state >= 2) {
|
||||
temp_v0 = &playerHUD[playerId];
|
||||
func_8004E4CC(temp_v0->slideItemBoxX + temp_v0->itemBoxX, temp_v0->slideItemBoxY + temp_v0->itemBoxY, (u8 *) temp_v1->activeTLUT, temp_v1->activeTexture);
|
||||
func_8004E4CC(temp_v0->slideItemBoxX + temp_v0->itemBoxX, temp_v0->slideItemBoxY + temp_v0->itemBoxY, (u8 *) object->activeTLUT, object->activeTexture);
|
||||
}
|
||||
}
|
||||
|
||||
void func_8004E6C4(s32 playerId) {
|
||||
s32 objectIndex;
|
||||
Objects *temp_v1;
|
||||
Object *object;
|
||||
hud_player *temp_v0;
|
||||
|
||||
objectIndex = gItemWindowObjectByPlayerId[playerId];
|
||||
temp_v1 = &gObjectList[objectIndex];
|
||||
if (temp_v1->state >= 2) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state >= 2) {
|
||||
temp_v0 = &playerHUD[playerId];
|
||||
func_80047910(temp_v0->slideItemBoxX + temp_v0->itemBoxX, temp_v0->slideItemBoxY + temp_v0->itemBoxY, 0U, temp_v0->unknownScaling, (u8 *) temp_v1->activeTLUT, (u8 *) temp_v1->activeTexture, D_0D005C30, 0x00000028, 0x00000020, 0x00000028, 0x00000020);
|
||||
func_80047910(temp_v0->slideItemBoxX + temp_v0->itemBoxX, temp_v0->slideItemBoxY + temp_v0->itemBoxY, 0U, temp_v0->unknownScaling, (u8 *) object->activeTLUT, (u8 *) object->activeTexture, D_0D005C30, 0x00000028, 0x00000020, 0x00000028, 0x00000020);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2279,7 +2282,7 @@ void func_8004EB38(s32 playerId) {
|
|||
}
|
||||
|
||||
void func_8004ED40(s32 arg0) {
|
||||
func_8004A2F4(playerHUD[arg0].speedometerX, playerHUD[arg0].speedometerY, 0U, 1.0f, D_8018D300, D_8018D308, D_8018D310, 0xFF, common_texture_speedometer, D_0D0064B0, 0x40, 0x60, 0x40, 0x30);
|
||||
func_8004A2F4(playerHUD[arg0].speedometerX, playerHUD[arg0].speedometerY, 0U, 1.0f, D_8018D300, D_8018D308, D_8018D310, 0xFF, common_texture_speedometer, D_0D0064B0, 64, 96, 64, 48);
|
||||
func_8004A258(D_8018CFEC, D_8018CFF4, D_8016579E, 1.0f, common_texture_speedometer_needle, D_0D005FF0, 0x40, 0x20, 0x40, 0x20);
|
||||
}
|
||||
|
||||
|
|
@ -2533,6 +2536,7 @@ void draw_lap_count(s16 lapX, s16 lapY, s8 lap) {
|
|||
gDPSetAlphaCompare(gDisplayListHead++, G_AC_THRESHOLD);
|
||||
load_texture_block_rgba16_mirror((u8*) common_texture_hud_123, 32, 8);
|
||||
// Display current lap. Ex. 1/3
|
||||
|
||||
func_8004BA98(lapX , lapY, 8, 8, lap * 8, 0, 0); // display the digit
|
||||
func_8004BA98(lapX + 8 , lapY, 8, 8, 24, 0, 0); // display the /
|
||||
func_8004BA98(lapX + 16, lapY, 8, 8, 16, 0, 0); // display the 3
|
||||
|
|
@ -2810,7 +2814,7 @@ void func_80050E34(s32 playerId, s32 arg1) {
|
|||
s32 characterId;
|
||||
s32 spB8;
|
||||
s32 temp_v0_2;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
Player *player;
|
||||
|
||||
player = &gPlayerOne[playerId];
|
||||
|
|
@ -2913,7 +2917,7 @@ void func_800514BC(void) {
|
|||
void render_object_leaf_particle(UNUSED s32 cameraId) {
|
||||
s32 someIndex;
|
||||
s32 leafIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, D_0D0079C8);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BOTH);
|
||||
|
|
@ -2978,7 +2982,7 @@ void func_800519D4(s32 objectIndex, s16 arg1, s16 arg2) {
|
|||
void func_80051ABC(s16 arg0, s32 arg1) {
|
||||
s32 var_s0;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
D_8018D228 = 0xFF;
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007A60);
|
||||
|
|
@ -3003,7 +3007,7 @@ void func_80051C60(s16 arg0, s32 arg1) {
|
|||
s16 var_s5;
|
||||
s32 var_s0;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
if (D_801658FE == 0) {
|
||||
if (gCurrentCourseId == 6) {
|
||||
|
|
@ -3099,7 +3103,7 @@ void func_800520C0(s32 arg0) {
|
|||
|
||||
void func_8005217C(UNUSED s32 arg0) {
|
||||
Lights1 *D_800E45C0l = LOAD_ASSET(D_800E45C0);
|
||||
Objects *object;
|
||||
Object *object;
|
||||
s32 temp_a3;
|
||||
|
||||
temp_a3 = indexObjectList2[0];
|
||||
|
|
@ -3128,7 +3132,7 @@ void func_8005217C(UNUSED s32 arg0) {
|
|||
|
||||
void func_800523B8(s32 objectIndex, s32 arg1, u32 arg2) {
|
||||
UNUSED s32 pad[2];
|
||||
Objects *object;
|
||||
Object *object;
|
||||
Camera *camera = &camera1[arg1];
|
||||
|
||||
object = &gObjectList[objectIndex];
|
||||
|
|
@ -3192,7 +3196,7 @@ void render_object_bat(s32 cameraId) {
|
|||
|
||||
void render_object_trash_bin(s32 cameraId) {
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
objectIndex = indexObjectList1[1];
|
||||
func_8008A364(objectIndex, cameraId, 0x5555U, 0x00000320);
|
||||
|
|
@ -3220,7 +3224,7 @@ void func_8005285C(s32 arg0) {
|
|||
void func_800528EC(s32 arg0) {
|
||||
s32 var_s3;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
Lights1 D_800E4620l = *(Lights1 *) LOAD_ASSET(D_800E4620);
|
||||
|
||||
D_80183E80[0] = D_8016582C[0];
|
||||
|
|
@ -3321,7 +3325,7 @@ void render_object_snowmans_list_2(s32 cameraId) {
|
|||
Camera *sp44;
|
||||
s32 someIndex;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
sp44 = &camera1[cameraId];
|
||||
load_texture_and_tlut(d_course_frappe_snowland_snow_tlut, d_course_frappe_snowland_snow, 0x00000020, 0x00000020);
|
||||
|
|
@ -3379,7 +3383,7 @@ void render_lakitu(s32 cameraId) {
|
|||
f32 var_f0;
|
||||
f32 var_f2;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
objectIndex = gIndexLakituList[cameraId];
|
||||
camera = &camera1[cameraId];
|
||||
|
|
@ -3472,7 +3476,7 @@ void render_object_thwomps(s32 cameraId) {
|
|||
UNUSED s32 stackPadding0;
|
||||
s16 minusone, plusone;
|
||||
Camera *camera;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
Lights1 D_800E4668l = *(Lights1 *) LOAD_ASSET(D_800E4668);
|
||||
|
||||
camera = &camera1[cameraId];
|
||||
|
|
@ -3538,14 +3542,16 @@ void render_object_thwomps(s32 cameraId) {
|
|||
}
|
||||
|
||||
void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex) {
|
||||
Objects *temp_v0;
|
||||
Object *object;
|
||||
|
||||
Vtx *vtx = (Vtx *) LOAD_ASSET(common_vtx_hedgehog);
|
||||
|
||||
if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) {
|
||||
temp_v0 = &gObjectList[objectIndex];
|
||||
D_80183E80[2] = (s16) (temp_v0->unk_084[6] + 0x8000);
|
||||
rsp_set_matrix_transformation(temp_v0->pos, (u16 *) D_80183E80, temp_v0->sizeScaling);
|
||||
set_color_render((s32) temp_v0->unk_084[0], (s32) temp_v0->unk_084[1], (s32) temp_v0->unk_084[2], (s32) temp_v0->unk_084[3], (s32) temp_v0->unk_084[4], (s32) temp_v0->unk_084[5], (s32) temp_v0->primAlpha);
|
||||
gSPVertex(gDisplayListHead++, &common_vtx_hedgehog[vertexIndex], 4, 0);
|
||||
object = &gObjectList[objectIndex];
|
||||
D_80183E80[2] = (s16) (object->unk_084[6] + 0x8000);
|
||||
rsp_set_matrix_transformation(object->pos, (u16 *) D_80183E80, object->sizeScaling);
|
||||
set_color_render((s32) object->unk_084[0], (s32) object->unk_084[1], (s32) object->unk_084[2], (s32) object->unk_084[3], (s32) object->unk_084[4], (s32) object->unk_084[5], (s32) object->primAlpha);
|
||||
gSPVertex(gDisplayListHead++, &vtx[vertexIndex], 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, common_rectangle_display);
|
||||
}
|
||||
}
|
||||
|
|
@ -3559,14 +3565,20 @@ void func_80053E6C(s32 arg0) {
|
|||
func_8004B614(0, 0, 0, 0, 0, 0, 0);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[1] = 0x8000;
|
||||
rsp_load_texture(D_8018D4BC, 0x40, 0x20);
|
||||
rsp_load_texture(gTextureBalloon1, 64, 32);
|
||||
for (var_s1 = 0; var_s1 < D_80165738; var_s1++) {
|
||||
objectIndex = gObjectParticle3[var_s1];
|
||||
if ((objectIndex != NULL_OBJECT_ID) && (gObjectList[objectIndex].state >= 2)) {
|
||||
func_80053D74(objectIndex, arg0, 0);
|
||||
}
|
||||
}
|
||||
rsp_load_texture(D_8018D4C0, 0x40, 0x20);
|
||||
//! @bug This part is not rendering.
|
||||
|
||||
|
||||
gDPLoadTextureBlock(gDisplayListHead++, gTextureBalloon2, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
//rsp_load_texture(gTextureBalloon2, 64, 32);
|
||||
for (var_s1 = 0; var_s1 < D_80165738; var_s1++) {
|
||||
objectIndex = gObjectParticle3[var_s1];
|
||||
if ((objectIndex != NULL_OBJECT_ID) && (gObjectList[objectIndex].state >= 2)) {
|
||||
|
|
@ -3671,18 +3683,18 @@ void render_object_paddle_boat_smoke_particles(s32 cameraId) {
|
|||
|
||||
void render_object_bowser_flame_particle(s32 objectIndex, s32 cameraId) {
|
||||
Camera *camera;
|
||||
Objects *temp_s0;
|
||||
Object *object;
|
||||
|
||||
camera = &camera1[cameraId];
|
||||
if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) {
|
||||
temp_s0 = &gObjectList[objectIndex];
|
||||
if (temp_s0->unk_0D5 == 9) {
|
||||
func_8004B72C(0xFF, (s32) temp_s0->type, 0, (s32) temp_s0->unk_0A2, 0, 0, (s32) temp_s0->primAlpha);
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->unk_0D5 == 9) {
|
||||
func_8004B72C(0xFF, (s32) object->type, 0, (s32) object->unk_0A2, 0, 0, (s32) object->primAlpha);
|
||||
} else {
|
||||
func_8004B138(0xFF, (s32) temp_s0->type, 0, (s32) temp_s0->primAlpha);
|
||||
func_8004B138(0xFF, (s32) object->type, 0, (s32) object->primAlpha);
|
||||
}
|
||||
D_80183E80[1] = func_800418AC(temp_s0->pos[0], temp_s0->pos[2], camera->pos);
|
||||
func_800431B0(temp_s0->pos, D_80183E80, temp_s0->sizeScaling, D_0D005AE0);
|
||||
D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
|
||||
func_800431B0(object->pos, D_80183E80, object->sizeScaling, D_0D005AE0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3731,7 +3743,7 @@ void render_object_smoke_particles(s32 cameraId) {
|
|||
Camera *sp54;
|
||||
s32 var_s0;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
sp54 = &camera1[cameraId];
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007AE0);
|
||||
|
|
@ -3804,7 +3816,7 @@ void func_80054E10(s32 objectIndex) {
|
|||
if (gObjectList[objectIndex].state > 0) {
|
||||
if (is_obj_flag_status_active(objectIndex, 0x00800000) != 0) {
|
||||
D_80183E50[0] = gObjectList[objectIndex].pos[0];
|
||||
D_80183E50[1] = gObjectList[objectIndex].unk_044 + 0.8;
|
||||
D_80183E50[1] = gObjectList[objectIndex].surfaceHeight + 0.8;
|
||||
D_80183E50[2] = gObjectList[objectIndex].pos[2];
|
||||
D_80183E70[0] = gObjectList[objectIndex].velocity[0];
|
||||
D_80183E70[1] = gObjectList[objectIndex].velocity[1];
|
||||
|
|
@ -3827,7 +3839,7 @@ void func_80054F04(s32 cameraId) {
|
|||
s32 var_s2;
|
||||
s32 objectIndex;
|
||||
Camera *sp44;
|
||||
Objects * object;
|
||||
Object *object;
|
||||
|
||||
sp44 = &camera1[cameraId];
|
||||
gSPDisplayList(gDisplayListHead++, D_0D0079C8);
|
||||
|
|
@ -3920,10 +3932,11 @@ void draw_crabs(s32 objectIndex, s32 cameraId) {
|
|||
Camera *camera;
|
||||
|
||||
if (gObjectList[objectIndex].state >= 2) {
|
||||
Vtx *vtx = (Vtx *) LOAD_ASSET(common_vtx_hedgehog);
|
||||
camera = &camera1[cameraId];
|
||||
func_8004A6EC(objectIndex, 0.5f);
|
||||
gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos);
|
||||
draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
|
||||
draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, vtx, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3982,7 +3995,7 @@ UNUSED void func_800557AC() {
|
|||
|
||||
void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
|
||||
Vec3f sp34;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state >= 2) {
|
||||
|
|
@ -4092,7 +4105,7 @@ void func_80055CCC(s32 objectIndex, s32 cameraId) {
|
|||
camera = &camera1[cameraId];
|
||||
if (gObjectList[objectIndex].state >= 2) {
|
||||
func_8008A454(objectIndex, cameraId, 0x0000012C);
|
||||
test = gObjectList[objectIndex].pos[1] - gObjectList[objectIndex].unk_044;
|
||||
test = gObjectList[objectIndex].pos[1] - gObjectList[objectIndex].surfaceHeight;
|
||||
func_8004A6EC(objectIndex, (20.0 / test) + 0.5);
|
||||
if (is_obj_index_flag_status_inactive(objectIndex, 0x00100000) != 0) {
|
||||
func_80043328(gObjectList[objectIndex].pos, (u16 *) gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling, d_course_luigi_raceway_dl_F960);
|
||||
|
|
@ -4125,7 +4138,7 @@ void render_object_hot_air_balloon(s32 arg0) {
|
|||
}
|
||||
|
||||
void func_80055EF4(s32 objectIndex, UNUSED s32 arg1) {
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state >= 2) {
|
||||
|
|
@ -4144,7 +4157,7 @@ void func_80055F48(s32 arg0) {
|
|||
void func_80055FA0(s32 objectIndex, UNUSED s32 arg1) {
|
||||
Mat4 someMatrix1;
|
||||
Mat4 someMatrix2;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state >= 2) {
|
||||
|
|
@ -4169,7 +4182,7 @@ void render_object_neon(s32 cameraId) {
|
|||
Camera *camera;
|
||||
s32 var_s2;
|
||||
s32 objectIndex;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
camera = &camera1[cameraId];
|
||||
for (var_s2 =0; var_s2 < 10; var_s2++) {
|
||||
|
|
@ -4177,8 +4190,9 @@ void render_object_neon(s32 cameraId) {
|
|||
if (D_8018E838[cameraId] == 0) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if ((object->state >= 2) && (is_obj_index_flag_status_inactive(objectIndex, 0x00080000) != 0) && (is_object_visible_on_camera(objectIndex, camera, 0x2AABU) != 0)) {
|
||||
Vtx *vtx = (Vtx *) LOAD_ASSET(common_vtx_hedgehog);
|
||||
object->orientation[1] = angle_between_object_camera(objectIndex, camera);
|
||||
draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
|
||||
draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, vtx, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4203,7 +4217,7 @@ void func_800563DC(s32 objectIndex, s32 cameraId, s32 arg2) {
|
|||
s32 temp_v0;
|
||||
s32 residue;
|
||||
Camera *camera;
|
||||
Objects *object;
|
||||
Object *object;
|
||||
|
||||
camera = &camera1[cameraId];
|
||||
object = &gObjectList[objectIndex];
|
||||
|
|
@ -4259,9 +4273,9 @@ void func_800568A0(s32 objectIndex, s32 playerId) {
|
|||
|
||||
player = &gPlayerOne[playerId];
|
||||
D_80183E50[0] = gObjectList[objectIndex].pos[0];
|
||||
D_80183E50[1] = gObjectList[objectIndex].unk_044 + 0.8;
|
||||
D_80183E50[1] = gObjectList[objectIndex].surfaceHeight + 0.8;
|
||||
D_80183E50[2] = gObjectList[objectIndex].pos[2];
|
||||
set_transform_matrix(sp30, player->unk_110.orientationVector, D_80183E50, 0U, 0.5f);
|
||||
set_transform_matrix(sp30, player->collision.orientationVector, D_80183E50, 0U, 0.5f);
|
||||
convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], sp30);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007B98);
|
||||
|
|
@ -4292,18 +4306,18 @@ void render_object_bomb_kart(s32 cameraId) {
|
|||
s32 temp_s1;
|
||||
s32 temp_s0;
|
||||
s32 payerId;
|
||||
Objects *temp_v1;
|
||||
Object *object;
|
||||
|
||||
for (payerId = 0; payerId < NUM_BOMB_KARTS_BATTLE; payerId++) {
|
||||
temp_s0 = gIndexObjectBombKart[payerId];
|
||||
temp_v1 = &gObjectList[temp_s0];
|
||||
if (temp_v1->state != 0) {
|
||||
temp_s1 = temp_v1->primAlpha;
|
||||
object = &gObjectList[temp_s0];
|
||||
if (object->state != 0) {
|
||||
temp_s1 = object->primAlpha;
|
||||
temp_v0 = &gPlayerOne[payerId];
|
||||
temp_v1->pos[0] = temp_v0->pos[0];
|
||||
temp_v1->pos[1] = temp_v0->pos[1] - 2.0;
|
||||
temp_v1->pos[2] = temp_v0->pos[2];
|
||||
temp_v1->unk_044 = temp_v0->unk_074;
|
||||
object->pos[0] = temp_v0->pos[0];
|
||||
object->pos[1] = temp_v0->pos[1] - 2.0;
|
||||
object->pos[2] = temp_v0->pos[2];
|
||||
object->surfaceHeight = temp_v0->unk_074;
|
||||
func_800563DC(temp_s0, cameraId, temp_s1);
|
||||
func_8005669C(temp_s0, cameraId, temp_s1);
|
||||
func_800568A0(temp_s0, cameraId);
|
||||
|
|
|
|||
|
|
@ -281,8 +281,8 @@ void func_80020524(void) {
|
|||
//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);
|
||||
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);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
|
|
@ -290,8 +290,8 @@ void func_80020524(void) {
|
|||
//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);
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -314,8 +314,8 @@ void func_8002088C(void) {
|
|||
//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);
|
||||
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);
|
||||
|
||||
//osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
|
|
@ -323,8 +323,8 @@ void func_8002088C(void) {
|
|||
|
||||
//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);
|
||||
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);
|
||||
}
|
||||
|
||||
void func_80020BF4(void) {
|
||||
|
|
@ -339,11 +339,19 @@ void func_80020BF4(void) {
|
|||
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);
|
||||
|
||||
|
||||
// osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
//func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0);
|
||||
// mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00,
|
||||
// D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array);
|
||||
//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);
|
||||
}
|
||||
|
||||
void func_80020F1C(void) {
|
||||
|
|
@ -359,10 +367,16 @@ void func_80020F1C(void) {
|
|||
// 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);
|
||||
|
||||
}
|
||||
//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);
|
||||
}
|
||||
|
||||
void try_render_player(Player *player, s8 playerId, s8 arg2) {
|
||||
|
|
@ -1106,7 +1120,7 @@ void render_light_environment_on_player(Player *player, s8 arg1) {
|
|||
if (((gNearestWaypointByPlayerId[arg1] >= 0x15) && (gNearestWaypointByPlayerId[arg1] < 0x2A))
|
||||
|| ((gNearestWaypointByPlayerId[arg1] >= 0x14D) && (gNearestWaypointByPlayerId[arg1] < 0x15C))
|
||||
|| ((gNearestWaypointByPlayerId[arg1] >= 0x1D1) && (gNearestWaypointByPlayerId[arg1] < 0x1E4))
|
||||
|| (player->unk_110.unk3C[2] >= 500.0f)) { // over lava
|
||||
|| (player->collision.surfaceDistance[2] >= 500.0f)) { // over lava
|
||||
change_player_color_effect_rgb(player, arg1, COLOR_LAVA, 0.3f);
|
||||
change_player_color_effect_cmy(player, arg1, 0x004040, 0.3f);
|
||||
D_80164B80[arg1] = 0;
|
||||
|
|
@ -1243,9 +1257,9 @@ void func_800235AC(Player *player, s8 arg1) {
|
|||
}
|
||||
}
|
||||
if (is_player_under_light_luigi_raceway(player, arg1) != true) {
|
||||
if (((player->boundingBoxCorners[3].unk_14 & 1) == 1)
|
||||
|| ((player->boundingBoxCorners[3].unk_14 & 2) == 2)
|
||||
|| ((player->boundingBoxCorners[0].unk_14 & 3) == 3)) {
|
||||
if (((player->tyres[BACK_RIGHT].unk_14 & 1) == 1)
|
||||
|| ((player->tyres[BACK_RIGHT].unk_14 & 2) == 2)
|
||||
|| ((player->tyres[FRONT_LEFT].unk_14 & 3) == 3)) {
|
||||
change_player_color_effect_rgb(player, arg1, COLOR_BLACK, 0.3f);
|
||||
change_player_color_effect_cmy(player, arg1, 0x6F6F6F, 0.3f);
|
||||
return;
|
||||
|
|
@ -1298,12 +1312,12 @@ void render_player_shadow(Player *player, s8 arg1, s8 arg2) {
|
|||
|| ((player->effects & 0x10000) == 0x10000)
|
||||
|| ((player->effects & 8) == 8)) {
|
||||
|
||||
var_f2 = (f32) (1.0 - ((f64) player->unk_110.unk3C[2] * 0.02));
|
||||
var_f2 = (f32) (1.0 - ((f64) player->collision.surfaceDistance[2] * 0.02));
|
||||
if (var_f2 < 0.0f) {var_f2 = 0.0f;}
|
||||
if (var_f2 > 1.0f) {var_f2 = 1.0f;}
|
||||
spB4[0] = player->unk_110.orientationVector[0];
|
||||
spB4[2] = player->unk_110.orientationVector[2];
|
||||
spB4[1] = player->unk_110.orientationVector[1];
|
||||
spB4[0] = player->collision.orientationVector[0];
|
||||
spB4[2] = player->collision.orientationVector[2];
|
||||
spB4[1] = player->collision.orientationVector[1];
|
||||
|
||||
spCC[0] = player->pos[0] + ((spB0 * sins(spC0)) + (spAC * coss(spC0)));
|
||||
spCC[1] = player->unk_074 + 1.0f;
|
||||
|
|
@ -1698,7 +1712,7 @@ void render_player(Player *player, s8 playerId, s8 screenId) {
|
|||
}
|
||||
func_80023BF0(player, playerId, screenId, var_v1);
|
||||
temp_t1 = 8 << (screenId * 4);
|
||||
if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->unk_110.unk3C[2] <= 50.0f) && (player->surfaceType != ICE)) {
|
||||
if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->collision.surfaceDistance[2] <= 50.0f) && (player->surfaceType != ICE)) {
|
||||
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
|
||||
if (playerId == screenId) {
|
||||
render_player_shadow(player, playerId, screenId);
|
||||
|
|
@ -1713,7 +1727,7 @@ void render_player(Player *player, s8 playerId, s8 screenId) {
|
|||
ghost_render(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->unk_110.unk3C[2] <= 30.0f)) {
|
||||
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);
|
||||
}
|
||||
if (player->boostPower >= 2.0f) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include <defines.h>
|
||||
#include <mk64.h>
|
||||
#include <stubs.h>
|
||||
#include "networking/networking.h"
|
||||
|
||||
#include "spawn_players.h"
|
||||
#include "code_800029B0.h"
|
||||
|
|
@ -111,7 +112,7 @@ void spawn_player(Player *player, s8 playerIndex, f32 startingRow, f32 startingC
|
|||
}
|
||||
|
||||
player->pos[0] = startingRow;
|
||||
ret = func_802AE1C0(startingRow, arg4 + 50.0f, startingColumn) + player->boundingBoxSize;
|
||||
ret = spawn_actor_on_surface(startingRow, arg4 + 50.0f, startingColumn) + player->boundingBoxSize;
|
||||
player->pos[2] = startingColumn;
|
||||
player->pos[1] = ret;
|
||||
player->copy_rotation_x = startingRow;
|
||||
|
|
@ -292,66 +293,66 @@ void spawn_player(Player *player, s8 playerIndex, f32 startingRow, f32 startingC
|
|||
D_801654C0[playerIndex] = 0;
|
||||
D_80165340 = 0;
|
||||
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceType = 0;
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceType = 0;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceType = 0;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceType = 0;
|
||||
player->tyres[FRONT_LEFT].surfaceType = 0;
|
||||
player->tyres[FRONT_RIGHT].surfaceType = 0;
|
||||
player->tyres[BACK_LEFT].surfaceType = 0;
|
||||
player->tyres[BACK_RIGHT].surfaceType = 0;
|
||||
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceFlags = 0;
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceFlags = 0;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceFlags = 0;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceFlags = 0;
|
||||
player->tyres[FRONT_LEFT].surfaceFlags = 0;
|
||||
player->tyres[FRONT_RIGHT].surfaceFlags = 0;
|
||||
player->tyres[BACK_LEFT].surfaceFlags = 0;
|
||||
player->tyres[BACK_RIGHT].surfaceFlags = 0;
|
||||
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceMapIndex = 0;
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceMapIndex = 0;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceMapIndex = 0;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceMapIndex = 0;
|
||||
player->tyres[FRONT_LEFT].collisionMeshIndex = 0;
|
||||
player->tyres[FRONT_RIGHT].collisionMeshIndex = 0;
|
||||
player->tyres[BACK_LEFT].collisionMeshIndex = 0;
|
||||
player->tyres[BACK_RIGHT].collisionMeshIndex = 0;
|
||||
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].unk_14 = 0;
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].unk_14 = 0;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].unk_14 = 0;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].unk_14 = 0;
|
||||
player->tyres[FRONT_RIGHT].unk_14 = 0;
|
||||
player->tyres[FRONT_LEFT].unk_14 = 0;
|
||||
player->tyres[BACK_LEFT].unk_14 = 0;
|
||||
player->tyres[BACK_RIGHT].unk_14 = 0;
|
||||
|
||||
player->unk_110.unk30 = 0;
|
||||
player->unk_110.unk32 = 0;
|
||||
player->unk_110.unk34 = 0;
|
||||
player->unk_110.unk36 = 0;
|
||||
player->unk_110.unk38 = 0;
|
||||
player->unk_110.unk3A = 0;
|
||||
player->collision.unk30 = 0;
|
||||
player->collision.unk32 = 0;
|
||||
player->collision.unk34 = 0;
|
||||
player->collision.meshIndexYX = 0;
|
||||
player->collision.meshIndexZY = 0;
|
||||
player->collision.meshIndexZX = 0;
|
||||
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].cornerPos[0] = 0.0f;
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].cornerPos[1] = 0.0f;
|
||||
player->boundingBoxCorners[FRONT_LEFT_TYRE].cornerPos[2] = 0.0f;
|
||||
player->tyres[FRONT_LEFT].pos[0] = 0.0f;
|
||||
player->tyres[FRONT_LEFT].pos[1] = 0.0f;
|
||||
player->tyres[FRONT_LEFT].pos[2] = 0.0f;
|
||||
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].cornerPos[0] = 0.0f;
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].cornerPos[1] = 0.0f;
|
||||
player->boundingBoxCorners[FRONT_RIGHT_TYRE].cornerPos[2] = 0.0f;
|
||||
player->tyres[FRONT_RIGHT].pos[0] = 0.0f;
|
||||
player->tyres[FRONT_RIGHT].pos[1] = 0.0f;
|
||||
player->tyres[FRONT_RIGHT].pos[2] = 0.0f;
|
||||
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].cornerPos[0] = 0.0f;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].cornerPos[1] = 0.0f;
|
||||
player->boundingBoxCorners[BACK_LEFT_TYRE].cornerPos[2] = 0.0f;
|
||||
player->tyres[BACK_LEFT].pos[0] = 0.0f;
|
||||
player->tyres[BACK_LEFT].pos[1] = 0.0f;
|
||||
player->tyres[BACK_LEFT].pos[2] = 0.0f;
|
||||
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].cornerPos[0] = 0.0f;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].cornerPos[1] = 0.0f;
|
||||
player->boundingBoxCorners[BACK_RIGHT_TYRE].cornerPos[2] = 0.0f;
|
||||
player->tyres[BACK_RIGHT].pos[0] = 0.0f;
|
||||
player->tyres[BACK_RIGHT].pos[1] = 0.0f;
|
||||
player->tyres[BACK_RIGHT].pos[2] = 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->tyres[FRONT_LEFT].baseHeight = 0.0f;
|
||||
player->tyres[FRONT_RIGHT].baseHeight = 0.0f;
|
||||
player->tyres[BACK_LEFT].baseHeight = 0.0f;
|
||||
player->tyres[BACK_RIGHT].baseHeight = 0.0f;
|
||||
|
||||
player->unk_110.unk3C[0] = 0.0f;
|
||||
player->unk_110.unk3C[1] = 0.0f;
|
||||
player->unk_110.unk3C[2] = 0.0f;
|
||||
player->unk_110.unk48[0] = 0.0f;
|
||||
player->unk_110.unk48[1] = 0.0f;
|
||||
player->unk_110.unk48[2] = 0.0f;
|
||||
player->unk_110.unk54[0] = 0.0f;
|
||||
player->unk_110.unk54[1] = 0.0f;
|
||||
player->unk_110.unk54[2] = 0.0f;
|
||||
player->unk_110.orientationVector[0] = 0.0f;
|
||||
player->unk_110.orientationVector[1] = 0.0f;
|
||||
player->unk_110.orientationVector[2] = 0.0f;
|
||||
player->collision.surfaceDistance[0] = 0.0f;
|
||||
player->collision.surfaceDistance[1] = 0.0f;
|
||||
player->collision.surfaceDistance[2] = 0.0f;
|
||||
player->collision.unk48[0] = 0.0f;
|
||||
player->collision.unk48[1] = 0.0f;
|
||||
player->collision.unk48[2] = 0.0f;
|
||||
player->collision.unk54[0] = 0.0f;
|
||||
player->collision.unk54[1] = 0.0f;
|
||||
player->collision.unk54[2] = 0.0f;
|
||||
player->collision.orientationVector[0] = 0.0f;
|
||||
player->collision.orientationVector[1] = 0.0f;
|
||||
player->collision.orientationVector[2] = 0.0f;
|
||||
|
||||
D_80165300[playerIndex] = 0;
|
||||
D_8018CE10[playerIndex].unk_04[0] = 0.0f;
|
||||
|
|
@ -524,15 +525,19 @@ void spawn_players_gp_one_player(f32 *arg0, f32 *arg1, f32 arg2) {
|
|||
spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_KART_AI | 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, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 1;
|
||||
if (gNetwork.enabled) {
|
||||
spawn_network_players(arg0, arg1, arg2);
|
||||
} else {
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[1], arg1[1] + 250.0f, arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
}
|
||||
D_80164A28 = 1;
|
||||
}
|
||||
func_80039AE4();
|
||||
}
|
||||
|
|
@ -1082,13 +1087,13 @@ void func_8003CD98(Player *player, Camera *camera, s8 playerId, s8 screenId) {
|
|||
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]);
|
||||
//memcpy(&D_802BFB80.arraySize8[0][screenId][playerId], &D_802DFB80[0][screenId][playerId], 0x1000);
|
||||
memcpy(&D_802BFB80.arraySize8[0][screenId][playerId], &D_802DFB80[0][screenId][playerId], 0x1000);
|
||||
} 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]);
|
||||
//memcpy(&D_802BFB80.arraySize8[0][screenId - 2][playerId + 4], &D_802DFB80[0][screenId - 2][playerId + 4], 0x1000);
|
||||
memcpy(&D_802BFB80.arraySize8[0][screenId - 2][playerId + 4], &D_802DFB80[0][screenId - 2][playerId + 4], 0x1000);
|
||||
}
|
||||
|
||||
D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ s16 D_80162DB8;
|
|||
u32 *D_80162DBC;
|
||||
|
||||
u16 D_80162DC0;
|
||||
u32 D_80162DC4;
|
||||
StaffGhost *D_80162DC4;
|
||||
s32 D_80162DC8;
|
||||
s32 D_80162DCC;
|
||||
s32 D_80162DD0;
|
||||
|
|
@ -70,6 +70,7 @@ void func_80004EF0(void) {
|
|||
D_80162DA4 = (u32 *) &D_802BFB80.arraySize8[0][2][3];
|
||||
osInvalDCache(&D_80162DA4[0], 0x4000);
|
||||
//osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(D_80162DC4)], D_80162DA4, 0x4000, &gDmaMesgQueue);
|
||||
memcpy(&D_80162DA4, D_80162DC4, 0x4000);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
D_80162D9C = (*D_80162DA4 & 0xFF0000);
|
||||
D_80162DA0 = 0;
|
||||
|
|
@ -114,7 +115,7 @@ void set_staff_ghost(void) {
|
|||
D_80162DD6 = 1;
|
||||
D_80162DF4 = 1;
|
||||
}
|
||||
D_80162DC4 = (u32) &d_mario_raceway_staff_ghost;
|
||||
D_80162DC4 = &d_mario_raceway_staff_ghost;
|
||||
D_80162DE4 = 0;
|
||||
break;
|
||||
case COURSE_ROYAL_RACEWAY:
|
||||
|
|
@ -126,7 +127,7 @@ void set_staff_ghost(void) {
|
|||
D_80162DD6 = 1;
|
||||
D_80162DF4 = 1;
|
||||
}
|
||||
D_80162DC4 = (u32) &d_royal_raceway_staff_ghost;
|
||||
D_80162DC4 = &d_royal_raceway_staff_ghost;
|
||||
D_80162DE4 = 6;
|
||||
break;
|
||||
case COURSE_LUIGI_RACEWAY:
|
||||
|
|
@ -138,7 +139,7 @@ void set_staff_ghost(void) {
|
|||
D_80162DD6 = 1;
|
||||
D_80162DF4 = 1;
|
||||
}
|
||||
D_80162DC4 = (u32) &d_luigi_raceway_staff_ghost;
|
||||
D_80162DC4 = &d_luigi_raceway_staff_ghost;
|
||||
D_80162DE4 = 1;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
1761
src/update_objects.c
1761
src/update_objects.c
File diff suppressed because it is too large
Load Diff
|
|
@ -105,8 +105,8 @@ void func_800744A0(s32);
|
|||
void func_800744CC(void);
|
||||
void func_80074510(uintptr_t, void*, size_t);
|
||||
void func_800745C8(s32, s32);
|
||||
void func_8007466C(s32, s32);
|
||||
void func_80074704(s32, s32);
|
||||
void func_8007466C(s32, uintptr_t);
|
||||
void func_80074704(s32, uintptr_t);
|
||||
u8 *func_80074790(s32, u8*);
|
||||
void func_800747F0(s32, u8*);
|
||||
void func_80074894(s32, u8*);
|
||||
|
|
@ -371,9 +371,6 @@ void func_80086C14(s32);
|
|||
void func_80086C6C(s32);
|
||||
void func_80086D80(void);
|
||||
|
||||
s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr, size_t nbytes, OSMesgQueue *mq);
|
||||
s32 osRecvMesg(OSMesgQueue*, OSMesg*, s32);
|
||||
|
||||
extern f32 D_800E43B0[];
|
||||
extern Vtx D_800E43F0[];
|
||||
extern Vtx D_800E4470[];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,816 @@
|
|||
:config:
|
||||
segments:
|
||||
- [0x06, 0x84E8E0]
|
||||
- [0x07, 0x800000]
|
||||
header:
|
||||
code:
|
||||
- '#include <libultraship.h>'
|
||||
header:
|
||||
- '#include <libultraship.h>'
|
||||
- '#include <libultra/gbi.h>'
|
||||
- '#include <align_asset_macro.h>'
|
||||
references_packed_displaylists: true
|
||||
d_course_luigi_raceway_dl_0:
|
||||
symbol: d_course_luigi_raceway_dl_0
|
||||
type: gfx
|
||||
offset: 0x0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1A8:
|
||||
symbol: d_course_luigi_raceway_dl_1A8
|
||||
type: gfx
|
||||
offset: 0x1A8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_328:
|
||||
symbol: d_course_luigi_raceway_dl_328
|
||||
type: gfx
|
||||
offset: 0x328
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_480:
|
||||
symbol: d_course_luigi_raceway_dl_480
|
||||
type: gfx
|
||||
offset: 0x480
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6E0:
|
||||
symbol: d_course_luigi_raceway_dl_6E0
|
||||
type: gfx
|
||||
offset: 0x6E0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_868:
|
||||
symbol: d_course_luigi_raceway_dl_868
|
||||
type: gfx
|
||||
offset: 0x868
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9F8:
|
||||
symbol: d_course_luigi_raceway_dl_9F8
|
||||
type: gfx
|
||||
offset: 0x9F8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_B48:
|
||||
symbol: d_course_luigi_raceway_dl_B48
|
||||
type: gfx
|
||||
offset: 0xB48
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_D80:
|
||||
symbol: d_course_luigi_raceway_dl_D80
|
||||
type: gfx
|
||||
offset: 0xD80
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_EE8:
|
||||
symbol: d_course_luigi_raceway_dl_EE8
|
||||
type: gfx
|
||||
offset: 0xEE8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1058:
|
||||
symbol: d_course_luigi_raceway_dl_1058
|
||||
type: gfx
|
||||
offset: 0x1058
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1198:
|
||||
symbol: d_course_luigi_raceway_dl_1198
|
||||
type: gfx
|
||||
offset: 0x1198
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1398:
|
||||
symbol: d_course_luigi_raceway_dl_1398
|
||||
type: gfx
|
||||
offset: 0x1398
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1538:
|
||||
symbol: d_course_luigi_raceway_dl_1538
|
||||
type: gfx
|
||||
offset: 0x1538
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_16D8:
|
||||
symbol: d_course_luigi_raceway_dl_16D8
|
||||
type: gfx
|
||||
offset: 0x16D8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1888:
|
||||
symbol: d_course_luigi_raceway_dl_1888
|
||||
type: gfx
|
||||
offset: 0x1888
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1B00:
|
||||
symbol: d_course_luigi_raceway_dl_1B00
|
||||
type: gfx
|
||||
offset: 0x1B00
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1C78:
|
||||
symbol: d_course_luigi_raceway_dl_1C78
|
||||
type: gfx
|
||||
offset: 0x1C78
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1E30:
|
||||
symbol: d_course_luigi_raceway_dl_1E30
|
||||
type: gfx
|
||||
offset: 0x1E30
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_1FD0:
|
||||
symbol: d_course_luigi_raceway_dl_1FD0
|
||||
type: gfx
|
||||
offset: 0x1FD0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2240:
|
||||
symbol: d_course_luigi_raceway_dl_2240
|
||||
type: gfx
|
||||
offset: 0x2240
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2348:
|
||||
symbol: d_course_luigi_raceway_dl_2348
|
||||
type: gfx
|
||||
offset: 0x2348
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2518:
|
||||
symbol: d_course_luigi_raceway_dl_2518
|
||||
type: gfx
|
||||
offset: 0x2518
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2658:
|
||||
symbol: d_course_luigi_raceway_dl_2658
|
||||
type: gfx
|
||||
offset: 0x2658
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2860:
|
||||
symbol: d_course_luigi_raceway_dl_2860
|
||||
type: gfx
|
||||
offset: 0x2860
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2978:
|
||||
symbol: d_course_luigi_raceway_dl_2978
|
||||
type: gfx
|
||||
offset: 0x2978
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2BC0:
|
||||
symbol: d_course_luigi_raceway_dl_2BC0
|
||||
type: gfx
|
||||
offset: 0x2BC0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2D00:
|
||||
symbol: d_course_luigi_raceway_dl_2D00
|
||||
type: gfx
|
||||
offset: 0x2D00
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2F08:
|
||||
symbol: d_course_luigi_raceway_dl_2F08
|
||||
type: gfx
|
||||
offset: 0x2F08
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_2FF8:
|
||||
symbol: d_course_luigi_raceway_dl_2FF8
|
||||
type: gfx
|
||||
offset: 0x2FF8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_32C0:
|
||||
symbol: d_course_luigi_raceway_dl_32C0
|
||||
type: gfx
|
||||
offset: 0x32C0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3408:
|
||||
symbol: d_course_luigi_raceway_dl_3408
|
||||
type: gfx
|
||||
offset: 0x3408
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3610:
|
||||
symbol: d_course_luigi_raceway_dl_3610
|
||||
type: gfx
|
||||
offset: 0x3610
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_36A8:
|
||||
symbol: d_course_luigi_raceway_dl_36A8
|
||||
type: gfx
|
||||
offset: 0x36A8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3928:
|
||||
symbol: d_course_luigi_raceway_dl_3928
|
||||
type: gfx
|
||||
offset: 0x3928
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3AB0:
|
||||
symbol: d_course_luigi_raceway_dl_3AB0
|
||||
type: gfx
|
||||
offset: 0x3AB0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3C18:
|
||||
symbol: d_course_luigi_raceway_dl_3C18
|
||||
type: gfx
|
||||
offset: 0x3C18
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3CA0:
|
||||
symbol: d_course_luigi_raceway_dl_3CA0
|
||||
type: gfx
|
||||
offset: 0x3CA0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_3EB0:
|
||||
symbol: d_course_luigi_raceway_dl_3EB0
|
||||
type: gfx
|
||||
offset: 0x3EB0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4058:
|
||||
symbol: d_course_luigi_raceway_dl_4058
|
||||
type: gfx
|
||||
offset: 0x4058
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4198:
|
||||
symbol: d_course_luigi_raceway_dl_4198
|
||||
type: gfx
|
||||
offset: 0x4198
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4240:
|
||||
symbol: d_course_luigi_raceway_dl_4240
|
||||
type: gfx
|
||||
offset: 0x4240
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4440:
|
||||
symbol: d_course_luigi_raceway_dl_4440
|
||||
type: gfx
|
||||
offset: 0x4440
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4638:
|
||||
symbol: d_course_luigi_raceway_dl_4638
|
||||
type: gfx
|
||||
offset: 0x4638
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4720:
|
||||
symbol: d_course_luigi_raceway_dl_4720
|
||||
type: gfx
|
||||
offset: 0x4720
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4828:
|
||||
symbol: d_course_luigi_raceway_dl_4828
|
||||
type: gfx
|
||||
offset: 0x4828
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4A18:
|
||||
symbol: d_course_luigi_raceway_dl_4A18
|
||||
type: gfx
|
||||
offset: 0x4A18
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4C60:
|
||||
symbol: d_course_luigi_raceway_dl_4C60
|
||||
type: gfx
|
||||
offset: 0x4C60
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4CF8:
|
||||
symbol: d_course_luigi_raceway_dl_4CF8
|
||||
type: gfx
|
||||
offset: 0x4CF8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4E38:
|
||||
symbol: d_course_luigi_raceway_dl_4E38
|
||||
type: gfx
|
||||
offset: 0x4E38
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_4FD8:
|
||||
symbol: d_course_luigi_raceway_dl_4FD8
|
||||
type: gfx
|
||||
offset: 0x4FD8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5220:
|
||||
symbol: d_course_luigi_raceway_dl_5220
|
||||
type: gfx
|
||||
offset: 0x5220
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_52D0:
|
||||
symbol: d_course_luigi_raceway_dl_52D0
|
||||
type: gfx
|
||||
offset: 0x52D0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5420:
|
||||
symbol: d_course_luigi_raceway_dl_5420
|
||||
type: gfx
|
||||
offset: 0x5420
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5558:
|
||||
symbol: d_course_luigi_raceway_dl_5558
|
||||
type: gfx
|
||||
offset: 0x5558
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5728:
|
||||
symbol: d_course_luigi_raceway_dl_5728
|
||||
type: gfx
|
||||
offset: 0x5728
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_57F8:
|
||||
symbol: d_course_luigi_raceway_dl_57F8
|
||||
type: gfx
|
||||
offset: 0x57F8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5940:
|
||||
symbol: d_course_luigi_raceway_dl_5940
|
||||
type: gfx
|
||||
offset: 0x5940
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5A60:
|
||||
symbol: d_course_luigi_raceway_dl_5A60
|
||||
type: gfx
|
||||
offset: 0x5A60
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5BA0:
|
||||
symbol: d_course_luigi_raceway_dl_5BA0
|
||||
type: gfx
|
||||
offset: 0x5BA0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5CB8:
|
||||
symbol: d_course_luigi_raceway_dl_5CB8
|
||||
type: gfx
|
||||
offset: 0x5CB8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5E10:
|
||||
symbol: d_course_luigi_raceway_dl_5E10
|
||||
type: gfx
|
||||
offset: 0x5E10
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_5F08:
|
||||
symbol: d_course_luigi_raceway_dl_5F08
|
||||
type: gfx
|
||||
offset: 0x5F08
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6018:
|
||||
symbol: d_course_luigi_raceway_dl_6018
|
||||
type: gfx
|
||||
offset: 0x6018
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6150:
|
||||
symbol: d_course_luigi_raceway_dl_6150
|
||||
type: gfx
|
||||
offset: 0x6150
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6288:
|
||||
symbol: d_course_luigi_raceway_dl_6288
|
||||
type: gfx
|
||||
offset: 0x6288
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6350:
|
||||
symbol: d_course_luigi_raceway_dl_6350
|
||||
type: gfx
|
||||
offset: 0x6350
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6400:
|
||||
symbol: d_course_luigi_raceway_dl_6400
|
||||
type: gfx
|
||||
offset: 0x6400
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6558:
|
||||
symbol: d_course_luigi_raceway_dl_6558
|
||||
type: gfx
|
||||
offset: 0x6558
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_65B0:
|
||||
symbol: d_course_luigi_raceway_dl_65B0
|
||||
type: gfx
|
||||
offset: 0x65B0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6608:
|
||||
symbol: d_course_luigi_raceway_dl_6608
|
||||
type: gfx
|
||||
offset: 0x6608
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6658:
|
||||
symbol: d_course_luigi_raceway_dl_6658
|
||||
type: gfx
|
||||
offset: 0x6658
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_66B8:
|
||||
symbol: d_course_luigi_raceway_dl_66B8
|
||||
type: gfx
|
||||
offset: 0x66B8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6708:
|
||||
symbol: d_course_luigi_raceway_dl_6708
|
||||
type: gfx
|
||||
offset: 0x6708
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_67A0:
|
||||
symbol: d_course_luigi_raceway_dl_67A0
|
||||
type: gfx
|
||||
offset: 0x67A0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6810:
|
||||
symbol: d_course_luigi_raceway_dl_6810
|
||||
type: gfx
|
||||
offset: 0x6810
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_68C0:
|
||||
symbol: d_course_luigi_raceway_dl_68C0
|
||||
type: gfx
|
||||
offset: 0x68C0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6930:
|
||||
symbol: d_course_luigi_raceway_dl_6930
|
||||
type: gfx
|
||||
offset: 0x6930
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6A00:
|
||||
symbol: d_course_luigi_raceway_dl_6A00
|
||||
type: gfx
|
||||
offset: 0x6A00
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6A90:
|
||||
symbol: d_course_luigi_raceway_dl_6A90
|
||||
type: gfx
|
||||
offset: 0x6A90
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6B58:
|
||||
symbol: d_course_luigi_raceway_dl_6B58
|
||||
type: gfx
|
||||
offset: 0x6B58
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6C40:
|
||||
symbol: d_course_luigi_raceway_dl_6C40
|
||||
type: gfx
|
||||
offset: 0x6C40
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6DA0:
|
||||
symbol: d_course_luigi_raceway_dl_6DA0
|
||||
type: gfx
|
||||
offset: 0x6DA0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6EB0:
|
||||
symbol: d_course_luigi_raceway_dl_6EB0
|
||||
type: gfx
|
||||
offset: 0x6EB0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_6FF0:
|
||||
symbol: d_course_luigi_raceway_dl_6FF0
|
||||
type: gfx
|
||||
offset: 0x6FF0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7110:
|
||||
symbol: d_course_luigi_raceway_dl_7110
|
||||
type: gfx
|
||||
offset: 0x7110
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7248:
|
||||
symbol: d_course_luigi_raceway_dl_7248
|
||||
type: gfx
|
||||
offset: 0x7248
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7388:
|
||||
symbol: d_course_luigi_raceway_dl_7388
|
||||
type: gfx
|
||||
offset: 0x7388
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_74B0:
|
||||
symbol: d_course_luigi_raceway_dl_74B0
|
||||
type: gfx
|
||||
offset: 0x74B0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_75F0:
|
||||
symbol: d_course_luigi_raceway_dl_75F0
|
||||
type: gfx
|
||||
offset: 0x75F0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7750:
|
||||
symbol: d_course_luigi_raceway_dl_7750
|
||||
type: gfx
|
||||
offset: 0x7750
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7928:
|
||||
symbol: d_course_luigi_raceway_dl_7928
|
||||
type: gfx
|
||||
offset: 0x7928
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7A18:
|
||||
symbol: d_course_luigi_raceway_dl_7A18
|
||||
type: gfx
|
||||
offset: 0x7A18
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7BB0:
|
||||
symbol: d_course_luigi_raceway_dl_7BB0
|
||||
type: gfx
|
||||
offset: 0x7BB0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7CD0:
|
||||
symbol: d_course_luigi_raceway_dl_7CD0
|
||||
type: gfx
|
||||
offset: 0x7CD0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7EE8:
|
||||
symbol: d_course_luigi_raceway_dl_7EE8
|
||||
type: gfx
|
||||
offset: 0x7EE8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_7FA0:
|
||||
symbol: d_course_luigi_raceway_dl_7FA0
|
||||
type: gfx
|
||||
offset: 0x7FA0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8158:
|
||||
symbol: d_course_luigi_raceway_dl_8158
|
||||
type: gfx
|
||||
offset: 0x8158
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8260:
|
||||
symbol: d_course_luigi_raceway_dl_8260
|
||||
type: gfx
|
||||
offset: 0x8260
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8450:
|
||||
symbol: d_course_luigi_raceway_dl_8450
|
||||
type: gfx
|
||||
offset: 0x8450
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8508:
|
||||
symbol: d_course_luigi_raceway_dl_8508
|
||||
type: gfx
|
||||
offset: 0x8508
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_86F8:
|
||||
symbol: d_course_luigi_raceway_dl_86F8
|
||||
type: gfx
|
||||
offset: 0x86F8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8790:
|
||||
symbol: d_course_luigi_raceway_dl_8790
|
||||
type: gfx
|
||||
offset: 0x8790
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8958:
|
||||
symbol: d_course_luigi_raceway_dl_8958
|
||||
type: gfx
|
||||
offset: 0x8958
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8A70:
|
||||
symbol: d_course_luigi_raceway_dl_8A70
|
||||
type: gfx
|
||||
offset: 0x8A70
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8CC8:
|
||||
symbol: d_course_luigi_raceway_dl_8CC8
|
||||
type: gfx
|
||||
offset: 0x8CC8
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8D68:
|
||||
symbol: d_course_luigi_raceway_dl_8D68
|
||||
type: gfx
|
||||
offset: 0x8D68
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_8F00:
|
||||
symbol: d_course_luigi_raceway_dl_8F00
|
||||
type: gfx
|
||||
offset: 0x8F00
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9058:
|
||||
symbol: d_course_luigi_raceway_dl_9058
|
||||
type: gfx
|
||||
offset: 0x9058
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9310:
|
||||
symbol: d_course_luigi_raceway_dl_9310
|
||||
type: gfx
|
||||
offset: 0x9310
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9408:
|
||||
symbol: d_course_luigi_raceway_dl_9408
|
||||
type: gfx
|
||||
offset: 0x9408
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_95A0:
|
||||
symbol: d_course_luigi_raceway_dl_95A0
|
||||
type: gfx
|
||||
offset: 0x95A0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_97B0:
|
||||
symbol: d_course_luigi_raceway_dl_97B0
|
||||
type: gfx
|
||||
offset: 0x97B0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_99C0:
|
||||
symbol: d_course_luigi_raceway_dl_99C0
|
||||
type: gfx
|
||||
offset: 0x99C0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9AD0:
|
||||
symbol: d_course_luigi_raceway_dl_9AD0
|
||||
type: gfx
|
||||
offset: 0x9AD0
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9C50:
|
||||
symbol: d_course_luigi_raceway_dl_9C50
|
||||
type: gfx
|
||||
offset: 0x9C50
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_9E58:
|
||||
symbol: d_course_luigi_raceway_dl_9E58
|
||||
type: gfx
|
||||
offset: 0x9E58
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_A028:
|
||||
symbol: d_course_luigi_raceway_dl_A028
|
||||
type: gfx
|
||||
offset: 0xA028
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_A178:
|
||||
symbol: d_course_luigi_raceway_dl_A178
|
||||
type: gfx
|
||||
offset: 0xA178
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_dl_A320:
|
||||
symbol: d_course_luigi_raceway_dl_A320
|
||||
type: gfx
|
||||
offset: 0xA320
|
||||
otr_mode: index
|
||||
d_course_luigi_raceway_unknown_waypoints:
|
||||
symbol: d_course_luigi_raceway_unknown_waypoints
|
||||
offset: 0xA540
|
||||
count: 50
|
||||
type: mk64:TRACK_WAYPOINTS
|
||||
d_course_luigi_raceway_track_waypoints:
|
||||
symbol: d_course_luigi_raceway_track_waypoints
|
||||
offset: 0xA6D0
|
||||
count: 632
|
||||
type: mk64:TRACK_WAYPOINTS
|
||||
d_course_luigi_raceway_basket_model_lod2:
|
||||
symbol: d_course_luigi_raceway_basket_model_lod2
|
||||
type: vtx
|
||||
offset: 0xBA90
|
||||
count: 16
|
||||
d_course_luigi_raceway_unknown_model1:
|
||||
symbol: d_course_luigi_raceway_unknown_model1
|
||||
type: vtx
|
||||
offset: 0xBB90
|
||||
count: 20
|
||||
d_course_luigi_raceway_unknown_model2:
|
||||
symbol: d_course_luigi_raceway_unknown_model2
|
||||
type: vtx
|
||||
offset: 0xBCD0
|
||||
count: 32
|
||||
d_course_luigi_raceway_unknown_model3:
|
||||
symbol: d_course_luigi_raceway_unknown_model3
|
||||
type: vtx
|
||||
offset: 0xBED0
|
||||
count: 36
|
||||
d_course_luigi_raceway_unknown_model4:
|
||||
symbol: d_course_luigi_raceway_unknown_model4
|
||||
type: vtx
|
||||
offset: 0xC0D0
|
||||
count: 12
|
||||
d_course_luigi_raceway_unknown_model5:
|
||||
symbol: d_course_luigi_raceway_unknown_model5
|
||||
type: vtx
|
||||
offset: 0xC1F0
|
||||
count: 12
|
||||
d_course_luigi_raceway_light1:
|
||||
symbol: d_course_luigi_raceway_light1
|
||||
type: lights
|
||||
offset: 0xC3A0
|
||||
d_course_luigi_raceway_basket_model_lod1:
|
||||
symbol: d_course_luigi_raceway_basket_model_lod1
|
||||
type: vtx
|
||||
offset: 0xC3B8
|
||||
count: 4
|
||||
d_course_luigi_raceway_unknown_model6:
|
||||
symbol: d_course_luigi_raceway_unknown_model6
|
||||
type: vtx
|
||||
offset: 0xC3F8
|
||||
count: 12
|
||||
d_course_luigi_raceway_unknown_model7:
|
||||
symbol: d_course_luigi_raceway_unknown_model7
|
||||
type: vtx
|
||||
offset: 0xC4B8
|
||||
count: 6
|
||||
d_course_luigi_raceway_unknown_model8:
|
||||
symbol: d_course_luigi_raceway_unknown_model8
|
||||
type: vtx
|
||||
offset: 0xC518
|
||||
count: 7
|
||||
d_course_luigi_raceway_sign_left:
|
||||
symbol: d_course_luigi_raceway_sign_left
|
||||
type: texture
|
||||
offset: 0xC588
|
||||
width: 32
|
||||
height: 64
|
||||
format: rgba16
|
||||
ctype: u16
|
||||
d_course_luigi_raceway_sign_right:
|
||||
symbol: d_course_luigi_raceway_sign_right
|
||||
type: texture
|
||||
offset: 0xD588
|
||||
width: 32
|
||||
height: 64
|
||||
format: rgba16
|
||||
ctype: u16
|
||||
d_course_luigi_raceway_balloon_basket:
|
||||
symbol: d_course_luigi_raceway_balloon_basket
|
||||
type: texture
|
||||
offset: 0xE588
|
||||
width: 32
|
||||
height: 32
|
||||
format: rgba16
|
||||
ctype: u16
|
||||
d_course_luigi_raceway_balloon_rope:
|
||||
symbol: d_course_luigi_raceway_balloon_rope
|
||||
type: texture
|
||||
offset: 0xED88
|
||||
width: 32
|
||||
height: 32
|
||||
format: rgba16
|
||||
ctype: u16
|
||||
d_course_luigi_raceway_dl_F588:
|
||||
symbol: d_course_luigi_raceway_dl_F588
|
||||
type: gfx
|
||||
offset: 0xF588
|
||||
d_course_luigi_raceway_dl_F630:
|
||||
symbol: d_course_luigi_raceway_dl_F630
|
||||
type: gfx
|
||||
offset: 0xF630
|
||||
d_course_luigi_raceway_dl_F640:
|
||||
symbol: d_course_luigi_raceway_dl_F640
|
||||
type: gfx
|
||||
offset: 0xF640
|
||||
d_course_luigi_raceway_dl_F650:
|
||||
symbol: d_course_luigi_raceway_dl_F650
|
||||
type: gfx
|
||||
offset: 0xF650
|
||||
d_course_luigi_raceway_dl_F660:
|
||||
symbol: d_course_luigi_raceway_dl_F660
|
||||
type: gfx
|
||||
offset: 0xF660
|
||||
d_course_luigi_raceway_dl_F718:
|
||||
symbol: d_course_luigi_raceway_dl_F718
|
||||
type: gfx
|
||||
offset: 0xF718
|
||||
d_course_luigi_raceway_dl_F728:
|
||||
symbol: d_course_luigi_raceway_dl_F728
|
||||
type: gfx
|
||||
offset: 0xF728
|
||||
d_course_luigi_raceway_dl_F938:
|
||||
symbol: d_course_luigi_raceway_dl_F938
|
||||
type: gfx
|
||||
offset: 0xF938
|
||||
d_course_luigi_raceway_dl_F948:
|
||||
symbol: d_course_luigi_raceway_dl_F948
|
||||
type: gfx
|
||||
offset: 0xF948
|
||||
d_course_luigi_raceway_dl_F960:
|
||||
symbol: d_course_luigi_raceway_dl_F960
|
||||
type: gfx
|
||||
offset: 0xF960
|
||||
d_course_luigi_raceway_dl_F970:
|
||||
symbol: d_course_luigi_raceway_dl_F970
|
||||
type: gfx
|
||||
offset: 0xF970
|
||||
d_course_luigi_raceway_dl_FA00:
|
||||
symbol: d_course_luigi_raceway_dl_FA00
|
||||
type: gfx
|
||||
offset: 0xFA00
|
||||
d_course_luigi_raceway_dl_FA10:
|
||||
symbol: d_course_luigi_raceway_dl_FA10
|
||||
type: gfx
|
||||
offset: 0xFA10
|
||||
d_course_luigi_raceway_dl_FA20:
|
||||
symbol: d_course_luigi_raceway_dl_FA20
|
||||
type: gfx
|
||||
offset: 0xFA20
|
||||
d_course_luigi_raceway_dl_FA30:
|
||||
symbol: d_course_luigi_raceway_dl_FA30
|
||||
type: gfx
|
||||
offset: 0xFA30
|
||||
d_course_luigi_raceway_dl_FB10:
|
||||
symbol: d_course_luigi_raceway_dl_FB10
|
||||
type: gfx
|
||||
offset: 0xFB10
|
||||
d_course_luigi_raceway_dl_FB20:
|
||||
symbol: d_course_luigi_raceway_dl_FB20
|
||||
type: gfx
|
||||
offset: 0xFB20
|
||||
d_course_luigi_raceway_dl_FBB8:
|
||||
symbol: d_course_luigi_raceway_dl_FBB8
|
||||
type: gfx
|
||||
offset: 0xFBB8
|
||||
d_course_luigi_raceway_dl_FBC8:
|
||||
symbol: d_course_luigi_raceway_dl_FBC8
|
||||
type: gfx
|
||||
offset: 0xFBC8
|
||||
d_course_luigi_raceway_dl_FBE0:
|
||||
symbol: d_course_luigi_raceway_dl_FBE0
|
||||
type: gfx
|
||||
offset: 0xFBE0
|
||||
d_course_luigi_raceway_tree_model:
|
||||
symbol: d_course_luigi_raceway_tree_model
|
||||
type: vtx
|
||||
offset: 0xFBF0
|
||||
count: 8
|
||||
d_course_luigi_raceway_dl_FC70:
|
||||
symbol: d_course_luigi_raceway_dl_FC70
|
||||
type: gfx
|
||||
offset: 0xFC70
|
||||
d_course_luigi_raceway_dl_FD40:
|
||||
symbol: d_course_luigi_raceway_dl_FD40
|
||||
type: gfx
|
||||
offset: 0xFD40
|
||||
d_course_luigi_raceway_item_box_spawns:
|
||||
symbol: d_course_luigi_raceway_item_box_spawns
|
||||
type: mk64:spawn_data
|
||||
count: 19
|
||||
offset: 0xFDE8
|
||||
d_course_luigi_raceway_tree_spawn:
|
||||
symbol: d_course_luigi_raceway_tree_spawn
|
||||
type: mk64:spawn_data
|
||||
count: 21
|
||||
offset: 0xFE80
|
||||
d_course_luigi_raceway_addr:
|
||||
symbol: d_course_luigi_raceway_addr
|
||||
type: mk64:track_sections
|
||||
offset: 0xFF28
|
||||
count: 113
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
:config:
|
||||
vram:
|
||||
addr: 0x800E8700 # not used for anything
|
||||
offset: 0x907E40
|
||||
no_compression: true
|
||||
header:
|
||||
code:
|
||||
- '#include <libultraship.h>'
|
||||
header:
|
||||
- '#include <libultraship.h>'
|
||||
- '#include <libultra/gbi.h>'
|
||||
- '#include <align_asset_macro.h>'
|
||||
d_course_mario_raceway_packed_dls:
|
||||
symbol: d_course_luigi_raceway_packed_dls
|
||||
type: blob
|
||||
offset: 0x907E40
|
||||
size: 0x35A0
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
:config:
|
||||
segments:
|
||||
- [0x0F, 0x8FE640]
|
||||
no_compression: true
|
||||
header:
|
||||
code:
|
||||
- '#include <libultraship.h>'
|
||||
|
|
|
|||
Loading…
Reference in New Issue