diff --git a/.gitmodules b/.gitmodules index 5bdca45d..cc9bd6cc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "extern/musyx"] path = extern/musyx url = https://github.com/AxioDL/musyx +[submodule "extern/aurora"] + path = extern/aurora + url = https://github.com/dbalatoni13/aurora.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..a4e18016 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,136 @@ +cmake_minimum_required(VERSION 3.13) +if (APPLE) +project(marioparty4 LANGUAGES C CXX OBJC) +else () +project(marioparty4 LANGUAGES C CXX) +endif () + +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 20) + +set(VERSION 0) + +# Set build type to Debug if not specified +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug) +endif() + +if (CMAKE_SYSTEM_NAME STREQUAL Linux) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32 -fsanitize=address -fsanitize-address-use-after-scope") + set(CMAKE_PREFIX_PATH /usr) + set(CMAKE_LIBRARY_ARCHITECTURE i386-linux-gnu) + set(CMAKE_LIBRARY_PATH "/usr/lib32" CACHE PATH "") + set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX 32) +endif () + +if(APPLE) + add_compile_options(-Wno-declaration-after-statement) +endif () + +add_compile_options(-fsanitize=address) + +if (MSVC) + add_compile_options(/bigobj) +endif () + +add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) +add_subdirectory(extern/musyx EXCLUDE_FROM_ALL) + +set(DOLPHIN_FILES + src/dolphin/mtx/mtx.c + src/dolphin/mtx/mtx44.c + src/dolphin/mtx/vec.c + src/dolphin/os/OSAlloc.c + src/dolphin/os/OSArena.c + src/dolphin/os/OSStopwatch.c +) + +set(GAME_FILES + src/game/armem.c + src/game/card.c + src/game/ClusterExec.c + src/game/data.c + src/game/decode.c + src/game/dvd.c + src/game/EnvelopeExec.c + src/game/esprite.c + src/game/fault.c + src/game/flag.c + src/game/font.c + src/game/frand.c + src/game/gamework.c + src/game/hsfanim.c + src/game/hsfdraw.c + src/game/hsfex.c + src/game/hsfload.c + src/game/hsfman.c + src/game/hsfmotion.c + src/game/init.c + src/game/main.c + src/game/malloc.c + src/game/memory.c + src/game/objdll.c + src/game/objmain.c + src/game/ovllist.c + src/game/ShapeExec.c + src/game/sprman.c + src/game/sprput.c + src/game/pad.c + src/game/perf.c + src/game/printfunc.c + src/game/process.c + src/game/window.c + src/game/wipe.c +) + +set(PORT_FILES + src/port/ar.c + src/port/arq.c + src/port/audio.c + src/port/byteswap.cpp + src/port/dvd.c + src/port/imgui.cpp + src/port/OS.c + src/port/stubs.c +) + +source_group("Dolphin" FILES ${DOLPHIN_FILES}) +source_group("Game" FILES ${GAME_FILES}) +source_group("Port" FILES ${PORT_FILES}) + +if (NOT MSVC) +foreach(file ${DOLPHIN_FILES}) +set_source_files_properties(${file} PROPERTIES COMPILE_FLAGS "-std=c89 -Dinline=") +endforeach() +foreach(file ${GAME_FILES}) +set_source_files_properties(${file} PROPERTIES COMPILE_FLAGS "-std=c89 -Dinline=") +endforeach() +endif () + + +add_library(dol SHARED ${DOLPHIN_FILES} ${GAME_FILES} ${PORT_FILES}) +target_compile_definitions(dol PRIVATE TARGET_PC TARGET_DOL VERSION=${VERSION} MUSY_VERSION_MAJOR=1 MUSY_VERSION_MINOR=5 MUSY_VERSION_PATCH=4) +target_include_directories(dol PRIVATE include build/GMPE01_00/include) +target_link_libraries(dol PRIVATE aurora::core aurora::gx aurora::vi musyx) +if (MSVC) +target_link_options(dol PRIVATE "/DEF:${CMAKE_SOURCE_DIR}/dol.def") +else () +target_compile_options(dol PRIVATE "-fvisibility=default") +endif() + +add_executable(marioparty4 src/port/portmain.c) +target_compile_definitions(marioparty4 PRIVATE TARGET_PC VERSION=${VERSION}) +target_include_directories(marioparty4 PRIVATE include) +target_link_libraries(marioparty4 PRIVATE dol aurora::main) + +add_library(bootDll SHARED src/REL/bootDll/main.c src/REL/bootDll/language.c) +target_compile_definitions(bootDll PRIVATE TARGET_PC VERSION=${VERSION}) +target_include_directories(bootDll PRIVATE include build/GMPE01_00/include) +if (MSVC) +set_target_properties(bootDll PROPERTIES LINK_FLAGS "/EXPORT:ObjectSetup") +else () +endif() +set(CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS OFF) +target_link_libraries(bootDll PRIVATE dol musyx) +add_dependencies(marioparty4 bootDll) diff --git a/README.md b/README.md index f1594c57..884478a1 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Linux - For non-x86(_64) platforms: Install wine from your package manager. - For x86(_64), [wibo](https://github.com/decompals/wibo), a minimal 32-bit Windows binary wrapper, will be automatically downloaded and used. -Building +Building the game for the GameCube ======== - Clone the repository: @@ -89,11 +89,13 @@ Building ninja ``` -Diffing -======= +Building the game for PC +===== +After you got the GameCube build up and running for `GMPE01_00`: +- Generate project files using CMake: + ``` + cmake -B build/port -G "Visual Studio 17 2022" -A Win32 + ``` +Linux and MacOS, and x64 support is coming later. -Once the initial build succeeds, an `objdiff.json` should exist in the project root. - -Download the latest release from [encounter/objdiff](https://github.com/encounter/objdiff). Under project settings, set `Project directory`. The configuration should be loaded automatically. - -Select an object from the left sidebar to begin diffing. Changes to the project will rebuild automatically: changes to source files, headers, `configure.py`, `splits.txt` or `symbols.txt`. +- Open the solution in Visual Studio and build. [Fix for UtilsVulkan.h](https://github.com/encounter/dawn-cmake/blob/f10e70a26db00bb89f88be4204cf49ffc869e194/src/dawn/native/vulkan/UtilsVulkan.h#L128-L132) diff --git a/config/GMPE01_00/rels/resultDll/symbols.txt b/config/GMPE01_00/rels/resultDll/symbols.txt index db16ef1b..621d5373 100644 --- a/config/GMPE01_00/rels/resultDll/symbols.txt +++ b/config/GMPE01_00/rels/resultDll/symbols.txt @@ -207,4 +207,4 @@ lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20 lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2 stageSprId = .bss:0x00001A1A; // type:object size:0x42 data:2byte stageMotId = .bss:0x00001A5C; // type:object size:0x40 data:2byte -stageSprId = .bss:0x00001A9C; // type:object size:0x40 data:2byte +stageMdlId = .bss:0x00001A9C; // type:object size:0x40 data:2byte diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 17ef4f4f..6f350097 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4620,7 +4620,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100 lbl_80192260 = .bss:0x80192260; // type:object size:0x100 wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte -winKey = .bss:0x801953C0; // type:object size:0x10 +winKey = .bss:0x801953C0; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400 ARInfo = .bss:0x801967E0; // type:object size:0x400 scope:local data:byte arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local diff --git a/config/GMPE01_01/symbols.txt b/config/GMPE01_01/symbols.txt index 5bed188a..21137761 100644 --- a/config/GMPE01_01/symbols.txt +++ b/config/GMPE01_01/symbols.txt @@ -4619,7 +4619,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100 lbl_80192260 = .bss:0x80192260; // type:object size:0x100 wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte -winKey = .bss:0x801953C0; // type:object size:0x10 +winKey = .bss:0x801953C0; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400 ARInfo = .bss:0x801967E0; // type:object size:0x400 data:byte arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local diff --git a/config/GMPJ01_00/symbols.txt b/config/GMPJ01_00/symbols.txt index ca5a261c..b4a34dc7 100644 --- a/config/GMPJ01_00/symbols.txt +++ b/config/GMPJ01_00/symbols.txt @@ -4452,7 +4452,7 @@ lbl_80192160 = .bss:0x80191E00; // type:object size:0x100 lbl_80192260 = .bss:0x80191F00; // type:object size:0x100 wipeData = .bss:0x80192000; // type:object size:0x4C data:4byte winData = .bss:0x80192060; // type:object size:0x3000 data:byte -winKey = .bss:0x80195060; // type:object size:0x10 +winKey = .bss:0x80195060; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x80195070; // type:object size:0x1400 ARInfo = .bss:0x80196480; // type:object size:0x400 scope:local data:byte arqReq = .bss:0x80196880; // type:object size:0x20 scope:local diff --git a/config/GMPP01_00/symbols.txt b/config/GMPP01_00/symbols.txt index acf35410..70a581ce 100644 --- a/config/GMPP01_00/symbols.txt +++ b/config/GMPP01_00/symbols.txt @@ -5547,7 +5547,7 @@ lbl_80192160 = .bss:0x801AF500; // type:object size:0x100 lbl_80192260 = .bss:0x801AF600; // type:object size:0x100 wipeData = .bss:0x801AF700; // type:object size:0x4C data:4byte winData = .bss:0x801AF760; // type:object size:0x3000 align:32 data:byte -winKey = .bss:0x801B2760; // type:object size:0x10 +winKey = .bss:0x801B2760; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x801B2770; // type:object size:0x1400 mesWInsert = .bss:0x801B3B70; // type:object size:0x10 scope:local ARInfo = .bss:0x801B3B80; // type:object size:0x400 data:byte diff --git a/configure.py b/configure.py index 3721f4c9..bc3a4268 100644 --- a/configure.py +++ b/configure.py @@ -160,6 +160,7 @@ config.asflags = [ "-mgekko", "--strip-local-absolute", "-I include", + "-I libc", f"-I build/{config.version}/include", f"--defsym version={version_num}", ] @@ -192,6 +193,7 @@ cflags_base = [ "-fp_contract on", "-str reuse", "-i include", + "-i libc", "-i extern/musyx/include", f"-i build/{config.version}/include", "-multibyte", @@ -270,6 +272,7 @@ cflags_musyx = [ "-nodefaults", "-nosyspath", "-i include", + "-i libc", "-i extern/musyx/include", "-inline auto", "-O4,p", diff --git a/dol.def b/dol.def new file mode 100644 index 00000000..941749d0 --- /dev/null +++ b/dol.def @@ -0,0 +1,61 @@ +EXPORTS + game_main + byteswap_u32 + byteswap_s32 + OSReport + OSGetTick + HuAudFXPlay + HuAudSStreamAllFadeOut + HuAudSStreamPlay + HuAudSndGrpSetSet + HuMemDirectMalloc + HuMemDirectFree + HuDataSelHeapReadNum + HuDecodeData + Hu3DBGColorSet + Hu3DModelCreate + Hu3DModelAttrSet + Hu3DModelAttrReset + Hu3DCameraCreate + Hu3DCameraPerspectiveSet + Hu3DCameraViewportSet + Hu3DCameraPosSet + Hu3DModelCameraInfoSet + Hu3DModelLightInfoSet + HuPrcEnd + HuPrcCreate + HuPrcCurrentGet + HuPrcSleep + HuPrcVSleep + HuSprAnimRead + HuSprCreate + HuSprGrpCreate + HuSprGrpMemberSet + HuSprGrpKill + HuSprAttrSet + HuSprAttrReset + HuSprDrawNoSet + HuSprPosSet + HuSprScaleSet + HuSprTPLvlSet + HuWindowInit + HuWinInit + HuWinCreate + HuWinKill + HuWinHomeClear + HuWinPriSet + HuWinAttrSet + HuWinBGTPLvlSet + HuWinMesSpeedSet + HuWinMesSet + HuWinMesMaxSizeBetGet + omOvlCallEx + omOvlReturnEx + omOvlHisChg + omOvlHisGet + omInitObjMan + WipeColorSet + WipeCreate + WipeExecAlways + WipeInit + WipeStatGet diff --git a/extern/aurora b/extern/aurora new file mode 160000 index 00000000..d9de6603 --- /dev/null +++ b/extern/aurora @@ -0,0 +1 @@ +Subproject commit d9de6603c79917a5353abd3a9cc26ec557ceee05 diff --git a/extern/musyx b/extern/musyx index a170f2ef..a579f4d4 160000 --- a/extern/musyx +++ b/extern/musyx @@ -1 +1 @@ -Subproject commit a170f2ef4a3f51edb89bc792dff79d55b2c42a89 +Subproject commit a579f4d4abbac1c67fddf0d361291320f81a7b6c diff --git a/include/dolphin/demo/DEMOStats.h b/include/dolphin/demo/DEMOStats.h index 92a61bf6..d9c29c93 100644 --- a/include/dolphin/demo/DEMOStats.h +++ b/include/dolphin/demo/DEMOStats.h @@ -29,10 +29,10 @@ typedef enum { DEMO_STAT_IO = 4 } DEMO_STAT_DISP; -extern unsigned char DemoStatEnable; - void DEMOSetStats(DemoStatData * stat, unsigned long nstats, DEMO_STAT_DISP disp); void DEMOUpdateStats(unsigned char inc); void DEMOPrintStats(void); +void DEMOUpdateStats(unsigned char inc); +void DEMOPrintStats(void); #endif diff --git a/include/dolphin/gx/GXGeometry.h b/include/dolphin/gx/GXGeometry.h index 632ebc69..77effd85 100644 --- a/include/dolphin/gx/GXGeometry.h +++ b/include/dolphin/gx/GXGeometry.h @@ -20,8 +20,10 @@ void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets); void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable); #ifdef TARGET_PC void GXSetArray(GXAttr attr, const void* data, u32 size, u8 stride); +#define GXSETARRAY(attr, data, size, stride) GXSetArray((attr), (data), (size), (stride)) #else void GXSetArray(GXAttr attr, const void* data, u8 stride); +#define GXSETARRAY(attr, data, size, stride) GXSetArray((attr), (data), (stride)) #endif void GXInvalidateVtxCache(void); diff --git a/include/dolphin/gx/GXPriv.h b/include/dolphin/gx/GXPriv.h index 1cd42e37..b2d1878a 100644 --- a/include/dolphin/gx/GXPriv.h +++ b/include/dolphin/gx/GXPriv.h @@ -2,8 +2,9 @@ #define _DOLPHIN_GXPRIV #include "dolphin/gx.h" +#include "dolphin/os.h" -#ifdef DEBUG +#ifndef NDEBUG #define ASSERTLINE(line, cond) \ ((cond) || (OSPanic(__FILE__, line, "Failed assertion " #cond), 0)) diff --git a/include/dolphin/mtx.h b/include/dolphin/mtx.h index 49dc1b7e..2dd4c4d3 100644 --- a/include/dolphin/mtx.h +++ b/include/dolphin/mtx.h @@ -6,7 +6,11 @@ #ifdef __cplusplus extern "C" { #endif + +#if defined(__MWERKS__) && !defined(GEKKO) #define GEKKO +#endif + #ifndef GEKKO #define MTX_USE_C #undef MTX_USE_PS @@ -302,6 +306,20 @@ void PSMTXMultS16VecArray(const Mtx m, const S16Vec* srcBase, Vec* dstBase, u32 void PSMTXROMultS16VecArray(const ROMtx m, const S16Vec* srcBase, Vec* dstBase, u32 count); #endif +#ifdef MTX_USE_PS +#define MTXReorder PSMTXReorder +#define MTXROMultVecArray PSMTXROMultVecArray +#define MTXROSkin2VecArray PSMTXROSkin2VecArray +#define MTXROMultS16VecArray PSMTXROMultS16VecArray +#define MTXMultS16VecArray PSMTXMultS16VecArray +#else // MTX_USE_C +#define MTXReorder C_MTXReorder +#define MTXROMultVecArray C_MTXROMultVecArray +#define MTXROSkin2VecArray C_MTXROSkin2VecArray +#define MTXROMultS16VecArray C_MTXROMultS16VecArray +#define MTXMultS16VecArray C_MTXMultS16VecArray +#endif + void MTXInitStack(MtxStack* sPtr, u32 numMtx); MtxPtr MTXPush(MtxStack* sPtr, const Mtx m); MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m); diff --git a/include/dolphin/os.h b/include/dolphin/os.h index d255bb04..b0f91c56 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -23,10 +23,15 @@ extern "C" { #endif typedef s64 OSTime; typedef u32 OSTick; +#ifdef __MWERKS__ u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h #define OS_BUS_CLOCK (u32) __OSBusClock #define OS_CORE_CLOCK __OSCoreClock +#else +#define OS_BUS_CLOCK 162000000ull +#define OS_CORE_CLOCK 486000000ull +#endif #define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4) #ifndef _DEBUG @@ -57,8 +62,8 @@ u32 OSUncachedToCached(void *ucaddr); #define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0)) -#define OSRoundUp32B(x) (((u32)(x) + 0x1F) & ~(0x1F)) -#define OSRoundDown32B(x) (((u32)(x)) & ~(0x1F)) +#define OSRoundUp32B(x) (((size_t)(x) + 0x1F) & ~(0x1F)) +#define OSRoundDown32B(x) (((size_t)(x)) & ~(0x1F)) #define OSRoundUp(x, align) (((x) + (align)-1) & (-(align))) #define OSRoundUpPtr(x, align) ((void*)((((u32)(x)) + (align)-1) & (~((align)-1)))) diff --git a/include/dolphin/os/OSAlloc.h b/include/dolphin/os/OSAlloc.h index 686dae2b..afa788c0 100644 --- a/include/dolphin/os/OSAlloc.h +++ b/include/dolphin/os/OSAlloc.h @@ -9,17 +9,17 @@ extern "C" { typedef int OSHeapHandle; typedef void (*OSAllocVisitor)(void *obj, u32 size); void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps); -OSHeapHandle OSCreateHeap(void *start, void *end); +uintptr_t OSCreateHeap(void *start, void *end); void OSDestroyHeap(OSHeapHandle heap); void OSAddToHeap(OSHeapHandle heap, void *start, void *end); OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap); -void *OSAllocFromHeap(OSHeapHandle heap, u32 size); +void *OSAllocFromHeap(int heap, unsigned long size); void *OSAllocFixed(void **rstart, void **rend); void OSFreeToHeap(OSHeapHandle heap, void *ptr); long OSCheckHeap(OSHeapHandle heap); void OSDumpHeap(OSHeapHandle heap); -u32 OSReferentSize(void *ptr); -void OSVisitAllocated(OSAllocVisitor visitor); +unsigned long OSReferentSize(void *ptr); +void OSVisitAllocated(void (*visitor)(void *, unsigned long)); extern volatile OSHeapHandle __OSCurrHeap; #define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size)) #define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr)) diff --git a/include/dolphin/os/OSFastCast.h b/include/dolphin/os/OSFastCast.h index b52cabfe..9fb24e30 100644 --- a/include/dolphin/os/OSFastCast.h +++ b/include/dolphin/os/OSFastCast.h @@ -1,6 +1,8 @@ #ifndef _DOLPHIN_OSFASTCAST #define _DOLPHIN_OSFASTCAST +#include "dolphin/types.h" + #ifdef __cplusplus extern "C" { #endif @@ -44,6 +46,7 @@ static inline void OSInitFastCast(void) { static inline s16 __OSf32tos16(register f32 inF) { +#ifdef __MWERKS__ u32 tmp; register u32* tmpPtr = &tmp; register s16 out; @@ -55,12 +58,16 @@ static inline s16 __OSf32tos16(register f32 inF) // clang-format on return out; +#else + return (s16) inF; +#endif } static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); } static inline u8 __OSf32tou8(register f32 inF) { +#ifdef __MWERKS__ u32 tmp; register u32 *tmpPtr = &tmp; register u8 out; @@ -72,12 +79,16 @@ static inline u8 __OSf32tou8(register f32 inF) // clang-format on return out; +#else + return (u8)inF; +#endif } static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); } static inline s8 __OSf32tos8(register f32 inF) { +#ifdef __MWERKS__ u32 tmp; register u32 *tmpPtr = &tmp; register s8 out; @@ -90,12 +101,16 @@ static inline s8 __OSf32tos8(register f32 inF) // clang-format on return out; +#else + return (s8) inF; +#endif } static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); } static inline u16 __OSf32tou16(register f32 inF) { +#ifdef __MWERKS__ u32 tmp; register u32 *tmpPtr = &tmp; register u16 out; @@ -107,11 +122,15 @@ static inline u16 __OSf32tou16(register f32 inF) // clang-format on return out; +#else + return (u16) inF; +#endif } static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); } static inline float __OSs8tof32(register const s8* arg) { +#ifdef __MWERKS__ register float ret; asm { @@ -119,11 +138,15 @@ static inline float __OSs8tof32(register const s8* arg) { } return ret; +#else + return (f32)*arg; +#endif } static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); } static inline float __OSs16tof32(register const s16* arg) { +#ifdef __MWERKS__ register float ret; asm { @@ -131,11 +154,15 @@ static inline float __OSs16tof32(register const s16* arg) { } return ret; +#else + return (f32)*arg; +#endif } static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); } static inline float __OSu8tof32(register const u8* arg) { +#ifdef __MWERKS__ register float ret; asm { @@ -143,11 +170,15 @@ static inline float __OSu8tof32(register const u8* arg) { } return ret; +#else + return (f32)*arg; +#endif } static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); } static inline float __OSu16tof32(register const u16* arg) { +#ifdef __MWERKS__ register float ret; asm { @@ -155,6 +186,9 @@ static inline float __OSu16tof32(register const u16* arg) { } return ret; +#else + return (f32)*arg; +#endif } static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); } diff --git a/include/dolphin/types.h b/include/dolphin/types.h index 822ec081..b4d273b4 100644 --- a/include/dolphin/types.h +++ b/include/dolphin/types.h @@ -20,6 +20,9 @@ typedef unsigned char u8; typedef unsigned short int u16; typedef unsigned long u32; typedef unsigned long long int u64; + +typedef u32 size_t; +typedef u32 uintptr_t; #endif typedef volatile u8 vu8; @@ -64,7 +67,7 @@ typedef int BOOL; #define NULL ((void *)0) #endif #endif -#if !defined(__cplusplus) || __cplusplus < 201103L +#if !defined(__cplusplus) #ifndef nullptr #define nullptr NULL #endif diff --git a/include/dolphin/vi.h b/include/dolphin/vi.h index f503f4b5..da232cb2 100644 --- a/include/dolphin/vi.h +++ b/include/dolphin/vi.h @@ -15,6 +15,7 @@ u32 VIGetTvFormat(void); void VISetNextFrameBuffer(void* fb); void VIWaitForRetrace(void); void VISetBlack(BOOL black); +void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height); #ifdef TARGET_PC void VISetWindowTitle(const char* title); diff --git a/include/ext_math.h b/include/ext_math.h index e979909d..6ac8e0e6 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -4,6 +4,8 @@ #include "math.h" #include "dolphin/mtx.h" +#define M_PI 3.141592653589793 + typedef struct vec2f { float x; float y; @@ -33,7 +35,7 @@ typedef struct vec2f { #define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI)) #ifndef __MWERKS__ -void HuSetVecF(Vec* arg0, f32 arg8, f32 arg9, f32 argA) +void HuSetVecF(Vec *arg0, f32 arg8, f32 arg9, f32 argA); #endif #endif diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index f26f62dc..87033ede 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -5,7 +5,7 @@ #include "game/flag.h" #include "version.h" -//HACK: to prevent prototype errors +// HACK: to prevent prototype errors extern void HuPadRumbleAllStop(void); typedef struct player_config { @@ -17,12 +17,12 @@ typedef struct player_config { } PlayerConfig; typedef struct system_state { -/* 0x00 */ struct { + /* 0x00 */ struct { u8 party : 1; u8 team : 1; }; -/* 0x01 */ u8 diff_story; -/* 0x02 */ struct { + /* 0x01 */ u8 diff_story; + /* 0x02 */ struct { u16 bonus_star : 1; u16 explain_mg : 1; u16 show_com_mg : 1; @@ -30,35 +30,35 @@ typedef struct system_state { u16 mess_speed : 2; u16 save_mode : 2; }; -/* 0x04 */ u8 turn; -/* 0x05 */ u8 max_turn; -/* 0x06 */ u8 star_flag; -/* 0x07 */ u8 star_total; -/* 0x08 */ struct { - u8 star_pos : 3; - u8 board : 5; -}; -/* 0x09 */ s8 last5_effect; -/* 0x0A */ s8 player_curr; -/* 0x0B */ u8 storyCharBit; -/* 0x0C */ s8 storyChar; -/* 0x0E */ s16 block_pos; -/* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32]; -/* 0x30 */ u8 mess_delay; -/* 0x31 */ struct { + /* 0x04 */ u8 turn; + /* 0x05 */ u8 max_turn; + /* 0x06 */ u8 star_flag; + /* 0x07 */ u8 star_total; + /* 0x08 */ struct { + u8 star_pos : 3; + u8 board : 5; + }; + /* 0x09 */ s8 last5_effect; + /* 0x0A */ s8 player_curr; + /* 0x0B */ u8 storyCharBit; + /* 0x0C */ s8 storyChar; + /* 0x0E */ s16 block_pos; + /* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32]; + /* 0x30 */ u8 mess_delay; + /* 0x31 */ struct { u8 bowser_loss : 4; u8 bowser_event : 4; }; -/* 0x32 */ s8 lucky_value; -/* 0x34 */ u16 mg_next; -/* 0x36 */ s16 mg_type; -/* 0x38 */ u16 unk_38; -/* 0x3A */ u8 flag[3][16]; -/* 0x6A */ u8 unk_6A[0x72]; -} SystemState; //8018fcf8, sizeof 0xDC + /* 0x32 */ s8 lucky_value; + /* 0x34 */ u16 mg_next; + /* 0x36 */ s16 mg_type; + /* 0x38 */ u16 unk_38; + /* 0x3A */ u8 flag[3][16]; + /* 0x6A */ u8 unk_6A[0x72]; +} SystemState; // 8018fcf8, sizeof 0xDC typedef struct player_state { -/* 0x00 */ struct { + /* 0x00 */ struct { u16 diff : 2; u16 com : 1; u16 character : 4; @@ -66,15 +66,15 @@ typedef struct player_state { u16 draw_ticket : 1; u16 ticket_player : 6; }; -/* 0x02 */ struct { + /* 0x02 */ struct { u8 team : 1; u8 spark : 1; u8 player_idx : 2; }; -/* 0x03 */ s8 handicap; -/* 0x04 */ s8 port; -/* 0x05 */ s8 items[3]; -/* 0x08 */ struct { + /* 0x03 */ s8 handicap; + /* 0x04 */ s8 port; + /* 0x05 */ s8 items[3]; + /* 0x08 */ struct { u16 color : 2; u16 moving : 1; u16 jump : 1; @@ -85,30 +85,30 @@ typedef struct player_state { u16 bowser_suit : 1; u16 team_backup : 1; }; -/* 0x0A */ s8 roll; -/* 0x0C */ s16 space_curr; -/* 0x0E */ s16 space_prev; -/* 0x10 */ s16 space_next; -/* 0x12 */ s16 space_shock; -/* 0x14 */ s8 blue_count; -/* 0x15 */ s8 red_count; -/* 0x16 */ s8 question_count; -/* 0x17 */ s8 fortune_count; -/* 0x18 */ s8 bowser_count; -/* 0x19 */ s8 battle_count; -/* 0x1A */ s8 mushroom_count; -/* 0x1B */ s8 warp_count; -/* 0x1C */ s16 coins; -/* 0x1E */ s16 coins_mg; -/* 0x20 */ s16 coins_total; -/* 0x22 */ s16 coins_max; -/* 0x24 */ s16 coins_battle; -/* 0x26 */ s16 coin_collect; -/* 0x28 */ s16 coin_win; -/* 0x2A */ s16 stars; -/* 0x2C */ s16 stars_max; -/* 0x2E */ char unk_2E[2]; -} PlayerState; //size of 0x30 + /* 0x0A */ s8 roll; + /* 0x0C */ s16 space_curr; + /* 0x0E */ s16 space_prev; + /* 0x10 */ s16 space_next; + /* 0x12 */ s16 space_shock; + /* 0x14 */ s8 blue_count; + /* 0x15 */ s8 red_count; + /* 0x16 */ s8 question_count; + /* 0x17 */ s8 fortune_count; + /* 0x18 */ s8 bowser_count; + /* 0x19 */ s8 battle_count; + /* 0x1A */ s8 mushroom_count; + /* 0x1B */ s8 warp_count; + /* 0x1C */ s16 coins; + /* 0x1E */ s16 coins_mg; + /* 0x20 */ s16 coins_total; + /* 0x22 */ s16 coins_max; + /* 0x24 */ s16 coins_battle; + /* 0x26 */ s16 coin_collect; + /* 0x28 */ s16 coin_win; + /* 0x2A */ s16 stars; + /* 0x2C */ s16 stars_max; + /* 0x2E */ char unk_2E[2]; +} PlayerState; // size of 0x30 typedef struct pause_backup_config { u8 explain_mg : 1; @@ -119,21 +119,21 @@ typedef struct pause_backup_config { } PauseBackupConfig; typedef struct game_stat { -/* 0x0 */ s16 unk_00; -/* 0x2 */ u8 language; -/* 0x3 */ u8 sound_mode; -/* 0x4 */ s8 rumble; -/* 0x6 */ u16 total_stars; -/* 0x8 */ OSTime create_time; -/* 0x10 */ u32 mg_custom[2]; -/* 0x18 */ u32 mg_avail[2]; -/* 0x20 */ u32 mg_record[15]; -/* 0x5C */ u8 board_win_count[9][8]; -/* 0xA4 */ u8 board_play_count[9]; -/* 0xAE */ u16 board_max_stars[9]; -/* 0xC0 */ u16 board_max_coins[9]; -/* 0xD2 */ u8 present[60]; -/* 0x10E */ struct { + /* 0x0 */ s16 unk_00; + /* 0x2 */ u8 language; + /* 0x3 */ u8 sound_mode; + /* 0x4 */ s8 rumble; + /* 0x6 */ u16 total_stars; + /* 0x8 */ OSTime create_time; + /* 0x10 */ u32 mg_custom[2]; + /* 0x18 */ u32 mg_avail[2]; + /* 0x20 */ u32 mg_record[15]; + /* 0x5C */ u8 board_win_count[9][8]; + /* 0xA4 */ u8 board_play_count[9]; + /* 0xAE */ u16 board_max_stars[9]; + /* 0xC0 */ u16 board_max_coins[9]; + /* 0xD2 */ u8 present[60]; + /* 0x10E */ struct { u8 story_continue : 1; u8 party_continue : 1; u8 open_w06 : 1; @@ -141,17 +141,17 @@ typedef struct game_stat { u8 customPackEnable : 1; u8 musicAllF : 1; }; -/* 0x10F */ PauseBackupConfig story_pause; -/* 0x110 */ PauseBackupConfig party_pause; + /* 0x10F */ PauseBackupConfig story_pause; + /* 0x110 */ PauseBackupConfig party_pause; } GameStat; -extern s16 GwLanguage; -extern s16 GwLanguageSave; +SHARED_SYM extern s16 GwLanguage; +SHARED_SYM extern s16 GwLanguageSave; -extern PlayerConfig GWPlayerCfg[4]; -extern PlayerState GWPlayer[4]; -extern SystemState GWSystem; -extern GameStat GWGameStat; +SHARED_SYM extern PlayerConfig GWPlayerCfg[4]; +SHARED_SYM extern PlayerState GWPlayer[4]; +SHARED_SYM extern SystemState GWSystem; +SHARED_SYM extern GameStat GWGameStat; static inline s32 GWPlayerCfgGroupGet(s32 player) { @@ -196,7 +196,8 @@ static inline s32 GWRumbleGet(void) static inline void GWRumbleSet(s32 value) { GWGameStat.rumble = value; - if(value == 0) { + if (value == 0) { + // TODO PC: get rumble working HuPadRumbleAllStop(); } } @@ -206,7 +207,6 @@ static inline s32 GWBonusStarGet(void) return GWSystem.bonus_star; } - static inline s32 GWMGExplainGet(void) { return GWSystem.explain_mg; @@ -250,9 +250,9 @@ static inline s32 GWMessSpeedGet(void) static inline void GWMessSpeedSet(s32 value) { - #if VERSION_NTSC +#if VERSION_NTSC GWSystem.mess_speed = value; - switch(value) { + switch (value) { case 0: GWSystem.mess_delay = 16; break; @@ -265,9 +265,9 @@ static inline void GWMessSpeedSet(s32 value) GWSystem.mess_delay = 32; break; } - #else +#else GWSystem.mess_speed = value; - switch(value) { + switch (value) { case 0: GWSystem.mess_delay = 32; break; @@ -275,7 +275,7 @@ static inline void GWMessSpeedSet(s32 value) case 2: GWSystem.mess_delay = 64; break; - + case 1: GWSystem.mess_delay = 48; break; @@ -284,7 +284,7 @@ static inline void GWMessSpeedSet(s32 value) GWSystem.mess_delay = 120; break; } - #endif +#endif } static inline void GWSaveModeSet(s32 value) @@ -367,7 +367,7 @@ static inline void GWPlayerCoinWinSet(s32 player, s16 value) } } -#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player))+(value)) -#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), (s32)GWPlayerCoinCollectGet((player))+(value)) +#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player)) + (value)) +#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), (s32)GWPlayerCoinCollectGet((player)) + (value)) #endif diff --git a/include/game/hsfdraw.h b/include/game/hsfdraw.h index d3b46df6..a99d0bb1 100755 --- a/include/game/hsfdraw.h +++ b/include/game/hsfdraw.h @@ -56,7 +56,6 @@ typedef struct hsf_draw_object { void Hu3DDrawPreInit(void); void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2); s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2); -void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1); void Hu3DDrawPost(void); void MakeDisplayList(s16 arg0, u32 arg1); HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1); diff --git a/include/game/jmp.h b/include/game/jmp.h index 0aadbc43..8dfe2179 100755 --- a/include/game/jmp.h +++ b/include/game/jmp.h @@ -1,9 +1,159 @@ #ifndef _GAME_JMP_H #define _GAME_JMP_H +#ifdef TARGET_PC +#include +#include + + +#define SETJMP setjmp +#define LONGJMP longjmp + +#ifndef _JMP_BUF_DEFINED +#if defined(_M_IX86) || defined(__i386__) +typedef struct __JUMP_BUFFER { + uint32_t Ebp; + uint32_t Ebx; + uint32_t Edi; + uint32_t Esi; + uint32_t Esp; + uint32_t Eip; + uint32_t Registration; + uint32_t TryLevel; + uint32_t Cookie; + uint32_t UnwindFunc; + uint32_t UnwindData[6]; +} _JUMP_BUFFER; +#elif defined(_M_X64) || defined(__x86_64__) +#ifndef SETJMP_FLOAT128 +// TODO do we need to align this? +typedef struct _SETJMP_FLOAT128 { + uint64_t Part[2]; +} SETJMP_FLOAT128; +#endif +typedef struct _JUMP_BUFFER { + uint64_t Frame; + uint64_t Rbx; + uint64_t Rsp; + uint64_t Rbp; + uint64_t Rsi; + uint64_t Rdi; + uint64_t R12; + uint64_t R13; + uint64_t R14; + uint64_t R15; + uint64_t Rip; + uint32_t MxCsr; + uint16_t FpCsr; + uint16_t Spare; + + SETJMP_FLOAT128 Xmm6; + SETJMP_FLOAT128 Xmm7; + SETJMP_FLOAT128 Xmm8; + SETJMP_FLOAT128 Xmm9; + SETJMP_FLOAT128 Xmm10; + SETJMP_FLOAT128 Xmm11; + SETJMP_FLOAT128 Xmm12; + SETJMP_FLOAT128 Xmm13; + SETJMP_FLOAT128 Xmm14; + SETJMP_FLOAT128 Xmm15; +} _JUMP_BUFFER; +#elif defined(_M_ARM) || defined(__arm__) +typedef struct _JUMP_BUFFER { + uint32_t Frame; + + uint32_t R4; + uint32_t R5; + uint32_t R6; + uint32_t R7; + uint32_t R8; + uint32_t R9; + uint32_t R10; + uint32_t R11; + + uint32_t Sp; + uint32_t Pc; + uint32_t Fpscr; + uint32_t long D[8]; // D8-D15 VFP/NEON regs +} _JUMP_BUFFER; +#elif defined(_M_ARM64) || defined(__aarch64__) +typedef struct _JUMP_BUFFER { + uint64_t Frame; + uint64_t Reserved; + uint64_t X19; // x19 -- x28: callee saved registers + uint64_t X20; + uint64_t X21; + uint64_t X22; + uint64_t X23; + uint64_t X24; + uint64_t X25; + uint64_t X26; + uint64_t X27; + uint64_t X28; + uint64_t Fp; // x29 frame pointer + uint64_t Lr; // x30 link register + uint64_t Sp; // x31 stack pointer + uint32_t Fpcr; // fp control register + uint32_t Fpsr; // fp status register + + double D[8]; // D8-D15 FP regs +} _JUMP_BUFFER; +#elif defined(__riscv) +typedef struct _JUMP_BUFFER { + uint32_t ra; + uint32_t sp; + uint32_t s0; + uint32_t s1; + uint32_t s2; + uint32_t s3; + uint32_t s4; + uint32_t s5; + uint32_t s6; + uint32_t s7; + uint32_t s8; + uint32_t s9; + uint32_t s10; + uint32_t s11; + + #if __riscv_xlen == 64 + uint64_t fs0; + uint64_t fs1; + uint64_t fs2; + uint64_t fs3; + uint64_t fs4; + uint64_t fs5; + uint64_t fs6; + uint64_t fs7; + uint64_t fs8; + uint64_t fs9; + uint64_t fs10; + uint64_t fs11; + #endif +} _JUMP_BUFFER; +#endif +#endif + +#if defined(_M_IX86) || defined(__i386__) +#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Eip = (size_t)func +#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Esp = (size_t)sp +#elif defined(_M_X64) || defined(__x86_64__) +#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Rip = (size_t)func +#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Rsp = (size_t)sp +#elif defined(_M_ARM) || defined(__arm__) +#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Pc = (size_t)func +#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (size_t)sp +#elif defined(_M_ARM64) || defined(__aarch64__) +#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Lr = (size_t)func +#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (size_t)sp +#elif defined(__riscv) +#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->ra = (size_t)func +#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->sp = (size_t)sp +#endif + +#else #include "dolphin.h" -typedef struct jump_buf { +typedef struct jmp_buf { u32 lr; u32 cr; u32 sp; @@ -16,4 +166,11 @@ typedef struct jump_buf { s32 gcsetjmp(jmp_buf *jump); s32 gclongjmp(jmp_buf *jump, s32 status); +#define SETJMP(jump) gcsetjmp(&(jump)) +#define LONGJMP(jump, status) gclongjmp(&(jump), (status)) + +#define SETJMP_SET_IP(jump, func) jump.lr = (u32)func +#define SETJMP_SET_SP(jump, stack_ptr) jump.sp = (u32)stack_ptr +#endif + #endif diff --git a/include/game/memory.h b/include/game/memory.h index 95728bde..a32b1a84 100644 --- a/include/game/memory.h +++ b/include/game/memory.h @@ -28,14 +28,14 @@ u32 HuMemHeapSizeGet(HeapID heap); void *HuMemHeapPtrGet(HeapID heap); void *HuMemHeapInit(void *ptr, s32 size); -void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr); -void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr); -void HuMemMemoryFree(void *ptr, u32 retaddr); -void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr); +void *HuMemMemoryAlloc(void *heap_ptr, s32 size, uintptr_t retaddr); +void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, uintptr_t retaddr); +void HuMemMemoryFree(void *ptr, uintptr_t retaddr); +void HuMemMemoryFreeNum(void *heap_ptr, u32 num, uintptr_t retaddr); s32 HuMemUsedMemorySizeGet(void *heap_ptr); s32 HuMemUsedMemoryBlockGet(void *heap_ptr); s32 HuMemMemorySizeGet(void *ptr); s32 HuMemMemoryAllocSizeGet(s32 size); void HuMemHeapDump(void *heap_ptr, s16 status); -#endif \ No newline at end of file +#endif diff --git a/include/game/msm.h b/include/game/msm.h index e5106677..032b876c 100644 --- a/include/game/msm.h +++ b/include/game/msm.h @@ -185,6 +185,7 @@ int msmMusPlay(int musId, MSM_MUSPARAM *musParam); s32 msmMusStop(int musNo, s32 speed); void msmMusPauseAll(BOOL pause, s32 speed); s32 msmMusPause(int musNo, BOOL pause, s32 speed); +void msmMusFdoutEnd(void); s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl); void msmMusStopAll(BOOL checkGrp, s32 speed); s32 msmMusGetStatus(int musNo); diff --git a/include/game/object.h b/include/game/object.h index 69f4cb6b..8c022103 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -5,6 +5,10 @@ #include "game/process.h" #include "game/dvd.h" +#ifdef _WIN32 +#include +#endif + #define OM_DLL_MAX 20 #define OVL_DEFINE(name, path) name, @@ -60,9 +64,14 @@ typedef struct om_obj_data { typedef struct om_dll_data { char *name; +#if _WIN32 + HMODULE hModule; +#else OSModuleHeader *module; void *bss; s32 ret; +#endif + } omDllData; void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID start_ovl); @@ -112,26 +121,26 @@ void omSysPauseCtrl(s16 flag); extern omObjData *omDBGSysKeyObj; extern Process *omwatchproc; extern OverlayID omnextovl; -extern OverlayID omcurovl; +SHARED_SYM extern OverlayID omcurovl; extern s32 omcurdll; -extern s32 omovlhisidx; -extern s32 omovlevtno; +SHARED_SYM extern s32 omovlhisidx; +SHARED_SYM extern s32 omovlevtno; extern s32 omnextovlevtno; -extern u32 omovlstat; +SHARED_SYM extern u32 omovlstat; extern char omUPauseFlag; -extern s16 omSysExitReq; +SHARED_SYM extern s16 omSysExitReq; extern s16 omdispinfo; extern u8 omSysPauseEnableFlag; extern OverlayID omprevovl; extern omDllData *omDLLinfoTbl[OM_DLL_MAX]; -extern Vec CRot; -extern Vec Center; -extern float CZoom; -extern Vec CRotM[16]; -extern Vec CenterM[16]; -extern float CZoomM[16]; -extern s16 omDBGMenuButton; +SHARED_SYM extern Vec CRot; +SHARED_SYM extern Vec Center; +SHARED_SYM extern float CZoom; +SHARED_SYM extern Vec CRotM[16]; +SHARED_SYM extern Vec CenterM[16]; +SHARED_SYM extern float CZoomM[16]; +SHARED_SYM extern s16 omDBGMenuButton; #endif diff --git a/include/game/pad.h b/include/game/pad.h index 2223f0b4..3c279ff4 100644 --- a/include/game/pad.h +++ b/include/game/pad.h @@ -2,23 +2,24 @@ #define _GAME_PAD_H #include "dolphin.h" +#include "version.h" #define PAD_BUTTON_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN) #define PAD_BUTTON_TRIGGER_L 0x4000 #define PAD_BUTTON_TRIGGER_R 0x2000 -extern u16 HuPadBtn[4]; -extern u16 HuPadBtnDown[4]; -extern u16 HuPadBtnRep[4]; -extern s8 HuPadStkX[4]; -extern s8 HuPadStkY[4]; -extern s8 HuPadSubStkX[4]; -extern s8 HuPadSubStkY[4]; -extern u8 HuPadTrigL[4]; -extern u8 HuPadTrigR[4]; -extern u8 HuPadDStk[4]; -extern u8 HuPadDStkRep[4]; +SHARED_SYM extern u16 HuPadBtn[4]; +SHARED_SYM extern u16 HuPadBtnDown[4]; +SHARED_SYM extern u16 HuPadBtnRep[4]; +SHARED_SYM extern s8 HuPadStkX[4]; +SHARED_SYM extern s8 HuPadStkY[4]; +SHARED_SYM extern s8 HuPadSubStkX[4]; +SHARED_SYM extern s8 HuPadSubStkY[4]; +SHARED_SYM extern u8 HuPadTrigL[4]; +SHARED_SYM extern u8 HuPadTrigR[4]; +SHARED_SYM extern u8 HuPadDStk[4]; +SHARED_SYM extern u8 HuPadDStkRep[4]; extern s8 HuPadErr[4]; extern u16 _PadBtn[4]; extern u16 _PadBtnDown[4]; @@ -32,4 +33,4 @@ void HuPadRumbleAllStop(void); s16 HuPadStatGet(s16 pad); u32 HuPadRumbleGet(void); -#endif \ No newline at end of file +#endif diff --git a/include/game/process.h b/include/game/process.h index 3bd6a297..c8b43d89 100644 --- a/include/game/process.h +++ b/include/game/process.h @@ -1,9 +1,14 @@ #ifndef _GAME_PROCESS_H #define _GAME_PROCESS_H -#include "game/jmp.h" #include "dolphin/types.h" +#include "game/jmp.h" + +#ifdef TARGET_PC +#include +#endif + #define PROCESS_STAT_PAUSE 0x1 #define PROCESS_STAT_UPAUSE 0x2 #define PROCESS_STAT_PAUSE_EN 0x4 @@ -50,4 +55,4 @@ void HuPrcResetStat(Process *process, u16 value); void HuPrcAllPause(s32 flag); void HuPrcAllUPause(s32 flag); -#endif \ No newline at end of file +#endif diff --git a/include/game/sreset.h b/include/game/sreset.h new file mode 100644 index 00000000..caf8b15b --- /dev/null +++ b/include/game/sreset.h @@ -0,0 +1,9 @@ +#ifndef _GAME_SRESET_H +#define _GAME_SRESET_H + +#include "dolphin.h" + +s32 HuSoftResetButtonCheck(void); +void HuDvdErrDispInit(GXRenderModeObj *rmode, void *xfb1, void *xfb2); + +#endif diff --git a/include/game/window.h b/include/game/window.h index a2ff8eb1..05afd68d 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -3,6 +3,7 @@ #include "game/animdata.h" #include "dolphin.h" +#include "version.h" #define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess)) #define MAKE_MESSID_PTR(ptr) ((u32)(ptr)) @@ -75,8 +76,8 @@ typedef struct { /* 0x160 */ u8 ATTRIBUTE_ALIGN(32) mess_pal[10][3]; } WindowData; // Size 0x180 -extern WindowData winData[32]; -extern void *messDataPtr; +SHARED_SYM extern WindowData winData[32]; +SHARED_SYM extern void *messDataPtr; void HuWindowInit(void); void HuWinInit(s32 mess_data_no); @@ -139,6 +140,4 @@ void HuWinExCleanup(s16 window); void HuWinExAnimPopIn(s16 window, s16 portrait); void *MessData_MesPtrGet(void *data, u32 index); -extern void *messDataPtr; - #endif diff --git a/include/game/wipe.h b/include/game/wipe.h index baafbe25..52f2f985 100644 --- a/include/game/wipe.h +++ b/include/game/wipe.h @@ -2,6 +2,7 @@ #define _GAME_WIPE_H #include "dolphin.h" +#include "version.h" #define WIPE_TYPE_PREV -1 #define WIPE_TYPE_NORMAL 0 @@ -37,7 +38,7 @@ void WipeCreate(s16 mode, s16 type, s16 duration); void WipeColorSet(u8 r, u8 g, u8 b); u8 WipeStatGet(void); -extern WipeState wipeData; +SHARED_SYM extern WipeState wipeData; extern BOOL wipeFadeInF; #endif diff --git a/include/ovl_table.h b/include/ovl_table.h index fe695ea9..d391d305 100644 --- a/include/ovl_table.h +++ b/include/ovl_table.h @@ -1,108 +1,108 @@ #include "version.h" -OVL_DEFINE(OVL__MINI, "dll/_minigameDLL.rel") -OVL_DEFINE(OVL_BOOT, "dll/bootdll.rel") -OVL_DEFINE(OVL_E3SETUP, "dll/e3setupDLL.rel") -OVL_DEFINE(OVL_INST, "dll/instdll.rel") -OVL_DEFINE(OVL_M300, "dll/m300dll.rel") -OVL_DEFINE(OVL_M302, "dll/m302dll.rel") -OVL_DEFINE(OVL_M303, "dll/m303dll.rel") -OVL_DEFINE(OVL_M330, "dll/m330dll.rel") -OVL_DEFINE(OVL_M333, "dll/m333dll.rel") -OVL_DEFINE(OVL_M401, "dll/m401dll.rel") -OVL_DEFINE(OVL_M402, "dll/m402dll.rel") -OVL_DEFINE(OVL_M403, "dll/m403dll.rel") -OVL_DEFINE(OVL_M404, "dll/m404dll.rel") -OVL_DEFINE(OVL_M405, "dll/m405dll.rel") -OVL_DEFINE(OVL_M406, "dll/m406dll.rel") -OVL_DEFINE(OVL_M407, "dll/m407dll.rel") -OVL_DEFINE(OVL_M408, "dll/m408dll.rel") -OVL_DEFINE(OVL_M409, "dll/m409dll.rel") -OVL_DEFINE(OVL_M410, "dll/m410dll.rel") -OVL_DEFINE(OVL_M411, "dll/m411dll.rel") -OVL_DEFINE(OVL_M412, "dll/m412dll.rel") -OVL_DEFINE(OVL_M413, "dll/m413dll.rel") -OVL_DEFINE(OVL_M414, "dll/m414dll.rel") -OVL_DEFINE(OVL_M415, "dll/m415dll.rel") -OVL_DEFINE(OVL_M416, "dll/m416dll.rel") -OVL_DEFINE(OVL_M417, "dll/m417dll.rel") -OVL_DEFINE(OVL_M418, "dll/m418dll.rel") -OVL_DEFINE(OVL_M419, "dll/m419dll.rel") -OVL_DEFINE(OVL_M420, "dll/m420dll.rel") -OVL_DEFINE(OVL_M421, "dll/m421dll.rel") -OVL_DEFINE(OVL_M422, "dll/m422dll.rel") -OVL_DEFINE(OVL_M423, "dll/m423dll.rel") -OVL_DEFINE(OVL_M424, "dll/m424dll.rel") -OVL_DEFINE(OVL_M425, "dll/m425dll.rel") -OVL_DEFINE(OVL_M426, "dll/m426dll.rel") -OVL_DEFINE(OVL_M427, "dll/m427dll.rel") -OVL_DEFINE(OVL_M428, "dll/m428dll.rel") -OVL_DEFINE(OVL_M429, "dll/m429dll.rel") -OVL_DEFINE(OVL_M430, "dll/m430dll.rel") -OVL_DEFINE(OVL_M431, "dll/m431dll.rel") -OVL_DEFINE(OVL_M432, "dll/m432dll.rel") -OVL_DEFINE(OVL_M433, "dll/m433dll.rel") -OVL_DEFINE(OVL_M434, "dll/m434dll.rel") -OVL_DEFINE(OVL_M435, "dll/m435dll.rel") -OVL_DEFINE(OVL_M436, "dll/m436dll.rel") -OVL_DEFINE(OVL_M437, "dll/m437dll.rel") -OVL_DEFINE(OVL_M438, "dll/m438dll.rel") -OVL_DEFINE(OVL_M439, "dll/m439dll.rel") -OVL_DEFINE(OVL_M440, "dll/m440dll.rel") -OVL_DEFINE(OVL_M441, "dll/m441dll.rel") -OVL_DEFINE(OVL_M442, "dll/m442dll.rel") -OVL_DEFINE(OVL_M443, "dll/m443dll.rel") -OVL_DEFINE(OVL_M444, "dll/m444dll.rel") -OVL_DEFINE(OVL_M445, "dll/m445dll.rel") -OVL_DEFINE(OVL_M446, "dll/m446dll.rel") -OVL_DEFINE(OVL_M447, "dll/m447dll.rel") -OVL_DEFINE(OVL_M448, "dll/m448dll.rel") -OVL_DEFINE(OVL_M449, "dll/m449dll.rel") -OVL_DEFINE(OVL_M450, "dll/m450dll.rel") -OVL_DEFINE(OVL_M451, "dll/m451dll.rel") -OVL_DEFINE(OVL_M453, "dll/m453dll.rel") -OVL_DEFINE(OVL_M455, "dll/m455dll.rel") -OVL_DEFINE(OVL_M456, "dll/m456dll.rel") -OVL_DEFINE(OVL_M457, "dll/m457dll.rel") -OVL_DEFINE(OVL_M458, "dll/m458dll.rel") -OVL_DEFINE(OVL_M459, "dll/m459dll.rel") -OVL_DEFINE(OVL_M460, "dll/m460dll.rel") -OVL_DEFINE(OVL_M461, "dll/m461dll.rel") -OVL_DEFINE(OVL_M462, "dll/m462dll.rel") -OVL_DEFINE(OVL_M463, "dll/m463dll.rel") -OVL_DEFINE(OVL_MENT, "dll/mentdll.rel") +OVL_DEFINE(OVL__MINI, "_minigameDLL") +OVL_DEFINE(OVL_BOOT, "bootdll") +OVL_DEFINE(OVL_E3SETUP, "e3setupDLL") +OVL_DEFINE(OVL_INST, "instdll") +OVL_DEFINE(OVL_M300, "m300dll") +OVL_DEFINE(OVL_M302, "m302dll") +OVL_DEFINE(OVL_M303, "m303dll") +OVL_DEFINE(OVL_M330, "m330dll") +OVL_DEFINE(OVL_M333, "m333dll") +OVL_DEFINE(OVL_M401, "m401dll") +OVL_DEFINE(OVL_M402, "m402dll") +OVL_DEFINE(OVL_M403, "m403dll") +OVL_DEFINE(OVL_M404, "m404dll") +OVL_DEFINE(OVL_M405, "m405dll") +OVL_DEFINE(OVL_M406, "m406dll") +OVL_DEFINE(OVL_M407, "m407dll") +OVL_DEFINE(OVL_M408, "m408dll") +OVL_DEFINE(OVL_M409, "m409dll") +OVL_DEFINE(OVL_M410, "m410dll") +OVL_DEFINE(OVL_M411, "m411dll") +OVL_DEFINE(OVL_M412, "m412dll") +OVL_DEFINE(OVL_M413, "m413dll") +OVL_DEFINE(OVL_M414, "m414dll") +OVL_DEFINE(OVL_M415, "m415dll") +OVL_DEFINE(OVL_M416, "m416dll") +OVL_DEFINE(OVL_M417, "m417dll") +OVL_DEFINE(OVL_M418, "m418dll") +OVL_DEFINE(OVL_M419, "m419dll") +OVL_DEFINE(OVL_M420, "m420dll") +OVL_DEFINE(OVL_M421, "m421dll") +OVL_DEFINE(OVL_M422, "m422dll") +OVL_DEFINE(OVL_M423, "m423dll") +OVL_DEFINE(OVL_M424, "m424dll") +OVL_DEFINE(OVL_M425, "m425dll") +OVL_DEFINE(OVL_M426, "m426dll") +OVL_DEFINE(OVL_M427, "m427dll") +OVL_DEFINE(OVL_M428, "m428dll") +OVL_DEFINE(OVL_M429, "m429dll") +OVL_DEFINE(OVL_M430, "m430dll") +OVL_DEFINE(OVL_M431, "m431dll") +OVL_DEFINE(OVL_M432, "m432dll") +OVL_DEFINE(OVL_M433, "m433dll") +OVL_DEFINE(OVL_M434, "m434dll") +OVL_DEFINE(OVL_M435, "m435dll") +OVL_DEFINE(OVL_M436, "m436dll") +OVL_DEFINE(OVL_M437, "m437dll") +OVL_DEFINE(OVL_M438, "m438dll") +OVL_DEFINE(OVL_M439, "m439dll") +OVL_DEFINE(OVL_M440, "m440dll") +OVL_DEFINE(OVL_M441, "m441dll") +OVL_DEFINE(OVL_M442, "m442dll") +OVL_DEFINE(OVL_M443, "m443dll") +OVL_DEFINE(OVL_M444, "m444dll") +OVL_DEFINE(OVL_M445, "m445dll") +OVL_DEFINE(OVL_M446, "m446dll") +OVL_DEFINE(OVL_M447, "m447dll") +OVL_DEFINE(OVL_M448, "m448dll") +OVL_DEFINE(OVL_M449, "m449dll") +OVL_DEFINE(OVL_M450, "m450dll") +OVL_DEFINE(OVL_M451, "m451dll") +OVL_DEFINE(OVL_M453, "m453dll") +OVL_DEFINE(OVL_M455, "m455dll") +OVL_DEFINE(OVL_M456, "m456dll") +OVL_DEFINE(OVL_M457, "m457dll") +OVL_DEFINE(OVL_M458, "m458dll") +OVL_DEFINE(OVL_M459, "m459dll") +OVL_DEFINE(OVL_M460, "m460dll") +OVL_DEFINE(OVL_M461, "m461dll") +OVL_DEFINE(OVL_M462, "m462dll") +OVL_DEFINE(OVL_M463, "m463dll") +OVL_DEFINE(OVL_MENT, "mentdll") #if VERSION_JP -OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel") -OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel") -OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel") -OVL_DEFINE(OVL_MOVIE, "dll/moviedll.rel") +OVL_DEFINE(OVL_MGMODE, "mgmodedll") +OVL_DEFINE(OVL_MODELTEST, "modeltestdll") +OVL_DEFINE(OVL_MODESEL, "modeseldll") +OVL_DEFINE(OVL_MOVIE, "moviedll") #else -OVL_DEFINE(OVL_MESS, "dll/messdll.rel") -OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel") -OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel") -OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel") +OVL_DEFINE(OVL_MESS, "messdll") +OVL_DEFINE(OVL_MGMODE, "mgmodedll") +OVL_DEFINE(OVL_MODELTEST, "modeltestdll") +OVL_DEFINE(OVL_MODESEL, "modeseldll") #endif -OVL_DEFINE(OVL_MPEX, "dll/mpexdll.rel") -OVL_DEFINE(OVL_MSETUP, "dll/msetupdll.rel") -OVL_DEFINE(OVL_MSTORY2, "dll/mstory2dll.rel") -OVL_DEFINE(OVL_MSTORY3, "dll/mstory3dll.rel") -OVL_DEFINE(OVL_MSTORY4, "dll/mstory4dll.rel") -OVL_DEFINE(OVL_MSTORY, "dll/mstorydll.rel") -OVL_DEFINE(OVL_NIS, "dll/nisdll.rel") -OVL_DEFINE(OVL_OPTION, "dll/option.rel") -OVL_DEFINE(OVL_PRESENT, "dll/present.rel") -OVL_DEFINE(OVL_RESULT, "dll/resultdll.rel") -OVL_DEFINE(OVL_SAF, "dll/safdll.rel") -OVL_DEFINE(OVL_SELMENU, "dll/selmenuDLL.rel") -OVL_DEFINE(OVL_STAFF, "dll/staffdll.rel") -OVL_DEFINE(OVL_SUBCHRSEL, "dll/subchrseldll.rel") -OVL_DEFINE(OVL_W01, "dll/w01dll.rel") -OVL_DEFINE(OVL_W02, "dll/w02dll.rel") -OVL_DEFINE(OVL_W03, "dll/w03dll.rel") -OVL_DEFINE(OVL_W04, "dll/w04dll.rel") -OVL_DEFINE(OVL_W05, "dll/w05dll.rel") -OVL_DEFINE(OVL_W06, "dll/w06dll.rel") -OVL_DEFINE(OVL_W10, "dll/w10dll.rel") -OVL_DEFINE(OVL_W20, "dll/w20dll.rel") -OVL_DEFINE(OVL_W21, "dll/w21dll.rel") -OVL_DEFINE(OVL_ZTAR, "dll/ztardll.rel") +OVL_DEFINE(OVL_MPEX, "mpexdll") +OVL_DEFINE(OVL_MSETUP, "msetupdll") +OVL_DEFINE(OVL_MSTORY2, "mstory2dll") +OVL_DEFINE(OVL_MSTORY3, "mstory3dll") +OVL_DEFINE(OVL_MSTORY4, "mstory4dll") +OVL_DEFINE(OVL_MSTORY, "mstorydll") +OVL_DEFINE(OVL_NIS, "nisdll") +OVL_DEFINE(OVL_OPTION, "option") +OVL_DEFINE(OVL_PRESENT, "present") +OVL_DEFINE(OVL_RESULT, "resultdll") +OVL_DEFINE(OVL_SAF, "safdll") +OVL_DEFINE(OVL_SELMENU, "selmenuDLL") +OVL_DEFINE(OVL_STAFF, "staffdll") +OVL_DEFINE(OVL_SUBCHRSEL, "subchrseldll") +OVL_DEFINE(OVL_W01, "w01dll") +OVL_DEFINE(OVL_W02, "w02dll") +OVL_DEFINE(OVL_W03, "w03dll") +OVL_DEFINE(OVL_W04, "w04dll") +OVL_DEFINE(OVL_W05, "w05dll") +OVL_DEFINE(OVL_W06, "w06dll") +OVL_DEFINE(OVL_W10, "w10dll") +OVL_DEFINE(OVL_W20, "w20dll") +OVL_DEFINE(OVL_W21, "w21dll") +OVL_DEFINE(OVL_ZTAR, "ztardll") diff --git a/include/port/byteswap.h b/include/port/byteswap.h new file mode 100644 index 00000000..26286fab --- /dev/null +++ b/include/port/byteswap.h @@ -0,0 +1,28 @@ +#ifndef _SRC_BYTESWAP_H_ +#define _SRC_BYTESWAP_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "game/animdata.h" +#include "game/hsfformat.h" + +void byteswap_u32(u32 *src); +void byteswap_s32(s32 *src); +void byteswap_animdata(void *src, AnimData* dest); +void byteswap_animbankdata(void *src, AnimBankData *dest); +void byteswap_animpatdata(void *src, AnimPatData *dest); +void byteswap_animbmpdata(void *src, AnimBmpData *dest); +void byteswap_animframedata(AnimFrameData *src); +void byteswap_animlayerdata(AnimLayerData *src); + + +void byteswap_hsfheader(HsfHeader *src); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/port/imgui.h b/include/port/imgui.h new file mode 100644 index 00000000..5c761fb0 --- /dev/null +++ b/include/port/imgui.h @@ -0,0 +1,18 @@ +#ifndef _SRC_IMGUI_H_ +#define _SRC_IMGUI_H_ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + void imgui_main(const AuroraInfo* info); + void frame_limiter(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/version.h b/include/version.h index 209a7d53..8a25ab40 100644 --- a/include/version.h +++ b/include/version.h @@ -21,4 +21,15 @@ #define REFRESH_RATE 60 #endif +#if _WIN32 +#ifdef TARGET_DOL +#define SHARED_SYM __declspec(dllexport) +#else +#define SHARED_SYM __declspec(dllimport) +#endif + +#else + #define SHARED_SYM +#endif + #endif diff --git a/include/ctype.h b/libc/ctype.h similarity index 100% rename from include/ctype.h rename to libc/ctype.h diff --git a/include/float.h b/libc/float.h similarity index 100% rename from include/float.h rename to libc/float.h diff --git a/include/math.h b/libc/math.h similarity index 98% rename from include/math.h rename to libc/math.h index 5ac49892..5722be26 100644 --- a/include/math.h +++ b/libc/math.h @@ -1,8 +1,6 @@ #ifndef _MATH_H #define _MATH_H -#define M_PI 3.141592653589793 - #ifndef _MATH_INLINE #define _MATH_INLINE static inline #endif diff --git a/include/stdarg.h b/libc/stdarg.h similarity index 100% rename from include/stdarg.h rename to libc/stdarg.h diff --git a/include/stddef.h b/libc/stddef.h similarity index 100% rename from include/stddef.h rename to libc/stddef.h diff --git a/include/stdint.h b/libc/stdint.h similarity index 100% rename from include/stdint.h rename to libc/stdint.h diff --git a/include/stdio.h b/libc/stdio.h similarity index 100% rename from include/stdio.h rename to libc/stdio.h diff --git a/include/stdlib.h b/libc/stdlib.h similarity index 100% rename from include/stdlib.h rename to libc/stdlib.h diff --git a/include/string.h b/libc/string.h similarity index 100% rename from include/string.h rename to libc/string.h diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index ee8b1b04..56bb9c06 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -23,7 +23,7 @@ #define HU_PAD_BTNDOWN_ALL (HuPadBtnDown[0] | HuPadBtnDown[1] | HuPadBtnDown[2] | HuPadBtnDown[3]) #define HU_PAD_DSTK_ALL (HuPadDStkRep[0] | HuPadDStkRep[1] | HuPadDStkRep[2] | HuPadDStkRep[3]) -extern int SystemInitF; +SHARED_SYM extern int SystemInitF; static omObjData *debugOutView; Process *objman; @@ -82,706 +82,763 @@ void ObjectSetup(void) #endif } -#if VERSION_PAL -s32 LanguageBootGet(void); -BOOL LanguageMenuExec(void); + #if VERSION_PAL + s32 LanguageBootGet(void); + BOOL LanguageMenuExec(void); + #endif + + void BootExec(void) + { + AnimData *data; + s16 group; + s16 sprite_nintendo; + s16 sprite_hudson; + s16 i; + OSTick tick_prev; + Process *curr = HuPrcCurrentGet(); + #if VERSION_NTSC + if (omovlevtno == 0) { + BootProgExec(); + } + #else + if(SystemInitF == FALSE) { + GwLanguage = LanguageBootGet(); + if(GwLanguage == -1) { + if(LanguageMenuExec()) { + SystemInitF = TRUE; + } + } else { + GWLanguageSet(GwLanguage); + } + } + #endif + group = HuSprGrpCreate(2); + data = HuSprAnimRead(NintendoDataDecode()); + sprite_nintendo = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite_nintendo); + HuSprPosSet(group, 0, 288, 240); + HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); + if (omovlevtno != 0) { + HuAudSndGrpSetSet(0); + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); +#ifdef __MWERKS__ + // TODO PC + HuWinInit(1); #endif - -void BootExec(void) -{ - AnimData *data; - s16 group; - s16 sprite_nintendo; - s16 sprite_hudson; - s16 i; - OSTick tick_prev; - Process *curr = HuPrcCurrentGet(); - #if VERSION_NTSC - if (omovlevtno == 0) { - BootProgExec(); - } - #else - if(SystemInitF == FALSE) { - GwLanguage = LanguageBootGet(); - if(GwLanguage == -1) { - if(LanguageMenuExec()) { - SystemInitF = TRUE; - } - } else { - GWLanguageSet(GwLanguage); - } - } - #endif - group = HuSprGrpCreate(2); - data = HuSprAnimRead(NintendoDataDecode()); - sprite_nintendo = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 0, sprite_nintendo); - HuSprPosSet(group, 0, 288, 240); - HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); - if (omovlevtno != 0) { - HuAudSndGrpSetSet(0); - data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - sprite_hudson = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite_hudson); - HuSprPosSet(group, 1, 288, 240); - HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - HuWinInit(1); - BootTitleCreate(); - SystemInitF = 1; - } - else { - s16 group_thp; - BOOL skip_wait; - float win_size[2]; - s16 sprite_thp; - for (i = 0; i < 4; i++) { - GWPlayerCfg[i].pad_idx = i; - } - #if VERSION_PAL - if(SystemInitF) { - data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - sprite_hudson = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite_hudson); - HuSprPosSet(group, 1, 288, 240); - HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - HuAudSndGrpSetSet(0); - BootTitleCreate(); - HuWinInit(1); - } - #endif - repeat: - HuSprAttrReset(group, 0, HUSPR_ATTR_DISPOFF); - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - WipeColorSet(255, 255, 255); - if (!SystemInitF) { - tick_prev = OSGetTick(); - CharManInit(); - HuWindowInit(); - MGSeqInit(); - HuWinInit(1); - BootTitleCreate(); - data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - sprite_hudson = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite_hudson); - HuSprPosSet(group, 1, 288, 240); - HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { - HuPrcVSleep(); - } - } - else { - for (i = 0; i < 180; i++) { - #if VERSION_NTSC - if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { - break; - } - #else - if (initLanguageF && (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A))) { - break; - } - #endif - HuPrcVSleep(); - } - } - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrReset(group, 1, HUSPR_ATTR_DISPOFF); - HuPrcSleep(60); - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - if (!SystemInitF) { - void *group_samp; - tick_prev = OSGetTick(); - group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); - msmSysLoadGroup(0, group_samp, 0); - HuMemDirectFree(group_samp); - while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { - HuPrcVSleep(); - } - } - else { - for (i = 0; i < 180; i++) { - #if VERSION_NTSC - if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { - break; - } - #else - if (initLanguageF && (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A))) { - break; - } - #endif - HuPrcVSleep(); - } - } - #if VERSION_PAL - initLanguageF = TRUE; - #endif - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - tick_prev = OSGetTick(); - if (!SystemInitF) { - HuAudSndGrpSetSet(0); - SystemInitF = 1; - } - while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 1000) { - HuPrcVSleep(); - } - HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - group_thp = HuSprGrpCreate(1); - sprite_thp = HuTHPSprCreateVol("movie/opmov_a00.thp", 0, 100, 122); - HuSprGrpMemberSet(group_thp, 0, sprite_thp); - HuSprPosSet(group_thp, 0, 288, 240); - HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); - demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); - HuWinMesSpeedSet(demoWinId, 0); - HuWinBGTPLvlSet(demoWinId, 0); - HuWinPriSet(demoWinId, 10); - HuWinAttrSet(demoWinId, 0x800); - HuPrcSleep(5); - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); - while (WipeStatGet()) { - HuPrcVSleep(); - } - skip_wait = FALSE; - while (!HuTHPEndCheck()) { - UpdateDemoMess(); - if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { - skip_wait = TRUE; - break; - } - HuPrcVSleep(); - } - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - HuWinKill(demoWinId); - HuTHPClose(); - HuPrcVSleep(); - HuSprGrpKill(group_thp); - if (!skip_wait) { - HuPrcSleep(60); - } - skip_wait = FALSE; - } - if (!BootTitleExec()) { - HuPrcSleep(60); - goto repeat; - } - WipeColorSet(255, 255, 255); - HuAudSStreamAllFadeOut(500); - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - HuPrcVSleep(); - if (omSysExitReq) { - omOvlReturnEx(1, 1); - } - else { - omOvlCallEx(OVL_MODESEL, 1, 0, 0); - } - for (i = 0; i < 4; i++) { - GWPlayerCfg[i].character = -1; - } - HuPrcEnd(); - do { - HuPrcVSleep(); - } while (1); -} - -static s16 demoMessTimeTbl[] = { - 1686, - 1785, - 1850, - 1936, - 1993, - 2097, - 2135, - 2245, - 2258, - 2320, - -1, - -1, -}; - -static void UpdateDemoMess(void) -{ - int frame = HuTHPFrameGet(); - int i; - for (i = 0; demoMessTimeTbl[i * 2] != -1; i++) { - if (frame == demoMessTimeTbl[i * 2]) { - HuWinMesSet(demoWinId, MAKE_MESSID(54, i)); - } - if (frame == demoMessTimeTbl[(i * 2) + 1]) { - HuWinHomeClear(demoWinId); - } - } -} - -#if VERSION_NTSC - -static u16 progPosTbl[] = { 236, 313, 353, 313 }; - -void BootProgExec(void) -{ - s16 i; - s16 option; - s16 group; - s16 sprite; - AnimData *data; - option = 0; - if (OSGetResetCode() != OS_RESET_RESTART) { - return; - } - if (VIGetDTVStatus() != VI_NON_INTERLACE) { - OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); - return; - } - if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_OFF && !(HU_PAD_BTN_ALL & PAD_BUTTON_B)) { - return; - } - if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_ON) { - VIConfigure(&GXNtsc480IntDf); - VIFlush(); - } - group = HuSprGrpCreate(3); - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 0, sprite); - HuSprPosSet(group, 0, 288, 240); - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite); - HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 2, sprite); - HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - for (i = 0; i < 600; i++) { - if (HU_PAD_DSTK_ALL & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT)) { - option ^= 1; - HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - i = 0; - } - if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { - HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF); - break; - } - HuPrcVSleep(); - } - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); - while (WipeStatGet()) { - HuPrcVSleep(); - } - if (!option) { - OSSetProgressiveMode(OS_PROGRESSIVE_MODE_ON); - VIConfigure(&GXNtsc480Prog); - VIFlush(); - HuPrcSleep(100); - } - else { - OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); - } - HuSprGrpKill(group); - group = HuSprGrpCreate(1); - if (!option) { - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); - } - else { - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); - } - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 0, sprite); - HuSprPosSet(group, 0, 288, 240); - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); - while (WipeStatGet()) { - HuPrcVSleep(); - } - HuPrcSleep(60); - for (i = 0; i < 180; i++) { - if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { - break; - } - HuPrcVSleep(); - } - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - HuSprGrpKill(group); - HuPrcSleep(30); -} - + BootTitleCreate(); + SystemInitF = 1; + } + else { + s16 group_thp; + BOOL skip_wait; + float win_size[2]; + s16 sprite_thp; + for (i = 0; i < 4; i++) { + GWPlayerCfg[i].pad_idx = i; + } + #if VERSION_PAL + if(SystemInitF) { + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + HuAudSndGrpSetSet(0); + BootTitleCreate(); + HuWinInit(1); + } + #endif + repeat: + HuSprAttrReset(group, 0, HUSPR_ATTR_DISPOFF); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + WipeColorSet(255, 255, 255); + if (!SystemInitF) { + tick_prev = OSGetTick(); +#ifdef __MWERKS__ + // TODO PC + CharManInit(); + HuWindowInit(); + MGSeqInit(); + HuWinInit(1); #endif + BootTitleCreate(); + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { + HuPrcVSleep(); + } + } + else { + for (i = 0; i < 180; i++) { + #if VERSION_NTSC + if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { + break; + } + #else + if (initLanguageF && (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A))) { + break; + } + #endif + HuPrcVSleep(); + } + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(group, 1, HUSPR_ATTR_DISPOFF); + HuPrcSleep(60); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + if (!SystemInitF) { +#ifdef __MWERKS__ + // TODO PC + void *group_samp; +#endif + tick_prev = OSGetTick(); +#ifdef __MWERKS__ + // TODO PC + group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); + msmSysLoadGroup(0, group_samp, 0); + HuMemDirectFree(group_samp); +#endif + while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { + HuPrcVSleep(); + } + } + else { + for (i = 0; i < 180; i++) { + #if VERSION_NTSC + if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { + break; + } + #else + if (initLanguageF && (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A))) { + break; + } + #endif + HuPrcVSleep(); + } + } + #if VERSION_PAL + initLanguageF = TRUE; + #endif + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + tick_prev = OSGetTick(); + if (!SystemInitF) { + HuAudSndGrpSetSet(0); + SystemInitF = 1; + } + while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 1000) { + HuPrcVSleep(); + } + HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + group_thp = HuSprGrpCreate(1); +#ifdef __MWERKS__ + // TODO PC + sprite_thp = HuTHPSprCreateVol("movie/opmov_a00.thp", 0, 100, 122); + HuSprGrpMemberSet(group_thp, 0, sprite_thp); + HuSprPosSet(group_thp, 0, 288, 240); + HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); + demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); + HuWinMesSpeedSet(demoWinId, 0); + HuWinBGTPLvlSet(demoWinId, 0); + HuWinPriSet(demoWinId, 10); + HuWinAttrSet(demoWinId, 0x800); +#endif + HuPrcSleep(5); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while (WipeStatGet()) { + HuPrcVSleep(); + } + skip_wait = FALSE; +#ifdef __MWERKS__ + // TODO PC + while (!HuTHPEndCheck()) { + UpdateDemoMess(); + if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { + skip_wait = TRUE; + break; + } + HuPrcVSleep(); + } +#endif + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } +#ifdef __MWERKS__ + // TODO PC + HuWinKill(demoWinId); + HuTHPClose(); +#endif + HuPrcVSleep(); +#ifdef __MWERKS__ + // TODO PC + HuSprGrpKill(group_thp); +#endif + if (!skip_wait) { + HuPrcSleep(60); + } + skip_wait = FALSE; + } + if (!BootTitleExec()) { + HuPrcSleep(60); + goto repeat; + } + WipeColorSet(255, 255, 255); + HuAudSStreamAllFadeOut(500); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuPrcVSleep(); + if (omSysExitReq) { + omOvlReturnEx(1, 1); + } + else { + omOvlCallEx(OVL_MODESEL, 1, 0, 0); + } + for (i = 0; i < 4; i++) { + GWPlayerCfg[i].character = -1; + } + HuPrcEnd(); + do { + HuPrcVSleep(); + } while (1); + } -static u16 debugCamTbl[] = { 1, 2 }; + static s16 demoMessTimeTbl[] = { + 1686, + 1785, + 1850, + 1936, + 1993, + 2097, + 2135, + 2245, + 2258, + 2320, + -1, + -1, + }; -void DebugCamOutView(omObjData *obj) -{ - s16 i; - for (i = 0; i < 1; i++) { - Vec pos, target, up; - float x, y, z; + static void UpdateDemoMess(void) + { + int frame = HuTHPFrameGet(); + int i; + for (i = 0; demoMessTimeTbl[i * 2] != -1; i++) { + if (frame == demoMessTimeTbl[i * 2]) { +#ifdef __MWERKS__ + // TODO PC + HuWinMesSet(demoWinId, MAKE_MESSID(54, i)); +#endif + } + if (frame == demoMessTimeTbl[(i * 2) + 1]) { +#ifdef __MWERKS__ + // TODO PC + HuWinHomeClear(demoWinId); +#endif + } + } + } - x = debugCamRot[i].x; - y = debugCamRot[i].y; - z = debugCamRot[i].z; + #if VERSION_NTSC - pos.x = (((sind(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].x); - pos.y = (-sind(x) * debugCamZoom[i]) + debugCamPos[i].y; - pos.z = ((cosd(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].z; - target.x = debugCamPos[i].x; - target.y = debugCamPos[i].y; - target.z = debugCamPos[i].z; - up.x = sind(y) * sind(x); - up.y = cosd(x); - up.z = cosd(y) * sind(x); - Hu3DCameraPosSet(debugCamTbl[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); - } -} + static u16 progPosTbl[] = { 236, 313, 353, 313 }; -void DebugCamUpdate(omObjData *obj) -{ - Vec pos; - Vec offset; - Vec dir; - Vec y_offset; + void BootProgExec(void) + { + s16 i; + s16 option; + s16 group; + s16 sprite; + AnimData *data; + option = 0; +#ifdef __MWERKS__ + if (OSGetResetCode() != OS_RESET_RESTART) { + return; + } + if (VIGetDTVStatus() != VI_NON_INTERLACE) { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); + return; + } + if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_OFF && !(HU_PAD_BTN_ALL & PAD_BUTTON_B)) { + return; + } + if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_ON) { + VIConfigure(&GXNtsc480IntDf); + VIFlush(); + } +#endif + group = HuSprGrpCreate(3); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite); + HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 2, sprite); + HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + for (i = 0; i < 600; i++) { + if (HU_PAD_DSTK_ALL & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT)) { + option ^= 1; + HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + i = 0; + } + if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF); + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet()) { + HuPrcVSleep(); + } +#ifdef __MWERKS__ + // TODO PC + if (!option) { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_ON); + VIConfigure(&GXNtsc480Prog); + VIFlush(); + HuPrcSleep(100); + } + else { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); + } +#endif + HuSprGrpKill(group); + group = HuSprGrpCreate(1); + if (!option) { + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); + } + else { + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); + } + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuPrcSleep(60); + for (i = 0; i < 180; i++) { + if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuSprGrpKill(group); + HuPrcSleep(30); + } - f32 z_rot; - s8 stick_pos; + #endif + + static u16 debugCamTbl[] = { 1, 2 }; + + void DebugCamOutView(omObjData *obj) + { + s16 i; + for (i = 0; i < 1; i++) { + Vec pos, target, up; + float x, y, z; + + x = debugCamRot[i].x; + y = debugCamRot[i].y; + z = debugCamRot[i].z; + + pos.x = (((sind(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].x); + pos.y = (-sind(x) * debugCamZoom[i]) + debugCamPos[i].y; + pos.z = ((cosd(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].z; + target.x = debugCamPos[i].x; + target.y = debugCamPos[i].y; + target.z = debugCamPos[i].z; + up.x = sind(y) * sind(x); + up.y = cosd(x); + up.z = cosd(y) * sind(x); + Hu3DCameraPosSet(debugCamTbl[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + } + } + + #ifdef __MWERKS__ + void DebugCamUpdate(omObjData *obj) + { + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + f32 z_rot; + s8 stick_pos; + #if VERSION_NTSC + if ((HuPadBtnDown[0] & 0x800)) { + debugCamOnF = (debugCamOnF) ? 0 : 1; + } + #endif + if (debugCamOnF != 0) { + debugCamRot[0].y += 0.1f * HuPadStkX[0]; + debugCamRot[0].x += 0.1f * HuPadStkY[0]; + debugCamZoom[0] += HuPadTrigL[0] / 2; + debugCamZoom[0] -= HuPadTrigR[0] / 2; + if (debugCamZoom[0] < 100.0f) { + debugCamZoom[0] = 100.0f; + } + pos.x = debugCamPos[0].x + (debugCamZoom[0] * (sind(debugCamRot[0].y) * cosd(debugCamRot[0].x))); + pos.y = (debugCamPos[0].y + (debugCamZoom[0] * -sind(debugCamRot[0].x))); + pos.z = (debugCamPos[0].z + (debugCamZoom[0] * (cosd(debugCamRot[0].y) * cosd(debugCamRot[0].x)))); + offset.x = debugCamPos[0].x - pos.x; + offset.y = debugCamPos[0].y - pos.y; + offset.z = debugCamPos[0].z - pos.z; + dir.x = (sind(debugCamRot[0].y) * sind(debugCamRot[0].x)); + dir.y = cosd(debugCamRot[0].x); + dir.z = (cosd(debugCamRot[0].y) * sind(debugCamRot[0].x)); + z_rot = debugCamRot[0].z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); + + VECCrossProduct(&dir, &offset, &offset); + VECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + debugCamPos[0].x += 0.05f * (offset.x * stick_pos); + debugCamPos[0].y += 0.05f * (offset.y * stick_pos); + debugCamPos[0].z += 0.05f * (offset.z * stick_pos); + } + VECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + debugCamPos[0].x += 0.05f * (offset.x * stick_pos); + debugCamPos[0].y += 0.05f * (offset.y * stick_pos); + debugCamPos[0].z += 0.05f * (offset.z * stick_pos); + } + } + } +#endif + + void BootTitleCreate(void) + { + s16 model; + s16 sprite; + AnimData *sprite_data; + s16 i; +#ifdef __MWERKS__ + // TODO PC + titleMdlId[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); + Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); + titleMdlId[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); + Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); + titleMdlId[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); + Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); + Hu3DModelCameraInfoSet(model, 1); + Hu3DModelLightInfoSet(model, 1); +#endif + #if VERSION_NTSC + bootGrpId = HuSprGrpCreate(4); + #else + bootGrpId = HuSprGrpCreate(13); + #endif + sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 0, sprite); + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprDrawNoSet(bootGrpId, 0, 127); + HuSprPosSet(bootGrpId, 0, 288, 240); + sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); + sprite = HuSprCreate(sprite_data, 1, 0); + HuSprGrpMemberSet(bootGrpId, 1, sprite); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprPosSet(bootGrpId, 1, 288, 420); #if VERSION_NTSC - if ((HuPadBtnDown[0] & 0x800)) { - debugCamOnF = (debugCamOnF) ? 0 : 1; - } - #endif - if (debugCamOnF != 0) { - debugCamRot[0].y += 0.1f * HuPadStkX[0]; - debugCamRot[0].x += 0.1f * HuPadStkY[0]; - debugCamZoom[0] += HuPadTrigL[0] / 2; - debugCamZoom[0] -= HuPadTrigR[0] / 2; - if (debugCamZoom[0] < 100.0f) { - debugCamZoom[0] = 100.0f; - } - pos.x = debugCamPos[0].x + (debugCamZoom[0] * (sind(debugCamRot[0].y) * cosd(debugCamRot[0].x))); - pos.y = (debugCamPos[0].y + (debugCamZoom[0] * -sind(debugCamRot[0].x))); - pos.z = (debugCamPos[0].z + (debugCamZoom[0] * (cosd(debugCamRot[0].y) * cosd(debugCamRot[0].x)))); - offset.x = debugCamPos[0].x - pos.x; - offset.y = debugCamPos[0].y - pos.y; - offset.z = debugCamPos[0].z - pos.z; - dir.x = (sind(debugCamRot[0].y) * sind(debugCamRot[0].x)); - dir.y = cosd(debugCamRot[0].x); - dir.z = (cosd(debugCamRot[0].y) * sind(debugCamRot[0].x)); - z_rot = debugCamRot[0].z; - y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) - + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) - + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); - - y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) - + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) - + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); - - y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) - + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) - + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); - - VECCrossProduct(&dir, &offset, &offset); - VECNormalize(&offset, &offset); - stick_pos = (HuPadSubStkX[0] & 0xF8); - if (stick_pos != 0) { - debugCamPos[0].x += 0.05f * (offset.x * stick_pos); - debugCamPos[0].y += 0.05f * (offset.y * stick_pos); - debugCamPos[0].z += 0.05f * (offset.z * stick_pos); - } - VECNormalize(&y_offset, &offset); - stick_pos = -(HuPadSubStkY[0] & 0xF8); - if (stick_pos != 0) { - debugCamPos[0].x += 0.05f * (offset.x * stick_pos); - debugCamPos[0].y += 0.05f * (offset.y * stick_pos); - debugCamPos[0].z += 0.05f * (offset.z * stick_pos); - } - } -} - -void BootTitleCreate(void) -{ - s16 model; - s16 sprite; - AnimData *sprite_data; - s16 i; - titleMdlId[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); - Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); - titleMdlId[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); - Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); - titleMdlId[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); - Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); - Hu3DModelCameraInfoSet(model, 1); - Hu3DModelLightInfoSet(model, 1); - #if VERSION_NTSC - bootGrpId = HuSprGrpCreate(4); - #else - bootGrpId = HuSprGrpCreate(13); - #endif - sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); - sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(bootGrpId, 0, sprite); - HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - HuSprDrawNoSet(bootGrpId, 0, 127); - HuSprPosSet(bootGrpId, 0, 288, 240); - sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); - sprite = HuSprCreate(sprite_data, 1, 0); - HuSprGrpMemberSet(bootGrpId, 1, sprite); - HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - HuSprPosSet(bootGrpId, 1, 288, 420); - #if VERSION_NTSC - sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); - sprite = HuSprCreate(sprite_data, 2, 0); - HuSprGrpMemberSet(bootGrpId, 2, sprite); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 2, 288, 380); - sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); - sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(bootGrpId, 3, sprite); - HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 3, 288, 200); - #else - sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); - sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(bootGrpId, 2, sprite); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 2, 288, 200); - for(i=0; i<5; i++) { + sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); + sprite = HuSprCreate(sprite_data, 2, 0); + HuSprGrpMemberSet(bootGrpId, 2, sprite); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 2, 288, 380); + sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 3, sprite); + HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 3, 288, 200); + #else + sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 2, sprite); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 2, 288, 200); + for(i=0; i<5; i++) { sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_EN_ANM+i); sprite = HuSprCreate(sprite_data, 3+i, 0); HuSprGrpMemberSet(bootGrpId, 3+i, sprite); HuSprAttrSet(bootGrpId, 3+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); HuSprPosSet(bootGrpId, 3+i, 288, 340); - } - for(i=0; i<5; i++) { - sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); - sprite = HuSprCreate(sprite_data, 8+i, 0); - HuSprGrpMemberSet(bootGrpId, 8+i, sprite); - HuSprAttrSet(bootGrpId, 8+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 8+i, 288, 380); - } - #endif -} + } + for(i=0; i<5; i++) { + sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); + sprite = HuSprCreate(sprite_data, 8+i, 0); + HuSprGrpMemberSet(bootGrpId, 8+i, sprite); + HuSprAttrSet(bootGrpId, 8+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 8+i, 288, 380); + } + #endif + } -BOOL BootTitleExec(void) -{ - float scale; - float scale_time; - int seNo[32]; - s16 pressStartMemberNo; - s16 languageMemberNo; - s16 i; - s16 choice; - float temp; - repeat: - Hu3DModelAttrReset(titleMdlId[0], HU3D_ATTR_DISPOFF); - Hu3DModelAttrReset(titleMdlId[1], HU3D_ATTR_DISPOFF); - HuSprAttrReset(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrReset(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); - OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); - HuAudSStreamPlay(20); - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - #if VERSION_NTSC - HuSprAttrReset(bootGrpId, 3, HUSPR_ATTR_DISPOFF); - for (i = 1; i <= 50; i++) { - scale = (cosd(i * 1.8) * 10.0) + 1.0; - HuSprScaleSet(bootGrpId, 3, scale, scale); - HuSprTPLvlSet(bootGrpId, 3, i / 50.0); - HuPrcVSleep(); - } - HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - #else - HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - for (i = 1; i <= 50; i++) { - scale = (cosd(i * 1.8) * 10.0) + 1.0; - HuSprScaleSet(bootGrpId, 2, scale, scale); - HuSprTPLvlSet(bootGrpId, 2, i / 50.0); - HuPrcVSleep(); - } - if(GwLanguage == -1) { - pressStartMemberNo = 3; - languageMemberNo = 8; - } else { - pressStartMemberNo = GwLanguage+3-1; - languageMemberNo = GwLanguage+8-1; - } - HuSprAttrReset(bootGrpId, pressStartMemberNo, HUSPR_ATTR_DISPOFF); - HuSprAttrReset(bootGrpId, languageMemberNo, HUSPR_ATTR_DISPOFF); - for(i=1; i<=20; i++) { - scale = sind(i*4.5); - HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); - HuSprScaleSet(bootGrpId, languageMemberNo, scale*0.7, scale*0.7); - HuPrcVSleep(); - } - choice = 0; - scale_time = 0; - #endif + BOOL BootTitleExec(void) + { + float scale; + float scale_time; + int seNo[32]; + s16 pressStartMemberNo; + s16 languageMemberNo; + s16 i; + s16 choice; + float temp; + repeat: +#ifdef __MWERKS__ + // TODO PC + Hu3DModelAttrReset(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(titleMdlId[1], HU3D_ATTR_DISPOFF); +#endif + HuSprAttrReset(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, 1, HUSPR_ATTR_DISPOFF); +#ifdef __MWERKS__ + // TODO PC + OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); + OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); + HuAudSStreamPlay(20); +#endif + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + #if VERSION_NTSC + HuSprAttrReset(bootGrpId, 3, HUSPR_ATTR_DISPOFF); + for (i = 1; i <= 50; i++) { + scale = (cosd(i * 1.8) * 10.0) + 1.0; + HuSprScaleSet(bootGrpId, 3, scale, scale); + HuSprTPLvlSet(bootGrpId, 3, i / 50.0); + HuPrcVSleep(); + } + HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + #else + HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for (i = 1; i <= 50; i++) { + scale = (cosd(i * 1.8) * 10.0) + 1.0; + HuSprScaleSet(bootGrpId, 2, scale, scale); + HuSprTPLvlSet(bootGrpId, 2, i / 50.0); + HuPrcVSleep(); + } + if(GwLanguage == -1) { + pressStartMemberNo = 3; + languageMemberNo = 8; + } else { + pressStartMemberNo = GwLanguage+3-1; + languageMemberNo = GwLanguage+8-1; + } + HuSprAttrReset(bootGrpId, pressStartMemberNo, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, languageMemberNo, HUSPR_ATTR_DISPOFF); + for(i=1; i<=20; i++) { + scale = sind(i*4.5); + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + HuSprScaleSet(bootGrpId, languageMemberNo, scale*0.7, scale*0.7); + HuPrcVSleep(); + } + choice = 0; + scale_time = 0; + #endif - #if VERSION_NTSC - for (i = scale_time = 0; i < 1800; i++) { - #else - for (i = temp = 0; i < 1800; i++) { - #endif - #if VERSION_PAL - if((choice == 0 && (HuPadDStkRep[0] & PAD_BUTTON_DOWN)) || (choice != 0 && (HuPadDStkRep[0] & PAD_BUTTON_UP))) { - HuAudFXPlay(0); - for(i=1; i<=10; i++) { - scale = ((1-(i/10.0))*(((cosd(scale_time)*0.1)+0.9)-0.7))+0.7; - if(choice == 0) { - HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); - } else { - HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); - } - scale = ((1-(i/10.0))*(((cosd(scale_time/3.0)*0.05)+0.65)-1.0))+1.0; - if(choice == 0) { - HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); - } else { - HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); - } - HuPrcVSleep(); - } - choice ^= 1; - scale_time = 0; - } - if (HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { - if(choice == 0) { - s32 ret = HuAudFXPlay(2092); - if (ret < 0) { - OSReport(">>>>>Error %d\n", ret); - } - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - return 1; - } else { - HuAudFXPlay(1); - HuAudSStreamAllFadeOut(500); - WipeColorSet(255, 255, 255); - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - for(i=0; i<5; i++) { - HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); - } - for(i=0; i<5; i++) { - HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); - } - LanguageMenuExec(); - Hu3DModelCameraInfoSet(titleMdlId[2], 1); - Hu3DModelLightInfoSet(titleMdlId[2], 1); - HuWinInit(1); - goto repeat; - } - } - scale = (cosd(scale_time) * 0.1) + 0.9; - if(choice == 0) { - HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); - } else { - HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); - } - scale = (cosd(scale_time/3.0) * 0.05) + 0.65; - if(choice == 0) { - HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); - } else { - HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); - } - scale_time += 5; - HuPrcVSleep(); - #else - if (i <= 10) { - HuSprTPLvlSet(bootGrpId, 2, i / 10.0); - } - if (HuPadBtnDown[0] & PAD_BUTTON_START) { - s32 ret = HuAudFXPlay(2092); - if (ret < 0) { - OSReport(">>>>>Error %d\n", ret); - } - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - return 1; - } - scale = (sind(i * scale_time) * 0.1) + 0.9; - scale_time += 0.05; - if (scale_time > 5) { - scale_time = 5; - } - HuSprScaleSet(bootGrpId, 2, scale, scale); - HuPrcVSleep(); - #endif + #if VERSION_NTSC + for (i = scale_time = 0; i < 1800; i++) { + #else + for (i = temp = 0; i < 1800; i++) { + #endif + #if VERSION_PAL + if((choice == 0 && (HuPadDStkRep[0] & PAD_BUTTON_DOWN)) || (choice != 0 && (HuPadDStkRep[0] & PAD_BUTTON_UP))) { + HuAudFXPlay(0); + for(i=1; i<=10; i++) { + scale = ((1-(i/10.0))*(((cosd(scale_time)*0.1)+0.9)-0.7))+0.7; + if(choice == 0) { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } + scale = ((1-(i/10.0))*(((cosd(scale_time/3.0)*0.05)+0.65)-1.0))+1.0; + if(choice == 0) { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } + HuPrcVSleep(); + } + choice ^= 1; + scale_time = 0; + } + if (HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { + if(choice == 0) { + s32 ret = HuAudFXPlay(2092); + if (ret < 0) { + OSReport(">>>>>Error %d\n", ret); + } + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + return 1; + } else { + HuAudFXPlay(1); + HuAudSStreamAllFadeOut(500); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); + } + LanguageMenuExec(); + Hu3DModelCameraInfoSet(titleMdlId[2], 1); + Hu3DModelLightInfoSet(titleMdlId[2], 1); + HuWinInit(1); + goto repeat; + } + } + scale = (cosd(scale_time) * 0.1) + 0.9; + if(choice == 0) { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } + scale = (cosd(scale_time/3.0) * 0.05) + 0.65; + if(choice == 0) { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } + scale_time += 5; + HuPrcVSleep(); + #else + if (i <= 10) { + HuSprTPLvlSet(bootGrpId, 2, i / 10.0); + } + if (HuPadBtnDown[0] & PAD_BUTTON_START) { + s32 ret = HuAudFXPlay(2092); + if (ret < 0) { + OSReport(">>>>>Error %d\n", ret); + } + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + return 1; + } + scale = (sind(i * scale_time) * 0.1) + 0.9; + scale_time += 0.05; + if (scale_time > 5) { + scale_time = 5; + } + HuSprScaleSet(bootGrpId, 2, scale, scale); + HuPrcVSleep(); + #endif - } - WipeColorSet(255, 255, 255); - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); - while (WipeStatGet()) { - HuPrcVSleep(); - } - Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); - #if VERSION_NTSC - HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF); - #else - HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); - for(i=0; i<5; i++) { - HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); - } - for(i=0; i<5; i++) { - HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); - } - #endif - return 0; -} + } + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } +#ifdef __MWERKS__ + // TODO PC + Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); +#endif + #if VERSION_NTSC + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF); + #else + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); + } + #endif + return 0; + } -#include "nintendoData.inc" + #include "nintendoData.inc" -void *NintendoDataDecode(void) -{ - u32 *src = (u32 *)nintendoData; - u32 size = *src++; - void *dst = HuMemDirectMalloc(HEAP_DATA, size); - int decode_type = *src++; - if(dst) { - HuDecodeData(src, dst, size, decode_type); - } - return dst; -} + void *NintendoDataDecode(void) + { + u32 *src = (u32 *)nintendoData; + u32 size = *src++; + void *dst; + s32 decode_type; +#ifdef TARGET_PC + byteswap_u32(&size); +#endif + dst = HuMemDirectMalloc(HEAP_DATA, size); + decode_type = *src++; +#ifdef TARGET_PC + byteswap_s32(&decode_type); +#endif + if(dst) { + HuDecodeData(src, dst, size, decode_type); + } + return dst; + } diff --git a/src/REL/instDll/main.c b/src/REL/instDll/main.c index 5d7b064c..4208e8ca 100644 --- a/src/REL/instDll/main.c +++ b/src/REL/instDll/main.c @@ -1180,4 +1180,7 @@ static void ShadowDraw(ModelData *model, Mtx mtx) GXPosition3f32(2000.0f, 0, 2000.0f); GXPosition3f32(-2000.0f, 0, 2000.0f); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&tex); +#endif } diff --git a/src/REL/m404Dll/main.c b/src/REL/m404Dll/main.c index ba9e9ca0..e11038f1 100644 --- a/src/REL/m404Dll/main.c +++ b/src/REL/m404Dll/main.c @@ -1308,6 +1308,9 @@ void fn_1_58E4(ModelData *modelData, Mtx arg1) GXSetTevColor(GX_TEVREG0, sp14); GXCallDisplayList(var_r31->unk_44, var_r31->unk_48); } +#ifdef TARGET_PC + GXDestroyTexObj(&sp3C); +#endif } AnimData *fn_1_5D64(u16 sizeX, u16 sizeY, s32 arg2) diff --git a/src/REL/m405Dll/main.c b/src/REL/m405Dll/main.c index 0eade3f2..94ab2c63 100755 --- a/src/REL/m405Dll/main.c +++ b/src/REL/m405Dll/main.c @@ -1002,12 +1002,15 @@ void fn_1_37A4(ModelData *arg0, Mtx arg1) GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_RGBA6, 0); - GXSetArray(GX_VA_POS, lbl_1_bss_5AC.unk14, 0xC); + GXSETARRAY(GX_VA_POS, lbl_1_bss_5AC.unk14, 900 * sizeof(Vec), sizeof(Vec)); GXSetCullMode(GX_CULL_BACK); GXCallDisplayList(lbl_1_bss_5AC.unk24, lbl_1_bss_5AC.unk28); GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&spC); +#endif } void fn_1_3F1C(ModelData *arg0, Mtx arg1) @@ -1077,6 +1080,9 @@ void fn_1_4024(ModelData *arg0, Mtx arg1) GXPosition3f32(600.0f, -2.0f, 1250.0f); GXPosition3f32(-600.0f, -2.0f, 1250.0f); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&sp18); +#endif } void fn_1_4700(ModelData *arg0, Mtx arg1) diff --git a/src/REL/m406Dll/map.c b/src/REL/m406Dll/map.c index e995e73a..d91ac7d3 100644 --- a/src/REL/m406Dll/map.c +++ b/src/REL/m406Dll/map.c @@ -1111,19 +1111,19 @@ void fn_1_45BC(ModelData *arg0, Mtx arg1) GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXSetArray(GX_VA_POS, var_r31->unk_84, sizeof(Vec)); + GXSETARRAY(GX_VA_POS, var_r31->unk_84, var_r31->unk_80 * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); - GXSetArray(GX_VA_NRM, var_r31->unk_88, sizeof(Vec)); + GXSETARRAY(GX_VA_NRM, var_r31->unk_88, var_r31->unk_80 * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GXSetArray(GX_VA_CLR0, var_r31->unk_90, 4); + GXSETARRAY(GX_VA_CLR0, var_r31->unk_90, var_r31->unk_80 * sizeof(GXColor), sizeof(GXColor)); GXCallDisplayList(var_r31->unk_A4, var_r31->unk_A0); for (var_r30 = 1; var_r30 < 29; var_r30++) { var_r29 = var_r30 * 35; - GXSetArray(GX_VA_POS, &var_r31->unk_84[var_r29], sizeof(Vec)); - GXSetArray(GX_VA_NRM, &var_r31->unk_88[var_r29], sizeof(Vec)); - GXSetArray(GX_VA_CLR0, &var_r31->unk_90[var_r29], sizeof(GXColor)); + GXSETARRAY(GX_VA_POS, &var_r31->unk_84[var_r29], 35 * sizeof(Vec), sizeof(Vec)); + GXSETARRAY(GX_VA_NRM, &var_r31->unk_88[var_r29], 35 * sizeof(Vec), sizeof(Vec)); + GXSETARRAY(GX_VA_CLR0, &var_r31->unk_90[var_r29], 35 * sizeof(GXColor), sizeof(GXColor)); GXCallDisplayList(var_r31->unk_A4, var_r31->unk_A0); } } @@ -2956,7 +2956,7 @@ void fn_1_BC18(ModelData *arg0, float (*arg1)[4]) if (HmfInverseMtxF3X3(arg1, sp128) == 0) { MTXIdentity(sp128); } - PSMTXReorder(sp128, sp8); + MTXReorder(sp128, sp8); if (var_r31->unk_4C) { var_r18 = var_r31->unk_4C; var_r18(arg0, var_r31, arg1); @@ -2964,7 +2964,7 @@ void fn_1_BC18(ModelData *arg0, float (*arg1)[4]) var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; var_r28 = var_r31->unk_44; - PSMTXROMultVecArray(sp8, lbl_1_data_8E0, &sp38[0], 4); + MTXROMultVecArray(sp8, lbl_1_data_8E0, &sp38[0], 4); for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) { if (!var_r29->unk_28) { var_r30->x = var_r30->y = var_r30->z = 0.0f; @@ -3169,7 +3169,7 @@ void fn_1_C86C(ModelData *arg0, Mtx arg1) if (HmfInverseMtxF3X3(arg1, sp9C) == 0) { MTXIdentity(sp9C); } - PSMTXReorder(sp9C, spC); + MTXReorder(sp9C, spC); if (var_r31->unk_4C) { var_r23 = var_r31->unk_4C; var_r23(arg0, var_r31, arg1); @@ -3177,7 +3177,7 @@ void fn_1_C86C(ModelData *arg0, Mtx arg1) var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; sp8 = var_r31->unk_44; - PSMTXROMultVecArray(spC, lbl_1_data_930, (Vec *)sp3C, 4); + MTXROMultVecArray(spC, lbl_1_data_930, (Vec *)sp3C, 4); for (var_r25 = 0; var_r25 < var_r31->unk_26; var_r25++, var_r29++) { if (!var_r29->unk_28) { var_r30->x = var_r30->y = var_r30->z = 0.0f; diff --git a/src/REL/m407dll/player.c b/src/REL/m407dll/player.c index 0557ca80..4e649770 100644 --- a/src/REL/m407dll/player.c +++ b/src/REL/m407dll/player.c @@ -8,7 +8,7 @@ #include "game/objsub.h" #include "game/pad.h" #include "game/process.h" -#include "math.h" +#include "ext_math.h" #include "REL/m407dll.h" diff --git a/src/REL/m408Dll/stage.c b/src/REL/m408Dll/stage.c index 71b8bafd..12c93d3d 100644 --- a/src/REL/m408Dll/stage.c +++ b/src/REL/m408Dll/stage.c @@ -1138,6 +1138,10 @@ void fn_1_10830(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3) GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1); } GXLoadTexObj(&sp1C, arg3); +#ifdef TARGET_PC + GXDestroyTexObj(&sp1C); + GXDestroyTlutObj(&sp10); +#endif } #define SET_TEVCOLOR_ALPHA(reg, color_var, value) \ diff --git a/src/REL/m409Dll/main.c b/src/REL/m409Dll/main.c index 70955a13..9913f787 100644 --- a/src/REL/m409Dll/main.c +++ b/src/REL/m409Dll/main.c @@ -1385,7 +1385,7 @@ void fn_1_602C(ModelData *arg0, f32 (*arg1)[4]) GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8); fn_1_40A4(arg1, sp128); - PSMTXReorder(sp128, spF8); + MTXReorder(sp128, spF8); if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) { var_r23 = temp_r30->unkC; var_r23(arg0, temp_r30, arg1); @@ -1393,7 +1393,7 @@ void fn_1_602C(ModelData *arg0, f32 (*arg1)[4]) var_r29 = temp_r30->unk18; var_r31 = temp_r30->unk1C; var_r26 = temp_r30->unk20; - PSMTXROMultVecArray(spF8, &temp_r30->unk2C, &sp68[0], 4); + MTXROMultVecArray(spF8, &temp_r30->unk2C, &sp68[0], 4); for (var_r25 = 0; var_r25 < temp_r30->unk0; var_r25++, var_r29++, var_r26 += 4) { if (var_r29->unk4E == 0) { diff --git a/src/REL/m410Dll/player.c b/src/REL/m410Dll/player.c index 3286d2c0..f84d75ca 100644 --- a/src/REL/m410Dll/player.c +++ b/src/REL/m410Dll/player.c @@ -1144,4 +1144,7 @@ void fn_1_B140(ModelData *arg0, Mtx arg1) GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); } +#ifdef TARGET_PC + GXDestroyTexObj(&sp14); +#endif } diff --git a/src/REL/m416Dll/map.c b/src/REL/m416Dll/map.c index ea6a46bd..383cee5e 100644 --- a/src/REL/m416Dll/map.c +++ b/src/REL/m416Dll/map.c @@ -278,6 +278,9 @@ void fn_1_89BC(ModelData *model, Mtx mtx) GXTexCoord2f32(0, 1); GXEnd(); fn_1_8904(lbl_1_bss_1180, GX_FALSE); +#ifdef TARGET_PC + GXDestroyTexObj(&sp14); +#endif } void fn_1_8EA0(void) diff --git a/src/REL/m417Dll/water.c b/src/REL/m417Dll/water.c index 85cdcaea..e32b89f8 100644 --- a/src/REL/m417Dll/water.c +++ b/src/REL/m417Dll/water.c @@ -574,8 +574,8 @@ void fn_1_4E64(omObjData *object) MTXScale(spC8, var_f31, var_f31, var_f31 * var_r31->unk_28); MTXConcat(sp68, spC8, sp98); MTXInverse(sp98, spC8); - PSMTXReorder(spC8, sp38); - PSMTXROMultVecArray(sp38, lbl_1_bss_178.unk_2C, lbl_1_bss_178.unk_34, lbl_1_bss_178.unk_18); + MTXReorder(spC8, sp38); + MTXROMultVecArray(sp38, lbl_1_bss_178.unk_2C, lbl_1_bss_178.unk_34, lbl_1_bss_178.unk_18); sp2C.x = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * sind(var_r31->unk_10)); sp2C.y = 0.0f; sp2C.z = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * cosd(var_r31->unk_10)); @@ -866,6 +866,9 @@ void fn_1_604C(ModelData *arg0, Mtx arg1) GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE2); GXSetTevDirect(GX_TEVSTAGE3); +#ifdef TARGET_PC + GXDestroyTexObj(&sp18); +#endif } void fn_1_6B04(ModelData *model, Mtx arg1) diff --git a/src/REL/m419Dll/main.c b/src/REL/m419Dll/main.c index dd58a28a..0dc053ba 100755 --- a/src/REL/m419Dll/main.c +++ b/src/REL/m419Dll/main.c @@ -323,6 +323,10 @@ void fn_1_AD0(s16 arg0) GXPosition3f32(lbl_1_bss_0[arg0].x, lbl_1_bss_0[arg0].y + 192.0f, 0.0f); GXTexCoord2f32(0.0f, 1.0f); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&sp58); + GXDestroyTexObj(&sp38); +#endif } void fn_1_F58(void) diff --git a/src/REL/m421Dll/player.c b/src/REL/m421Dll/player.c index ce14a94c..db7f98ee 100644 --- a/src/REL/m421Dll/player.c +++ b/src/REL/m421Dll/player.c @@ -1825,4 +1825,7 @@ void fn_1_ABDC(ModelData *model, Mtx matrix) GXColor1x8(1); } } +#ifdef TARGET_PC + GXDestroyTexObj(&sp8); +#endif } diff --git a/src/REL/m423Dll/main.c b/src/REL/m423Dll/main.c index 4590b4a0..1432ff5c 100755 --- a/src/REL/m423Dll/main.c +++ b/src/REL/m423Dll/main.c @@ -4497,6 +4497,9 @@ void fn_1_EF44(ModelData *arg0, Mtx arg1) } GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); +#ifdef TARGET_PC + GXDestroyTexObj(&sp14); +#endif } s32 fn_1_F574(Vec arg0, float arg1, s32 arg2) @@ -4911,6 +4914,9 @@ void fn_1_11008(StructBssD0Data *arg0, void *arg1, s16 arg2, GXTexWrapMode arg3, GXInitTexObjLOD(&sp18, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); } GXLoadTexObj(&sp18, arg2); +#ifdef TARGET_PC + GXDestroyTexObj(&sp18); +#endif } s16 fn_1_11114(AnimData *arg0, s16 arg1) @@ -5148,7 +5154,7 @@ void fn_1_11900(ModelData *arg0, Mtx arg1) if (HmfInverseMtxF3X3(arg1, sp128) == 0) { MTXIdentity(sp128); } - PSMTXReorder(sp128, sp8); + MTXReorder(sp128, sp8); if (temp_r31->unk4C) { var_r18 = temp_r31->unk4C; var_r18(arg0, temp_r31, arg1); @@ -5156,7 +5162,7 @@ void fn_1_11900(ModelData *arg0, Mtx arg1) var_r29 = temp_r31->unk3C; var_r30 = temp_r31->unk40; var_r28 = temp_r31->unk44; - PSMTXROMultVecArray(sp8, lbl_1_data_8C4, sp38, 4); + MTXROMultVecArray(sp8, lbl_1_data_8C4, sp38, 4); for (i = 0; i < temp_r31->unk26; i++, var_r29++) { if (!var_r29->unk30) { var_r30->x = var_r30->y = var_r30->z = 0.0f; diff --git a/src/REL/m425Dll/thwomp.c b/src/REL/m425Dll/thwomp.c index 3f02dce6..02278006 100644 --- a/src/REL/m425Dll/thwomp.c +++ b/src/REL/m425Dll/thwomp.c @@ -2131,7 +2131,7 @@ void fn_1_101C4(ModelData *var_r29, Mtx var_r28) if (HmfInverseMtxF3X3(var_r28, sp50) == 0) { MTXIdentity(sp50); } - PSMTXReorder(sp50, sp20); + MTXReorder(sp50, sp20); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); @@ -2694,7 +2694,7 @@ void fn_1_11EE0(ModelData *var_r24, Mtx var_r21) if (HmfInverseMtxF3X3(var_r21, sp128) == 0) { MTXIdentity(sp128); } - PSMTXReorder(sp128, &sp8[0]); + MTXReorder(sp128, &sp8[0]); if (var_r31->unk_4C) { var_r18 = var_r31->unk_4C; var_r18(var_r24, var_r31, var_r21); @@ -2702,7 +2702,7 @@ void fn_1_11EE0(ModelData *var_r24, Mtx var_r21) var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; var_r26 = var_r31->unk_44; - PSMTXROMultVecArray(sp8, lbl_1_data_19C, &sp38[0], 4); + MTXROMultVecArray(sp8, lbl_1_data_19C, &sp38[0], 4); for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) { if (!var_r29->unk_28) { var_r30->x = var_r30->y = var_r30->z = 0.0f; diff --git a/src/REL/m426Dll/main.c b/src/REL/m426Dll/main.c index 9a80a823..88ce4890 100644 --- a/src/REL/m426Dll/main.c +++ b/src/REL/m426Dll/main.c @@ -3045,7 +3045,7 @@ void fn_1_80DC(ModelData *arg0, Mtx arg1) if (!HmfInverseMtxF3X3(arg1, sp128)) { MTXIdentity(sp128); } - PSMTXReorder(sp128, sp8); + MTXReorder(sp128, sp8); if (var_r31->unk_4C) { var_r18 = var_r31->unk_4C; var_r18(arg0, var_r31, arg1); @@ -3053,7 +3053,7 @@ void fn_1_80DC(ModelData *arg0, Mtx arg1) var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; var_r26 = var_r31->unk_44; - PSMTXROMultVecArray(sp8, lbl_1_data_22C, &sp38[0], 4); + MTXROMultVecArray(sp8, lbl_1_data_22C, &sp38[0], 4); for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) { if (!var_r29->unk_28) { var_r30->x = var_r30->y = var_r30->z = 0.0f; @@ -3135,7 +3135,7 @@ void fn_1_88B4(ModelData *arg0, Mtx arg1) var_f27 = var_r30->pos.y - arg0->pos.y; var_f30 = var_r30->pos.z - arg0->pos.z; var_f26 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); - arg0->rot.x = (atan2d(var_f26, var_f27)) - 90.0; + arg0->rot.x = (atan2d(var_f26, var_f27))-90.0; arg0->rot.y = atan2d(var_f31, var_f30); var_r29 = arg0->unk_120; GXLoadPosMtxImm(arg1, 0); diff --git a/src/REL/m427Dll/map.c b/src/REL/m427Dll/map.c index fa191ed6..dc67c7c1 100644 --- a/src/REL/m427Dll/map.c +++ b/src/REL/m427Dll/map.c @@ -1076,6 +1076,9 @@ void fn_1_618C(ModelData *arg0, Mtx arg1) GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&sp14); +#endif } s32 lbl_1_data_FC[0xC] = { @@ -2443,6 +2446,9 @@ void fn_1_B3CC(ModelData *model, Mtx matrix) GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&sp44); +#endif } void fn_1_BD2C(ModelData *model, Mtx matrix) @@ -3028,7 +3034,7 @@ void fn_1_DCD4(ModelData *model, Mtx matrix) sp128[0][3] = 0.0f; sp128[1][3] = 0.0f; sp128[2][3] = 0.0f; - PSMTXReorder(sp128, spF8); + MTXReorder(sp128, spF8); if ((omPauseChk() == 0) && (var_r30->unk_0C)) { var_r23 = var_r30->unk_0C; var_r23(model, var_r30, matrix); @@ -3036,7 +3042,7 @@ void fn_1_DCD4(ModelData *model, Mtx matrix) var_r29 = var_r30->unk_18; var_r31 = var_r30->unk_1C; var_r26 = var_r30->unk_20; - PSMTXROMultVecArray(spF8, &var_r30->unk_2C, sp68, 4); + MTXROMultVecArray(spF8, &var_r30->unk_2C, sp68, 4); for (var_r25 = 0; var_r25 < var_r30->unk_00; var_r25++, var_r29++, var_r26 += 4) { if (var_r29->unk_62 == 0) { var_r31->x = var_r31->y = var_r31->z = 0.0f; @@ -3058,9 +3064,9 @@ void fn_1_DCD4(ModelData *model, Mtx matrix) } else { fn_1_E420(&var_r30->unk_2C, &sp38, &var_r29->unk_48, 4); - PSMTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44)); - PSMTXConcat(sp128, spC8, sp98); - PSMTXMultVecArray(sp98, &sp38, &sp8, 4); + MTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44)); + MTXConcat(sp128, spC8, sp98); + MTXMultVecArray(sp98, &sp38, &sp8, 4); PSVECAdd(&sp8, &var_r29->unk_54, var_r31++); PSVECAdd(&sp14, &var_r29->unk_54, var_r31++); PSVECAdd(&sp20, &var_r29->unk_54, var_r31++); diff --git a/src/REL/m427Dll/player.c b/src/REL/m427Dll/player.c index fe097531..b87789dd 100644 --- a/src/REL/m427Dll/player.c +++ b/src/REL/m427Dll/player.c @@ -1645,7 +1645,7 @@ void fn_1_13FBC(ModelData *model, Mtx matrix) var_r27 = &lbl_1_bss_578[*var_r25]; var_r24 = lbl_1_bss_56C[*var_r25]; GXLoadPosMtxImm(matrix, 0); - PSMTXInvXpose(matrix, sp70); + MTXInvXpose(matrix, sp70); GXLoadNrmMtxImm(sp70, 0); GXSetNumTevStages(1); GXSetNumTexGens(1); diff --git a/src/REL/m428Dll/main.c b/src/REL/m428Dll/main.c index 1ee62c82..f6610719 100644 --- a/src/REL/m428Dll/main.c +++ b/src/REL/m428Dll/main.c @@ -980,6 +980,9 @@ void fn_1_3B64(void) GXTexCoord2f32(0.0f, 1.0f); } } +#ifdef TARGET_PC + GXDestroyTexObj(&sp14); +#endif } s32 lbl_1_data_EC[] = { diff --git a/src/REL/m428Dll/player.c b/src/REL/m428Dll/player.c index 4964e8a5..d9dcedb7 100644 --- a/src/REL/m428Dll/player.c +++ b/src/REL/m428Dll/player.c @@ -3109,7 +3109,7 @@ void fn_1_134C0(ModelData *var_r23, Mtx var_r22) if (HmfInverseMtxF3X3(var_r22, &sp128[0]) == 0) { MTXIdentity(sp128); } - PSMTXReorder(sp128, sp8); + MTXReorder(sp128, sp8); if (var_r31->unk_4C) { var_r18 = var_r31->unk_4C; var_r18(var_r23, var_r31, var_r22); @@ -3117,7 +3117,7 @@ void fn_1_134C0(ModelData *var_r23, Mtx var_r22) var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; var_r28 = var_r31->unk_44; - PSMTXROMultVecArray(sp8, lbl_1_data_6A4, &sp38[0], 4); + MTXROMultVecArray(sp8, lbl_1_data_6A4, &sp38[0], 4); for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) { if (!var_r29->unk_30) { var_r30->x = var_r30->y = var_r30->z = 0.0f; diff --git a/src/REL/m430Dll/water.c b/src/REL/m430Dll/water.c index cfb782c7..999e3e3d 100644 --- a/src/REL/m430Dll/water.c +++ b/src/REL/m430Dll/water.c @@ -1284,6 +1284,9 @@ void fn_1_8CE0(ModelData *model, Mtx matrix) GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&sp24); +#endif } Vec lbl_1_data_60[6] = { diff --git a/src/REL/m431Dll/main.c b/src/REL/m431Dll/main.c index 4aec497d..6244ca54 100644 --- a/src/REL/m431Dll/main.c +++ b/src/REL/m431Dll/main.c @@ -2095,7 +2095,7 @@ void fn_1_72B4(ModelData *model, Mtx mtx) GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetArray(GX_VA_TEX0, temp_r30->unk20, sizeof(HsfVector2f)); fn_1_79FC(mtx, sp128); - PSMTXReorder(sp128, spF8); + MTXReorder(sp128, spF8); if (!omPauseChk() && temp_r30->unkC) { temp_r23 = temp_r30->unkC; temp_r23(model, temp_r30, mtx); @@ -2103,7 +2103,7 @@ void fn_1_72B4(ModelData *model, Mtx mtx) temp_r29 = temp_r30->unk18; temp_r31 = temp_r30->unk1C; temp_r27 = temp_r30->unk20; - PSMTXROMultVecArray(spF8, temp_r30->unk2C, sp68, 4); + MTXROMultVecArray(spF8, temp_r30->unk2C, sp68, 4); for (temp_r26 = 0; temp_r26 < temp_r30->unk0; temp_r26++, temp_r29++, temp_r27 += 4) { if (temp_r29->unk56 == 0) { temp_r31->x = temp_r31->y = temp_r31->z = 0; diff --git a/src/REL/m434Dll/map.c b/src/REL/m434Dll/map.c index ee77f381..79bb9202 100644 --- a/src/REL/m434Dll/map.c +++ b/src/REL/m434Dll/map.c @@ -348,6 +348,9 @@ void fn_1_2978(ModelData *model, Mtx mtx) GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&spC); +#endif } void fn_1_3004(void) @@ -468,6 +471,9 @@ void fn_1_3594(ModelData *model, Mtx mtx) GXPosition3f32(1000.0f, -5.000001f, 1000.0f); GXPosition3f32(-1000.0f, -5.000001f, 1000.0f); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&sp10); +#endif } GXColor lbl_1_data_170 = { 255, 0, 0, 255 }; diff --git a/src/REL/m438Dll/fire.c b/src/REL/m438Dll/fire.c index 349febca..739a356a 100644 --- a/src/REL/m438Dll/fire.c +++ b/src/REL/m438Dll/fire.c @@ -7,17 +7,18 @@ extern u8 texMtxTbl[]; // PROTO -void fn_1_E790(M438UnkStruct2*); -void fn_1_F538(ModelData*, Mtx); -void fn_1_FAB8(M438UnkStruct*); -void fn_1_FD40(M438UnkStruct2*); +void fn_1_E790(M438UnkStruct2 *); +void fn_1_F538(ModelData *, Mtx); +void fn_1_FAB8(M438UnkStruct *); +void fn_1_FD40(M438UnkStruct2 *); void fn_1_10F0C(s16); s32 fn_1_110B4(s16, u8, s16); -void fn_1_E658(s16 arg0, s16 arg1) { - M438UnkStruct2* var_r29; +void fn_1_E658(s16 arg0, s16 arg1) +{ + M438UnkStruct2 *var_r29; s32 var_r31; - M438UnkStruct3* var_r30; + M438UnkStruct3 *var_r30; lbl_1_bss_DE4.unk_34 = Hu3DHookFuncCreate(fn_1_F538); Hu3DModelLayerSet(lbl_1_bss_DE4.unk_34, 6); @@ -27,11 +28,11 @@ void fn_1_E658(s16 arg0, s16 arg1) { lbl_1_bss_DE4.unk_32 = arg1; var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438UnkStruct3), 0x10000000); lbl_1_bss_DE4.unk_3C = var_r30; - + for (var_r31 = 0; var_r31 < arg0; var_r31++, var_r29++) { var_r29->unk_08 = 0; } - + for (var_r31 = 0; var_r31 < arg1; var_r31++, var_r30++) { var_r30->unk_06 = 0; var_r30->unk_08 = 0; @@ -39,7 +40,8 @@ void fn_1_E658(s16 arg0, s16 arg1) { lbl_1_bss_DE4.unk_36 = lbl_1_bss_DE4.unk_38 = lbl_1_bss_DE4.unk_3A = 0; } -void fn_1_E790(M438UnkStruct2* arg0) { +void fn_1_E790(M438UnkStruct2 *arg0) +{ ModelData sp120; Mtx spF0; Mtx spC0; @@ -48,11 +50,11 @@ void fn_1_E790(M438UnkStruct2* arg0) { Mtx sp30; GXColor sp2C; s16 sp8; - M438UnkStruct* var_r31; + M438UnkStruct *var_r31; s16 var_r29; s16 var_r28; s32 var_r27; - M438UnkStruct3* temp_r26; + M438UnkStruct3 *temp_r26; s32 var_r25; s32 var_r24; s16 temp_r23; @@ -62,17 +64,17 @@ void fn_1_E790(M438UnkStruct2* arg0) { s32 var_r19; mtxRot(sp60, arg0->unk_18.x, arg0->unk_18.y, arg0->unk_18.z); - PSMTXScale(sp90, arg0->unk_24.x, arg0->unk_24.y, arg0->unk_24.z); - PSMTXConcat(sp60, sp90, sp90); + MTXScale(sp90, arg0->unk_24.x, arg0->unk_24.y, arg0->unk_24.z); + MTXConcat(sp60, sp90, sp90); mtxTransCat(sp90, arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z); - PSMTXConcat(Hu3DCameraMtx, sp90, spC0); + MTXConcat(Hu3DCameraMtx, sp90, spC0); var_r29 = 0; var_r28 = 0; sp8 = 0; for (var_r27 = GX_TEXMAP0; var_r27 < arg0->unk_04; var_r27++) { if (arg0->unk_34[var_r27] != 0) { temp_r26 = &lbl_1_bss_DE4.unk_3C[arg0->unk_34[var_r27]]; - PSMTXCopy(temp_r26->unk_18, sp30); + MTXCopy(temp_r26->unk_18, sp30); mtxTransCat(sp30, temp_r26->unk_0C.x, temp_r26->unk_0C.y, temp_r26->unk_0C.z); switch (temp_r26->unk_04) { case 0: @@ -84,11 +86,13 @@ void fn_1_E790(M438UnkStruct2* arg0) { if ((temp_r26->unk_00->bmp->dataFmt == 7) || (temp_r26->unk_00->bmp->dataFmt == 8)) { GXSetTevColor(GX_TEVREG2, temp_r26->unk_48); GXSetTevColorIn(var_r29, GX_CC_ZERO, GX_CC_C2, GX_CC_RASC, GX_CC_ZERO); - } else { + } + else { GXSetTevColorIn(var_r29, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); } GXSetTevAlphaIn(var_r29, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); - } else { + } + else { sp2C.a = temp_r26->unk_48.a; GXSetTevColor(GX_TEVREG2, sp2C); GXSetTevColorIn(var_r29, GX_CC_CPREV, GX_CC_TEXC, GX_CC_A2, GX_CC_ZERO); @@ -137,14 +141,14 @@ void fn_1_E790(M438UnkStruct2* arg0) { break; case 4: mtxRot(sp60, arg0->unk_18.x, arg0->unk_18.y, arg0->unk_18.z); - PSMTXScale(sp90, arg0->unk_24.x, arg0->unk_24.y, arg0->unk_24.z); - PSMTXConcat(sp60, sp90, sp90); + MTXScale(sp90, arg0->unk_24.x, arg0->unk_24.y, arg0->unk_24.z); + MTXConcat(sp60, sp90, sp90); mtxTransCat(sp90, arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z); - PSMTXConcat(Hu3DCameraMtx, sp90, sp30); - PSMTXInverse(Hu3DCameraMtx, sp60); - PSMTXConcat(sp60, sp30, sp60); - PSMTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp90); - PSMTXConcat(sp90, sp60, sp30); + MTXConcat(Hu3DCameraMtx, sp90, sp30); + MTXInverse(Hu3DCameraMtx, sp60); + MTXConcat(sp60, sp30, sp60); + MTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp90); + MTXConcat(sp90, sp60, sp30); GXLoadTexMtxImm(sp30, texMtxTbl[var_r28], GX_MTX3x4); var_r19 = texMtxTbl[var_r28]; GXSetTexCoordGen2(var_r28, GX_TG_MTX3x4, GX_TG_POS, var_r19, 0, 0x7D); @@ -152,7 +156,8 @@ void fn_1_E790(M438UnkStruct2* arg0) { if (var_r27 == GX_TEXMAP0) { GXSetTevColorIn(var_r29, GX_CC_ONE, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ZERO); GXSetTevAlphaIn(var_r29, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); - } else { + } + else { GXSetTevColorIn(var_r29, GX_CC_CPREV, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ZERO); GXSetTevAlphaIn(var_r29, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); } @@ -164,7 +169,8 @@ void fn_1_E790(M438UnkStruct2* arg0) { var_r28++; if (temp_r26->unk_4D != 0) { HuSprTexLoad(temp_r26->unk_00, 0, var_r27, 1, 1, 1); - } else { + } + else { HuSprTexLoad(temp_r26->unk_00, 0, var_r27, 0, 0, 1); } } @@ -178,40 +184,42 @@ void fn_1_E790(M438UnkStruct2* arg0) { case 0: mtxRot(sp60, var_r31->unk_0C.x, var_r31->unk_0C.y, var_r31->unk_0C.z); if (var_r31->unk_31 == 2) { - PSMTXConcat(lbl_1_bss_DE4.unk_00, sp60, sp60); - } else if (var_r31->unk_31 == 1) { - PSMTXRotRad(sp90, 0x59, MTXDegToRad(CRot.y)); - PSMTXConcat(sp90, sp60, sp60); + MTXConcat(lbl_1_bss_DE4.unk_00, sp60, sp60); } - PSMTXScale(sp90, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); - PSMTXTrans(sp30, var_r31->unk_24.x, var_r31->unk_24.y, var_r31->unk_24.z); - PSMTXConcat(sp90, sp30, sp90); - PSMTXConcat(sp60, sp90, sp90); + else if (var_r31->unk_31 == 1) { + MTXRotRad(sp90, 0x59, MTXDegToRad(CRot.y)); + MTXConcat(sp90, sp60, sp60); + } + MTXScale(sp90, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); + MTXTrans(sp30, var_r31->unk_24.x, var_r31->unk_24.y, var_r31->unk_24.z); + MTXConcat(sp90, sp30, sp90); + MTXConcat(sp60, sp90, sp90); mtxTransCat(sp90, var_r31->unk_00.x, var_r31->unk_00.y, var_r31->unk_00.z); - PSMTXConcat(Hu3DCameraMtx, sp90, spF0); + MTXConcat(Hu3DCameraMtx, sp90, spF0); break; case 1: mtxRot(sp60, var_r31->unk_0C.x, var_r31->unk_0C.y, var_r31->unk_0C.z); if (var_r31->unk_31 == 2) { if (HmfInverseMtxF3X3(spC0, sp90) == 0) { - PSMTXIdentity(sp90); + MTXIdentity(sp90); } - PSMTXConcat(sp90, sp60, sp60); - } else if (var_r31->unk_31 == 1) { - PSMTXRotRad(sp90, 0x59, MTXDegToRad(CRot.y)); - PSMTXConcat(sp90, sp60, sp60); + MTXConcat(sp90, sp60, sp60); } - PSMTXScale(sp90, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); - PSMTXTrans(sp30, var_r31->unk_24.x, var_r31->unk_24.y, var_r31->unk_24.z); - PSMTXConcat(sp90, sp30, sp90); - PSMTXConcat(sp60, sp90, sp90); + else if (var_r31->unk_31 == 1) { + MTXRotRad(sp90, 0x59, MTXDegToRad(CRot.y)); + MTXConcat(sp90, sp60, sp60); + } + MTXScale(sp90, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); + MTXTrans(sp30, var_r31->unk_24.x, var_r31->unk_24.y, var_r31->unk_24.z); + MTXConcat(sp90, sp30, sp90); + MTXConcat(sp60, sp90, sp90); mtxTransCat(sp90, var_r31->unk_00.x, var_r31->unk_00.y, var_r31->unk_00.z); - PSMTXConcat(spC0, sp90, spF0); + MTXConcat(spC0, sp90, spF0); break; } GXLoadPosMtxImm(spF0, 0); - PSMTXInverse(spF0, sp90); - PSMTXTranspose(sp90, sp60); + MTXInverse(spF0, sp90); + MTXTranspose(sp90, sp60); GXLoadNrmMtxImm(sp60, 0); GXSetChanAmbColor(GX_COLOR0A0, var_r31->unk_50); GXSetChanMatColor(GX_COLOR0A0, var_r31->unk_54); @@ -230,7 +238,8 @@ void fn_1_E790(M438UnkStruct2* arg0) { } if ((var_r31->unk_38 & 0x10) != 0) { GXSetZMode(0, GX_LEQUAL, 1); - } else { + } + else { GXSetZMode(1, GX_LEQUAL, 0); } sp120.attr = 0; @@ -238,7 +247,8 @@ void fn_1_E790(M438UnkStruct2* arg0) { GXSetNumChans(1); if ((var_r31->unk_38 & 8) != 0) { var_r25 = GX_SRC_VTX; - } else { + } + else { var_r25 = GX_SRC_REG; } switch (var_r31->unk_32) { @@ -272,59 +282,66 @@ void fn_1_E790(M438UnkStruct2* arg0) { } } -void fn_1_F538(ModelData* arg0, Mtx arg1) { +void fn_1_F538(ModelData *arg0, Mtx arg1) +{ Mtx sp38; Mtx sp8; - M438UnkStruct2* var_r31; + M438UnkStruct2 *var_r31; s32 var_r30; var_r31 = lbl_1_bss_DE4.unk_40; GXLoadPosMtxImm(arg1, 0); - PSMTXInverse(arg1, sp38); - PSMTXTranspose(sp38, sp8); + MTXInverse(arg1, sp38); + MTXTranspose(sp38, sp8); GXLoadNrmMtxImm(sp8, 0); HmfInverseMtxF3X3(Hu3DCameraMtx, lbl_1_bss_DE4.unk_00); - + for (var_r30 = 0; var_r30 < lbl_1_bss_DE4.unk_30; var_r30++, var_r31++) { if ((var_r31->unk_08 != 0) && ((var_r31->unk_08 & 2) != 0) && ((var_r31->unk_08 & 4) == 0)) { if ((u8)omPauseChk() == 0) { if (var_r31->unk_30) { var_r31->unk_30(var_r31); } - if (var_r31->unk_08 == 0) continue; + if (var_r31->unk_08 == 0) + continue; fn_1_FD40(var_r31); - if (var_r31->unk_08 == 0) continue; + if (var_r31->unk_08 == 0) + continue; } fn_1_E790(var_r31); } } } -M438UnkStruct2* fn_1_F664(s16 arg0) { +M438UnkStruct2 *fn_1_F664(s16 arg0) +{ return &lbl_1_bss_DE4.unk_40[arg0]; } -M438UnkStruct* fn_1_F680(s16 arg0, s16 arg1) { +M438UnkStruct *fn_1_F680(s16 arg0, s16 arg1) +{ return &lbl_1_bss_DE4.unk_40[arg0].unk_3C[arg1]; } -M438UnkStruct3* fn_1_F6AC(s16 arg0) { +M438UnkStruct3 *fn_1_F6AC(s16 arg0) +{ return &lbl_1_bss_DE4.unk_3C[arg0]; } -void fn_1_F6C8(M438FireStruct** arg0, s16 arg1, f32 arg8, f32 arg9) { +void fn_1_F6C8(M438FireStruct **arg0, s16 arg1, f32 arg8, f32 arg9) +{ s32 var_r30; - M438FireStruct* var_r31; + M438FireStruct *var_r31; var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct), 0x10000000); - + for (var_r30 = 0; var_r30 < arg1; var_r31++, var_r30++) { - var_r31->unk0.x = (-0.5f * arg8); - var_r31->unk0.y = (0.5f * arg9); - var_r31->unk0.z = 0.0f; - var_r31->unkC.x = (0.5f * arg8); - var_r31->unkC.y = (0.5f * arg9); - var_r31->unkC.z = 0.0f; + var_r31->unk0.x = (-0.5f * arg8); + var_r31->unk0.y = (0.5f * arg9); + var_r31->unk0.z = 0.0f; + var_r31->unkC.x = (0.5f * arg8); + var_r31->unkC.y = (0.5f * arg9); + var_r31->unkC.z = 0.0f; var_r31->unk18.x = (0.5f * arg8); var_r31->unk18.y = (-0.5f * arg9); var_r31->unk18.z = 0.0f; @@ -334,13 +351,14 @@ void fn_1_F6C8(M438FireStruct** arg0, s16 arg1, f32 arg8, f32 arg9) { } } -void fn_1_F84C(M438FireStruct** arg0, s16 arg1, Vec* arg2) { - Vec* var_r31; +void fn_1_F84C(M438FireStruct **arg0, s16 arg1, Vec *arg2) +{ + Vec *var_r31; s32 var_r29; s32 var_r28; - var_r31 = (Vec*)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct), 0x10000000); - + var_r31 = (Vec *)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct), 0x10000000); + for (var_r29 = 0; var_r29 < arg1; var_r29++) { for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { var_r31->x = arg2->x; @@ -350,13 +368,14 @@ void fn_1_F84C(M438FireStruct** arg0, s16 arg1, Vec* arg2) { } } -void fn_1_F8EC(M438FireStruct2** arg0, s16 arg1, GXColor* arg2) { - GXColor* var_r31; +void fn_1_F8EC(M438FireStruct2 **arg0, s16 arg1, GXColor *arg2) +{ + GXColor *var_r31; s32 var_r29; s32 var_r28; - var_r31 = (GXColor*)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct2), 0x10000000U); - + var_r31 = (GXColor *)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct2), 0x10000000U); + for (var_r29 = 0; var_r29 < arg1; var_r29++) { for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { var_r31->r = arg2->r; @@ -367,12 +386,13 @@ void fn_1_F8EC(M438FireStruct2** arg0, s16 arg1, GXColor* arg2) { } } -void fn_1_F994(Vec** arg0, s16 arg1, Vec* arg2) { +void fn_1_F994(Vec **arg0, s16 arg1, Vec *arg2) +{ s32 var_r29; - Vec* var_r31; - + Vec *var_r31; + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(Vec), 0x10000000); - + for (var_r29 = 0; var_r29 < arg1; var_r31++, arg2++, var_r29++) { var_r31->x = arg2->x; var_r31->y = arg2->y; @@ -380,13 +400,14 @@ void fn_1_F994(Vec** arg0, s16 arg1, Vec* arg2) { } } -void fn_1_FA20(M438FireStruct3** arg0, s16 arg1, HsfVector2f* arg2) { - HsfVector2f* var_r31; +void fn_1_FA20(M438FireStruct3 **arg0, s16 arg1, HsfVector2f *arg2) +{ + HsfVector2f *var_r31; s32 var_r29; s32 var_r28; - - var_r31 = (HsfVector2f*)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct3), 0x10000000); - + + var_r31 = (HsfVector2f *)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct3), 0x10000000); + for (var_r29 = 0; var_r29 < arg1; var_r29++) { for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { var_r31->x = arg2->x; @@ -395,30 +416,20 @@ void fn_1_FA20(M438FireStruct3** arg0, s16 arg1, HsfVector2f* arg2) { } } -void fn_1_FAB8(M438UnkStruct* arg0) { - Vec sp1C[4] = { - { -50.0f, 50.0f, 0.0f }, - { 50.0f, 50.0f, 0.0f }, - { 50.0f, -50.0f, 0.0f }, - { -50.0f, -50.0f, 0.0f } - }; - GXColor spC[4] = { - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF } - }; - - void* sp8; +void fn_1_FAB8(M438UnkStruct *arg0) +{ + Vec sp1C[4] = { { -50.0f, 50.0f, 0.0f }, { 50.0f, 50.0f, 0.0f }, { 50.0f, -50.0f, 0.0f }, { -50.0f, -50.0f, 0.0f } }; + GXColor spC[4] = { { 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF } }; + + void *sp8; s32 var_r31; s32 var_r29; - void* temp_r28; - - + void *temp_r28; + for (var_r31 = 0; var_r31 < 4; var_r31++) { arg0->unk_44[var_r31] = sp1C[var_r31]; } - + for (var_r31 = 0; var_r31 < 4; var_r31++) { arg0->unk_48[var_r31] = spC[var_r31]; } @@ -429,7 +440,7 @@ void fn_1_FAB8(M438UnkStruct* arg0) { sp8 = temp_r28; GXBeginDisplayList(temp_r28, 0x100); GXBegin(GX_QUADS, GX_VTXFMT0, 4); - + for (var_r31 = 0; var_r31 < 4; var_r31++) { GXPosition1x16(var_r31); GXColor1x16(0); @@ -441,22 +452,24 @@ void fn_1_FAB8(M438UnkStruct* arg0) { arg0->unk_3C = GXEndDisplayList(); } -void fn_1_FD40(M438UnkStruct2* arg0) { - M438UnkStruct* var_r28; - M438UnkStruct3* temp_r30; - M438UnkSubStruct* var_r31; +void fn_1_FD40(M438UnkStruct2 *arg0) +{ + M438UnkStruct *var_r28; + M438UnkStruct3 *temp_r30; + M438UnkSubStruct *var_r31; s32 temp_r0; s32 var_r25; s32 var_r26; s32 var_r27; var_r27 = 0; - + var_r28 = arg0->unk_3C; for (var_r25 = 0; var_r25 < arg0->unk_02; var_r25++, var_r28++) { if ((var_r28->unk_38 & 4) != 0) { var_r27++; - } else { + } + else { var_r31 = var_r28->unk_58; for (var_r26 = 0; var_r26 < var_r28->unk_34; var_r26++, var_r31++) { temp_r30 = &lbl_1_bss_DE4.unk_3C[arg0->unk_34[var_r26]]; @@ -481,30 +494,37 @@ void fn_1_FD40(M438UnkStruct2* arg0) { if ((var_r31->unk_24 & 0x10) != 0) { var_r31->unk_24 |= 8; var_r31->unk_00 -= 1; - } else if ((var_r31->unk_24 & 0x40) != 0) { + } + else if ((var_r31->unk_24 & 0x40) != 0) { var_r31->unk_24 = (var_r31->unk_24 & 0xF0) | 2; var_r31->unk_00 -= 2; - } else if ((var_r31->unk_24 & 0x20) != 0) { + } + else if ((var_r31->unk_24 & 0x20) != 0) { var_r31->unk_00 = 0; } var_r31->unk_24 |= 4; - } else if (var_r31->unk_00 < 0) { + } + else if (var_r31->unk_00 < 0) { if ((var_r31->unk_24 & 0x10) != 0) { var_r31->unk_24 |= 8; var_r31->unk_00 = 0; - } else if ((var_r31->unk_24 & 0x20) != 0) { + } + else if ((var_r31->unk_24 & 0x20) != 0) { if ((var_r31->unk_24 & 0x40) != 0) { var_r31->unk_24 = (var_r31->unk_24 & 0xF0) | 1; var_r31->unk_00 = 1; - } else { + } + else { var_r31->unk_00 = temp_r30->unk_4C - 1; } - } else if ((var_r31->unk_24 & 0x40) != 0) { + } + else if ((var_r31->unk_24 & 0x40) != 0) { var_r31->unk_24 |= 8; var_r31->unk_00 = 0; } var_r31->unk_24 |= 4; - } else { + } + else { var_r31->unk_24 &= ~8; } if (var_r31->unk_00 != var_r31->unk_01) { @@ -525,11 +545,13 @@ void fn_1_FD40(M438UnkStruct2* arg0) { if ((var_r31->unk_24 & 0x40) == 0) { if (var_r31->unk_00 <= 0) { var_r31->unk_00 = temp_r30->unk_4C; - } else { + } + else { var_r31->unk_00 = 0; } } - } else if ((var_r28->unk_38 & 0x80000000) != 0) { + } + else if ((var_r28->unk_38 & 0x80000000) != 0) { fn_1_107BC(arg0->unk_00); } var_r27++; @@ -540,24 +562,27 @@ void fn_1_FD40(M438UnkStruct2* arg0) { if (var_r27 >= arg0->unk_02) { if ((arg0->unk_08 & 0x40000000) != 0) { arg0->unk_08 |= 4; - } else if ((arg0->unk_08 & 0x80000000) != 0) { + } + else if ((arg0->unk_08 & 0x80000000) != 0) { fn_1_107BC(arg0->unk_00); } } PPCSync(); } -s16 fn_1_10258(u8 arg0, u8 arg1) { - M438UnkStruct* var_r30; - M438UnkStruct2* var_r31; +s16 fn_1_10258(u8 arg0, u8 arg1) +{ + M438UnkStruct *var_r30; + M438UnkStruct2 *var_r31; s32 var_r29; s32 var_r28; - void* temp_r25; + void *temp_r25; var_r31 = &lbl_1_bss_DE4.unk_40[1]; - + for (var_r29 = 1; var_r29 < lbl_1_bss_DE4.unk_30; var_r29++, var_r31++) { - if (var_r31->unk_08 == 0) break; + if (var_r31->unk_08 == 0) + break; } if (var_r29 == lbl_1_bss_DE4.unk_30) { OSReport("OVER BILL\n"); @@ -584,15 +609,15 @@ s16 fn_1_10258(u8 arg0, u8 arg1) { var_r31->unk_70.x = var_r31->unk_70.y = var_r31->unk_70.z = 0.0f; var_r31->unk_64.x = var_r31->unk_64.y = var_r31->unk_64.z = 0.0f; var_r31->unk_60 = 0; - + for (var_r29 = 0; var_r29 < 0x20; var_r29++) { var_r31->unk_7Ca[var_r29] = 0; } - + for (var_r29 = 0; var_r29 < arg1; var_r29++) { var_r31->unk_34[var_r29] = 0; } - + for (var_r29 = 0; var_r29 < arg0; var_r29++, var_r30++) { var_r30->unk_38 = 1; var_r30->unk_34 = arg1; @@ -605,7 +630,7 @@ s16 fn_1_10258(u8 arg0, u8 arg1) { var_r30->unk_54.r = var_r30->unk_54.g = var_r30->unk_54.b = 0xFF; var_r30->unk_54.a = 0xFF; var_r30->unk_58 = &var_r31->unk_5C[var_r29 * arg1]; - + for (var_r28 = 0; var_r28 < arg1; var_r28++) { var_r30->unk_58[var_r28].unk_00 = var_r30->unk_58[var_r28].unk_01 = 0; var_r30->unk_58[var_r28].unk_28 = 1.0f; @@ -618,14 +643,14 @@ s16 fn_1_10258(u8 arg0, u8 arg1) { var_r30->unk_24.x = var_r30->unk_24.y = var_r30->unk_24.z = 0.0f; var_r30->unk_60.x = var_r30->unk_60.y = var_r30->unk_60.z = 0.0f; var_r30->unk_5C = 0; - + for (var_r28 = 0; var_r28 < 0x10; var_r28++) { var_r30->unk_78[var_r28] = 0; } var_r30->unk_44 = &var_r31->unk_50[var_r29 * 4]; var_r30->unk_48 = &var_r31->unk_54[var_r29 * 4]; var_r30->unk_4C = &var_r31->unk_58[var_r29]; - var_r30->unk_40 = ((char*)var_r31->unk_4C) + var_r31->unk_48; + var_r30->unk_40 = ((char *)var_r31->unk_4C) + var_r31->unk_48; fn_1_FAB8(var_r30); var_r31->unk_48 += var_r30->unk_3C; } @@ -639,9 +664,9 @@ s16 fn_1_10258(u8 arg0, u8 arg1) { DCFlushRangeNoSync(var_r31->unk_4C, var_r31->unk_48); var_r30 = var_r31->unk_3C; var_r31->unk_48 = 0; - + for (var_r29 = 0; var_r29 < arg0; var_r29++, var_r30++) { - var_r30->unk_40 = ((char*)var_r31->unk_4C) + var_r31->unk_48; + var_r30->unk_40 = ((char *)var_r31->unk_4C) + var_r31->unk_48; var_r31->unk_48 += var_r30->unk_3C; } lbl_1_bss_DE4.unk_36 = var_r31->unk_00; @@ -651,13 +676,14 @@ s16 fn_1_10258(u8 arg0, u8 arg1) { return var_r31->unk_00; } -void fn_1_107BC(s16 arg0) { - M438UnkStruct2* temp_r31; +void fn_1_107BC(s16 arg0) +{ + M438UnkStruct2 *temp_r31; s32 var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; - if ((u32) temp_r31->unk_08 != 0) { + if ((u32)temp_r31->unk_08 != 0) { if (temp_r31->unk_50 != NULL) { HuMemDirectFree(temp_r31->unk_50); } @@ -673,7 +699,7 @@ void fn_1_107BC(s16 arg0) { if (temp_r31->unk_5C != NULL) { HuMemDirectFree(temp_r31->unk_5C); } - + for (var_r30 = 0; var_r30 < temp_r31->unk_04; var_r30++) { fn_1_10F0C(temp_r31->unk_34[var_r30]); } @@ -685,7 +711,8 @@ void fn_1_107BC(s16 arg0) { } } -void fn_1_108E4(s16 arg0, s16 arg1, u8 arg2) { +void fn_1_108E4(s16 arg0, s16 arg1, u8 arg2) +{ lbl_1_bss_DE4.unk_36 = arg0; lbl_1_bss_DE4.unk_38 = arg1; lbl_1_bss_DE4.unk_3A = arg2; @@ -693,25 +720,28 @@ void fn_1_108E4(s16 arg0, s16 arg1, u8 arg2) { #include "game/sprite.h" -s16 fn_1_10910(u32 arg0, s16 arg1, s16 arg2) { +s16 fn_1_10910(u32 arg0, s16 arg1, s16 arg2) +{ f32 var_f31; f32 var_f30; - AnimData* var_r30; - M438UnkStruct3* var_r31; + AnimData *var_r30; + M438UnkStruct3 *var_r31; s32 var_r29; var_r31 = &lbl_1_bss_DE4.unk_3C[1]; for (var_r29 = 1; var_r29 < lbl_1_bss_DE4.unk_32; var_r29++, var_r31++) { - if ((var_r31->unk_06 != 0) && (var_r31->unk_08 == arg0)) break; + if ((var_r31->unk_06 != 0) && (var_r31->unk_08 == arg0)) + break; } if (var_r29 < lbl_1_bss_DE4.unk_32) { var_r31->unk_06++; return var_r29; } - + var_r31 = &lbl_1_bss_DE4.unk_3C[1]; for (var_r29 = 1; var_r29 < lbl_1_bss_DE4.unk_32; var_r29++, var_r31++) { - if (var_r31->unk_06 == 0) break; + if (var_r31->unk_06 == 0) + break; } var_r31->unk_08 = arg0; var_r31->unk_06 = 1; @@ -719,14 +749,16 @@ s16 fn_1_10910(u32 arg0, s16 arg1, s16 arg2) { var_r30 = HuSprAnimMake(arg1, arg2, 2); var_r30->bmp->data = HuMemDirectMallocNum(HEAP_SYSTEM, arg2 * (arg1 * 2), 0x10000000); arg1 = arg2 = 0; - } else { + } + else { var_r30 = HuSprAnimRead(HuDataReadNum(arg0, 0x10000000)); } if ((arg1 == 0) || (arg2 == 0)) { arg1 = var_r30->bmp->sizeX; arg2 = var_r30->bmp->sizeY; var_f31 = var_f30 = 1.0f; - } else { + } + else { var_f31 = arg1 / (f32)var_r30->bmp->sizeX; var_f30 = arg2 / (f32)var_r30->bmp->sizeY; } @@ -748,31 +780,32 @@ s16 fn_1_10910(u32 arg0, s16 arg1, s16 arg2) { } var_r31->unk_48.r = var_r31->unk_48.g = var_r31->unk_48.b = 0xFF; var_r31->unk_48.a = 0xFF; - PSMTXIdentity(var_r31->unk_18); + MTXIdentity(var_r31->unk_18); var_r31->unk_0C.x = var_r31->unk_0C.y = var_r31->unk_0C.z = 0.0f; return var_r29; } -void fn_1_10CB8(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5) { +void fn_1_10CB8(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5) +{ f32 var_f31; f32 var_f30; - M438UnkStruct3* temp_r31; - AnimData* temp_r30; + M438UnkStruct3 *temp_r31; + AnimData *temp_r30; temp_r31 = &lbl_1_bss_DE4.unk_3C[arg0]; HuSprAnimKill(temp_r31->unk_00); temp_r31->unk_08 |= 0xFFFF0000; temp_r30 = HuSprAnimMake(arg2, arg3, arg1); temp_r30->bmp->data = HuMemDirectMallocNum(HEAP_SYSTEM, arg3 * (temp_r30->bmp->pixSize * arg2), 0x10000000U); - var_f31 = arg4 / (f32) temp_r30->bmp->sizeX; - var_f30 = arg5 / (f32) temp_r30->bmp->sizeY; + var_f31 = arg4 / (f32)temp_r30->bmp->sizeX; + var_f30 = arg5 / (f32)temp_r30->bmp->sizeY; temp_r31->unk_00 = temp_r30; temp_r31->unk_4E = arg2; temp_r31->unk_50 = arg3; temp_r31->unk_54 = var_f31; temp_r31->unk_58 = var_f30; - temp_r31->unk_5C = 1.0f / (f32) temp_r30->bmp->sizeX; - temp_r31->unk_60 = 1.0f / (f32) temp_r30->bmp->sizeY; + temp_r31->unk_5C = 1.0f / (f32)temp_r30->bmp->sizeX; + temp_r31->unk_60 = 1.0f / (f32)temp_r30->bmp->sizeY; temp_r31->unk_04 = 0; temp_r31->unk_4C = temp_r30->bmp->sizeY / arg5; temp_r31->unk_4D = 0; @@ -780,8 +813,9 @@ void fn_1_10CB8(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5) { temp_r31->unk_48.a = 0xFF; } -void fn_1_10F0C(s16 arg0) { - M438UnkStruct3* temp_r31; +void fn_1_10F0C(s16 arg0) +{ + M438UnkStruct3 *temp_r31; temp_r31 = &lbl_1_bss_DE4.unk_3C[arg0]; if (temp_r31->unk_08 != 0) { @@ -795,31 +829,36 @@ void fn_1_10F0C(s16 arg0) { } } -u8 fn_1_10F8C(s16 arg0, u8 arg1, u32 arg2, s16 arg3, s16 arg4) { +u8 fn_1_10F8C(s16 arg0, u8 arg1, u32 arg2, s16 arg3, s16 arg4) +{ s32 var_r31; - if (arg0 == 0) return 0; - + if (arg0 == 0) + return 0; + var_r31 = fn_1_10910(arg2, arg3, arg4); - if (var_r31 == 0) return 0; - + if (var_r31 == 0) + return 0; + fn_1_110B4(arg0, arg1, var_r31); return var_r31; } -u8 fn_1_11018(s16 arg0, u8 arg1, u32 arg2) { +u8 fn_1_11018(s16 arg0, u8 arg1, u32 arg2) +{ u8 var_r31; var_r31 = fn_1_10F8C(arg0, arg1, arg2, 0, 0); - + return var_r31; } -s32 fn_1_110B4(s16 arg0, u8 arg1, s16 arg2) { - M438UnkStruct* var_r29; - M438UnkStruct2* temp_r28; - M438UnkStruct3* temp_r30; - M438UnkSubStruct* temp_r31; +s32 fn_1_110B4(s16 arg0, u8 arg1, s16 arg2) +{ + M438UnkStruct *var_r29; + M438UnkStruct2 *temp_r28; + M438UnkStruct3 *temp_r30; + M438UnkSubStruct *temp_r31; s32 var_r26; if (arg2 == 0) { @@ -835,7 +874,7 @@ s32 fn_1_110B4(s16 arg0, u8 arg1, s16 arg2) { } temp_r28->unk_34[arg1] = arg2; temp_r30 = &lbl_1_bss_DE4.unk_3C[arg2]; - + var_r29 = temp_r28->unk_3C; for (var_r26 = 0; var_r26 < temp_r28->unk_02; var_r26++, var_r29++) { if (arg1 == 0) { @@ -874,10 +913,11 @@ s32 fn_1_110B4(s16 arg0, u8 arg1, s16 arg2) { return 1; } -void fn_1_11658(void) { - M438UnkStruct2* temp_r31; - M438UnkStruct3* temp_r30; - M438UnkStruct3* temp_r29; +void fn_1_11658(void) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct3 *temp_r30; + M438UnkStruct3 *temp_r29; s32 var_r28; s32 var_r27; s16 var_r26; @@ -901,7 +941,7 @@ void fn_1_11658(void) { if (temp_r31->unk_5C != NULL) { HuMemDirectFree(temp_r31->unk_5C); } - + for (var_r27 = 0; var_r27 < temp_r31->unk_04; var_r27++) { var_r26 = temp_r31->unk_34[var_r27]; temp_r29 = &lbl_1_bss_DE4.unk_3C[var_r26]; @@ -922,7 +962,7 @@ void fn_1_11658(void) { } } } - + for (var_r28 = 1; var_r28 < lbl_1_bss_DE4.unk_32; var_r28++) { temp_r30 = &lbl_1_bss_DE4.unk_3C[(s16)var_r28]; if (temp_r30->unk_08 != 0U) { @@ -940,8 +980,9 @@ void fn_1_11658(void) { Hu3DModelKill(lbl_1_bss_DE4.unk_34); } -void fn_1_11890(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct2* temp_r31; +void fn_1_11890(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -954,9 +995,10 @@ void fn_1_11890(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_118FC(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_118FC(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -969,9 +1011,10 @@ void fn_1_118FC(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_1196C(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_1196C(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -985,8 +1028,9 @@ void fn_1_1196C(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_119E0(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct2* temp_r31; +void fn_1_119E0(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -999,9 +1043,10 @@ void fn_1_119E0(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11A64(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_11A64(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1014,9 +1059,10 @@ void fn_1_11A64(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11AEC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_11AEC(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -1030,9 +1076,10 @@ void fn_1_11AEC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11B78(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_11B78(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1045,9 +1092,10 @@ void fn_1_11B78(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11BE8(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_11BE8(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -1061,8 +1109,9 @@ void fn_1_11BE8(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11C5C(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct2* temp_r31; +void fn_1_11C5C(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1075,9 +1124,10 @@ void fn_1_11C5C(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11CC8(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_11CC8(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1090,9 +1140,10 @@ void fn_1_11CC8(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11D38(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_11D38(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -1106,8 +1157,9 @@ void fn_1_11D38(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11DAC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct2* temp_r31; +void fn_1_11DAC(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1120,9 +1172,10 @@ void fn_1_11DAC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11E18(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_11E18(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1135,9 +1188,10 @@ void fn_1_11E18(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11E88(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_11E88(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -1151,8 +1205,9 @@ void fn_1_11E88(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11EFC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct2* temp_r31; +void fn_1_11EFC(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1165,9 +1220,10 @@ void fn_1_11EFC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11F68(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_11F68(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1180,9 +1236,10 @@ void fn_1_11F68(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_11FD8(s16 arg0, f32 arg8, f32 arg9, f32 argA) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_11FD8(s16 arg0, f32 arg8, f32 arg9, f32 argA) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -1196,8 +1253,9 @@ void fn_1_11FD8(s16 arg0, f32 arg8, f32 arg9, f32 argA) { } } -void fn_1_1204C(s16 arg0, s32 arg1) { - M438UnkStruct2* temp_r31; +void fn_1_1204C(s16 arg0, s32 arg1) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1205,9 +1263,10 @@ void fn_1_1204C(s16 arg0, s32 arg1) { } } -void fn_1_12090(s16 arg0, s16 arg1, s32 arg2) { - M438UnkStruct* temp_r30; - M438UnkStruct2* temp_r31; +void fn_1_12090(s16 arg0, s16 arg1, s32 arg2) +{ + M438UnkStruct *temp_r30; + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1218,9 +1277,10 @@ void fn_1_12090(s16 arg0, s16 arg1, s32 arg2) { } } -void fn_1_12100(s16 arg0, s32 arg1) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_12100(s16 arg0, s32 arg1) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; s32 var_r29; if (arg0 != 0) { @@ -1232,8 +1292,9 @@ void fn_1_12100(s16 arg0, s32 arg1) { } } -void fn_1_12174(s16 arg0, u32 arg1) { - M438UnkStruct2* temp_r31; +void fn_1_12174(s16 arg0, u32 arg1) +{ + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1241,22 +1302,24 @@ void fn_1_12174(s16 arg0, u32 arg1) { } } -void fn_1_121B8(s16 arg0, s16 arg1, u32 arg2) { - M438UnkStruct* temp_r30; - M438UnkStruct2* temp_r31; +void fn_1_121B8(s16 arg0, s16 arg1, u32 arg2) +{ + M438UnkStruct *temp_r30; + M438UnkStruct2 *temp_r31; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; - if ((s16) temp_r31->unk_02 > arg1) { + if ((s16)temp_r31->unk_02 > arg1) { temp_r30 = &temp_r31->unk_3C[arg1]; temp_r30->unk_38 &= ~arg2; } } } -void fn_1_12228(s16 arg0, u32 arg1) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_12228(s16 arg0, u32 arg1) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; s32 var_r29; if (arg0 != 0) { @@ -1268,9 +1331,10 @@ void fn_1_12228(s16 arg0, u32 arg1) { } } -s32 fn_1_1229C(s16 arg0, s32 arg1) { - M438UnkStruct2* var_r31; - +s32 fn_1_1229C(s16 arg0, s32 arg1) +{ + M438UnkStruct2 *var_r31; + if (arg0 == 0) { return 0; } @@ -1282,9 +1346,10 @@ s32 fn_1_1229C(s16 arg0, s32 arg1) { return 0; } -s16 fn_1_122F8(s16 arg0, s16 arg1, s32 arg2) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +s16 fn_1_122F8(s16 arg0, s16 arg1, s32 arg2) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1299,9 +1364,10 @@ s16 fn_1_122F8(s16 arg0, s16 arg1, s32 arg2) { return arg0; } -void fn_1_12378(s16 arg0, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5) { - M438UnkStruct* temp_r31; - M438UnkStruct2* temp_r30; +void fn_1_12378(s16 arg0, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5) +{ + M438UnkStruct *temp_r31; + M438UnkStruct2 *temp_r30; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1315,9 +1381,10 @@ void fn_1_12378(s16 arg0, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5) { } } -void fn_1_123EC(s16 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_123EC(s16 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r29; if (arg0 != 0) { @@ -1332,9 +1399,10 @@ void fn_1_123EC(s16 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) { } } -void fn_1_12464(s16 arg0, s16 arg1, u8 arg2) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_12464(s16 arg0, s16 arg1, u8 arg2) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1345,9 +1413,10 @@ void fn_1_12464(s16 arg0, s16 arg1, u8 arg2) { } } -void fn_1_124CC(s16 arg0, u8 arg1) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_124CC(s16 arg0, u8 arg1) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; s32 var_r29; if (arg0 != 0) { @@ -1359,9 +1428,10 @@ void fn_1_124CC(s16 arg0, u8 arg1) { } } -void fn_1_12538(s16 arg0, s16 arg1, u8 arg2) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_12538(s16 arg0, s16 arg1, u8 arg2) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1372,9 +1442,10 @@ void fn_1_12538(s16 arg0, s16 arg1, u8 arg2) { } } -void fn_1_125A0(s16 arg0, u8 arg1) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_125A0(s16 arg0, u8 arg1) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; s32 var_r29; if (arg0 != 0) { @@ -1386,9 +1457,10 @@ void fn_1_125A0(s16 arg0, u8 arg1) { } } -void fn_1_1260C(s16 arg0, s16 arg1, u8 arg2) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_1260C(s16 arg0, s16 arg1, u8 arg2) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1399,9 +1471,10 @@ void fn_1_1260C(s16 arg0, s16 arg1, u8 arg2) { } } -void fn_1_12674(s16 arg0, u8 arg1) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_12674(s16 arg0, u8 arg1) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; s32 var_r29; if (arg0 != 0) { @@ -1413,9 +1486,10 @@ void fn_1_12674(s16 arg0, u8 arg1) { } } -void fn_1_126E0(s16 arg0, s16 arg1, u8 arg2) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_126E0(s16 arg0, s16 arg1, u8 arg2) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1426,9 +1500,10 @@ void fn_1_126E0(s16 arg0, s16 arg1, u8 arg2) { } } -void fn_1_1274C(s16 arg0, s16 arg1, u8 arg2, u8 arg3) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_1274C(s16 arg0, s16 arg1, u8 arg2, u8 arg3) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1439,15 +1514,16 @@ void fn_1_1274C(s16 arg0, s16 arg1, u8 arg2, u8 arg3) { } } -void fn_1_127C4(s16 arg0, u8 arg1) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r29; +void fn_1_127C4(s16 arg0, u8 arg1) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r29; s32 var_r28; s32 var_r30; if (arg0 != 0) { temp_r29 = &lbl_1_bss_DE4.unk_40[arg0]; - var_r31 = (M438UnkStruct*)&temp_r29->unk_3C; //! bug + var_r31 = (M438UnkStruct *)&temp_r29->unk_3C; //! bug for (var_r28 = 0; var_r28 < temp_r29->unk_02; var_r28++, var_r31++) { for (var_r30 = 0; var_r30 < var_r31->unk_34; var_r30++) { var_r31->unk_58[var_r30].unk_24 = arg1; @@ -1456,9 +1532,10 @@ void fn_1_127C4(s16 arg0, u8 arg1) { } } -void fn_1_1285C(s16 arg0, s16 arg1, f32 arg8) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_1285C(s16 arg0, s16 arg1, f32 arg8) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1469,9 +1546,10 @@ void fn_1_1285C(s16 arg0, s16 arg1, f32 arg8) { } } -void fn_1_128C8(s16 arg0, s16 arg1, u8 arg2, f32 arg8) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_128C8(s16 arg0, s16 arg1, u8 arg2, f32 arg8) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1482,16 +1560,17 @@ void fn_1_128C8(s16 arg0, s16 arg1, u8 arg2, f32 arg8) { } } -void fn_1_12940(s16 arg0, f32 arg8) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_12940(s16 arg0, f32 arg8) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r28; s32 var_r29; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; var_r31 = temp_r30->unk_3C; - + for (var_r28 = 0; var_r28 < temp_r30->unk_02; var_r28++, var_r31++) { for (var_r29 = 0; var_r29 < var_r31->unk_34; var_r29++) { var_r31->unk_58[var_r29].unk_28 = arg8; @@ -1500,9 +1579,10 @@ void fn_1_12940(s16 arg0, f32 arg8) { } } -void fn_1_129D8(s16 arg0, s16 arg1, u8 arg2) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_129D8(s16 arg0, s16 arg1, u8 arg2) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1513,9 +1593,10 @@ void fn_1_129D8(s16 arg0, s16 arg1, u8 arg2) { } } -void fn_1_12A48(s16 arg0, s16 arg1, u8 arg2, u8 arg3) { - M438UnkStruct2* temp_r31; - M438UnkStruct* var_r30; +void fn_1_12A48(s16 arg0, s16 arg1, u8 arg2, u8 arg3) +{ + M438UnkStruct2 *temp_r31; + M438UnkStruct *var_r30; if (arg0 != 0) { temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; @@ -1526,16 +1607,17 @@ void fn_1_12A48(s16 arg0, s16 arg1, u8 arg2, u8 arg3) { } } -void fn_1_12AC0(s16 arg0, u8 arg1) { - M438UnkStruct* var_r31; - M438UnkStruct2* temp_r30; +void fn_1_12AC0(s16 arg0, u8 arg1) +{ + M438UnkStruct *var_r31; + M438UnkStruct2 *temp_r30; s32 var_r28; s32 var_r29; if (arg0 != 0) { temp_r30 = &lbl_1_bss_DE4.unk_40[arg0]; var_r31 = temp_r30->unk_3C; - + for (var_r28 = 0; var_r28 < temp_r30->unk_02; var_r28++, var_r31++) { for (var_r29 = 0; var_r29 < var_r31->unk_34; var_r29++) { var_r31->unk_58[var_r29].unk_00 = arg1; @@ -1544,9 +1626,10 @@ void fn_1_12AC0(s16 arg0, u8 arg1) { } } -void fn_1_12B58(s16 arg0, u8 arg1) { - M438UnkStruct3* var_r31; - +void fn_1_12B58(s16 arg0, u8 arg1) +{ + M438UnkStruct3 *var_r31; + if (arg0 != 0) { var_r31 = &lbl_1_bss_DE4.unk_3C[arg0]; var_r31->unk_04 = arg1; diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 85db113d..aa700cf7 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -1843,7 +1843,10 @@ void fn_1_7D60(unkStruct15 *arg0, unkStruct13 *arg1, s16 arg2) } GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1); GXLoadTexObj(&sp1C, arg2); - return; +#ifdef TARGET_PC + GXDestroyTexObj(&sp1C); + GXDestroyTlutObj(&sp10); +#endif } void fn_1_806C(ModelData *arg0, Mtx arg1) @@ -2132,6 +2135,9 @@ void fn_1_8D1C(void) GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGBA8, GX_FALSE); GXCopyTex(lbl_1_bss_28, 0); DCFlushRange(lbl_1_bss_28, lbl_1_bss_24); +#ifdef TARGET_PC + GXDestroyTexObj(&sp10); +#endif } void fn_1_91A4(Vec *arg0, Vec *arg1, Vec *arg2, f32 arg3[5]) @@ -2460,7 +2466,7 @@ void fn_1_9C04(ModelData *arg0, Mtx arg1) GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8); fn_1_9344(arg1, sp128); - PSMTXReorder(sp128, spF8); + MTXReorder(sp128, spF8); if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) { var_r23 = temp_r30->unkC; var_r23(arg0, temp_r30, arg1); @@ -2468,7 +2474,7 @@ void fn_1_9C04(ModelData *arg0, Mtx arg1) var_r29 = temp_r30->unk18; var_r31 = temp_r30->unk1C; var_r27 = temp_r30->unk20; - PSMTXROMultVecArray(spF8, &temp_r30->unk2C, (Vec *)&sp68[0], 4); + MTXROMultVecArray(spF8, &temp_r30->unk2C, (Vec *)&sp68[0], 4); for (var_r26 = 0; var_r26 < temp_r30->unk0; var_r26++, var_r29++, var_r27 += 4) { if (var_r29->unk62 == 0) { diff --git a/src/REL/m442Dll/main.c b/src/REL/m442Dll/main.c index 53dd649a..e8f1e5a4 100644 --- a/src/REL/m442Dll/main.c +++ b/src/REL/m442Dll/main.c @@ -1531,8 +1531,8 @@ void fn_1_485C(ModelData *model, Mtx mtx) GXSetProjection(sp40, GX_PERSPECTIVE); MTXInverse(mtx, spA0); spA0[0][3] = spA0[1][3] = spA0[2][3] = 0.0f; - PSMTXReorder(spA0, sp70); - PSMTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4); + MTXReorder(spA0, sp70); + MTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4); GXLoadPosMtxImm(mtx, 0); var_r31 = lbl_1_bss_5C; for (var_r30 = 0; var_r30 < 1024; var_r30++, var_r31++) { @@ -1630,6 +1630,9 @@ void fn_1_54C8(ModelData *model, Mtx mtx) GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&spC); +#endif } s16 fn_1_5918(Vec *arg0) diff --git a/src/REL/m446Dll/main.c b/src/REL/m446Dll/main.c index b73f19e3..c094ea9d 100644 --- a/src/REL/m446Dll/main.c +++ b/src/REL/m446Dll/main.c @@ -5,7 +5,6 @@ #include "game/frand.h" #include "game/gamework_data.h" #include "game/hsfman.h" -#include "game/jmp.h" #include "game/minigame_seq.h" #include "game/window.h" #include "game/wipe.h" diff --git a/src/REL/m448Dll/main.c b/src/REL/m448Dll/main.c index 961f27be..3965c81c 100755 --- a/src/REL/m448Dll/main.c +++ b/src/REL/m448Dll/main.c @@ -301,6 +301,9 @@ void fn_1_4FC(ModelData *model, Mtx matrix) } } } +#ifdef TARGET_PC + GXDestroyTexObj(&lbl_1_bss_40); +#endif } const Vec lbl_1_rodata_100 = { 0.0f, 0.0f, 0.0f }; diff --git a/src/REL/m450Dll/main.c b/src/REL/m450Dll/main.c index 4610c4b3..84bd07f6 100644 --- a/src/REL/m450Dll/main.c +++ b/src/REL/m450Dll/main.c @@ -1608,7 +1608,7 @@ void fn_1_56C4(ModelData *arg0, Mtx arg1) sp130[0][3] = 0.0f; sp130[1][3] = 0.0f; sp130[2][3] = 0.0f; - PSMTXReorder(sp130, sp100); + MTXReorder(sp130, sp100); if ((omPauseChk() == 0) && (var_r31->unk_00)) { spC = var_r31->unk_00; spC(arg0, var_r31, arg1); @@ -1616,7 +1616,7 @@ void fn_1_56C4(ModelData *arg0, Mtx arg1) var_r29 = var_r31->unk_10; var_r30 = var_r31->unk_14; var_r27 = var_r31->unk_18; - PSMTXROMultVecArray(sp100, &var_r31->unk_28, sp70, 4); + MTXROMultVecArray(sp100, &var_r31->unk_28, sp70, 4); for (var_r19 = 0; var_r19 < var_r31->unk_64; var_r19++, var_r29++, var_r27 += 4) { if (var_r29->unk_3E < 0) { var_r30->x = var_r30->y = var_r30->z = 0.0f; @@ -5048,7 +5048,7 @@ void fn_1_15BAC(Vec *arg0, Vec *arg1, float arg8, s32 arg2, float *arg3, float * else if (0.0f > arg8) { arg8 += 360.0f; } - *arg3 = (atan2d(sp14.z, sp14.x)) - 90.0; + *arg3 = (atan2d(sp14.z, sp14.x))-90.0; *arg4 = atan2d(sp14.y, sqrtf((sp14.x * sp14.x) + (sp14.z * sp14.z))); if (arg2 == 0) { *arg3 *= -1.0f; diff --git a/src/REL/m455Dll/stage.c b/src/REL/m455Dll/stage.c index ff708c84..71bd7ab4 100644 --- a/src/REL/m455Dll/stage.c +++ b/src/REL/m455Dll/stage.c @@ -968,6 +968,9 @@ void fn_1_6144(Work347CUnk4 *fbWork, float x1, float y1, float scale) GXPosition3f32(x1, y2, 0); GXTexCoord2f32(0, 1); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&texObj); +#endif } void fn_1_6594(s16 arg0, Work347CUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL arg4) @@ -980,6 +983,9 @@ void fn_1_6594(s16 arg0, Work347CUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL GXInitTexObjLOD(&texObj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); } GXLoadTexObj(&texObj, arg0); +#ifdef TARGET_PC + GXDestroyTexObj(&texObj); +#endif } s32 fn_1_6698(Vec *arg0, float arg1, float arg2, s32 arg3) diff --git a/src/REL/m456Dll/stage.c b/src/REL/m456Dll/stage.c index 8e13a6cf..14e18f6b 100644 --- a/src/REL/m456Dll/stage.c +++ b/src/REL/m456Dll/stage.c @@ -857,6 +857,9 @@ void fn_1_5C74(Work2FACUnk4 *fbWork, float x1, float y1, float scale) GXPosition3f32(x1, y2, 0); GXTexCoord2f32(0, 1); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&texObj); +#endif } void fn_1_60C4(s16 arg0, Work2FACUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL arg4) @@ -870,6 +873,9 @@ void fn_1_60C4(s16 arg0, Work2FACUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL GXInitTexObjLOD(&texObj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); } GXLoadTexObj(&texObj, arg0); +#ifdef TARGET_PC + GXDestroyTexObj(&texObj); +#endif } s32 fn_1_61C8(Vec *arg0, float arg1, float arg2, s32 arg3) diff --git a/src/REL/m460Dll/map.c b/src/REL/m460Dll/map.c index 15fa7f53..3ce6f725 100644 --- a/src/REL/m460Dll/map.c +++ b/src/REL/m460Dll/map.c @@ -398,6 +398,9 @@ void fn_1_7790(ModelData *model, Mtx mtx) GXPosition3f32(var_f31, var_f30, -var_f29); GXPosition3f32(var_f31, -var_f30, -var_f29); GXPosition3f32(-var_f31, -var_f30, -var_f29); +#ifdef TARGET_PC + GXDestroyTexObj(&spC); +#endif } void fn_1_7B94(s32 arg0) diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index cb1c254b..1e3778aa 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -859,6 +859,9 @@ void fn_1_2B68(ModelData *mdl, Mtx arg1) GXSetNumIndStages(0U); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); +#ifdef TARGET_PC + GXDestroyTexObj(&sp30); +#endif } // -------------------------------------------------------------------------- // diff --git a/src/REL/resultDll/battle.c b/src/REL/resultDll/battle.c index f9a58cba..84d962fa 100644 --- a/src/REL/resultDll/battle.c +++ b/src/REL/resultDll/battle.c @@ -676,4 +676,7 @@ static void ResultShadowDraw(struct model_data *model, Mtx matrix) GXPosition3f32(500.0f, 0, 500.0f); GXPosition3f32(-500.0f, 0, 500.0f); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&tex); +#endif } diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index dc05b755..dba306f1 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -761,7 +761,7 @@ void fn_1_97F8(s32 arg0) temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2); temp_r30->unk00_bit0 = 0; temp_r30->unk4 = arg0; - temp_r30->unk_0C = HuMemDirectMallocNum(0, 0x190, MEMORY_DEFAULT_NUM); + temp_r30->unk_0C = HuMemDirectMallocNum(0, 20 * sizeof(unkTemp), MEMORY_DEFAULT_NUM); BoardPlayerPosGet(arg0, &sp8); temp_r30->unk8 = (80.0f + sp8.y); memset(temp_r30->unk_0C, 0, 0x190); diff --git a/src/REL/w05Dll/mg_coin.c b/src/REL/w05Dll/mg_coin.c index c2f8d938..a5388cd8 100644 --- a/src/REL/w05Dll/mg_coin.c +++ b/src/REL/w05Dll/mg_coin.c @@ -157,7 +157,7 @@ void fn_1_9D0C(omObjData *arg0) s32 var_r30; dataCopy2 *temp_r31; - arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, MEMORY_DEFAULT_NUM); + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(dataCopy2), MEMORY_DEFAULT_NUM); temp_r31 = arg0->data; temp_r31->unk_02 = 5; temp_r31->unk_04 = 0x3C; @@ -318,7 +318,7 @@ void fn_1_A5B0(omObjData *arg0) BoardModelVisibilitySet(lbl_1_bss_D4, 1); BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f); lbl_1_bss_C8 = temp_r29 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3C4); - temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0xC, MEMORY_DEFAULT_NUM); + temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Vec), MEMORY_DEFAULT_NUM); temp_r31 = temp_r29->data; lbl_1_bss_C8->work[1] = 1; Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14); diff --git a/src/REL/w05Dll/mg_item.c b/src/REL/w05Dll/mg_item.c index 0e942bef..4ea226d7 100644 --- a/src/REL/w05Dll/mg_item.c +++ b/src/REL/w05Dll/mg_item.c @@ -114,7 +114,7 @@ void fn_1_6B7C(void) lbl_1_bss_94 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_7284); lbl_1_bss_8C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_78A0); lbl_1_bss_90 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL); - lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14, MEMORY_DEFAULT_NUM); + lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(dataCopy), MEMORY_DEFAULT_NUM); if (lbl_1_bss_78 == NULL) { lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00)); HuSprAnimLock(lbl_1_bss_78); diff --git a/src/REL/ztardll/main.c b/src/REL/ztardll/main.c index 0d20bade..8138a5f4 100644 --- a/src/REL/ztardll/main.c +++ b/src/REL/ztardll/main.c @@ -1538,4 +1538,7 @@ void fn_1_7414(ModelData *model, Mtx matrix) GXPosition3f32(500.0f, 0.0f, -500.0f); GXPosition3f32(500.0f, 0.0f, 500.0f); GXPosition3f32(-500.0f, 0.0f, 500.0f); +#ifdef TARGET_PC + GXDestroyTexObj(&spC); +#endif } diff --git a/src/dolphin/demo/DEMOPuts.c b/src/dolphin/demo/DEMOPuts.c index 618152e5..c5af26fc 100644 --- a/src/dolphin/demo/DEMOPuts.c +++ b/src/dolphin/demo/DEMOPuts.c @@ -53,6 +53,9 @@ void DEMOLoadFont(enum _GXTexMapID texMap, enum _GXTexMtx texMtx, DMTexFlt texFl GXLoadTexMtxImm(fontTMtx, texMtx, 1); GXSetNumTexGens(1); GXSetTexCoordGen(0, 1, 4, texMtx); +#ifdef TARGET_PC + GXDestroyTexObj(&fontTexObj); +#endif } void DEMOSetupScrnSpc(long width, long height, float depth) diff --git a/src/dolphin/mtx/mtx.c b/src/dolphin/mtx/mtx.c index 558d4d03..30a3aa18 100644 --- a/src/dolphin/mtx/mtx.c +++ b/src/dolphin/mtx/mtx.c @@ -1,4 +1,5 @@ #include "dolphin/mtx.h" +#include "dolphin/gx/GXPriv.h" static f32 Unit01[] = { 0.0f, 1.0f }; @@ -6,17 +7,21 @@ extern f32 sinf(f32); extern f32 cosf(f32); extern f32 tanf(f32); -void C_MTXIdentity(Mtx mtx) +void C_MTXIdentity(Mtx m) { - mtx[0][0] = 1.0f; - mtx[0][1] = 0.0f; - mtx[0][2] = 0.0f; - mtx[1][0] = 0.0f; - mtx[1][1] = 1.0f; - mtx[1][2] = 0.0f; - mtx[2][0] = 0.0f; - mtx[2][1] = 0.0f; - mtx[2][2] = 1.0f; + ASSERTMSGLINE(189, m, "MtxIdentity(): NULL Mtx 'm' "); + m[0][0] = 1; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = 1; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 1; + m[2][3] = 0; } #ifdef GEKKO @@ -41,27 +46,23 @@ void PSMTXIdentity(register Mtx m) } #endif -void C_MTXCopy(const Mtx src, Mtx dst) -{ - - if (src == dst) { - return; +void C_MTXCopy(const Mtx src, Mtx dst) { + ASSERTMSGLINE(250, src, "MTXCopy(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(251, dst, "MTXCopy(): NULL MtxPtr 'dst' "); + if (src != dst) { + dst[0][0] = src[0][0]; + dst[0][1] = src[0][1]; + dst[0][2] = src[0][2]; + dst[0][3] = src[0][3]; + dst[1][0] = src[1][0]; + dst[1][1] = src[1][1]; + dst[1][2] = src[1][2]; + dst[1][3] = src[1][3]; + dst[2][0] = src[2][0]; + dst[2][1] = src[2][1]; + dst[2][2] = src[2][2]; + dst[2][3] = src[2][3]; } - - dst[0][0] = src[0][0]; - dst[0][1] = src[0][1]; - dst[0][2] = src[0][2]; - dst[0][3] = src[0][3]; - - dst[1][0] = src[1][0]; - dst[1][1] = src[1][1]; - dst[1][2] = src[1][2]; - dst[1][3] = src[1][3]; - - dst[2][0] = src[2][0]; - dst[2][1] = src[2][1]; - dst[2][2] = src[2][2]; - dst[2][3] = src[2][3]; } #ifdef GEKKO @@ -88,33 +89,34 @@ asm void PSMTXCopy(const register Mtx src, register Mtx dst) } #endif -void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab) -{ +void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab) { Mtx mTmp; MtxPtr m; - if ((ab == a) || (ab == b)) { - m = mTmp; - } + ASSERTMSGLINE(324, a, "MTXConcat(): NULL MtxPtr 'a' "); + ASSERTMSGLINE(325, b, "MTXConcat(): NULL MtxPtr 'b' "); + ASSERTMSGLINE(326, ab, "MTXConcat(): NULL MtxPtr 'ab' "); - else { + if (ab == a || ab == b) { + m = mTmp; + } else { m = ab; } - m[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]; - m[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]; - m[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]; - m[0][3] = a[0][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3] + a[0][3]; + m[0][0] = 0 + a[0][2] * b[2][0] + ((a[0][0] * b[0][0]) + (a[0][1] * b[1][0])); + m[0][1] = 0 + a[0][2] * b[2][1] + ((a[0][0] * b[0][1]) + (a[0][1] * b[1][1])); + m[0][2] = 0 + a[0][2] * b[2][2] + ((a[0][0] * b[0][2]) + (a[0][1] * b[1][2])); + m[0][3] = a[0][3] + (a[0][2] * b[2][3] + (a[0][0] * b[0][3] + (a[0][1] * b[1][3]))); - m[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0]; - m[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1]; - m[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2]; - m[1][3] = a[1][0] * b[0][3] + a[1][1] * b[1][3] + a[1][2] * b[2][3] + a[1][3]; + m[1][0] = 0 + a[1][2] * b[2][0] + ((a[1][0] * b[0][0]) + (a[1][1] * b[1][0])); + m[1][1] = 0 + a[1][2] * b[2][1] + ((a[1][0] * b[0][1]) + (a[1][1] * b[1][1])); + m[1][2] = 0 + a[1][2] * b[2][2] + ((a[1][0] * b[0][2]) + (a[1][1] * b[1][2])); + m[1][3] = a[1][3] + (a[1][2] * b[2][3] + (a[1][0] * b[0][3] + (a[1][1] * b[1][3]))); - m[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0]; - m[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1]; - m[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2]; - m[2][3] = a[2][0] * b[0][3] + a[2][1] * b[1][3] + a[2][2] * b[2][3] + a[2][3]; + m[2][0] = 0 + a[2][2] * b[2][0] + ((a[2][0] * b[0][0]) + (a[2][1] * b[1][0])); + m[2][1] = 0 + a[2][2] * b[2][1] + ((a[2][0] * b[0][1]) + (a[2][1] * b[1][1])); + m[2][2] = 0 + a[2][2] * b[2][2] + ((a[2][0] * b[0][2]) + (a[2][1] * b[1][2])); + m[2][3] = a[2][3] + (a[2][2] * b[2][3] + (a[2][0] * b[0][3] + (a[2][1] * b[1][3]))); if (m == mTmp) { C_MTXCopy(mTmp, ab); @@ -222,12 +224,16 @@ asm void PSMTXConcat(const register Mtx mA, const register Mtx mB, register Mtx } #endif -void C_MTXConcatArray(const Mtx a, const Mtx *srcBase, Mtx *dstBase, u32 count) -{ +void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count) { u32 i; + + ASSERTMSGLINE(580, a != 0, "MTXConcatArray(): NULL MtxPtr 'a' "); + ASSERTMSGLINE(581, srcBase != 0, "MTXConcatArray(): NULL MtxPtr 'srcBase' "); + ASSERTMSGLINE(582, dstBase != 0, "MTXConcatArray(): NULL MtxPtr 'dstBase' "); + ASSERTMSGLINE(583, count > 1, "MTXConcatArray(): count must be greater than 1."); + for (i = 0; i < count; i++) { C_MTXConcat(a, *srcBase, *dstBase); - srcBase++; dstBase++; } @@ -351,31 +357,31 @@ _loop: #endif -void C_MTXTranspose(const Mtx src, Mtx xPose) -{ +void C_MTXTranspose(const Mtx src, Mtx xPose) { Mtx mTmp; MtxPtr m; + ASSERTMSGLINE(851, src, "MTXTranspose(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(852, xPose, "MTXTranspose(): NULL MtxPtr 'xPose' "); + if (src == xPose) { m = mTmp; - } - else { + } else { m = xPose; } m[0][0] = src[0][0]; m[0][1] = src[1][0]; m[0][2] = src[2][0]; - m[0][3] = 0.0f; + m[0][3] = 0; m[1][0] = src[0][1]; m[1][1] = src[1][1]; m[1][2] = src[2][1]; - m[1][3] = 0.0f; + m[1][3] = 0; m[2][0] = src[0][2]; m[2][1] = src[1][2]; m[2][2] = src[2][2]; - m[2][3] = 0.0f; - + m[2][3] = 0; if (m == mTmp) { C_MTXCopy(mTmp, xPose); } @@ -413,48 +419,48 @@ void PSMTXTranspose(const register Mtx src, register Mtx xPose) } #endif -u32 C_MTXInverse(const Mtx src, Mtx inv) -{ +u32 C_MTXInverse(const Mtx src, Mtx inv) { Mtx mTmp; MtxPtr m; f32 det; + ASSERTMSGLINE(950, src, "MTXInverse(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(951, inv, "MTXInverse(): NULL MtxPtr 'inv' "); + if (src == inv) { m = mTmp; - } - else { + } else { m = inv; } - - det = src[0][0] * src[1][1] * src[2][2] + src[0][1] * src[1][2] * src[2][0] + src[0][2] * src[1][0] * src[2][1] - - src[2][0] * src[1][1] * src[0][2] - src[1][0] * src[0][1] * src[2][2] - src[0][0] * src[2][1] * src[1][2]; - - if (det == 0.0f) { + det = ((((src[2][1] * (src[0][2] * src[1][0])) + + ((src[2][2] * (src[0][0] * src[1][1])) + + (src[2][0] * (src[0][1] * src[1][2])))) + - (src[0][2] * (src[2][0] * src[1][1]))) + - (src[2][2] * (src[1][0] * src[0][1]))) + - (src[1][2] * (src[0][0] * src[2][1])); + if (0 == det) { return 0; } + det = 1 / det; + m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2]))); + m[0][1] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2]))); + m[0][2] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2]))); - det = 1.0f / det; + m[1][0] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2]))); + m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2]))); + m[1][2] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2]))); - m[0][0] = (src[1][1] * src[2][2] - src[2][1] * src[1][2]) * det; - m[0][1] = -(src[0][1] * src[2][2] - src[2][1] * src[0][2]) * det; - m[0][2] = (src[0][1] * src[1][2] - src[1][1] * src[0][2]) * det; + m[2][0] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1]))); + m[2][1] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1]))); + m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1]))); - m[1][0] = -(src[1][0] * src[2][2] - src[2][0] * src[1][2]) * det; - m[1][1] = (src[0][0] * src[2][2] - src[2][0] * src[0][2]) * det; - m[1][2] = -(src[0][0] * src[1][2] - src[1][0] * src[0][2]) * det; - - m[2][0] = (src[1][0] * src[2][1] - src[2][0] * src[1][1]) * det; - m[2][1] = -(src[0][0] * src[2][1] - src[2][0] * src[0][1]) * det; - m[2][2] = (src[0][0] * src[1][1] - src[1][0] * src[0][1]) * det; - - m[0][3] = -m[0][0] * src[0][3] - m[0][1] * src[1][3] - m[0][2] * src[2][3]; - m[1][3] = -m[1][0] * src[0][3] - m[1][1] * src[1][3] - m[1][2] * src[2][3]; - m[2][3] = -m[2][0] * src[0][3] - m[2][1] * src[1][3] - m[2][2] * src[2][3]; + m[0][3] = ((-m[0][0] * src[0][3]) - (m[0][1] * src[1][3])) - (m[0][2] * src[2][3]); + m[1][3] = ((-m[1][0] * src[0][3]) - (m[1][1] * src[1][3])) - (m[1][2] * src[2][3]); + m[2][3] = ((-m[2][0] * src[0][3]) - (m[2][1] * src[1][3])) - (m[2][2] * src[2][3]); if (m == mTmp) { C_MTXCopy(mTmp, inv); } - return 1; } @@ -531,48 +537,48 @@ _regular: } #endif -u32 C_MTXInvXpose(const Mtx src, Mtx invX) -{ +u32 C_MTXInvXpose(const Mtx src, Mtx invX) { Mtx mTmp; MtxPtr m; f32 det; + ASSERTMSGLINE(1185, src, "MTXInvXpose(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(1186, invX, "MTXInvXpose(): NULL MtxPtr 'invX' "); + if (src == invX) { m = mTmp; - } - else { + } else { m = invX; } - - det = src[0][0] * src[1][1] * src[2][2] + src[0][1] * src[1][2] * src[2][0] + src[0][2] * src[1][0] * src[2][1] - - src[2][0] * src[1][1] * src[0][2] - src[1][0] * src[0][1] * src[2][2] - src[0][0] * src[2][1] * src[1][2]; - - if (det == 0.0f) { + det = ((((src[2][1] * (src[0][2] * src[1][0])) + + ((src[2][2] * (src[0][0] * src[1][1])) + + (src[2][0] * (src[0][1] * src[1][2])))) + - (src[0][2] * (src[2][0] * src[1][1]))) + - (src[2][2] * (src[1][0] * src[0][1]))) + - (src[1][2] * (src[0][0] * src[2][1])); + if (0 == det) { return 0; } + det = 1 / det; + m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2]))); + m[0][1] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2]))); + m[0][2] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1]))); - det = 1.0f / det; + m[1][0] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2]))); + m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2]))); + m[1][2] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1]))); - m[0][0] = (src[1][1] * src[2][2] - src[2][1] * src[1][2]) * det; - m[0][1] = -(src[1][0] * src[2][2] - src[2][0] * src[1][2]) * det; - m[0][2] = (src[1][0] * src[2][1] - src[2][0] * src[1][1]) * det; + m[2][0] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2]))); + m[2][1] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2]))); + m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1]))); - m[1][0] = -(src[0][1] * src[2][2] - src[2][1] * src[0][2]) * det; - m[1][1] = (src[0][0] * src[2][2] - src[2][0] * src[0][2]) * det; - m[1][2] = -(src[0][0] * src[2][1] - src[2][0] * src[0][1]) * det; - - m[2][0] = (src[0][1] * src[1][2] - src[1][1] * src[0][2]) * det; - m[2][1] = -(src[0][0] * src[1][2] - src[1][0] * src[0][2]) * det; - m[2][2] = (src[0][0] * src[1][1] - src[1][0] * src[0][1]) * det; - - m[0][3] = 0.0F; - m[1][3] = 0.0F; - m[2][3] = 0.0F; + m[0][3] = 0; + m[1][3] = 0; + m[2][3] = 0; if (m == mTmp) { C_MTXCopy(mTmp, invX); } - return 1; } @@ -638,10 +644,11 @@ _regular: } #endif -void C_MTXRotRad(Mtx m, char axis, f32 rad) -{ +void C_MTXRotRad(Mtx m, char axis, f32 rad) { + f32 sinA; + f32 cosA; - f32 sinA, cosA; + ASSERTMSGLINE(1447, m, "MTXRotRad(): NULL MtxPtr 'm' "); sinA = sinf(rad); cosA = cosf(rad); C_MTXRotTrig(m, axis, sinA, cosA); @@ -659,60 +666,57 @@ void PSMTXRotRad(Mtx m, char axis, f32 rad) } #endif -void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) -{ - switch (axis) { - - case 'x': - case 'X': - m[0][0] = 1.0f; - m[0][1] = 0.0f; - m[0][2] = 0.0f; - m[0][3] = 0.0f; - m[1][0] = 0.0f; - m[1][1] = cosA; - m[1][2] = -sinA; - m[1][3] = 0.0f; - m[2][0] = 0.0f; - m[2][1] = sinA; - m[2][2] = cosA; - m[2][3] = 0.0f; - break; - - case 'y': - case 'Y': - m[0][0] = cosA; - m[0][1] = 0.0f; - m[0][2] = sinA; - m[0][3] = 0.0f; - m[1][0] = 0.0f; - m[1][1] = 1.0f; - m[1][2] = 0.0f; - m[1][3] = 0.0f; - m[2][0] = -sinA; - m[2][1] = 0.0f; - m[2][2] = cosA; - m[2][3] = 0.0f; - break; - - case 'z': - case 'Z': - m[0][0] = cosA; - m[0][1] = -sinA; - m[0][2] = 0.0f; - m[0][3] = 0.0f; - m[1][0] = sinA; - m[1][1] = cosA; - m[1][2] = 0.0f; - m[1][3] = 0.0f; - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = 1.0f; - m[2][3] = 0.0f; - break; - - default: - break; +void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) { + ASSERTMSGLINE(1502, m, "MTXRotTrig(): NULL MtxPtr 'm' "); + switch(axis) { + case 'x': + case 'X': + m[0][0] = 1; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = cosA; + m[1][2] = -sinA; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = sinA; + m[2][2] = cosA; + m[2][3] = 0; + break; + case 'y': + case 'Y': + m[0][0] = cosA; + m[0][1] = 0; + m[0][2] = sinA; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = 1; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = -sinA; + m[2][1] = 0; + m[2][2] = cosA; + m[2][3] = 0; + break; + case 'z': + case 'Z': + m[0][0] = cosA; + m[0][1] = -sinA; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = sinA; + m[1][1] = cosA; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 1; + m[2][3] = 0; + break; + default: + ASSERTMSGLINE(1529, FALSE, "MTXRotTrig(): invalid 'axis' value "); + break; } } @@ -780,42 +784,43 @@ _end: #endif -void C_MTXRotAxisRad(Mtx m, const Vec *axis, f32 rad) -{ +void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { Vec vN; - f32 s, c; + f32 s; + f32 c; f32 t; - f32 x, y, z; - f32 xSq, ySq, zSq; + f32 x; + f32 y; + f32 z; + f32 xSq; + f32 ySq; + f32 zSq; + + ASSERTMSGLINE(1677, m, "MTXRotAxisRad(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(1678, axis, "MTXRotAxisRad(): NULL VecPtr 'axis' "); s = sinf(rad); c = cosf(rad); - t = 1.0f - c; - + t = 1 - c; C_VECNormalize(axis, &vN); - x = vN.x; y = vN.y; z = vN.z; - - xSq = x * x; - ySq = y * y; - zSq = z * z; - - m[0][0] = (t * xSq) + (c); - m[0][1] = (t * x * y) - (s * z); - m[0][2] = (t * x * z) + (s * y); - m[0][3] = 0.0f; - - m[1][0] = (t * x * y) + (s * z); - m[1][1] = (t * ySq) + (c); - m[1][2] = (t * y * z) - (s * x); - m[1][3] = 0.0f; - - m[2][0] = (t * x * z) - (s * y); - m[2][1] = (t * y * z) + (s * x); - m[2][2] = (t * zSq) + (c); - m[2][3] = 0.0f; + xSq = (x * x); + ySq = (y * y); + zSq = (z * z); + m[0][0] = (c + (t * xSq)); + m[0][1] = (y * (t * x)) - (s * z); + m[0][2] = (z * (t * x)) + (s * y); + m[0][3] = 0; + m[1][0] = ((y * (t * x)) + (s * z)); + m[1][1] = (c + (t * ySq)); + m[1][2] = ((z * (t * y)) - (s * x)); + m[1][3] = 0; + m[2][0] = ((z * (t * x)) - (s * y)); + m[2][1] = ((z * (t * y)) + (s * x)); + m[2][2] = (c + (t * zSq)); + m[2][3] = 0; } #ifdef GEKKO @@ -875,19 +880,19 @@ void PSMTXRotAxisRad(register Mtx m, const Vec *axis, register f32 rad) #endif -void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT) -{ - m[0][0] = 1.0f; - m[0][1] = 0.0f; - m[0][2] = 0.0f; +void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT) { + ASSERTMSGLINE(1866, m, "MTXTrans(): NULL MtxPtr 'm' "); + m[0][0] = 1; + m[0][1] = 0; + m[0][2] = 0; m[0][3] = xT; - m[1][0] = 0.0f; - m[1][1] = 1.0f; - m[1][2] = 0.0f; + m[1][0] = 0; + m[1][1] = 1; + m[1][2] = 0; m[1][3] = yT; - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = 1.0f; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 1; m[2][3] = zT; } @@ -914,8 +919,10 @@ void PSMTXTrans(register Mtx m, register f32 xT, register f32 yT, register f32 z } #endif -void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) -{ +void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) { + ASSERTMSGLINE(1933, src, "MTXTransApply(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(1934, dst, "MTXTransApply(): NULL MtxPtr 'src' "); //! wrong assert string + if (src != dst) { dst[0][0] = src[0][0]; dst[0][1] = src[0][1]; @@ -928,9 +935,9 @@ void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) dst[2][2] = src[2][2]; } - dst[0][3] = src[0][3] + xT; - dst[1][3] = src[1][3] + yT; - dst[2][3] = src[2][3] + zT; + dst[0][3] = (src[0][3] + xT); + dst[1][3] = (src[1][3] + yT); + dst[2][3] = (src[2][3] + zT); } #ifdef GEKKO @@ -961,20 +968,20 @@ asm void PSMTXTransApply(const register Mtx src, register Mtx dst, register f32 } #endif -void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS) -{ +void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS) { + ASSERTMSGLINE(2008, m, "MTXScale(): NULL MtxPtr 'm' "); m[0][0] = xS; - m[0][1] = 0.0f; - m[0][2] = 0.0f; - m[0][3] = 0.0f; - m[1][0] = 0.0f; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; m[1][1] = yS; - m[1][2] = 0.0f; - m[1][3] = 0.0f; - m[2][0] = 0.0f; - m[2][1] = 0.0f; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; m[2][2] = zS; - m[2][3] = 0.0f; + m[2][3] = 0; } #ifdef GEKKO @@ -997,22 +1004,21 @@ void PSMTXScale(register Mtx m, register f32 xS, register f32 yS, register f32 z } #endif -void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) -{ - dst[0][0] = src[0][0] * xS; - dst[0][1] = src[0][1] * xS; - dst[0][2] = src[0][2] * xS; - dst[0][3] = src[0][3] * xS; - - dst[1][0] = src[1][0] * yS; - dst[1][1] = src[1][1] * yS; - dst[1][2] = src[1][2] * yS; - dst[1][3] = src[1][3] * yS; - - dst[2][0] = src[2][0] * zS; - dst[2][1] = src[2][1] * zS; - dst[2][2] = src[2][2] * zS; - dst[2][3] = src[2][3] * zS; +void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) { + ASSERTMSGLINE(2070, src, "MTXScaleApply(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(2071, dst, "MTXScaleApply(): NULL MtxPtr 'dst' "); + dst[0][0] = (src[0][0] * xS); + dst[0][1] = (src[0][1] * xS); + dst[0][2] = (src[0][2] * xS); + dst[0][3] = (src[0][3] * xS); + dst[1][0] = (src[1][0] * yS); + dst[1][1] = (src[1][1] * yS); + dst[1][2] = (src[1][2] * yS); + dst[1][3] = (src[1][3] * yS); + dst[2][0] = (src[2][0] * zS); + dst[2][1] = (src[2][1] * zS); + dst[2][2] = (src[2][2] * zS); + dst[2][3] = (src[2][3] * zS); } #ifdef GEKKO @@ -1046,12 +1052,25 @@ asm void PSMTXScaleApply(const register Mtx src, register Mtx dst, register f32 } #endif -void C_MTXQuat(Mtx m, const Quaternion *q) -{ - - f32 s, xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz; - s = 2.0f / ((q->x * q->x) + (q->y * q->y) + (q->z * q->z) + (q->w * q->w)); +void C_MTXQuat(Mtx m, const Quaternion* q) { + f32 s; + f32 xs; + f32 ys; + f32 zs; + f32 wx; + f32 wy; + f32 wz; + f32 xx; + f32 xy; + f32 xz; + f32 yy; + f32 yz; + f32 zz; + ASSERTMSGLINE(2145, m, "MTXQuat(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2146, q, "MTXQuat(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(2147, q->x || q->y || q->z || q->w, "MTXQuat(): zero-value quaternion "); + s = 2 / ((q->w * q->w) + ((q->z * q->z) + ((q->x * q->x) + (q->y * q->y)))); xs = q->x * s; ys = q->y * s; zs = q->z * s; @@ -1064,21 +1083,18 @@ void C_MTXQuat(Mtx m, const Quaternion *q) yy = q->y * ys; yz = q->y * zs; zz = q->z * zs; - - m[0][0] = 1.0f - (yy + zz); - m[0][1] = xy - wz; - m[0][2] = xz + wy; - m[0][3] = 0.0f; - - m[1][0] = xy + wz; - m[1][1] = 1.0f - (xx + zz); - m[1][2] = yz - wx; - m[1][3] = 0.0f; - - m[2][0] = xz - wy; - m[2][1] = yz + wx; - m[2][2] = 1.0f - (xx + yy); - m[2][3] = 0.0f; + m[0][0] = (1 - (yy + zz)); + m[0][1] = (xy - wz); + m[0][2] = (xz + wy); + m[0][3] = 0; + m[1][0] = (xy + wz); + m[1][1] = (1 - (xx + zz)); + m[1][2] = (yz - wx); + m[1][3] = 0; + m[2][0] = (xz - wy); + m[2][1] = (yz + wx); + m[2][2] = (1 - (xx + yy)); + m[2][3] = 0; } #ifdef GEKKO @@ -1136,29 +1152,28 @@ void PSMTXQuat(register Mtx m, const register Quaternion *q) } #endif -void C_MTXReflect(Mtx m, const Vec *p, const Vec *n) -{ - f32 vxy, vxz, vyz, pdotn; +void C_MTXReflect(Mtx m, const Vec* p, const Vec* n) { + f32 vxy; + f32 vxz; + f32 vyz; + f32 pdotn; - vxy = -2.0f * n->x * n->y; - vxz = -2.0f * n->x * n->z; - vyz = -2.0f * n->y * n->z; - pdotn = 2.0f * C_VECDotProduct(p, n); - - m[0][0] = 1.0f - 2.0f * n->x * n->x; + vxy = -2 * n->x * n->y; + vxz = -2 * n->x * n->z; + vyz = -2 * n->y * n->z; + pdotn = 2 * C_VECDotProduct(p, n); + m[0][0] = (1 - (2 * n->x * n->x)); m[0][1] = vxy; m[0][2] = vxz; - m[0][3] = pdotn * n->x; - + m[0][3] = (pdotn * n->x); m[1][0] = vxy; - m[1][1] = 1.0f - 2.0f * n->y * n->y; + m[1][1] = (1 - (2 * n->y * n->y)); m[1][2] = vyz; - m[1][3] = pdotn * n->y; - + m[1][3] = (pdotn * n->y); m[2][0] = vxz; m[2][1] = vyz; - m[2][2] = 1.0f - 2.0f * n->z * n->z; - m[2][3] = pdotn * n->z; + m[2][2] = (1 - (2 * n->z * n->z)); + m[2][3] = (pdotn * n->z); } #ifdef GEKKO @@ -1202,9 +1217,15 @@ void PSMTXReflect(register Mtx m, const register Vec *p, const register Vec *n) } #endif -void C_MTXLookAt(Mtx m, const Vec *camPos, const Vec *camUp, const Vec *target) -{ - Vec vLook, vRight, vUp; +void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) { + Vec vLook; + Vec vRight; + Vec vUp; + + ASSERTMSGLINE(2438, m, "MTXLookAt(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2439, camPos, "MTXLookAt(): NULL VecPtr 'camPos' "); + ASSERTMSGLINE(2440, camUp, "MTXLookAt(): NULL VecPtr 'camUp' "); + ASSERTMSGLINE(2441, target, "MTXLookAt(): NULL Point3dPtr 'target' "); vLook.x = camPos->x - target->x; vLook.y = camPos->y - target->y; @@ -1213,88 +1234,164 @@ void C_MTXLookAt(Mtx m, const Vec *camPos, const Vec *camUp, const Vec *target) VECCrossProduct(camUp, &vLook, &vRight); VECNormalize(&vRight, &vRight); VECCrossProduct(&vLook, &vRight, &vUp); - m[0][0] = vRight.x; m[0][1] = vRight.y; m[0][2] = vRight.z; - m[0][3] = -(camPos->x * vRight.x + camPos->y * vRight.y + camPos->z * vRight.z); - + m[0][3] = -((camPos->z * vRight.z) + ((camPos->x * vRight.x) + (camPos->y * vRight.y))); m[1][0] = vUp.x; m[1][1] = vUp.y; m[1][2] = vUp.z; - m[1][3] = -(camPos->x * vUp.x + camPos->y * vUp.y + camPos->z * vUp.z); - + m[1][3] = -((camPos->z * vUp.z) + ((camPos->x * vUp.x) + (camPos->y * vUp.y))); m[2][0] = vLook.x; m[2][1] = vLook.y; m[2][2] = vLook.z; - m[2][3] = -(camPos->x * vLook.x + camPos->y * vLook.y + camPos->z * vLook.z); + m[2][3] = -((camPos->z * vLook.z) + ((camPos->x * vLook.x) + (camPos->y * vLook.y))); } -void C_MTXLightFrustum(Mtx m, float t, float b, float l, float r, float n, float scaleS, float scaleT, float transS, float transT) -{ +void C_MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { f32 tmp; - tmp = 1.0f / (r - l); - m[0][0] = ((2 * n) * tmp) * scaleS; - m[0][1] = 0.0f; - m[0][2] = (((r + l) * tmp) * scaleS) - transS; - m[0][3] = 0.0f; + ASSERTMSGLINE(2541, m, "MTXLightFrustum(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2542, (t != b), "MTXLightFrustum(): 't' and 'b' clipping planes are equal "); + ASSERTMSGLINE(2543, (l != r), "MTXLightFrustum(): 'l' and 'r' clipping planes are equal "); - tmp = 1.0f / (t - b); - m[1][0] = 0.0f; - m[1][1] = ((2 * n) * tmp) * scaleT; - m[1][2] = (((t + b) * tmp) * scaleT) - transT; - m[1][3] = 0.0f; - - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = -1.0f; - m[2][3] = 0.0f; + tmp = 1 / (r - l); + m[0][0] = (scaleS * (2 * n * tmp)); + m[0][1] = 0; + m[0][2] = (scaleS * (tmp * (r + l))) - transS; + m[0][3] = 0; + tmp = 1 / (t - b); + m[1][0] = 0; + m[1][1] = (scaleT * (2 * n * tmp)); + m[1][2] = (scaleT * (tmp * (t + b))) - transT; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = -1; + m[2][3] = 0; } -void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, float scaleS, float scaleT, float transS, float transT) -{ +void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { f32 angle; f32 cot; - angle = fovY * 0.5f; + ASSERTMSGLINE(2605, m, "MTXLightPerspective(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2606, (fovY > 0.0) && (fovY < 180.0), "MTXLightPerspective(): 'fovY' out of range "); + ASSERTMSGLINE(2607, 0 != aspect, "MTXLightPerspective(): 'aspect' is 0 "); + + angle = (0.5f * fovY); angle = MTXDegToRad(angle); - - cot = 1.0f / tanf(angle); - - m[0][0] = (cot / aspect) * scaleS; - m[0][1] = 0.0f; + cot = 1 / tanf(angle); + m[0][0] = (scaleS * (cot / aspect)); + m[0][1] = 0; m[0][2] = -transS; - m[0][3] = 0.0f; - - m[1][0] = 0.0f; - m[1][1] = cot * scaleT; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = (cot * scaleT); m[1][2] = -transT; - m[1][3] = 0.0f; - - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = -1.0f; - m[2][3] = 0.0f; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = -1; + m[2][3] = 0; } -void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, float scaleS, float scaleT, float transS, float transT) -{ +void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { f32 tmp; - tmp = 1.0f / (r - l); - m[0][0] = (2.0f * tmp * scaleS); - m[0][1] = 0.0f; - m[0][2] = 0.0f; - m[0][3] = ((-(r + l) * tmp) * scaleS) + transS; - tmp = 1.0f / (t - b); - m[1][0] = 0.0f; - m[1][1] = (2.0f * tmp) * scaleT; - m[1][2] = 0.0f; - m[1][3] = ((-(t + b) * tmp) * scaleT) + transT; - - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = 0.0f; - m[2][3] = 1.0f; + ASSERTMSGLINE(2673, m, "MTXLightOrtho(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2674, (t != b), "MTXLightOrtho(): 't' and 'b' clipping planes are equal "); + ASSERTMSGLINE(2675, (l != r), "MTXLightOrtho(): 'l' and 'r' clipping planes are equal "); + tmp = 1 / (r - l); + m[0][0] = (2 * tmp * scaleS); + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = (transS + (scaleS * (tmp * -(r + l)))); + tmp = 1/ (t - b); + m[1][0] = 0; + m[1][1] = (2 * tmp * scaleT); + m[1][2] = 0; + m[1][3] = (transT + (scaleT * (tmp * -(t + b)))); + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 0; + m[2][3] = 1; } + +#ifdef TARGET_PC +void C_MTXReorder(const Mtx src, ROMtx dest) +{ + u32 i, j; + for (i = 0; i < 3; j++) { + for (int j = 0; j < 4; j++) { + dest[j][i] = src[i][j]; + } + } +} + +void C_MTXMultVec(const Mtx m, const Vec* src, Vec* dst) { + Vec vTmp; + + ASSERTMSGLINE(66, m, "MTXMultVec(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(67, src, "MTXMultVec(): NULL VecPtr 'src' "); + ASSERTMSGLINE(68, dst, "MTXMultVec(): NULL VecPtr 'dst' "); + + vTmp.x = m[0][3] + ((m[0][2] * src->z) + ((m[0][0] * src->x) + (m[0][1] * src->y))); + vTmp.y = m[1][3] + ((m[1][2] * src->z) + ((m[1][0] * src->x) + (m[1][1] * src->y))); + vTmp.z = m[2][3] + ((m[2][2] * src->z) + ((m[2][0] * src->x) + (m[2][1] * src->y))); + dst->x = vTmp.x; + dst->y = vTmp.y; + dst->z = vTmp.z; +} + +void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + u32 i; + Vec vTmp; + + ASSERTMSGLINE(168, m, "MTXMultVecArray(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(169, srcBase, "MTXMultVecArray(): NULL VecPtr 'srcBase' "); + ASSERTMSGLINE(170, dstBase, "MTXMultVecArray(): NULL VecPtr 'dstBase' "); + ASSERTMSGLINE(171, count > 1, "MTXMultVecArray(): count must be greater than 1."); + + for(i = 0; i < count; i++) { + vTmp.x = m[0][3] + ((m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y))); + vTmp.y = m[1][3] + ((m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y))); + vTmp.z = m[2][3] + ((m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y))); + dstBase->x = vTmp.x; + dstBase->y = vTmp.y; + dstBase->z = vTmp.z; + srcBase++; + dstBase++; + } +} + +void C_MTXROMultVecArray(const ROMtx m, const Vec *srcBase, Vec *dstBase, u32 count) +{ + u32 i; + for (u32 i = 0; i < count; ++i) { + Vec* src = &srcBase[i]; + Vec* dst = &dstBase[i]; + + // Perform matrix-vector multiplication: ROMtx * Vec -> Vec + dst->x = m[0][0] * src->x + m[0][1] * src->y + m[0][2] * src->z; + dst->y = m[1][0] * src->x + m[1][1] * src->y + m[1][2] * src->z; + dst->z = m[2][0] * src->x + m[2][1] * src->y + m[2][2] * src->z; + } +} + +void C_MTXMultVecSR(const Mtx m, const Vec* src, Vec* dst) { + Vec vTmp; + + ASSERTMSGLINE(313, m, "MTXMultVecSR(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(314, src, "MTXMultVecSR(): NULL VecPtr 'src' "); + ASSERTMSGLINE(315, dst, "MTXMultVecSR(): NULL VecPtr 'dst' "); + + vTmp.x = (m[0][2] * src->z) + ((m[0][0] * src->x) + (m[0][1] * src->y)); + vTmp.y = (m[1][2] * src->z) + ((m[1][0] * src->x) + (m[1][1] * src->y)); + vTmp.z = (m[2][2] * src->z) + ((m[2][0] * src->x) + (m[2][1] * src->y)); + dst->x = vTmp.x; + dst->y = vTmp.y; + dst->z = vTmp.z; +} + +#endif diff --git a/src/dolphin/mtx/mtx44.c b/src/dolphin/mtx/mtx44.c index a6c2faa9..39ddff22 100644 --- a/src/dolphin/mtx/mtx44.c +++ b/src/dolphin/mtx/mtx44.c @@ -1,82 +1,98 @@ #include "dolphin/mtx.h" +#include "dolphin/gx/GXPriv.h" #include "math.h" -void C_MTXFrustum(Mtx44 m, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6) -{ - f32 tmp = 1.0f / (arg4 - arg3); - m[0][0] = (2 * arg5) * tmp; - m[0][1] = 0.0f; - m[0][2] = (arg4 + arg3) * tmp; - m[0][3] = 0.0f; - tmp = 1.0f / (arg1 - arg2); - m[1][0] = 0.0f; - m[1][1] = (2 * arg5) * tmp; - m[1][2] = (arg1 + arg2) * tmp; - m[1][3] = 0.0f; - m[2][0] = 0.0f; - m[2][1] = 0.0f; - tmp = 1.0f / (arg6 - arg5); - m[2][2] = -(arg5)*tmp; - m[2][3] = -(arg6 * arg5) * tmp; - m[3][0] = 0.0f; - m[3][1] = 0.0f; - m[3][2] = -1.0f; - m[3][3] = 0.0f; +void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) { + f32 tmp; + + ASSERTMSGLINE(105, m, "MTXFrustum(): NULL Mtx44Ptr 'm' "); + ASSERTMSGLINE(106, t != b, "MTXFrustum(): 't' and 'b' clipping planes are equal "); + ASSERTMSGLINE(107, l != r, "MTXFrustum(): 'l' and 'r' clipping planes are equal "); + ASSERTMSGLINE(108, n != f, "MTXFrustum(): 'n' and 'f' clipping planes are equal "); + tmp = 1 / (r - l); + m[0][0] = (2 * n * tmp); + m[0][1] = 0; + m[0][2] = (tmp * (r + l)); + m[0][3] = 0; + tmp = 1 / (t - b); + m[1][0] = 0; + m[1][1] = (2 * n * tmp); + m[1][2] = (tmp * (t + b)); + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + tmp = 1 / (f - n); + m[2][2] = (-n * tmp); + m[2][3] = (tmp * -(f * n)); + m[3][0] = 0; + m[3][1] = 0; + m[3][2] = -1; + m[3][3] = 0; } -// Functions match but has issues with float constants -void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) -{ - f32 angle = fovY * 0.5f; +void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) { + f32 angle; f32 cot; f32 tmp; + + ASSERTMSGLINE(179, m, "MTXPerspective(): NULL Mtx44Ptr 'm' "); + ASSERTMSGLINE(180, (fovY > 0.0) && (fovY < 180.0), "MTXPerspective(): 'fovY' out of range "); + ASSERTMSGLINE(181, 0.0f != aspect, "MTXPerspective(): 'aspect' is 0 "); + + angle = (0.5f * fovY); angle = MTXDegToRad(angle); - cot = 1.0f / tanf(angle); - m[0][0] = cot / aspect; - m[0][1] = 0.0f; - m[0][2] = 0.0f; - m[0][3] = 0.0f; - m[1][0] = 0.0f; - m[1][1] = cot; - m[1][2] = 0.0f; - m[1][3] = 0.0f; - m[2][0] = 0.0f; - m[2][1] = 0.0f; - tmp = 1.0f / (f - n); - m[2][2] = -(n)*tmp; - m[2][3] = -(f * n) * tmp; - m[3][0] = 0.0f; - m[3][1] = 0.0f; - m[3][2] = -1.0f; - m[3][3] = 0.0f; + cot = 1 / tanf(angle); + m[0][0] = (cot / aspect); + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = (cot); + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + tmp = 1 / (f - n); + m[2][2] = (-n * tmp); + m[2][3] = (tmp * -(f * n)); + m[3][0] = 0; + m[3][1] = 0; + m[3][2] = -1; + m[3][3] = 0; } -void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) -{ - f32 tmp = 1.0f / (r - l); - m[0][0] = 2.0f * tmp; - m[0][1] = 0.0f; - m[0][2] = 0.0f; - m[0][3] = -(r + l) * tmp; - tmp = 1.0f / (t - b); - m[1][0] = 0.0f; - m[1][1] = 2.0f * tmp; - m[1][2] = 0.0f; - m[1][3] = -(t + b) * tmp; - m[2][0] = 0.0f; - m[2][1] = 0.0f; - tmp = 1.0f / (f - n); - m[2][2] = -(1.0f) * tmp; - m[2][3] = -(f)*tmp; - m[3][0] = 0.0f; - m[3][1] = 0.0f; - m[3][2] = 0.0f; - m[3][3] = 1.0f; +void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) { + f32 tmp; + + ASSERTMSGLINE(254, m, "MTXOrtho(): NULL Mtx44Ptr 'm' "); + ASSERTMSGLINE(255, t != b, "MTXOrtho(): 't' and 'b' clipping planes are equal "); + ASSERTMSGLINE(256, l != r, "MTXOrtho(): 'l' and 'r' clipping planes are equal "); + ASSERTMSGLINE(257, n != f, "MTXOrtho(): 'n' and 'f' clipping planes are equal "); + tmp = 1 / (r - l); + m[0][0] = 2 * tmp; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = (tmp * -(r + l)); + tmp = 1 / (t - b); + m[1][0] = 0; + m[1][1] = 2 * tmp; + m[1][2] = 0; + m[1][3] = (tmp * -(t + b)); + m[2][0] = 0; + m[2][1] = 0; + tmp = 1 / (f - n); + m[2][2] = (-1 * tmp); + m[2][3] = (-f * tmp); + m[3][0] = 0; + m[3][1] = 0; + m[3][2] = 0; + m[3][3] = 1; } +#ifdef GEKKO asm void PSMTX44Copy(register Mtx44 src, register Mtx44 dest) { -#ifdef __MWERKS__ // clang-format off +// clang-format off nofralloc; psq_l fp1, 0(src), 0, 0; psq_st fp1, 0(dest), 0, 0; @@ -95,5 +111,6 @@ asm void PSMTX44Copy(register Mtx44 src, register Mtx44 dest) psq_l fp1, 0x38(src), 0, 0; psq_st fp1, 0x38(dest), 0, 0; blr; -#endif // clang-format on +// clang-format on } +#endif diff --git a/src/dolphin/mtx/vec.c b/src/dolphin/mtx/vec.c index de5ad450..cd04e4be 100644 --- a/src/dolphin/mtx/vec.c +++ b/src/dolphin/mtx/vec.c @@ -1,4 +1,5 @@ #include "dolphin/mtx.h" +#include "dolphin/gx/GXPriv.h" #include "math.h" #define R_RET fp1 @@ -15,9 +16,19 @@ #define FP12 fp12 #define FP13 fp13 +void C_VECAdd(const Vec *a, const Vec *b, Vec *c) { + ASSERTMSGLINE(0x57, a, "VECAdd(): NULL VecPtr 'a' "); + ASSERTMSGLINE(0x58, b, "VECAdd(): NULL VecPtr 'b' "); + ASSERTMSGLINE(0x59, c, "VECAdd(): NULL VecPtr 'ab' "); + c->x = a->x + b->x; + c->y = a->y + b->y; + c->z = a->z + b->z; +} + +#ifdef GEKKO asm void PSVECAdd(const register Vec *vec1, const register Vec *vec2, register Vec *ret) { -#ifdef __MWERKS__ // clang-format off + // clang-format off nofralloc; psq_l FP2, 0(vec1), 0, 0; psq_l FP4, 0(vec2), 0, 0; @@ -28,12 +39,23 @@ asm void PSVECAdd(const register Vec *vec1, const register Vec *vec2, register V ps_add FP7, FP3, FP5; psq_st FP7, 8(ret), 1, 0; blr -#endif // clang-format on + // clang-format on +} +#endif + +void C_VECSubtract(const Vec *a, const Vec *b, Vec *c) { + ASSERTMSGLINE(0x9C, a, "VECSubtract(): NULL VecPtr 'a' "); + ASSERTMSGLINE(0x9D, b, "VECSubtract(): NULL VecPtr 'b' "); + ASSERTMSGLINE(0x9E, c, "VECSubtract(): NULL VecPtr 'a_b' "); + c->x = a->x - b->x; + c->y = a->y - b->y; + c->z = a->z - b->z; } +#ifdef GEKKO asm void PSVECSubtract(const register Vec *vec1, const register Vec *vec2, register Vec *ret) { -#ifdef __MWERKS__ // clang-format off + // clang-format off nofralloc; psq_l FP2, 0(vec1), 0, 0; psq_l FP4, 0(vec2), 0, 0; @@ -44,22 +66,9 @@ asm void PSVECSubtract(const register Vec *vec1, const register Vec *vec2, regis ps_sub FP7, FP3, FP5; psq_st FP7, 8(ret), 1, 0; blr -#endif // clang-format on -} - -asm void PSVECScale(register const Vec *src, register Vec *dst, register f32 scale) -{ -#ifdef __MWERKS__ // clang-format off - nofralloc - psq_l f0, 0(src), 0, 0 - psq_l f2, 8(src), 1, 0 - ps_muls0 f0, f0, f1 - psq_st f0, 0(dst), 0, 0 - ps_muls0 f0, f2, f1 - psq_st f0, 8(dst), 1, 0 - blr -#endif // clang-format on + // clang-format on } +#endif void C_VECScale(const Vec *src, Vec *dst, f32 scale) { @@ -71,9 +80,39 @@ void C_VECScale(const Vec *src, Vec *dst, f32 scale) dst->z = src->z * s; } +#ifdef GEKKO +asm void PSVECScale(register const Vec *src, register Vec *dst, register f32 scale) +{ +#// clang-format off + nofralloc + psq_l f0, 0(src), 0, 0 + psq_l f2, 8(src), 1, 0 + ps_muls0 f0, f0, f1 + psq_st f0, 0(dst), 0, 0 + ps_muls0 f0, f2, f1 + psq_st f0, 8(dst), 1, 0 + blr + // clang-format on +} +#endif + +void C_VECNormalize(const Vec *src, Vec *unit) { + f32 mag; + + ASSERTMSGLINE(0x127, src, "VECNormalize(): NULL VecPtr 'src' "); + ASSERTMSGLINE(0x128, unit, "VECNormalize(): NULL VecPtr 'unit' "); + mag = (src->z * src->z) + ((src->x * src->x) + (src->y * src->y)); + ASSERTMSGLINE(0x12D, 0.0f != mag, "VECNormalize(): zero magnitude vector "); + mag = 1.0f/ sqrtf(mag); + unit->x = src->x * mag; + unit->y = src->y * mag; + unit->z = src->z * mag; +} + +#ifdef GEKKO void PSVECNormalize(const register Vec *vec1, register Vec *ret) { -#ifdef __MWERKS__ // clang-format off + // clang-format off register f32 half = 0.5f; register f32 three = 3.0f; register f32 xx_zz, xx_yy; @@ -96,43 +135,60 @@ void PSVECNormalize(const register Vec *vec1, register Vec *ret) ps_muls0 FP3, FP3, ret_sqrt; psq_st FP3, 8(ret), 1, 0; } -#endif // clang-format on + // clang-format on +} +#endif + +f32 C_VECSquareMag(const Vec *v) { + f32 sqmag; + + ASSERTMSGLINE(0x182, v, "VECMag(): NULL VecPtr 'v' "); + + sqmag = v->z * v->z + ((v->x * v->x) + (v->y * v->y)); + return sqmag; } +#ifdef GEKKO asm f32 PSVECSquareMag(register const Vec *v) { -#ifdef __MWERKS__ // clang-format off + // clang-format off nofralloc psq_l f0, 0(v), 0, 0 ps_mul f0, f0, f0 lfs f1, 8(v) ps_madd f1, f1, f1, f0 ps_sum0 f1, f1, f0, f0 - blr -#endif // clang-format on + blr + // clang-format on +} +#endif + +f32 C_VECMag(const Vec *v) { + return sqrtf(C_VECSquareMag(v)); } +#ifdef GEKKO f32 PSVECMag(const register Vec *v) { register f32 v_xy, v_zz, square_mag; register f32 ret_mag, n_0, n_1; register f32 three, half, zero; -#ifdef __MWERKS__ // clang-format off + // clang-format off asm { psq_l v_xy, 0(v), 0, 0 ps_mul v_xy, v_xy, v_xy lfs v_zz, 8(v) ps_madd square_mag, v_zz, v_zz, v_xy } -#endif // clang-format on + // clang-format on half = 0.5f; -#ifdef __MWERKS__ // clang-format off + // clang-format off asm { ps_sum0 square_mag, square_mag, v_xy, v_xy frsqrte ret_mag, square_mag } -#endif // clang-format on + // clang-format on three = 3.0f; -#ifdef __MWERKS__ // clang-format off + // clang-format off asm { fmuls n_0, ret_mag, ret_mag fmuls n_1, ret_mag, half @@ -141,13 +197,24 @@ asm { fsel ret_mag, ret_mag, ret_mag, square_mag fmuls square_mag, square_mag, ret_mag } -#endif // clang-format on + // clang-format on return square_mag; } +#endif +f32 C_VECDotProduct(const Vec *a, const Vec *b) { + f32 dot; + + ASSERTMSGLINE(0x1D1, a, "VECDotProduct(): NULL VecPtr 'a' "); + ASSERTMSGLINE(0x1D2, b, "VECDotProduct(): NULL VecPtr 'b' "); + dot = (a->z * b->z) + ((a->x * b->x) + (a->y * b->y)); + return dot; +} + +#ifdef GEKKO asm f32 PSVECDotProduct(const register Vec *vec1, const register Vec *vec2) { -#ifdef __MWERKS__ // clang-format off + // clang-format off nofralloc; psq_l f2, 4(r3), 0, 0 /* qr0 */ psq_l f3, 4(r4), 0, 0 /* qr0 */ @@ -156,13 +223,30 @@ asm f32 PSVECDotProduct(const register Vec *vec1, const register Vec *vec2) psq_l f4, 0(r4), 0, 0 /* qr0 */ ps_madd f3, f5, f4, f2 ps_sum0 f1, f3, f2, f2 - blr -#endif // clang-format on + blr + // clang-format on +} +#endif + +void C_VECCrossProduct(const Vec *a, const Vec *b, Vec *axb) { + Vec vTmp; + + ASSERTMSGLINE(0x20F, a, "VECCrossProduct(): NULL VecPtr 'a' "); + ASSERTMSGLINE(0x210, b, "VECCrossProduct(): NULL VecPtr 'b' "); + ASSERTMSGLINE(0x211, axb, "VECCrossProduct(): NULL VecPtr 'axb' "); + + vTmp.x = (a->y * b->z) - (a->z * b->y); + vTmp.y = (a->z * b->x) - (a->x * b->z); + vTmp.z = (a->x * b->y) - (a->y * b->x); + axb->x = vTmp.x; + axb->y = vTmp.y; + axb->z = vTmp.z; } +#ifdef GEKKO asm void PSVECCrossProduct(register const Vec *a, register const Vec *b, register Vec *axb) { -#ifdef __MWERKS__ // clang-format off + // clang-format off nofralloc psq_l f1, 0(b), 0, 0 lfs f2, 8(a) @@ -178,9 +262,10 @@ asm void PSVECCrossProduct(register const Vec *a, register const Vec *b, registe psq_st f9, 0(axb), 1, 0 ps_neg f10, f10 psq_st f10, 4(axb), 0, 0 - blr -#endif // clang-format on + blr + // clang-format on } +#endif void C_VECHalfAngle(const Vec *a, const Vec *b, Vec *half) { @@ -229,8 +314,18 @@ void C_VECReflect(const Vec *src, const Vec *normal, Vec *dst) VECNormalize(dst, dst); } +f32 C_VECSquareDistance(const Vec *a, const Vec *b) { + Vec diff; + + diff.x = a->x - b->x; + diff.y = a->y - b->y; + diff.z = a->z - b->z; + return (diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y)); +} + +#ifdef GEKKO asm f32 PSVECSquareDistance(register const Vec *a, register const Vec *b) { -#ifdef __MWERKS__ // clang-format off + // clang-format off nofralloc psq_l f0, 4(a), 0, 0 psq_l f1, 4(b), 0, 0 @@ -241,10 +336,16 @@ asm f32 PSVECSquareDistance(register const Vec *a, register const Vec *b) { ps_sub f0, f0, f1 ps_madd f1, f0, f0, f2 ps_sum0 f1, f1, f2, f2 - blr -#endif // clang-format on + blr + // clang-format on +} +#endif + +f32 C_VECDistance(const Vec *a, const Vec *b) { + return sqrtf(C_VECSquareDistance(a, b)); } +#ifdef GEKKO f32 PSVECDistance(register const Vec *a, register const Vec *b) { @@ -252,7 +353,7 @@ f32 PSVECDistance(register const Vec *a, register const Vec *b) register f32 three_c; register f32 dist; -#ifdef __MWERKS__ // clang-format off + // clang-format off asm { psq_l f0, 4(a), 0, 0 /* qr0 */ psq_l f1, 4(b), 0, 0 /* qr0 */ @@ -283,5 +384,6 @@ f32 PSVECDistance(register const Vec *a, register const Vec *b) } return dist; -#endif // clang-format on + // clang-format on } +#endif diff --git a/src/dolphin/os/OS.c b/src/dolphin/os/OS.c index 69843d73..72a66a95 100644 --- a/src/dolphin/os/OS.c +++ b/src/dolphin/os/OS.c @@ -19,14 +19,22 @@ extern char _db_stack_end[]; extern char *__OSResetSWInterruptHandler[]; +#ifdef TARGET_PC +vu16 __OSDeviceCode; +#else vu16 __OSDeviceCode : (OS_BASE_CACHED | 0x30E6); +#endif static DVDDriveInfo DriveInfo ATTRIBUTE_ALIGN(32); static DVDCommandBlock DriveBlock; static OSBootInfo *BootInfo; static u32 *BI2DebugFlag; static u32 *BI2DebugFlagHolder; +#ifdef _MSC_VER +BOOL __OSIsGcam = FALSE; +#else __declspec(weak) BOOL __OSIsGcam = FALSE; +#endif static f64 ZeroF; static f32 ZeroPS[2]; static BOOL AreWeInitialized = FALSE; @@ -56,6 +64,7 @@ void OSDefaultExceptionHandler(__OSException exception, OSContext *context); extern BOOL __DBIsExceptionMarked(__OSException); static void OSExceptionInit(void); +#ifdef __MWERKS__ /* clang-format off */ asm void __OSFPRInit(void) { @@ -143,6 +152,7 @@ SkipPairedSingles: blr } /* clang-format on */ +#endif u32 OSGetConsoleType() { @@ -155,8 +165,8 @@ u32 OSGetConsoleType() void *__OSSavedRegionStart; void *__OSSavedRegionEnd; -extern u32 BOOT_REGION_START : 0x812FDFF0; //(*(u32 *)0x812fdff0) -extern u32 BOOT_REGION_END : 0x812FDFEC; //(*(u32 *)0x812fdfec) +extern u32 BOOT_REGION_START AT_ADDRESS(0x812FDFF0); //(*(u32 *)0x812fdff0) +extern u32 BOOT_REGION_END AT_ADDRESS(0x812FDFEC); //(*(u32 *)0x812fdfec) void ClearArena(void) { @@ -477,6 +487,7 @@ static void OSExceptionInit(void) DBPrintf("Exceptions initialized...\n"); } +#ifdef __MWERKS__ static asm void __OSDBIntegrator(void) { /* clang-format off */ @@ -505,6 +516,7 @@ entry __OSDBJUMPEND /* clang-format on */ } +#endif __OSExceptionHandler __OSSetExceptionHandler(__OSException exception, __OSExceptionHandler handler) { @@ -519,6 +531,7 @@ __OSExceptionHandler __OSGetExceptionHandler(__OSException exception) return OSExceptionTable[exception]; } +#ifdef __MWERKS__ static asm void OSExceptionVector(void) { /* clang-format off */ @@ -603,8 +616,10 @@ entry __OSEVEnd nop /* clang-format on */ } +#endif void __OSUnhandledException(__OSException exception, OSContext *context, u32 dsisr, u32 dar); +#ifdef __MWERKS__ asm void OSDefaultExceptionHandler(register __OSException exception, register OSContext *context) { /* clang-format off */ @@ -631,6 +646,7 @@ void __OSPSInit(void) } // clang-format on } +#endif #define DI_CONFIG_IDX 0x9 #define DI_CONFIG_CONFIG_MASK 0xFF diff --git a/src/dolphin/os/OSAlloc.c b/src/dolphin/os/OSAlloc.c index 32515afd..db41789a 100644 --- a/src/dolphin/os/OSAlloc.c +++ b/src/dolphin/os/OSAlloc.c @@ -1,6 +1,7 @@ #include #include #include +#include #define ALIGNMENT 32 @@ -137,6 +138,9 @@ static long DLSize(struct Cell *list) void *OSAllocFromHeap(int heap, unsigned long size) { +#ifdef TARGET_PC + return malloc(size); +#endif struct HeapDesc *hd; struct Cell *cell; struct Cell *newCell; @@ -163,7 +167,6 @@ void *OSAllocFromHeap(int heap, unsigned long size) return NULL; } ASSERTMSG1(0x168, !((s32)cell & 0x1F), "OSAllocFromHeap(): heap is broken."); - ASSERTMSG1(0x169, cell->hd == NULL, "OSAllocFromHeap(): heap is broken."); leftoverSize = cell->size - size; if (leftoverSize < 0x40U) { @@ -201,12 +204,12 @@ void *OSAllocFixed(void **rstart, void **rend) void *end; void *cellEnd; - start = (void *)((*(u32 *)rstart) & ~((32) - 1)); - end = (void *)((*(u32 *)rend + 0x1FU) & ~((32) - 1)); + start = (void *)((*(uintptr_t *)rstart) & ~((32) - 1)); + end = (void *)((*(uintptr_t *)rend + 0x1FU) & ~((32) - 1)); ASSERTMSG1(0x1B0, HeapArray, "OSAllocFixed(): heap is not initialized."); - ASSERTMSG1(0x1B1, (u32)start < (u32)end, "OSAllocFixed(): invalid range."); - ASSERTMSG1(0x1B3, ((u32)ArenaStart <= (u32)start) && ((u32)end <= (u32)ArenaEnd), "OSAllocFixed(): invalid range."); + ASSERTMSG1(0x1B1, (uintptr_t)start < (uintptr_t)end, "OSAllocFixed(): invalid range."); + ASSERTMSG1(0x1B3, ((uintptr_t)ArenaStart <= (uintptr_t)start) && ((uintptr_t)start <= (uintptr_t)ArenaEnd), "OSAllocFixed(): invalid range."); for (i = 0; i < NumHeaps; i++) { hd = &HeapArray[i]; @@ -243,7 +246,7 @@ void *OSAllocFixed(void **rstart, void **rend) ASSERTMSG(0x1F3, MINOBJSIZE <= (char *)cellEnd - (char *)end); newCell = (struct Cell *)end; - newCell->size = (s32)((char *)cellEnd - (char *)end); + newCell->size = (uintptr_t)((char *)cellEnd - (char *)end); newCell->next = cell->next; if (newCell->next) { newCell->next->prev = newCell; @@ -290,13 +293,16 @@ void *OSAllocFixed(void **rstart, void **rend) ASSERTMSG(0x225, OFFSET(start, ALIGNMENT) == 0); ASSERTMSG(0x226, OFFSET(end, ALIGNMENT) == 0); ASSERTMSG(0x227, start < end); - *(u32 *)rstart = (u32)start; - *(u32 *)rend = (u32)end; - return (void *)*(u32 *)rstart; + *(uintptr_t *)rstart = (uintptr_t)start; + *(uintptr_t *)rend = (uintptr_t)end; + return (void *)*(uintptr_t *)rstart; } void OSFreeToHeap(int heap, void *ptr) { +#ifdef TARGET_PC + free(ptr); +#else struct HeapDesc *hd; struct Cell *cell; @@ -306,10 +312,10 @@ void OSFreeToHeap(int heap, void *ptr) ASSERTMSG1(0x241, HeapArray[heap].size >= 0, "OSFreeToHeap(): invalid heap handle."); cell = (void *)((u32)ptr - 0x20); hd = &HeapArray[heap]; - ASSERTMSG1(0x246, cell->hd == hd, "OSFreeToHeap(): invalid pointer."); ASSERTMSG1(0x247, DLLookup(hd->allocated, cell), "OSFreeToHeap(): invalid pointer."); hd->allocated = DLExtract(hd->allocated, cell); hd->free = DLInsert(hd->free, cell); +#endif } int OSSetCurrentHeap(int heap) @@ -331,8 +337,8 @@ void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps) struct HeapDesc *hd; ASSERTMSG1(0x283, maxHeaps > 0, "OSInitAlloc(): invalid number of heaps."); - ASSERTMSG1(0x285, (u32)arenaStart < (u32)arenaEnd, "OSInitAlloc(): invalid range."); - ASSERTMSG1(0x288, maxHeaps <= (((u32)arenaEnd - (u32)arenaStart) / 24U), "OSInitAlloc(): too small range."); + ASSERTMSG1(0x285, (uintptr_t)arenaStart < (uintptr_t)arenaEnd, "OSInitAlloc(): invalid range."); + ASSERTMSG1(0x288, maxHeaps <= (((uintptr_t)arenaEnd - (uintptr_t)arenaStart) / 24U), "OSInitAlloc(): too small range."); arraySize = maxHeaps * sizeof(struct HeapDesc); HeapArray = arenaStart; NumHeaps = maxHeaps; @@ -343,34 +349,34 @@ void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps) hd->free = hd->allocated = 0; } __OSCurrHeap = -1; - arenaStart = (void *)((u32)((char *)HeapArray + arraySize)); - arenaStart = (void *)(((u32)arenaStart + 0x1F) & 0xFFFFFFE0); + arenaStart = (void *)((uintptr_t)((char *)HeapArray + arraySize)); + arenaStart = (void *)(((uintptr_t)arenaStart + 0x1F) & ~0x1F); ArenaStart = arenaStart; - ArenaEnd = (void *)((u32)arenaEnd & 0xFFFFFFE0); - ASSERTMSG1(0x2A4, ((u32)ArenaEnd - (u32)ArenaStart) >= 0x40U, "OSInitAlloc(): too small range."); + ArenaEnd = (void *)((uintptr_t)arenaEnd & ~0x1F); + ASSERTMSG1(0x2A4, ((uintptr_t)ArenaEnd - (uintptr_t)ArenaStart) >= 0x40U, "OSInitAlloc(): too small range."); return arenaStart; } -int OSCreateHeap(void *start, void *end) +uintptr_t OSCreateHeap(void *start, void *end) { - int heap; + s32 heap; struct HeapDesc *hd; struct Cell *cell; ASSERTMSG1(0x2BD, HeapArray, "OSCreateHeap(): heap is not initialized."); - ASSERTMSG1(0x2BE, (u32)start < (u32)end, "OSCreateHeap(): invalid range."); + ASSERTMSG1(0x2BE, start < end, "OSCreateHeap(): invalid range."); - start = (void *)(((u32)start + 0x1FU) & ~((32) - 1)); - end = (void *)(((u32)end) & ~((32) - 1)); + start = (void *)(((uintptr_t)start + 0x1FU) & ~((32) - 1)); + end = (void *)(((uintptr_t)end) & ~((32) - 1)); - ASSERTMSG1(0x2C1, (u32)start < (u32)end, "OSCreateHeap(): invalid range."); - ASSERTMSG1(0x2C3, (u32)ArenaStart <= (u32)start && (u32)end <= (u32)ArenaEnd, "OSCreateHeap(): invalid range."); - ASSERTMSG1(0x2C5, ((u32)end - (u32)start) >= 0x40U, "OSCreateHeap(): too small range."); + ASSERTMSG1(0x2C1, (uintptr_t)start < (uintptr_t)end, "OSCreateHeap(): invalid range."); + ASSERTMSG1(0x2C3, (uintptr_t)ArenaStart <= (uintptr_t)start && (uintptr_t)end <= (uintptr_t)ArenaEnd, "OSCreateHeap(): invalid range."); + ASSERTMSG1(0x2C5, ((uintptr_t)end - (uintptr_t)start) >= 0x40U, "OSCreateHeap(): too small range."); for (heap = 0; heap < NumHeaps; heap++) { hd = &HeapArray[heap]; if (hd->size < 0) { - hd->size = (u32)end - (u32)start; + hd->size = (uintptr_t)end - (uintptr_t)start; cell = start; cell->prev = 0; cell->next = 0; @@ -481,12 +487,6 @@ unsigned long OSReferentSize(void *ptr) ASSERTMSG1(0x3BD, InRange(ptr, ArenaStart + HEADERSIZE, ArenaEnd), "OSReferentSize(): invalid pointer."); ASSERTMSG1(0x3BE, !OFFSET(ptr, 32), "OSReferentSize(): invalid pointer."); cell = (void *)((u32)ptr - HEADERSIZE); - ASSERTMSG1(0x3C2, cell->hd, "OSReferentSize(): invalid pointer."); - ASSERTMSG1(0x3C4, !(((u32)cell->hd - (u32)HeapArray) % 24), "OSReferentSize(): invalid pointer."); - ASSERTMSG1(0x3C6, ((u32)HeapArray <= (u32)cell->hd) && ((u32)cell->hd < (u32)((u32)HeapArray + (NumHeaps * 0x18))), - "OSReferentSize(): invalid pointer."); - ASSERTMSG1(0x3C7, cell->hd->size >= 0, "OSReferentSize(): invalid pointer."); - ASSERTMSG1(0x3C9, DLLookup(cell->hd->allocated, cell), "OSReferentSize(): invalid pointer."); return (long)((u32)cell->size - HEADERSIZE); } diff --git a/src/dolphin/si/SIBios.c b/src/dolphin/si/SIBios.c index 0d34277a..005ca545 100644 --- a/src/dolphin/si/SIBios.c +++ b/src/dolphin/si/SIBios.c @@ -3,8 +3,8 @@ #include #include - extern OSTime __OSGetSystemTime(); +extern u32 VIGetCurrentLine(void); typedef struct SIControl { s32 chan; diff --git a/src/game/EnvelopeExec.c b/src/game/EnvelopeExec.c index 53a9d990..83da92b1 100644 --- a/src/game/EnvelopeExec.c +++ b/src/game/EnvelopeExec.c @@ -76,7 +76,7 @@ void InitEnvelope(HsfData *arg0) { nObj = temp_r28->count; nMesh = temp_r28->base_idx; } - PSMTXIdentity(sp10); + MTXIdentity(sp10); SetMtx(arg0->root, sp10); SetRevMtx(); } @@ -89,19 +89,19 @@ static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) { s32 var_r29; s32 i; - PSMTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z); - PSMTXConcat(arg2, spC, sp3C); + MTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z); + MTXConcat(arg2, spC, sp3C); if (arg1->data.curr.rot.z) { - PSMTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z)); - PSMTXConcat(sp3C, sp6C, sp3C); + MTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z)); + MTXConcat(sp3C, sp6C, sp3C); } if (arg1->data.curr.rot.y) { - PSMTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y)); - PSMTXConcat(sp3C, sp6C, sp3C); + MTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y)); + MTXConcat(sp3C, sp6C, sp3C); } if (arg1->data.curr.rot.x) { - PSMTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x)); - PSMTXConcat(sp3C, sp6C, sp3C); + MTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x)); + MTXConcat(sp3C, sp6C, sp3C); } if (arg1->data.curr.scale.x != 1.0f) { sp3C[0][0] *= arg1->data.curr.scale.x; @@ -119,7 +119,7 @@ static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) { sp3C[2][2] *= arg1->data.curr.scale.z; } var_r29 = arg1 - arg0; - PSMTXCopy(sp3C, MtxTop[nMesh + var_r29]); + MTXCopy(sp3C, MtxTop[nMesh + var_r29]); for (i = 0; i < arg1->data.childrenCount; i++) { SetEnvelopMtx(arg0, arg1->data.children[i], sp3C); } @@ -136,7 +136,7 @@ void EnvelopeProc(HsfData *arg0) { nObj = temp_r31->count; nMesh = temp_r31->base_idx; temp_r29 = arg0->root; - PSMTXIdentity(sp8); + MTXIdentity(sp8); SetEnvelopMtx(arg0->object, temp_r29, sp8); SetEnvelopMain(arg0); } @@ -167,7 +167,7 @@ static void SetEnvelopMain(HsfData *arg0) { var_r31 = arg0->object; for (Meshno = i = 0; i < arg0->objectCnt; i++, var_r31++) { if (var_r31->type == 2) { - PSMTXInverse(MtxTop[&var_r31[nMesh] - arg0->object], MtxTop[Meshno]); + MTXInverse(MtxTop[&var_r31[nMesh] - arg0->object], MtxTop[Meshno]); temp_r30 = var_r31->data.vertex; temp_r28 = var_r31->data.normal; if (var_r31->data.unk120[0] != 0) { @@ -233,37 +233,37 @@ static void SetEnvelop(HsfCenv *arg0) { temp_r31 = &Vertextop[temp_r21]; temp_r22 = &normenv[temp_r18]; temp_r26 = &normtop[temp_r18]; - PSMTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140); - PSMTXConcat(MtxTop[Meshno], sp140, sp1A0); + MTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140); + MTXConcat(MtxTop[Meshno], sp140, sp1A0); Hu3DMtxScaleGet(&sp1A0[0], &sp14); if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) { - PSMTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z); - PSMTXConcat(spE0, sp1A0, sp170); - PSMTXInvXpose(sp170, sp170); + MTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z); + MTXConcat(spE0, sp1A0, sp170); + MTXInvXpose(sp170, sp170); } else { - PSMTXInvXpose(sp1A0, sp170); + MTXInvXpose(sp1A0, sp170); } if (var_r27->posCnt == 1) { - PSMTXMultVec(sp1A0, temp_r31, temp_r28); - PSMTXMultVec(sp170, temp_r26, temp_r22); + MTXMultVec(sp1A0, temp_r31, temp_r28); + MTXMultVec(sp170, temp_r26, temp_r22); } else if (var_r27->posCnt <= 6) { - PSMTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt); - PSMTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt); + MTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt); + MTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt); } else { - PSMTXReorder(sp1A0, (ROMtxPtr) sp140); - PSMTXReorder(sp170, (ROMtxPtr) sp110); - PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt); - PSMTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt); + MTXReorder(sp1A0, (ROMtxPtr) sp140); + MTXReorder(sp170, (ROMtxPtr) sp110); + MTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt); + MTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt); } } var_r20 = arg0->dualData; for (i = 0; i < arg0->dualCount; i++, var_r20++) { spC = var_r20->target1; sp8 = var_r20->target2; - PSMTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140); - PSMTXConcat(MtxTop[Meshno], sp140, sp1A0); - PSMTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140); - PSMTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]); + MTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140); + MTXConcat(MtxTop[Meshno], sp140, sp1A0); + MTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140); + MTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]); var_r30 = var_r20->weight; for (j = 0; j < var_r20->weightCnt; j++, var_r30++) { temp_r18 = var_r30->normal; @@ -316,32 +316,32 @@ static void SetEnvelop(HsfCenv *arg0) { var_r29[2][2] = sp110[2][2] + sp140[2][2]; var_r29[2][3] = sp110[2][3] + sp140[2][3]; if (var_r29 == sp50) { - PSMTXCopy(sp50, sp80); + MTXCopy(sp50, sp80); } Hu3DMtxScaleGet(&sp80[0], &sp14); if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) { - PSMTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z); - PSMTXConcat(spE0, sp80, sp110); - PSMTXInvXpose(sp110, sp110); + MTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z); + MTXConcat(spE0, sp80, sp110); + MTXInvXpose(sp110, sp110); } else { - PSMTXInvXpose(sp80, sp110); + MTXInvXpose(sp80, sp110); } if (var_r30->posCnt == 1) { - PSMTXMultVec(sp80, temp_r31, temp_r28); + MTXMultVec(sp80, temp_r31, temp_r28); } else if (var_r30->posCnt <= 6) { - PSMTXMultVecArray(sp80, temp_r31, temp_r28, var_r30->posCnt); + MTXMultVecArray(sp80, temp_r31, temp_r28, var_r30->posCnt); } else { - PSMTXReorder(sp80, (ROMtxPtr) sp140); - PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt); + MTXReorder(sp80, (ROMtxPtr) sp140); + MTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt); } if (var_r30->normalCnt != 0) { if (var_r30->normalCnt == 1) { - PSMTXMultVec(sp110, temp_r26, temp_r22); + MTXMultVec(sp110, temp_r26, temp_r22); } else if (var_r30->normalCnt <= 6) { - PSMTXMultVecArray(sp110, temp_r26, temp_r22, var_r30->normalCnt); + MTXMultVecArray(sp110, temp_r26, temp_r22, var_r30->normalCnt); } else { - PSMTXReorder(sp110, (ROMtxPtr) sp140); - PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r26, temp_r22, var_r30->normalCnt); + MTXReorder(sp110, (ROMtxPtr) sp140); + MTXROMultVecArray((ROMtxPtr) sp140, temp_r26, temp_r22, var_r30->normalCnt); } } } @@ -359,11 +359,11 @@ static void SetEnvelop(HsfCenv *arg0) { sp20.x = sp20.y = sp20.z = 0.0f; sp10 = 0; for (j = 0; j < var_r19->weightCnt; j++, var_r25++) { - PSMTXConcat(MtxTop[nMesh + var_r25->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r25->target], sp1A0); - PSMTXConcat(MtxTop[Meshno], sp1A0, sp1A0); - PSMTXInvXpose(sp1A0, sp170); - PSMTXMultVec(sp1A0, temp_r31, &sp44); - PSMTXMultVec(sp170, temp_r26, &sp2C); + MTXConcat(MtxTop[nMesh + var_r25->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r25->target], sp1A0); + MTXConcat(MtxTop[Meshno], sp1A0, sp1A0); + MTXInvXpose(sp1A0, sp170); + MTXMultVec(sp1A0, temp_r31, &sp44); + MTXMultVec(sp170, temp_r26, &sp2C); sp44.x = var_r25->value * (sp44.x - temp_r31->x); sp44.y = var_r25->value * (sp44.y - temp_r31->y); sp44.z = var_r25->value * (sp44.z - temp_r31->z); @@ -410,18 +410,18 @@ static void SetMtx(HsfObject *arg0, Mtx arg1) { arg0->data.base.scale.y = temp_r3->transform.scale.y; arg0->data.base.scale.z = temp_r3->transform.scale.z; } - PSMTXTrans(spFC, arg0->data.base.pos.x, arg0->data.base.pos.y, arg0->data.base.pos.z); - PSMTXScale(spCC, arg0->data.base.scale.x, arg0->data.base.scale.y, arg0->data.base.scale.z); - PSMTXConcat(arg1, spFC, spFC); - PSMTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z)); - PSMTXConcat(spFC, sp9C, spFC); - PSMTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y)); - PSMTXConcat(spFC, sp9C, spFC); - PSMTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x)); - PSMTXConcat(spFC, sp9C, spFC); - PSMTXConcat(spFC, spCC, spFC); + MTXTrans(spFC, arg0->data.base.pos.x, arg0->data.base.pos.y, arg0->data.base.pos.z); + MTXScale(spCC, arg0->data.base.scale.x, arg0->data.base.scale.y, arg0->data.base.scale.z); + MTXConcat(arg1, spFC, spFC); + MTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z)); + MTXConcat(spFC, sp9C, spFC); + MTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y)); + MTXConcat(spFC, sp9C, spFC); + MTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x)); + MTXConcat(spFC, sp9C, spFC); + MTXConcat(spFC, spCC, spFC); temp_r25 = arg0 - objtop; - PSMTXCopy(spFC, MtxTop[nMesh + temp_r25]); + MTXCopy(spFC, MtxTop[nMesh + temp_r25]); for (i = 0; i < arg0->data.childrenCount; i++) { SetMtx(arg0->data.children[i], spFC); } @@ -438,12 +438,12 @@ static void SetRevMtx(void) { var_r29 = CurHsf->object; for (var_r28 = i = 0; i < CurHsf->objectCnt; i++, var_r29++) { if (var_r29->type == 2) { - PSMTXCopy(MtxTop[nMesh + i], sp8); + MTXCopy(MtxTop[nMesh + i], sp8); for (var_r30 = 0; var_r30 < CurHsf->objectCnt; var_r30++) { - PSMTXInverse(MtxTop[nMesh + var_r30], sp38); - PSMTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]); + MTXInverse(MtxTop[nMesh + var_r30], sp38); + MTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]); } - PSMTXInverse(MtxTop[nMesh + i], sp8); + MTXInverse(MtxTop[nMesh + i], sp8); var_r28++; } } diff --git a/src/game/THPDraw.c b/src/game/THPDraw.c index 8290c4ee..6a9c2d26 100755 --- a/src/game/THPDraw.c +++ b/src/game/THPDraw.c @@ -106,4 +106,9 @@ void THPGXYuv2RgbDraw(u32 *yImage, u32 *uImage, u32 *vImage, s16 x, s16 y, s16 t GXPosition3s16(x, y + polyHeight, 0); GXTexCoord2s16(0, 1); GXEnd(); +#ifdef TARGET_PC + GXDestroyTexObj(&sp54); + GXDestroyTexObj(&sp34); + GXDestroyTexObj(&sp14); +#endif } diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 2ba67445..acf10777 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -478,7 +478,7 @@ static void UpdateExplode(omObjData *arg0) { break; case 2: BoardCameraRotGet(&sp8); - PSMTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f)); + MTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f)); BoardModelMtxSet(temp_r30->unk02, &sp20); BoardModelRotSet(temp_r30->unk02, 0.0f, 0.0f, 0.0f); sp14.x = arg0->scale.x; diff --git a/src/game/board/item.c b/src/game/board/item.c index d2341c9c..cf77d6ec 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -1035,7 +1035,7 @@ static void ExecItemSwap(void) } BoardModelRotGet(suitMdl, &sp3C); Hu3DCameraSet(0, sp108); - PSMTXInverse(sp108, spD8); + MTXInverse(sp108, spD8); Hu3DMtxRotGet(spD8, &sp48); sp3C.x = sp48.x; for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) { diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index f64992f4..d780c496 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -1,5 +1,14 @@ #include "game/board/lottery.h" #include "game/audio.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" +#include "game/board/window.h" #include "game/chrman.h" #include "game/data.h" #include "game/esprite.h" @@ -11,15 +20,6 @@ #include "game/pad.h" #include "game/process.h" #include "game/sprite.h" -#include "game/board/audio.h" -#include "game/board/com.h" -#include "game/board/main.h" -#include "game/board/model.h" -#include "game/board/player.h" -#include "game/board/space.h" -#include "game/board/tutorial.h" -#include "game/board/ui.h" -#include "game/board/window.h" #include "ext_math.h" #include "stdlib.h" @@ -109,104 +109,58 @@ static s16 ballMdl[4] = { -1, -1, -1, -1 }; static s16 loseMot = -1; static s16 ticketSprGrp = -1; -static s8 comInputDraw1[][2] = { - { 0x0B, 0xF8 }, { 0x2B, 0xDD }, { 0x2A, 0xDC }, { 0x2B, 0xDC }, - { 0x2B, 0xDC }, { 0x29, 0xDB }, { 0x24, 0xD6 }, { 0x02, 0xE8 }, - { 0x00, 0x00 }, { 0xFC, 0x02 }, { 0xD8, 0x27 }, { 0xD8, 0x28 }, - { 0xD8, 0x28 }, { 0xD8, 0x27 }, { 0xDA, 0x29 }, { 0xDE, 0x2C }, - { 0xE4, 0x31 }, { 0xF0, 0x3A }, { 0x00, 0x3C }, { 0x06, 0x3A }, - { 0x1B, 0x32 }, { 0x23, 0x2B }, { 0x24, 0x2A }, { 0x25, 0x29 }, - { 0x26, 0x29 }, { 0x28, 0x27 }, { 0x28, 0x27 }, { 0x28, 0x26 }, - { 0x28, 0x26 }, { 0x2E, 0x20 }, { 0x39, 0x11 }, { 0x48, 0x00 }, - { 0x48, 0x00 }, { 0x35, 0xEA }, { 0x29, 0xDB }, { 0x24, 0xD5 }, - { 0x17, 0xCB }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, - { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xEB, 0xCA }, { 0xD6, 0xDB }, - { 0xD6, 0xDB }, { 0xD4, 0xDE }, { 0xD1, 0xE2 }, { 0xC4, 0xF2 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC1, 0x0B }, - { 0xC6, 0x10 }, { 0xC9, 0x14 }, { 0xCB, 0x16 }, { 0xCB, 0x17 }, - { 0xCE, 0x1A }, { 0xD1, 0x1E }, { 0xD5, 0x23 }, { 0xD4, 0x22 }, - { 0xDB, 0x29 }, { 0xF5, 0x3E }, { 0x00, 0x48 }, { 0x00, 0x42 }, - { 0x0D, 0x3D }, { 0x24, 0x2A }, { 0x29, 0x26 }, { 0x29, 0x26 }, - { 0x29, 0x25 }, { 0x2D, 0x21 }, { 0x34, 0x18 }, { 0x40, 0x09 }, - { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x43, 0xFA }, { 0x33, 0xE6 }, - { 0x29, 0xDB }, { 0x1B, 0xCF }, { 0x05, 0xBD }, { 0x00, 0xB8 }, - { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, { 0xDD, 0xD5 }, - { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD4, 0xDE }, { 0xCB, 0xE9 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC5, 0x0F }, - { 0xD0, 0x1D }, { 0xD5, 0x23 }, { 0xDC, 0x2A }, { 0xF0, 0x3B }, - { 0x00, 0x3D }, { 0x08, 0x3F }, { 0x15, 0x36 }, { 0x24, 0x2A }, - { 0x29, 0x26 }, { 0x2A, 0x24 }, { 0x30, 0x1C }, { 0x3B, 0x0F }, - { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x3E, 0xF4 }, { 0x2D, 0xE0 }, - { 0x22, 0xD4 }, { 0x02, 0xBB }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, - { 0xD9, 0xD8 }, { 0xD4, 0xDE }, { 0x7F, 0x7F } -}; +static s8 comInputDraw1[][2] = { { 0x0B, 0xF8 }, { 0x2B, 0xDD }, { 0x2A, 0xDC }, { 0x2B, 0xDC }, { 0x2B, 0xDC }, { 0x29, 0xDB }, { 0x24, 0xD6 }, + { 0x02, 0xE8 }, { 0x00, 0x00 }, { 0xFC, 0x02 }, { 0xD8, 0x27 }, { 0xD8, 0x28 }, { 0xD8, 0x28 }, { 0xD8, 0x27 }, { 0xDA, 0x29 }, { 0xDE, 0x2C }, + { 0xE4, 0x31 }, { 0xF0, 0x3A }, { 0x00, 0x3C }, { 0x06, 0x3A }, { 0x1B, 0x32 }, { 0x23, 0x2B }, { 0x24, 0x2A }, { 0x25, 0x29 }, { 0x26, 0x29 }, + { 0x28, 0x27 }, { 0x28, 0x27 }, { 0x28, 0x26 }, { 0x28, 0x26 }, { 0x2E, 0x20 }, { 0x39, 0x11 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x35, 0xEA }, + { 0x29, 0xDB }, { 0x24, 0xD5 }, { 0x17, 0xCB }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xEB, 0xCA }, + { 0xD6, 0xDB }, { 0xD6, 0xDB }, { 0xD4, 0xDE }, { 0xD1, 0xE2 }, { 0xC4, 0xF2 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC1, 0x0B }, { 0xC6, 0x10 }, { 0xC9, 0x14 }, { 0xCB, 0x16 }, { 0xCB, 0x17 }, { 0xCE, 0x1A }, + { 0xD1, 0x1E }, { 0xD5, 0x23 }, { 0xD4, 0x22 }, { 0xDB, 0x29 }, { 0xF5, 0x3E }, { 0x00, 0x48 }, { 0x00, 0x42 }, { 0x0D, 0x3D }, { 0x24, 0x2A }, + { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x25 }, { 0x2D, 0x21 }, { 0x34, 0x18 }, { 0x40, 0x09 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x43, 0xFA }, + { 0x33, 0xE6 }, { 0x29, 0xDB }, { 0x1B, 0xCF }, { 0x05, 0xBD }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, { 0xDD, 0xD5 }, + { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD4, 0xDE }, { 0xCB, 0xE9 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC5, 0x0F }, { 0xD0, 0x1D }, + { 0xD5, 0x23 }, { 0xDC, 0x2A }, { 0xF0, 0x3B }, { 0x00, 0x3D }, { 0x08, 0x3F }, { 0x15, 0x36 }, { 0x24, 0x2A }, { 0x29, 0x26 }, { 0x2A, 0x24 }, + { 0x30, 0x1C }, { 0x3B, 0x0F }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x3E, 0xF4 }, { 0x2D, 0xE0 }, { 0x22, 0xD4 }, { 0x02, 0xBB }, { 0x00, 0xB8 }, + { 0xFB, 0xBD }, { 0xD9, 0xD8 }, { 0xD4, 0xDE }, { 0x7F, 0x7F } }; -static s8 comInputDraw2[][2] = { - { 0x07, 0x00 }, { 0x1F, 0x00 }, { 0x3A, 0x00 }, { 0x48, 0x00 }, - { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, - { 0x43, 0xFA }, { 0x35, 0xEA }, { 0x2A, 0xDB }, { 0x1A, 0xCE }, - { 0x00, 0xB9 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, - { 0x00, 0xBA }, { 0xE9, 0xCC }, { 0xD5, 0xDD }, { 0xD4, 0xDE }, - { 0xD4, 0xDE }, { 0xD0, 0xE3 }, { 0xBD, 0xFB }, { 0xB8, 0x00 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xBC, 0x03 }, { 0xC2, 0x0C }, - { 0xCB, 0x17 }, { 0xD5, 0x23 }, { 0xD8, 0x27 }, { 0xF0, 0x3A }, - { 0x00, 0x43 }, { 0x18, 0x34 }, { 0x29, 0x26 }, { 0x29, 0x26 }, - { 0x29, 0x26 }, { 0x29, 0x25 }, { 0x29, 0x26 }, { 0x29, 0x25 }, - { 0x29, 0x25 }, { 0x2C, 0x22 }, { 0x31, 0x1B }, { 0x39, 0x12 }, - { 0x47, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x37, 0xEC }, - { 0x26, 0xD7 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, - { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, - { 0xE5, 0xCE }, { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD6, 0xDC }, - { 0xD5, 0xDD }, { 0xD2, 0xE0 }, { 0xCC, 0xE8 }, { 0xC4, 0xF2 }, - { 0xBE, 0xFA }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, - { 0xC7, 0x12 }, { 0xD8, 0x27 }, { 0xF6, 0x3E }, { 0x00, 0x47 }, - { 0x00, 0x44 }, { 0x05, 0x42 }, { 0x16, 0x35 }, { 0x28, 0x27 }, - { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, - { 0x7F, 0x7F } -}; +static s8 comInputDraw2[][2] = { { 0x07, 0x00 }, { 0x1F, 0x00 }, { 0x3A, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, + { 0x48, 0x00 }, { 0x43, 0xFA }, { 0x35, 0xEA }, { 0x2A, 0xDB }, { 0x1A, 0xCE }, { 0x00, 0xB9 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, + { 0x00, 0xBA }, { 0xE9, 0xCC }, { 0xD5, 0xDD }, { 0xD4, 0xDE }, { 0xD4, 0xDE }, { 0xD0, 0xE3 }, { 0xBD, 0xFB }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xBC, 0x03 }, { 0xC2, 0x0C }, { 0xCB, 0x17 }, { 0xD5, 0x23 }, + { 0xD8, 0x27 }, { 0xF0, 0x3A }, { 0x00, 0x43 }, { 0x18, 0x34 }, { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x25 }, { 0x29, 0x26 }, + { 0x29, 0x25 }, { 0x29, 0x25 }, { 0x2C, 0x22 }, { 0x31, 0x1B }, { 0x39, 0x12 }, { 0x47, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x37, 0xEC }, + { 0x26, 0xD7 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, { 0xE5, 0xCE }, + { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD5, 0xDD }, { 0xD2, 0xE0 }, { 0xCC, 0xE8 }, { 0xC4, 0xF2 }, { 0xBE, 0xFA }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xC7, 0x12 }, { 0xD8, 0x27 }, { 0xF6, 0x3E }, { 0x00, 0x47 }, { 0x00, 0x44 }, { 0x05, 0x42 }, { 0x16, 0x35 }, { 0x28, 0x27 }, + { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x7F, 0x7F } }; -static s8 comInputBall[][2] = { - { 0xE5, 0x00 }, { 0xC0, 0x03 }, { 0xBC, 0x04 }, { 0xBC, 0x03 }, - { 0xBF, 0x07 }, { 0xC3, 0x0C }, { 0xCB, 0x17 }, { 0xD5, 0x24 }, - { 0xDE, 0x2C }, { 0xF9, 0x3E }, { 0x00, 0x48 }, { 0x00, 0x45 }, - { 0x06, 0x40 }, { 0x21, 0x2C }, { 0x28, 0x27 }, { 0x28, 0x26 }, - { 0x29, 0x25 }, { 0x30, 0x1D }, { 0x43, 0x05 }, { 0x48, 0x00 }, - { 0x33, 0xE7 }, { 0x24, 0xD6 }, { 0x07, 0xBF }, { 0x00, 0xB8 }, - { 0x00, 0xB8 }, { 0xE4, 0xCF }, { 0xD4, 0xDE }, { 0xC6, 0xF0 }, - { 0xB8, 0x00 }, { 0xC7, 0x11 }, { 0xD2, 0x20 }, { 0xD5, 0x24 }, - { 0xD6, 0x25 }, { 0xD8, 0x27 }, { 0xE1, 0x2E }, { 0x00, 0x43 }, - { 0x00, 0x48 }, { 0x00, 0x44 }, { 0x1D, 0x30 }, { 0x28, 0x27 }, - { 0x28, 0x27 }, { 0x2C, 0x22 }, { 0x39, 0x12 }, { 0x48, 0x00 }, - { 0x34, 0xE8 }, { 0x23, 0xD5 }, { 0x0A, 0xC1 }, { 0x00, 0xB8 }, - { 0x00, 0xB8 }, { 0xF4, 0xC3 }, { 0xD4, 0xDE }, { 0xC3, 0xF4 }, - { 0xB8, 0x00 }, { 0xC6, 0x10 }, { 0xD3, 0x21 }, { 0xD6, 0x25 }, - { 0xD8, 0x27 }, { 0xDF, 0x2D }, { 0xEA, 0x36 }, { 0x00, 0x48 }, - { 0x00, 0x48 }, { 0x00, 0x48 }, { 0x17, 0x35 }, { 0x28, 0x27 }, - { 0x29, 0x25 }, { 0x33, 0x19 }, { 0x48, 0x00 }, { 0x48, 0x00 }, - { 0x34, 0xE8 }, { 0x23, 0xD5 }, { 0x00, 0xB9 }, { 0x00, 0xB8 }, - { 0x00, 0xB8 }, { 0xFA, 0xBE }, { 0xD4, 0xDE }, { 0xC8, 0xED }, - { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC0, 0x09 }, { 0xD0, 0x1C }, - { 0xD6, 0x24 }, { 0xDC, 0x2A }, { 0xED, 0x38 }, { 0x00, 0x48 }, - { 0x00, 0x48 }, { 0x00, 0x48 }, { 0x1B, 0x31 }, { 0x28, 0x27 }, - { 0x29, 0x26 }, { 0x2D, 0x21 }, { 0x3D, 0x0C }, { 0x48, 0x00 }, - { 0x33, 0xE7 }, { 0x20, 0xD3 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, - { 0x00, 0xBB }, { 0xDB, 0xD7 }, { 0xD4, 0xDE }, { 0xD3, 0xDF }, - { 0xBB, 0xFD }, { 0xB8, 0x00 }, { 0x7F, 0x7F } -}; +static s8 comInputBall[][2] = { { 0xE5, 0x00 }, { 0xC0, 0x03 }, { 0xBC, 0x04 }, { 0xBC, 0x03 }, { 0xBF, 0x07 }, { 0xC3, 0x0C }, { 0xCB, 0x17 }, + { 0xD5, 0x24 }, { 0xDE, 0x2C }, { 0xF9, 0x3E }, { 0x00, 0x48 }, { 0x00, 0x45 }, { 0x06, 0x40 }, { 0x21, 0x2C }, { 0x28, 0x27 }, { 0x28, 0x26 }, + { 0x29, 0x25 }, { 0x30, 0x1D }, { 0x43, 0x05 }, { 0x48, 0x00 }, { 0x33, 0xE7 }, { 0x24, 0xD6 }, { 0x07, 0xBF }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, + { 0xE4, 0xCF }, { 0xD4, 0xDE }, { 0xC6, 0xF0 }, { 0xB8, 0x00 }, { 0xC7, 0x11 }, { 0xD2, 0x20 }, { 0xD5, 0x24 }, { 0xD6, 0x25 }, { 0xD8, 0x27 }, + { 0xE1, 0x2E }, { 0x00, 0x43 }, { 0x00, 0x48 }, { 0x00, 0x44 }, { 0x1D, 0x30 }, { 0x28, 0x27 }, { 0x28, 0x27 }, { 0x2C, 0x22 }, { 0x39, 0x12 }, + { 0x48, 0x00 }, { 0x34, 0xE8 }, { 0x23, 0xD5 }, { 0x0A, 0xC1 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xF4, 0xC3 }, { 0xD4, 0xDE }, { 0xC3, 0xF4 }, + { 0xB8, 0x00 }, { 0xC6, 0x10 }, { 0xD3, 0x21 }, { 0xD6, 0x25 }, { 0xD8, 0x27 }, { 0xDF, 0x2D }, { 0xEA, 0x36 }, { 0x00, 0x48 }, { 0x00, 0x48 }, + { 0x00, 0x48 }, { 0x17, 0x35 }, { 0x28, 0x27 }, { 0x29, 0x25 }, { 0x33, 0x19 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x34, 0xE8 }, { 0x23, 0xD5 }, + { 0x00, 0xB9 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFA, 0xBE }, { 0xD4, 0xDE }, { 0xC8, 0xED }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC0, 0x09 }, + { 0xD0, 0x1C }, { 0xD6, 0x24 }, { 0xDC, 0x2A }, { 0xED, 0x38 }, { 0x00, 0x48 }, { 0x00, 0x48 }, { 0x00, 0x48 }, { 0x1B, 0x31 }, { 0x28, 0x27 }, + { 0x29, 0x26 }, { 0x2D, 0x21 }, { 0x3D, 0x0C }, { 0x48, 0x00 }, { 0x33, 0xE7 }, { 0x20, 0xD3 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xBB }, + { 0xDB, 0xD7 }, { 0xD4, 0xDE }, { 0xD3, 0xDF }, { 0xBB, 0xFD }, { 0xB8, 0x00 }, { 0x7F, 0x7F } }; -void BoardLotteryHostSet(s16 arg0) { +void BoardLotteryHostSet(s16 arg0) +{ hostMdl = arg0; } -s16 BoardLotteryHostGet(void) { +s16 BoardLotteryHostGet(void) +{ return hostMdl; } -void BoardLotteryExec(void) { +void BoardLotteryExec(void) +{ if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { return; } @@ -219,7 +173,8 @@ void BoardLotteryExec(void) { BoardRollDispSet(1); } -void BoardLotteryInit(void) { +void BoardLotteryInit(void) +{ Vec sp14; Vec sp8; s32 i; @@ -247,73 +202,28 @@ void BoardLotteryInit(void) { } } -static void CreateModel(void) { +static void CreateModel(void) +{ s32 i; - s32 sp10[4] = { - DATA_MAKE_NUM(DATADIR_BKUJIYA, 5), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 6), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 7), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 8) - }; - s32 sp8[2] = { - DATA_MAKE_NUM(DATADIR_BKUJIYA, 3), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 4) - }; + s32 sp10[4] = { DATA_MAKE_NUM(DATADIR_BKUJIYA, 5), DATA_MAKE_NUM(DATADIR_BKUJIYA, 6), DATA_MAKE_NUM(DATADIR_BKUJIYA, 7), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 8) }; + s32 sp8[2] = { DATA_MAKE_NUM(DATADIR_BKUJIYA, 3), DATA_MAKE_NUM(DATADIR_BKUJIYA, 4) }; s32 sp20[9][4] = { - { - DATA_MAKE_NUM(DATADIR_BGUEST, 1), - DATA_MAKE_NUM(DATADIR_BGUEST, 2), - DATA_MAKE_NUM(DATADIR_BGUEST, 3), - DATA_MAKE_NUM(DATADIR_BGUEST, 4) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 9), - DATA_MAKE_NUM(DATADIR_BGUEST, 10), - DATA_MAKE_NUM(DATADIR_BGUEST, 11), - DATA_MAKE_NUM(DATADIR_BGUEST, 12) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 14), - DATA_MAKE_NUM(DATADIR_BGUEST, 15), - DATA_MAKE_NUM(DATADIR_BGUEST, 16), - DATA_MAKE_NUM(DATADIR_BGUEST, 17) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 24), - DATA_MAKE_NUM(DATADIR_BGUEST, 25), - DATA_MAKE_NUM(DATADIR_BGUEST, 26), - DATA_MAKE_NUM(DATADIR_BGUEST, 27) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 29), - DATA_MAKE_NUM(DATADIR_BGUEST, 30), - DATA_MAKE_NUM(DATADIR_BGUEST, 31), - DATA_MAKE_NUM(DATADIR_BGUEST, 32) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 34), - DATA_MAKE_NUM(DATADIR_BGUEST, 35), - DATA_MAKE_NUM(DATADIR_BGUEST, 36), - DATA_MAKE_NUM(DATADIR_BGUEST, 37) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 14), - DATA_MAKE_NUM(DATADIR_BGUEST, 15), - DATA_MAKE_NUM(DATADIR_BGUEST, 16), - DATA_MAKE_NUM(DATADIR_BGUEST, 17) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 42), - DATA_MAKE_NUM(DATADIR_BGUEST, 43), - DATA_MAKE_NUM(DATADIR_BGUEST, 44), - DATA_MAKE_NUM(DATADIR_BGUEST, 45) - }, - { - DATA_MAKE_NUM(DATADIR_BGUEST, 42), - DATA_MAKE_NUM(DATADIR_BGUEST, 43), - DATA_MAKE_NUM(DATADIR_BGUEST, 44), - DATA_MAKE_NUM(DATADIR_BGUEST, 45) - } + { DATA_MAKE_NUM(DATADIR_BGUEST, 1), DATA_MAKE_NUM(DATADIR_BGUEST, 2), DATA_MAKE_NUM(DATADIR_BGUEST, 3), DATA_MAKE_NUM(DATADIR_BGUEST, 4) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 9), DATA_MAKE_NUM(DATADIR_BGUEST, 10), DATA_MAKE_NUM(DATADIR_BGUEST, 11), DATA_MAKE_NUM(DATADIR_BGUEST, 12) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 14), DATA_MAKE_NUM(DATADIR_BGUEST, 15), DATA_MAKE_NUM(DATADIR_BGUEST, 16), + DATA_MAKE_NUM(DATADIR_BGUEST, 17) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 24), DATA_MAKE_NUM(DATADIR_BGUEST, 25), DATA_MAKE_NUM(DATADIR_BGUEST, 26), + DATA_MAKE_NUM(DATADIR_BGUEST, 27) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 29), DATA_MAKE_NUM(DATADIR_BGUEST, 30), DATA_MAKE_NUM(DATADIR_BGUEST, 31), + DATA_MAKE_NUM(DATADIR_BGUEST, 32) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 34), DATA_MAKE_NUM(DATADIR_BGUEST, 35), DATA_MAKE_NUM(DATADIR_BGUEST, 36), + DATA_MAKE_NUM(DATADIR_BGUEST, 37) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 14), DATA_MAKE_NUM(DATADIR_BGUEST, 15), DATA_MAKE_NUM(DATADIR_BGUEST, 16), + DATA_MAKE_NUM(DATADIR_BGUEST, 17) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 42), DATA_MAKE_NUM(DATADIR_BGUEST, 43), DATA_MAKE_NUM(DATADIR_BGUEST, 44), + DATA_MAKE_NUM(DATADIR_BGUEST, 45) }, + { DATA_MAKE_NUM(DATADIR_BGUEST, 42), DATA_MAKE_NUM(DATADIR_BGUEST, 43), DATA_MAKE_NUM(DATADIR_BGUEST, 44), DATA_MAKE_NUM(DATADIR_BGUEST, 45) } }; lotteryMdl[1] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 1), NULL, 0); @@ -352,7 +262,8 @@ static void CreateModel(void) { BoardModelHookSet(lotteryMdl[1], "toto_grip1", gripMdl[1]); } -static void KillModel(void) { +static void KillModel(void) +{ s32 i; if (lotteryMdl[1] != -1) { @@ -390,7 +301,8 @@ static void KillModel(void) { BoardModelVisibilitySet(BoardLotteryHostGet(), 0); } -void BoardLotteryKill(void) { +void BoardLotteryKill(void) +{ if (lotteryProc) { HuPrcKill(lotteryProc); } @@ -400,7 +312,8 @@ void BoardLotteryKill(void) { } } -static void DestroyLottery(void) { +static void DestroyLottery(void) +{ s32 i; for (i = 0; i < 4; i++) { @@ -421,7 +334,8 @@ static void DestroyLottery(void) { lotteryProc = NULL; } -static void ExecLottery(void) { +static void ExecLottery(void) +{ Vec sp38; Vec sp2C; Vec sp20; @@ -472,7 +386,8 @@ static void ExecLottery(void) { if (GWPlayer[temp_r31].com) { if (BoardPlayerCoinsGet(temp_r31) >= 5) { BoardComKeySetLeft(); - } else { + } + else { BoardComKeySetRight(); } } @@ -512,7 +427,8 @@ static void ExecLottery(void) { if (BoardPlayerSizeGet(temp_r31) == 1) { BoardModelVisibilitySet(gripMdl[0], 0); BoardModelVisibilitySet(gripMdl[1], 1); - } else { + } + else { BoardModelVisibilitySet(gripMdl[0], 1); BoardModelVisibilitySet(gripMdl[1], 0); } @@ -561,7 +477,8 @@ static void ExecLottery(void) { SetupTicket(temp_r31); ShowTicket(); var_r27 = 1; - } else { + } + else { var_r27 = 0; } if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { @@ -571,7 +488,8 @@ static void ExecLottery(void) { var_r25 = BoardRandMod(100) & 0xFF; if (var_r25 < 50) { ExecBallGame(); - } else { + } + else { ExecScratch(); } ExecPrize(); @@ -601,7 +519,8 @@ static void ExecLottery(void) { HuPrcEnd(); } -static void DoMiniJumpUp(s32 arg0) { +static void DoMiniJumpUp(s32 arg0) +{ Mtx sp34; Vec sp28; Vec sp1C; @@ -629,7 +548,8 @@ static void DoMiniJumpUp(s32 arg0) { OSs16tof32(&i, &temp_f30); if (i < 4) { var_f27 = 5.0f; - } else { + } + else { var_f27 = 0.0f; } sp1C.x += sp10.x; @@ -643,7 +563,8 @@ static void DoMiniJumpUp(s32 arg0) { BoardPlayerIdleSet(arg0); } -static void DoMiniJumpDown(s32 arg0) { +static void DoMiniJumpDown(s32 arg0) +{ Vec sp24; Vec sp18; Vec spC; @@ -661,7 +582,8 @@ static void DoMiniJumpDown(s32 arg0) { OSs16tof32(&i, &temp_f31); if (i < 3) { var_f29 = 10.0f; - } else { + } + else { var_f29 = 0.0f; } sp18.x += spC.x; @@ -681,7 +603,8 @@ static void DoMiniJumpDown(s32 arg0) { } } -static void PayEnterFee(s32 arg0) { +static void PayEnterFee(s32 arg0) +{ s32 var_r29; s32 temp_r31; s32 i; @@ -691,7 +614,8 @@ static void PayEnterFee(s32 arg0) { BoardStatusShowSet(temp_r31, 1); if (arg0 != 0) { var_r29 = lotteryMessBase + 12; - } else { + } + else { var_r29 = lotteryMessBase; } BoardWinCreate(2, var_r29, BoardWinPortraitGet()); @@ -709,7 +633,8 @@ static void PayEnterFee(s32 arg0) { BoardStatusShowSet(temp_r31, 0); } -static void ShowTicket(void) { +static void ShowTicket(void) +{ s16 sp10; s16 spE; s16 spC; @@ -720,22 +645,15 @@ static void ShowTicket(void) { s32 var_r29; s32 i; u8 *var_r28; - s32 sp14[] = { - DATA_MAKE_NUM(DATADIR_BKUJIYA, 21), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 22), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 23), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 24), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 25), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 26), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 27), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 28) - }; + s32 sp14[] = { DATA_MAKE_NUM(DATADIR_BKUJIYA, 21), DATA_MAKE_NUM(DATADIR_BKUJIYA, 22), DATA_MAKE_NUM(DATADIR_BKUJIYA, 23), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 24), DATA_MAKE_NUM(DATADIR_BKUJIYA, 25), DATA_MAKE_NUM(DATADIR_BKUJIYA, 26), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 27), DATA_MAKE_NUM(DATADIR_BKUJIYA, 28) }; if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { return; } sp8 = GWPlayer[GWSystem.player_curr].ticket_player; - var_r28 = (u8*) &sp8; + var_r28 = (u8 *)&sp8; temp_r31 = HuSprGrpCreate(4); BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 20), 30001, 0, &spA); HuSprGrpMemberSet(temp_r31, 0, spA); @@ -784,10 +702,11 @@ static void ShowTicket(void) { HuPrcVSleep(); } HuSprGrpKill(temp_r31); - (void) var_r29; // Required to match + (void)var_r29; // Required to match } -static void SetupTicket(s32 arg0) { +static void SetupTicket(s32 arg0) +{ u8 sp8[4]; u8 var_r29; s32 var_r28; @@ -816,11 +735,9 @@ static void SetupTicket(s32 arg0) { GWPlayer[arg0].draw_ticket = 1; } -static void LotteryInlineFunc00(s32 arg0, s32 arg1) { - s32 sp20[2] = { - DATA_MAKE_NUM(DATADIR_BKUJIYA, 18), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 19) - }; +static void LotteryInlineFunc00(s32 arg0, s32 arg1) +{ + s32 sp20[2] = { DATA_MAKE_NUM(DATADIR_BKUJIYA, 18), DATA_MAKE_NUM(DATADIR_BKUJIYA, 19) }; s16 sp10[2] = { 152, 120 }; s16 sp14[2] = { 120, 120 }; Vec sp34; @@ -835,7 +752,8 @@ static void LotteryInlineFunc00(s32 arg0, s32 arg1) { lotterySpr = espEntry(sp20[arg0], 30001, 0); espAttrSet(lotterySpr, HUSPR_ATTR_NOANIM); } - } else { + } + else { sp34.y = (sp10[arg0] / 2) + 40; temp_f30 = -4.0f; } @@ -850,7 +768,8 @@ static void LotteryInlineFunc00(s32 arg0, s32 arg1) { } } -static void ExecBallGame(void) { +static void ExecBallGame(void) +{ Vec sp4C; float temp_f24; float var_f23; @@ -871,16 +790,9 @@ static void ExecBallGame(void) { s8 spA; s8 sp9; s8 *temp_r23; - s32 sp58[] = { - DATA_MAKE_NUM(DATADIR_MARIOMOT, 29), - DATA_MAKE_NUM(DATADIR_LUIGIMOT, 29), - DATA_MAKE_NUM(DATADIR_PEACHMOT, 29), - DATA_MAKE_NUM(DATADIR_YOSHIMOT, 29), - DATA_MAKE_NUM(DATADIR_WARIOMOT, 29), - DATA_MAKE_NUM(DATADIR_DONKEYMOT, 29), - DATA_MAKE_NUM(DATADIR_DAISYMOT, 29), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 29) - }; + s32 sp58[] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 29), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 29), DATA_MAKE_NUM(DATADIR_PEACHMOT, 29), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 29), DATA_MAKE_NUM(DATADIR_WARIOMOT, 29), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 29), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 29), DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 29) }; temp_r27 = GWSystem.player_curr; currPrize = -1; @@ -949,24 +861,28 @@ static void ExecBallGame(void) { temp_r25 = GWPlayer[temp_r27].port; spB = HuPadStkX[temp_r25]; spA = HuPadStkY[temp_r25]; - } else { + } + else { temp_r23 = comInputBall[comInputPos++]; spB = temp_r23[0]; spA = temp_r23[1]; } - } else { + } + else { spB = spA = 0; } if (spB == 0x7F || spA == 0x7F) { var_r20 = 1; - } else { + } + else { if ((abs(spB) < 57.600002f && abs(spA) < 57.600002f) || (var_r17 == spB && sp9 == spA) || (spB == 0 && spA == 0)) { var_f28 *= 0.93f; var_f27 *= 0.8f; if (var_f27 < 0.01f && var_r26 != 0) { var_r26--; } - } else { + } + else { OSs8tof32(&spB, &var_f26); OSs8tof32(&spA, &var_f19); var_f25 = atan2d(var_f26, var_f19); @@ -984,7 +900,8 @@ static void ExecBallGame(void) { var_f27 += 0.01f * var_f26; if (var_f28 + var_f27 < 2.0f) { var_f28 += var_f27; - } else { + } + else { var_f28 = 2.0f; } } @@ -996,7 +913,8 @@ static void ExecBallGame(void) { LotteryInlineFunc00(0, 1); } -static void SetBallPrize(void) { +static void SetBallPrize(void) +{ Process *sp8; s32 temp_r31; @@ -1004,11 +922,14 @@ static void SetBallPrize(void) { temp_r31 = BoardRandMod(100); if (temp_r31 > 97) { currPrize = 0; - } else if (temp_r31 > 87) { + } + else if (temp_r31 > 87) { currPrize = 1; - } else if (temp_r31 > 67) { + } + else if (temp_r31 > 67) { currPrize = 2; - } else { + } + else { currPrize = 3; } if (GWSystem.max_turn - GWSystem.turn != 0 || currPrize != 2) { @@ -1018,7 +939,8 @@ static void SetBallPrize(void) { sp8 = HuPrcChildCreate(ExecBallPrize, 0x2004, 0x3800, 0, lotteryProc); } -static void ExecBallPrize(void) { +static void ExecBallPrize(void) +{ Vec sp30; Vec sp24; Vec sp18; @@ -1042,19 +964,19 @@ static void ExecBallPrize(void) { temp_r29 = ballMdl[currPrize & 3]; BoardModelPosGet(lotteryMdl[0], &sp30); BoardModelRotGet(lotteryMdl[0], &sp18); - PSMTXRotRad(sp6C, 'Y', MTXDegToRad(sp18.y)); + MTXRotRad(sp6C, 'Y', MTXDegToRad(sp18.y)); var_r27 = BoardModelIDGet(lotteryMdl[0]); temp_r3 = Hu3DModelObjPtrGet(var_r27, "toto_gara"); temp_f28 = sp30.y + temp_r3->data.curr.pos.y + 100.0f; - PSMTXTrans(sp3C, temp_r3->data.curr.pos.x, temp_r3->data.curr.pos.y + 210.0f, temp_r3->data.curr.pos.z + -40.0f); - PSMTXConcat(sp6C, sp3C, sp3C); + MTXTrans(sp3C, temp_r3->data.curr.pos.x, temp_r3->data.curr.pos.y + 210.0f, temp_r3->data.curr.pos.z + -40.0f); + MTXConcat(sp6C, sp3C, sp3C); Hu3DMtxTransGet(sp3C, &spC); VECAdd(&spC, &sp30, &sp30); BoardModelVisibilitySet(temp_r29, 1); sp24.x = 10.5f; sp24.y = -3.0f; sp24.z = 0.0f; - PSMTXMultVec(sp6C, &sp24, &sp24); + MTXMultVec(sp6C, &sp24, &sp24); var_f29 = 0.0f; var_f30 = 1.8f; temp_f27 = 0.016666668f; @@ -1084,62 +1006,29 @@ static void ExecBallPrize(void) { } } -static const s32 pickSpr[] = { - DATA_MAKE_NUM(DATADIR_BOARD, 30), - DATA_MAKE_NUM(DATADIR_BOARD, 31), - DATA_MAKE_NUM(DATADIR_BOARD, 32), - DATA_MAKE_NUM(DATADIR_BOARD, 33), - DATA_MAKE_NUM(DATADIR_BOARD, 34), - DATA_MAKE_NUM(DATADIR_BOARD, 35), - DATA_MAKE_NUM(DATADIR_BOARD, 36), - DATA_MAKE_NUM(DATADIR_BOARD, 37) -}; +static const s32 pickSpr[] + = { DATA_MAKE_NUM(DATADIR_BOARD, 30), DATA_MAKE_NUM(DATADIR_BOARD, 31), DATA_MAKE_NUM(DATADIR_BOARD, 32), DATA_MAKE_NUM(DATADIR_BOARD, 33), + DATA_MAKE_NUM(DATADIR_BOARD, 34), DATA_MAKE_NUM(DATADIR_BOARD, 35), DATA_MAKE_NUM(DATADIR_BOARD, 36), DATA_MAKE_NUM(DATADIR_BOARD, 37) }; -static const s32 handMdl[] = { - DATA_MAKE_NUM(DATADIR_BKUJIYA, 9), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 10), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 11), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 12), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 13), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 14), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 15), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 16) -}; +static const s32 handMdl[] = { DATA_MAKE_NUM(DATADIR_BKUJIYA, 9), DATA_MAKE_NUM(DATADIR_BKUJIYA, 10), DATA_MAKE_NUM(DATADIR_BKUJIYA, 11), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 12), DATA_MAKE_NUM(DATADIR_BKUJIYA, 13), DATA_MAKE_NUM(DATADIR_BKUJIYA, 14), DATA_MAKE_NUM(DATADIR_BKUJIYA, 15), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 16) }; -static const s32 ticketSpr[] = { - DATA_MAKE_NUM(DATADIR_BKUJIYA, 29), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 30), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 31), - DATA_MAKE_NUM(DATADIR_BKUJIYA, 32) -}; +static const s32 ticketSpr[] = { DATA_MAKE_NUM(DATADIR_BKUJIYA, 29), DATA_MAKE_NUM(DATADIR_BKUJIYA, 30), DATA_MAKE_NUM(DATADIR_BKUJIYA, 31), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 32) }; static omObjData *ticketObj[12] = { NULL }; static s8 ticketPrize[12] = { 0 }; static Vec handLastPos = { 0.0f, 0.0f, 0.0f }; -static s32 loseSoundTbl[] = { - 0x0000012E, - 0x0000016E, - 0x000001AE, - 0x000001EE, - 0x0000022E, - 0x0000026E, - 0x000002AE, - 0x000002EE -}; +static s32 loseSoundTbl[] = { 0x0000012E, 0x0000016E, 0x000001AE, 0x000001EE, 0x0000022E, 0x0000026E, 0x000002AE, 0x000002EE }; -static s32 loseMotTbl[] = { - DATA_MAKE_NUM(DATADIR_MARIOMOT, 51), - DATA_MAKE_NUM(DATADIR_LUIGIMOT, 51), - DATA_MAKE_NUM(DATADIR_PEACHMOT, 51), - DATA_MAKE_NUM(DATADIR_YOSHIMOT, 51), - DATA_MAKE_NUM(DATADIR_WARIOMOT, 51), - DATA_MAKE_NUM(DATADIR_DONKEYMOT, 51), - DATA_MAKE_NUM(DATADIR_DAISYMOT, 51), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 51) -}; +static s32 loseMotTbl[] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 51), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 51), DATA_MAKE_NUM(DATADIR_PEACHMOT, 51), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 51), DATA_MAKE_NUM(DATADIR_WARIOMOT, 51), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 51), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 51), DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 51) }; -static void ExecScratchTicket(s32 arg0) { +static void ExecScratchTicket(s32 arg0) +{ Vec sp24; Vec sp18; Vec spC; @@ -1178,7 +1067,8 @@ static void ExecScratchTicket(s32 arg0) { comInputPos = 0; if (BoardRandMod(100) < 50) { comInputDrawP = comInputDraw1; - } else { + } + else { comInputDrawP = comInputDraw2; } temp_r27 = HuAudFXPlay(0x335); @@ -1217,7 +1107,8 @@ static void ExecScratchTicket(s32 arg0) { lotteryMdl[4] = -1; } -static void ExecScratch(void) { +static void ExecScratch(void) +{ TicketWork *temp_r28; float var_f31; s32 temp_curr; @@ -1259,7 +1150,8 @@ static void ExecScratch(void) { BoardFilterFadeOut(30); } -static void KillScratch(void) { +static void KillScratch(void) +{ if (ticketSprGrp != -1) { HuSprGrpKill(ticketSprGrp); ticketSprGrp = -1; @@ -1270,7 +1162,8 @@ static void KillScratch(void) { memset(ticketObj, 0, sizeof(ticketObj)); } -static void ExecScratchSpr(omObjData *arg0) { +static void ExecScratchSpr(omObjData *arg0) +{ Vec sp20; Vec sp14; Vec sp8; @@ -1298,7 +1191,8 @@ static void ExecScratchSpr(omObjData *arg0) { if (ABS(sp8.x) < 1.0f && ABS(sp8.y) < 1.0f) { sp8 = sp14; temp_r30->unk00_field1 = 1; - } else { + } + else { VECScale(&sp8, &sp8, 0.2f); VECAdd(&sp20, &sp8, &sp8); temp_r30->unk00_field1 = 0; @@ -1309,7 +1203,8 @@ static void ExecScratchSpr(omObjData *arg0) { arg0->rot.y = sp8.y; } -static void HideScratchSpr(void) { +static void HideScratchSpr(void) +{ s32 i; for (i = 0; i < 12; i++) { @@ -1319,7 +1214,8 @@ static void HideScratchSpr(void) { } } -static void InitScratchSpr(void) { +static void InitScratchSpr(void) +{ Vec sp18; Vec spC; omObjData *temp_r31; @@ -1361,7 +1257,8 @@ static void InitScratchSpr(void) { HuSprGrpDrawNoSet(temp_r28, 0x40); } -static inline u32 ExecStratchPickInlineFunc(LotteryTicketPickWork *temp_r29) { +static inline u32 ExecStratchPickInlineFunc(LotteryTicketPickWork *temp_r29) +{ s32 var_r21; s32 temp_r23; u32 var_r26; @@ -1371,17 +1268,21 @@ static inline u32 ExecStratchPickInlineFunc(LotteryTicketPickWork *temp_r29) { if (!GWPlayer[var_r21].com) { temp_r23 = GWPlayer[GWSystem.player_curr].port; var_r26 = HuPadDStkRep[temp_r23] | HuPadBtnDown[temp_r23]; - } else if (comLotteryType != temp_r29->unk02) { + } + else if (comLotteryType != temp_r29->unk02) { var_r26 = 2; - } else if (comLotteryWinType != temp_r29->unk03) { + } + else if (comLotteryWinType != temp_r29->unk03) { var_r26 = 4; - } else if (comLotteryType == temp_r29->unk02 && comLotteryWinType == temp_r29->unk03) { + } + else if (comLotteryType == temp_r29->unk02 && comLotteryWinType == temp_r29->unk03) { var_r26 = 0x100; } return var_r26; } -static void ExecScratchPick(omObjData *arg0) { +static void ExecScratchPick(omObjData *arg0) +{ float var_f29; float var_f28; s8 var_r28; @@ -1434,14 +1335,16 @@ static void ExecScratchPick(omObjData *arg0) { if (temp_r29->unk02 < 0) { temp_r29->unk02 = 0; var_r28 = 0; - } else if (temp_r29->unk03 < 0) { + } + else if (temp_r29->unk03 < 0) { temp_r29->unk03 = 0; var_r28 = 0; } if (temp_r29->unk02 >= 4) { temp_r29->unk02 = 3; var_r28 = 0; - } else if (temp_r29->unk03 >= 3) { + } + else if (temp_r29->unk03 >= 3) { temp_r29->unk03 = 2; var_r28 = 0; } @@ -1455,7 +1358,8 @@ static void ExecScratchPick(omObjData *arg0) { HuSprPosSet(temp_r29->unk08, 0, var_f29, var_f28); } -static void InitScratchPick(void) { +static void InitScratchPick(void) +{ float temp_f31 = 91.0f; float temp_f30 = 106.0f; omObjData *temp_r30; @@ -1476,7 +1380,8 @@ static void InitScratchPick(void) { HuSprGrpDrawNoSet(var_r31->unk08, 0x40); } -static void InitTicketPrizes(void) { +static void InitTicketPrizes(void) +{ s32 temp_r31; s32 i; @@ -1492,7 +1397,8 @@ static void InitTicketPrizes(void) { } } -static void ExecTicketFocus(s32 arg0) { +static void ExecTicketFocus(s32 arg0) +{ float var_f31; float temp_f30; omObjData *var_r30; @@ -1516,7 +1422,8 @@ static void ExecTicketFocus(s32 arg0) { } } -static BOOL ScratchTicketCheckDone(AnimBmpData *arg0) { +static BOOL ScratchTicketCheckDone(AnimBmpData *arg0) +{ s32 var_r29; s32 var_r31; s32 var_r30; @@ -1532,12 +1439,14 @@ static BOOL ScratchTicketCheckDone(AnimBmpData *arg0) { } if (var_r29 >= arg0->sizeX * arg0->sizeY - 300) { return TRUE; - } else { + } + else { return FALSE; } } -static u16 TicketGetPixel(u16 arg0, u16 arg1, u16 arg2) { +static u16 TicketGetPixel(u16 arg0, u16 arg1, u16 arg2) +{ u16 var_r31; u16 var_r30; u16 var_r29; @@ -1550,7 +1459,8 @@ static u16 TicketGetPixel(u16 arg0, u16 arg1, u16 arg2) { return var_r29 + (var_r28 << 2) + ((var_r31 + var_r30 * (arg0 >> 2)) << 4); } -static s32 TicketUpdate(AnimBmpData *arg0, Vec *arg1, s32 arg2) { +static s32 TicketUpdate(AnimBmpData *arg0, Vec *arg1, s32 arg2) +{ Vec sp48; Vec sp3C; float temp_f25; @@ -1574,7 +1484,8 @@ static s32 TicketUpdate(AnimBmpData *arg0, Vec *arg1, s32 arg2) { } OSs8tof32(&temp_r19[0], &sp48.x); OSs8tof32(&temp_r19[1], &sp48.y); - } else { + } + else { sp34 = GWPlayer[GWSystem.player_curr].port; sp48.x = HuPadStkX[sp34]; sp48.y = HuPadStkY[sp34]; @@ -1643,12 +1554,13 @@ static s32 TicketUpdate(AnimBmpData *arg0, Vec *arg1, s32 arg2) { } } } - DCFlushRange(arg0->data, (u32) (arg0->sizeX * arg0->sizeY * 2) >> 3); + DCFlushRange(arg0->data, (u32)(arg0->sizeX * arg0->sizeY * 2) >> 3); handLastPos = *arg1; return 0; } -static s32 ExecCoinPrizeInlineFunc(void) { +static s32 ExecCoinPrizeInlineFunc(void) +{ s32 i; for (i = 0; i < 10; i++) { @@ -1659,7 +1571,8 @@ static s32 ExecCoinPrizeInlineFunc(void) { return -1; } -static void ExecCoinPrize(void) { +static void ExecCoinPrize(void) +{ Vec sp64[10]; Vec sp8; float sp3C[10]; @@ -1674,7 +1587,8 @@ static void ExecCoinPrize(void) { temp_r27 = GWSystem.player_curr; if (currPrize == 0) { var_r28 = 100; - } else { + } + else { var_r28 = 30; } memset(coinMdl, 0, sizeof(coinMdl)); @@ -1703,7 +1617,8 @@ static void ExecCoinPrize(void) { BoardModelScaleSet(coinMdl[var_r30], 0.5f, 0.5f, 0.5f); var_r28--; } - } else { + } + else { var_r26 = 0; for (i = 0; i < 10; i++) { if (coinF[i] != 0) { @@ -1725,7 +1640,8 @@ static void ExecCoinPrize(void) { BoardPlayerCoinsAdd(temp_r27, 1); HuAudFXPlay(7); omVibrate(temp_r27, 12, 6, 6); - } else { + } + else { BoardModelPosSetV(coinMdl[i], &sp64[i]); BoardModelRotSet(coinMdl[i], 0.0f, sp3C[i], 0.0f); sp3C[i] = BoardDAngleCalc(45.0f + sp3C[i]); @@ -1736,7 +1652,8 @@ static void ExecCoinPrize(void) { } } -static void ExecItemPrize(void) { +static void ExecItemPrize(void) +{ Vec sp20; Vec sp14; float temp_f29; @@ -1748,10 +1665,7 @@ static void ExecItemPrize(void) { s32 temp_r29; s16 *var_r31; s16 i; - s32 spC[2] = { - DATA_MAKE_NUM(DATADIR_BOARD, 111), - DATA_MAKE_NUM(DATADIR_BOARD, 112) - }; + s32 spC[2] = { DATA_MAKE_NUM(DATADIR_BOARD, 111), DATA_MAKE_NUM(DATADIR_BOARD, 112) }; s8 sp8[2] = { 2, 3 }; temp_r29 = GWSystem.player_curr; @@ -1779,7 +1693,8 @@ static void ExecItemPrize(void) { BoardPlayerPosGet(temp_r29, &sp20); if (BoardPlayerSizeGet(temp_r29) == 0) { sp20.y += 100.0f; - } else { + } + else { sp20.y += 30.000002f; } temp_f29 = (sp20.y - sp14.y) / 30.0f; @@ -1805,7 +1720,8 @@ static void ExecItemPrize(void) { omVibrate(GWSystem.player_curr, 12, 6, 6); } -static void KillCoin(void) { +static void KillCoin(void) +{ s32 i; for (i = 0; i < 10; i++) { @@ -1814,7 +1730,8 @@ static void KillCoin(void) { } } -static void ExecPrize(void) { +static void ExecPrize(void) +{ Vec sp14; Vec sp8; s16 var_r29; @@ -1865,7 +1782,8 @@ static void ExecPrize(void) { if (var_r24 < 3) { var_r29 = 7; var_r26 = 80; - } else { + } + else { var_r29 = 8; } break; @@ -1890,11 +1808,12 @@ static void ExecPrize(void) { HuPrcSleep(0x14); if (var_r31 == 0) { var_r27 = HuAudSStreamPlay(0xA); - } else { + } + else { var_r27 = HuAudSStreamPlay(9); } } - var_r23 = (s32) BoardPlayerRotYGet(temp_r30) + 180; + var_r23 = (s32)BoardPlayerRotYGet(temp_r30) + 180; BoardPlayerMotBlendSet(temp_r30, var_r23, 0xF); while (!BoardPlayerMotBlendCheck(temp_r30)) { HuPrcVSleep(); @@ -1912,7 +1831,8 @@ static void ExecPrize(void) { if (var_r24 == 3) { BoardWinCreate(2, lotteryMessBase + 6, BoardWinPortraitGet()); BoardWinWait(); - } else { + } + else { BoardAudSeqPause(1, 1, 1000); HuPrcSleep(0x30); var_r27 = HuAudSStreamPlay(2); @@ -1931,7 +1851,8 @@ static void ExecPrize(void) { case 2: if (var_r24 < 3) { ExecItemPrize(); - } else { + } + else { var_r31 = 3; } break; @@ -1948,7 +1869,8 @@ static void ExecPrize(void) { } if (var_r31 != 3) { var_r28 = lotteryMessBase + 3; - } else { + } + else { var_r28 = lotteryMessBase + 8; } BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[2], 0.0f, 10.0f, HU3D_MOTATTR_LOOP); @@ -1963,7 +1885,8 @@ static void ExecPrize(void) { } } -static void ExecLose(s32 arg0) { +static void ExecLose(s32 arg0) +{ s32 temp_r30; temp_r30 = GWPlayer[arg0].character; @@ -1975,7 +1898,8 @@ static void ExecLose(s32 arg0) { } } -static void CreateLotteryWin(s32 arg0) { +static void CreateLotteryWin(s32 arg0) +{ float sp8[2]; float temp_f30; float var_f31; @@ -1985,10 +1909,12 @@ static void CreateLotteryWin(s32 arg0) { if (arg0 == 0) { var_r31 = MAKE_MESSID(6, 80); var_f31 = 352.0f; - } else if (arg0 == 1) { + } + else if (arg0 == 1) { var_f31 = 352.0f; var_r31 = MAKE_MESSID(6, 81); - } else { + } + else { var_f31 = 364.0f; var_r31 = MAKE_MESSID(32, 22); } @@ -1999,14 +1925,16 @@ static void CreateLotteryWin(s32 arg0) { HuWinMesSet(lotteryInstWin, var_r31); } -static void KillLotteryWin(void) { +static void KillLotteryWin(void) +{ if (lotteryInstWin != -1) { HuWinKill(lotteryInstWin); lotteryInstWin = -1; } } -void BoardLotteryTutorialExec(void) { +void BoardLotteryTutorialExec(void) +{ Vec sp38; Vec sp2C; Vec sp20; diff --git a/src/game/board/pause.c b/src/game/board/pause.c index 3ca8058a..c019f6a4 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -1,5 +1,11 @@ #include "game/board/pause.h" #include "game/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/roll.h" +#include "game/board/star.h" +#include "game/board/ui.h" #include "game/data.h" #include "game/flag.h" #include "game/gamework_data.h" @@ -11,12 +17,6 @@ #include "game/sprite.h" #include "game/window.h" #include "game/wipe.h" -#include "game/board/main.h" -#include "game/board/model.h" -#include "game/board/player.h" -#include "game/board/roll.h" -#include "game/board/star.h" -#include "game/board/ui.h" typedef struct { struct { @@ -39,7 +39,6 @@ typedef struct { u32 unk0C; } ConfigWork; - static void PauseExit(void); static void PauseProcess(void); static void CreatePauseScreen(void); @@ -91,56 +90,25 @@ static s16 controlWin = -1; static s16 quitWin = -1; static s16 settingsWin = -1; -static s16 boxModelID[8] = { - -1, -1, -1, -1, -1, -1, -1, -1 -}; +static s16 boxModelID[8] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static float boxPosTbl[8][2] = { - { 120.0f, 120.0f }, - { 232.0f, 120.0f }, - { 344.0f, 120.0f }, - { 456.0f, 120.0f }, - { 120.0f, 232.0f }, - { 232.0f, 232.0f }, - { 344.0f, 232.0f }, - { 456.0f, 232.0f } -}; +static float boxPosTbl[8][2] = { { 120.0f, 120.0f }, { 232.0f, 120.0f }, { 344.0f, 120.0f }, { 456.0f, 120.0f }, { 120.0f, 232.0f }, + { 232.0f, 232.0f }, { 344.0f, 232.0f }, { 456.0f, 232.0f } }; -static float padConfigPosTbl[4][2] = { - { 170.0f, 160.0f }, - { 266.0f, 160.0f }, - { 362.0f, 160.0f }, - { 458.0f, 160.0f } -}; +static float padConfigPosTbl[4][2] = { { 170.0f, 160.0f }, { 266.0f, 160.0f }, { 362.0f, 160.0f }, { 458.0f, 160.0f } }; -static s32 boardLogoTbl[] = { - DATA_MAKE_NUM(DATADIR_BOARD, 87), - DATA_MAKE_NUM(DATADIR_BOARD, 88), - DATA_MAKE_NUM(DATADIR_BOARD, 89), - DATA_MAKE_NUM(DATADIR_BOARD, 90), - DATA_MAKE_NUM(DATADIR_BOARD, 91), - DATA_MAKE_NUM(DATADIR_BOARD, 92), - DATA_MAKE_NUM(DATADIR_BOARD, 87), - DATA_MAKE_NUM(DATADIR_BOARD, 93), - DATA_MAKE_NUM(DATADIR_BOARD, 94) -}; +static s32 boardLogoTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 87), DATA_MAKE_NUM(DATADIR_BOARD, 88), DATA_MAKE_NUM(DATADIR_BOARD, 89), + DATA_MAKE_NUM(DATADIR_BOARD, 90), DATA_MAKE_NUM(DATADIR_BOARD, 91), DATA_MAKE_NUM(DATADIR_BOARD, 92), DATA_MAKE_NUM(DATADIR_BOARD, 87), + DATA_MAKE_NUM(DATADIR_BOARD, 93), DATA_MAKE_NUM(DATADIR_BOARD, 94) }; -static float turnDigitPosTbl[] = { - 145.0f, 188.0f, 285.0f, 328.0f -}; +static float turnDigitPosTbl[] = { 145.0f, 188.0f, 285.0f, 328.0f }; -static s32 boxMdlTbl[] = { - DATA_MAKE_NUM(DATADIR_BPAUSE, 8), - DATA_MAKE_NUM(DATADIR_BPAUSE, 9), - DATA_MAKE_NUM(DATADIR_BPAUSE, 10), - DATA_MAKE_NUM(DATADIR_BPAUSE, 11), - DATA_MAKE_NUM(DATADIR_BPAUSE, 12), - DATA_MAKE_NUM(DATADIR_BPAUSE, 13), - DATA_MAKE_NUM(DATADIR_BPAUSE, 14), - DATA_MAKE_NUM(DATADIR_BPAUSE, 15) -}; +static s32 boxMdlTbl[] = { DATA_MAKE_NUM(DATADIR_BPAUSE, 8), DATA_MAKE_NUM(DATADIR_BPAUSE, 9), DATA_MAKE_NUM(DATADIR_BPAUSE, 10), + DATA_MAKE_NUM(DATADIR_BPAUSE, 11), DATA_MAKE_NUM(DATADIR_BPAUSE, 12), DATA_MAKE_NUM(DATADIR_BPAUSE, 13), DATA_MAKE_NUM(DATADIR_BPAUSE, 14), + DATA_MAKE_NUM(DATADIR_BPAUSE, 15) }; -void BoardPauseStart(void) { +void BoardPauseStart(void) +{ mainProcess = HuPrcChildCreate(PauseProcess, 0x2001, 0x3800, 0, boardMainProc); hostMdl = BoardStarHostMdlGet(); BoardModelMotionStart(hostMdl, 1, 0x40000001); @@ -151,7 +119,8 @@ void BoardPauseStart(void) { HuPrcDestructorSet2(mainProcess, PauseExit); } -static void PauseExit(void) { +static void PauseExit(void) +{ if (pauseQuitF == 0) { BoardRollWinDispSet(1); BoardRollDispSet(1); @@ -160,7 +129,8 @@ static void PauseExit(void) { BoardLast5GfxShowSet(1); HuAudFXPauseAll(0); HuAudSeqPauseAll(0); - } else { + } + else { BoardConfettiKill(); BoardAudSeqFadeOutAll(); HuAudAllStop(); @@ -173,7 +143,8 @@ static void PauseExit(void) { omSysPauseCtrl(0); if (GWMGExplainGet()) { _SetFlag(FLAG_ID_MAKE(0, 11)); - } else { + } + else { _ClearFlag(FLAG_ID_MAKE(0, 11)); } if (GWPartyGet() == 0) { @@ -182,7 +153,8 @@ static void PauseExit(void) { GWGameStat.story_pause.mg_list = GWMGListGet(); GWGameStat.story_pause.mess_speed = GWMessSpeedGet(); GWGameStat.story_pause.save_mode = GWSaveModeGet(); - } else { + } + else { GWGameStat.party_pause.explain_mg = GWMGExplainGet(); GWGameStat.party_pause.show_com_mg = GWMGShowComGet(); GWGameStat.party_pause.mg_list = GWMGListGet(); @@ -192,7 +164,8 @@ static void PauseExit(void) { mainProcess = NULL; } -static void PauseProcess(void) { +static void PauseProcess(void) +{ s32 temp_r31; pauseQuitF = 0; @@ -222,14 +195,16 @@ static void PauseProcess(void) { HuPrcSleep(20); WipeColorSet(0, 0, 0); BoardKill(); - } else { + } + else { BoardFilterFadeOut(30); HuPrcSleep(30); } HuPrcEnd(); } -void CreatePauseScreen(void) { +void CreatePauseScreen(void) +{ Mtx sp30; Vec sp24; Vec sp18; @@ -294,10 +269,12 @@ void CreatePauseScreen(void) { if (GWPartyGet() == 1) { if (GWTeamGet()) { HuSprBankSet(pauseSprGrp, 2, 2); - } else { + } + else { HuSprBankSet(pauseSprGrp, 2, 0); } - } else { + } + else { HuSprBankSet(pauseSprGrp, 2, 1); } for (i = 0; i < 4; i++) { @@ -334,7 +311,8 @@ void CreatePauseScreen(void) { sp24.x = 68.0f; if (GWBoardGet() == 3) { sp24.y = 464.0f; - } else { + } + else { sp24.y = 434.0f; } sp24.z = 1100.0f; @@ -436,7 +414,8 @@ void CreatePauseScreen(void) { SetBoxVisible(0); } -static void DeletePauseScreen(void) { +static void DeletePauseScreen(void) +{ ConfigWork *temp_r30; Mtx sp8; s32 i; @@ -461,7 +440,7 @@ static void DeletePauseScreen(void) { HuSprGrpKill(pauseCursorPos); pauseCursorPos = -1; } - PSMTXIdentity(sp8); + MTXIdentity(sp8); BoardModelLayerSet(hostMdl, hostOldLayer); BoardModelVisibilitySet(hostMdl, 1); BoardModelMtxSet(hostMdl, &sp8); @@ -471,7 +450,8 @@ static void DeletePauseScreen(void) { } } -static void SetBoxVisible(s32 arg0) { +static void SetBoxVisible(s32 arg0) +{ s32 i; for (i = 0; i < 8; i++) { @@ -479,7 +459,8 @@ static void SetBoxVisible(s32 arg0) { } } -static void PauseConfigObjFunc(omObjData *arg0) { +static void PauseConfigObjFunc(omObjData *arg0) +{ ConfigWork *temp_r31; s16 temp_r28; s32 var_r29; @@ -578,7 +559,8 @@ static void PauseConfigObjFunc(omObjData *arg0) { InitPauseQuit(arg0, temp_r31); break; } - } else { + } + else { cursorPos = ExecPauseConfig(arg0, temp_r31); if (temp_r28 != cursorPos) { arg0->trans.x = -40.0f + boxPosTbl[cursorPos][0]; @@ -590,7 +572,8 @@ static void PauseConfigObjFunc(omObjData *arg0) { } } -static void UpdatePauseText(s32 arg0) { +static void UpdatePauseText(s32 arg0) +{ s32 var_r28; s32 j; s32 i; @@ -603,7 +586,8 @@ static void UpdatePauseText(s32 arg0) { if (i == GWPlayer[j].port) { if (GWPlayer[j].com) { var_r28 = MAKE_MESSID(16, 30); - } else { + } + else { var_r28 = MAKE_MESSID(16, 29); } HuWinInsertMesSet(settingsWin, var_r28, i); @@ -615,14 +599,16 @@ static void UpdatePauseText(s32 arg0) { case 1: if (boxState[arg0] != 0) { HuWinMesSet(settingsWin, MAKE_MESSID(16, 33)); - } else { + } + else { HuWinMesSet(settingsWin, MAKE_MESSID(16, 34)); } break; case 2: if (boxState[arg0] != 0) { HuWinMesSet(settingsWin, MAKE_MESSID(16, 35)); - } else { + } + else { HuWinMesSet(settingsWin, MAKE_MESSID(16, 36)); } break; @@ -642,7 +628,8 @@ static void UpdatePauseText(s32 arg0) { case 4: if (boxState[arg0] != 0) { HuWinMesSet(settingsWin, MAKE_MESSID(16, 40)); - } else { + } + else { HuWinMesSet(settingsWin, MAKE_MESSID(16, 41)); } break; @@ -678,7 +665,8 @@ static void UpdatePauseText(s32 arg0) { } } -static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) { +static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) +{ float var_f31; switch (arg1->unk01) { @@ -696,7 +684,8 @@ static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) { if (quitWin != -1 && HuWinStatGet(quitWin) == 3) { if (HuWinChoiceNowGet(quitWin) != 0) { HuWinMesSet(settingsWin, MAKE_MESSID(16, 51)); - } else { + } + else { HuWinMesSet(settingsWin, MAKE_MESSID(16, 50)); } } @@ -725,7 +714,8 @@ static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) { } } -static void PauseQuitProcess(void) { +static void PauseQuitProcess(void) +{ WindowData *temp_r31; float sp10[2]; float sp8[2]; @@ -748,7 +738,8 @@ static void PauseQuitProcess(void) { HuPrcEnd(); } -static void DeletePauseQuit(void) { +static void DeletePauseQuit(void) +{ if (quitWin != -1) { HuWinExCleanup(quitWin); quitWin = -1; @@ -757,7 +748,8 @@ static void DeletePauseQuit(void) { quitProcess = NULL; } -static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) { +static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) +{ switch (arg1->unk01) { case 0: CreatePadConfig(arg0, arg1); @@ -777,12 +769,14 @@ static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) { } if (arg1->unk00_field1 != 0) { return 0; - } else { + } + else { return 1; } } -static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) { +static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) +{ Vec sp14; Vec sp8; s32 i; @@ -817,7 +811,8 @@ static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) { arg1->unk01 = 1; } -static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) { +static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) +{ Vec sp8; s32 i; @@ -834,7 +829,8 @@ static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) { arg1->unk04 = 0; arg1->unk05 = 0; arg1->unk01 = 0; - } else { + } + else { arg1->unk01 = 2; } return; @@ -848,7 +844,8 @@ static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) { arg1->unk07--; } -static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { +static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) +{ float sp8[4]; s32 temp_r29; u32 temp_r30; @@ -861,16 +858,19 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { if (GWPlayer[temp_r29].com) { arg1->unk00_field3 = GWPlayer[temp_r29].diff + 1; arg1->unk05 = GWPlayer[temp_r29].diff + 1; - } else { + } + else { arg1->unk00_field3 = 0; arg1->unk05 = 0; } HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 1); HuAudFXPlay(2); - } else if (temp_r30 == 0x200) { + } + else if (temp_r30 == 0x200) { HuAudFXPlay(3); arg1->unk01 = 4; - } else { + } + else { if (temp_r30 == 1) { arg1->unk04--; } @@ -879,9 +879,11 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { } if (arg1->unk04 < 0) { arg1->unk04 = 0; - } else if (arg1->unk04 >= 4) { + } + else if (arg1->unk04 >= 4) { arg1->unk04 = 3; - } else if (temp_r30 == 1 || temp_r30 == 2) { + } + else if (temp_r30 == 1 || temp_r30 == 2) { HuAudFXPlay(0); arg1->unk06 = 4; } @@ -891,7 +893,8 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { } } -static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { +static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) +{ s32 temp_r29; s32 var_r28; s32 var_r26; @@ -901,13 +904,15 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { var_r30 = 0; if (HuPadStkX[pausePad] < -20) { var_r30 |= 1; - } else if (HuPadStkX[pausePad] > 20) { + } + else if (HuPadStkX[pausePad] > 20) { var_r30 |= 2; } temp_r29 = CheckPort(arg1->unk04); if (GWGameStat.veryHardUnlock != 0) { var_r27 = 4; - } else { + } + else { var_r27 = 3; } HuWinMesSet(settingsWin, MAKE_MESSID(16, 32)); @@ -916,13 +921,15 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { if (arg1->unk09++ < 10) { return; } - } else { + } + else { if (arg1->unk09++ < 2) { return; } arg1->unk0C = var_r30; } - } else { + } + else { arg1->unk0C = 0; } arg1->unk09 = 0; @@ -936,7 +943,8 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { if (var_r28 != 0) { HuAudFXPlay(0); arg1->unk06 = 4; - } else { + } + else { if (HuPadBtnDown[pausePad] == 0x100) { arg1->unk01 = 2; if (arg1->unk05 != 0) { @@ -944,7 +952,8 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { GWPlayerCfg[temp_r29].iscom = 1; GWPlayer[temp_r29].diff = arg1->unk05 - 1; GWPlayerCfg[temp_r29].diff = arg1->unk05 - 1; - } else { + } + else { GWPlayer[temp_r29].com = 0; GWPlayerCfg[temp_r29].iscom = 0; } @@ -967,18 +976,21 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { } if (arg1->unk05 > var_r27) { arg1->unk05 = 0; - } else if (arg1->unk05 < 0) { + } + else if (arg1->unk05 < 0) { arg1->unk05 = var_r27; } if (arg1->unk05 != 0) { var_r26 = arg1->unk05 + 3; - } else { + } + else { var_r26 = arg1->unk04; } HuSprBankSet(padConfigSprGrp, arg1->unk04 + 4, var_r26); } -static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) { +static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) +{ Vec sp14; Vec sp8; @@ -1003,7 +1015,8 @@ static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) { arg1->unk00_field2 = 1; } -static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) { +static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) +{ float var_f31; float var_f30; float var_f29; @@ -1031,21 +1044,26 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) { } if (arg1->unk04 < 0) { arg1->unk04 = 0; - } else if (arg1->unk04 > 1) { + } + else if (arg1->unk04 > 1) { arg1->unk04 = 1; - } else if (temp_r28 == 1 || temp_r28 == 2) { + } + else if (temp_r28 == 1 || temp_r28 == 2) { HuAudFXPlay(0); } if (temp_r28 == 0x100) { arg1->unk01 = 3; HuAudFXPlay(2); - } else if (temp_r28 == 0x200) { + } + else if (temp_r28 == 0x200) { arg1->unk01 = 4; HuAudFXPlay(3); - } else if (temp_r27 != arg1->unk04) { + } + else if (temp_r27 != arg1->unk04) { if (arg1->unk04 != 0) { var_f30 = 0.0f; - } else { + } + else { var_f30 = -90.0f; } var_f29 = arg0->rot.x; @@ -1058,7 +1076,8 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) { if (arg1->unk07 != 0) { arg0->rot.x += arg0->rot.y; arg1->unk07--; - } else { + } + else { arg1->unk01 = 1; } break; @@ -1091,7 +1110,8 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) { return 0; } -static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { +static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) +{ float var_f31; float var_f30; float var_f29; @@ -1102,7 +1122,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { if (arg2 == 3 && GWGameStat.customPackEnable == 0) { var_r27 = 1; - } else { + } + else { var_r27 = 2; } switch (arg1->unk01) { @@ -1125,18 +1146,22 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { } if (arg1->unk04 < 0) { arg1->unk04 = 0; - } else if (arg1->unk04 > var_r27) { + } + else if (arg1->unk04 > var_r27) { arg1->unk04 = var_r27; - } else if (temp_r28 == 1 || temp_r28 == 2) { + } + else if (temp_r28 == 1 || temp_r28 == 2) { HuAudFXPlay(0); } if (temp_r28 == 0x100) { arg1->unk01 = 3; HuAudFXPlay(2); - } else if (temp_r28 == 0x200) { + } + else if (temp_r28 == 0x200) { arg1->unk01 = 4; HuAudFXPlay(3); - } else if (temp_r26 != arg1->unk04) { + } + else if (temp_r26 != arg1->unk04) { switch (arg1->unk04) { case 0: var_f30 = 90.0f; @@ -1158,7 +1183,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { if (arg1->unk07 != 0) { arg0->rot.x += arg0->rot.y; arg1->unk07--; - } else { + } + else { arg1->unk01 = 1; } break; @@ -1191,7 +1217,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { return 0; } -static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) { +static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) +{ s32 var_r27; s32 var_r26; s32 var_r29; @@ -1218,17 +1245,21 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) { arg1->unk03 += var_r28; if (arg1->unk03 < 0) { arg1->unk03 = 0; - } else if (arg1->unk03 >= 2) { + } + else if (arg1->unk03 >= 2) { arg1->unk03 = 1; - } else if (var_r28 != 0) { + } + else if (var_r28 != 0) { HuAudFXPlay(0); arg1->unk06 = 4; } if (arg1->unk02 < 0) { arg1->unk02 = 0; - } else if (arg1->unk02 >= 4) { + } + else if (arg1->unk02 >= 4) { arg1->unk02 = 3; - } else if (var_r29 != 0) { + } + else if (var_r29 != 0) { HuAudFXPlay(0); arg1->unk06 = 4; } @@ -1251,7 +1282,8 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) { } if (var_r26 != 0) { HuAudFXPlay(4); - } else if (var_r27 != 0) { + } + else if (var_r27 != 0) { HuAudFXPlay(2); arg1->unk00_field1 = 1; } @@ -1263,7 +1295,8 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) { return arg1->unk02 + arg1->unk03 * 4; } -static void CreatePauseControlWin(void) { +static void CreatePauseControlWin(void) +{ float sp8[2]; float var_f31; float var_f30; @@ -1280,7 +1313,8 @@ static void CreatePauseControlWin(void) { HuWinDispOff(settingsControlWin); if (GWBoardGet() == 7 || GWBoardGet() == 8) { var_r31 = MAKE_MESSID(16, 73); - } else { + } + else { var_r31 = MAKE_MESSID(16, 52); } HuWinMesMaxSizeGet(1, sp8, var_r31); @@ -1304,7 +1338,8 @@ static void CreatePauseControlWin(void) { sp8[1] = 128.0f; } -static void DeletePauseControlWin(void) { +static void DeletePauseControlWin(void) +{ if (settingsControlWin != -1) { HuWinKill(settingsControlWin); settingsControlWin = -1; @@ -1319,7 +1354,8 @@ static void DeletePauseControlWin(void) { } } -static s32 WaitPauseInput(void) { +static s32 WaitPauseInput(void) +{ s32 var_r28; s32 var_r31; u32 temp_r30; @@ -1327,7 +1363,8 @@ static s32 WaitPauseInput(void) { mainScreenF = 1; if (GWBoardGet() == 7 || GWBoardGet() == 8) { var_r28 = 1; - } else { + } + else { var_r28 = 0; } HuWinDispOn(controlWin); @@ -1344,13 +1381,15 @@ static s32 WaitPauseInput(void) { var_r31 = 0; HuAudFXPlay(0x1C); break; - } else if (var_r28 == 0) { + } + else if (var_r28 == 0) { if (temp_r30 == 0x100) { var_r31 = 1; HuAudFXPlay(1); break; } - } else if (temp_r30 == 0x10) { + } + else if (temp_r30 == 0x10) { pauseQuitF = 1; var_r31 = 2; mgQuitExtraF = 1; @@ -1368,7 +1407,8 @@ static s32 WaitPauseInput(void) { return var_r31; } -static void ShowPauseConfig(void) { +static void ShowPauseConfig(void) +{ float var_f31; float var_f30; @@ -1383,7 +1423,8 @@ static void ShowPauseConfig(void) { var_f30 = boxPosTbl[0][1]; HuSprPosSet(pauseCursorPos, 1, var_f31, var_f30); HuSprAttrReset(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF); - } else { + } + else { HuSprAttrSet(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF); } while (configObj) { @@ -1391,7 +1432,8 @@ static void ShowPauseConfig(void) { } } -static void CreatePadConfigSprite(void) { +static void CreatePadConfigSprite(void) +{ float temp_f31; float temp_f30; s32 var_r29; @@ -1415,7 +1457,8 @@ static void CreatePadConfigSprite(void) { HuSprBankSet(padConfigSprGrp, i, temp_r28); if (temp_r26 != 0) { var_r29 = temp_r27 + 4; - } else { + } + else { var_r29 = i; } HuSprBankSet(padConfigSprGrp, i + 4, var_r29); @@ -1427,7 +1470,8 @@ static void CreatePadConfigSprite(void) { HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f); } -static void ShowPadConfigSprite(s32 arg0) { +static void ShowPadConfigSprite(s32 arg0) +{ s32 temp_r31; s32 i; @@ -1437,7 +1481,8 @@ static void ShowPadConfigSprite(s32 arg0) { HuSprAttrReset(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF); HuSprAttrReset(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF); HuSprAttrReset(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF); - } else { + } + else { HuSprAttrSet(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF); HuSprAttrSet(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF); HuSprAttrSet(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF); @@ -1445,12 +1490,14 @@ static void ShowPadConfigSprite(s32 arg0) { } if (arg0 != 0) { HuSprAttrReset(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF); - } else { + } + else { HuSprAttrSet(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF); } } -static void PauseCreateNumber(s32 arg0, s8 arg1) { +static void PauseCreateNumber(s32 arg0, s8 arg1) +{ s32 var_r31; s32 temp_r30; s32 temp_r29; @@ -1459,22 +1506,26 @@ static void PauseCreateNumber(s32 arg0, s8 arg1) { temp_r30 = arg1 / 10; if (arg0 == 0) { var_r31 = 3; - } else { + } + else { var_r31 = 5; } if (temp_r30 != 0) { HuSprBankSet(pauseSprGrp, var_r31, temp_r30); - } else { + } + else { HuSprAttrSet(pauseSprGrp, var_r31, 4); } HuSprBankSet(pauseSprGrp, var_r31 + 1, temp_r29); } -BOOL BoardPauseActiveCheck(void) { +BOOL BoardPauseActiveCheck(void) +{ return (mainProcess != NULL) ? TRUE : FALSE; } -BOOL BoardPauseReqCheck(void) { +BOOL BoardPauseReqCheck(void) +{ s32 temp_r30; s32 i; @@ -1495,7 +1546,8 @@ BOOL BoardPauseReqCheck(void) { return FALSE; } -static s32 CheckPort(s32 arg0) { +static s32 CheckPort(s32 arg0) +{ s32 i; for (i = 0; i < 4; i++) { @@ -1506,7 +1558,8 @@ static s32 CheckPort(s32 arg0) { return i; } -static void RotateBox(float arg0, float arg1, Mtx arg2) { +static void RotateBox(float arg0, float arg1, Mtx arg2) +{ Vec sp14; Mtx spB0; Mtx sp80; @@ -1514,11 +1567,11 @@ static void RotateBox(float arg0, float arg1, Mtx arg2) { Mtx sp20; BoardCameraRotGet(&sp14); - PSMTXRotRad(spB0, 'x', MTXDegToRad(sp14.x)); - PSMTXRotRad(sp80, 'y', MTXDegToRad(sp14.y)); - PSMTXRotRad(sp50, 'x', MTXDegToRad(arg0)); - PSMTXRotRad(sp20, 'y', MTXDegToRad(arg1)); - PSMTXConcat(sp80, spB0, sp80); - PSMTXConcat(sp50, sp20, sp20); - PSMTXConcat(sp80, sp20, arg2); + MTXRotRad(spB0, 'x', MTXDegToRad(sp14.x)); + MTXRotRad(sp80, 'y', MTXDegToRad(sp14.y)); + MTXRotRad(sp50, 'x', MTXDegToRad(arg0)); + MTXRotRad(sp20, 'y', MTXDegToRad(arg1)); + MTXConcat(sp80, spB0, sp80); + MTXConcat(sp50, sp20, sp20); + MTXConcat(sp80, sp20, arg2); } diff --git a/src/game/board/shop.c b/src/game/board/shop.c index 47b332c3..0f5d714d 100755 --- a/src/game/board/shop.c +++ b/src/game/board/shop.c @@ -1,13 +1,5 @@ #include "game/board/shop.h" #include "game/audio.h" -#include "game/gamework.h" -#include "game/gamework_data.h" -#include "game/object.h" -#include "game/objsub.h" -#include "game/disp.h" -#include "game/pad.h" -#include "game/process.h" -#include "game/sprite.h" #include "game/board/audio.h" #include "game/board/com.h" #include "game/board/com_path.h" @@ -20,6 +12,14 @@ #include "game/board/ui.h" #include "game/board/view.h" #include "game/board/window.h" +#include "game/disp.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" #include "dolphin.h" #include "ext_math.h" @@ -103,39 +103,20 @@ static Process *shopProc; static s16 itemMdl = -1; static s8 itemChoice = -1; -static BoardModelParam shopMdlParam[1] = { - { 0x00070094, { 0, 1, 0, 0, 0 }, -1 } -}; +static BoardModelParam shopMdlParam[1] = { { 0x00070094, { 0, 1, 0, 0, 0 }, -1 } }; static s16 hostMdl = -1; static s16 shopMot[3] = { -1, -1, -1 }; static s8 itemCurChoice = -1; -static s8 defaultItemTbl[5] = { - 0x05, 0x07, 0x02, 0x03, 0x00 -}; +static s8 defaultItemTbl[5] = { 0x05, 0x07, 0x02, 0x03, 0x00 }; -static s32 hostMessTbl[] = { - MAKE_MESSID(0x0F, 0x04), - MAKE_MESSID(0x0F, 0x07), - MAKE_MESSID(0x0F, 0x0A), - MAKE_MESSID(0x0F, 0x0D), - MAKE_MESSID(0x0F, 0x10), - MAKE_MESSID(0x0F, 0x13), - MAKE_MESSID(0x0F, 0x04), - MAKE_MESSID(0x0F, 0x24), - MAKE_MESSID(0x0F, 0x24) -}; +static s32 hostMessTbl[] = { MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x07), MAKE_MESSID(0x0F, 0x0A), MAKE_MESSID(0x0F, 0x0D), + MAKE_MESSID(0x0F, 0x10), MAKE_MESSID(0x0F, 0x13), MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x24), MAKE_MESSID(0x0F, 0x24) }; -static s8 itemPriceTbl[] = { - 5, 5, 15, 15, - 10, 10, 15, 15, - 15, 15, 0, 25, - 30, 30, 0, 0 -}; +static s8 itemPriceTbl[] = { 5, 5, 15, 15, 10, 10, 15, 15, 15, 15, 0, 25, 30, 30, 0, 0 }; -static s32 shopMotTbl[9][3] = { - { DATA_MAKE_NUM(DATADIR_BGUEST, 0x01), DATA_MAKE_NUM(DATADIR_BGUEST, 0x03), DATA_MAKE_NUM(DATADIR_BGUEST, 0x04) }, +static s32 shopMotTbl[9][3] = { { DATA_MAKE_NUM(DATADIR_BGUEST, 0x01), DATA_MAKE_NUM(DATADIR_BGUEST, 0x03), DATA_MAKE_NUM(DATADIR_BGUEST, 0x04) }, { DATA_MAKE_NUM(DATADIR_BGUEST, 0x09), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0B), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0C) }, { DATA_MAKE_NUM(DATADIR_BGUEST, 0x0E), DATA_MAKE_NUM(DATADIR_BGUEST, 0x10), DATA_MAKE_NUM(DATADIR_BGUEST, 0x11) }, { DATA_MAKE_NUM(DATADIR_BGUEST, 0x18), DATA_MAKE_NUM(DATADIR_BGUEST, 0x1A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x1B) }, @@ -143,27 +124,26 @@ static s32 shopMotTbl[9][3] = { { DATA_MAKE_NUM(DATADIR_BGUEST, 0x22), DATA_MAKE_NUM(DATADIR_BGUEST, 0x24), DATA_MAKE_NUM(DATADIR_BGUEST, 0x25) }, { DATA_MAKE_NUM(DATADIR_BGUEST, 0x09), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0B), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0C) }, { DATA_MAKE_NUM(DATADIR_BGUEST, 0x2A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2C), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2D) }, - { DATA_MAKE_NUM(DATADIR_BGUEST, 0x2A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2C), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2D) } -}; + { DATA_MAKE_NUM(DATADIR_BGUEST, 0x2A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2C), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2D) } }; -void BoardShopHostSet(s16 arg0) { +void BoardShopHostSet(s16 arg0) +{ hostMdl = arg0; } -s16 BoardShopHostGet(void) { +s16 BoardShopHostGet(void) +{ return hostMdl; } -void BoardShopInit(void) { +void BoardShopInit(void) +{ BoardModelParam *var_r29; Vec sp1C; Vec sp10; s32 j; s32 i; - s32 sp8[2] = { - 0x00080000, - 0x00100000 - }; + s32 sp8[2] = { 0x00080000, 0x00100000 }; for (i = 0; i < 2; i++) { BoardSpaceLinkTransformGet(sp8[i], &sp1C, &sp10, 0); @@ -176,7 +156,8 @@ void BoardShopInit(void) { BoardModelVisibilitySet(hostMdl, 0); } -void BoardShopKill(void) { +void BoardShopKill(void) +{ s32 i; s32 j; @@ -190,7 +171,8 @@ void BoardShopKill(void) { } } -void BoardShopExec(s32 player, s32 space) { +void BoardShopExec(s32 player, s32 space) +{ if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { return; } @@ -204,7 +186,8 @@ void BoardShopExec(s32 player, s32 space) { BoardRollDispSet(1); } -static void ExecShop(void) { +static void ExecShop(void) +{ Vec sp38; Vec sp2C; Vec sp20; @@ -229,7 +212,8 @@ static void ExecShop(void) { temp_r28 = GWPlayer[shopPlayer].space_curr; if (BoardSpaceFlagGet(0, temp_r28) & 0x80000) { shopMdlPtr = shopMdlIdx[0]; - } else { + } + else { shopMdlPtr = shopMdlIdx[1]; } BoardPlayerIdleSet(shopPlayer); @@ -315,7 +299,8 @@ static void ExecShop(void) { if (var_r29 > BoardPlayerCoinsGet(shopPlayer)) { BoardWinChoiceDisable(i); choiceEnableTbl[i] = 0; - } else { + } + else { choiceEnableTbl[i] = 1; } } @@ -332,7 +317,8 @@ static void ExecShop(void) { HuPrcSleep(0xF); if (itemCurChoice == -1 || itemCurChoice == 5 || itemCurChoice == 0x7F) { PauseShopWin(); - } else { + } + else { PauseShopWin(); while (!BoardStatusStopCheck(shopPlayer)) { HuPrcVSleep(); @@ -346,7 +332,8 @@ static void ExecShop(void) { temp_r24 = itemPriceTbl[activeItemTbl[itemCurChoice]]; if (temp_r24 >= 20) { var_r23 = 3; - } else { + } + else { var_r23 = 6; } var_f30 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(shopPlayer)); @@ -391,7 +378,8 @@ static void ExecShop(void) { HuPrcEnd(); } -static void DestroyShop(void) { +static void DestroyShop(void) +{ s16 temp_r30; s32 i; @@ -413,7 +401,8 @@ static void DestroyShop(void) { shopProc = NULL; } -static void PopupShop(void) { +static void PopupShop(void) +{ s32 i; for (i = 0; i < 2; i++) { @@ -443,7 +432,8 @@ static void PopupShop(void) { } } -static void CloseShop(void) { +static void CloseShop(void) +{ BoardModelMotionStart(shopMdlPtr[0], 0, 0x40000004); while (BoardModelMotionTimeGet(shopMdlPtr[0]) > 28.0f) { HuPrcVSleep(); @@ -458,7 +448,8 @@ static void CloseShop(void) { BoardModelVisibilitySet(BoardShopHostGet(), 0); } -static void CreateShopWin(void) { +static void CreateShopWin(void) +{ Vec sp8; omObjData *var_r31; ShopWinWork *var_r30; @@ -473,12 +464,12 @@ static void CreateShopWin(void) { var_r30->unk01 = 0xC; var_r30->unk04 = 0; shopWinObj = var_r31; - var_r30->unk06 = HuWinCreate(36.0f, HU_DISP_HEIGHT-136, 0x1F8, 0x60, 0); + var_r30->unk06 = HuWinCreate(36.0f, HU_DISP_HEIGHT - 136, 0x1F8, 0x60, 0); HuWinMesSpeedSet(var_r30->unk06, 0); HuWinDrawNoSet(var_r30->unk06, 0x40); HuWinExAnimIn(var_r30->unk06); sp8.x = 84.0f; - sp8.y = HU_DISP_HEIGHT-88; + sp8.y = HU_DISP_HEIGHT - 88; sp8.z = 400.0f; var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 0.25f; Hu3D2Dto3D(&sp8, 1, &sp8); @@ -488,7 +479,8 @@ static void CreateShopWin(void) { var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 1.0f; } -static void UpdateShopWin(omObjData *arg0) { +static void UpdateShopWin(omObjData *arg0) +{ Vec spC; float var_f29; float var_f28; @@ -517,7 +509,8 @@ static void UpdateShopWin(omObjData *arg0) { if (temp_r28->unk00_field0 == 0) { BoardModelVisibilitySet(itemMdl, 0); } - } else { + } + else { HuWinDispOn(temp_r28->unk06); SetShopWinItem(temp_r28, arg0); BoardModelVisibilitySet(itemMdl, 1); @@ -543,9 +536,9 @@ static void UpdateShopWin(omObjData *arg0) { } arg0->rot.y = BoardDAngleCalc(arg0->rot.y + 2.0f); BoardCameraRotGet(&spC); - PSMTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y)); - PSMTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f)); - PSMTXConcat(sp18, sp48, sp48); + MTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y)); + MTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f)); + MTXConcat(sp18, sp48, sp48); BoardModelMtxSet(itemMdl, &sp48); BoardModelRotSet(itemMdl, 0.0f, 0.0f, 0.0f); BoardModelPosSet(itemMdl, arg0->trans.x, arg0->trans.y + var_f29, arg0->trans.z); @@ -554,7 +547,8 @@ static void UpdateShopWin(omObjData *arg0) { } } -static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) { +static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) +{ Vec spC; s32 var_r26; s8 temp_r28; @@ -581,14 +575,16 @@ static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) { } } -static void PauseShopWin(void) { +static void PauseShopWin(void) +{ if (shopWinObj) { OM_GET_WORK_PTR(shopWinObj, ShopWinWork)->unk00_field0 = 1; shopWinObj = NULL; } } -void StartItemGive(void) { +void StartItemGive(void) +{ Vec sp14; Vec sp8; omObjData *temp_r30; @@ -605,7 +601,7 @@ void StartItemGive(void) { BoardModelMotionStart(itemMdl, 0, 0); BoardModelMotionSpeedSet(itemMdl, 0.0f); BoardModelPosGet(itemMdl, &sp14); - PSMTXIdentity(sp20); + MTXIdentity(sp20); BoardModelMtxSet(itemMdl, &sp20); OSs16tof32(&angleVal, &temp_r30->scale.z); temp_r30->scale.z = -temp_r30->scale.z / 40.0f; @@ -621,7 +617,8 @@ void StartItemGive(void) { itemGiveObj = temp_r30; } -static void ExecItemGive(omObjData *arg0) { +static void ExecItemGive(omObjData *arg0) +{ ItemGiveWork *temp_r29; float var_f30; @@ -653,7 +650,8 @@ static void ExecItemGive(omObjData *arg0) { BoardModelRotYSet(itemMdl, var_f30); } -static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { +static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) +{ Vec sp1C; Vec sp10; float temp_f27; @@ -665,13 +663,15 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { arg1->unk00_field1 = 2; BoardMakeRandomItem(); BoardItemStart(GWSystem.player_curr, 0xD); - } else { + } + else { arg1->unk00_field1 = 1; arg1->unk04 = 0xF; BoardPlayerPosGet(shopPlayer, &sp1C); if (BoardPlayerSizeGet(shopPlayer) == 1) { arg0->rot.x = (sp1C.y + 30.0f - arg0->trans.y) / 22.5f; - } else { + } + else { arg0->rot.x = (sp1C.y + 70.0f - arg0->trans.y) / 22.5f; } arg0->trans.y = arg0->rot.y; @@ -692,7 +692,8 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { BoardCameraDirGet(&sp10); var_f26 = BoardDAngleCalc(atan2d(-sp10.x, -sp10.z)); OSf32tos16(&var_f26, &angleVal); - } else { + } + else { arg0->scale.x += arg0->scale.y; arg0->trans.x += arg0->rot.x; arg0->trans.z += arg0->rot.z; @@ -706,7 +707,8 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { arg1->unk02++; } -static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) { +static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) +{ float var_f30; if (arg1->unk02 == 0) { @@ -733,10 +735,12 @@ static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) { arg1->unk02 += 4; } -static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) { +static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) +{ if (arg1->unk02 > 20) { BoardModelVisibilitySet(itemMdl, 0); - } else { + } + else { arg1->unk02++; } if (BoardItemDoneCheck()) { @@ -744,44 +748,25 @@ static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) { } } -static s8 itemPrioTbl[2][5][14] = { - { - { 0x14, 0x14, 0x0F, 0x0F, 0x05, 0x07, 0x05, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00 }, - { 0x0F, 0x0F, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00 }, - { 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 }, - { 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 }, - { 0x07, 0x07, 0x0D, 0x0A, 0x0D, 0x07, 0x0A, 0x0A, 0x07, 0x08, 0x00, 0x08, 0x00, 0x00 } - }, - { - { 0x0F, 0x0F, 0x12, 0x0F, 0x05, 0x05, 0x05, 0x05, 0x00, 0x05, 0x00, 0x02, 0x05, 0x05 }, +static s8 itemPrioTbl[2][5][14] = { { { 0x14, 0x14, 0x0F, 0x0F, 0x05, 0x07, 0x05, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00 }, + { 0x0F, 0x0F, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00 }, + { 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 }, + { 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 }, + { 0x07, 0x07, 0x0D, 0x0A, 0x0D, 0x07, 0x0A, 0x0A, 0x07, 0x08, 0x00, 0x08, 0x00, 0x00 } }, + { { 0x0F, 0x0F, 0x12, 0x0F, 0x05, 0x05, 0x05, 0x05, 0x00, 0x05, 0x00, 0x02, 0x05, 0x05 }, { 0x0F, 0x0F, 0x0D, 0x0A, 0x07, 0x0A, 0x07, 0x03, 0x00, 0x07, 0x00, 0x00, 0x05, 0x08 }, { 0x05, 0x04, 0x0D, 0x0C, 0x0A, 0x05, 0x0A, 0x08, 0x05, 0x05, 0x00, 0x05, 0x08, 0x0A }, { 0x07, 0x04, 0x0D, 0x0C, 0x08, 0x08, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x05, 0x08, 0x08 }, - { 0x03, 0x02, 0x0D, 0x0A, 0x0D, 0x03, 0x08, 0x08, 0x07, 0x07, 0x00, 0x08, 0x08, 0x0A } - } -}; + { 0x03, 0x02, 0x0D, 0x0A, 0x0D, 0x03, 0x08, 0x08, 0x07, 0x07, 0x00, 0x08, 0x08, 0x0A } } }; -static s8 rankItemGroupTbl[2][4][3] = { - { - { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, - { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } - }, - { - { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, - { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } - } -}; +static s8 rankItemGroupTbl[2][4][3] = { { { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } }, + { { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } } }; -static float cursorPosTbl[6][2] = { - { 190.0f, 182.0f }, - { 190.0f, 208.0f }, - { 190.0f, 234.0f }, - { 190.0f, 260.0f }, - { 190.0f, 286.0f }, - { 190.0f, 312.0f } -}; +static float cursorPosTbl[6][2] + = { { 190.0f, 182.0f }, { 190.0f, 208.0f }, { 190.0f, 234.0f }, { 190.0f, 260.0f }, { 190.0f, 286.0f }, { 190.0f, 312.0f } }; -static void GetShopItems(s32 arg0) { +static void GetShopItems(s32 arg0) +{ s32 temp_r25; s32 temp_r20; s32 temp_r19; @@ -795,10 +780,11 @@ static void GetShopItems(s32 arg0) { s32 var_r29; s32 var_r30; - temp_r22 = 3.0f * ((float) GWSystem.turn / GWSystem.max_turn); + temp_r22 = 3.0f * ((float)GWSystem.turn / GWSystem.max_turn); if (BoardPlayerCoinsGet(arg0) < 30) { var_r27 = 0; - } else { + } + else { var_r27 = 1; } temp_r19 = rankItemGroupTbl[var_r27][GWPlayer[arg0].rank][temp_r22]; @@ -839,7 +825,8 @@ static void GetShopItems(s32 arg0) { } } -static void GetDefaultShopItems(s32 arg0) { +static void GetDefaultShopItems(s32 arg0) +{ s32 temp_r29; s32 var_r31; s32 var_r30; @@ -847,9 +834,11 @@ static void GetDefaultShopItems(s32 arg0) { temp_r29 = BoardRandMod(100); if (temp_r29 > 90) { var_r30 = 3; - } else if (temp_r29 > 40) { + } + else if (temp_r29 > 40) { var_r30 = BoardRandMod(2) + 1; - } else { + } + else { var_r30 = 0; } for (var_r31 = 0; var_r31 < 5; var_r31++) { @@ -857,7 +846,8 @@ static void GetDefaultShopItems(s32 arg0) { } } -static void SortShopItems(void) { +static void SortShopItems(void) +{ s32 sp8[5]; s32 var_r29; s32 i; @@ -880,7 +870,8 @@ static void SortShopItems(void) { } } -static void DecideComEnter(s32 arg0) { +static void DecideComEnter(s32 arg0) +{ s32 temp_r27; s32 temp_r30; s32 temp_r29; @@ -910,14 +901,13 @@ static void DecideComEnter(s32 arg0) { BoardComKeySetRight(); return; } - } else { + } + else { temp_r27 = GWPlayer[arg0].space_curr; temp_r30 = BoardComPathShortcutLenGet(temp_r27, 8, 0); temp_r29 = BoardComPathShortcutLenGet(temp_r27, 8, 1); - if ((temp_r30 != 0 || temp_r29 != 0) - && (BoardPlayerCoinsGet(arg0) >= 17 || (temp_r29 >= temp_r26 && temp_r30 >= temp_r26)) - && BoardPlayerCoinsGet(arg0) < 40 - && ((temp_r30 < 20 && temp_r30 > 0) || (temp_r29 < 10 && temp_r29 > 0)) + if ((temp_r30 != 0 || temp_r29 != 0) && (BoardPlayerCoinsGet(arg0) >= 17 || (temp_r29 >= temp_r26 && temp_r30 >= temp_r26)) + && BoardPlayerCoinsGet(arg0) < 40 && ((temp_r30 < 20 && temp_r30 > 0) || (temp_r29 < 10 && temp_r29 > 0)) && BoardRandMod(100) > var_r28) { BoardComKeySetRight(); return; @@ -926,18 +916,21 @@ static void DecideComEnter(s32 arg0) { BoardComKeySetLeft(); } -static void DecideComBuy(s32 arg0) { +static void DecideComBuy(s32 arg0) +{ if (!GWPlayer[arg0].com) { return; } if (comF != 0) { BoardComKeySetDown(); - } else { + } + else { BoardComKeySetUp(); } } -static s32 GetComItemChoice(s32 arg0) { +static s32 GetComItemChoice(s32 arg0) +{ s16 sp8; s32 temp_r26; s32 var_r28 = 0; @@ -954,7 +947,8 @@ static s32 GetComItemChoice(s32 arg0) { for (var_r27 = i = 0; i < 5; i++) { if (temp_r26 >= itemPriceTbl[activeItemTbl[i]]) { var_r30 = BoardComItemWeightGet(arg0, activeItemTbl[i]); - } else { + } + else { var_r30 = 0; } if (BoardPlayerItemFind(arg0, activeItemTbl[i]) != -1) { @@ -968,28 +962,31 @@ static s32 GetComItemChoice(s32 arg0) { if (var_r27 == 0) { comF = 1; var_r28 = 5; - } else { + } + else { var_r28 = var_r25; } return var_r28; } -static void WaitItemChoice(void) { +static void WaitItemChoice(void) +{ while (itemChoiceObj) { HuPrcVSleep(); } } -static void CreateShopItemChoice(s32 arg0, s32 arg1) { +static void CreateShopItemChoice(s32 arg0, s32 arg1) +{ omObjData *temp_r30; ItemChoiceWork *var_r31; s16 spC; s16 i; - #if VERSION_PAL - for(i=0; i<6; i++) { +#if VERSION_PAL + for (i = 0; i < 6; i++) { cursorPosTbl[i][0] = 190; } - #endif +#endif temp_r30 = omAddObjEx(boardObjMan, 0x7E01, 0, 0, -1, UpdateShopItemChoice); itemChoiceObj = temp_r30; itemChoice = -1; @@ -1001,29 +998,30 @@ static void CreateShopItemChoice(s32 arg0, s32 arg1) { var_r31->unk02 = 0; var_r31->unk03 = arg1; var_r31->unk06 = HuSprGrpCreate(1); - #if VERSION_PAL +#if VERSION_PAL if (GWLanguageGet() != 0) { s16 winId = BoardWinIDGet(); - if(winId != -1) { + if (winId != -1) { WindowData *winP = &winData[winId]; - for(i=0; i<6; i++) { - cursorPosTbl[i][0] = winP->pos_x+96; + for (i = 0; i < 6; i++) { + cursorPosTbl[i][0] = winP->pos_x + 96; } - } else { - for(i=0; i<6; i++) { + } + else { + for (i = 0; i < 6; i++) { cursorPosTbl[i][0] = 166; } } } temp_r30->trans.x = cursorPosTbl[0][0]; temp_r30->trans.y = cursorPosTbl[0][1]; - #else +#else temp_r30->trans.x = cursorPosTbl[0][0]; temp_r30->trans.y = cursorPosTbl[0][1]; if (GWLanguageGet() != 0) { temp_r30->trans.x -= 24.0f; } - #endif +#endif if (GWPlayer[arg0].com) { var_r31->unk01 = GWMessDelayGet(); } @@ -1033,11 +1031,13 @@ static void CreateShopItemChoice(s32 arg0, s32 arg1) { HuSprPosSet(var_r31->unk06, 0, temp_r30->trans.x, temp_r30->trans.y); } -static s32 GetShopItemChoice(void) { +static s32 GetShopItemChoice(void) +{ return itemChoice; } -static s32 GetShopItemWinChoice(void) { +static s32 GetShopItemWinChoice(void) +{ ItemChoiceWork *var_r31; if (!itemChoiceObj) { @@ -1047,7 +1047,8 @@ static s32 GetShopItemWinChoice(void) { return var_r31->unk02; } -static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) { +static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) +{ u32 sp8; s32 temp_r28; s32 temp_r29; @@ -1055,14 +1056,15 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) { temp_r28 = arg1->unk02; arg0->trans.x = cursorPosTbl[arg1->unk02][0]; arg0->trans.y = cursorPosTbl[arg1->unk02][1]; - #if VERSION_NTSC +#if VERSION_NTSC if (GWLanguageGet() != 0) { arg0->trans.x -= 24.0f; } - #endif +#endif if (GWPlayer[arg1->unk00_field1].com) { GetShopItemChoiceInput(arg1, arg0, &sp8); - } else { + } + else { temp_r29 = GWPlayer[arg1->unk00_field1].port; sp8 = HuPadDStkRep[temp_r29] | HuPadBtnDown[temp_r29]; } @@ -1077,7 +1079,8 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) { HuAudFXPlay(2); if (GWPlayer[arg1->unk00_field1].com) { arg1->unk05 = 0x32; - } else { + } + else { arg1->unk05 = 5; } return; @@ -1105,7 +1108,8 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) { } } -static void UpdateShopItemChoice(omObjData *arg0) { +static void UpdateShopItemChoice(omObjData *arg0) +{ ItemChoiceWork *temp_r31; temp_r31 = OM_GET_WORK_PTR(arg0, ItemChoiceWork); @@ -1120,25 +1124,31 @@ static void UpdateShopItemChoice(omObjData *arg0) { if (temp_r31->unk05 == 0) { temp_r31->unk00_field0 = 1; } - } else if (temp_r31->unk01 != 0) { + } + else if (temp_r31->unk01 != 0) { temp_r31->unk01--; - } else if (temp_r31->unk04 != 0) { + } + else if (temp_r31->unk04 != 0) { temp_r31->unk04--; - } else { + } + else { MoveShopItemChoice(arg0, temp_r31); } HuSprPosSet(temp_r31->unk06, 0, arg0->trans.x, arg0->trans.y); } -static void GetShopItemChoiceInput(ItemChoiceWork *arg0, omObjData *arg1, u32 *arg2) { +static void GetShopItemChoiceInput(ItemChoiceWork *arg0, omObjData *arg1, u32 *arg2) +{ if (arg0->unk02 == arg0->unk03) { *arg2 = 0x100; - } else { + } + else { *arg2 = 4; } } -void BoardShopTutorialExec(s32 arg0) { +void BoardShopTutorialExec(s32 arg0) +{ Vec sp48; Vec sp3C; Vec sp30; @@ -1155,7 +1165,8 @@ void BoardShopTutorialExec(s32 arg0) { sp10 = BoardWinPortraitGet(); if (BoardSpaceFlagGet(0, arg0) & 0x80000) { shopMdlPtr = shopMdlIdx[0]; - } else { + } + else { shopMdlPtr = shopMdlIdx[1]; } temp_r27 = BoardSpaceLinkFlagSearch(0, arg0, 0x02000000); diff --git a/src/game/board/space.c b/src/game/board/space.c index d092af1e..691a920a 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -1111,4 +1111,8 @@ void BoardSpaceDestroy(void) HuMemDirectFree(spaceTexData); spaceTexData = NULL; } +#ifdef TARGET_PC + GXDestroyTexObj(&spaceHiliteTex); + GXDestroyTexObj(&spaceTex); +#endif } diff --git a/src/game/board/star.c b/src/game/board/star.c index 3f2a0ba5..a91518f9 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -3,15 +3,6 @@ #include "game/data.h" #include "game/disp.h" -#include "game/flag.h" -#include "game/gamework.h" -#include "game/gamework_data.h" -#include "game/hsfanim.h" -#include "game/hsfman.h" -#include "game/msm.h" -#include "game/objsub.h" -#include "game/window.h" -#include "game/wipe.h" #include "game/board/audio.h" #include "game/board/com.h" #include "game/board/main.h" @@ -21,6 +12,15 @@ #include "game/board/tutorial.h" #include "game/board/ui.h" #include "game/board/window.h" +#include "game/flag.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/msm.h" +#include "game/objsub.h" +#include "game/window.h" +#include "game/wipe.h" #include "ext_math.h" @@ -74,77 +74,28 @@ static Process *starProc; static s16 starParman = -1; static s16 hostMdl = -1; -static const s32 starMesTbl1[9] = { - MAKE_MESSID(12, 0), - MAKE_MESSID(12, 9), - MAKE_MESSID(12, 18), - MAKE_MESSID(12, 27), - MAKE_MESSID(12, 36), - MAKE_MESSID(12, 45), - MAKE_MESSID(12, 0), - MAKE_MESSID(12, 0), - MAKE_MESSID(12, 0) -}; +static const s32 starMesTbl1[9] = { MAKE_MESSID(12, 0), MAKE_MESSID(12, 9), MAKE_MESSID(12, 18), MAKE_MESSID(12, 27), MAKE_MESSID(12, 36), + MAKE_MESSID(12, 45), MAKE_MESSID(12, 0), MAKE_MESSID(12, 0), MAKE_MESSID(12, 0) }; -static const s32 starMesTbl2[9][2] = { - { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, - { MAKE_MESSID(21, 35), MAKE_MESSID(21, 41) }, - { MAKE_MESSID(21, 36), MAKE_MESSID(21, 42) }, - { MAKE_MESSID(21, 37), MAKE_MESSID(21, 43) }, - { MAKE_MESSID(21, 38), MAKE_MESSID(21, 44) }, - { MAKE_MESSID(21, 39), MAKE_MESSID(21, 45) }, - { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, - { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, - { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) } -}; +static const s32 starMesTbl2[9][2] + = { { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 35), MAKE_MESSID(21, 41) }, { MAKE_MESSID(21, 36), MAKE_MESSID(21, 42) }, + { MAKE_MESSID(21, 37), MAKE_MESSID(21, 43) }, { MAKE_MESSID(21, 38), MAKE_MESSID(21, 44) }, { MAKE_MESSID(21, 39), MAKE_MESSID(21, 45) }, + { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) } }; -s32 boardStarSndTbl[] = { - 0x00000120, - 0x00000160, - 0x000001A0, - 0x000001E0, - 0x00000220, - 0x00000260, - 0x000002A0, - 0x000002E0 -}; +s32 boardStarSndTbl[] = { 0x00000120, 0x00000160, 0x000001A0, 0x000001E0, 0x00000220, 0x00000260, 0x000002A0, 0x000002E0 }; -static s32 hostMotTbl[9][2] = { - { DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) }, - { DATA_MAKE_NUM(DATADIR_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) }, - { DATA_MAKE_NUM(DATADIR_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) }, - { DATA_MAKE_NUM(DATADIR_W04, 11), DATA_MAKE_NUM(DATADIR_BOARD, 160) }, - { DATA_MAKE_NUM(DATADIR_W05, 9), DATA_MAKE_NUM(DATADIR_BOARD, 161) }, - { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) } -}; +static s32 hostMotTbl[9][2] = { { DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) }, + { DATA_MAKE_NUM(DATADIR_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) }, { DATA_MAKE_NUM(DATADIR_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) }, + { DATA_MAKE_NUM(DATADIR_W04, 11), DATA_MAKE_NUM(DATADIR_BOARD, 160) }, { DATA_MAKE_NUM(DATADIR_W05, 9), DATA_MAKE_NUM(DATADIR_BOARD, 161) }, + { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) } }; -static HsfanimStruct00 starEffParam = { - 0x001E, - { 0x00, 0x00 }, // padding? - 3.3f, - 70.0f, - 7.0f, - { 0.0f, -0.05f, 0.0f }, - 2.0f, - 1.0f, - 20.0f, - 0.98f, - 0x0002, - { - 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x40, 0xFF, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 - }, - { - 0xFF, 0x80, 0x80, 0x00, - 0xFF, 0x40, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 - } -}; +static HsfanimStruct00 starEffParam = { 0x001E, { 0x00, 0x00 }, // padding? + 3.3f, 70.0f, 7.0f, { 0.0f, -0.05f, 0.0f }, 2.0f, 1.0f, 20.0f, 0.98f, 0x0002, + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0xFF, 0x80, 0x80, 0x00, 0xFF, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; -void BoardStarHostSet(s16 arg0) { +void BoardStarHostSet(s16 arg0) +{ hostMdl = arg0; if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { return; @@ -154,11 +105,13 @@ void BoardStarHostSet(s16 arg0) { } } -s16 BoardStarHostMdlGet(void) { +s16 BoardStarHostMdlGet(void) +{ return hostMdl; } -void BoardStarExec(s32 arg0, s32 arg1) { +void BoardStarExec(s32 arg0, s32 arg1) +{ if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { return; } @@ -173,7 +126,8 @@ void BoardStarExec(s32 arg0, s32 arg1) { } } -static void ExecStar(void) { +static void ExecStar(void) +{ Vec sp24; Vec sp18; Vec spC; @@ -215,22 +169,23 @@ static void ExecStar(void) { BoardPlayerIdleSet(temp_r31); if (BoardDAngleCalc(temp_f30 - temp_f29) < 0.0f) { var_f28 = -BoardDAngleCalc(temp_f30 - temp_f29); - } else { + } + else { var_f28 = BoardDAngleCalc(temp_f30 - temp_f29); } if (var_f28 > 90.0f) { var_r25 = 30; - } else { + } + else { var_r25 = 15; } BoardPlayerMotBlendSet(temp_r31, temp_f30, var_r25); temp_f27 = BoardModelRotYGet(temp_r30); var_f31 = BoardDAngleCalc(temp_f30 + 180.0f) - temp_f27; - if ((var_f31 <= 4.0f && var_f31 >= 0.0f) - || (var_f31 <= 360.0f && var_f31 >= 355.0f) - || (var_f31 <= 0.0f && var_f31 >= -4.0f)) { + if ((var_f31 <= 4.0f && var_f31 >= 0.0f) || (var_f31 <= 360.0f && var_f31 >= 355.0f) || (var_f31 <= 0.0f && var_f31 >= -4.0f)) { var_r26 = 0; - } else { + } + else { var_r26 = 1; } if (var_r26 != 0) { @@ -253,12 +208,14 @@ static void ExecStar(void) { BoardWinCreate(0, temp_r29, BoardWinPortraitGetStar()); BoardWinWait(); BoardWinKill(); - } else if (BoardPlayerCoinsGet(temp_r31) < 20 && GWSystem.last5_effect != 4) { + } + else if (BoardPlayerCoinsGet(temp_r31) < 20 && GWSystem.last5_effect != 4) { temp_r29 = starMesTbl1[temp_r27] + 2; BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); BoardWinWait(); BoardWinKill(); - } else { + } + else { BoardStatusShowSetAll(0); while (!BoardStatusStopCheck(0) || !BoardStatusStopCheck(1) || !BoardStatusStopCheck(2) || !BoardStatusStopCheck(3)) { HuPrcVSleep(); @@ -286,7 +243,8 @@ static void ExecStar(void) { if (GWPlayer[temp_r31].com) { if (BoardPlayerCoinsGet(temp_r31) >= 20) { BoardComKeySetUp(); - } else { + } + else { BoardComKeySetDown(); } } @@ -325,7 +283,7 @@ static void ExecStar(void) { break; } } -block_A: + block_A: temp_r29 = starMesTbl1[temp_r27] + 3; BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); BoardWinWait(); @@ -381,7 +339,8 @@ block_B: HuPrcEnd(); } -static void DestroyStar(void) { +static void DestroyStar(void) +{ s32 i; _ClearFlag(0x10017); @@ -394,7 +353,8 @@ static void DestroyStar(void) { starProc = NULL; } -static void GiveStarMain(omObjData *arg0) { +static void GiveStarMain(omObjData *arg0) +{ GiveStarWork *temp_r30; temp_r30 = OM_GET_WORK_PTR(arg0, GiveStarWork); @@ -407,7 +367,8 @@ static void GiveStarMain(omObjData *arg0) { } if (temp_r30->unk04 != 0) { temp_r30->unk04--; - } else { + } + else { switch (temp_r30->unk01) { case 4: break; @@ -431,7 +392,8 @@ static void GiveStarMain(omObjData *arg0) { } } -static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) { +static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) +{ float var_f31; if (arg0->unk00_field1 != 0) { @@ -446,7 +408,8 @@ static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) { } } -static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) { +static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) +{ Vec sp8; BoardPlayerPosGet(arg0->unk00_field3, &sp8); @@ -465,7 +428,8 @@ static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) { InitGiveStarEffect(); } -static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) { +static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) +{ Vec sp8; float temp_f31; @@ -482,7 +446,8 @@ static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) { arg1->trans.z += arg1->rot.z; arg1->trans.y += -0.08166667f * temp_f31 * temp_f31 * 0.97f + 50.0f; arg0->unk0A++; - } else { + } + else { arg1->trans.y += -4.0f; if (arg1->trans.y <= sp8.y + 300.0f) { arg1->trans.y = sp8.y + 300.0f; @@ -491,7 +456,8 @@ static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) { } } -static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { +static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) +{ Vec sp8; float var_f30; @@ -505,7 +471,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { if (arg0->unk08 < 90) { if (BoardPlayerSizeGet(arg0->unk00_field3) != 1) { arg0->unk08 += 2; - } else { + } + else { arg0->unk08 += 1.4f; } if (arg0->unk08 > 90) { @@ -519,7 +486,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { } arg1->scale.y = arg1->scale.x; arg1->scale.z = arg1->scale.x; - } else { + } + else { omVibrate(arg0->unk00_field3, 12, 0xC, 0); arg0->unk00_field0 = 1; arg0->unk01 = 4; @@ -529,7 +497,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { } } -static void StopGiveStar(void) { +static void StopGiveStar(void) +{ GiveStarWork *temp_r31; if (giveStarObj) { @@ -538,7 +507,8 @@ static void StopGiveStar(void) { } } -static void InitGiveStarEffect(void) { +static void InitGiveStarEffect(void) +{ s16 temp_r3; void *var_r30; @@ -553,7 +523,8 @@ static void InitGiveStarEffect(void) { HuDataDirClose(DATADIR_EFFECT); } -static void KillGiveStarEffect(void) { +static void KillGiveStarEffect(void) +{ if (starParman != -1) { Hu3DParManKill(starParman); starParman = -1; @@ -561,13 +532,15 @@ static void KillGiveStarEffect(void) { } } -static inline void StarInlineFunc00(void) { +static inline void StarInlineFunc00(void) +{ GiveStarWork *temp_r28 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); temp_r28->unk01 = 0; } -static inline void StarInlineFunc01(void) { +static inline void StarInlineFunc01(void) +{ GiveStarWork *temp_r27 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); while (temp_r27->unk01 != 4) { @@ -575,7 +548,8 @@ static inline void StarInlineFunc01(void) { } } -static inline void StarInlineFunc02(void) { +static inline void StarInlineFunc02(void) +{ GiveStarWork *temp_r29 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); temp_r29->unk00_field1 = 1; @@ -584,7 +558,8 @@ static inline void StarInlineFunc02(void) { temp_r29->unk01 = 2; } -void BoardStarGive(s32 arg0, Vec *arg1) { +void BoardStarGive(s32 arg0, Vec *arg1) +{ Vec sp8; s32 temp_r25; GiveStarWork *temp_r31; @@ -631,7 +606,8 @@ void BoardStarGive(s32 arg0, Vec *arg1) { HuPrcSleep(10); if (_CheckFlag(FLAG_ID_MAKE(1, 11))) { BoardPlayerMotionEndWait(arg0); - } else { + } + else { temp_r25 = HuAudSStreamPlay(6); BoardPlayerMotionEndWait(arg0); while (msmStreamGetStatus(temp_r25) != 0) { @@ -641,7 +617,8 @@ void BoardStarGive(s32 arg0, Vec *arg1) { BoardPlayerVoiceEnableSet(arg0, 7, 1); } -void BoardStarShowNext(s32 arg0) { +void BoardStarShowNext(s32 arg0) +{ Mtx spBC; Mtx sp8C; Mtx sp5C; @@ -669,7 +646,8 @@ void BoardStarShowNext(s32 arg0) { while (WipeStatGet() != 0) { HuPrcVSleep(); } - } else { + } + else { HuPrcSleep(18); } BoardStatusItemSet(0); @@ -703,14 +681,16 @@ void BoardStarShowNext(s32 arg0) { temp_f31 = VECMag(&sp20); if (temp_f31 > 3000.0f) { var_r27 = 0xF0; - } else if (temp_f31 > 1500.0f) { + } + else if (temp_f31 > 1500.0f) { var_r27 = 0x78; - } else { + } + else { var_r27 = 0x78; } BoardViewMoveStart(&sp38, &sp50, var_r27); showNextObj->trans.x = 68.0f; - showNextObj->trans.y = HU_DISP_HEIGHT-50; + showNextObj->trans.y = HU_DISP_HEIGHT - 50; showNextObj->trans.z = 100.0f; sp44.x = showNextObj->trans.x; sp44.y = showNextObj->trans.y; @@ -718,9 +698,9 @@ void BoardStarShowNext(s32 arg0) { Hu3D2Dto3D(&sp44, 1, &sp44); BoardModelPosSetV(BoardStarHostMdlGet(), &sp44); BoardCameraRotGet(&sp2C); - PSMTXRotRad(sp5C, 'y', MTXDegToRad(10.0f)); - PSMTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x)); - PSMTXConcat(sp8C, sp5C, spBC); + MTXRotRad(sp5C, 'y', MTXDegToRad(10.0f)); + MTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x)); + MTXConcat(sp8C, sp5C, spBC); BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f); BoardModelScaleSet(BoardStarHostMdlGet(), 0.09f, 0.09f, 0.09f); @@ -735,7 +715,8 @@ void BoardStarShowNext(s32 arg0) { } if (var_r28 == 0) { var_r30 = starMesTbl1[GWBoardGet()] + 6; - } else { + } + else { var_r30 = starMesTbl2[GWBoardGet()][0]; } BoardWinCreate(3, var_r30, -1); @@ -749,7 +730,8 @@ void BoardStarShowNext(s32 arg0) { HuPrcSleep(3); if (var_r28 == 0) { var_r30 = starMesTbl1[GWBoardGet()] + 7; - } else { + } + else { var_r30 = starMesTbl2[GWBoardGet()][1]; } BoardWinCreate(3, var_r30, -1); @@ -765,7 +747,7 @@ void BoardStarShowNext(s32 arg0) { HuPrcVSleep(); } BoardViewWait(); - PSMTXIdentity(spBC); + MTXIdentity(spBC); BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); HideNextHost(1); while (showNextObj) { @@ -786,7 +768,8 @@ void BoardStarShowNext(s32 arg0) { _ClearFlag(FLAG_ID_MAKE(1, 28)); } -static void ShowNextUpdate(omObjData *arg0) { +static void ShowNextUpdate(omObjData *arg0) +{ ShowNextWork *temp_r30 = OM_GET_WORK_PTR(arg0, ShowNextWork); Vec sp8; @@ -815,7 +798,8 @@ static void ShowNextUpdate(omObjData *arg0) { BoardModelPosSetV(BoardStarHostMdlGet(), &sp8); } -static void HideNextHost(s32 arg0) { +static void HideNextHost(s32 arg0) +{ ShowNextWork *temp_r31 = OM_GET_WORK_PTR(showNextObj, ShowNextWork); temp_r31->unk01 = arg0; diff --git a/src/game/board/ui.c b/src/game/board/ui.c index ff2a9066..f0ff4717 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -1,7 +1,14 @@ #include "game/board/ui.h" #include "game/audio.h" +#include "game/board/com.h" +#include "game/board/item.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/tutorial.h" #include "game/chrman.h" #include "game/data.h" +#include "game/disp.h" #include "game/gamework.h" #include "game/gamework_data.h" #include "game/hsfex.h" @@ -11,13 +18,6 @@ #include "game/process.h" #include "game/sprite.h" #include "game/window.h" -#include "game/board/com.h" -#include "game/board/item.h" -#include "game/board/main.h" -#include "game/board/model.h" -#include "game/board/player.h" -#include "game/board/tutorial.h" -#include "game/disp.h" #include "ext_math.h" @@ -164,147 +164,66 @@ static s16 yourTurnSprGrp = -1; static UnkUiStatusStruct uiStatus[4] = { 0 }; -static s32 statusSprTbl[11] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x27), - DATA_MAKE_NUM(DATADIR_BOARD, 0x26), - DATA_MAKE_NUM(DATADIR_BOARD, 0x29), - DATA_MAKE_NUM(DATADIR_BOARD, 0x28), - DATA_MAKE_NUM(DATADIR_BOARD, 0x28), - DATA_MAKE_NUM(DATADIR_BOARD, 0x28), - DATA_MAKE_NUM(DATADIR_BOARD, 0x2D), - DATA_MAKE_NUM(DATADIR_BOARD, 0x28), - DATA_MAKE_NUM(DATADIR_BOARD, 0x28), - DATA_MAKE_NUM(DATADIR_BOARD, 0x28), - DATA_MAKE_NUM(DATADIR_BOARD, 0x2C) -}; +static s32 statusSprTbl[11] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x27), DATA_MAKE_NUM(DATADIR_BOARD, 0x26), DATA_MAKE_NUM(DATADIR_BOARD, 0x29), + DATA_MAKE_NUM(DATADIR_BOARD, 0x28), DATA_MAKE_NUM(DATADIR_BOARD, 0x28), DATA_MAKE_NUM(DATADIR_BOARD, 0x28), DATA_MAKE_NUM(DATADIR_BOARD, 0x2D), + DATA_MAKE_NUM(DATADIR_BOARD, 0x28), DATA_MAKE_NUM(DATADIR_BOARD, 0x28), DATA_MAKE_NUM(DATADIR_BOARD, 0x28), DATA_MAKE_NUM(DATADIR_BOARD, 0x2C) }; -static s16 statusSprPrioTbl[12] = { - 0x05F0, 0x05E6, 0x05DC, 0x05D2, - 0x05DC, 0x05DC, 0x05DC, 0x05DC, - 0x05DC, 0x05DC, 0x05DC, 0x05DC -}; +static s16 statusSprPrioTbl[12] = { 0x05F0, 0x05E6, 0x05DC, 0x05D2, 0x05DC, 0x05DC, 0x05DC, 0x05DC, 0x05DC, 0x05DC, 0x05DC, 0x05DC }; -static float statusHideOfsTbl[4] = { - -230.0f, 230.0f, -230.0f, 230.0f -}; +static float statusHideOfsTbl[4] = { -230.0f, 230.0f, -230.0f, 230.0f }; -static float statusPosTbl[4][2] = { - { 114.0f, 84.0f }, - { HU_DISP_WIDTH-114, 84.0f }, - { 114.0f, HU_DISP_HEIGHT-84 }, - { HU_DISP_WIDTH-114, HU_DISP_HEIGHT-84 } -}; +static float statusPosTbl[4][2] + = { { 114.0f, 84.0f }, { HU_DISP_WIDTH - 114, 84.0f }, { 114.0f, HU_DISP_HEIGHT - 84 }, { HU_DISP_WIDTH - 114, HU_DISP_HEIGHT - 84 } }; -static u8 statusColTbl[4][4] = { - { 0x80, 0x80, 0x80, 0x00 }, - { 0x1A, 0x84, 0xFF, 0x00 }, - { 0xFF, 0x1A, 0x2D, 0x00 }, - { 0x0A, 0xB4, 0x3C, 0x00 } -}; +static u8 statusColTbl[4][4] = { { 0x80, 0x80, 0x80, 0x00 }, { 0x1A, 0x84, 0xFF, 0x00 }, { 0xFF, 0x1A, 0x2D, 0x00 }, { 0x0A, 0xB4, 0x3C, 0x00 } }; -static float statusSprPosTbl[17][2] = { - { 0.0f, 0.0f }, - { 0.0f, 0.0f }, - { -68.0f, 0.0f }, - { 80.0f, 14.0f }, - { 64.0f, 14.0f }, - { 48.0f, 14.0f }, - { 26.0f, 14.0f }, - { 80.0f, -12.0f }, - { 64.0f, -12.0f }, - { 48.0f, -12.0f }, - { 26.0f, -12.0f }, - { -16.0f, 0.0f }, - { -18.0f, 32.0f }, - { 24.0f, -34.0f }, - { 48.0f, -34.0f }, - { 72.0f, -34.0f }, - { -32.0f, -16.0f } -}; +static float statusSprPosTbl[17][2] = { { 0.0f, 0.0f }, { 0.0f, 0.0f }, { -68.0f, 0.0f }, { 80.0f, 14.0f }, { 64.0f, 14.0f }, { 48.0f, 14.0f }, + { 26.0f, 14.0f }, { 80.0f, -12.0f }, { 64.0f, -12.0f }, { 48.0f, -12.0f }, { 26.0f, -12.0f }, { -16.0f, 0.0f }, { -18.0f, 32.0f }, + { 24.0f, -34.0f }, { 48.0f, -34.0f }, { 72.0f, -34.0f }, { -32.0f, -16.0f } }; -static float statusItemPosTbl[6][2] = { - { -56.0f, 0.0f }, - { -58.0f, 32.0f }, - { -2.0f, 4.0f }, - { 34.0f, -8.0f }, - { 70.0f, 4.0f }, - { -56.0f, -16.0f } -}; +static float statusItemPosTbl[6][2] = { { -56.0f, 0.0f }, { -58.0f, 32.0f }, { -2.0f, 4.0f }, { 34.0f, -8.0f }, { 70.0f, 4.0f }, { -56.0f, -16.0f } }; -static s32 itemMdlTbl[14] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x83), - DATA_MAKE_NUM(DATADIR_BOARD, 0x84), - DATA_MAKE_NUM(DATADIR_BOARD, 0x85), - DATA_MAKE_NUM(DATADIR_BOARD, 0x86), - DATA_MAKE_NUM(DATADIR_BOARD, 0x87), - DATA_MAKE_NUM(DATADIR_BOARD, 0x88), - DATA_MAKE_NUM(DATADIR_BOARD, 0x89), - DATA_MAKE_NUM(DATADIR_BOARD, 0x8A), - DATA_MAKE_NUM(DATADIR_BOARD, 0x8B), - DATA_MAKE_NUM(DATADIR_BOARD, 0x8C), - DATA_MAKE_NUM(DATADIR_BOARD, 0x8D), - DATA_MAKE_NUM(DATADIR_BOARD, 0x8E), - DATA_MAKE_NUM(DATADIR_BOARD, 0x8F), - DATA_MAKE_NUM(DATADIR_BOARD, 0x90) -}; +static s32 itemMdlTbl[14] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x83), DATA_MAKE_NUM(DATADIR_BOARD, 0x84), DATA_MAKE_NUM(DATADIR_BOARD, 0x85), + DATA_MAKE_NUM(DATADIR_BOARD, 0x86), DATA_MAKE_NUM(DATADIR_BOARD, 0x87), DATA_MAKE_NUM(DATADIR_BOARD, 0x88), DATA_MAKE_NUM(DATADIR_BOARD, 0x89), + DATA_MAKE_NUM(DATADIR_BOARD, 0x8A), DATA_MAKE_NUM(DATADIR_BOARD, 0x8B), DATA_MAKE_NUM(DATADIR_BOARD, 0x8C), DATA_MAKE_NUM(DATADIR_BOARD, 0x8D), + DATA_MAKE_NUM(DATADIR_BOARD, 0x8E), DATA_MAKE_NUM(DATADIR_BOARD, 0x8F), DATA_MAKE_NUM(DATADIR_BOARD, 0x90) }; -static Vec teamItemStatusPosTbl[2] = { - { HU_DISP_CENTERX-98, 116.0f, 0.0f }, - { HU_DISP_CENTERX+98, 116.0f, 0.0f } -}; +static Vec teamItemStatusPosTbl[2] = { { HU_DISP_CENTERX - 98, 116.0f, 0.0f }, { HU_DISP_CENTERX + 98, 116.0f, 0.0f } }; -s32 BoardItemModelGet(s32 arg0) { - s32 sp8[14] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x6D), - DATA_MAKE_NUM(DATADIR_BOARD, 0x6E), - DATA_MAKE_NUM(DATADIR_BOARD, 0x6F), - DATA_MAKE_NUM(DATADIR_BOARD, 0x70), - DATA_MAKE_NUM(DATADIR_BOARD, 0x71), - DATA_MAKE_NUM(DATADIR_BOARD, 0x72), - DATA_MAKE_NUM(DATADIR_BOARD, 0x73), - DATA_MAKE_NUM(DATADIR_BOARD, 0x74), - DATA_MAKE_NUM(DATADIR_BOARD, 0x76), - DATA_MAKE_NUM(DATADIR_BOARD, 0x77), - DATA_MAKE_NUM(DATADIR_BOARD, 0x78), - DATA_MAKE_NUM(DATADIR_BOARD, 0x79), - DATA_MAKE_NUM(DATADIR_BOARD, 0x7A), - DATA_MAKE_NUM(DATADIR_BOARD, 0x7B) - }; +s32 BoardItemModelGet(s32 arg0) +{ + s32 sp8[14] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x6D), DATA_MAKE_NUM(DATADIR_BOARD, 0x6E), DATA_MAKE_NUM(DATADIR_BOARD, 0x6F), + DATA_MAKE_NUM(DATADIR_BOARD, 0x70), DATA_MAKE_NUM(DATADIR_BOARD, 0x71), DATA_MAKE_NUM(DATADIR_BOARD, 0x72), + DATA_MAKE_NUM(DATADIR_BOARD, 0x73), DATA_MAKE_NUM(DATADIR_BOARD, 0x74), DATA_MAKE_NUM(DATADIR_BOARD, 0x76), + DATA_MAKE_NUM(DATADIR_BOARD, 0x77), DATA_MAKE_NUM(DATADIR_BOARD, 0x78), DATA_MAKE_NUM(DATADIR_BOARD, 0x79), + DATA_MAKE_NUM(DATADIR_BOARD, 0x7A), DATA_MAKE_NUM(DATADIR_BOARD, 0x7B) }; return sp8[arg0]; } -s32 BoardItemNameGet(s32 arg0) { - s32 sp8[15] = { - DATA_MAKE_NUM(DATADIR_EFFECT, 0x00), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x01), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x02), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x03), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x04), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x05), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x06), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x07), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x08), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x09), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x0A), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x0B), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x0C), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x0D), - DATA_MAKE_NUM(DATADIR_EFFECT, 0x0E) - }; +s32 BoardItemNameGet(s32 arg0) +{ + s32 sp8[15] = { DATA_MAKE_NUM(DATADIR_EFFECT, 0x00), DATA_MAKE_NUM(DATADIR_EFFECT, 0x01), DATA_MAKE_NUM(DATADIR_EFFECT, 0x02), + DATA_MAKE_NUM(DATADIR_EFFECT, 0x03), DATA_MAKE_NUM(DATADIR_EFFECT, 0x04), DATA_MAKE_NUM(DATADIR_EFFECT, 0x05), + DATA_MAKE_NUM(DATADIR_EFFECT, 0x06), DATA_MAKE_NUM(DATADIR_EFFECT, 0x07), DATA_MAKE_NUM(DATADIR_EFFECT, 0x08), + DATA_MAKE_NUM(DATADIR_EFFECT, 0x09), DATA_MAKE_NUM(DATADIR_EFFECT, 0x0A), DATA_MAKE_NUM(DATADIR_EFFECT, 0x0B), + DATA_MAKE_NUM(DATADIR_EFFECT, 0x0C), DATA_MAKE_NUM(DATADIR_EFFECT, 0x0D), DATA_MAKE_NUM(DATADIR_EFFECT, 0x0E) }; return sp8[arg0]; } -BOOL BoardStatusStopCheck(s32 arg0) { +BOOL BoardStatusStopCheck(s32 arg0) +{ return (uiStatus[arg0].unk00_bit2) ? FALSE : TRUE; } -s32 BoardStatusVisibleGet(s32 arg0) { +s32 BoardStatusVisibleGet(s32 arg0) +{ return uiStatus[arg0].unk00_bit1; } -void BoardStatusShowSetAll(s32 arg0) { +void BoardStatusShowSetAll(s32 arg0) +{ s32 i; for (i = 0; i < 4; i++) { @@ -312,7 +231,8 @@ void BoardStatusShowSetAll(s32 arg0) { } } -void BoardStatusItemSet(s32 arg0) { +void BoardStatusItemSet(s32 arg0) +{ UnkUiStatusStruct *temp_r31; s32 i; s32 j; @@ -332,11 +252,13 @@ void BoardStatusItemSet(s32 arg0) { } } -void BoardStatusShowSetForce(s32 arg0) { +void BoardStatusShowSetForce(s32 arg0) +{ uiStatus[arg0].unk00_bit3 = 1; } -void BoardStatusGraySet(s32 arg0, s32 arg1) { +void BoardStatusGraySet(s32 arg0, s32 arg1) +{ UnkUiStatusStruct *temp_r31; s16 sp10[9] = { 3, 4, 5, 7, 8, 9, 2, 6, 10 }; s16 var_r28; @@ -348,7 +270,8 @@ void BoardStatusGraySet(s32 arg0, s32 arg1) { var_r29 = 0xFF; temp_r31->unk00_bit4 = 1; var_r28 = 1500; - } else { + } + else { var_r29 = 0x3F; temp_r31->unk00_bit4 = 0; var_r28 = 1530; @@ -359,7 +282,8 @@ void BoardStatusGraySet(s32 arg0, s32 arg1) { } } -void BoardStatusShowSet(s32 arg0, s32 arg1) { +void BoardStatusShowSet(s32 arg0, s32 arg1) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; if (temp_r31->unk00_bit3) { @@ -372,7 +296,8 @@ void BoardStatusShowSet(s32 arg0, s32 arg1) { temp_r31->unk10.y = statusPosTbl[arg0][1]; temp_r31->unk00_bit3 = 0; } - } else { + } + else { if (!temp_r31->unk00_bit1) { temp_r31->unk00_bit1 = 1; temp_r31->unk10.x = statusPosTbl[arg0][0]; @@ -383,17 +308,20 @@ void BoardStatusShowSet(s32 arg0, s32 arg1) { } } -void BoardStatusItemHideSet(s32 arg0, s32 arg1) { +void BoardStatusItemHideSet(s32 arg0, s32 arg1) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; if (arg1 != 0) { temp_r31->unk00_bit5 = 1; - } else { + } + else { temp_r31->unk00_bit5 = 0; } } -void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) { +void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; temp_r31->unk10.x = arg1->x; @@ -401,14 +329,16 @@ void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) { temp_r31->unk00_bit2 = 1; } -void BoardStatusPosGet(s32 arg0, Vec *arg1) { +void BoardStatusPosGet(s32 arg0, Vec *arg1) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; arg1->x = temp_r31->unk04.x; arg1->y = temp_r31->unk04.y; } -void BoardStatusPosSet(s32 arg0, Vec *arg1) { +void BoardStatusPosSet(s32 arg0, Vec *arg1) +{ UnkUiStatusStruct *temp_r30 = &uiStatus[arg0]; temp_r30->unk04.x = arg1->x; @@ -416,7 +346,8 @@ void BoardStatusPosSet(s32 arg0, Vec *arg1) { BoardStatusTargetPosSet(arg0, arg1); } -void BoardStatusHammerCreate(s32 arg0) { +void BoardStatusHammerCreate(s32 arg0) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; float spC[2]; s32 var_r30; @@ -448,20 +379,23 @@ void BoardStatusHammerCreate(s32 arg0) { } } -void BoardStatusHammerShowSet(s32 arg0, s32 arg1) { +void BoardStatusHammerShowSet(s32 arg0, s32 arg1) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; if (temp_r31->unk00_bit6) { if (arg1 != 0) { HuSprAttrSet(temp_r31->unk02, 0x10, HUSPR_ATTR_LOOP); - } else { + } + else { HuSprAttrReset(temp_r31->unk02, 0x10, HUSPR_ATTR_LOOP); HuSprAttrSet(temp_r31->unk02, 0x10, HUSPR_ATTR_NOANIM); } } } -void BoardStatusHammerKill(s32 arg0) { +void BoardStatusHammerKill(s32 arg0) +{ UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; if (temp_r31->unk00_bit6) { @@ -470,7 +404,8 @@ void BoardStatusHammerKill(s32 arg0) { } } -void BoardStatusKill(void) { +void BoardStatusKill(void) +{ UnkUiStatusStruct *temp_r31; s32 i; @@ -486,7 +421,8 @@ void BoardStatusKill(void) { } } -void BoardStatusCreate(void) { +void BoardStatusCreate(void) +{ s32 i; memset(uiStatus, 0, 0x70); @@ -512,28 +448,23 @@ void BoardStatusCreate(void) { } } -static void KillAllBoardStatus(void) { +static void KillAllBoardStatus(void) +{ BoardStatusKill(); statusProc = NULL; } -static void CreateBoardStatusSprite(s32 arg0, UnkUiStatusStruct *arg1) { +static void CreateBoardStatusSprite(s32 arg0, UnkUiStatusStruct *arg1) +{ float var_f31; float var_f30; s16 sp8; s32 temp_r28; s32 temp_r27; s16 temp_r26; - s32 spC[] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x2E), - DATA_MAKE_NUM(DATADIR_BOARD, 0x2F), - DATA_MAKE_NUM(DATADIR_BOARD, 0x30), - DATA_MAKE_NUM(DATADIR_BOARD, 0x31), - DATA_MAKE_NUM(DATADIR_BOARD, 0x32), - DATA_MAKE_NUM(DATADIR_BOARD, 0x33), - DATA_MAKE_NUM(DATADIR_BOARD, 0x34), - DATA_MAKE_NUM(DATADIR_BOARD, 0x35) - }; + s32 spC[] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x2E), DATA_MAKE_NUM(DATADIR_BOARD, 0x2F), DATA_MAKE_NUM(DATADIR_BOARD, 0x30), + DATA_MAKE_NUM(DATADIR_BOARD, 0x31), DATA_MAKE_NUM(DATADIR_BOARD, 0x32), DATA_MAKE_NUM(DATADIR_BOARD, 0x33), + DATA_MAKE_NUM(DATADIR_BOARD, 0x34), DATA_MAKE_NUM(DATADIR_BOARD, 0x35) }; s32 i; temp_r28 = GWPlayerCfg[arg0].character; @@ -547,10 +478,11 @@ static void CreateBoardStatusSprite(s32 arg0, UnkUiStatusStruct *arg1) { HuSprAttrSet(arg1->unk02, i, 8); HuSprPosSet(arg1->unk02, i, statusSprPosTbl[i][0], statusSprPosTbl[i][1]); } - if ((s32) GWSystem.team != 0) { + if ((s32)GWSystem.team != 0) { if (GWPlayerTeamGet(arg0) == 0) { HuSprBankSet(arg1->unk02, 1, 2); - } else { + } + else { HuSprBankSet(arg1->unk02, 1, 1); } } @@ -582,7 +514,8 @@ static void CreateBoardStatusSprite(s32 arg0, UnkUiStatusStruct *arg1) { } } -void BoardSpriteCreate(s32 file, s32 prio, AnimData **anim, s16 *sprite) { +void BoardSpriteCreate(s32 file, s32 prio, AnimData **anim, s16 *sprite) +{ s16 temp_r28; void *temp_r27; AnimData *temp_r31; @@ -598,7 +531,8 @@ void BoardSpriteCreate(s32 file, s32 prio, AnimData **anim, s16 *sprite) { } } -static s32 UpdateBoardStatus(void) { +static s32 UpdateBoardStatus(void) +{ UnkUiStatusStruct *temp_r31; u8 *temp_r28; s32 temp_r27; @@ -619,13 +553,15 @@ static s32 UpdateBoardStatus(void) { if (temp_r27 != -1 && temp_r31->unk00_bit5) { UpdateStatusItem(temp_r31, j, temp_r27); HuSprAttrReset(temp_r31->unk02, j + 0xD, HUSPR_ATTR_DISPOFF); - } else { + } + else { HuSprAttrSet(temp_r31->unk02, j + 0xD, HUSPR_ATTR_DISPOFF); } } if (GWPlayer[i].com) { HuSprAttrReset(temp_r31->unk02, 0xC, HUSPR_ATTR_DISPOFF); - } else { + } + else { HuSprAttrSet(temp_r31->unk02, 0xC, HUSPR_ATTR_DISPOFF); } temp_r28 = statusColTbl[GWPlayer[i].color]; @@ -636,7 +572,8 @@ static s32 UpdateBoardStatus(void) { return 0; } -static void BoardStatusProc(void) { +static void BoardStatusProc(void) +{ while (1) { if (omSysExitReq != 0 || UpdateBoardStatus() != 0) { break; @@ -646,7 +583,8 @@ static void BoardStatusProc(void) { HuPrcEnd(); } -static void MoveBoardStatus(s32 arg0) { +static void MoveBoardStatus(s32 arg0) +{ UnkUiStatusStruct *temp_r30 = &uiStatus[arg0]; float var_f30; Vec spC; @@ -655,7 +593,8 @@ static void MoveBoardStatus(s32 arg0) { if (ABS(spC.x) < 1.0f && ABS(spC.y) < 1.0f) { spC = temp_r30->unk10; temp_r30->unk00_bit2 = 0; - } else { + } + else { OSs8tof32(&temp_r30->unk01, &var_f30); var_f30 /= 32; VECScale(&spC, &spC, var_f30); @@ -666,7 +605,8 @@ static void MoveBoardStatus(s32 arg0) { temp_r30->unk04.y = spC.y; } -void BoardSpriteDigitUpdate(s16 arg0, s16 arg1, s32 arg2) { +void BoardSpriteDigitUpdate(s16 arg0, s16 arg1, s32 arg2) +{ s32 temp_r29; s32 temp_r28; s32 temp_r27; @@ -676,20 +616,23 @@ void BoardSpriteDigitUpdate(s16 arg0, s16 arg1, s32 arg2) { temp_r27 = (arg2 - (temp_r29 * 100 + temp_r28 * 10)) % 10; if (temp_r29 == 0) { HuSprBankSet(arg0, arg1 + 2, 0xA); - } else { + } + else { HuSprBankSet(arg0, arg1 + 2, temp_r29); } if (temp_r28 == 0 && temp_r29 == 0) { HuSprBankSet(arg0, arg1 + 1, temp_r27); HuSprAttrSet(arg0, arg1, 4); - } else { + } + else { HuSprBankSet(arg0, arg1 + 1, temp_r28); HuSprBankSet(arg0, arg1, temp_r27); HuSprAttrReset(arg0, arg1, HUSPR_ATTR_DISPOFF); } } -static void UpdateStatusItem(UnkUiStatusStruct *arg0, s32 arg1, s32 arg2) { +static void UpdateStatusItem(UnkUiStatusStruct *arg0, s32 arg1, s32 arg2) +{ float temp_f31; float temp_f30; @@ -699,21 +642,15 @@ static void UpdateStatusItem(UnkUiStatusStruct *arg0, s32 arg1, s32 arg2) { HuSprPosSet(arg0->unk02, arg1 + 0xD, temp_f31, temp_f30); } -void BoardPickerCreate(s32 arg0, s8 arg1, void *arg2, s8 arg3) { +void BoardPickerCreate(s32 arg0, s8 arg1, void *arg2, s8 arg3) +{ UnkUiWork01 *temp_r31; omObjData *temp_r30; s32 temp_r28; s16 sp12; - s32 sp14[] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x1E), - DATA_MAKE_NUM(DATADIR_BOARD, 0x1F), - DATA_MAKE_NUM(DATADIR_BOARD, 0x20), - DATA_MAKE_NUM(DATADIR_BOARD, 0x21), - DATA_MAKE_NUM(DATADIR_BOARD, 0x22), - DATA_MAKE_NUM(DATADIR_BOARD, 0x23), - DATA_MAKE_NUM(DATADIR_BOARD, 0x24), - DATA_MAKE_NUM(DATADIR_BOARD, 0x25) - }; + s32 sp14[] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x1E), DATA_MAKE_NUM(DATADIR_BOARD, 0x1F), DATA_MAKE_NUM(DATADIR_BOARD, 0x20), + DATA_MAKE_NUM(DATADIR_BOARD, 0x21), DATA_MAKE_NUM(DATADIR_BOARD, 0x22), DATA_MAKE_NUM(DATADIR_BOARD, 0x23), + DATA_MAKE_NUM(DATADIR_BOARD, 0x24), DATA_MAKE_NUM(DATADIR_BOARD, 0x25) }; temp_r28 = GWPlayer[arg0].character; temp_r30 = omAddObjEx(boardObjMan, 0x107, 0, 0, -1, &UpdatePicker); @@ -746,11 +683,13 @@ void BoardPickerCreate(s32 arg0, s8 arg1, void *arg2, s8 arg3) { CreatePickerWindow(temp_r31, 1); } -void BoardPickerBackFlagSet(s32 arg0) { +void BoardPickerBackFlagSet(s32 arg0) +{ if (pickerObj) { if (arg0 != 0) { pickerBackF = 0; - } else { + } + else { pickerBackF = 1; } if (arg0 == 0) { @@ -760,15 +699,18 @@ void BoardPickerBackFlagSet(s32 arg0) { } } -BOOL BoardPickerDoneCheck(void) { +BOOL BoardPickerDoneCheck(void) +{ if (pickerObj) { return FALSE; - } else { + } + else { return TRUE; } } -s32 BoardPickerPosGet(Vec *arg0) { +s32 BoardPickerPosGet(Vec *arg0) +{ if (pickerObj == 0 || arg0 == 0) { return -1; } @@ -778,11 +720,13 @@ s32 BoardPickerPosGet(Vec *arg0) { return 0; } -s32 BoardPickerChoiceGet(void) { +s32 BoardPickerChoiceGet(void) +{ return pickerChoice; } -static void UpdatePicker(omObjData *arg0) { +static void UpdatePicker(omObjData *arg0) +{ UnkUiWork01 *temp_r31 = OM_GET_WORK_PTR(arg0, UnkUiWork01); if (temp_r31->unk00_bit0 || BoardIsKill()) { @@ -790,12 +734,15 @@ static void UpdatePicker(omObjData *arg0) { HuSprGrpKill(temp_r31->unk04); pickerObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); - } else { + } + else { if (temp_r31->unk03 != 0) { temp_r31->unk03--; - } else if (pickerChoice != -1 || temp_r31->unk00_bit7) { + } + else if (pickerChoice != -1 || temp_r31->unk00_bit7) { temp_r31->unk00_bit0 = 1; - } else { + } + else { UpdatePickerInput(temp_r31, arg0); } MovePicker(temp_r31, arg0); @@ -803,7 +750,8 @@ static void UpdatePicker(omObjData *arg0) { } } -static void UpdatePickerInput(UnkUiWork01 *arg0, omObjData *arg1) { +static void UpdatePickerInput(UnkUiWork01 *arg0, omObjData *arg1) +{ s32 sp8; s32 temp_r29; @@ -811,7 +759,8 @@ static void UpdatePickerInput(UnkUiWork01 *arg0, omObjData *arg1) { sp8 = 0; if (GWPlayer[arg0->unk00_bit5].com && arg0->unk01 != -1) { UpdateComPickerButton(arg0, arg1, &sp8); - } else { + } + else { temp_r29 = GWPlayer[arg0->unk00_bit5].port; sp8 = HuPadDStkRep[temp_r29] | HuPadBtnDown[temp_r29]; } @@ -823,7 +772,8 @@ static void UpdatePickerInput(UnkUiWork01 *arg0, omObjData *arg1) { } } -static void MovePicker(UnkUiWork01 *arg0, omObjData *arg1) { +static void MovePicker(UnkUiWork01 *arg0, omObjData *arg1) +{ float temp_f31 = 0.5f; Vec sp14; Vec sp8; @@ -840,7 +790,8 @@ static void MovePicker(UnkUiWork01 *arg0, omObjData *arg1) { arg1->trans.y = arg1->rot.y; arg1->trans.z = arg1->rot.z; arg0->unk00_bit6 = 0; - } else { + } + else { VECScale(&sp8, &sp8, temp_f31); VECAdd(&sp14, &sp8, &sp8); arg1->trans.x = sp8.x; @@ -850,34 +801,40 @@ static void MovePicker(UnkUiWork01 *arg0, omObjData *arg1) { } } -static void UpdateComPickerButton(UnkUiWork01 *arg0, omObjData *arg1, s32 *arg2) { +static void UpdateComPickerButton(UnkUiWork01 *arg0, omObjData *arg1, s32 *arg2) +{ if (arg0->unk02 == arg0->unk01) { *arg2 = 0x100; - } else { + } + else { *arg2 = 2; } } -static BOOL CheckPickerButton(UnkUiWork01 *arg0, omObjData *arg1, u32 arg2) { +static BOOL CheckPickerButton(UnkUiWork01 *arg0, omObjData *arg1, u32 arg2) +{ BOOL var_r30 = FALSE; if (arg2 == 0x100) { pickerChoice = arg0->unk02; HuAudFXPlay(2); var_r30 = TRUE; - } else if (arg2 == 0x200 && pickerBackF == 0) { + } + else if (arg2 == 0x200 && pickerBackF == 0) { arg0->unk00_bit0 = 1; arg0->unk00_bit7 = 1; pickerChoice = -1; HuAudFXPlay(3); var_r30 = TRUE; - } else if (arg2 & 1) { + } + else if (arg2 & 1) { var_r30 = TRUE; if (pickerChoiceDefault > 1) { HuAudFXPlay(0); } arg0->unk02--; - } else if (arg2 & 2) { + } + else if (arg2 & 2) { var_r30 = TRUE; if (pickerChoiceDefault > 1) { HuAudFXPlay(0); @@ -896,19 +853,13 @@ static BOOL CheckPickerButton(UnkUiWork01 *arg0, omObjData *arg1, u32 arg2) { return var_r30; } -void BoardYourTurnExec(s32 arg0) { +void BoardYourTurnExec(s32 arg0) +{ s32 temp_r29; UnkUiWork02 *temp_r31; - s32 sp8[] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x43), - DATA_MAKE_NUM(DATADIR_BOARD, 0x44), - DATA_MAKE_NUM(DATADIR_BOARD, 0x45), - DATA_MAKE_NUM(DATADIR_BOARD, 0x46), - DATA_MAKE_NUM(DATADIR_BOARD, 0x47), - DATA_MAKE_NUM(DATADIR_BOARD, 0x48), - DATA_MAKE_NUM(DATADIR_BOARD, 0x49), - DATA_MAKE_NUM(DATADIR_BOARD, 0x4A) - }; + s32 sp8[] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x43), DATA_MAKE_NUM(DATADIR_BOARD, 0x44), DATA_MAKE_NUM(DATADIR_BOARD, 0x45), + DATA_MAKE_NUM(DATADIR_BOARD, 0x46), DATA_MAKE_NUM(DATADIR_BOARD, 0x47), DATA_MAKE_NUM(DATADIR_BOARD, 0x48), + DATA_MAKE_NUM(DATADIR_BOARD, 0x49), DATA_MAKE_NUM(DATADIR_BOARD, 0x4A) }; temp_r29 = GWPlayer[arg0].character; yourTurnObj = omAddObjEx(boardObjMan, 0x10B, 0, 0, -1, &UpdateYourTurn); @@ -931,7 +882,8 @@ void BoardYourTurnExec(s32 arg0) { } } -static void UpdateYourTurn(omObjData *arg0) { +static void UpdateYourTurn(omObjData *arg0) +{ UnkUiWork02 *temp_r31 = OM_GET_WORK_PTR(arg0, UnkUiWork02); if (temp_r31->unk00_bit0 || BoardIsKill()) { @@ -939,7 +891,8 @@ static void UpdateYourTurn(omObjData *arg0) { yourTurnSprGrp = -1; yourTurnObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); - } else { + } + else { switch (temp_r31->unk00_bit3) { case 0: GrowYourTurn(temp_r31, arg0); @@ -954,7 +907,8 @@ static void UpdateYourTurn(omObjData *arg0) { } } -static void GrowYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { +static void GrowYourTurn(UnkUiWork02 *arg0, omObjData *arg1) +{ float temp_f30; arg0->unk01 += 7; @@ -967,7 +921,8 @@ static void GrowYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { HuSprScaleSet(yourTurnSprGrp, 0, temp_f30, temp_f30); } -static void WaitYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { +static void WaitYourTurn(UnkUiWork02 *arg0, omObjData *arg1) +{ float temp_f30; arg0->unk01 += 7; @@ -981,7 +936,8 @@ static void WaitYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { HuSprTPLvlSet(yourTurnSprGrp, 0, 1.0f - temp_f30); } -static void ShrinkYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { +static void ShrinkYourTurn(UnkUiWork02 *arg0, omObjData *arg1) +{ s32 temp_r30 = GWPlayer[arg0->unk00_bit5].port; if ((HuPadBtnDown[temp_r30] & 0x100) || GWPlayer[arg0->unk00_bit5].com || _CheckFlag(FLAG_ID_MAKE(1, 11))) { @@ -991,7 +947,8 @@ static void ShrinkYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { } } -s32 BoardItemUseExec(s32 arg0) { +s32 BoardItemUseExec(s32 arg0) +{ BoardPauseDisableSet(1); itemPlayer = arg0; itemUseProc = HuPrcChildCreate(ItemUseProc, 0x2004, 0x4000, 0, boardMainProc); @@ -1002,7 +959,8 @@ s32 BoardItemUseExec(s32 arg0) { return itemUsed; } -static void ItemUseTeamProc(s32 arg0) { +static void ItemUseTeamProc(s32 arg0) +{ UnkUiStatusStruct *temp_r22; Vec sp40; Vec sp34; @@ -1016,9 +974,10 @@ static void ItemUseTeamProc(s32 arg0) { if (itemTeamF != 0) { BoardStatusTargetPosSet(itemPlayer, &teamItemStatusPosTbl[0]); BoardStatusTargetPosSet(teamItemPlayer, &teamItemStatusPosTbl[1]); - } else { - BoardStatusTargetPosSet(itemPlayer, (Vec*) statusPosTbl[0]); - BoardStatusTargetPosSet(teamItemPlayer, (Vec*) statusPosTbl[1]); + } + else { + BoardStatusTargetPosSet(itemPlayer, (Vec *)statusPosTbl[0]); + BoardStatusTargetPosSet(teamItemPlayer, (Vec *)statusPosTbl[1]); } sp2C[0] = BoardPlayerTeamFind(itemPlayer); sp2C[1] = BoardPlayerSameTeamFind(sp2C[0]); @@ -1030,16 +989,14 @@ static void ItemUseTeamProc(s32 arg0) { while (!BoardStatusStopCheck(itemPlayer) || !BoardStatusStopCheck(teamItemPlayer)) { HuPrcVSleep(); } - } else { + } + else { for (i = 0; i < 4; i++) { sp40.x = statusPosTbl[i][0]; sp40.y = statusPosTbl[i][1]; BoardStatusTargetPosSet(i, &sp40); } - while (!BoardStatusStopCheck(0) - || !BoardStatusStopCheck(1) - || !BoardStatusStopCheck(2) - || !BoardStatusStopCheck(3)) { + while (!BoardStatusStopCheck(0) || !BoardStatusStopCheck(1) || !BoardStatusStopCheck(2) || !BoardStatusStopCheck(3)) { sp34.z = 0.0f; for (i = 0; i < 4; i++) { temp_r22 = &uiStatus[i]; @@ -1057,7 +1014,8 @@ static void ItemUseTeamProc(s32 arg0) { } } -static void ItemUseProc(void) { +static void ItemUseProc(void) +{ s32 var_r24; s16 temp_r23; s32 var_r25; @@ -1068,7 +1026,8 @@ static void ItemUseProc(void) { itemTeam = GWPlayerTeamGet(itemPlayer); if (GWTeamGet()) { itemTeamF = 1; - } else { + } + else { itemTeamF = 0; } for (i = 0; i < 4; i++) { @@ -1135,7 +1094,8 @@ static void ItemUseProc(void) { HuPrcEnd(); } -static void FinishItemUse(s16 arg0, s32 arg1) { +static void FinishItemUse(s16 arg0, s32 arg1) +{ s32 var_r30; s32 var_r31; s16 temp_r29; @@ -1171,7 +1131,8 @@ static void FinishItemUse(s16 arg0, s32 arg1) { } } -static void DestroyItemUse(void) { +static void DestroyItemUse(void) +{ s32 i; CharModelLayerSetAll(1); @@ -1183,7 +1144,8 @@ static void DestroyItemUse(void) { itemUseProc = NULL; } -void BoardMakeRandomItem(void) { +void BoardMakeRandomItem(void) +{ s32 chosenItemIndex; s32 i; @@ -1196,30 +1158,34 @@ void BoardMakeRandomItem(void) { BoardItemBagItemSet(itemRandTbl); } -static inline void TeamItemPosSetInlineFunc01(s32 arg0, s32 arg1, Vec *arg2) { +static inline void TeamItemPosSetInlineFunc01(s32 arg0, s32 arg1, Vec *arg2) +{ UnkUiWork03 *temp_r29 = OM_GET_WORK_PTR(itemPickObj, UnkUiWork03); - Vec (*temp_r31)[6] = (void*) temp_r29->unk04; + Vec(*temp_r31)[6] = (void *)temp_r29->unk04; temp_r31[arg0][arg1 + 2].x = arg2->x; temp_r31[arg0][arg1 + 2].y = arg2->y; temp_r31[arg0][arg1 + 2].z = arg2->z; } -static inline void TeamItemPosSetInlineFunc02(s32 arg0, s32 arg1, Vec *arg2) { +static inline void TeamItemPosSetInlineFunc02(s32 arg0, s32 arg1, Vec *arg2) +{ UnkUiWork03 *temp_r29 = OM_GET_WORK_PTR(itemPickObj, UnkUiWork03); - Vec (*temp_r31)[6] = (void*) temp_r29->unk04; + Vec(*temp_r31)[6] = (void *)temp_r29->unk04; (temp_r31 + 4)[arg0][arg1 + 2].x = arg2->x; (temp_r31 + 4)[arg0][arg1 + 2].y = arg2->y; (temp_r31 + 4)[arg0][arg1 + 2].z = arg2->z; } -static void TeamItemPosSet(s32 arg0, s32 arg1, Vec *arg2) { +static void TeamItemPosSet(s32 arg0, s32 arg1, Vec *arg2) +{ TeamItemPosSetInlineFunc01(arg0, arg1, arg2); TeamItemPosSetInlineFunc02(arg0, arg1, arg2); } -static inline void ExecItemPickInlineFunc01(Vec (*arg0)[6]) { +static inline void ExecItemPickInlineFunc01(Vec (*arg0)[6]) +{ Vec sp1C; Vec sp28; Vec sp34; @@ -1233,7 +1199,8 @@ static inline void ExecItemPickInlineFunc01(Vec (*arg0)[6]) { sp14 = GWPlayer[i].items[j]; if (sp14 == -1) { itemMdlId[i][j] = -1; - } else { + } + else { BoardCameraRotGet(&sp1C); temp_r24 = BoardModelCreate(itemMdlTbl[sp14], 0, 0); itemMdlId[i][j] = temp_r24; @@ -1253,7 +1220,8 @@ static inline void ExecItemPickInlineFunc01(Vec (*arg0)[6]) { } } -static inline void ExecItemPickInlineFunc02(s32 arg0, s8 arg1, s32 arg2) { +static inline void ExecItemPickInlineFunc02(s32 arg0, s8 arg1, s32 arg2) +{ UnkUiWork03 *sp10; BoardPickerCreate(arg0, arg1, itemPosTemp, arg2); @@ -1268,7 +1236,8 @@ static inline void ExecItemPickInlineFunc02(s32 arg0, s8 arg1, s32 arg2) { } } -static void ExecItemPick(void) { +static void ExecItemPick(void) +{ Vec sp40; s32 sp18; s32 var_r22; @@ -1276,7 +1245,7 @@ static void ExecItemPick(void) { s32 i; s32 j; UnkUiWork03 *temp_r27; - Vec (*temp_r28)[6]; + Vec(*temp_r28)[6]; if (_CheckFlag(FLAG_ID_MAKE(1, 11))) { BoardTutorialHostHide(0); @@ -1293,22 +1262,25 @@ static void ExecItemPick(void) { BoardStatusItemHideSet(1, 0); BoardStatusItemHideSet(2, 0); BoardStatusItemHideSet(3, 0); - temp_r28 = (void*) temp_r27->unk04; + temp_r28 = (void *)temp_r27->unk04; for (var_r22 = i = 0; i < 4; i++) { if (itemTeamF != 0) { if (itemTeam == GWPlayerTeamGet(i)) { if (itemPlayer == i) { var_r22 = 0; - } else { + } + else { var_r22 = 1; } sp40.x = teamItemStatusPosTbl[var_r22].x; sp40.y = teamItemStatusPosTbl[var_r22].y; - } else { + } + else { sp40.x = statusPosTbl[i][0] + statusHideOfsTbl[i]; sp40.y = statusPosTbl[i][1]; } - } else { + } + else { sp40.x = statusPosTbl[i][0]; sp40.y = statusPosTbl[i][1]; } @@ -1326,7 +1298,7 @@ static void ExecItemPick(void) { (temp_r28 + 4)[i][j].z = temp_r28[i][j].z = 0.0f; } } - ExecItemPickInlineFunc01((void*) temp_r27->unk04); + ExecItemPickInlineFunc01((void *)temp_r27->unk04); memset(itemPosTemp, 0, 0x48); var_r23 = BoardPlayerItemCount(itemPlayer); ItemGetPos(itemPlayer, &itemPosTemp[0]); @@ -1342,10 +1314,11 @@ static void ExecItemPick(void) { ExecItemPickInlineFunc02(itemPlayer, var_r23, sp18); } -static void UpdateItemPick(omObjData *arg0) { +static void UpdateItemPick(omObjData *arg0) +{ UnkUiWork03 *temp_r28 = OM_GET_WORK_PTR(arg0, UnkUiWork03); UnkUiStatusStruct *temp_r26; - Vec (*temp_r27)[6]; + Vec(*temp_r27)[6]; Vec sp14; Vec sp8; float temp_f30; @@ -1368,10 +1341,12 @@ static void UpdateItemPick(omObjData *arg0) { HuMemDirectFree(temp_r28->unk04); itemPickObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); - } else { + } + else { if (temp_r28->unk02 != 0) { temp_r28->unk02--; - } else { + } + else { switch (temp_r28->unk01) { case 3: temp_r28->unk00_bit1 = 1; @@ -1386,7 +1361,7 @@ static void UpdateItemPick(omObjData *arg0) { } } MakeItemPickSpace(temp_r28); - temp_r27 = (void*) temp_r28->unk04; + temp_r27 = (void *)temp_r28->unk04; for (i = 0; i < 4; i++) { temp_r26 = &uiStatus[i]; for (j = 0; j < 6; j++) { @@ -1410,14 +1385,15 @@ static void UpdateItemPick(omObjData *arg0) { } } -static void MakeItemPickSpace(UnkUiWork03 *arg0) { +static void MakeItemPickSpace(UnkUiWork03 *arg0) +{ Vec sp8; float var_f29; s32 i; s32 j; - Vec (*temp_r28)[6]; + Vec(*temp_r28)[6]; - temp_r28 = (void*) arg0->unk04; + temp_r28 = (void *)arg0->unk04; if (!arg0->unk00_bit1) { if (arg0->unk03 < 90) { if (arg0->unk03 == 0) { @@ -1430,7 +1406,8 @@ static void MakeItemPickSpace(UnkUiWork03 *arg0) { arg0->unk03 = 90; } } - } else { + } + else { if (arg0->unk03 > 0) { arg0->unk03 -= 6; if (arg0->unk03 < 0) { @@ -1451,7 +1428,8 @@ static void MakeItemPickSpace(UnkUiWork03 *arg0) { if (arg0->unk00_bit1 && arg0->unk03 == 0) { arg0->unk00_bit0 = 1; } - } else { + } + else { var_f29 = 0.3f; VECScale(&sp8, &sp8, var_f29); VECAdd(&temp_r28[i][j], &sp8, &sp8); @@ -1462,9 +1440,10 @@ static void MakeItemPickSpace(UnkUiWork03 *arg0) { } } -static void SetItemUIStatus(s32 arg0) { +static void SetItemUIStatus(s32 arg0) +{ UnkUiWork03 *temp_r27 = OM_GET_WORK_PTR(itemPickObj, UnkUiWork03); - Vec (*temp_r28)[6] = (void*) temp_r27->unk04; + Vec(*temp_r28)[6] = (void *)temp_r27->unk04; float var_f31; float var_f30; s32 i; @@ -1506,7 +1485,8 @@ static void SetItemUIStatus(s32 arg0) { temp_r27->unk01 = arg0; } -void BoardItemGetDestPos(s32 arg0, Vec *arg1) { +void BoardItemGetDestPos(s32 arg0, Vec *arg1) +{ Vec spC; s32 i; @@ -1514,11 +1494,12 @@ void BoardItemGetDestPos(s32 arg0, Vec *arg1) { spC.y = statusPosTbl[arg0][1]; spC.z = 0.0f; for (i = 0; i < 3; i++) { - VECAdd((Vec*) &statusItemPosTbl[i + 2], &spC, &arg1[i]); + VECAdd((Vec *)&statusItemPosTbl[i + 2], &spC, &arg1[i]); } } -static void ItemGetPos(s32 arg0, Vec *arg1) { +static void ItemGetPos(s32 arg0, Vec *arg1) +{ Vec spC; s32 var_r29; s32 i; @@ -1526,22 +1507,25 @@ static void ItemGetPos(s32 arg0, Vec *arg1) { if (itemTeamF != 0) { if (itemPlayer == arg0) { var_r29 = 0; - } else { + } + else { var_r29 = 1; } spC.x = teamItemStatusPosTbl[var_r29].x; spC.y = teamItemStatusPosTbl[var_r29].y; - } else { + } + else { spC.x = statusPosTbl[arg0][0]; spC.y = statusPosTbl[arg0][1]; } spC.z = 0.0f; for (i = 0; i < 3; i++) { - VECAdd((Vec*) statusItemPosTbl[i + 2], &spC, &arg1[i]); + VECAdd((Vec *)statusItemPosTbl[i + 2], &spC, &arg1[i]); } } -void BoardItemStatusKill(s32 arg0) { +void BoardItemStatusKill(s32 arg0) +{ Vec sp68[3]; Vec sp44[3]; Vec sp20[3]; @@ -1556,17 +1540,19 @@ void BoardItemStatusKill(s32 arg0) { if (arg0 == itemPlayer) { sp8.x = teamItemStatusPosTbl[0].x; sp8.y = teamItemStatusPosTbl[0].y; - } else { + } + else { sp8.x = teamItemStatusPosTbl[1].x; sp8.y = teamItemStatusPosTbl[1].y; } - } else { + } + else { sp8.x = statusPosTbl[arg0][0]; sp8.y = statusPosTbl[arg0][1]; } sp8.z = 0.0f; for (i = 0; i < 3; i++) { - VECAdd((Vec*) statusItemPosTbl[i + 2], &sp8, &sp68[i]); + VECAdd((Vec *)statusItemPosTbl[i + 2], &sp8, &sp68[i]); if (itemMdlId[arg0][i] != -1) { BoardModelRotGet(itemMdlId[arg0][i], &sp44[i]); BoardModelScaleGet(itemMdlId[arg0][i], &sp20[i]); @@ -1592,7 +1578,8 @@ void BoardItemStatusKill(s32 arg0) { } } -static void UpdateItemPickGfx(omObjData *arg0) { +static void UpdateItemPickGfx(omObjData *arg0) +{ UnkUiWork01 *temp_r30 = OM_GET_WORK_PTR(arg0, UnkUiWork01); if (temp_r30->unk00_bit0 || BoardIsKill()) { @@ -1600,10 +1587,12 @@ static void UpdateItemPickGfx(omObjData *arg0) { HuSprGrpKill(temp_r30->unk04); pickerObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); - } else { + } + else { if (temp_r30->unk03 != 0) { temp_r30->unk03--; - } else { + } + else { if (!CheckItemWindowSlide()) { temp_r30->unk00_bit6 = 1; } @@ -1620,7 +1609,8 @@ static void UpdateItemPickGfx(omObjData *arg0) { HuSprAttrReset(temp_r30->unk04, 0, HUSPR_ATTR_NOANIM); arg0->func = UpdateItemPickup; HuWinDispOff(temp_r30->unk06); - } else { + } + else { itemUsed = -1; } } @@ -1628,7 +1618,8 @@ static void UpdateItemPickGfx(omObjData *arg0) { } } -static void UpdateItemPickup(omObjData *arg0) { +static void UpdateItemPickup(omObjData *arg0) +{ UnkUiWork01 *temp_r31 = OM_GET_WORK_PTR(arg0, UnkUiWork01); Vec sp50; Vec sp44; @@ -1650,11 +1641,14 @@ static void UpdateItemPickup(omObjData *arg0) { HuSprGrpKill(temp_r31->unk04); pickerObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); - } else if (temp_r31->unk03 != 0) { + } + else if (temp_r31->unk03 != 0) { temp_r31->unk03--; - } else if (pickerChoice == -1) { + } + else if (pickerChoice == -1) { temp_r31->unk00_bit0 = 1; - } else { + } + else { var_r29 = temp_r31->unk00_bit5; var_r28 = pickerChoice; if (GWTeamGet() && pickerChoice >= BoardPlayerItemCount(temp_r31->unk00_bit5)) { @@ -1697,7 +1691,8 @@ static void UpdateItemPickup(omObjData *arg0) { arg0->trans.x -= itemPickupPos; arg0->trans.y += itemPickupPos; itemPickupPos *= 0.98f; - } else { + } + else { sp50.x = arg0->trans.x; sp50.y = arg0->trans.y; sp50.z = 3200.0f; @@ -1714,7 +1709,8 @@ static void UpdateItemPickup(omObjData *arg0) { temp_r31->unk03 = 0x12; BoardPlayerItemRemove(var_r29, var_r28); temp_r31->unk00_bit3 = 5; - } else { + } + else { arg0->trans.x -= itemPickupPos; arg0->trans.y += itemPickupPos; itemPickupPos *= 0.9f; @@ -1736,7 +1732,8 @@ static void UpdateItemPickup(omObjData *arg0) { if (ABS(sp14.x) < 1.0f && ABS(sp14.y) < 1.0f) { HuSprAttrSet(temp_r31->unk04, 0, 4); temp_r31->unk00_bit3 = 6; - } else { + } + else { VECScale(&sp14, &sp14, 0.1f); VECAdd(&sp20, &sp14, &sp50); sp50.z = 3200.0f; @@ -1753,7 +1750,8 @@ static void UpdateItemPickup(omObjData *arg0) { } } -static BOOL CheckItemWindow(void) { +static BOOL CheckItemWindow(void) +{ UnkUiWork01 *temp_r31; if (pickerObj == 0) { @@ -1762,12 +1760,14 @@ static BOOL CheckItemWindow(void) { temp_r31 = OM_GET_WORK_PTR(pickerObj, UnkUiWork01); if (temp_r31->unk00_bit3 == 6) { return TRUE; - } else { + } + else { return FALSE; } } -static void HideItemWindow(void) { +static void HideItemWindow(void) +{ UnkUiWork01 *temp_r31; if (pickerObj) { @@ -1776,7 +1776,8 @@ static void HideItemWindow(void) { } } -static void CreateItemWindow(s32 arg0, s32 arg1) { +static void CreateItemWindow(s32 arg0, s32 arg1) +{ Vec sp10; float sp8[2]; float temp_f31; @@ -1800,7 +1801,8 @@ static void CreateItemWindow(s32 arg0, s32 arg1) { temp_r26->trans.x = 0.0f; if (GWTeamGet()) { var_f30 = 32.0f; - } else { + } + else { var_f30 = 0.0f; } temp_r31 = temp_r29->unk04; @@ -1812,9 +1814,9 @@ static void CreateItemWindow(s32 arg0, s32 arg1) { } temp_r28 = GWPlayer[arg0].items[var_r27]; if (temp_r28 == -1) { - temp_r31->unk12[i] = temp_r31->unk1E[i] - = temp_r31->unk06[i] = temp_r31->unk00[i] = -1; - } else { + temp_r31->unk12[i] = temp_r31->unk1E[i] = temp_r31->unk06[i] = temp_r31->unk00[i] = -1; + } + else { temp_r31->unk00[i] = temp_r28; temp_r31->unk74[i].x = i * HU_DISP_WIDTHF + 36.0f; temp_r31->unk74[i].y = var_f30 + HU_DISP_CENTERY; @@ -1851,7 +1853,8 @@ static void CreateItemWindow(s32 arg0, s32 arg1) { } } -static BOOL CheckItemWindowSlide(void) { +static BOOL CheckItemWindowSlide(void) +{ UnkUiWork04 *temp_r31; if (itemWindowObj == 0) { @@ -1861,7 +1864,8 @@ static BOOL CheckItemWindowSlide(void) { return (temp_r31->unk03 != 0) ? FALSE : TRUE; } -static void KillItemWindow(void) { +static void KillItemWindow(void) +{ UnkUiWork04 *temp_r31; if (itemWindowObj) { @@ -1870,7 +1874,8 @@ static void KillItemWindow(void) { } } -static void SetItemWindowCurr(s32 arg0) { +static void SetItemWindowCurr(s32 arg0) +{ UnkUiWork04 *temp_r31; UnkUiWindowStruct *temp_r30; @@ -1886,7 +1891,8 @@ static void SetItemWindowCurr(s32 arg0) { } } -static void UpdateItemWindow(omObjData *arg0) { +static void UpdateItemWindow(omObjData *arg0) +{ Vec sp20; Vec sp14; Vec sp8; @@ -1914,14 +1920,16 @@ static void UpdateItemWindow(omObjData *arg0) { HuMemDirectFree(temp_r29->unk04); itemWindowObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); - } else { + } + else { var_r27 = 0; for (i = 0; i < temp_r29->unk02; i++) { if ((temp_r31->unk06[i] != -1) && (temp_r31->unk12[i] != -1)) { VECSubtract(&temp_r31->unk74[i], &temp_r31->unk2C[i], &sp20); if (VECMag(&sp20) <= 1.0f) { temp_r31->unk2C[i] = temp_r31->unk74[i]; - } else { + } + else { VECScale(&sp20, &sp20, 0.3f); VECAdd(&sp20, &temp_r31->unk2C[i], &temp_r31->unk2C[i]); var_r27 = 1; @@ -1937,9 +1945,9 @@ static void UpdateItemWindow(omObjData *arg0) { Hu3D2Dto3D(&sp14, 1, &sp14); BoardModelPosSetV(temp_r31->unk06[i], &sp14); BoardCameraRotGet(&sp8); - PSMTXRotRad(sp2C, 'y', MTXDegToRad(arg0->trans.x)); - PSMTXRotRad(sp5C, 'x', MTXDegToRad(sp8.x + 10.0f)); - PSMTXConcat(sp5C, sp2C, sp2C); + MTXRotRad(sp2C, 'y', MTXDegToRad(arg0->trans.x)); + MTXRotRad(sp5C, 'x', MTXDegToRad(sp8.x + 10.0f)); + MTXConcat(sp5C, sp2C, sp2C); BoardModelMtxSet(temp_r31->unk06[i], &sp2C); BoardModelRotSet(temp_r31->unk06[i], 0.0f, 0.0f, 0.0f); } @@ -1949,14 +1957,15 @@ static void UpdateItemWindow(omObjData *arg0) { } } -static void CreatePickerWindow(UnkUiWork01 *arg0, s32 arg1) { +static void CreatePickerWindow(UnkUiWork01 *arg0, s32 arg1) +{ float spC[2]; - + float posX; float posY; float yOfs; s32 var_r30; - #if VERSION_NTSC +#if VERSION_NTSC switch (GWGameStat.language) { case 1: yOfs = 0.0f; @@ -1965,17 +1974,18 @@ static void CreatePickerWindow(UnkUiWork01 *arg0, s32 arg1) { yOfs = 0.0f; break; } - #else +#else yOfs = 0; - #endif +#endif if (arg1 != 0) { var_r30 = MAKE_MESSID(0x10, 0x1A); - } else { + } + else { var_r30 = MAKE_MESSID(0x10, 0x1B); } HuWinMesMaxSizeGet(1, spC, var_r30); posX = -10000.0f; - posY = yOfs + (HU_DISP_HEIGHT-128); + posY = yOfs + (HU_DISP_HEIGHT - 128); arg0->unk06 = HuWinCreate(posX, posY, spC[0], spC[1], 0); HuWinBGTPLvlSet(arg0->unk06, 0.0f); HuWinMesSpeedSet(arg0->unk06, 0); @@ -1985,7 +1995,8 @@ static void CreatePickerWindow(UnkUiWork01 *arg0, s32 arg1) { } } -static void KillPickerWindow(UnkUiWork01 *arg0) { +static void KillPickerWindow(UnkUiWork01 *arg0) +{ if (arg0->unk06 != -1) { HuWinKill(arg0->unk06); arg0->unk06 = -1; diff --git a/src/game/board/view.c b/src/game/board/view.c index 38a6157c..5af81958 100755 --- a/src/game/board/view.c +++ b/src/game/board/view.c @@ -1,5 +1,6 @@ #include "game/board/view.h" #include "game/audio.h" +#include "game/disp.h" #include "game/gamework.h" #include "game/gamework_data.h" #include "game/hsfex.h" @@ -7,7 +8,6 @@ #include "game/pad.h" #include "game/sprite.h" #include "game/wipe.h" -#include "game/disp.h" #include "game/board/main.h" #include "game/board/model.h" @@ -54,55 +54,28 @@ static Process *viewProc; static s16 buttonWin = -1; static s16 focusMdl = -1; -static float overhead2DPos[][2] = { - { 48.0f, 72.0f }, - { HU_DISP_WIDTH-48, 72.0f }, - { 48.0f, HU_DISP_HEIGHT-72 }, - { HU_DISP_WIDTH-48, HU_DISP_HEIGHT-72 }, - { HU_DISP_CENTERX, 72.0f } -}; +static float overhead2DPos[][2] = { { 48.0f, 72.0f }, { HU_DISP_WIDTH - 48, 72.0f }, { 48.0f, HU_DISP_HEIGHT - 72 }, + { HU_DISP_WIDTH - 48, HU_DISP_HEIGHT - 72 }, { HU_DISP_CENTERX, 72.0f } }; -static float mapViewMinZ[] = { - -2000.0f, -1500.0f, -2200.0f, - -1800.0f, -2100.0f, -3000.0f, - -3000.0f, -1800.0f, -1800.0f -}; +static float mapViewMinZ[] = { -2000.0f, -1500.0f, -2200.0f, -1800.0f, -2100.0f, -3000.0f, -3000.0f, -1800.0f, -1800.0f }; -static float mapViewMaxZ[] = { - 2300.0f, 2500.0f, 2600.0f, - 2000.0f, 2300.0f, 2500.0f, - 2500.0f, 2000.0f, 2000.0f -}; +static float mapViewMaxZ[] = { 2300.0f, 2500.0f, 2600.0f, 2000.0f, 2300.0f, 2500.0f, 2500.0f, 2000.0f, 2000.0f }; -static float mapViewMinX[] = { - -3000.0f, -3000.0f, -3000.0f, - -3000.0f, -3000.0f, -3000.0f, - -3000.0f, -2000.0f, -2000.0f -}; +static float mapViewMinX[] = { -3000.0f, -3000.0f, -3000.0f, -3000.0f, -3000.0f, -3000.0f, -3000.0f, -2000.0f, -2000.0f }; -static float mapViewMaxX[] = { - 3000.0f, 3000.0f, 3000.0f, - 3000.0f, 3000.0f, 3000.0f, - 3000.0f, 1600.0f, 2000.0f -}; +static float mapViewMaxX[] = { 3000.0f, 3000.0f, 3000.0f, 3000.0f, 3000.0f, 3000.0f, 3000.0f, 1600.0f, 2000.0f }; -static float overheadCamZoom[] = { - 14370.0f, 14500.0f, 15000.0f, - 15000.0f, 13000.0f, 15000.0f, - 100.0f, 10000.0f, 10000.0f -}; +static float overheadCamZoom[] = { 14370.0f, 14500.0f, 15000.0f, 15000.0f, 13000.0f, 15000.0f, 100.0f, 10000.0f, 10000.0f }; -static float overheadCamPosZ[] = { - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, -160.0f, 0.0f -}; +static float overheadCamPosZ[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -160.0f, 0.0f }; -void BoardViewOverheadExec(s32 arg0) { +void BoardViewOverheadExec(s32 arg0) +{ if (BoardPauseDisableGet() == 0) { BoardPauseDisableSet(1); pauseDisableF = 1; - } else { + } + else { pauseDisableF = 0; } _SetFlag(0x1001C); @@ -128,13 +101,15 @@ void BoardViewOverheadExec(s32 arg0) { _ClearFlag(0x1001C); } -void BoardViewFocusGetPos(Vec *arg0) { +void BoardViewFocusGetPos(Vec *arg0) +{ if (arg0) { BoardModelPosGet(focusMdl, arg0); } } -static inline void BoardViewInlineFunc00(Vec *arg0, Vec *arg1, u16 arg2) { +static inline void BoardViewInlineFunc00(Vec *arg0, Vec *arg1, u16 arg2) +{ if (arg2 == 0) { arg2 = 1; } @@ -150,13 +125,15 @@ static inline void BoardViewInlineFunc00(Vec *arg0, Vec *arg1, u16 arg2) { } } -void BoardViewFocusSet(Vec *arg0, u16 arg1) { +void BoardViewFocusSet(Vec *arg0, u16 arg1) +{ u16 var_r31; if (BoardPauseDisableGet() == 0) { BoardPauseDisableSet(1); pauseDisableF = 1; - } else { + } + else { pauseDisableF = 0; } focusDestroyF = 1; @@ -164,13 +141,15 @@ void BoardViewFocusSet(Vec *arg0, u16 arg1) { HuPrcSleep(2); } -void BoardViewMoveStart(Vec *arg0, Vec *arg1, u16 arg2) { +void BoardViewMoveStart(Vec *arg0, Vec *arg1, u16 arg2) +{ u16 var_r31; if (BoardPauseDisableGet() == 0) { BoardPauseDisableSet(1); pauseDisableF = 1; - } else { + } + else { pauseDisableF = 0; } viewProc = HuPrcChildCreate(ExecStarView, 0x200A, 0x3800, 0, boardMainProc); @@ -180,26 +159,31 @@ void BoardViewMoveStart(Vec *arg0, Vec *arg1, u16 arg2) { HuPrcSleep(2); } -BOOL BoardViewMoveCheck(void) { +BOOL BoardViewMoveCheck(void) +{ return (viewMoveF != 0) ? TRUE : FALSE; } -void BoardViewMoveEnd(void) { +void BoardViewMoveEnd(void) +{ viewMoveF = 0; } -void BoardViewWait(void) { +void BoardViewWait(void) +{ viewMoveF = 0; while (viewProc != NULL) { HuPrcVSleep(); } } -void BoardViewMapExec(s32 arg0) { +void BoardViewMapExec(s32 arg0) +{ if (BoardPauseDisableGet() == 0) { BoardPauseDisableSet(1); pauseDisableF = 1; - } else { + } + else { pauseDisableF = 0; } viewProc = HuPrcChildCreate(ExecMapView, 0x200A, 0x3800, 0, boardMainProc); @@ -214,7 +198,8 @@ void BoardViewMapExec(s32 arg0) { } } -static void ExecMapView(void) { +static void ExecMapView(void) +{ Vec spC; float var_f29; float temp_f28; @@ -240,7 +225,8 @@ static void ExecMapView(void) { } if (HuPadBtn[GWPlayer[viewPlayer].port] & 0x100) { var_f29 = 40.0f; - } else { + } + else { var_f29 = 20.0f; } spC.x = spC.y = spC.z = 0.0f; @@ -274,7 +260,8 @@ static void ExecMapView(void) { HuPrcEnd(); } -static void ExecStarView(void) { +static void ExecStarView(void) +{ Vec sp8; float temp_f30; @@ -307,7 +294,8 @@ static void ExecStarView(void) { HuPrcEnd(); } -static void ExecOverheadView(void) { +static void ExecOverheadView(void) +{ u32 var_r31; if ((GWBoardGet() == BOARD_ID_MAIN3 || GWBoardGet() == BOARD_ID_MAIN6) && boardLightResetHook) { @@ -338,7 +326,8 @@ static void ExecOverheadView(void) { HuPrcEnd(); } -static void DestroyView(void) { +static void DestroyView(void) +{ if (focusMdl != -1) { BoardModelKill(focusMdl); focusMdl = -1; @@ -355,7 +344,8 @@ static void DestroyView(void) { viewProc = NULL; } -static void SetTargetView(void) { +static void SetTargetView(void) +{ Vec sp14; Vec sp8; @@ -370,7 +360,8 @@ static void SetTargetView(void) { sp8.z = 0.0f; BoardCameraMotionStartEx(focusMdl, &sp8, NULL, 3000.0f, -1.0f, 21); BoardCameraMotionWait(); - } else { + } + else { BoardModelPosSet(focusMdl, 0.0f, 0.0f, 0.0f); sp14.x = 0.0f; sp14.y = 0.0f; @@ -386,7 +377,8 @@ static void SetTargetView(void) { } } -static void DestroyFocus(void) { +static void DestroyFocus(void) +{ if (focusMdl != -1) { BoardModelKill(focusMdl); focusMdl = -1; @@ -396,7 +388,8 @@ static void DestroyFocus(void) { BoardCameraMoveSet(1); } -static void CreateButtonWin(void) { +static void CreateButtonWin(void) +{ float sp8[2]; float posX; float posY; @@ -404,39 +397,41 @@ static void CreateButtonWin(void) { if (viewControls != 2) { var_r31 = MAKE_MESSID(0x09, 0x05); - #if VERSION_PAL +#if VERSION_PAL HuWinMesMaxSizeGet(1, sp8, var_r31); - posX = 288-((sp8[0]/2)-32); - #endif + posX = 288 - ((sp8[0] / 2) - 32); +#endif posY = 286.0f; - } else { + } + else { var_r31 = MAKE_MESSID(0x10, 0x4D); - #if VERSION_PAL +#if VERSION_PAL posX = -10000.0f; posY = 324.0f; - #else +#else posY = 328.0f; - #endif - +#endif } HuWinMesMaxSizeGet(1, sp8, var_r31); - #if VERSION_NTSC +#if VERSION_NTSC posX = -10000.0f; - #endif +#endif buttonWin = HuWinCreate(posX, posY, sp8[0], sp8[1], 0); HuWinBGTPLvlSet(buttonWin, 0.0f); HuWinMesSpeedSet(buttonWin, 0); HuWinMesSet(buttonWin, var_r31); } -static void DestroyButtonWin(void) { +static void DestroyButtonWin(void) +{ if (buttonWin != -1) { HuWinKill(buttonWin); buttonWin = -1; } } -static void InitOverheadView(void) { +static void InitOverheadView(void) +{ Vec sp10; GXColor spA; s16 sp8; @@ -444,16 +439,9 @@ static void InitOverheadView(void) { OverheadWork *temp_r31; float *temp_r30; s32 i; - s32 sp1C[8] = { - DATA_MAKE_NUM(DATADIR_BOARD, 0x2E), - DATA_MAKE_NUM(DATADIR_BOARD, 0x2F), - DATA_MAKE_NUM(DATADIR_BOARD, 0x30), - DATA_MAKE_NUM(DATADIR_BOARD, 0x31), - DATA_MAKE_NUM(DATADIR_BOARD, 0x32), - DATA_MAKE_NUM(DATADIR_BOARD, 0x33), - DATA_MAKE_NUM(DATADIR_BOARD, 0x34), - DATA_MAKE_NUM(DATADIR_BOARD, 0x35) - }; + s32 sp1C[8] = { DATA_MAKE_NUM(DATADIR_BOARD, 0x2E), DATA_MAKE_NUM(DATADIR_BOARD, 0x2F), DATA_MAKE_NUM(DATADIR_BOARD, 0x30), + DATA_MAKE_NUM(DATADIR_BOARD, 0x31), DATA_MAKE_NUM(DATADIR_BOARD, 0x32), DATA_MAKE_NUM(DATADIR_BOARD, 0x33), + DATA_MAKE_NUM(DATADIR_BOARD, 0x34), DATA_MAKE_NUM(DATADIR_BOARD, 0x35) }; temp_r26 = omAddObjEx(boardObjMan, 0x1000, 0, 0, -1, UpdateOverheadView); overheadObj = temp_r26; @@ -472,7 +460,8 @@ static void InitOverheadView(void) { spA.r = 0x50; spA.g = 0x50; spA.b = 0x50; - } else { + } + else { GWCharColorGet(GWPlayer[i].character, &spA); } BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BOARD, 0x6C), 0x1770, 0, &sp8); @@ -505,13 +494,15 @@ static void InitOverheadView(void) { } } -static void DestroyOverheadView(void) { +static void DestroyOverheadView(void) +{ if (overheadObj) { OM_GET_WORK_PTR(overheadObj, OverheadWork)->unk00_field0 = 1; } } -static void UpdateOverheadView(omObjData *arg0) { +static void UpdateOverheadView(omObjData *arg0) +{ Vec sp20; Vec sp14; Vec sp8; @@ -545,7 +536,8 @@ static void UpdateOverheadView(omObjData *arg0) { } if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { var_r27 = 1; - } else { + } + else { var_r27 = 0; } for (i = 0; i < 5; i++) { @@ -555,9 +547,11 @@ static void UpdateOverheadView(omObjData *arg0) { sp20.z = 1000.0f; if (i != 4) { BoardSpacePosGet(0, GWPlayer[i].space_curr, &sp14); - } else if (var_r27 != 0) { + } + else if (var_r27 != 0) { sp14.x = sp14.y = sp14.z = 0.0f; - } else { + } + else { BoardSpacePosGet(0, BoardSpaceStarGetCurr(), &sp14); } Hu3D3Dto2D(&sp14, 1, &sp14); @@ -569,7 +563,8 @@ static void UpdateOverheadView(omObjData *arg0) { temp_f31 = VECMag(&sp8) / 32; if (i != 4) { var_r28 = i + 4; - } else { + } + else { var_r28 = 8; } HuSprZRotSet(temp_r31->unk02, var_r28, temp_f30); @@ -577,13 +572,15 @@ static void UpdateOverheadView(omObjData *arg0) { HuSprPosSet(temp_r31->unk02, var_r28, var_r29[0], var_r29[1]); if (i == 4 && (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2)) { BoardModelVisibilitySet(temp_r31->unk04, 0); - } else if (temp_r31->unk01 != 0) { + } + else if (temp_r31->unk01 != 0) { if (i != 4) { HuSprAttrReset(temp_r31->unk02, i, HUSPR_ATTR_DISPOFF); } HuSprAttrReset(temp_r31->unk02, var_r28, HUSPR_ATTR_DISPOFF); BoardModelVisibilitySet(temp_r31->unk04, 1); - } else { + } + else { if (i != 4) { HuSprAttrSet(temp_r31->unk02, i, HUSPR_ATTR_DISPOFF); } @@ -595,15 +592,16 @@ static void UpdateOverheadView(omObjData *arg0) { sp20.y = var_r29[1]; sp20.z = 1000.0f; BoardCameraRotGet(&sp8); - PSMTXRotRad(sp5C, 'x', MTXDegToRad(sp8.x)); - PSMTXRotRad(sp2C, 'y', MTXDegToRad(sp8.y)); - PSMTXConcat(sp2C, sp5C, sp2C); + MTXRotRad(sp5C, 'x', MTXDegToRad(sp8.x)); + MTXRotRad(sp2C, 'y', MTXDegToRad(sp8.y)); + MTXConcat(sp2C, sp5C, sp2C); BoardModelMtxSet(temp_r31->unk04, &sp2C); Hu3D2Dto3D(&sp20, 1, &sp20); BoardModelPosSetV(temp_r31->unk04, &sp20); } -static void WaitOverheadView(void) { +static void WaitOverheadView(void) +{ while (overheadObj) { HuPrcVSleep(); } diff --git a/src/game/chrman.c b/src/game/chrman.c index e98f50e1..0bfd8d99 100755 --- a/src/game/chrman.c +++ b/src/game/chrman.c @@ -1421,7 +1421,7 @@ static void UpdateItemHook(void) effectDustParam.unk0C.z = frandmod(10) - 5; CreateEffectDust(temp_r31->unk02, sp8.x, sp8.y, sp8.z, 20.0f, &effectDustParam); } - PSMTXIdentity(temp_r30->unk_F0); + MTXIdentity(temp_r30->unk_F0); temp_r25 = HuPrcCurrentGet(); for (var_r28 = 0; var_r28 < 32; var_r28++) { if (itemHookProcess[var_r28] == temp_r25) { diff --git a/src/game/data.c b/src/game/data.c index f76419c5..4686fa57 100644 --- a/src/game/data.c +++ b/src/game/data.c @@ -281,11 +281,18 @@ static void GetFileInfo(DataReadStat *read_stat, s32 file_num) { u32 *temp_ptr; temp_ptr = (u32 *)PTR_OFFSET(read_stat->dir, (file_num * 4))+1; +#ifdef TARGET_PC + byteswap_u32(temp_ptr); +#endif read_stat->file = PTR_OFFSET(read_stat->dir, *temp_ptr); temp_ptr = read_stat->file; read_stat->raw_len = *temp_ptr++; read_stat->comp_type = *temp_ptr++; read_stat->file = temp_ptr; +#ifdef TARGET_PC + byteswap_u32(&read_stat->raw_len); + byteswap_u32(&read_stat->comp_type); +#endif } void *HuDataRead(s32 data_num) diff --git a/src/game/fault.c b/src/game/fault.c index f6043a78..e18075e5 100644 --- a/src/game/fault.c +++ b/src/game/fault.c @@ -23,7 +23,11 @@ static RGBColor XFB_Colors[5] = { { 0x40, 0x80, 0x80 } }; +#ifdef TARGET_PC +u8 Ascii8x8_1bpp[0x800]; +#else #include "Ascii8x8_1bpp.inc" +#endif static XFBGeometry XFB_Geometry; @@ -44,26 +48,29 @@ static void XFB_CR(s32 arg0, s32* arg1, s32* arg2); void OSPanic(const char* file, int line, const char* msg, ...) { static char* titleMes = "OSPanic encounterd:"; - va_list sp78; + va_list args; s32 sp74; s32 sp70; - char sp84[1024]; + char buffer[1024]; s32 puts; sp74 = x_start = 0x10; sp70 = y_start = 0x20; puts = XFB_puts((s8*)titleMes, sp74, sp70); XFB_CR(puts + 1, &sp74, &sp70); - sprintf(sp84, "%s:%d", file, line); - puts = XFB_puts((s8*)sp84, sp74, sp70); + sprintf(buffer, "%s:%d", file, line); + puts = XFB_puts((s8*)buffer, sp74, sp70); XFB_CR(puts, &sp74, &sp70); - va_start(sp78, msg); - vsnprintf(sp84, 0x400U, msg, &sp78[0]); - puts = XFB_puts((s8*)sp84, sp74, sp70); + va_start(args, msg); + vsnprintf(buffer, 0x400U, msg, &args[0]); +#ifdef TARGET_PC + fputs(buffer, stderr); +#endif + puts = XFB_puts((s8*)buffer, sp74, sp70); XFB_CR(puts, &sp74, &sp70); XFB_WriteBackCache(); PPCHalt(); - va_end(sp78); + va_end(args); } void HuFaultInitXfbDirectDraw(GXRenderModeObj *mode) { diff --git a/src/game/flag.c b/src/game/flag.c index 26cdb6c8..4f4b4c74 100644 --- a/src/game/flag.c +++ b/src/game/flag.c @@ -1,6 +1,9 @@ -#include "dolphin.h" #include "game/gamework_data.h" +#ifdef TARGET_PC +#include "string.h" +#endif + static u8 _Sys_Flag[16]; static u8 *GetFlagPtr(u32 flag) @@ -39,4 +42,4 @@ void _ClearFlag(u32 flag) void _InitFlag(void) { memset(_Sys_Flag, 0, sizeof(_Sys_Flag)); -} \ No newline at end of file +} diff --git a/src/game/frand.c b/src/game/frand.c index 69e83264..5d1407f9 100644 --- a/src/game/frand.c +++ b/src/game/frand.c @@ -2,6 +2,8 @@ static u32 frand_seed; +extern s32 rand8(void); + static inline u32 frandom(u32 param) { s32 rand2, rand3; @@ -36,4 +38,4 @@ u32 frandmod(u32 arg0) { frand_seed = frandom(frand_seed); ret = (frand_seed & 0x7FFFFFFF)%arg0; return ret; -} \ No newline at end of file +} diff --git a/src/game/gamework.c b/src/game/gamework.c index 0100278f..3c066ff6 100644 --- a/src/game/gamework.c +++ b/src/game/gamework.c @@ -4,14 +4,14 @@ #include "string.h" #include "version.h" -s16 GwLanguage = 1; -s16 GwLanguageSave = -1; +SHARED_SYM s16 GwLanguage = 1; +SHARED_SYM s16 GwLanguageSave = -1; -GameStat GWGameStatDefault; -GameStat GWGameStat; -SystemState GWSystem; -PlayerState GWPlayer[4]; -PlayerConfig GWPlayerCfg[4]; +SHARED_SYM GameStat GWGameStatDefault; +SHARED_SYM GameStat GWGameStat; +SHARED_SYM SystemState GWSystem; +SHARED_SYM PlayerState GWPlayer[4]; +SHARED_SYM PlayerConfig GWPlayerCfg[4]; static inline void GWErase(void) { @@ -39,6 +39,13 @@ static inline void InitPlayerConfig(void) } } +// TODO: get these properly declared somewhere +extern void GWRumbleSet(s32 value); +extern void GWMGExplainSet(s32 value); +extern void GWMGShowComSet(s32 value); +extern void GWMessSpeedSet(s32 value); +extern void GWSaveModeSet(s32 value); + static inline void ResetBoardSettings(void) { GWRumbleSet(1); diff --git a/src/game/hsfanim.c b/src/game/hsfanim.c index b5a73d37..6d13b267 100755 --- a/src/game/hsfanim.c +++ b/src/game/hsfanim.c @@ -1,4 +1,5 @@ #include "game/hsfanim.h" +#include "dolphin/gx/GXStruct.h" #include "game/hsfdraw.h" #include "game/init.h" #include "game/memory.h" @@ -315,7 +316,7 @@ void Hu3DAnimExec(void) { for (i = 0; i < HU3D_TEXSCROLL_MAX; i++, var_r31++) { if (var_r31->unk02 != -1) { if (Hu3DPauseF != 0 && !(var_r31->unk00 & 8)) { - PSMTXRotRad(var_r31->unk3C, 'Z', MTXDegToRad(var_r31->unk34)); + MTXRotRad(var_r31->unk3C, 'Z', MTXDegToRad(var_r31->unk34)); mtxTransCat(var_r31->unk3C, var_r31->unk04.x, var_r31->unk04.y, var_r31->unk04.z); } else { if (var_r31->unk00 & 1) { @@ -348,7 +349,7 @@ void Hu3DAnimExec(void) { var_r31->unk34 += 360.0f; } } - PSMTXRotRad(var_r31->unk3C, 'Z', MTXDegToRad(var_r31->unk34)); + MTXRotRad(var_r31->unk3C, 'Z', MTXDegToRad(var_r31->unk34)); mtxTransCat(var_r31->unk3C, var_r31->unk04.x, var_r31->unk04.y, var_r31->unk04.z); } } @@ -400,7 +401,7 @@ s16 Hu3DTexScrollCreate(s16 arg0, char *arg1) { var_r31->unk00 = 0; var_r31->unk04.x = var_r31->unk04.y = var_r31->unk04.z = 0.0f; var_r31->unk34 = 0.0f; - PSMTXIdentity(var_r31->unk3C); + MTXIdentity(var_r31->unk3C); return var_r28; } @@ -686,16 +687,16 @@ static void particleFunc(ModelData *arg0, Mtx arg1) { temp_r31 = arg0->unk_120; temp_r22 = temp_r31->unk_44; if (HmfInverseMtxF3X3(arg1, sp128) == 0) { - PSMTXIdentity(sp128); + MTXIdentity(sp128); } - PSMTXReorder(sp128, sp8); + MTXReorder(sp128, sp8); if ((Hu3DPauseF == 0 || (arg0->attr & HU3D_ATTR_NOPAUSE)) && temp_r31->unk_54 && temp_r31->unk_38 != GlobalCounter) { var_r17 = temp_r31->unk_54; var_r17(arg0, temp_r31, arg1); } var_r29 = temp_r31->unk_48; var_r30 = temp_r31->unk_4C; - PSMTXROMultVecArray(sp8, &basePos[0], sp38, 4); + MTXROMultVecArray(sp8, &basePos[0], sp38, 4); for (i = 0, var_r19 = 0; i < temp_r31->unk_30; i++, var_r29++) { if (var_r29->unk2C && (var_r29->unk06 & Hu3DCameraBit)) { if (!var_r29->unk30) { @@ -721,9 +722,9 @@ static void particleFunc(ModelData *arg0, Mtx arg1) { VECScale(&basePos[1], &sp98[1], var_r29->unk2C); VECScale(&basePos[2], &sp98[2], var_r29->unk2C); VECScale(&basePos[3], &sp98[3], var_r29->unk2C); - PSMTXRotRad(spC8, 'Z', var_r29->unk30); - PSMTXConcat(sp128, spC8, spF8); - PSMTXMultVecArray(spF8, sp98, sp68, 4); + MTXRotRad(spC8, 'Z', var_r29->unk30); + MTXConcat(sp128, spC8, spF8); + MTXMultVecArray(spF8, sp98, sp68, 4); VECAdd(&sp68[0], &var_r29->unk34, var_r30++); VECAdd(&sp68[1], &var_r29->unk34, var_r30++); VECAdd(&sp68[2], &var_r29->unk34, var_r30++); @@ -799,7 +800,7 @@ static void particleFunc(ModelData *arg0, Mtx arg1) { temp_r24 = &temp_r22->bmp[temp_r27->bmpNo]; temp_f29 = (float) temp_r27->sizeX / temp_r24->sizeX; temp_f30 = (float) temp_r27->sizeY / temp_r24->sizeY; - PSMTXScale(sp128, temp_f29, temp_f30, 1.0f); + MTXScale(sp128, temp_f29, temp_f30, 1.0f); temp_f29 = (float) temp_r27->startX / temp_r24->sizeX; temp_f30 = (float) temp_r27->startY / temp_r24->sizeY; mtxTransCat(sp128, temp_f29, temp_f30, 0.0f); @@ -824,13 +825,13 @@ static void particleFunc(ModelData *arg0, Mtx arg1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_RGBA6, 0); - GXSetArray(GX_VA_POS, temp_r31->unk_4C, 0xC); + GXSETARRAY(GX_VA_POS, temp_r31->unk_4C, temp_r31->unk_30 * 4 * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GXSetArray(GX_VA_CLR0, &temp_r31->unk_48->unk40, 0x44); + GXSETARRAY(GX_VA_CLR0, &temp_r31->unk_48->unk40, temp_r31->unk_30 * sizeof(GXColor), 0x44); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); - GXSetArray(GX_VA_TEX0, baseST, 8); + GXSETARRAY(GX_VA_TEX0, baseST, sizeof(baseST), 8); GXCallDisplayList(temp_r31->unk_50, temp_r31->unk_40); } if (shadowModelDrawF == 0) { diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index fce142dd..fbac2536 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -123,7 +123,7 @@ void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2) { temp_r28 = arg0->hsfData; if (arg0->attr & HU3D_ATTR_HOOKFUNC) { temp_r31 = &DrawObjData[DrawObjIdx]; - PSMTXCopy(arg1, temp_r31->matrix); + MTXCopy(arg1, temp_r31->matrix); sp8.x = temp_r31->matrix[0][3]; sp8.y = temp_r31->matrix[1][3]; sp8.z = temp_r31->matrix[2][3]; @@ -139,7 +139,7 @@ void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2) { for (i = 0; i < 8; i++) { BmpPtrBak[i] = (HsfAttribute*) -1; } - PSMTXCopy(arg1, MTXBuf[0]); + MTXCopy(arg1, MTXBuf[0]); scaleBuf[0] = *arg2; MTXIdx = 1; CancelTRXF = 0; @@ -220,12 +220,12 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) { if (CancelTRXF == 0) { if (arg1->data.cenvCnt != 0 && hookIdx == -1) { temp_r21 = arg1 - temp_r20->object; - PSMTXConcat(MTXBuf[0], temp_r20->matrix->data[temp_r21 + temp_r20->matrix->base_idx], MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[0], temp_r20->matrix->data[temp_r21 + temp_r20->matrix->base_idx], MTXBuf[MTXIdx]); } else { - PSMTXScale(sp1C, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z); + MTXScale(sp1C, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z); mtxRotCat(sp1C, var_r30->rot.x, var_r30->rot.y, var_r30->rot.z); mtxTransCat(sp1C, var_r30->pos.x, var_r30->pos.y, var_r30->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], sp1C, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], sp1C, MTXBuf[MTXIdx]); } temp_r28 = &scaleBuf[MTXIdx]; temp_r24 = temp_r28 - 1; @@ -234,29 +234,29 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) { temp_r28->z = temp_r24->z * var_r30->scale.z; temp_r29->scale = *temp_r28; if (arg1->flags & 1) { - PSMTXInverse(MTXBuf[MTXIdx], sp1C); + MTXInverse(MTXBuf[MTXIdx], sp1C); sp1C[0][3] = sp1C[1][3] = sp1C[2][3] = 0.0f; - PSMTXConcat(MTXBuf[MTXIdx], sp1C, temp_r29->matrix); + MTXConcat(MTXBuf[MTXIdx], sp1C, temp_r29->matrix); mtxScaleCat(temp_r29->matrix, temp_r28->x, temp_r28->y, temp_r28->z); } else { - PSMTXCopy(MTXBuf[MTXIdx], temp_r29->matrix); + MTXCopy(MTXBuf[MTXIdx], temp_r29->matrix); } MTXIdx++; var_r18 = 1; } else { if (arg1->flags & 1) { - PSMTXInverse(MTXBuf[MTXIdx - 1], sp1C); + MTXInverse(MTXBuf[MTXIdx - 1], sp1C); sp1C[0][3] = sp1C[1][3] = sp1C[2][3] = 0.0f; - PSMTXConcat(MTXBuf[MTXIdx - 1], sp1C, temp_r29->matrix); + MTXConcat(MTXBuf[MTXIdx - 1], sp1C, temp_r29->matrix); mtxScaleCat(temp_r29->matrix, scaleBuf[MTXIdx - 1].x, scaleBuf[MTXIdx - 1].y, scaleBuf[MTXIdx - 1].z); } else { - PSMTXCopy(MTXBuf[MTXIdx - 1], temp_r29->matrix); + MTXCopy(MTXBuf[MTXIdx - 1], temp_r29->matrix); } temp_r29->scale = scaleBuf[MTXIdx - 1]; CancelTRXF = 0; var_r18 = 0; } - PSMTXCopy(temp_r29->matrix, temp_r25->matrix); + MTXCopy(temp_r29->matrix, temp_r25->matrix); if (temp_r25->hook != -1) { temp_r31 = &Hu3DData[temp_r25->hook]; if (!(temp_r31->attr & HU3D_ATTR_DISPOFF)) { @@ -268,11 +268,11 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) { } sp8 = hookIdx; hookIdx = temp_r25->hook; - PSMTXScale(sp1C, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z); + MTXScale(sp1C, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z); mtxRotCat(sp1C, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); mtxTransCat(sp1C, temp_r31->pos.x, temp_r31->pos.y, temp_r31->pos.z); - PSMTXConcat(sp1C, temp_r31->unk_F0, sp1C); - PSMTXConcat(temp_r29->matrix, sp1C, MTXBuf[MTXIdx]); + MTXConcat(sp1C, temp_r31->unk_F0, sp1C); + MTXConcat(temp_r29->matrix, sp1C, MTXBuf[MTXIdx]); temp_r28 = &scaleBuf[MTXIdx]; temp_r24 = temp_r28 - 1; temp_r28->x = temp_r24->x * temp_r31->scale.x; @@ -377,8 +377,8 @@ s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2) { temp_f31 = (temp_r29->x - temp_r31->x) * 0.5; temp_f30 = (temp_r29->y - temp_r31->y) * 0.5; temp_f29 = (temp_r29->z - temp_r31->z) * 0.5; - PSMTXTrans(sp28, temp_f31 + temp_r31->x, temp_f30 + temp_r31->y, temp_f29 + temp_r31->z); - PSMTXConcat(arg2, sp28, sp28); + MTXTrans(sp28, temp_f31 + temp_r31->x, temp_f30 + temp_r31->y, temp_f29 + temp_r31->z); + MTXConcat(arg2, sp28, sp28); temp_f21 = var_f26 * sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30 + temp_f29 * temp_f29); temp_f20 = sp28[0][3]; temp_f19 = sp28[1][3]; @@ -483,19 +483,19 @@ static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXSetArray(GX_VA_POS, temp_r28->data.vertex->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_POS, temp_r28->data.vertex->data, temp_r28->data.vertex->count * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); if (temp_r29->hsfData->cenvCnt == 0) { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_S8, 0); - GXSetArray(GX_VA_NRM, temp_r28->data.normal->data, 3); + GXSETARRAY(GX_VA_NRM, temp_r28->data.normal->data, temp_r28->data.vertex->count * 3, 3); } else { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); - GXSetArray(GX_VA_NRM, temp_r28->data.normal->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_NRM, temp_r28->data.normal->data, temp_r28->data.vertex->count * sizeof(Vec), sizeof(Vec)); } if (var_r22 & 4) { GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GXSetArray(GX_VA_CLR0, temp_r28->data.color->data, 4); + GXSETARRAY(GX_VA_CLR0, temp_r28->data.color->data, temp_r28->data.vertex->count * sizeof(GXColor), sizeof(GXColor)); } GXSetZCompLoc(1); } @@ -556,7 +556,7 @@ static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXSetArray(GX_VA_POS, temp_r28->data.vertex->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_POS, temp_r28->data.vertex->data, temp_r28->data.vertex->count * sizeof(Vec), sizeof(Vec)); if (var_r22 & 2) { GXSetVtxDesc(GX_VA_NBT, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NBT, GX_NRM_NBT, GX_S16, 8); @@ -564,19 +564,19 @@ static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1) { GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); if (temp_r29->hsfData->cenvCnt == 0) { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_S8, 0); - GXSetArray(GX_VA_NRM, temp_r28->data.normal->data, 3); + GXSETARRAY(GX_VA_NRM, temp_r28->data.normal->data, temp_r28->data.normal->count * 3, 3); } else { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); - GXSetArray(GX_VA_NRM, temp_r28->data.normal->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_NRM, temp_r28->data.normal->data, temp_r28->data.normal->count * sizeof(Vec), sizeof(Vec)); } } GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GXSetArray(GX_VA_TEX0, temp_r28->data.st->data, 2 * sizeof(float)); + GXSETARRAY(GX_VA_TEX0, temp_r28->data.st->data, temp_r28->data.st->count * sizeof(Vec2f), sizeof(Vec2f)); if (var_r22 & 4) { GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GXSetArray(GX_VA_CLR0, temp_r28->data.color->data, 4); + GXSETARRAY(GX_VA_CLR0, temp_r28->data.color->data, temp_r28->data.color->count * sizeof(GXColor), sizeof(GXColor)); } GXSetZCompLoc(0); } @@ -795,7 +795,7 @@ static s32 SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1) { if (var_f31 < 0.1) { var_f31 = 0.1f; } - PSMTXCopy(hiliteMtx, sp20); + MTXCopy(hiliteMtx, sp20); mtxScaleCat(sp20, var_f31, var_f31, var_f31); GXLoadTexMtxImm(sp20, GX_TEXMTX7, GX_MTX2x4); var_r30++; @@ -935,12 +935,12 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { var_r30 = var_r31 = 1; temp_r29 = &temp_r19->data.attribute[arg1->attrs[0]]; if (temp_r29->unk28 != 1.0f || temp_r29->unk2C != 1.0f) { - PSMTXScale(sp54, 1.0f / temp_r29->unk28, 1.0f / temp_r29->unk2C, 1.0f); + MTXScale(sp54, 1.0f / temp_r29->unk28, 1.0f / temp_r29->unk2C, 1.0f); mtxTransCat(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f); GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]); } else if (temp_r29->unk30 != 0.0f || temp_r29->unk34 != 0.0f) { - PSMTXTrans(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f); + MTXTrans(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f); GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]); } else { @@ -953,13 +953,13 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { GXLoadTexMtxImm(Hu3DTexScrData[temp_r28->unk04].unk3C, GX_TEXMTX0, GX_MTX2x4); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX0, GX_FALSE, GX_PTIDENTITY); } else if (temp_r28->unk00 & 4) { - PSMTXScale(sp54, 1.0f / temp_r28->unk20, 1.0f / temp_r28->unk24, 1.0f / temp_r28->unk28); + MTXScale(sp54, 1.0f / temp_r28->unk20, 1.0f / temp_r28->unk24, 1.0f / temp_r28->unk28); mtxRotCat(sp54, temp_r28->unk14, temp_r28->unk18, temp_r28->unk1C); mtxTransCat(sp54, -temp_r28->unk08, -temp_r28->unk0C, -temp_r28->unk10); GXLoadTexMtxImm(sp54, GX_TEXMTX0, GX_MTX2x4); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX0, GX_FALSE, GX_PTIDENTITY); } else if (temp_r28->unk00 & 1) { - PSMTXScale(sp54, temp_r28->unk2C, temp_r28->unk30, 1.0f); + MTXScale(sp54, temp_r28->unk2C, temp_r28->unk30, 1.0f); mtxTransCat(sp54, temp_r28->unk34, temp_r28->unk38, 0.0f); GXLoadTexMtxImm(sp54, GX_TEXMTX0, GX_MTX2x4); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX0, GX_FALSE, GX_PTIDENTITY); @@ -1056,7 +1056,7 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { if (var_f31 < 0.1) { var_f31 = 0.1f; } - PSMTXCopy(hiliteMtx, sp54); + MTXCopy(hiliteMtx, sp54); mtxScaleCat(sp54, var_f31, var_f31, var_f31); GXLoadTexMtxImm(sp54, GX_TEXMTX7, GX_MTX2x4); var_r31++; @@ -1131,7 +1131,7 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { temp_r23 = (u16) var_r30; var_r30++; } else if (temp_r28->unk00 & 4) { - PSMTXScale(sp54, 1.0f / temp_r28->unk20, 1.0f / temp_r28->unk24, 1.0f / temp_r28->unk28); + MTXScale(sp54, 1.0f / temp_r28->unk20, 1.0f / temp_r28->unk24, 1.0f / temp_r28->unk28); mtxRotCat(sp54, temp_r28->unk14, temp_r28->unk18, temp_r28->unk1C); mtxTransCat(sp54, -temp_r28->unk08, -temp_r28->unk0C, -temp_r28->unk10); GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4); @@ -1139,7 +1139,7 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { temp_r23 = (u16) var_r30; var_r30++; } else if (temp_r28->unk00 & 1) { - PSMTXScale(sp54, temp_r28->unk2C, temp_r28->unk30, 1.0f); + MTXScale(sp54, temp_r28->unk2C, temp_r28->unk30, 1.0f); mtxTransCat(sp54, temp_r28->unk34, temp_r28->unk38, 0.0f); GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4); GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]); @@ -1152,12 +1152,12 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { } } else { if (temp_r29->unk28 != 1.0f || temp_r29->unk2C != 1.0f) { - PSMTXScale(sp54, 1.0f / temp_r29->unk28, 1.0f / temp_r29->unk2C, 1.0f); + MTXScale(sp54, 1.0f / temp_r29->unk28, 1.0f / temp_r29->unk2C, 1.0f); mtxTransCat(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f); GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4); GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]); } else if (temp_r29->unk30 != 0.0f || temp_r29->unk34 != 0.0f) { - PSMTXTrans(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f); + MTXTrans(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f); GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4); GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]); } else { @@ -1298,11 +1298,11 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); } - PSMTXScale(sp54, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z); - PSMTXConcat(arg0->matrix, sp54, sp54); + MTXScale(sp54, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z); + MTXConcat(arg0->matrix, sp54, sp54); sp54[0][3] = sp54[1][3] = sp54[2][3] = 0.0f; - PSMTXConcat(sp54, Hu3DCameraMtxXPose, sp54); - PSMTXConcat(refMtx, sp54, sp54); + MTXConcat(sp54, Hu3DCameraMtxXPose, sp54); + MTXConcat(refMtx, sp54, sp54); GXLoadTexMtxImm(sp54, 0x36, GX_MTX2x4); var_r31++; var_r30++; @@ -1320,7 +1320,7 @@ static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) { if (var_f31 < 0.1) { var_f31 = 0.1f; } - PSMTXCopy(hiliteMtx, sp54); + MTXCopy(hiliteMtx, sp54); mtxScaleCat(sp54, var_f31, var_f31, var_f31); GXLoadTexMtxImm(sp54, 0x33, GX_MTX2x4); if (var_r20 == -1) { @@ -1551,11 +1551,11 @@ static void SetReflect(HsfDrawObject *arg0, s16 arg1, s16 arg2, u8 arg3) { GXSetTevColorOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(arg1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); GXSetTevAlphaOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); - PSMTXScale(sp3C, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z); - PSMTXConcat(arg0->matrix, sp3C, spC); + MTXScale(sp3C, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z); + MTXConcat(arg0->matrix, sp3C, spC); spC[0][3] = spC[1][3] = spC[2][3] = 0.0f; - PSMTXConcat(spC, Hu3DCameraMtxXPose, sp3C); - PSMTXConcat(refMtx, sp3C, spC); + MTXConcat(spC, Hu3DCameraMtxXPose, sp3C); + MTXConcat(refMtx, sp3C, spC); GXLoadTexMtxImm(spC, GX_TEXMTX8, GX_MTX2x4); } @@ -1604,6 +1604,9 @@ static s32 SetShadowTex(void) { GXInitTexObj(&sp8, Hu3DShadowData.unk_04, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&sp8, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(&sp8, shadowMapNo); +#ifdef TARGET_PC + GXDestroyTexObj(&sp8); +#endif } static void SetShadow(HsfDrawObject *arg0, s16 arg1, s16 arg2) { @@ -1644,19 +1647,19 @@ static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXSetArray(GX_VA_POS, temp_r31->data.vertex->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_POS, temp_r31->data.vertex->data, temp_r31->data.vertex->count * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); if (temp_r28->hsfData->cenvCnt == 0) { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_S8, 0); - GXSetArray(GX_VA_NRM, temp_r31->data.normal->data, 3); + GXSETARRAY(GX_VA_NRM, temp_r31->data.normal->data, temp_r31->data.vertex->count * 3, 3); } else { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); - GXSetArray(GX_VA_NRM, temp_r31->data.normal->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_NRM, temp_r31->data.normal->data, temp_r31->data.vertex->count * sizeof(Vec), sizeof(Vec)); } if (var_r30 & 4) { GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GXSetArray(GX_VA_CLR0, temp_r31->data.color->data, 4); + GXSETARRAY(GX_VA_CLR0, temp_r31->data.color->data, temp_r31->data.vertex->count * sizeof(GXColor), sizeof(GXColor)); } GXSetZCompLoc(1); } @@ -1677,7 +1680,7 @@ static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXSetArray(GX_VA_POS, temp_r31->data.vertex->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_POS, temp_r31->data.vertex->data, temp_r31->data.vertex->count * sizeof(Vec), sizeof(Vec)); if (var_r30 & 2) { GXSetVtxDesc(GX_VA_NBT, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NBT, GX_NRM_NBT, GX_S16, 8); @@ -1685,19 +1688,19 @@ static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1) { GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); if (temp_r28->hsfData->cenvCnt == 0) { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_RGB8, 0); - GXSetArray(GX_VA_NRM, temp_r31->data.normal->data, 3); + GXSETARRAY(GX_VA_NRM, temp_r31->data.normal->data, temp_r31->data.vertex->count * 3, 3); } else { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); - GXSetArray(GX_VA_NRM, temp_r31->data.normal->data, 3 * sizeof(float)); + GXSETARRAY(GX_VA_NRM, temp_r31->data.normal->data, temp_r31->data.vertex->count * sizeof(Vec), sizeof(Vec)); } } GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GXSetArray(GX_VA_TEX0, temp_r31->data.st->data, 2 * sizeof(float)); + GXSETARRAY(GX_VA_TEX0, temp_r31->data.st->data, temp_r31->data.vertex->count * sizeof(Vec2f), sizeof(Vec2f)); if (var_r30 & 4) { GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GXSetArray(GX_VA_CLR0, temp_r31->data.color->data, 4); + GXSETARRAY(GX_VA_CLR0, temp_r31->data.color->data, temp_r31->data.vertex->count * sizeof(GXColor), sizeof(GXColor)); } GXSetZCompLoc(0); } @@ -1837,6 +1840,10 @@ static s32 LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 GXInitTexObjLOD(&sp1C, GX_LIN_MIP_LIN, GX_LINEAR, 0.0f, arg1->maxLod - 1, 0.0f, GX_TRUE, GX_TRUE, GX_ANISO_1); } GXLoadTexObj(&sp1C, arg3); +#ifdef TARGET_PC + GXDestroyTexObj(&sp1C); + GXDestroyTlutObj(&sp10); +#endif } static void objNull(ModelData *arg0, HsfObject *arg1) { @@ -1854,10 +1861,10 @@ static void objNull(ModelData *arg0, HsfObject *arg1) { var_r31 = &arg1->data.curr; } if (arg0->hsfData->cenvCnt == 0 || hookIdx != -1) { - PSMTXScale(sp8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXScale(sp8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); mtxRotCat(sp8, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); mtxTransCat(sp8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], sp8, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], sp8, MTXBuf[MTXIdx]); } temp_r28 = &scaleBuf[MTXIdx]; temp_r27 = temp_r28 - 1; @@ -1893,10 +1900,10 @@ static void objRoot(ModelData *arg0, HsfObject *arg1) { var_r31 = &arg1->data.curr; } if (arg0->hsfData->cenvCnt == 0 || hookIdx != -1) { - PSMTXScale(sp8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXScale(sp8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); mtxRotCat(sp8, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); mtxTransCat(sp8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], sp8, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], sp8, MTXBuf[MTXIdx]); } temp_r30 = &scaleBuf[MTXIdx]; temp_r29 = temp_r30 - 1; @@ -1932,10 +1939,10 @@ static void objJoint(ModelData *arg0, HsfObject *arg1) { var_r31 = &arg1->data.curr; } if (arg0->hsfData->cenvCnt == 0 || hookIdx != -1) { - PSMTXScale(sp8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXScale(sp8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); mtxRotCat(sp8, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); mtxTransCat(sp8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], sp8, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], sp8, MTXBuf[MTXIdx]); } temp_r28 = &scaleBuf[MTXIdx]; temp_r27 = temp_r28 - 1; @@ -1970,10 +1977,10 @@ static void objMap(ModelData *arg0, HsfObject *arg1) { } else { var_r31 = &arg1->data.curr; } - PSMTXScale(spC, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXScale(spC, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); mtxRotCat(spC, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); mtxTransCat(spC, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], spC, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], spC, MTXBuf[MTXIdx]); temp_r30 = &scaleBuf[MTXIdx]; temp_r29 = temp_r30 - 1; temp_r30->x = temp_r29->x * var_r31->scale.x; @@ -2004,10 +2011,10 @@ static void objReplica(ModelData *arg0, HsfObject *arg1) { var_r31 = &arg1->data.curr; } mtxRot(spC, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); - PSMTXScale(sp3C, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); - PSMTXConcat(spC, sp3C, sp3C); + MTXScale(sp3C, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXConcat(spC, sp3C, sp3C); mtxTransCat(sp3C, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], sp3C, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], sp3C, MTXBuf[MTXIdx]); scaleBuf[MTXIdx].x = var_r31->scale.x * scaleBuf[MTXIdx - 1].x; scaleBuf[MTXIdx].y = var_r31->scale.y * scaleBuf[MTXIdx - 1].y; scaleBuf[MTXIdx].z = var_r31->scale.z * scaleBuf[MTXIdx - 1].z; @@ -2112,13 +2119,13 @@ void Hu3DDrawPost(void) { DLBufStartP = Hu3DObjInfoP->dlBuf; DrawData = Hu3DObjInfoP->drawData; GXLoadPosMtxImm(temp_r28->matrix, GX_PNMTX0); - PSMTXInvXpose(temp_r28->matrix, sp120); + MTXInvXpose(temp_r28->matrix, sp120); GXLoadNrmMtxImm(sp120, 0); if (Hu3DShadowF != 0 && Hu3DShadowCamBit != 0 && (Hu3DObjInfoP->flags & 8)) { - PSMTXInverse(Hu3DCameraMtx, spF0); - PSMTXConcat(spF0, temp_r28->matrix, sp120); - PSMTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp150); - PSMTXConcat(sp150, sp120, sp120); + MTXInverse(Hu3DCameraMtx, spF0); + MTXConcat(spF0, temp_r28->matrix, sp120); + MTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp150); + MTXConcat(sp150, sp120, sp120); GXLoadTexMtxImm(sp120, GX_TEXMTX9, GX_MTX3x4); var_r19 = 1; } else { @@ -2126,13 +2133,13 @@ void Hu3DDrawPost(void) { } if (temp_r28->model->unk_02 != 0) { if (var_r19 == 0) { - PSMTXInverse(Hu3DCameraMtx, spF0); + MTXInverse(Hu3DCameraMtx, spF0); } for (i = 0, var_r21 = 1; i < 4; i++, var_r21 <<= 1) { if (var_r21 & temp_r28->model->unk_02) { - PSMTXConcat(spF0, temp_r28->matrix, sp120); - PSMTXConcat(Hu3DProjection[i].unk_68, Hu3DProjection[i].unk_38, sp150); - PSMTXConcat(sp150, sp120, sp120); + MTXConcat(spF0, temp_r28->matrix, sp120); + MTXConcat(Hu3DProjection[i].unk_68, Hu3DProjection[i].unk_38, sp150); + MTXConcat(sp150, sp120, sp120); GXLoadTexMtxImm(sp120, texMtxTbl[i + 3], GX_MTX3x4); } } @@ -2142,32 +2149,32 @@ void Hu3DDrawPost(void) { temp_r22 = &Hu3DGlobalLight[temp_r28->model->unk_03]; sp30 = temp_r22->unk_28; if (temp_r22->unk_00 & 0x8000) { - PSMTXMultVecSR(Hu3DCameraMtx, &sp30, &sp30); + MTXMultVecSR(Hu3DCameraMtx, &sp30, &sp30); } temp_f30 = VECDotProduct(&sp30, &sp54); temp_f30 *= 10000.0f; OSf32tos16(&temp_f30, &sp8); if (sp8 == -10000) { - PSMTXScale(hiliteMtx, 0.0f, 0.0f, 0.0f); + MTXScale(hiliteMtx, 0.0f, 0.0f, 0.0f); } else { C_VECHalfAngle(&sp30, &sp54, &sp3C); sp3C.x = -sp3C.x; sp3C.y = -sp3C.y; sp3C.z = -sp3C.z; - PSMTXScale(sp60, 1.0f / temp_r28->scale.x, 1.0f / temp_r28->scale.y, 1.0f / temp_r28->scale.z); - PSMTXConcat(temp_r28->matrix, sp60, spC0); + MTXScale(sp60, 1.0f / temp_r28->scale.x, 1.0f / temp_r28->scale.y, 1.0f / temp_r28->scale.z); + MTXConcat(temp_r28->matrix, sp60, spC0); spC0[0][3] = spC0[1][3] = spC0[2][3] = 0.0f; - PSMTXInvXpose(spC0, sp90); + MTXInvXpose(spC0, sp90); if (sp8 == 10000) { - PSMTXIdentity(spC0); + MTXIdentity(spC0); } else { VECCrossProduct(&sp3C, &sp54, &sp48); temp_f28 = acosf(VECDotProduct(&sp54, &sp3C)); - PSMTXRotAxisRad(spC0, &sp48, temp_f28); + MTXRotAxisRad(spC0, &sp48, temp_f28); } - PSMTXConcat(spC0, sp90, sp60); - PSMTXTrans(spC0, 0.5f, 0.5f, 0.0f); - PSMTXConcat(spC0, sp60, hiliteMtx); + MTXConcat(spC0, sp90, sp60); + MTXTrans(spC0, 0.5f, 0.5f, 0.0f); + MTXConcat(spC0, sp60, hiliteMtx); } } temp_r24 = temp_r28->object->data.face; @@ -2250,14 +2257,14 @@ static void ObjDraw(HsfDrawObject *arg0) { DLBufStartP = Hu3DObjInfoP->dlBuf; DrawData = Hu3DObjInfoP->drawData; GXLoadPosMtxImm(arg0->matrix, GX_PNMTX0); - PSMTXInvXpose(arg0->matrix, sp110); + MTXInvXpose(arg0->matrix, sp110); GXLoadNrmMtxImm(sp110, 0); GXInvalidateVtxCache(); if (Hu3DShadowF != 0 && Hu3DShadowCamBit != 0 && (Hu3DObjInfoP->flags & 8)) { - PSMTXInverse(Hu3DCameraMtx, spE0); - PSMTXConcat(spE0, arg0->matrix, sp110); - PSMTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp140); - PSMTXConcat(sp140, sp110, sp110); + MTXInverse(Hu3DCameraMtx, spE0); + MTXConcat(spE0, arg0->matrix, sp110); + MTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp140); + MTXConcat(sp140, sp110, sp110); GXLoadTexMtxImm(sp110, GX_TEXMTX9, GX_MTX3x4); var_r22 = 1; } else { @@ -2265,13 +2272,13 @@ static void ObjDraw(HsfDrawObject *arg0) { } if (arg0->model->unk_02 != 0) { if (var_r22 == 0) { - PSMTXInverse(Hu3DCameraMtx, spE0); + MTXInverse(Hu3DCameraMtx, spE0); } for (i = 0, var_r23 = 1; i < 4; i++, var_r23 <<= 1) { if (var_r23 & arg0->model->unk_02) { - PSMTXConcat(spE0, arg0->matrix, sp110); - PSMTXConcat(Hu3DProjection[i].unk_68, Hu3DProjection[i].unk_38, sp140); - PSMTXConcat(sp140, sp110, sp110); + MTXConcat(spE0, arg0->matrix, sp110); + MTXConcat(Hu3DProjection[i].unk_68, Hu3DProjection[i].unk_38, sp140); + MTXConcat(sp140, sp110, sp110); GXLoadTexMtxImm(sp110, texMtxTbl[i + 3], GX_MTX3x4); } } @@ -2281,32 +2288,32 @@ static void ObjDraw(HsfDrawObject *arg0) { temp_r24 = &Hu3DGlobalLight[arg0->model->unk_03]; sp20 = temp_r24->unk_28; if (temp_r24->unk_00 & 0x8000) { - PSMTXMultVecSR(Hu3DCameraMtx, &sp20, &sp20); + MTXMultVecSR(Hu3DCameraMtx, &sp20, &sp20); } temp_f30 = VECDotProduct(&sp20, &sp44); temp_f30 *= 10000.0f; OSf32tos16(&temp_f30, &var_r21); if (var_r21 == -10000) { - PSMTXScale(hiliteMtx, 0.0f, 0.0f, 0.0f); + MTXScale(hiliteMtx, 0.0f, 0.0f, 0.0f); } else { C_VECHalfAngle(&sp20, &sp44, &sp2C); sp2C.x = -sp2C.x; sp2C.y = -sp2C.y; sp2C.z = -sp2C.z; - PSMTXScale(sp50, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z); - PSMTXConcat(arg0->matrix, sp50, spB0); + MTXScale(sp50, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z); + MTXConcat(arg0->matrix, sp50, spB0); spB0[0][3] = spB0[1][3] = spB0[2][3] = 0.0f; - PSMTXInvXpose(spB0, sp80); + MTXInvXpose(spB0, sp80); if (var_r21 == 10000) { - PSMTXIdentity(spB0); + MTXIdentity(spB0); } else { VECCrossProduct(&sp2C, &sp44, &sp38); temp_f29 = acosf(VECDotProduct(&sp44, &sp2C)); - PSMTXRotAxisRad(spB0, &sp38, temp_f29); + MTXRotAxisRad(spB0, &sp38, temp_f29); } - PSMTXConcat(spB0, sp80, sp50); - PSMTXTrans(spB0, 0.5f, 0.5f, 0.0f); - PSMTXConcat(spB0, sp50, hiliteMtx); + MTXConcat(spB0, sp80, sp50); + MTXTrans(spB0, 0.5f, 0.5f, 0.0f); + MTXConcat(spB0, sp50, hiliteMtx); } } temp_r26 = arg0->object->data.face; @@ -2857,16 +2864,16 @@ void mtxRotCat(Mtx arg0, float arg1, float arg2, float arg3) { Mtx sp8; if (arg1 != 0.0f) { - PSMTXRotRad(sp8, 'X', MTXDegToRad(arg1)); - PSMTXConcat(sp8, arg0, arg0); + MTXRotRad(sp8, 'X', MTXDegToRad(arg1)); + MTXConcat(sp8, arg0, arg0); } if (arg2 != 0.0f) { - PSMTXRotRad(sp8, 'Y', MTXDegToRad(arg2)); - PSMTXConcat(sp8, arg0, arg0); + MTXRotRad(sp8, 'Y', MTXDegToRad(arg2)); + MTXConcat(sp8, arg0, arg0); } if (arg3 != 0.0f) { - PSMTXRotRad(sp8, 'Z', MTXDegToRad(arg3)); - PSMTXConcat(sp8, arg0, arg0); + MTXRotRad(sp8, 'Z', MTXDegToRad(arg3)); + MTXConcat(sp8, arg0, arg0); } } @@ -2875,17 +2882,17 @@ void mtxRot(Mtx arg0, float arg1, float arg2, float arg3) { Mtx sp8; if (arg1 != 0.0f) { - PSMTXRotRad(arg0, 'X', MTXDegToRad(arg1)); + MTXRotRad(arg0, 'X', MTXDegToRad(arg1)); } else { - PSMTXIdentity(arg0); + MTXIdentity(arg0); } if (arg2 != 0.0f) { - PSMTXRotRad(sp38, 'Y', MTXDegToRad(arg2)); - PSMTXConcat(sp38, arg0, arg0); + MTXRotRad(sp38, 'Y', MTXDegToRad(arg2)); + MTXConcat(sp38, arg0, arg0); } if (arg3 != 0.0f) { - PSMTXRotRad(sp8, 'Z', MTXDegToRad(arg3)); - PSMTXConcat(sp8, arg0, arg0); + MTXRotRad(sp8, 'Z', MTXDegToRad(arg3)); + MTXConcat(sp8, arg0, arg0); } } @@ -2980,8 +2987,8 @@ void Hu3DModelObjMtxGet(s16 arg0, char *arg1, Mtx arg2) { temp_r31 = &Hu3DData[arg0]; temp_r30 = temp_r31->hsfData; mtxRot(sp70, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); - PSMTXScale(spA0, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z); - PSMTXConcat(sp70, spA0, MTXBuf[0]); + MTXScale(spA0, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z); + MTXConcat(sp70, spA0, MTXBuf[0]); mtxTransCat(MTXBuf[0], temp_r31->pos.x, temp_r31->pos.y, temp_r31->pos.z); PGMaxPos.x = PGMaxPos.y = PGMaxPos.z = -1000000.0f; PGMinPos.x = PGMinPos.y = PGMinPos.z = 1000000.0f; @@ -2997,10 +3004,10 @@ void Hu3DModelObjMtxGet(s16 arg0, char *arg1, Mtx arg2) { attachMotionF = 0; } PGObjCall(temp_r31, temp_r30->root); - PSMTXCopy(MTXBuf[MTXIdx - 1], arg2); + MTXCopy(MTXBuf[MTXIdx - 1], arg2); if (PGFinishF == 0 && *PGName != 0) { OSReport("Error: Not Found %s for ObjPosGet\n", arg1); - PSMTXIdentity(MTXBuf[MTXIdx]); + MTXIdentity(MTXBuf[MTXIdx]); } HuMemDirectFree(PGName); } @@ -3042,10 +3049,10 @@ void PGObjCalc(ModelData *arg0, HsfObject *arg1) { var_r30 = &arg1->data.curr; } mtxRot(spA4, var_r30->rot.x, var_r30->rot.y, var_r30->rot.z); - PSMTXScale(spD4, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z); - PSMTXConcat(spA4, spD4, spD4); + MTXScale(spD4, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z); + MTXConcat(spA4, spD4, spD4); mtxTransCat(spD4, var_r30->pos.x, var_r30->pos.y, var_r30->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], spD4, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], spD4, MTXBuf[MTXIdx]); MTXIdx++; var_r24 = 1; } else { @@ -3068,11 +3075,11 @@ void PGObjCalc(ModelData *arg0, HsfObject *arg1) { } temp_r22 = hookIdx; hookIdx = temp_r28->hook; - PSMTXScale(spD4, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z); + MTXScale(spD4, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z); mtxRotCat(spD4, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); mtxTransCat(spD4, temp_r31->pos.x, temp_r31->pos.y, temp_r31->pos.z); - PSMTXConcat(spD4, temp_r31->unk_F0, spD4); - PSMTXConcat(MTXBuf[MTXIdx - 1], spD4, MTXBuf[MTXIdx]); + MTXConcat(spD4, temp_r31->unk_F0, spD4); + MTXConcat(MTXBuf[MTXIdx - 1], spD4, MTXBuf[MTXIdx]); MTXIdx++; PGObjCall(temp_r31, temp_r31->hsfData->root); MTXIdx--; @@ -3082,7 +3089,7 @@ void PGObjCalc(ModelData *arg0, HsfObject *arg1) { } if (*PGName == 0 && arg1->type == 2) { var_r23 = arg1; - PSMTXMultVec(MTXBuf[MTXIdx - 1], (Vec*) &var_r23->data.mesh.min, &sp8); + MTXMultVec(MTXBuf[MTXIdx - 1], (Vec*) &var_r23->data.mesh.min, &sp8); if (sp8.x < PGMinPos.x) { PGMinPos.x = sp8.x; } @@ -3101,7 +3108,7 @@ void PGObjCalc(ModelData *arg0, HsfObject *arg1) { if (sp8.z > PGMaxPos.z) { PGMaxPos.z = sp8.z; } - PSMTXMultVec(MTXBuf[MTXIdx - 1], (Vec*) &var_r23->data.mesh.max, &sp8); + MTXMultVec(MTXBuf[MTXIdx - 1], (Vec*) &var_r23->data.mesh.max, &sp8); if (sp8.x < PGMinPos.x) { PGMinPos.x = sp8.x; } @@ -3143,10 +3150,10 @@ void PGObjReplica(ModelData *arg0, HsfObject *arg1) { var_r31 = &arg1->data.curr; } mtxRot(sp188, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); - PSMTXScale(sp1B8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); - PSMTXConcat(sp188, sp1B8, sp1B8); + MTXScale(sp1B8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXConcat(sp188, sp1B8, sp1B8); mtxTransCat(sp1B8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(MTXBuf[MTXIdx - 1], sp1B8, MTXBuf[MTXIdx]); + MTXConcat(MTXBuf[MTXIdx - 1], sp1B8, MTXBuf[MTXIdx]); MTXIdx++; CancelTRXF = 1; PGObjCall(arg0, arg1->data.replica); @@ -3208,7 +3215,7 @@ void Hu3DModelObjDraw(s16 arg0, char *arg1, Mtx arg2) { sp14.model = &Hu3DData[arg0]; sp14.object = temp_r3 = Hu3DModelObjPtrGet(arg0, arg1); sp10 = temp_r3->constData; - PSMTXCopy(arg2, sp14.matrix); + MTXCopy(arg2, sp14.matrix); sp14.scale.x = sp14.scale.y = sp14.scale.z = 1.0f; ObjDraw(&sp14); } diff --git a/src/game/hsfex.c b/src/game/hsfex.c index 490e19e3..467def93 100644 --- a/src/game/hsfex.c +++ b/src/game/hsfex.c @@ -441,8 +441,8 @@ void Hu3D2Dto3D(Vec *arg0, s16 arg1, Vec *arg2) { arg2->y = -(temp_f27 - 0.5) * temp_f31; arg2->z = -arg0->z; C_MTXLookAt(spC, &temp_r31->pos, &temp_r31->up, &temp_r31->target); - PSMTXInverse(spC, spC); - PSMTXMultVec(spC, arg2, arg2); + MTXInverse(spC, spC); + MTXMultVec(spC, arg2, arg2); } void Hu3D3Dto2D(Vec *arg0, s16 arg1, Vec *arg2) { @@ -460,7 +460,7 @@ void Hu3D3Dto2D(Vec *arg0, s16 arg1, Vec *arg2) { } temp_r31 = &Hu3DCamera[i]; C_MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target); - PSMTXMultVec(sp1C, arg0, &sp10); + MTXMultVec(sp1C, arg0, &sp10); temp_f31 = (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * sp10.z * HU_DISP_ASPECT; temp_f30 = (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * sp10.z; arg2->x = DISP_HALF_W + sp10.x * (DISP_HALF_W / -temp_f31); diff --git a/src/game/hsfload.c b/src/game/hsfload.c index d5db2471..d4472e0f 100644 --- a/src/game/hsfload.c +++ b/src/game/hsfload.c @@ -2,6 +2,10 @@ #include "string.h" #include "ctype.h" +#ifdef TARGET_PC +#include "port/byteswap.h" +#endif + #define AS_S16(field) (*((s16 *)&(field))) #define AS_U16(field) (*((u16 *)&(field))) @@ -117,11 +121,14 @@ static void FileLoad(void *data) fileptr = data; memcpy(&head, fileptr, sizeof(HsfHeader)); memset(&Model, 0, sizeof(HsfData)); - NSymIndex = (void **)((u32)fileptr+head.symbol.ofs); - StringTable = (char *)((u32)fileptr+head.string.ofs); - ClusterTop = (HsfCluster *)((u32)fileptr+head.cluster.ofs); - AttributeTop = (HsfAttribute *)((u32)fileptr+head.attribute.ofs); - MaterialTop = (HsfMaterial *)((u32)fileptr+head.material.ofs); +#ifdef TARGET_PC + byteswap_hsfheader(&head); +#endif + NSymIndex = (void **)((uintptr_t)fileptr+head.symbol.ofs); + StringTable = (char *)((uintptr_t)fileptr+head.string.ofs); + ClusterTop = (HsfCluster *)((uintptr_t)fileptr+head.cluster.ofs); + AttributeTop = (HsfAttribute *)((uintptr_t)fileptr + head.attribute.ofs); + MaterialTop = (HsfMaterial *)((uintptr_t)fileptr + head.material.ofs); } static HsfData *SetHsfModel(void) diff --git a/src/game/hsfman.c b/src/game/hsfman.c index 243da902..7ef634ac 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -183,14 +183,14 @@ void Hu3DExec(void) { for (j = 0; j < 8; j++) { if (layerHook[j] != 0) { Hu3DCameraSet(Hu3DCameraNo, Hu3DCameraMtx); - PSMTXInvXpose(Hu3DCameraMtx, Hu3DCameraMtxXPose); + MTXInvXpose(Hu3DCameraMtx, Hu3DCameraMtxXPose); temp = layerHook[j]; temp(j); } if (layerNum[j] != 0) { Hu3DDrawPreInit(); Hu3DCameraSet(Hu3DCameraNo, Hu3DCameraMtx); - PSMTXInvXpose(Hu3DCameraMtx, Hu3DCameraMtxXPose); + MTXInvXpose(Hu3DCameraMtx, Hu3DCameraMtxXPose); data = Hu3DData; for (i = 0, var_r23 = i; i < HU3D_MODEL_MAX; i++, data++) { if (data->hsfData != 0) { @@ -252,8 +252,8 @@ void Hu3DExec(void) { mtxRot(sp40, data->rot.x, data->rot.y, data->rot.z); mtxScaleCat(sp40, data->scale.x, data->scale.y, data->scale.z); mtxTransCat(sp40, data->pos.x, data->pos.y, data->pos.z); - PSMTXConcat(Hu3DCameraMtx, sp40, sp10); - PSMTXConcat(sp10, data->unk_F0, sp10); + MTXConcat(Hu3DCameraMtx, sp40, sp10); + MTXConcat(sp10, data->unk_F0, sp10); Hu3DDraw(data, sp10, &data->scale); } data->unk_00++; @@ -398,7 +398,7 @@ s16 Hu3DModelCreate(void *arg0) { } var_r31->unk_01 = 0; var_r31->unk_00 = (u8) var_r30; - PSMTXIdentity(var_r31->unk_F0); + MTXIdentity(var_r31->unk_F0); layerNum[0] += 1; HuMemDCFlush(HEAP_DATA); if ((var_r31->hsfData->sceneCnt != 0) && ((var_r31->hsfData->scene->start) || (var_r31->hsfData->scene->end))) { @@ -473,7 +473,7 @@ s16 Hu3DModelLink(s16 arg0) { var_r31->unk_38[i] = -1; } var_r31->unk_01 = 0; - PSMTXIdentity(var_r31->unk_F0); + MTXIdentity(var_r31->unk_F0); layerNum[0] += 1; return var_r28; } @@ -521,7 +521,7 @@ s16 Hu3DHookFuncCreate(ModelHookFunc hook) { var_r31->unk_38[i] = -1; } var_r31->unk_01 = 0; - PSMTXIdentity(var_r31->unk_F0); + MTXIdentity(var_r31->unk_F0); layerNum[0] += 1; return var_r29; } @@ -1830,8 +1830,8 @@ void lightSet(LightData* arg0, s16 arg1, Mtx *arg2, Mtx *arg3, f32 arg8) { break; } if ((arg0->unk_00 & 0x8000) != 0) { - PSMTXMultVec(*arg2, &arg0->unk_28, &sp24); - PSMTXMultVec(*arg3, &arg0->unk_1C, &sp18); + MTXMultVec(*arg2, &arg0->unk_28, &sp24); + MTXMultVec(*arg3, &arg0->unk_1C, &sp18); GXInitLightPos(&sp30, sp18.x, sp18.y, sp18.z); } else { GXInitLightPos(&sp30, arg0->unk_1C.x, arg0->unk_1C.y, arg0->unk_1C.z); @@ -1939,7 +1939,7 @@ void Hu3DShadowExec(void) { test = Hu3DShadowData.unk_02 * Hu3DShadowData.unk_02; } C_MTXLookAt(Hu3DCameraMtx, &Hu3DShadowData.unk_14, &Hu3DShadowData.unk_2C, &Hu3DShadowData.unk_20); - PSMTXCopy(Hu3DCameraMtx, Hu3DShadowData.unk_38); + MTXCopy(Hu3DCameraMtx, Hu3DShadowData.unk_38); var_r31 = Hu3DData; shadowModelDrawF = 1; GXInvalidateTexAll(); @@ -1986,11 +1986,11 @@ void Hu3DShadowExec(void) { var_r31->attr |= HU3D_ATTR_MOT_EXEC; } mtxRot(sp58, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); - PSMTXScale(spB8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); - PSMTXConcat(sp58, spB8, spB8); + MTXScale(spB8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + MTXConcat(sp58, spB8, spB8); mtxTransCat(spB8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - PSMTXConcat(Hu3DCameraMtx, spB8, sp88); - PSMTXConcat(sp88, var_r31->unk_F0, sp88); + MTXConcat(Hu3DCameraMtx, spB8, sp88); + MTXConcat(sp88, var_r31->unk_F0, sp88); Hu3DDraw(var_r31, sp88, &var_r31->scale); } } @@ -2020,7 +2020,7 @@ void Hu3DShadowExec(void) { GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); GXSetNumChans(0); - PSMTXIdentity(sp88); + MTXIdentity(sp88); GXLoadPosMtxImm(sp88, 0); GXSetZMode(0, GX_ALWAYS, 1); GXSetNumChans(1); diff --git a/src/game/hsfmotion.c b/src/game/hsfmotion.c index e21ad90f..010b5fb1 100644 --- a/src/game/hsfmotion.c +++ b/src/game/hsfmotion.c @@ -843,7 +843,11 @@ void Hu3DSubMotionExec(s16 arg0) { } } +#ifdef __MWERKS__ __declspec(weak) float *GetObjTRXPtr(HsfObject *arg0, u16 arg1) { +#else +float *GetObjTRXPtr(HsfObject *arg0, u16 arg1) { +#endif HsfConstData *temp_r31 = arg0->constData; switch (arg1) { @@ -1234,7 +1238,11 @@ float GetLinear(s32 arg0, float arg1[][2], float arg2) { return arg1[arg0 - 1][1]; } +#ifdef __MWERKS__ __declspec(weak) float GetBezier(s32 arg0, HsfTrack *arg1, float arg2) { +#else +float GetBezier(s32 arg0, HsfTrack *arg1, float arg2) { +#endif float temp_f24; float temp_f29; float temp_f28; diff --git a/src/game/init.c b/src/game/init.c index 61315c66..10979b1c 100644 --- a/src/game/init.c +++ b/src/game/init.c @@ -1,5 +1,8 @@ #include "game/init.h" +#include "game/memory.h" #include "game/fault.h" +#include "game/sreset.h" +#include "dolphin/demo/DEMOStats.h" #include "dolphin/os.h" #include "dolphin/gx.h" #include "dolphin/dvd.h" @@ -47,7 +50,11 @@ void HuSysInit(GXRenderModeObj *mode) OSInit(); DVDInit(); VIInit(); + #ifdef TARGET_PC + VISetWindowTitle("Mario Party 4"); + #endif PADInit(); + #ifdef __MWERKS__ #if VERSION_NTSC if(OSGetProgressiveMode() == 1 && VIGetDTVStatus() == 1) { mode = &GXNtsc480Prog; @@ -55,6 +62,7 @@ void HuSysInit(GXRenderModeObj *mode) #else mode->efbHeight = 480; #endif + #endif InitRenderMode(mode); InitMem(); VIConfigure(RenderMode); @@ -132,12 +140,12 @@ static void InitMem() { void *arena_lo = OSGetArenaLo(); void *arena_hi = OSGetArenaHi(); - u32 fb_size = (u16)(((u16)RenderMode->fbWidth+15) & ~15)*RenderMode->xfbHeight*2; - u32 *fb1; - u32 *fb2; + uintptr_t fb_size = (u16)(((u16)RenderMode->fbWidth+15) & ~15)*RenderMode->xfbHeight*2; + uintptr_t *fb1; + uintptr_t *fb2; u32 i; - DemoFrameBuffer1 = (void *)OSRoundUp32B((u32)arena_lo); - DemoFrameBuffer2 = (void *)OSRoundUp32B((u32)DemoFrameBuffer1+fb_size); + DemoFrameBuffer1 = (void *)OSRoundUp32B((uintptr_t)arena_lo); + DemoFrameBuffer2 = (void *)OSRoundUp32B((uintptr_t)DemoFrameBuffer1 + fb_size); DemoCurrentBuffer = DemoFrameBuffer2; #if VERSION_PAL fb1 = DemoFrameBuffer1; @@ -148,7 +156,7 @@ static void InitMem() DCStoreRangeNoSync(DemoFrameBuffer1, fb_size); DCStoreRangeNoSync(DemoFrameBuffer2, fb_size); #endif - arena_lo = (void *)OSRoundUp32B((u32)DemoFrameBuffer2+fb_size); + arena_lo = (void *)OSRoundUp32B((uintptr_t)DemoFrameBuffer2 + fb_size); OSSetArenaLo(arena_lo); if(OSGetConsoleType() == OS_CONSOLE_DEVHW1 && OSGetPhysicalMemSize() != 0x400000 && OSGetConsoleSimulatedMemSize() < 0x1800000) { LoadMemInfo(); @@ -157,8 +165,8 @@ static void InitMem() arena_hi = OSGetArenaHi(); arena_lo = OSInitAlloc(arena_lo, arena_hi, 1); OSSetArenaLo(arena_lo); - arena_lo = (void *)OSRoundUp32B((u32)arena_lo); - arena_hi = (void *)OSRoundDown32B((u32)arena_hi); + arena_lo = (void *)OSRoundUp32B((uintptr_t)arena_lo); + arena_hi = (void *)OSRoundDown32B((uintptr_t)arena_hi); OSSetCurrentHeap(currentHeapHandle = OSCreateHeap(arena_lo, arena_hi)); arena_lo = arena_hi; OSSetArenaLo(arena_lo); @@ -295,4 +303,4 @@ static void LoadMemInfo() DVDClose(&file); OSDumpHeap(__OSCurrHeap); } -} \ No newline at end of file +} diff --git a/src/game/jmp.c b/src/game/jmp.c index 8313bd8c..4da43088 100755 --- a/src/game/jmp.c +++ b/src/game/jmp.c @@ -1,6 +1,7 @@ #include "game/jmp.h" -s32 gcsetjmp(register jmp_buf *jump) { +s32 gcsetjmp(register jmp_buf *jump) +{ // clang-format off asm { mflr r5 diff --git a/src/game/main.c b/src/game/main.c index 59390f8b..b25ef144 100644 --- a/src/game/main.c +++ b/src/game/main.c @@ -1,17 +1,33 @@ -#include "game/gamework_data.h" -#include "game/dvd.h" -#include "game/printfunc.h" -#include "game/object.h" -#include "game/wipe.h" -#include "game/init.h" -#include "game/process.h" -#include "game/pad.h" #include "game/data.h" -#include "game/sprite.h" +#include "game/dvd.h" +#include "game/gamework.h" +#include "game/gamework_data.h" #include "game/hsfformat.h" #include "game/hsfman.h" +#include "game/init.h" +#include "game/minigame_seq.h" +#include "game/msm.h" +#include "game/object.h" +#include "game/pad.h" #include "game/perf.h" -#include "game/gamework.h" +#include "game/printfunc.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/sreset.h" +#include "game/wipe.h" +#include "version.h" + +#ifdef TARGET_PC +#include "port/imgui.h" +#include +#include +#include + +const char *__asan_default_options() +{ + return "new_delete_type_mismatch=0,sleep_before_dying=5,allocator_may_return_null=1"; +} +#endif extern FileListEntry _ovltbl[]; u32 GlobalCounter; @@ -35,25 +51,74 @@ static u32 pe_req; static u32 rf_req; static u32 fi_req; s32 HuDvdErrWait; -s32 SystemInitF; +SHARED_SYM s32 SystemInitF; -void main(void) +#ifdef TARGET_PC +#include +void aurora_log_callback(AuroraLogLevel level, const char* module, const char *message, unsigned int len) { + const char *levelStr = "??"; + FILE *out = stdout; + switch (level) { + case LOG_DEBUG: + levelStr = "DEBUG"; + break; + case LOG_INFO: + levelStr = "INFO"; + break; + case LOG_WARNING: + levelStr = "WARNING"; + break; + case LOG_ERROR: + levelStr = "ERROR"; + out = stderr; + break; + case LOG_FATAL: + levelStr = "FATAL"; + out = stderr; + break; + } + fprintf(out, "[%s | %s] %s\n", levelStr, module, message); + if (level == LOG_FATAL) { + fflush(out); + abort(); + } +} +#endif + +#ifdef TARGET_PC +int game_main(int argc, char *argv[]) +#else +void main(void) +#endif +{ +#ifdef TARGET_PC + const AuroraInfo auroraInfo = aurora_initialize(argc, argv, + &(AuroraConfig) { + .appName = "Mario Party 4", + .logCallback = &aurora_log_callback, + .desiredBackend = BACKEND_VULKAN, + .windowPosX = 100, + .windowPosY = 100, + .windowWidth = 640, + .windowHeight = 480, + }); +#endif u32 met0; u32 met1; s16 i; s32 retrace; - #if VERSION_PAL +#if VERSION_PAL s16 temp = 0; - #endif - +#endif + HuDvdErrWait = 0; SystemInitF = 0; - #if VERSION_NTSC +#if VERSION_NTSC HuSysInit(&GXNtsc480IntDf); - #else +#else HuSysInit(&GXPal528IntDf); - #endif +#endif HuPrcInit(); HuPadInit(); GWInit(); @@ -66,25 +131,43 @@ void main(void) HuPerfCreate("USR0", 0xFF, 0xFF, 0xFF, 0xFF); HuPerfCreate("USR1", 0, 0xFF, 0xFF, 0xFF); WipeInit(RenderMode); - + for (i = 0; i < 4; i++) { GWPlayerCfg[i].character = -1; } - + omMasterInit(0, _ovltbl, OVL_COUNT, OVL_BOOT); VIWaitForRetrace(); - + if (VIGetNextField() == 0) { OSReport("VI_FIELD_BELOW\n"); VIWaitForRetrace(); } while (1) { +#ifdef TARGET_PC + const AuroraEvent *event = aurora_update(); + bool exiting = false; + while (event != NULL && event->type != AURORA_NONE) { + if (event->type == AURORA_EXIT) { + exiting = true; + break; + } + ++event; + } + if (exiting) { + break; + } +#endif retrace = VIGetRetraceCount(); if (HuSoftResetButtonCheck() != 0 || HuDvdErrWait != 0) { continue; } HuPerfZero(); + HuPerfBegin(2); +#ifdef TARGET_PC + aurora_begin_frame(); +#endif HuSysBeforeRender(); GXSetGPMetric(GX_PERF0_CLIP_VTX, GX_PERF1_VERTICES); GXClearGPMetric(); @@ -92,10 +175,12 @@ void main(void) GXClearVCacheMetric(); GXClearPixMetric(); GXClearMemMetric(); + HuPerfBegin(0); Hu3DPreProc(); HuPadRead(); pfClsScr(); + HuPrcCall(1); MGSeqMain(); HuPerfBegin(1); @@ -103,8 +188,10 @@ void main(void) HuDvdErrorWatch(); WipeExecAlways(); HuPerfEnd(0); + pfDrawFonts(); HuPerfEnd(1); + msmMusFdoutEnd(); HuSysDoneRender(retrace); GXReadGPMetric(&met0, &met1); @@ -113,7 +200,17 @@ void main(void) GXReadMemMetric(&cp_req, &tc_req, &cpu_rd_req, &cpu_wr_req, &dsp_req, &io_req, &vi_req, &pe_req, &rf_req, &fi_req); HuPerfEnd(2); GlobalCounter++; + +#ifdef TARGET_PC + imgui_main(&auroraInfo); + aurora_end_frame(); + frame_limiter(); +#endif } + +#ifdef TARGET_PC + aurora_shutdown(); +#endif } void HuSysVWaitSet(s16 vcount) @@ -124,7 +221,7 @@ void HuSysVWaitSet(s16 vcount) s16 HuSysVWaitGet(s16 param) { - return (s16) minimumVcount; + return (s16)minimumVcount; } s32 rnd_seed = 0x0000D9ED; diff --git a/src/game/malloc.c b/src/game/malloc.c index 863f8c57..9ed38e20 100644 --- a/src/game/malloc.c +++ b/src/game/malloc.c @@ -47,39 +47,55 @@ void HuMemDCFlush(HeapID heap) void *HuMemDirectMalloc(HeapID heap, s32 size) { +#ifdef TARGET_PC + u32 retaddr = 0; +#else register u32 retaddr; asm { mflr retaddr } +#endif size = (size+31) & 0xFFFFFFE0; return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr); } void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num) { +#ifdef TARGET_PC + u32 retaddr = 0; +#else register u32 retaddr; asm { mflr retaddr } +#endif size = (size+31) & 0xFFFFFFE0; return HuMemMemoryAllocNum(HeapTbl[heap], size, num, retaddr); } void HuMemDirectFree(void *ptr) { +#ifdef TARGET_PC + u32 retaddr = 0; +#else register u32 retaddr; asm { mflr retaddr } +#endif HuMemMemoryFree(ptr, retaddr); } void HuMemDirectFreeNum(HeapID heap, u32 num) { +#ifdef TARGET_PC + u32 retaddr = 0; +#else register u32 retaddr; asm { mflr retaddr } +#endif HuMemMemoryFreeNum(HeapTbl[heap], num, retaddr); } @@ -101,4 +117,4 @@ u32 HuMemHeapSizeGet(HeapID heap) void *HuMemHeapPtrGet(HeapID heap) { return HeapTbl[heap]; -} \ No newline at end of file +} diff --git a/src/game/mapspace.c b/src/game/mapspace.c index f04e7c16..ac8cba65 100755 --- a/src/game/mapspace.c +++ b/src/game/mapspace.c @@ -94,8 +94,8 @@ void MapWallCheck(float *arg0, float *arg1, HsfMapAttr *arg2) { MTRAdd.x = AddX; MTRAdd.z = AddZ; MTRAdd.y = 0.0f; - PSMTXInvXpose(MapMT, sp10); - PSMTXMultVec(sp10, &MTRAdd, &MTRAdd); + MTXInvXpose(MapMT, sp10); + MTXMultVec(sp10, &MTRAdd, &MTRAdd); for (var_r30 = 0; var_r30 < arg2->dataLen;) { temp_r29 = *var_r31; if (temp_r29 & 0x8000) { @@ -142,7 +142,7 @@ float MapPos(float arg0, float arg1, float arg2, float arg3, Vec *arg4) { sp14.x = var_f29; sp14.y = sp10; sp14.z = var_f28; - PSMTXMultVec(MapMT, &sp14, &sp14); + MTXMultVec(MapMT, &sp14, &sp14); sp10 = sp14.y; if (sp10 > arg1 + arg3 || fabs(arg1 - sp10) > fabs(arg1 - var_f31)) { continue; @@ -151,8 +151,8 @@ float MapPos(float arg0, float arg1, float arg2, float arg3, Vec *arg4) { arg4->x = FieldVec.x; arg4->y = FieldVec.y; arg4->z = FieldVec.z; - PSMTXInvXpose(MapMT, sp20); - PSMTXMultVec(sp20, arg4, arg4); + MTXInvXpose(MapMT, sp20); + MTXMultVec(sp20, arg4, arg4); var_f31 = sp14.y; } } @@ -205,7 +205,7 @@ BOOL PolygonRangeCheck(HsfMapAttr *arg0, float arg1, float arg2, float *arg3, fl sp20.x = arg1; sp20.y = temp_f29; sp20.z = arg2; - PSMTXMultVec(MapMT, &sp20, &sp20); + MTXMultVec(MapMT, &sp20, &sp20); if (arg4 > sp20.y && var_f27 > fabs(arg4 - sp20.y)) { var_f27 = fabs(arg4 - sp20.y); *arg3 = temp_f29; @@ -224,7 +224,7 @@ BOOL PolygonRangeCheck(HsfMapAttr *arg0, float arg1, float arg2, float *arg3, fl sp20.x = arg1; sp20.y = temp_f29; sp20.z = arg2; - PSMTXMultVec(MapMT, &sp20, &sp20); + MTXMultVec(MapMT, &sp20, &sp20); if (arg4 > sp20.y) { if (var_f27 > fabs(arg4 - sp20.y)) { var_f27 = fabs(arg4 - sp20.y); @@ -711,7 +711,7 @@ static BOOL GetPolygonCircleMtx(s16 *arg0, Vec *arg1, float *arg2, float *arg3) spD0[0] = arg2[0] + AddX; spD0[1] = arg2[1]; spD0[2] = arg2[2] + AddZ; - PSMTXMultVec(MapMT, &spC4, &spC4); + MTXMultVec(MapMT, &spC4, &spC4); DefSetHitFace(spC4.x, spC4.y, spC4.z); temp_r29 = &HitFaceVec[HitFaceCount]; MapspaceInlineFunc01(temp_r29, &arg1[arg0[0]], &arg1[arg0[1]], &arg1[arg0[2]]); @@ -724,7 +724,7 @@ static BOOL GetPolygonCircleMtx(s16 *arg0, Vec *arg1, float *arg2, float *arg3) spE0[0] = OldXYZ.x; spE0[1] = OldXYZ.y; spE0[2] = OldXYZ.z; - PSMTXMultVec(MapMTR, (Vec*) &spE0, (Vec*) &spE0); + MTXMultVec(MapMTR, (Vec*) &spE0, (Vec*) &spE0); if (MapspaceInlineFunc03(spE0, temp_r31, arg1) < 0) { spB8.x = spE0[0] - spD0[0]; spB8.y = spE0[1] - spD0[1]; @@ -742,8 +742,8 @@ static BOOL GetPolygonCircleMtx(s16 *arg0, Vec *arg1, float *arg2, float *arg3) MTRAdd.x = AddX; MTRAdd.z = AddZ; MTRAdd.y = 0.0f; - PSMTXInvXpose(MapMT, spF0); - PSMTXMultVec(spF0, &MTRAdd, &MTRAdd); + MTXInvXpose(MapMT, spF0); + MTXMultVec(spF0, &MTRAdd, &MTRAdd); } } return var_r17; @@ -893,19 +893,19 @@ void AppendAddXZ(float arg0, float arg1, float arg2) { void CharRotInv(Mtx arg0, Mtx arg1, Vec *arg2, omObjData *arg3) { Mtx sp8; - PSMTXTrans(arg0, arg3->trans.x, arg3->trans.y, arg3->trans.z); + MTXTrans(arg0, arg3->trans.x, arg3->trans.y, arg3->trans.z); if (arg3->rot.z) { - PSMTXRotRad(sp8, 'z', MTXDegToRad(arg3->rot.z)); - PSMTXConcat(arg0, sp8, arg0); + MTXRotRad(sp8, 'z', MTXDegToRad(arg3->rot.z)); + MTXConcat(arg0, sp8, arg0); } if (arg3->rot.y) { - PSMTXRotRad(sp8, 'y', MTXDegToRad(arg3->rot.y)); - PSMTXConcat(arg0, sp8, arg0); + MTXRotRad(sp8, 'y', MTXDegToRad(arg3->rot.y)); + MTXConcat(arg0, sp8, arg0); } if (arg3->rot.x) { - PSMTXRotRad(sp8, 'x', MTXDegToRad(arg3->rot.x)); - PSMTXConcat(arg0, sp8, arg0); + MTXRotRad(sp8, 'x', MTXDegToRad(arg3->rot.x)); + MTXConcat(arg0, sp8, arg0); } - PSMTXInverse(arg0, arg1); - PSMTXMultVec(arg1, arg2, arg2); + MTXInverse(arg0, arg1); + MTXMultVec(arg1, arg2, arg2); } diff --git a/src/game/memory.c b/src/game/memory.c index d7c0374d..03f793b4 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -1,10 +1,10 @@ #include "game/memory.h" #include "dolphin/os.h" -#define DATA_GET_BLOCK(ptr) ((struct memory_block *)(((char *)(ptr))-32)) -#define BLOCK_GET_DATA(block) (((char *)(block))+32) +#define DATA_GET_BLOCK(ptr) ((struct memory_block *)(((char *)(ptr)) - 32)) +#define BLOCK_GET_DATA(block) (((char *)(block)) + 32) -#define MEM_ALLOC_SIZE(size) (((size)+63) & 0xFFFFFFE0) +#define MEM_ALLOC_SIZE(size) (((size) + 63) & 0xFFFFFFE0) struct memory_block { s32 size; @@ -13,10 +13,10 @@ struct memory_block { struct memory_block *prev; struct memory_block *next; u32 num; - u32 retaddr; + uintptr_t retaddr; }; -static void *HuMemMemoryAlloc2(void *heap_ptr, s32 size, u32 num, u32 retaddr); +static void *HuMemMemoryAlloc2(void *heap_ptr, s32 size, u32 num, uintptr_t retaddr); void *HuMemHeapInit(void *ptr, s32 size) { @@ -31,25 +31,29 @@ void *HuMemHeapInit(void *ptr, s32 size) return block; } -void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr) +void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, uintptr_t retaddr) { return HuMemMemoryAlloc2(heap_ptr, size, num, retaddr); } -void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr) +void *HuMemMemoryAlloc(void *heap_ptr, s32 size, uintptr_t retaddr) { return HuMemMemoryAlloc2(heap_ptr, size, -256, retaddr); } -static void *HuMemMemoryAlloc2(void *heap_ptr, s32 size, u32 num, u32 retaddr) +static void *HuMemMemoryAlloc2(void *heap_ptr, s32 size, u32 num, uintptr_t retaddr) { s32 alloc_size = MEM_ALLOC_SIZE(size); struct memory_block *block = heap_ptr; do { - if(!block->flag && block->size >= alloc_size) { - if(block->size-alloc_size > 32u) { - struct memory_block *new_block = (struct memory_block *)(((u32)block)+alloc_size); - new_block->size = block->size-alloc_size; + if (!block->flag && block->size >= alloc_size) { + if (block->size - alloc_size > 32u) { +#ifdef TARGET_PC + struct memory_block *new_block = (struct memory_block *)(((char *)block) + alloc_size); +#else + struct memory_block *new_block = (struct memory_block *)(((u32)block) + alloc_size); +#endif + new_block->size = block->size - alloc_size; new_block->magic = 205; new_block->flag = 0; new_block->retaddr = retaddr; @@ -66,50 +70,49 @@ static void *HuMemMemoryAlloc2(void *heap_ptr, s32 size, u32 num, u32 retaddr) return BLOCK_GET_DATA(block); } block = block->next; - } while(block != heap_ptr); + } while (block != heap_ptr); OSReport("HuMem>memory alloc error %08x(%08X): Call %08x\n", size, num, retaddr); HuMemHeapDump(heap_ptr, -1); return NULL; } -void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr) +void HuMemMemoryFreeNum(void *heap_ptr, u32 num, uintptr_t retaddr) { struct memory_block *block = heap_ptr; do { struct memory_block *block_next = block->next; - if(block->flag && block->num == num) { + if (block->flag && block->num == num) { HuMemMemoryFree(BLOCK_GET_DATA(block), retaddr); } block = block_next; - } while(block != heap_ptr); - + } while (block != heap_ptr); } -static void HuMemTailMemoryAlloc2() //Required for string literal +static void HuMemTailMemoryAlloc2() // Required for string literal { OSReport("memory allocation(tail) error.\n"); } -void HuMemMemoryFree(void *ptr, u32 retaddr) +void HuMemMemoryFree(void *ptr, uintptr_t retaddr) { struct memory_block *block; - if(!ptr) { + if (!ptr) { return; } block = DATA_GET_BLOCK(ptr); - if(block->magic != 165) { + if (block->magic != 165) { OSReport("HuMem>memory free error. %08x( call %08x)\n", ptr, retaddr); return; } - if(block->prev < block && !block->prev->flag) { - block->flag = 0; + if (block->prev < block && !block->prev->flag) { + block->flag = 0; block->magic = 205; block->next->prev = block->prev; block->prev->next = block->next; block->prev->size += block->size; block = block->prev; } - if(block->next > block && !block->next->flag) { + if (block->next > block && !block->next->flag) { block->next->next->prev = block; block->size += block->next->size; block->next = block->next->next; @@ -124,11 +127,11 @@ s32 HuMemUsedMemorySizeGet(void *heap_ptr) struct memory_block *block = heap_ptr; s32 size = 0; do { - if(block->flag == 1) { + if (block->flag == 1) { size += block->size; } block = block->next; - } while(block != heap_ptr); + } while (block != heap_ptr); return size; } @@ -137,11 +140,11 @@ s32 HuMemUsedMemoryBlockGet(void *heap_ptr) struct memory_block *block = heap_ptr; s32 num_blocks = 0; do { - if(block->flag == 1) { + if (block->flag == 1) { num_blocks++; } block = block->next; - } while(block != heap_ptr); + } while (block != heap_ptr); return num_blocks; } @@ -159,45 +162,49 @@ void HuMemHeapDump(void *heap_ptr, s16 status) s32 num_unused_blocks = 0; u8 dump_type; - if(status < 0) { + if (status < 0) { dump_type = 10; - } else if(status == 0) { + } + else if (status == 0) { dump_type = 0; - } else { + } + else { dump_type = 1; } OSReport("======== HuMem heap dump %08x ========\n", heap_ptr); OSReport("MCB-----+Size----+MG+FL+Prev----+Next----+UNum----+Body----+Call----\n"); do { - if(dump_type == 10 || block->flag == dump_type) { - OSReport("%08x %08x %02x %02x %08x %08x %08x %08x %08x\n", block, block->size, block->magic, block->flag, - block->prev, block->next, block->num, BLOCK_GET_DATA(block), block->retaddr); + if (dump_type == 10 || block->flag == dump_type) { + OSReport("%08x %08x %02x %02x %08x %08x %08x %08x %08x\n", block, block->size, block->magic, block->flag, block->prev, block->next, + block->num, BLOCK_GET_DATA(block), block->retaddr); } - if(block->flag == 1) { + if (block->flag == 1) { size += block->size; num_blocks++; - } else { + } + else { inactive_size += block->size; num_unused_blocks++; } - + block = block->next; - } while(block != heap_ptr); - OSReport("MCB:%d(%d/%d) MEM:%08x(%08x/%08x)\n", num_blocks+num_unused_blocks, num_blocks, num_unused_blocks, - size+inactive_size, size, inactive_size); + } while (block != heap_ptr); + OSReport("MCB:%d(%d/%d) MEM:%08x(%08x/%08x)\n", num_blocks + num_unused_blocks, num_blocks, num_unused_blocks, size + inactive_size, size, + inactive_size); OSReport("======== HuMem heap dump %08x end =====\n", heap_ptr); } s32 HuMemMemorySizeGet(void *ptr) { struct memory_block *block; - if(!ptr) { + if (!ptr) { return 0; } block = DATA_GET_BLOCK(ptr); - if(block->flag == 1 && block->magic == 165) { - return block->size-32; - } else { + if (block->flag == 1 && block->magic == 165) { + return block->size - 32; + } + else { return 0; } } diff --git a/src/game/objdll.c b/src/game/objdll.c index c1414129..ec0b6b5a 100644 --- a/src/game/objdll.c +++ b/src/game/objdll.c @@ -5,6 +5,10 @@ typedef s32 (*DLLProlog)(void); typedef void (*DLLEpilog)(void); +#ifdef TARGET_PC +typedef void (*DLLObjectSetup)(void); +#endif + omDllData *omDLLinfoTbl[OM_DLL_MAX]; static FileListEntry *omDLLFileList; @@ -31,6 +35,10 @@ s32 omDLLStart(s16 overlay, s16 flag) dllno = omDLLSearch(overlay); if(dllno >= 0 && !flag) { omDllData *dll = omDLLinfoTbl[dllno]; +#ifdef TARGET_PC + // TODO PC + OSReport("objdll>Already Loaded %s\n", dll->name); +#else OSReport("objdll>Already Loaded %s(%08x %08x)\n", dll->name, dll->module, dll->bss); omDLLInfoDump(&dll->module->info); @@ -38,6 +46,7 @@ s32 omDLLStart(s16 overlay, s16 flag) memset(dll->bss, 0, dll->module->bssSize); HuMemDCFlushAll(); dll->ret = ((DLLProlog)dll->module->prolog)(); +#endif OSReport("objdll> %s prolog end\n", dll->name); return dllno; } else { @@ -80,8 +89,10 @@ void omDLLEnd(s16 dllno, s16 flag) } else { omDllData *dll; dll = omDLLinfoTbl[dllno]; +#ifdef __MWERKS__ OSReport("objdll>Call Epilog\n"); ((DLLEpilog)dll->module->epilog)(); +#endif OSReport("objdll>End DLL stayed:%s\n", omDLLinfoTbl[dllno]->name); } OSReport("objdll>End DLL finish\n"); @@ -95,6 +106,12 @@ omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag) dll = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(omDllData)); *dll_ptr = dll; dll->name = dllFile->name; +#ifdef _WIN32 + dll->hModule = LoadLibrary(dllFile->name); + if (dll->hModule == NULL) { + OSReport("objdll>++++++++++++++++ DLL Link Failed\n"); + } +#else dll->module = HuDvdDataReadDirect(dllFile->name, HEAP_SYSTEM); dll->bss = HuMemDirectMalloc(HEAP_SYSTEM, dll->module->bssSize); if(OSLink(&dll->module->info, dll->bss) != TRUE) { @@ -103,9 +120,17 @@ omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag) omDLLInfoDump(&dll->module->info); omDLLHeaderDump(dll->module); OSReport("objdll>LinkOK %08x %08x\n", dll->module, dll->bss); +#endif if(flag == 1) { OSReport("objdll> %s prolog start\n", dllFile->name); +#ifdef _WIN32 + { + DLLObjectSetup objectSetup = (DLLObjectSetup)GetProcAddress(dll->hModule, "ObjectSetup"); + objectSetup(); + } +#else dll->ret = ((DLLProlog)dll->module->prolog)(); +#endif OSReport("objdll> %s prolog end\n", dllFile->name); } return dll; @@ -114,6 +139,9 @@ omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag) void omDLLUnlink(omDllData *dll_ptr, s16 flag) { OSReport("odjdll>Unlink DLL:%s\n", dll_ptr->name); +#ifdef _WIN32 + FreeLibrary(dll_ptr->hModule); +#else if(flag == 1) { OSReport("objdll>Unlink DLL epilog\n"); ((DLLEpilog)dll_ptr->module->epilog)(); @@ -124,6 +152,7 @@ void omDLLUnlink(omDllData *dll_ptr, s16 flag) } HuMemDirectFree(dll_ptr->bss); HuMemDirectFree(dll_ptr->module); +#endif HuMemDirectFree(dll_ptr); } @@ -169,4 +198,4 @@ void omDLLHeaderDump(OSModuleHeader *module) OSReport(" epilog func:0x%08x\n", module->epilog); OSReport(" unresolved func:0x%08x\n", module->unresolved); OSReport("================================\n"); -} \ No newline at end of file +} diff --git a/src/game/objmain.c b/src/game/objmain.c index 39bc9e12..1c3aeda5 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -1,12 +1,12 @@ #include "game/audio.h" #include "game/chrman.h" #include "game/esprite.h" +#include "game/flag.h" #include "game/hsfdraw.h" #include "game/hsfman.h" -#include "game/printfunc.h" #include "game/object.h" #include "game/pad.h" -#include "game/flag.h" +#include "game/printfunc.h" #define OM_OVL_HIS_MAX 16 #define OM_MAX_GROUPS 10 @@ -33,15 +33,15 @@ typedef struct om_obj_man { omObjData *omDBGSysKeyObj; Process *omwatchproc; OverlayID omnextovl; -OverlayID omcurovl; +SHARED_SYM OverlayID omcurovl; s32 omcurdll; -s32 omovlhisidx; -s32 omovlevtno; +SHARED_SYM s32 omovlhisidx; +SHARED_SYM s32 omovlevtno; s32 omnextovlevtno; -u32 omovlstat; +SHARED_SYM u32 omovlstat; static s32 omnextovlstat; char omUPauseFlag; -s16 omSysExitReq; +SHARED_SYM s16 omSysExitReq; s16 omdispinfo; static omOvlHisData omovlhis[OM_OVL_HIS_MAX]; @@ -61,14 +61,17 @@ void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID st omovlhisidx = -1; omOvlCallEx(start_ovl, 1, 0, 0); omDBGSysKeyObj = NULL; +#ifdef __MWERKS__ + // TODO PC omSysPauseEnable(TRUE); +#endif } static void omWatchOverlayProc(void) { - while(1) { - if(omcurovl == OVL_INVALID) { - if(omnextovl >= 0 && fadeStat == 0) { + while (1) { + if (omcurovl == OVL_INVALID) { + if (omnextovl >= 0 && fadeStat == 0) { HuPrcSleep(0); OSReport("++++++++++++++++++++ Start New OVL %d (EVT:%d STAT:0x%08x) ++++++++++++++++++\n", omnextovl, omnextovlevtno, omnextovlstat); HuMemHeapDump(HuMemHeapPtrGet(HEAP_SYSTEM), -1); @@ -79,28 +82,37 @@ static void omWatchOverlayProc(void) OSReport("objman>Init esp\n"); espInit(); OSReport("objman>Call objectsetup\n"); +#ifdef __MWERKS__ + // TODO PC HuAudVoiceInit(omnextovl); HuAudDllSndGrpSet(omnextovl); +#endif omcurovl = omnextovl; omovlevtno = omnextovlevtno; omovlstat = omnextovlstat; omnextovl = OVL_INVALID; - if(_CheckFlag(FLAG_ID_MAKE(1, 12))) { +#ifdef __MWERKS__ + // TODO PC + if (_CheckFlag(FLAG_ID_MAKE(1, 12))) { MGSeqPracticeInit(); } omSysPauseEnable(TRUE); +#endif omcurdll = omDLLStart(omcurovl, 0); OSReport("objman>ObjectSetup end\n"); - if(omcurovl != OVL_INVALID) { + if (omcurovl != OVL_INVALID) { goto watch_child; - } else { + } + else { continue; } - } else { + } + else { HuPrcVSleep(); } - } else { - watch_child: + } + else { + watch_child: HuPrcChildWatch(); } } @@ -109,7 +121,7 @@ static void omWatchOverlayProc(void) void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat) { OSReport("objman>Call New Ovl %d(%d)\n", overlay, arg2); - if(omovlhisidx >= OM_OVL_HIS_MAX) { + if (omovlhisidx >= OM_OVL_HIS_MAX) { OSReport("objman>OVL Call over error\n"); return; } @@ -122,7 +134,7 @@ void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat) void omOvlGotoEx(OverlayID overlay, s16 arg2, s32 event, s32 stat) { omprevovl = omcurovl; - if(omcurovl >= 0) { + if (omcurovl >= 0) { omOvlKill(arg2); } omnextovl = overlay; @@ -134,7 +146,7 @@ void omOvlReturnEx(s16 level, s16 arg2) { omovlhisidx -= level; OSReport("objman>Ovl Return %d=%d(%d)\n", level, omovlhisidx, arg2); - if(omovlhisidx < 0) { + if (omovlhisidx < 0) { OSReport("objman>OVL under error\n"); omovlhisidx = 0; } @@ -143,10 +155,16 @@ void omOvlReturnEx(s16 level, s16 arg2) void omOvlKill(s16 arg) { +#ifdef __MWERKS__ + // TODO PC CharModelKill(-1); MGSeqKillAll(); +#endif Hu3DAllKill(); +#ifdef __MWERKS__ + // TODO PC HuWinAllKill(); +#endif HuSprClose(); HuPrcChildKill(omwatchproc); HuMemDirectFreeNum(HEAP_SYSTEM, MEMORY_DEFAULT_NUM); @@ -154,7 +172,10 @@ void omOvlKill(s16 arg) HuMemDirectFreeNum(HEAP_DVD, MEMORY_DEFAULT_NUM); HuMemDirectFreeNum(HEAP_DATA, MEMORY_DEFAULT_NUM); HuPadRumbleAllStop(); +#ifdef __MWERKS__ + // TODO PC HuAudFXListnerKill(); +#endif OSReport("OvlKill %d\n", arg); omSysExitReq = FALSE; omDLLNumEnd(omcurovl, arg); @@ -165,11 +186,11 @@ void omOvlKill(s16 arg) void omOvlHisChg(s32 level, OverlayID overlay, s32 event, s32 stat) { omOvlHisData *history; - if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) { + if (omovlhisidx - level < 0 || omovlhisidx - level >= OM_OVL_HIS_MAX) { OSReport("objman> omOvlHisChg: overlay 実行履歴の範囲外を変更しようとしました\n"); return; } - history = &omovlhis[omovlhisidx-level]; + history = &omovlhis[omovlhisidx - level]; history->overlay = overlay; history->event = event; history->stat = stat; @@ -177,11 +198,11 @@ void omOvlHisChg(s32 level, OverlayID overlay, s32 event, s32 stat) omOvlHisData *omOvlHisGet(s32 level) { - if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) { + if (omovlhisidx - level < 0 || omovlhisidx - level >= OM_OVL_HIS_MAX) { OSReport("objman> omOvlHisGet: overlay 実行履歴の範囲外を参照しようとしました\n"); return NULL; } - return &omovlhis[omovlhisidx-level]; + return &omovlhis[omovlhisidx - level]; } Process *omInitObjMan(s16 max_objs, s32 prio) @@ -196,7 +217,7 @@ Process *omInitObjMan(s16 max_objs, s32 prio) max_objs += 2; omSysExitReq = FALSE; process = HuPrcChildCreate(omMain, prio, 16384, 0, omwatchproc); - HuPrcSetStat(process, PROCESS_STAT_PAUSE_EN|PROCESS_STAT_UPAUSE_EN); + HuPrcSetStat(process, PROCESS_STAT_PAUSE_EN | PROCESS_STAT_UPAUSE_EN); objman = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(omObjMan), MEMORY_DEFAULT_NUM); objman->max_objs = max_objs; process->user_data = objman; @@ -205,24 +226,24 @@ Process *omInitObjMan(s16 max_objs, s32 prio) objman->next_idx = 0; objman->obj_last = -1; objman->obj_first = -1; - obj_all = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(omObjData), MEMORY_DEFAULT_NUM); - objman->obj = obj_all; - group_all = HuMemDirectMallocNum(HEAP_SYSTEM, OM_MAX_GROUPS*sizeof(omObjGroup), MEMORY_DEFAULT_NUM); + obj_all = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs * sizeof(omObjData), MEMORY_DEFAULT_NUM); + objman->obj = obj_all; + group_all = HuMemDirectMallocNum(HEAP_SYSTEM, OM_MAX_GROUPS * sizeof(omObjGroup), MEMORY_DEFAULT_NUM); objman->group = group_all; - for(i=0; istat = 1; - obj->prio = obj->prev =obj->next = -1; + obj->prio = obj->prev = obj->next = -1; obj->unk10 = 0; obj->trans.x = obj->trans.y = obj->trans.z = obj->rot.x = obj->rot.y = obj->rot.z = 0.0f; obj->scale.x = obj->scale.y = obj->scale.z = 1.0f; obj->model = obj->motion = NULL; obj->func = obj->data = NULL; - obj->next_idx = i+1; + obj->next_idx = i + 1; obj->mtncnt = 0; obj->motion = NULL; } - for(i=0; iuser_data; omObjData *obj_base = objman->obj; - if(objman->num_objs == objman->max_objs) { + if (objman->num_objs == objman->max_objs) { return NULL; } next_idx = objman->next_idx; @@ -258,26 +279,29 @@ omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, object->next_idx_alloc = next_idx; object->prio = prio; omInsertObj(objman_process, object); - if(mdlcnt) { - object->model = HuMemDirectMallocNum(HEAP_SYSTEM, mdlcnt*sizeof(s16), MEMORY_DEFAULT_NUM); + if (mdlcnt) { + object->model = HuMemDirectMallocNum(HEAP_SYSTEM, mdlcnt * sizeof(s16), MEMORY_DEFAULT_NUM); object->mdlcnt = mdlcnt; - for(i=0; imodel[i] = -1; } - } else { + } + else { object->model = NULL; object->mdlcnt = 0; } - if(mtncnt) { - object->motion = HuMemDirectMallocNum(HEAP_SYSTEM, mtncnt*sizeof(s16), MEMORY_DEFAULT_NUM); + if (mtncnt) { + object->motion = HuMemDirectMallocNum(HEAP_SYSTEM, mtncnt * sizeof(s16), MEMORY_DEFAULT_NUM); object->mtncnt = mtncnt; - } else { + } + else { object->motion = NULL; object->mtncnt = 0; } - if(group >= 0) { + if (group >= 0) { omAddMember(objman_process, group, object); - } else { + } + else { object->group = group; object->group_idx = 0; } @@ -302,31 +326,33 @@ static void omInsertObj(Process *objman_process, omObjData *object) s16 prio = object->prio; s16 obj_idx; s16 prev_idx; - if(objman->obj_first == -1) { + if (objman->obj_first == -1) { object->prev = -1; object->next = -1; objman->obj_first = next_idx_alloc; objman->obj_last = next_idx_alloc; - (void)objman; //HACK for matching + (void)objman; // HACK for matching return; } - for(obj_idx = objman->obj_first; obj_idx != -1; obj_idx = obj_new->next) { + for (obj_idx = objman->obj_first; obj_idx != -1; obj_idx = obj_new->next) { obj_new = &obj_all[obj_idx]; - if(obj_new->prio <= prio) { + if (obj_new->prio <= prio) { break; } prev_idx = obj_idx; } - if(obj_idx != -1) { + if (obj_idx != -1) { object->prev = obj_new->prev; object->next = obj_idx; - if(obj_new->prev != -1) { + if (obj_new->prev != -1) { obj_all[obj_new->prev].next = next_idx_alloc; - } else { + } + else { objman->obj_first = next_idx_alloc; } obj_new->prev = next_idx_alloc; - } else { + } + else { object->next = -1; object->prev = prev_idx; obj_new->next = next_idx_alloc; @@ -338,7 +364,7 @@ void omAddMember(Process *objman_process, u16 group, omObjData *object) { omObjMan *objman = objman_process->user_data; omObjGroup *group_ptr = &objman->group[group]; - if(group_ptr->num_objs != group_ptr->max_objs) { + if (group_ptr->num_objs != group_ptr->max_objs) { object->group = group; object->group_idx = group_ptr->next_idx; group_ptr->obj[group_ptr->next_idx] = object; @@ -352,40 +378,41 @@ void omDelObjEx(Process *objman_process, omObjData *object) omObjMan *objman = objman_process->user_data; omObjData *obj_all = objman->obj; s16 next_idx_alloc = object->next_idx_alloc; - if(objman->num_objs == 0 || object->stat == 1) { + if (objman->num_objs == 0 || object->stat == 1) { return; } objman->num_objs--; - if(object->group >= 0) { + if (object->group >= 0) { omDelMember(objman_process, object); } - if(object->motion != NULL) { + if (object->motion != NULL) { HuMemDirectFree(object->motion); object->motion = NULL; } - if(object->model != NULL) { + if (object->model != NULL) { HuMemDirectFree(object->model); object->model = NULL; } - if(object->data != NULL) { + if (object->data != NULL) { HuMemDirectFree(object->data); object->data = NULL; } object->stat = OM_STAT_DELETED; - if(object->next >= 0) { + if (object->next >= 0) { obj_all[object->next].prev = object->prev; } - if(object->prev >= 0) { + if (object->prev >= 0) { obj_all[object->prev].next = object->next; } - if(objman->num_objs != 0) { - if(object->prev < 0) { + if (objman->num_objs != 0) { + if (object->prev < 0) { objman->obj_first = obj_all[object->next].next_idx_alloc; } - if(object->next < 0) { + if (object->next < 0) { objman->obj_last = obj_all[object->prev].next_idx_alloc; } - } else { + } + else { objman->obj_first = objman->obj_last = -1; } object->next_idx = objman->next_idx; @@ -394,7 +421,7 @@ void omDelObjEx(Process *objman_process, omObjData *object) void omDelMember(Process *objman_process, omObjData *object) { - if(object->group != -1) { + if (object->group != -1) { omObjMan *objman = objman_process->user_data; omObjData *obj_all = objman->obj; omObjGroup *group = &objman->group[object->group]; @@ -411,20 +438,20 @@ void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs) s32 i; omObjMan *objman = objman_process->user_data; omObjGroup *group_ptr = &objman->group[group]; - if(group_ptr->obj != NULL) { + if (group_ptr->obj != NULL) { HuMemDirectFree(group_ptr->obj); } - if(group_ptr->next != NULL) { + if (group_ptr->next != NULL) { HuMemDirectFree(group_ptr->next); } group_ptr->next_idx = 0; group_ptr->max_objs = max_objs; group_ptr->num_objs = 0; - group_ptr->obj = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(omObjData *), MEMORY_DEFAULT_NUM); - group_ptr->next = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(u16), MEMORY_DEFAULT_NUM); - for(i=0; iobj = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs * sizeof(omObjData *), MEMORY_DEFAULT_NUM); + group_ptr->next = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs * sizeof(u16), MEMORY_DEFAULT_NUM); + for (i = 0; i < max_objs; i++) { group_ptr->obj[i] = NULL; - group_ptr->next[i] = i+1; + group_ptr->next[i] = i + 1; } } @@ -473,38 +500,38 @@ void omMain(void) omObjData *object; s16 obj_index; omDLLDBGOut(); - while(1) { - if(omdispinfo) { + while (1) { + if (omdispinfo) { float scale = 1.5f; GXColor color; color.a = 96; color.r = 0; color.g = 0; color.b = 255; - printWin(7, 23, 128*scale, 40*scale, &color); + printWin(7, 23, 128 * scale, 40 * scale, &color); fontcolor = FONT_COLOR_YELLOW; print8(8, 24, scale, "\xFD\x01H:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_SYSTEM), HuMemUsedMallocBlockGet(HEAP_SYSTEM)); - print8(8, 24+(8*scale), scale, "\xFD\x01M:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_DATA), HuMemUsedMallocBlockGet(HEAP_DATA)); - print8(8, 24+(16*scale), scale, "\xFD\x01OBJ:%d/%d", objman->num_objs, objman->max_objs); - print8(8, 24+(24*scale), scale, "\xFD\x01OVL:%ld(%ld<%ld)", omovlhisidx, omcurovl, omprevovl); - print8(8, 24+(32*scale), scale, "\xFD\x01POL:%ld", totalPolyCnted); + print8(8, 24 + (8 * scale), scale, "\xFD\x01M:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_DATA), HuMemUsedMallocBlockGet(HEAP_DATA)); + print8(8, 24 + (16 * scale), scale, "\xFD\x01OBJ:%d/%d", objman->num_objs, objman->max_objs); + print8(8, 24 + (24 * scale), scale, "\xFD\x01OVL:%ld(%ld<%ld)", omovlhisidx, omcurovl, omprevovl); + print8(8, 24 + (32 * scale), scale, "\xFD\x01POL:%ld", totalPolyCnted); } obj_index = objman->obj_last; - while(obj_index != -1) { + while (obj_index != -1) { object = &obj_all[obj_index]; obj_index = object->prev; - if((object->stat & (OM_STAT_DELETED|OM_STAT_DISABLED)) == 0) { - if(object->func != NULL && (object->stat & (0x40|0x8|OM_STAT_PAUSED)) == 0) { + if ((object->stat & (OM_STAT_DELETED | OM_STAT_DISABLED)) == 0) { + if (object->func != NULL && (object->stat & (0x40 | 0x8 | OM_STAT_PAUSED)) == 0) { object->func(object); } - if(omcurovl == -1 || objman->obj_last == -1) { + if (omcurovl == -1 || objman->obj_last == -1) { break; } - if((object->stat & (OM_STAT_DELETED|OM_STAT_DISABLED)) == 0) { - if((obj_all[obj_index].stat & (OM_STAT_DELETED|OM_STAT_DISABLED)) != 0) { + if ((object->stat & (OM_STAT_DELETED | OM_STAT_DISABLED)) == 0) { + if ((obj_all[obj_index].stat & (OM_STAT_DELETED | OM_STAT_DISABLED)) != 0) { obj_index = object->prev; } - if(object->model != NULL && object->model[0] != -1 && !(object->stat & OM_STAT_MODEL_PAUSED)) { + if (object->model != NULL && object->model[0] != -1 && !(object->stat & OM_STAT_MODEL_PAUSED)) { Hu3DModelPosSet(object->model[0], object->trans.x, object->trans.y, object->trans.z); Hu3DModelRotSet(object->model[0], object->rot.x, object->rot.y, object->rot.z); Hu3DModelScaleSet(object->model[0], object->scale.x, object->scale.y, object->scale.z); @@ -516,7 +543,7 @@ void omMain(void) } } -//Dummy function to force string literals in binary +// Dummy function to force string literals in binary static void omDumpObj(Process *objman_process) { omObjMan *objman = objman_process->user_data; @@ -524,14 +551,12 @@ static void omDumpObj(Process *objman_process) s32 i; OSReport("=================== 現在登録されている OBJECT ==================\n"); OSReport("STAT PRI GRPN MEMN PROG (TRA) (ROT) (SCA) mdlcnt mtncnt work[0] work[1] work[2] work[3] *data\n"); - for(i=0; imax_objs; i++) { + for (i = 0; i < objman->max_objs; i++) { omObjData *object = &obj_all[i]; - OSReport("%04d:%04X %04X %d %d %08X (%.2f %.2f %.2f) (%.2f %.2f %.2f) (%.2f %.2f %.2f) %d %d %08X %08X %08X %08X %08X\n", - object->stat, object->stat, object->prio, object->group, object->unk10, object->func, - object->trans.x, object->trans.y, object->trans.z, - object->rot.x, object->rot.y, object->rot.z, - object->scale.x, object->scale.y, object->scale.z, - object->mdlcnt, object->mtncnt, object->work[0], object->work[1], object->work[2], object->work[3], object->data); + OSReport("%04d:%04X %04X %d %d %08X (%.2f %.2f %.2f) (%.2f %.2f %.2f) (%.2f %.2f %.2f) %d %d %08X %08X %08X %08X %08X\n", object->stat, + object->stat, object->prio, object->group, object->unk10, object->func, object->trans.x, object->trans.y, object->trans.z, object->rot.x, + object->rot.y, object->rot.z, object->scale.x, object->scale.y, object->scale.z, object->mdlcnt, object->mtncnt, object->work[0], + object->work[1], object->work[2], object->work[3], object->data); } OSReport("================================================================\n"); } @@ -541,15 +566,16 @@ void omAllPause(BOOL pause) Process *objman_process = HuPrcCurrentGet(); omObjMan *objman = objman_process->user_data; s32 i; - if(pause) { - for(i=0; imax_objs; i++) { - if((objman->obj[i].stat & (OM_STAT_DELETED|OM_STAT_NOPAUSE)) == 0) { + if (pause) { + for (i = 0; i < objman->max_objs; i++) { + if ((objman->obj[i].stat & (OM_STAT_DELETED | OM_STAT_NOPAUSE)) == 0) { omSetStatBit(&objman->obj[i], OM_STAT_PAUSED); } } - } else { - for(i=0; imax_objs; i++) { - if((objman->obj[i].stat & (OM_STAT_DELETED|OM_STAT_NOPAUSE)) == 0) { + } + else { + for (i = 0; i < objman->max_objs; i++) { + if ((objman->obj[i].stat & (OM_STAT_DELETED | OM_STAT_NOPAUSE)) == 0) { omResetStatBit(&objman->obj[i], OM_STAT_PAUSED); } } @@ -558,9 +584,10 @@ void omAllPause(BOOL pause) char omPauseChk(void) { - if(omDBGSysKeyObj == NULL) { + if (omDBGSysKeyObj == NULL) { return 0; - } else { + } + else { return omDBGSysKeyObj->work[0] & 0x1; } } diff --git a/src/game/ovllist.c b/src/game/ovllist.c index e64fdd34..df997d83 100644 --- a/src/game/ovllist.c +++ b/src/game/ovllist.c @@ -1,11 +1,15 @@ #include "game/dvd.h" #include "game/object.h" -#define OVL_DEFINE(name, path) { path, 0 }, +#ifdef _WIN32 +#define OVL_DEFINE(name, path) { path ".dll", 0 }, +#else +#define OVL_DEFINE(name, path) { "dll/" path ".rel", 0 }, +#endif FileListEntry _ovltbl[OVL_COUNT+1] = { #include "ovl_table.h" { NULL, -1 } }; -#undef OVL_DEFINE \ No newline at end of file +#undef OVL_DEFINE diff --git a/src/game/pad.c b/src/game/pad.c index cded2f4f..1b828789 100644 --- a/src/game/pad.c +++ b/src/game/pad.c @@ -2,6 +2,9 @@ #include "game/msm.h" #include "game/pad.h" +#ifdef TARGET_PC +#include +#endif typedef struct pad_rumble { s16 duration; @@ -16,17 +19,17 @@ static void PadADConv(s16 pad, PADStatus *status); static int padStatErrOld[4]; static PadRumble rumbleData[4]; -u16 HuPadBtn[4]; -u16 HuPadBtnDown[4]; -u16 HuPadBtnRep[4]; -s8 HuPadStkX[4]; -s8 HuPadStkY[4]; -s8 HuPadSubStkX[4]; -s8 HuPadSubStkY[4]; -u8 HuPadTrigL[4]; -u8 HuPadTrigR[4]; -u8 HuPadDStk[4]; -u8 HuPadDStkRep[4]; +SHARED_SYM u16 HuPadBtn[4]; +SHARED_SYM u16 HuPadBtnDown[4]; +SHARED_SYM u16 HuPadBtnRep[4]; +SHARED_SYM s8 HuPadStkX[4]; +SHARED_SYM s8 HuPadStkY[4]; +SHARED_SYM s8 HuPadSubStkX[4]; +SHARED_SYM s8 HuPadSubStkY[4]; +SHARED_SYM u8 HuPadTrigL[4]; +SHARED_SYM u8 HuPadTrigR[4]; +SHARED_SYM u8 HuPadDStk[4]; +SHARED_SYM u8 HuPadDStkRep[4]; s8 HuPadErr[4]; u16 _PadBtn[4]; u16 _PadBtnDown[4]; @@ -254,4 +257,4 @@ s16 HuPadStatGet(s16 pad) u32 HuPadRumbleGet(void) { return RumbleBit; -} \ No newline at end of file +} diff --git a/src/game/printfunc.c b/src/game/printfunc.c index 4f85f5a9..032e786e 100644 --- a/src/game/printfunc.c +++ b/src/game/printfunc.c @@ -1,10 +1,10 @@ -#include "dolphin.h" #include "game/printfunc.h" -#include "game/init.h" +#include "dolphin.h" #include "game/disp.h" +#include "game/init.h" -#include "stdio.h" #include "stdarg.h" +#include "stdio.h" extern u8 ank8x8_4b[]; @@ -31,31 +31,16 @@ BOOL saftyFrameF; static void WireDraw(void); -static GXColor ATTRIBUTE_ALIGN(32) fcoltbl[16] = { - { 0, 0, 0, 255 }, - { 0, 0, 128, 255 }, - { 128, 0, 0, 255 }, - { 128, 0, 128, 255 }, - { 0, 128, 0, 255 }, - { 0, 128, 128, 255 }, - { 128, 128, 0, 255 }, - { 128, 128, 128, 255 }, - { 128, 128, 128, 128 }, - { 0, 0, 255, 255 }, - { 255, 0, 0, 255 }, - { 255, 0, 255, 255 }, - { 0, 255, 0, 255 }, - { 0, 255, 255, 255 }, - { 255, 255, 0, 255 }, - { 255, 255, 255, 255 } -}; +static GXColor ATTRIBUTE_ALIGN(32) fcoltbl[16] = { { 0, 0, 0, 255 }, { 0, 0, 128, 255 }, { 128, 0, 0, 255 }, { 128, 0, 128, 255 }, { 0, 128, 0, 255 }, + { 0, 128, 128, 255 }, { 128, 128, 0, 255 }, { 128, 128, 128, 255 }, { 128, 128, 128, 128 }, { 0, 0, 255, 255 }, { 255, 0, 0, 255 }, + { 255, 0, 255, 255 }, { 0, 255, 0, 255 }, { 0, 255, 255, 255 }, { 255, 255, 0, 255 }, { 255, 255, 255, 255 } }; void pfInit(void) { int i; fontcolor = 15; empstrline = 0; - + for (i = 0; i < 256; i++) { strline[i].str[0] = 0; } @@ -68,7 +53,7 @@ void pfClsScr(void) empstrline = 0; strlinecnt = 0; for (i = 0; i < 256; i++) { - strline[i].empstrline_next = i+1; + strline[i].empstrline_next = i + 1; strline[i].type = 0; if (strline[i].str[0] != 0) { strline[i].str[0] = 0; @@ -84,7 +69,7 @@ s16 print8(s16 x, s16 y, float scale, char *str, ...) s16 ret; va_list list; strline_curr = &strline[empstrline]; - if(strlinecnt >= 256) { + if (strlinecnt >= 256) { return -1; } va_start(list, str); @@ -98,7 +83,7 @@ s16 print8(s16 x, s16 y, float scale, char *str, ...) strline_curr->y = y; strline_curr->scale = scale; dst = strline_curr->str; - while(*src) { + while (*src) { *dst++ = *src++; } *dst = 0; @@ -112,7 +97,7 @@ s16 printWin(s16 x, s16 y, s16 w, s16 h, GXColor *color) s16 ret; char *src = pfStrBuf; strline_curr = &strline[empstrline]; - if(strlinecnt >= 256) { + if (strlinecnt >= 256) { return -1; } strlinecnt++; @@ -137,9 +122,9 @@ void pfDrawFonts(void) Mtx modelview; int i; s16 x, y, w, h; - + u16 strline_count = strlinecnt; - if(saftyFrameF) { + if (saftyFrameF) { WireDraw(); } MTXOrtho(proj, 0, HU_FB_HEIGHT, 0, HU_FB_WIDTH, 0, 10); @@ -156,7 +141,7 @@ void pfDrawFonts(void) GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GXSetArray(GX_VA_CLR0, fcoltbl, sizeof(GXColor)); + GXSETARRAY(GX_VA_CLR0, fcoltbl, sizeof(fcoltbl), sizeof(GXColor)); GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); GXInvalidateTexAll(); GXInitTexObj(&font_tex, ank8x8_4b, 128, 128, GX_TF_I4, GX_CLAMP, GX_CLAMP, GX_FALSE); @@ -173,10 +158,10 @@ void pfDrawFonts(void) GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXSetAlphaUpdate(GX_TRUE); - for(i=0; i<256; i++) { + for (i = 0; i < 256; i++) { x = strline[i].x; y = strline[i].y; - if(strline[i].type == 1) { + if (strline[i].type == 1) { w = strline[i].w; h = strline[i].h; GXClearVtxDesc(); @@ -192,9 +177,9 @@ void pfDrawFonts(void) GXSetNumTexGens(0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition2s16(x, y); - GXPosition2s16(x+w, y); - GXPosition2s16(x+w, y+h); - GXPosition2s16(x, y+h); + GXPosition2s16(x + w, y); + GXPosition2s16(x + w, y + h); + GXPosition2s16(x, y + h); GXEnd(); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); @@ -203,14 +188,15 @@ void pfDrawFonts(void) GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GXSetArray(GX_VA_CLR0, fcoltbl, sizeof(GXColor)); + GXSETARRAY(GX_VA_CLR0, fcoltbl, sizeof(fcoltbl), sizeof(GXColor)); GXSetNumTevStages(1); GXSetNumTexGens(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE); - } else { - if(strline[i].str[0] != '\0') { + } + else { + if (strline[i].str[0] != '\0') { float shadow_ofs_x, shadow_ofs_y; float char_w; float char_h; @@ -219,79 +205,80 @@ void pfDrawFonts(void) u16 color; s16 shadow_color; float scale; - char_w = char_h = 8.0f*strline[i].scale; + char_w = char_h = 8.0f * strline[i].scale; str = strline[i].str; color = strline[i].color; shadow_color = -1; scale = 1.0f; - while(*str) { + while (*str) { char c = *str++; - switch(c) { + switch (c) { case 255: c = *str++; - scale = c/16.0f; - char_w = 8.0f*strline[i].scale*scale; - char_h = 8.0f*strline[i].scale*scale; + scale = c / 16.0f; + char_w = 8.0f * strline[i].scale * scale; + char_h = 8.0f * strline[i].scale * scale; break; - + case 254: - color = (*str++)-1; + color = (*str++) - 1; break; - + case 253: - shadow_color = (*str++)-1; - shadow_ofs_x = 1.3333333f*strline[i].scale*scale; - shadow_ofs_y = 1.3333333f*strline[i].scale*scale; + shadow_color = (*str++) - 1; + shadow_ofs_x = 1.3333333f * strline[i].scale * scale; + shadow_ofs_y = 1.3333333f * strline[i].scale * scale; break; - + default: - texcoord_x = (c%16)/16.0f; - texcoord_y = ((c/16)/16.0f)+(1/128.0f); - if(shadow_color < 0) { + texcoord_x = (c % 16) / 16.0f; + texcoord_y = ((c / 16) / 16.0f) + (1 / 128.0f); + if (shadow_color < 0) { GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3s16(x, y, 0); GXColor1x8(color); GXTexCoord2f32(texcoord_x, texcoord_y); - GXPosition3s16(x+char_w, y, 0); + GXPosition3s16(x + char_w, y, 0); GXColor1x8(color); - GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y); - GXPosition3s16(x+char_w, y+char_h, 0); + GXTexCoord2f32(texcoord_x + (1 / 16.0f), texcoord_y); + GXPosition3s16(x + char_w, y + char_h, 0); GXColor1x8(color); - GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y+(1/16.0f)); - GXPosition3s16(x, y+char_h, 0); + GXTexCoord2f32(texcoord_x + (1 / 16.0f), texcoord_y + (1 / 16.0f)); + GXPosition3s16(x, y + char_h, 0); GXColor1x8(color); - GXTexCoord2f32(texcoord_x, texcoord_y+(1/16.0f)); + GXTexCoord2f32(texcoord_x, texcoord_y + (1 / 16.0f)); GXEnd(); - } else { + } + else { GXBegin(GX_QUADS, GX_VTXFMT0, 8); - GXPosition3s16(x+shadow_ofs_x, y+shadow_ofs_y, 0); + GXPosition3s16(x + shadow_ofs_x, y + shadow_ofs_y, 0); GXColor1x8(shadow_color); GXTexCoord2f32(texcoord_x, texcoord_y); - GXPosition3s16(x+char_w+shadow_ofs_x, y+shadow_ofs_y, 0); + GXPosition3s16(x + char_w + shadow_ofs_x, y + shadow_ofs_y, 0); GXColor1x8(shadow_color); - GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y); - GXPosition3s16(x+char_w+shadow_ofs_x, y+char_h+shadow_ofs_y, 0); + GXTexCoord2f32(texcoord_x + (1 / 16.0f), texcoord_y); + GXPosition3s16(x + char_w + shadow_ofs_x, y + char_h + shadow_ofs_y, 0); GXColor1x8(shadow_color); - GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y+(1/16.0f)); - GXPosition3s16(x+shadow_ofs_x, y+char_h+shadow_ofs_y, 0); + GXTexCoord2f32(texcoord_x + (1 / 16.0f), texcoord_y + (1 / 16.0f)); + GXPosition3s16(x + shadow_ofs_x, y + char_h + shadow_ofs_y, 0); GXColor1x8(shadow_color); - GXTexCoord2f32(texcoord_x, texcoord_y+(1/16.0f)); + GXTexCoord2f32(texcoord_x, texcoord_y + (1 / 16.0f)); GXPosition3s16(x, y, 0); GXColor1x8(color); GXTexCoord2f32(texcoord_x, texcoord_y); - GXPosition3s16(x+char_w, y, 0); + GXPosition3s16(x + char_w, y, 0); GXColor1x8(color); - GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y); - GXPosition3s16(x+char_w, y+char_h, 0); + GXTexCoord2f32(texcoord_x + (1 / 16.0f), texcoord_y); + GXPosition3s16(x + char_w, y + char_h, 0); GXColor1x8(color); - GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y+(1/16.0f)); - GXPosition3s16(x, y+char_h, 0); + GXTexCoord2f32(texcoord_x + (1 / 16.0f), texcoord_y + (1 / 16.0f)); + GXPosition3s16(x, y + char_h, 0); GXColor1x8(color); - GXTexCoord2f32(texcoord_x, texcoord_y+(1/16.0f)); + GXTexCoord2f32(texcoord_x, texcoord_y + (1 / 16.0f)); GXEnd(); } x += char_w; - if(x > HU_FB_WIDTH) { + if (x > HU_FB_WIDTH) { x = 0; y += char_h; } @@ -301,6 +288,9 @@ void pfDrawFonts(void) } } } +#ifdef TARGET_PC + GXDestroyTexObj(&font_tex); +#endif } #define SAFETY_W 16 @@ -312,9 +302,10 @@ static void WireDraw(void) Mtx modelview; MTXOrtho(proj, 0, HU_DISP_HEIGHT, 0, HU_DISP_WIDTH, 0, 10); GXSetProjection(proj, GX_ORTHOGRAPHIC); - if(RenderMode->field_rendering) { + if (RenderMode->field_rendering) { GXSetViewportJitter(0, 0, HU_FB_WIDTH, HU_FB_HEIGHT, 0, 1, VIGetNextField()); - } else { + } + else { GXSetViewport(0, 0, HU_FB_WIDTH, HU_FB_HEIGHT, 0, 1); } GXSetScissor(0, 0, HU_FB_WIDTH, HU_FB_HEIGHT); @@ -338,19 +329,19 @@ static void WireDraw(void) GXBegin(GX_LINES, 0, 8); GXPosition2f32(SAFETY_W, SAFETY_H); GXColor3u8(255, 0, 0); - GXPosition2f32(SAFETY_W, HU_DISP_HEIGHT-SAFETY_H); + GXPosition2f32(SAFETY_W, HU_DISP_HEIGHT - SAFETY_H); GXColor3u8(255, 0, 0); GXPosition2f32(SAFETY_W, SAFETY_H); GXColor3u8(255, 0, 0); - GXPosition2f32(HU_DISP_WIDTH-SAFETY_W, SAFETY_H); + GXPosition2f32(HU_DISP_WIDTH - SAFETY_W, SAFETY_H); GXColor3u8(255, 0, 0); - GXPosition2f32(HU_DISP_WIDTH-SAFETY_W, HU_DISP_HEIGHT-SAFETY_H); + GXPosition2f32(HU_DISP_WIDTH - SAFETY_W, HU_DISP_HEIGHT - SAFETY_H); GXColor3u8(255, 0, 0); - GXPosition2f32(HU_DISP_WIDTH-SAFETY_W, SAFETY_H); + GXPosition2f32(HU_DISP_WIDTH - SAFETY_W, SAFETY_H); GXColor3u8(255, 0, 0); - GXPosition2f32(HU_DISP_WIDTH-SAFETY_W, HU_DISP_HEIGHT-SAFETY_H); + GXPosition2f32(HU_DISP_WIDTH - SAFETY_W, HU_DISP_HEIGHT - SAFETY_H); GXColor3u8(255, 0, 0); - GXPosition2f32(SAFETY_W, HU_DISP_HEIGHT-SAFETY_H); + GXPosition2f32(SAFETY_W, HU_DISP_HEIGHT - SAFETY_H); GXColor3u8(255, 0, 0); GXEnd(); } diff --git a/src/game/process.c b/src/game/process.c index b62b74fc..4a85475b 100644 --- a/src/game/process.c +++ b/src/game/process.c @@ -1,9 +1,14 @@ #include "game/process.h" -#include "game/memory.h" #include "dolphin/os.h" +#include "game/jmp.h" +#include "game/memory.h" #define FAKE_RETADDR 0xA5A5A5A5 +#ifdef TARGET_PC +#include +#endif + #define EXEC_NORMAL 0 #define EXEC_SLEEP 1 #define EXEC_CHILDWATCH 2 @@ -21,8 +26,9 @@ void HuPrcInit(void) processtop = NULL; } -static void LinkProcess(Process** root, Process* process) { - Process* src_process = *root; +static void LinkProcess(Process **root, Process *process) +{ + Process *src_process = *root; if (src_process && (src_process->prio >= process->prio)) { while (src_process->next && src_process->next->prio >= process->prio) { @@ -35,7 +41,8 @@ static void LinkProcess(Process** root, Process* process) { if (process->next) { process->next->prev = process; } - } else { + } + else { process->next = (*root); process->prev = NULL; *root = process; @@ -44,13 +51,15 @@ static void LinkProcess(Process** root, Process* process) { } } } -static void UnlinkProcess(Process **root, Process *process) { +static void UnlinkProcess(Process **root, Process *process) +{ if (process->next) { process->next->prev = process->prev; } if (process->prev) { process->prev->next = process->next; - } else { + } + else { *root = process->next; } } @@ -60,13 +69,11 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz Process *process; s32 alloc_size; void *heap; - if(stack_size == 0) { + if (stack_size == 0) { stack_size = 2048; } - alloc_size = HuMemMemoryAllocSizeGet(sizeof(Process)) - +HuMemMemoryAllocSizeGet(stack_size) - +HuMemMemoryAllocSizeGet(extra_size); - if(!(heap = HuMemDirectMalloc(HEAP_SYSTEM, alloc_size))) { + alloc_size = HuMemMemoryAllocSizeGet(sizeof(Process)) + HuMemMemoryAllocSizeGet(stack_size) + HuMemMemoryAllocSizeGet(extra_size); + if (!(heap = HuMemDirectMalloc(HEAP_SYSTEM, alloc_size))) { OSReport("process> malloc error size %d\n", alloc_size); return NULL; } @@ -77,10 +84,10 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz process->stat = 0; process->prio = prio; process->sleep_time = 0; - process->base_sp = ((u32)HuMemMemoryAlloc(heap, stack_size, FAKE_RETADDR))+stack_size-8; - gcsetjmp(&process->jump); - process->jump.lr = (u32)func; - process->jump.sp = process->base_sp; + process->base_sp = ((uintptr_t)HuMemMemoryAlloc(heap, stack_size, FAKE_RETADDR)) + stack_size - 8; + SETJMP(process->jump); + SETJMP_SET_IP(process->jump, func); + SETJMP_SET_SP(process->jump, process->base_sp); process->dtor = NULL; process->user_data = NULL; LinkProcess(&processtop, process); @@ -93,7 +100,7 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz void HuPrcChildLink(Process *parent, Process *child) { HuPrcChildUnlink(child); - if(parent->child) { + if (parent->child) { parent->child->first_child = child; } child->next_child = parent->child; @@ -104,13 +111,14 @@ void HuPrcChildLink(Process *parent, Process *child) void HuPrcChildUnlink(Process *process) { - if(process->parent) { - if(process->next_child) { + if (process->parent) { + if (process->next_child) { process->next_child->first_child = process->first_child; } - if(process->first_child) { + if (process->first_child) { process->first_child->next_child = process->next_child; - } else { + } + else { process->parent->child = process->next_child; } process->parent = NULL; @@ -127,10 +135,11 @@ Process *HuPrcChildCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extr void HuPrcChildWatch() { Process *curr = HuPrcCurrentGet(); - if(curr->child) { + if (curr->child) { curr->exec = EXEC_CHILDWATCH; - if(!gcsetjmp(&curr->jump)) { - gclongjmp(&processjmpbuf, 1); + if (SETJMP(curr->jump) == 0) + { + LONGJMP(processjmpbuf, 1); } } } @@ -142,18 +151,19 @@ Process *HuPrcCurrentGet() static s32 SetKillStatusProcess(Process *process) { - if(process->exec != EXEC_KILLED) { + if (process->exec != EXEC_KILLED) { HuPrcWakeup(process); process->exec = EXEC_KILLED; return 0; - } else { + } + else { return -1; } } s32 HuPrcKill(Process *process) { - if(process == NULL) { + if (process == NULL) { process = HuPrcCurrentGet(); } HuPrcChildKill(process); @@ -164,8 +174,8 @@ s32 HuPrcKill(Process *process) void HuPrcChildKill(Process *process) { Process *child = process->child; - while(child) { - if(child->child) { + while (child) { + if (child->child) { HuPrcChildKill(child); } SetKillStatusProcess(child); @@ -176,12 +186,12 @@ void HuPrcChildKill(Process *process) static void gcTerminateProcess(Process *process) { - if(process->dtor) { + if (process->dtor) { process->dtor(); } UnlinkProcess(&processtop, process); processcnt--; - gclongjmp(&processjmpbuf, 2); + LONGJMP(processjmpbuf, 2); } void HuPrcEnd() @@ -195,12 +205,12 @@ void HuPrcEnd() void HuPrcSleep(s32 time) { Process *process = HuPrcCurrentGet(); - if(time != 0 && process->exec != EXEC_KILLED) { + if (time != 0 && process->exec != EXEC_KILLED) { process->exec = EXEC_SLEEP; process->sleep_time = time; } - if(!gcsetjmp(&process->jump)) { - gclongjmp(&processjmpbuf, 1); + if (SETJMP(process->jump) == 0) { + LONGJMP(processjmpbuf, 1); } } @@ -230,54 +240,64 @@ void HuPrcCall(s32 tick) Process *process; s32 ret; processcur = processtop; - ret = gcsetjmp(&processjmpbuf); - while(1) { - switch(ret) { + ret = SETJMP(processjmpbuf); + while (1) { + switch (ret) { case 2: HuMemDirectFree(processcur->heap); case 1: - if(((u8 *)(processcur->heap))[4] != 165) { + #ifdef TARGET_PC + processcur = processcur->next; + #else + if (((u8 *)(processcur->heap))[4] != 165) { printf("stack overlap error.(process pointer %x)\n", processcur); - while(1); - } else { + while (1) + ; + } + else { processcur = processcur->next; } + #endif break; } process = processcur; - if(!process) { + if (!process) { return; } +#ifdef __MWERKS__ + // unused procfunc = process->jump.lr; - if((process->stat & (PROCESS_STAT_PAUSE|PROCESS_STAT_UPAUSE)) && process->exec != EXEC_KILLED) { +#endif + if ((process->stat & (PROCESS_STAT_PAUSE | PROCESS_STAT_UPAUSE)) && process->exec != EXEC_KILLED) { ret = 1; continue; } - switch(process->exec) { + switch (process->exec) { case EXEC_SLEEP: - if(process->sleep_time > 0) { + if (process->sleep_time > 0) { process->sleep_time -= tick; - if(process->sleep_time <= 0) { + if (process->sleep_time <= 0) { process->sleep_time = 0; process->exec = EXEC_NORMAL; } } ret = 1; break; - + case EXEC_CHILDWATCH: - if(process->child) { - ret = 1; - } else { + if (process->child) { + ret = 1; + } + else { process->exec = EXEC_NORMAL; ret = 0; } break; - + case EXEC_KILLED: - process->jump.lr = (u32)HuPrcEnd; + SETJMP_SET_IP(process->jump, HuPrcEnd); case EXEC_NORMAL: - gclongjmp(&process->jump, 1); + LONGJMP(process->jump, 1); break; } } @@ -307,20 +327,21 @@ void HuPrcResetStat(Process *process, u16 value) void HuPrcAllPause(s32 flag) { Process *process = processtop; - if(flag) { - while(process != NULL) { - if(!(process->stat & PROCESS_STAT_PAUSE_EN)) { + if (flag) { + while (process != NULL) { + if (!(process->stat & PROCESS_STAT_PAUSE_EN)) { HuPrcSetStat(process, PROCESS_STAT_PAUSE); } - + process = process->next; } - } else { - while(process != NULL) { - if(process->stat & PROCESS_STAT_PAUSE) { + } + else { + while (process != NULL) { + if (process->stat & PROCESS_STAT_PAUSE) { HuPrcResetStat(process, PROCESS_STAT_PAUSE); } - + process = process->next; } } @@ -329,20 +350,21 @@ void HuPrcAllPause(s32 flag) void HuPrcAllUPause(s32 flag) { Process *process = processtop; - if(flag) { - while(process != NULL) { - if(!(process->stat & PROCESS_STAT_UPAUSE_EN)) { + if (flag) { + while (process != NULL) { + if (!(process->stat & PROCESS_STAT_UPAUSE_EN)) { HuPrcSetStat(process, PROCESS_STAT_UPAUSE); } - + process = process->next; } - } else { - while(process != NULL) { - if(process->stat & PROCESS_STAT_UPAUSE) { + } + else { + while (process != NULL) { + if (process->stat & PROCESS_STAT_UPAUSE) { HuPrcResetStat(process, PROCESS_STAT_UPAUSE); } - + process = process->next; } } diff --git a/src/game/sprman.c b/src/game/sprman.c index 159b0f47..043abc36 100644 --- a/src/game/sprman.c +++ b/src/game/sprman.c @@ -3,6 +3,9 @@ #include "game/init.h" #include "dolphin/mtx.h" +#include + +#include "port/byteswap.h" #define SPRITE_DIRTY_ATTR 0x1 #define SPRITE_DIRTY_XFORM 0x2 @@ -212,27 +215,58 @@ AnimData *HuSprAnimRead(void *data) AnimBmpData *bmp; AnimBankData *bank; AnimPatData *pat; +#ifdef TARGET_PC + AnimBmpData *bmp2; + AnimBankData *bank2; + AnimPatData *pat2; +#endif +#ifdef TARGET_PC + AnimData *anim = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimData), MEMORY_DEFAULT_NUM); + byteswap_animdata(data, anim); +#else AnimData *anim = (AnimData *)data; - if((u32)anim->bank & 0xFFFF0000) { +#endif + if((uintptr_t)anim->bank & ~0xFFFF) { anim->useNum++; return anim; } - bank = (AnimBankData *)((u32)anim->bank+(u32)data); + bank = (AnimBankData *)((uintptr_t)anim->bank+(uintptr_t)data); +#ifdef TARGET_PC + bank2 = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimBankData), MEMORY_DEFAULT_NUM); + byteswap_animbankdata(bank, bank2); + bank = bank2; +#endif anim->bank = bank; - pat = (AnimPatData *)((u32)anim->pat+(u32)data); + pat = (AnimPatData *)((uintptr_t)anim->pat+(uintptr_t)data); +#ifdef TARGET_PC + pat2 = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimPatData), MEMORY_DEFAULT_NUM); + byteswap_animpatdata(pat, pat2); + pat = pat2; +#endif anim->pat = pat; - bmp = (AnimBmpData *)((u32)anim->bmp+(u32)data); + bmp = (AnimBmpData *)((uintptr_t)anim->bmp+(uintptr_t)data); +#ifdef TARGET_PC + bmp2 = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimBmpData), MEMORY_DEFAULT_NUM); + byteswap_animbmpdata(bmp, bmp2); + bmp = bmp2; +#endif anim->bmp = bmp; for(i=0; ibankNum; i++, bank++) { - bank->frame = (AnimFrameData *)((u32)bank->frame+(u32)data); + bank->frame = (AnimFrameData *)((uintptr_t)bank->frame+(uintptr_t)data); +#ifdef TARGET_PC + byteswap_animframedata(bank->frame); +#endif } for(i=0; ipatNum; i++, pat++) { - pat->layer = (AnimLayerData *)((u32)pat->layer+(u32)data); + pat->layer = (AnimLayerData *)((uintptr_t)pat->layer+(uintptr_t)data); +#ifdef TARGET_PC + byteswap_animlayerdata(pat->layer); +#endif } for(i=0; ibmpNum; i++, bmp++) { - bmp->palData = (void *)((u32)bmp->palData+(u32)data); - bmp->data = (void *)((u32)bmp->data+(u32)data); + bmp->palData = (void *)((uintptr_t)bmp->palData+(uintptr_t)data); + bmp->data = (void *)((uintptr_t)bmp->data+(uintptr_t)data); } anim->useNum = 0; return anim; @@ -401,6 +435,11 @@ void HuSprAnimKill(AnimData *anim) HuMemDirectFree(anim->bmp->palData); } } +#ifdef TARGET_PC + HuMemDirectFree(anim->bank); + HuMemDirectFree(anim->pat); + HuMemDirectFree(anim->bmp); +#endif HuMemDirectFree(anim); } } @@ -720,4 +759,4 @@ void AnimDebug(AnimData *anim) OSReport("\tpixSize %d,palNum %d,size (%d,%d)\n", bmp->pixSize, bmp->palNum, bmp->sizeX, bmp->sizeY); bmp++; } -} \ No newline at end of file +} diff --git a/src/game/sprput.c b/src/game/sprput.c index c2b061b1..8fb011d4 100644 --- a/src/game/sprput.c +++ b/src/game/sprput.c @@ -240,6 +240,10 @@ void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, G } GXInitTexObjLOD(&tex_obj, filter, filter, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(&tex_obj, slot); +#ifdef TARGET_PC + GXDestroyTexObj(&tex_obj); + GXDestroyTlutObj(&tlut_obj); +#endif } void HuSprExecLayerSet(short draw_no, short layer) @@ -252,4 +256,4 @@ static void HuSprLayerHook(short layer) { HuSprDispInit(); HuSprExec(HuSprLayerDrawNo[layer]); -} \ No newline at end of file +} diff --git a/src/game/thpmain.c b/src/game/thpmain.c index 082eb281..f9cf8d1a 100755 --- a/src/game/thpmain.c +++ b/src/game/thpmain.c @@ -243,15 +243,15 @@ static void THPViewSprFunc(HuSprite *arg0) sp8.b = arg0->b; sp8.a = arg0->a; if (arg0->z_rot != 0.0f) { - PSMTXRotAxisRad(sp18, &spC, MTXDegToRad(arg0->z_rot)); - PSMTXScale(sp48, arg0->scale_x, arg0->scale_y, 1.0f); - PSMTXConcat(sp18, sp48, sp48); + MTXRotAxisRad(sp18, &spC, MTXDegToRad(arg0->z_rot)); + MTXScale(sp48, arg0->scale_x, arg0->scale_y, 1.0f); + MTXConcat(sp18, sp48, sp48); } else { - PSMTXScale(sp48, arg0->scale_x, arg0->scale_y, 1.0f); + MTXScale(sp48, arg0->scale_x, arg0->scale_y, 1.0f); } mtxTransCat(sp48, arg0->x, arg0->y, 0.0f); - PSMTXConcat(*arg0->group_mtx, sp48, sp48); + MTXConcat(*arg0->group_mtx, sp48, sp48); temp_r30 = -((s32)audioTrack.unk00 / 2); temp_r29 = -((s32)audioTrack.unk04 / 2); GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); diff --git a/src/game/window.c b/src/game/window.c index ac3be92e..8846f8f5 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -45,8 +45,8 @@ static void GetMesMaxSizeSub(u32 mess); static s32 GetMesMaxSizeSub2(WindowData *window, u8 *mess_data); void mtxTransCat(Mtx, float, float, float); -WindowData ATTRIBUTE_ALIGN(32) winData[32]; -u32 winKey[4]; +SHARED_SYM WindowData ATTRIBUTE_ALIGN(32) winData[32]; +static u32 winKey[4]; keyBufData winComKeyBuf[256]; static AnimData *iconAnim; @@ -54,7 +54,7 @@ static AnimData *cursorAnim; static AnimData *cardAnimA; static AnimData *cardAnimB; static Process *winProc; -void *messDataPtr; +SHARED_SYM void *messDataPtr; static s32 messDataNo; static s16 winMaxWidth; static s16 winMaxHeight; @@ -1313,6 +1313,8 @@ void HuWinMesRead(s32 mess_data_no) void HuWinMesSet(s16 window, u32 mess) { +#ifdef __MWERKS__ + // TODO PC WindowData *window_ptr = &winData[window]; window_ptr->stat = 1; @@ -1339,10 +1341,13 @@ void HuWinMesSet(s16 window, u32 mess) window_ptr->mess_time = 0; #endif } +#endif } void HuWinInsertMesSet(s16 window, u32 mess, s16 index) { +#ifdef __MWERKS__ + // TODO PC WindowData *window_ptr = &winData[window]; if (!(mess & 0x80000000)) { @@ -1358,6 +1363,7 @@ void HuWinInsertMesSet(s16 window, u32 mess, s16 index) else { window_ptr->insert_mess[index] = (u8 *)mess; } +#endif } s16 HuWinChoiceGet(s16 window, s16 start_choice) @@ -1662,6 +1668,8 @@ void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end) static void GetMesMaxSizeSub(u32 mess) { +#ifdef __MWERKS__ + // TODO PC s16 line_h; s16 char_w; s16 line_w; @@ -1765,6 +1773,7 @@ static void GetMesMaxSizeSub(u32 mess) if (winMaxHeight < line_h) { winMaxHeight = line_h; } +#endif } static s32 GetMesMaxSizeSub2(WindowData *window, u8 *mess_data) @@ -1845,6 +1854,8 @@ s16 HuWinKeyWaitNumGet(u32 mess) { s16 wait_num; u8 *mess_data; +#ifdef __MWERKS__ + // TODO PC if (mess > 0x80000000) { mess_data = (u8 *)mess; @@ -1857,6 +1868,7 @@ s16 HuWinKeyWaitNumGet(u32 mess) wait_num++; } } +#endif return wait_num; } diff --git a/src/game/wipe.c b/src/game/wipe.c index aa7c1d9a..919ff550 100644 --- a/src/game/wipe.c +++ b/src/game/wipe.c @@ -9,7 +9,7 @@ s16 HuSysVWaitGet(s16 old); typedef s32 (*fadeFunc)(void); -WipeState wipeData; +SHARED_SYM WipeState wipeData; BOOL wipeFadeInF; static void WipeColorFill(GXColor color); @@ -111,9 +111,11 @@ void WipeExecAlways(void) void WipeCreate(s16 mode, s16 type, s16 duration) { WipeState *wipe; +#ifdef __MWERKS__ // TODO PC if(_CheckFlag(FLAG_ID_MAKE(1, 11)) && boardTutorialF) { return; } +#endif wipe = &wipeData; if(wipe->stat) { return; @@ -330,4 +332,7 @@ static void WipeFrameStill(GXColor color) GXTexCoord2f32(0, 1); GXEnd(); GXSetChanMatColor(GX_COLOR0A0, colorN); +#ifdef TARGET_PC + GXDestroyTexObj(&tex); +#endif } diff --git a/src/port/OS.c b/src/port/OS.c new file mode 100644 index 00000000..9d5f61d6 --- /dev/null +++ b/src/port/OS.c @@ -0,0 +1,89 @@ +#include +#include + +#include + +#ifndef _WIN32 +#include +#include +#if __APPLE__ +#include +#endif +#endif + +#ifdef _WIN32 +#include +#endif + +#if __APPLE__ +static u64 MachToDolphinNum; +static u64 MachToDolphinDenom; +#elif _WIN32 +static LARGE_INTEGER PerfFrequency; +#endif + +// Credits: Super Monkey Ball + +#define MEM_SIZE (64 * 1024 * 1024) + +u8 LC_CACHE_BASE[4096]; + +static u64 GetGCTicks() +{ +#if __APPLE__ + return mach_absolute_time() * MachToDolphinNum / MachToDolphinDenom; +#elif __linux__ || __FreeBSD__ + struct timespec tp; + clock_gettime(CLOCK_MONOTONIC, &tp); + + return u64((tp.tv_sec * 1000000000ull) + tp.tv_nsec) * GetGCTicksPerSec() / 1000000000ull; +#elif _WIN32 + LARGE_INTEGER perf; + QueryPerformanceCounter(&perf); + perf.QuadPart *= OS_CORE_CLOCK; + perf.QuadPart /= PerfFrequency.QuadPart; + return perf.QuadPart; +#else + return 0; +#endif +} + +void OSInit() +{ + puts("OSInit is a stub"); + u8 *arena = malloc(MEM_SIZE); + + OSSetArenaLo(arena); + OSSetArenaHi(arena + MEM_SIZE); + + #if __APPLE__ + mach_timebase_info_data_t timebase; + mach_timebase_info(&timebase); + MachToDolphinNum = OS_CORE_CLOCK * timebase.numer; + MachToDolphinDenom = 1000000000ull * timebase.denom; +#elif _WIN32 + QueryPerformanceFrequency(&PerfFrequency); +#endif +} + +OSTime OSGetTime(void) +{ + return (OSTime)GetGCTicks(); +} + +OSTick OSGetTick(void) +{ + return (OSTick)GetGCTicks(); +} + +u32 OSGetPhysicalMemSize(void) +{ + puts("OSGetPhysicalMemSize is a stub"); + return MEM_SIZE; +} + +u32 OSGetConsoleSimulatedMemSize(void) +{ + puts("OSGetSimulatedMemSize is a stub"); + return MEM_SIZE; +} diff --git a/src/port/ar.c b/src/port/ar.c new file mode 100644 index 00000000..b7ae0092 --- /dev/null +++ b/src/port/ar.c @@ -0,0 +1,41 @@ +#include +#include +#include + +u8 ARAM[16 * 1024 * 1024]; + +u32 ARInit(u32 *stack_index_addr, u32 num_entries) +{ + puts("ARInit"); + return 0x4000; +} + +BOOL ARCheckInit() +{ + return TRUE; +} + +u32 ARGetSize() +{ + // TODO + return 0x8000; +} + +void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length) +{ + switch (type) + { + case ARAM_DIR_MRAM_TO_ARAM: + memcpy(ARAM + aram_addr, (void *)mainmem_addr, length); + break; + case ARAM_DIR_ARAM_TO_MRAM: + memcpy((void *)mainmem_addr, ARAM + aram_addr, length); + break; + } +} + +u32 ARGetDMAStatus(void) +{ + puts("ARGetDMAStatus"); + return 0; +} diff --git a/src/port/arq.c b/src/port/arq.c new file mode 100644 index 00000000..36917a97 --- /dev/null +++ b/src/port/arq.c @@ -0,0 +1,23 @@ +#include +#include +#include + +extern u8 ARAM[16 * 1024 * 1024]; + +void ARQPostRequest(ARQRequest *task, u32 owner, u32 type, u32 priority, + u32 source, u32 dest, u32 length, ARQCallback callback) +{ + printf("ARQPostRequest: 0x%X, 0x%X, 0x%X\n", + (unsigned int)source, (unsigned int)dest, (unsigned int)length); + switch (type) + { + case ARQ_TYPE_MRAM_TO_ARAM: + memcpy(ARAM + dest, (void *)source, length); + callback((u32)task); + break; + case ARQ_TYPE_ARAM_TO_MRAM: + memcpy((void *)dest, ARAM + source, length); + callback((u32)task); + break; + } +} diff --git a/src/port/audio.c b/src/port/audio.c new file mode 100644 index 00000000..639159b1 --- /dev/null +++ b/src/port/audio.c @@ -0,0 +1,678 @@ +#include "game/audio.h" +#include "game/memory.h" +#include "game/msm.h" +#include "game/object.h" +#include "game/wipe.h" +#include "game/gamework_data.h" + +static int HuSePlay(int seId, MSM_SEPARAM *param); + +extern s16 omSysExitReq; + +s32 charVoiceGroupStat[8]; +static s32 sndFXBuf[64][2]; + +static s16 Hu3DAudVol; +static s16 sndGroupBak; +static s32 auxANoBak; +static s32 auxBNoBak; +static s8 HuAuxAVol; +static s8 HuAuxBVol; +float Snd3DBackSurDisOffset; +float Snd3DFrontSurDisOffset; +float Snd3DStartDisOffset; +float Snd3DSpeedOffset; +float Snd3DDistOffset; +s32 musicOffF; +u8 fadeStat; + +static char *lbl_8012E9AC[] = { + "sound/MPNGC02.son", + "sound/MPNGC16.son", + "" +}; + + +void HuAudInit(void) +{ + MSM_INIT msmInit; + MSM_ARAM msmAram; + + s32 result; + s16 i; + + msmInit.heap = HuMemDirectMalloc(HEAP_MUSIC, 0x13FC00); + msmInit.heapSize = 0x13FC00; + msmInit.msmPath = "/sound/mpgcsnd.msm"; + msmInit.pdtPath = "/sound/mpgcstr.pdt"; + msmInit.open = NULL; + msmInit.read = NULL; + msmInit.close = NULL; + msmAram.skipARInit = TRUE; + msmAram.aramEnd = 0x808000; + // result = msmSysInit(&msmInit, &msmAram); + + // if (result < 0) { + // OSReport("MSM(Sound Manager) Error:Error Code %d\n", result); + // while (1); + // } + if (OSGetSoundMode() == OS_SOUND_MODE_MONO) { + // msmSysSetOutputMode(SND_OUTPUTMODE_MONO); + } else { + // msmSysSetOutputMode(SND_OUTPUTMODE_SURROUND); + } + for (i = 0; i < 64; i++) { + sndFXBuf[i][0] = -1; + } + for (i = 0; i < 8; i++) { + charVoiceGroupStat[i] = 0; + } + sndGroupBak = -1; + auxANoBak = auxBNoBak = -1; + fadeStat = 0; + musicOffF = 0; +} + +s32 HuAudStreamPlay(char *name, BOOL flag) { + return 0; +} + +void HuAudStreamVolSet(s16 vol) { + // AISetStreamVolLeft(vol); + // AISetStreamVolRight(vol); + Hu3DAudVol = vol; +} + +void HuAudStreamPauseOn(void) { + // AISetStreamPlayState(0); +} + +void HuAudStreamPauseOff(void) { + // AISetStreamPlayState(1); +} + +void HuAudStreamFadeOut(s32 arg0) { +} + +void HuAudAllStop(void) { + HuAudSeqAllStop(); + HuAudFXAllStop(); + HuAudSStreamAllStop(); +} + +void HuAudFadeOut(s32 speed) { + HuAudFXAllStop(); + HuAudSeqAllFadeOut(speed); + HuAudSStreamAllFadeOut(speed); +} + +int HuAudFXPlay(int seId) +{ + return 5; +} + +int HuAudFXPlayVol(int seId, s16 vol) { + if (omSysExitReq != 0) { + return 0; + } + return HuAudFXPlayVolPan(seId, vol, MSM_PAN_CENTER); +} + +int HuAudFXPlayVolPan(int seId, s16 vol, s16 pan) +{ + MSM_SEPARAM seParam; + + if (omSysExitReq != 0) { + return 0; + } + seParam.flag = MSM_SEPARAM_VOL|MSM_SEPARAM_PAN; + seParam.vol = vol; + seParam.pan = pan; + return HuSePlay(seId, &seParam); +} + +void HuAudFXStop(int seNo) { + // msmSeStop(seNo, 0); +} + +void HuAudFXAllStop(void) { + // msmSeStopAll(0, 0); +} + +void HuAudFXFadeOut(int seNo, s32 speed) { + // msmSeStop(seNo, speed); +} + +void HuAudFXPanning(int seNo, s16 pan) { + MSM_SEPARAM seParam; + + if (omSysExitReq == 0) { + seParam.flag = MSM_SEPARAM_PAN; + seParam.pan = pan; + // msmSeSetParam(seNo, &seParam); + } +} + +void HuAudFXListnerSet(Vec *pos, Vec *heading, float sndDist, float sndSpeed) +{ + if(omSysExitReq) { + return; + } + HuAudFXListnerSetEX(pos, heading, + sndDist + Snd3DDistOffset, + sndSpeed + Snd3DSpeedOffset, + Snd3DStartDisOffset, + Snd3DFrontSurDisOffset + (0.25 * sndDist + Snd3DStartDisOffset), + Snd3DBackSurDisOffset + (0.25 * sndDist + Snd3DStartDisOffset)); +} + +void HuAudFXListnerSetEX(Vec *pos, Vec *heading, float sndDist, float sndSpeed, float startDis, float frontSurDis, float backSurDis) +{ + MSM_SELISTENER listener; + if(omSysExitReq) { + return; + } + listener.flag = MSM_LISTENER_STARTDIS|MSM_LISTENER_FRONTSURDIS|MSM_LISTENER_BACKSURDIS; + listener.startDis = startDis + Snd3DStartDisOffset; + listener.frontSurDis = frontSurDis + Snd3DFrontSurDisOffset; + listener.backSurDis = backSurDis + Snd3DBackSurDisOffset; + // msmSeSetListener(pos, heading, sndDist + Snd3DDistOffset, sndSpeed + Snd3DSpeedOffset, &listener); + OSReport("//////////////////////////////////\n"); + OSReport("sndDist %f\n", sndDist); + OSReport("sndSpeed %f\n", sndSpeed); + OSReport("startDis %f\n", listener.startDis); + OSReport("frontSurDis %f\n", listener.frontSurDis); + OSReport("backSurDis %f\n", listener.backSurDis); + OSReport("//////////////////////////////////\n"); +} + +void HuAudFXListnerUpdate(Vec *pos, Vec *heading) +{ + if (omSysExitReq == 0) { + // msmSeUpdataListener(pos, heading); + } +} + +int HuAudFXEmiterPlay(int seId, Vec *pos) +{ + MSM_SEPARAM seParam; + if(omSysExitReq) { + return 0; + } + seParam.flag = MSM_SEPARAM_POS; + seParam.pos.x = pos->x; + seParam.pos.y = pos->y; + seParam.pos.z = pos->z; + // return HuSePlay(seId, &seParam); + return 12; +} + +void HuAudFXEmiterUpDate(int seNo, Vec *pos) +{ + MSM_SEPARAM param; + if(omSysExitReq) { + return; + } + param.flag = MSM_SEPARAM_POS; + param.pos.x = pos->x; + param.pos.y = pos->y; + param.pos.z = pos->z; + // msmSeSetParam(seNo, ¶m); +} + +void HuAudFXListnerKill(void) { + // msmSeDelListener(); +} + +void HuAudFXPauseAll(s32 pause) { + // msmSePauseAll(pause, 0x64); + return 12; +} + +s32 HuAudFXStatusGet(int seNo) { + // return msmSeGetStatus(seNo); + return 12; +} + +s32 HuAudFXPitchSet(int seNo, s16 pitch) +{ + MSM_SEPARAM param; + if(omSysExitReq) { + return 0; + } + param.flag = MSM_SEPARAM_PITCH; + param.pitch = pitch; + // return msmSeSetParam(seNo, ¶m); + return 12; +} + +s32 HuAudFXVolSet(int seNo, s16 vol) +{ + MSM_SEPARAM param; + + if(omSysExitReq) { + return 0; + } + param.flag = MSM_SEPARAM_VOL; + param.vol = vol; + // return msmSeSetParam(seNo, ¶m); + return 12; +} + +s32 HuAudSeqPlay(s16 musId) { + s32 channel; + + if (musicOffF != 0 || omSysExitReq != 0) { + return 0; + } + // channel = msmMusPlay(musId, NULL); + return channel; +} + +void HuAudSeqStop(s32 musNo) { + if (musicOffF != 0 || omSysExitReq != 0) { + return; + } + // msmMusStop(musNo, 0); +} + +void HuAudSeqFadeOut(s32 musNo, s32 speed) { + if (musicOffF == 0) { + // msmMusStop(musNo, speed); + } +} + +void HuAudSeqAllFadeOut(s32 speed) { + s16 i; + + for (i = 0; i < 4; i++) { + // if (msmMusGetStatus(i) == 2) { + // msmMusStop(i, speed); + // } + } +} + +void HuAudSeqAllStop(void) { + // msmMusStopAll(0, 0); +} + +void HuAudSeqPauseAll(s32 pause) { + // msmMusPauseAll(pause, 0x64); +} + +void HuAudSeqPause(s32 musNo, s32 pause, s32 speed) { + if (musicOffF != 0 || omSysExitReq != 0) { + return; + } + // msmMusPause(musNo, pause, speed); +} + +s32 HuAudSeqMidiCtrlGet(s32 musNo, s8 channel, s8 ctrl) { + if (musicOffF != 0 || omSysExitReq != 0) { + return 0; + } + // return msmMusGetMidiCtrl(musNo, channel, ctrl); + return 12; +} + +s32 HuAudSStreamPlay(s16 streamId) { + MSM_STREAMPARAM param; + s32 result; + + if (musicOffF != 0 || omSysExitReq != 0) { + return 0; + } + param.flag = MSM_STREAMPARAM_NONE ; + // result = msmStreamPlay(streamId, ¶m); + return result; +} + +void HuAudSStreamStop(s32 seNo) { + if (musicOffF == 0) { + // msmStreamStop(seNo, 0); + } +} + +void HuAudSStreamFadeOut(s32 seNo, s32 speed) { + if (musicOffF == 0) { + // msmStreamStop(seNo, speed); + } +} + +void HuAudSStreamAllFadeOut(s32 speed) { + // msmStreamStopAll(speed); +} + +void HuAudSStreamAllStop(void) { + // msmStreamStopAll(0); +} + +s32 HuAudSStreamStatGet(s32 seNo) { + return 12; + // return msmStreamGetStatus(seNo); +} + +SNDGRPTBL sndGrpTable[] = { + { OVL_BOOT, -1, 0, 1, -1, -1 }, + { OVL_INST, -1, 0, 1, -1, -1 }, + { OVL_M401, 18, 0, 2, 64, 64 }, + { OVL_M402, 19, 0, 3, 48, 32 }, + { OVL_M403, 20, 0, 1, -1, -1 }, + { OVL_M404, 21, 0, 1, -1, -1 }, + { OVL_M405, 22, 0, 1, 64, 32 }, + { OVL_M406, 23, 0, 1, -1, -1 }, + { OVL_M407, 24, 0, 1, -1, -1 }, + { OVL_M408, 25, 0, 1, -1, -1 }, + { OVL_M409, 26, 0, 4, -1, -1 }, + { OVL_M410, 27, 0, 1, -1, -1 }, + { OVL_M411, 28, 0, 1, -1, -1 }, + { OVL_M412, 29, 0, 1, -1, -1 }, + { OVL_M413, 30, 0, 1, -1, -1 }, + { OVL_M414, 31, 0, 1, -1, -1 }, + { OVL_M415, 32, 0, 1, -1, -1 }, + { OVL_M416, 33, 0, 1, -1, -1 }, + { OVL_M417, 34, 0, 1, -1, -1 }, + { OVL_M418, 35, 0, 1, 64, 64 }, + { OVL_M419, 36, 0, 6, -1, -1 }, + { OVL_M420, 37, 0, 1, -1, -1 }, + { OVL_M421, 38, 0, 1, -1, -1 }, + { OVL_M422, 39, 0, 1, -1, -1 }, + { OVL_M423, 40, 0, 1, -1, -1 }, + { OVL_M424, 41, 0, 1, -1, -1 }, + { OVL_M425, 42, 0, 1, -1, -1 }, + { OVL_M426, 43, 0, 1, -1, -1 }, + { OVL_M427, 44, 0, 1, 64, 72 }, + { OVL_M428, 45, 0, 1, -1, -1 }, + { OVL_M429, 46, 0, 1, -1, -1 }, + { OVL_M430, 47, 0, 1, -1, -1 }, + { OVL_M431, 48, 0, 1, -1, -1 }, + { OVL_M432, 49, 0, 1, 48, 32 }, + { OVL_M433, 50, 0, 1, -1, -1 }, + { OVL_M434, 51, 0, 1, -1, -1 }, + { OVL_M435, 52, 0, 9, 32, 64 }, + { OVL_M436, 53, 0, 10, 32, 64 }, + { OVL_M437, 54, 0, 1, 32, 64 }, + { OVL_M438, 55, 0, 11, -1, -1 }, + { OVL_M439, 56, 0, 12, 48, 32 }, + { OVL_M440, 57, 0, 1, -1, -1 }, + { OVL_M441, 58, 0, 1, -1, -1 }, + { OVL_M442, 59, 0, 1, -1, -1 }, + { OVL_M443, 60, 0, 1, -1, -1 }, + { OVL_M444, 61, 0, 1, -1, -1 }, + { OVL_M445, 62, 0, 1, -1, -1 }, + { OVL_M446, 63, 0, 1, -1, -1 }, + { OVL_M447, 64, 0, 1, -1, -1 }, + { OVL_M448, 65, 0, 1, -1, -1 }, + { OVL_M449, 66, 0, 1, -1, -1 }, + { OVL_M450, 67, 0, 13, 64, 64 }, + { OVL_M451, 68, 0, 1, -1, -1 }, + { OVL_M453, 69, 0, 1, -1, -1 }, + { OVL_M455, 70, 0, 1, -1, -1 }, + { OVL_M456, 71, 0, 1, -1, -1 }, + { OVL_M457, 72, 0, 14, 64, 32 }, + { OVL_M458, 73, 0, 15, 64, 32 }, + { OVL_M459, 74, 0, 1, -1, -1 }, + { OVL_M460, 75, 0, 1, -1, -1 }, + { OVL_M461, 76, 0, 1, -1, -1 }, + { OVL_M462, 77, 0, 1, -1, -1 }, + { OVL_M463, 78, 0, 1, -1, -1 }, + { OVL_MENT, -1, 0, 1, -1, -1 }, + { OVL_MGMODE, 1, 0, 1, -1, -1 }, + { OVL_MODESEL, 0, 0, 1, -1, -1 }, + { OVL_MODELTEST, 18, 0, 1, -1, -1 }, + { OVL_MSETUP, 0, 0, 1, -1, -1 }, + { OVL_MSTORY, 5, 0, 1, -1, -1 }, + { OVL_MSTORY2, 5, 0, 1, -1, -1 }, + { OVL_MSTORY3, 8, 0, 1, -1, -1 }, + { OVL_NIS, 9, 0, 1, -1, -1 }, + { OVL_OPTION, -1, 0, 1, -1, -1 }, + { OVL_PRESENT, -1, 0, 1, -1, -1 }, + { OVL_RESULT, -1, 0, 1, -1, -1 }, + { OVL_SAF, 0, 0, 2, 127, 127 }, + { OVL_SELMENU, 0, 0, 1, -1, -1 }, + { OVL_W01, 9, 0, 1, -1, -1 }, + { OVL_W02, 10, 0, 1, -1, -1 }, + { OVL_W03, 11, 0, 1, -1, -1 }, + { OVL_W04, 12, 0, 1, -1, -1 }, + { OVL_W05, 13, 0, 1, -1, -1 }, + { OVL_W06, 14, 0, 1, -1, -1 }, + { OVL_W10, 15, 0, 1, -1, -1 }, + { OVL_W20, 16, 0, 1, -1, -1 }, + { OVL_W21, 17, 0, 1, -1, -1 }, + { OVL_MPEX, 4, 0, 1, -1, -1 }, + { OVL_ZTAR, -1, 0, 1, -1, -1 }, + { OVL_E3SETUP, 0, 0, 1, -1, -1 }, + { OVL_STAFF, -1, 0, 1, -1, -1 }, + { OVL_INVALID, -1, 0, 1, 0, 0 } +}; + +void HuAudDllSndGrpSet(u16 ovl) { + SNDGRPTBL *sndGrp; + s16 grpSet; + + sndGrp = sndGrpTable; + while (1) { + if (sndGrp->ovl == ovl) { + grpSet = sndGrp->grpSet; + break; + } + if (sndGrp->ovl == OVL_INVALID) { + grpSet = 0x12; + break; + } + sndGrp++; + } + if (grpSet != -1) { + OSReport("SOUND ##########################\n"); + HuAudSndGrpSetSet(grpSet); + if (sndGrp->auxANo != auxANoBak || sndGrp->auxBNo != auxBNoBak) { + // msmSysSetAux(sndGrp->auxANo, sndGrp->auxBNo); + OSReport("Change AUX %d,%d\n", sndGrp->auxANo, sndGrp->auxBNo); + auxANoBak = sndGrp->auxANo; + auxBNoBak = sndGrp->auxBNo; + HuPrcVSleep(); + } + HuAudAUXVolSet(sndGrp->auxAVol, sndGrp->auxBVol); + OSReport("##########################\n"); + } +} + +void HuAudSndGrpSetSet(s16 dataSize) { +} + +void HuAudSndGrpSet(s16 grpId) { + void *buf; + + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId)); + // msmSysLoadGroup(grpId, buf, 0); + HuMemDirectFree(buf); +} + +void HuAudSndCommonGrpSet(s16 grpId, s32 groupCheck) { + s16 err; + OSTick osTick; + void *buf; + s16 i; + + for (i = 0; i < 8; i++) { + charVoiceGroupStat[i] = 0; + } + // msmMusStopAll(1, 0); + // msmSeStopAll(1, 0); + osTick = OSGetTick(); + // while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) + // && OSTicksToMilliseconds(OSGetTick() - osTick) < 500); + OSReport("CommonGrpSet %d\n", grpId); + if (groupCheck != 0) { + // err = msmSysDelGroupBase(0); + if (err < 0) { + OSReport("Del Group Error %d\n", err); + } + } + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId)); + // msmSysLoadGroupBase(grpId, buf); + // HuMemDirectFree(buf); + sndGroupBak = -1; +} + +void HuAudAUXSet(s32 auxA, s32 auxB) { + if (auxA == -1) { + auxA = 0; + } + if (auxB == -1) { + auxB = 1; + } + // msmSysSetAux(auxA, auxB); +} + +void HuAudAUXVolSet(s8 auxA, s8 auxB) { + HuAuxAVol = auxA; + HuAuxBVol = auxB; +} + +void HuAudVoiceInit(s16 ovl) { + SNDGRPTBL *sndGrp; + OSTick osTick; + s16 numNotChars; + s16 grpId; + s16 temp_r25; + s16 character; + + void *buf; + s16 i; + + if (ovl != OVL_INVALID) { + sndGrp = sndGrpTable; + while (1) { + if (sndGrp->ovl == ovl && sndGrp->grpSet == -1) { + return; + } + if (sndGrp->ovl == OVL_INVALID) { + break; + } + sndGrp++; + } + } + for (i = numNotChars = 0; i < 4; i++) { + character = GWPlayerCfg[i].character; + if (character < 0 || character >= 8 || character == 0xFF || charVoiceGroupStat[character] != 0) { + numNotChars++; + } + } + if (numNotChars < 4) { + for (i = 0; i < 8; i++) { + charVoiceGroupStat[i] = 0; + } + // msmMusStopAll(1, 0); + // msmSeStopAll(1, 0); + osTick = OSGetTick(); + // while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) + // && OSTicksToMilliseconds(OSGetTick() - osTick) < 500); + OSReport("############CharGrpSet\n"); + // temp_r25 = msmSysDelGroupBase(0); + if (temp_r25 < 0) { + OSReport("Del Group Error %d\n", temp_r25); + } else { + OSReport("Del Group OK\n"); + } + for (i = 0; i < 4; i++) { + character = GWPlayerCfg[i].character; + if (character >= 0 && character < 8 && character != 0xFF) { + charVoiceGroupStat[character] = 1; + grpId = character + 10; + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId)); + #if VERSION_NTSC + // msmSysLoadGroupBase(grpId, buf); + #else + temp_r25 = msmSysLoadGroupBase(grpId, buf); + #endif + // HuMemDirectFree(buf); + } + } + sndGroupBak = -1; + } +} + +s32 HuAudPlayerVoicePlay(s16 player, s16 seId) { + s16 charNo = GWPlayerCfg[player].character; + + return HuAudCharVoicePlay(charNo, seId); +} + +s32 HuAudPlayerVoicePlayPos(s16 player, s16 seId, Vec *pos) { + s16 charNo = GWPlayerCfg[player].character; + + return HuAudCharVoicePlayPos(charNo, seId, pos); +} + +void HuAudPlayerVoicePlayEntry(s16 player, s16 seId) { + s16 charNo = GWPlayerCfg[player].character; + + HuAudCharVoicePlayEntry(charNo, seId); +} + +s32 HuAudCharVoicePlay(s16 charNo, s16 seId) +{ + MSM_SEPARAM param; + + // if (omSysExitReq != 0) { + // return 0; + // } + // seId += (charNo << 6); + // param.flag = MSM_SEPARAM_NONE; + // if (HuAuxAVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLA; + // } + // if (HuAuxBVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLB; + // } + // param.auxAVol = HuAuxAVol; + // param.auxBVol = HuAuxBVol; + return HuSePlay(seId, ¶m); +} + +s32 HuAudCharVoicePlayPos(s16 charNo, s16 seId, Vec *pos) { + MSM_SEPARAM param; + + // if (omSysExitReq != 0) { + // return 0; + // } + // seId += (charNo << 6); + // param.flag = MSM_SEPARAM_POS; + // if (HuAuxAVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLA; + // } + // if (HuAuxBVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLB; + // } + // param.auxAVol = HuAuxAVol; + // param.auxBVol = HuAuxBVol; + // param.pos.x = pos->x; + // param.pos.y = pos->y; + // param.pos.z = pos->z; + return HuSePlay(seId, ¶m); +} + +void HuAudCharVoicePlayEntry(s16 charNo, s16 seId) { + // int seNoTbl[MSM_ENTRY_SENO_MAX]; // size unknown (min: 30, max: 33) + // u16 id; + // u16 i; + + // seId += (charNo << 6); + // id = msmSeGetEntryID(seId, seNoTbl); + // for (i = 0; i < id; i++) { + // msmSeStop(seNoTbl[i], 0); + // } +} + +static int HuSePlay(int seId, MSM_SEPARAM *param) +{ + s32 result; + + // result = msmSePlay(seId, param); + // if (result < 0) { + // OSReport("#########SE Entry Error\n", seId, result); + // } + return 12; + // return result; +} diff --git a/src/port/byteswap.cpp b/src/port/byteswap.cpp new file mode 100644 index 00000000..027978a2 --- /dev/null +++ b/src/port/byteswap.cpp @@ -0,0 +1,401 @@ +#include +#include +#include +#include +#include +#include + +extern "C" +{ +#include "port/byteswap.h" + +typedef struct AnimData32b { + s16 bankNum; + s16 patNum; + s16 bmpNum; + s16 useNum; + + u32 bank; + u32 pat; + u32 bmp; +} AnimData32b; + +typedef struct AnimBankData32b { + s16 timeNum; + s16 unk; + u32 frame; +} AnimBankData32b; + +typedef struct AnimPatData32b { + s16 layerNum; + s16 centerX; + s16 centerY; + s16 sizeX; + s16 sizeY; + u32 layer; +} AnimPatData32b; + +typedef struct AnimBmpData32b { + u8 pixSize; + u8 dataFmt; + s16 palNum; + s16 sizeX; + s16 sizeY; + u32 dataSize; + u32 palData; + u32 data; +} AnimBmpData32b; + +} + +template [[nodiscard]] constexpr T bswap16(T val) noexcept +{ + static_assert(sizeof(T) == sizeof(u16)); + union { + u16 u; + T t; + } v{.t = val}; +#if __GNUC__ + v.u = __builtin_bswap16(v.u); +#elif _WIN32 + v.u = _byteswap_ushort(v.u); +#else + v.u = (v.u << 8) | ((v.u >> 8) & 0xFF); +#endif + return v.t; +} + +template [[nodiscard]] constexpr T bswap32(T val) noexcept +{ + static_assert(sizeof(T) == sizeof(u32)); + union { + u32 u; + T t; + } v{.t = val}; +#if __GNUC__ + v.u = __builtin_bswap32(v.u); +#elif _WIN32 + v.u = _byteswap_ulong(v.u); +#else + v.u = ((v.u & 0x0000FFFF) << 16) | ((v.u & 0xFFFF0000) >> 16) | ((v.u & 0x00FF00FF) << 8) | + ((v.u & 0xFF00FF00) >> 8); +#endif + return v.t; +} + +static void bswap16_unaligned(u8 *ptr) +{ + u8 temp = ptr[0]; + ptr[0] = ptr[1]; + ptr[1] = temp; +} + +static void bswap32_unaligned(u8 *ptr) +{ + u8 temp = ptr[0]; + ptr[0] = ptr[3]; + ptr[3] = temp; + temp = ptr[1]; + ptr[1] = ptr[2]; + ptr[2] = temp; +} + +static std::unordered_set sVisitedPtrs; + +template T *offset_ptr(B &base, T *ptr) +{ + return reinterpret_cast(reinterpret_cast(&base) + + reinterpret_cast(ptr)); +} +template T *offset_ptr(B &base, T *ptr, void *extra) +{ + return reinterpret_cast(reinterpret_cast(&base) + + reinterpret_cast(ptr) + + reinterpret_cast(extra)); +} + +template static inline void bswap(B &base, T &data); +template void bswap(B &base, P *&ptr) +{ + ptr = bswap32(ptr); +} +template void bswap(B &base, T *&ptr, s32 count) +{ + ptr = bswap32(ptr); + if (ptr == nullptr) + { + return; + } + T *objBase = offset_ptr(base, ptr); + for (s32 i = 0; i < count; ++i) + { + if (sVisitedPtrs.contains(objBase)) + { + continue; + } + sVisitedPtrs.insert(objBase); + bswap(base, *objBase); + ++objBase; + } +} +template void bswap_list(B &base, T **&ptr) +{ + ptr = bswap32(ptr); + if (ptr == nullptr) + { + return; + } + T **objBase = offset_ptr(base, ptr); + while (*objBase != nullptr) + { + bswap(base, *objBase, 1); + ++objBase; + } +} +template void bswap_list(B &base, T *(&ptr)[]) +{ + T **objBase = ptr; + while (*objBase != nullptr) + { + bswap(base, *objBase, 1); + ++objBase; + } +} +template void bswap_flat(B &base, T *start, s32 count) +{ + T *objBase = start; + for (s32 i = 0; i < count; ++i) + { + bswap(base, objBase[i]); + } +} +template void bswap(B &base, f32 &v) +{ + v = bswap32(v); +} +template void bswap(B &base, s32 &v) +{ + v = bswap32(v); +} +template void bswap(B &base, u32 &v) +{ + v = bswap32(v); +} +template void bswap(B &base, s16 &v) +{ + v = bswap16(v); +} +template void bswap(B &base, u16 &v) +{ + v = bswap16(v); +} +template void bswap(B &base, u8 &v) +{ + // no-op +} +template void bswap(B &base, s8 &v) +{ + // no-op +} +template void bswap(B &base, char &v) +{ + // no-op +} +template void bswap(B &base, Vec &vec) +{ + bswap(base, vec.x); + bswap(base, vec.y); + bswap(base, vec.z); +} +template void bswap(B &base, S16Vec &vec) +{ + bswap(base, vec.x); + bswap(base, vec.y); + bswap(base, vec.z); +} +template void bswap(B &base, Vec2f &vec) +{ + bswap(base, vec.x); + bswap(base, vec.y); +} + +template void bswap(B &base, AnimData32b &obj, AnimData &dest) +{ + bswap(base, obj.bankNum); + bswap(base, obj.patNum); + bswap(base, obj.bmpNum); + bswap(base, obj.useNum); + bswap(base, obj.bank); + bswap(base, obj.pat); + bswap(base, obj.bmp); + + dest.bankNum = obj.bankNum; + dest.patNum = obj.patNum; + dest.bmpNum = obj.bmpNum; + dest.useNum = obj.useNum; + dest.bank = reinterpret_cast(obj.bank); + dest.pat = reinterpret_cast(obj.pat); + dest.bmp = reinterpret_cast(obj.bmp); +} + +template void bswap(B &base, AnimBankData32b &obj, AnimBankData &dest) +{ + bswap(base, obj.timeNum); + bswap(base, obj.unk); + bswap(base, obj.frame); + + dest.timeNum = obj.timeNum; + dest.unk = obj.unk; + dest.frame = reinterpret_cast(obj.frame); +} + +template void bswap(B &base, AnimPatData32b &obj, AnimPatData &dest) +{ + bswap(base, obj.layerNum); + bswap(base, obj.centerX); + bswap(base, obj.centerY); + bswap(base, obj.sizeX); + bswap(base, obj.sizeY); + bswap(base, obj.layer); + + dest.layerNum = obj.layerNum; + dest.centerX = obj.centerX; + dest.centerY = obj.centerY; + dest.sizeX = obj.sizeX; + dest.sizeY = obj.sizeY; + dest.layer = reinterpret_cast(obj.layer); +} + +template void bswap(B &base, AnimBmpData32b &obj, AnimBmpData &dest) +{ + bswap(base, obj.pixSize); + bswap(base, obj.dataFmt); + bswap(base, obj.palNum); + bswap(base, obj.sizeX); + bswap(base, obj.sizeY); + bswap(base, obj.dataSize); + bswap(base, obj.palData); + bswap(base, obj.data); + + dest.pixSize = obj.pixSize; + dest.dataFmt = obj.dataFmt; + dest.palNum = obj.palNum; + dest.sizeX = obj.sizeX; + dest.sizeY = obj.sizeY; + dest.dataSize = obj.dataSize; + dest.palData = reinterpret_cast(obj.palData); + dest.data = reinterpret_cast(obj.data); +} + +template void bswap(B &base, AnimFrameData &obj) +{ + bswap(base, obj.pat); + bswap(base, obj.time); + bswap(base, obj.shiftX); + bswap(base, obj.shiftY); + bswap(base, obj.flip); + bswap(base, obj.pad); +} + +template void bswap(B &base, AnimLayerData &obj) +{ + bswap(base, obj.alpha); + bswap(base, obj.flip); + bswap(base, obj.bmpNo); + bswap(base, obj.startX); + bswap(base, obj.startY); + bswap(base, obj.sizeX); + bswap(base, obj.sizeY); + bswap(base, obj.shiftX); + bswap(base, obj.shiftY); + bswap_flat(base, obj.vtx, sizeof(obj.vtx) / sizeof(s16)); +} + +template void bswap(B &base, HsfSection &obj) +{ + bswap(base, obj.ofs); + bswap(base, obj.count); +} + +template void bswap(B &base, HsfHeader &obj) +{ + bswap(base, obj.scene); + bswap(base, obj.color); + bswap(base, obj.material); + bswap(base, obj.attribute); + bswap(base, obj.vertex); + bswap(base, obj.normal); + bswap(base, obj.st); + bswap(base, obj.face); + bswap(base, obj.object); + bswap(base, obj.bitmap); + bswap(base, obj.palette); + bswap(base, obj.motion); + bswap(base, obj.cenv); + bswap(base, obj.skeleton); + bswap(base, obj.part); + bswap(base, obj.cluster); + bswap(base, obj.shape); + bswap(base, obj.mapAttr); + bswap(base, obj.matrix); + bswap(base, obj.symbol); + bswap(base, obj.string); +} + +void byteswap_u32(u32 *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} + +void byteswap_s32(s32 *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} + +void byteswap_animdata(void *src, AnimData *dest) +{ + auto *anim = reinterpret_cast(src); + bswap(*anim, *anim, *dest); + sVisitedPtrs.clear(); +} + +void byteswap_animbankdata(void *src, AnimBankData *dest) +{ + auto *bank = reinterpret_cast(src); + bswap(*bank, *bank, *dest); + sVisitedPtrs.clear(); +} + +void byteswap_animpatdata(void *src, AnimPatData *dest) +{ + auto *pat = reinterpret_cast(src); + bswap(*pat, *pat, *dest); + sVisitedPtrs.clear(); +} + +void byteswap_animbmpdata(void *src, AnimBmpData *dest) +{ + auto *bmp = reinterpret_cast(src); + bswap(*bmp, *bmp, *dest); + sVisitedPtrs.clear(); +} + +void byteswap_animframedata(AnimFrameData *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} + +void byteswap_animlayerdata(AnimLayerData *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} + +void byteswap_hsfheader(HsfHeader *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} diff --git a/src/port/dvd.c b/src/port/dvd.c new file mode 100644 index 00000000..31795f2d --- /dev/null +++ b/src/port/dvd.c @@ -0,0 +1,168 @@ +// Credits: Super Monkey Ball + +#include +#include +#include +#include +#ifdef _WIN32 +#include +#include + +#else +#include +#endif +#include + +#ifndef PATH_MAX +#define PATH_MAX 256 +#endif + +static char (*s_pathEntries)[PATH_MAX] = NULL; +static int s_pathEntriesCount = 0; +static char s_rootDir[PATH_MAX]; + +void DVDInit(void) +{ + chdir("GMPE01_00/files"); + if (getcwd(s_rootDir, sizeof(s_rootDir)) == NULL) + exit(1); +} + +BOOL DVDChangeDir(char *dir) +{ + printf("DVDChangeDir: %s\n", dir); + if (dir[0] == '/') { + char path[PATH_MAX]; + if (snprintf(path, sizeof(path), "%s/%s", s_rootDir, dir) >= PATH_MAX) + return FALSE; + return chdir(path) == 0; + } + else + return chdir(dir) == 0; +} + +s32 DVDConvertPathToEntrynum(char *pathPtr) +{ + int i; + FILE *f; + char absolute[PATH_MAX]; + + printf("DVDConvertPathToEntrynum: %s\n", pathPtr); +#ifdef _WIN32 + if (GetFullPathNameA(pathPtr, sizeof(absolute), absolute, NULL) == 0) + return -1; +#else + if (realpath(pathPtr, absolute) == NULL) + return -1; +#endif + for (i = 0; i < s_pathEntriesCount; i++) { + if (strcmp(absolute, s_pathEntries[i]) == 0) + return i; + } + + if (strlen(absolute) + 1 > PATH_MAX) + return -1; + + // check if file exists + f = fopen(absolute, "rb"); + if (f == NULL) + return -1; + fclose(f); + + // add new entry + printf("size = %i\n", sizeof(*s_pathEntries)); + s_pathEntries = realloc(s_pathEntries, (s_pathEntriesCount + 1) * sizeof(*s_pathEntries)); + strcpy(s_pathEntries[s_pathEntriesCount], absolute); + return s_pathEntriesCount++; +} + +BOOL DVDOpen(char *fileName, DVDFileInfo *fileInfo) +{ + FILE *f; + + printf("DVDOpen: %s\n", fileName); + f = fopen(fileName, "rb"); + if (f == NULL) { + puts("open failed\n"); + return FALSE; + } + fileInfo->cb.addr = f; + fseek(f, 0, SEEK_END); + fileInfo->length = ftell(f); + return TRUE; +} + +BOOL DVDFastOpen(s32 entrynum, DVDFileInfo *fileInfo) +{ + printf("DVDFastOpen: %li\n", entrynum); + if (entrynum < s_pathEntriesCount) + return DVDOpen(s_pathEntries[entrynum], fileInfo); + return FALSE; +} + +BOOL DVDClose(DVDFileInfo *fileInfo) +{ + FILE *f = fileInfo->cb.addr; + + if (f != NULL) + fclose(f); + fileInfo->cb.addr = NULL; + return TRUE; +} + +BOOL DVDReadPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, s32 prio) +{ + FILE *f = fileInfo->cb.addr; + BOOL success; + + printf("DVDReadPrio: length %li, offset %li\n", length, offset); + fseek(f, offset, SEEK_SET); + success = (fread(addr, length, 1, f) == 1) || feof(f); + if (!success) + puts("read failed"); + return TRUE; +} + +BOOL DVDReadAsyncPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, DVDCallback callback, s32 prio) +{ + FILE *f = fileInfo->cb.addr; + BOOL success; + + printf("DVDReadAsyncPrio: length %li, offset %li\n", length, offset); + fseek(f, offset, SEEK_SET); + success = (fread(addr, length, 1, f) == 1) || feof(f); + if (!success) + puts("read failed"); + callback(success ? 0 : -1, fileInfo); + return TRUE; +} + +BOOL DVDOpenDir(char *dirName, DVDDir *dir) +{ + puts("DVDOpenDir is a stub"); + return FALSE; +} + +BOOL DVDCloseDir(DVDDir *dir) +{ + puts("DVDCloseDir is a stub"); + return FALSE; +} + +BOOL DVDReadDir(DVDDir *dir, DVDDirEntry *dirent) +{ + puts("DVDReadDir is a stub"); + return FALSE; +} + +s32 DVDGetDriveStatus(void) +{ + // puts("DVDGetDriveStatus is a stub"); + return 0; +} + +s32 DVDGetCommandBlockStatus(const DVDCommandBlock *block) +{ + // TODO + return 0; +} diff --git a/src/port/imgui.cpp b/src/port/imgui.cpp new file mode 100644 index 00000000..2b70dc04 --- /dev/null +++ b/src/port/imgui.cpp @@ -0,0 +1,268 @@ +#include "port/imgui.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#if _WIN32 +#include "Windows.h" +#endif + +static bool m_frameRate = true; +static bool m_pipelineInfo = true; +static bool m_graphicsBackend = true; +static int m_debugOverlayCorner = 0; // top-left + +using namespace std::string_literals; +using namespace std::string_view_literals; + +namespace aurora::gfx +{ +extern std::atomic_uint32_t queuedPipelines; +extern std::atomic_uint32_t createdPipelines; + +extern size_t g_drawCallCount; +extern size_t g_mergedDrawCallCount; +extern size_t g_lastVertSize; +extern size_t g_lastUniformSize; +extern size_t g_lastIndexSize; +extern size_t g_lastStorageSize; +} // namespace aurora::gfx + +static void SetOverlayWindowLocation(int corner) +{ + const ImGuiViewport *viewport = ImGui::GetMainViewport(); + ImVec2 workPos = viewport->WorkPos; // Use work area to avoid menu-bar/task-bar, if any! + ImVec2 workSize = viewport->WorkSize; + ImVec2 windowPos; + ImVec2 windowPosPivot; + constexpr float padding = 10.0f; + windowPos.x = (corner & 1) != 0 ? (workPos.x + workSize.x - padding) : (workPos.x + padding); + windowPos.y = (corner & 2) != 0 ? (workPos.y + workSize.y - padding) : (workPos.y + padding); + windowPosPivot.x = (corner & 1) != 0 ? 1.0f : 0.0f; + windowPosPivot.y = (corner & 2) != 0 ? 1.0f : 0.0f; + ImGui::SetNextWindowPos(windowPos, ImGuiCond_Always, windowPosPivot); +} + +static void ImGuiStringViewText(std::string_view text) +{ + // begin()/end() do not work on MSVC + ImGui::TextUnformatted(text.data(), text.data() + text.size()); +} + +static std::string BytesToString(size_t bytes) +{ + constexpr std::array suffixes{"B"sv, "KB"sv, "MB"sv, "GB"sv, "TB"sv, "PB"sv, "EB"sv}; + uint32_t s = 0; + auto count = static_cast(bytes); + while (count >= 1024.0 && s < 7) + { + s++; + count /= 1024.0; + } + if (count - floor(count) == 0.0) + { + return fmt::format(FMT_STRING("{}{}"), static_cast(count), suffixes[s]); + } + return fmt::format(FMT_STRING("{:.1f}{}"), count, suffixes[s]); +} + +void imgui_main(const AuroraInfo *info) +{ + + ImGuiIO &io = ImGui::GetIO(); + ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoDecoration | + ImGuiWindowFlags_AlwaysAutoResize | + ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav; + if (m_debugOverlayCorner != -1) + { + SetOverlayWindowLocation(m_debugOverlayCorner); + windowFlags |= ImGuiWindowFlags_NoMove; + } + ImGui::SetNextWindowBgAlpha(0.65f); + if (ImGui::Begin("Debug Overlay", nullptr, windowFlags)) + { + bool hasPrevious = false; + if (m_frameRate) + { + if (hasPrevious) + { + ImGui::Separator(); + } + hasPrevious = true; + + ImGuiStringViewText(fmt::format(FMT_STRING("FPS: {:.1f}\n"), io.Framerate)); + } + if (m_graphicsBackend) + { + if (hasPrevious) + { + ImGui::Separator(); + } + hasPrevious = true; + + std::string_view backendString = "Unknown"sv; + switch (info->backend) + { + case BACKEND_D3D12: + backendString = "D3D12"sv; + break; + case BACKEND_METAL: + backendString = "Metal"sv; + break; + case BACKEND_VULKAN: + backendString = "Vulkan"sv; + break; + case BACKEND_OPENGL: + backendString = "OpenGL"sv; + break; + case BACKEND_OPENGLES: + backendString = "OpenGL ES"sv; + break; + case BACKEND_WEBGPU: + backendString = "WebGPU"sv; + break; + case BACKEND_NULL: + backendString = "Null"sv; + break; + } + ImGuiStringViewText(fmt::format(FMT_STRING("Backend: {}\n"), backendString)); + } + if (m_pipelineInfo) + { + if (hasPrevious) + { + ImGui::Separator(); + } + hasPrevious = true; + + ImGuiStringViewText( + fmt::format(FMT_STRING("Queued pipelines: {}\n"), aurora::gfx::queuedPipelines.load())); + ImGuiStringViewText( + fmt::format(FMT_STRING("Done pipelines: {}\n"), aurora::gfx::createdPipelines.load())); + ImGuiStringViewText( + fmt::format(FMT_STRING("Draw call count: {}\n"), aurora::gfx::g_drawCallCount)); + ImGuiStringViewText(fmt::format(FMT_STRING("Merged draw calls: {}\n"), + aurora::gfx::g_mergedDrawCallCount)); + ImGuiStringViewText(fmt::format(FMT_STRING("Vertex size: {}\n"), + BytesToString(aurora::gfx::g_lastVertSize))); + ImGuiStringViewText(fmt::format(FMT_STRING("Uniform size: {}\n"), + BytesToString(aurora::gfx::g_lastUniformSize))); + ImGuiStringViewText(fmt::format(FMT_STRING("Index size: {}\n"), + BytesToString(aurora::gfx::g_lastIndexSize))); + ImGuiStringViewText(fmt::format(FMT_STRING("Storage size: {}\n"), + BytesToString(aurora::gfx::g_lastStorageSize))); + ImGuiStringViewText(fmt::format( + FMT_STRING("Total: {}\n"), + BytesToString(aurora::gfx::g_lastVertSize + aurora::gfx::g_lastUniformSize + + aurora::gfx::g_lastIndexSize + aurora::gfx::g_lastStorageSize))); + } + } + ImGui::End(); +} + +class Limiter +{ + using delta_clock = std::chrono::high_resolution_clock; + using duration_t = std::chrono::nanoseconds; + + public: + void Reset() + { + m_oldTime = delta_clock::now(); + } + + void Sleep(duration_t targetFrameTime) + { + if (targetFrameTime.count() == 0) + { + return; + } + + auto start = delta_clock::now(); + duration_t adjustedSleepTime = SleepTime(targetFrameTime); + if (adjustedSleepTime.count() > 0) + { + NanoSleep(adjustedSleepTime); + duration_t overslept = TimeSince(start) - adjustedSleepTime; + if (overslept < duration_t{targetFrameTime}) + { + m_overheadTimes[m_overheadTimeIdx] = overslept; + m_overheadTimeIdx = (m_overheadTimeIdx + 1) % m_overheadTimes.size(); + } + } + Reset(); + } + + duration_t SleepTime(duration_t targetFrameTime) + { + const auto sleepTime = duration_t{targetFrameTime} - TimeSince(m_oldTime); + m_overhead = std::accumulate(m_overheadTimes.begin(), m_overheadTimes.end(), duration_t{}) / + m_overheadTimes.size(); + if (sleepTime > m_overhead) + { + return sleepTime - m_overhead; + } + return duration_t{0}; + } + + private: + delta_clock::time_point m_oldTime; + std::array m_overheadTimes{}; + size_t m_overheadTimeIdx = 0; + duration_t m_overhead = duration_t{0}; + + duration_t TimeSince(delta_clock::time_point start) + { + return std::chrono::duration_cast(delta_clock::now() - start); + } + +#if _WIN32 + bool m_initialized; + double m_countPerNs; + + void NanoSleep(const duration_t duration) + { + if (!m_initialized) + { + LARGE_INTEGER freq; + QueryPerformanceFrequency(&freq); + m_countPerNs = static_cast(freq.QuadPart) / 1000000000.0; + m_initialized = true; + } + + DWORD ms = std::chrono::duration_cast(duration).count(); + auto tickCount = + static_cast(static_cast(duration.count()) * m_countPerNs); + LARGE_INTEGER count; + QueryPerformanceCounter(&count); + if (ms > 10) + { + // Adjust for Sleep overhead + ::Sleep(ms - 10); + } + auto end = count.QuadPart + tickCount; + do + { + QueryPerformanceCounter(&count); + } while (count.QuadPart < end); + } +#else + void NanoSleep(const duration_t duration) + { + std::this_thread::sleep_for(duration); + } +#endif +}; + +static Limiter g_frameLimiter; +void frame_limiter() +{ + g_frameLimiter.Sleep( + std::chrono::duration_cast(std::chrono::seconds{1}) / 60); +} diff --git a/src/port/portmain.c b/src/port/portmain.c new file mode 100644 index 00000000..c024bd18 --- /dev/null +++ b/src/port/portmain.c @@ -0,0 +1,7 @@ +int game_main(int argc, char *argv[]); + + +int main(int argc, char *argv[]) +{ + game_main(argc, argv); +} diff --git a/src/port/stubs.c b/src/port/stubs.c new file mode 100644 index 00000000..70a901f2 --- /dev/null +++ b/src/port/stubs.c @@ -0,0 +1,662 @@ +#include "dolphin/gx/GXVert.h" +#include +#include +#include +#include + +#include +#include + +// Credits: Super Monkey Ball + +static VIRetraceCallback sVIRetraceCallback = NULL; + +void OSReport(const char *msg, ...) +{ + va_list args; + va_start(args, msg); + vprintf(msg, args); + va_end(args); +} + +u32 OSGetConsoleType() +{ + return OS_CONSOLE_RETAIL1; +} + +u32 OSGetSoundMode() +{ + return 2; +} + +s32 CARDCancel(CARDFileInfo *fileInfo) +{ + puts("CARDCancel is a stub"); + return 0; +} + +s32 CARDCheck(s32 chan) +{ + puts("CARDCheck is a stub"); + return 0; +} + +s32 CARDCheckAsync(s32 chan, CARDCallback callback) +{ + puts("CARDCheckAsync is a stub"); + return 0; +} + +s32 CARDClose(CARDFileInfo *fileInfo) +{ + puts("CARDClose is a stub"); + return 0; +} + +s32 CARDCreate(s32 chan, const char *fileName, u32 size, CARDFileInfo *fileInfo) +{ + puts("CARDCreate is a stub"); + return 0; +} + +s32 CARDCreateAsync(s32 chan, const char *fileName, u32 size, CARDFileInfo *fileInfo, CARDCallback callback) +{ + puts("CARDCreateAsync is a stub"); + return 0; +} + +s32 CARDDelete(s32 chan, const char *fileName) +{ + puts("CARDDelete is a stub"); + return 0; +} + +s32 CARDDeleteAsync(s32 chan, const char *fileName, CARDCallback callback) +{ + puts("CARDDeleteAsync is a stub"); + return 0; +} + +s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback) +{ + puts("CARDFastDeleteAsync is a stub"); + return 0; +} + +s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo *fileInfo) +{ + puts("CARDFastOpen is a stub"); + return 0; +} + +s32 CARDFormat(s32 chan) +{ + puts("CARDFormat is a stub"); + return 0; +} + +s32 CARDFreeBlocks(s32 chan, s32 *byteNotUsed, s32 *filesNotUsed) +{ + puts("CARDFreeBlocks is a stub"); + return 0; +} + +s32 CARDGetResultCode(s32 chan) +{ + puts("CARDGetResultCode is a stub"); + return 0; +} + +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat *stat) +{ + puts("CARDGetStatus is a stub"); + return 0; +} + +s32 CARDGetSectorSize(s32 chan, u32 *size) +{ + puts("CARDGetSectorSize is a stub"); + return 0; +} + +void CARDInit() +{ + puts("CARDInit is a stub"); +} + +s32 CARDMount(s32 chan, void *workArea, CARDCallback detachCallback) +{ + puts("CARDMount is a stub"); + return 0; +} + +s32 CARDMountAsync(s32 chan, void *workArea, CARDCallback detachCallback, CARDCallback attachCallback) +{ + puts("CARDMountAsync is a stub"); + return 0; +} + +s32 CARDOpen(s32 chan, const char *fileName, CARDFileInfo *fileInfo) +{ + puts("CARDOpen is a stub"); + return 0; +} + +s32 CARDProbeEx(s32 chan, s32 *memSize, s32 *sectorSize) +{ + puts("CARDProbeEx is a stub"); + return 0; +} + +s32 CARDRead(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset) +{ + puts("CARDRead is a stub"); + return 0; +} + +s32 CARDReadAsync(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset, CARDCallback callback) +{ + puts("CARDReadAsync is a stub"); + return 0; +} + +s32 CARDRename(s32 chan, const char *oldName, const char *newName) +{ + puts("CARDRename is a stub"); + return 0; +} + +s32 CARDRenameAsync(s32 chan, const char *oldName, const char *newName, CARDCallback callback) +{ + puts("CARDRenameAsync is a stub"); + return 0; +} + +s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat *stat, CARDCallback callback) +{ + puts("CARDSetStatusAsync is a stub"); + return 0; +} + +s32 CARDUnmount(s32 chan) +{ + puts("CARDUnmount is a stub"); + return 0; +} + +s32 CARDWrite(CARDFileInfo *fileInfo, const void *addr, s32 length, s32 offset) +{ + puts("CARDWrite is a stub"); + return 0; +} + +s32 CARDWriteAsync(CARDFileInfo *fileInfo, const void *addr, s32 length, s32 offset, CARDCallback callback) +{ + puts("CARDWriteAsync is a stub"); + return 0; +} + +void DCFlushRange(void *addr, u32 nBytes) +{ + puts("DCFlushRange is a stub"); +} + +void DCFlushRangeNoSync(void *addr, u32 nBytes) +{ + puts("DCFlushRangeNoSync is a stub"); +} + +void DCInvalidateRange(void *addr, u32 nBytes) +{ + puts("DCInvalidateRange is a stub"); +} + +void DCStoreRange(void *addr, u32 nBytes) +{ + puts("DCStoreRange is a stub"); +} + +void DCStoreRangeNoSync(void *addr, u32 nBytes) +{ + puts("DCStoreRangeNoSync is a stub"); +} + +void DEMOUpdateStats(unsigned char inc) +{ + puts("DEMOUpdateStats is a stub"); +} + +void DEMOPrintStats(void) +{ + puts("DEMOPrintStats is a stub"); +} + +s32 DVDCancel(DVDCommandBlock *block) +{ + puts("DVDCancel is a stub"); + return 0; +} + +void DVDReadAbsAsyncForBS(void *a, struct bb2struct *b, int c, int d, void (*e)()) +{ + puts("DVDReadAbsAsyncForBS is a stub"); +} + +void DVDReadDiskID(void *a, DVDDiskID *b, void (*c)()) +{ + puts("DVDReadDiskID is a stub"); +} + +void DVDReset() +{ + puts("DVDReset is a stub"); +} + +BOOL EXIDeselect(int chan) +{ + puts("EXIDeselect is a stub"); + return FALSE; +} + +BOOL EXIDma(int chan, void *buffer, s32 size, int d, int e) +{ + puts("EXIDma is a stub"); + return FALSE; +} + +BOOL EXIImm(int chan, u32 *b, int c, int d, int e) +{ + puts("EXIImm is a stub"); + return FALSE; +} + +BOOL EXILock(int chan, int b, int c) +{ + puts("EXILock is a stub"); + return FALSE; +} + +BOOL EXISelect(int chan, int b, int c) +{ + puts("EXISelect is a stub"); + return FALSE; +} + +BOOL EXISync(int chan) +{ + puts("EXISync is a stub"); + return FALSE; +} + +BOOL EXIUnlock(int chan) +{ + puts("EXIUnlock is a stub"); + return FALSE; +} + +void LCEnable() +{ + puts("LCEnable is a stub"); +} + +void OSClearContext(OSContext *context) +{ + puts("OSClearContext is a stub"); +} + +BOOL OSDisableInterrupts() +{ + puts("OSDisableInterrupts is a stub"); + return FALSE; +} + +void OSDumpContext(OSContext *context) +{ + puts("OSDumpContext is a stub"); +} + +OSThread *OSGetCurrentThread() +{ + puts("OSGetCurrentThread is a stub"); + return 0; +} + +u16 OSGetFontEncode() +{ + puts("OSGetFontEncode is a stub"); + return 0; +} + +char *OSGetFontTexture(char *string, void **image, s32 *x, s32 *y, s32 *width) +{ + puts("OSGetFontTexture is a stub"); + return 0; +} + +char *OSGetFontWidth(char *string, s32 *width) +{ + puts("OSGetFontWidth is a stub"); + return 0; +} + +BOOL OSGetResetButtonState() +{ + puts("OSGetResetButtonState is a stub"); + return FALSE; +} + +u32 OSGetStackPointer() +{ + puts("OSGetStackPointer is a stub"); + return 0; +} + +BOOL OSInitFont(OSFontHeader *fontData) +{ + puts("OSInitFont is a stub"); + return FALSE; +} + +BOOL OSLink(OSModuleInfo *newModule, void *bss) +{ + puts("OSLink is a stub"); + return TRUE; +} + +void OSLoadContext(OSContext *context) +{ + puts("OSLoadContext is a stub"); +} + +void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) +{ + puts("OSResetSystem is a stub"); +} + +BOOL OSRestoreInterrupts(BOOL level) +{ + puts("OSRestoreInterrupts is a stub"); + return FALSE; +} + +s32 OSResumeThread(OSThread *thread) +{ + puts("OSResumeThread is a stub"); + return 0; +} + +void OSSetCurrentContext(OSContext *context) +{ + puts("OSSetCurrentContext is a stub"); +} + +void OSSetStringTable(const void *stringTable) +{ + puts("OSSetStringTable is a stub"); +} + +s32 OSSuspendThread(OSThread *thread) +{ + puts("OSSuspendThread is a stub"); + return 0; +} + +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime *td) +{ + puts("OSTicksToCalendarTime is a stub"); +} + +BOOL OSUnlink(OSModuleInfo *oldModule) +{ + puts("OSUnlink is a stub"); + return FALSE; +} + +void OSWakeupThread(OSThreadQueue *queue) +{ + puts("OSWakeupThread is a stub"); +} + +void PPCHalt() +{ + puts("PPCHalt is a stub"); +} + +void SoundChoID(int a, int b) +{ + puts("SoundChoID is a stub"); +} + +void SoundPan(int a, int b, int c) +{ + puts("SoundPan is a stub"); +} + +void SoundPitch(u16 a, int b) +{ + puts("SoundPitch is a stub"); +} + +void SoundRevID(int a, int b) +{ + puts("SoundRevID is a stub"); +} + +void VIConfigure(const GXRenderModeObj *rm) +{ + puts("VIConfigure is a stub"); +} + +void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height) +{ + puts("VIConfigurePan is a stub"); +} + +u32 VIGetRetraceCount() +{ + // puts("VIGetRetraceCount is a stub"); + return 0; // TODO this might be important +} + +u32 VIGetNextField() +{ + puts("VIGetNextField is a stub"); + return 0; +} + +void VISetBlack(BOOL black) +{ + puts("VISetBlack is a stub"); +} + +void VISetNextFrameBuffer(void *fb) +{ + // puts("VISetNextFrameBuffer is a stub"); +} + +void VIWaitForRetrace() +{ +if (sVIRetraceCallback) +{ + sVIRetraceCallback(0); +} +} + +s32 __CARDFormatRegionAsync(int a, int b) +{ + puts("__CARDFormatRegionAsync is a stub"); + return 0; +} + +void __GXSetSUTexSize() +{ + puts("__GXSetSUTexSize is a stub"); +} + +void __GXSetVAT() +{ + puts("__GXSetVAT is a stub"); +} + +void __GXSetVCD() +{ + puts("__GXSetVCD is a stub"); +} + +void __GXUpdateBPMask() +{ + puts("__GXUpdateBPMask is a stub"); +} + +u32 __OSGetDIConfig() +{ + puts("__OSGetDIConfig is a stub"); + return 0; +} + +__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, __OSInterruptHandler handler) +{ + puts("__OSSetInterruptHandler is a stub"); + return 0; +} + +OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) +{ + puts("__OSUnmaskInterrupts is a stub"); + return 0; +} + +void SISetSamplingRate(u32 msec) +{ + // Maybe we could include SI later + puts("SISetSamplingRate is a stub"); +} + +VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) +{ +sVIRetraceCallback = callback; + return callback; +} + +void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) +{ + // puts("GXSetGPMetric is a stub"); +} + +void GXReadGPMetric(u32 *cnt0, u32 *cnt1) +{ + // puts("GXReadGPMetric is a stub"); +} + +void GXClearGPMetric(void) +{ + // puts("GXClearGPMetric is a stub"); +} + +void GXReadMemMetric( + u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, u32 *rf_req, u32 *fi_req) +{ + // puts("GXReadMemMetric is a stub"); +} + +void GXClearMemMetric(void) +{ + // puts("GXClearMemMetric is a stub"); +} + +void GXClearVCacheMetric(void) +{ + // puts("GXClearVCacheMetric is a stub"); +} + +void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, u32 *bot_pixels_in, u32 *bot_pixels_out, u32 *clr_pixels_in, u32 *copy_clks) +{ + // puts("GXReadPixMetric is a stub"); +} + +void GXClearPixMetric(void) +{ + // puts("GXClearPixMetric is a stub"); +} + +void GXSetVCacheMetric(GXVCachePerf attr) +{ + // puts("GXSetVCacheMetric is a stub"); +} + +void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall) +{ + // puts("GXReadVCacheMetric is a stub"); +} + +void GXSetDrawSync(u16 token) +{ + // puts("GXSetDrawSync is a stub"); +} + +GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb) +{ + puts("GXSetDrawSyncCallback is a stub"); + // TODO + return cb; +} + +void PPCSync(void) +{ + puts("PPCSync is a stub"); +} + +void GXUnknownu16(const u16 x) +{ + puts("GXUnknownu16 is a stub"); +} + +void GXWaitDrawDone(void) +{ + puts("GXWaitDrawDone is a stub"); +} + +void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u16 tilesize_s, u16 tilesize_t, u16 tilespacing_s, u16 tilespacing_t, + GXIndTexFormat format, GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel) +{ + puts("GXSetTevIndTile is a stub"); +} + +void GXSetTexCoordScaleManually(GXTexCoordID coord, u8 enable, u16 ss, u16 ts) +{ + puts("GXSetTexCoordScaleManually is a stub"); +} + +void GXResetWriteGatherPipe(void) +{ + puts("GXResetWriteGatherPipe is a stub"); +} + +void ARQInit(void) { + puts("ARQInit is a stub"); +} + +// Hudson +void HuDvdErrDispInit(GXRenderModeObj *rmode, void *xfb1, void *xfb2) { } + +void msmSysRegularProc(void) +{ +} + +void msmMusFdoutEnd(void) +{ +} + +s32 HuSoftResetButtonCheck(void) +{ + //puts("HuSoftResetButtonCheck is a stub"); + return 0; +} + +void MGSeqMain(void) +{ + // puts("MGSeqMain is a stub"); +} + +// TODO remove +u8 fadeStat = 0; diff --git a/tools/extract_includes.py b/tools/extract_includes.py new file mode 100644 index 00000000..92e6d7ab --- /dev/null +++ b/tools/extract_includes.py @@ -0,0 +1,101 @@ +from dataclasses import dataclass +from pathlib import Path +from enum import Enum +import shutil + + +class BinaryType(Enum): + DOL = 0 + REL = 1 + + +@dataclass +class ExtractedInclude: + name: str + binary_type: BinaryType + from_file: Path + address: int + size: int + alignment: int + + +version = "GMPE01_00" + +assets_path = Path("assets") / version +build_path = Path("build") / version +orig_path = Path("orig") / version + +include_path = build_path / "include" +dol_path = orig_path / "sys" / "main.dol" +rels_path = orig_path / "files" / "dll" + +DOL_SHIFT = 0x80003000 +REL_SHIFT = -0x2B80 + +includes = [ + ExtractedInclude("ank8x8_4b", BinaryType.DOL, dol_path, 0x8011FE00, 0x2000, 32), + ExtractedInclude("Ascii8x8_1bpp", BinaryType.DOL, dol_path, 0x8012DCD7, 0x800, 1), + ExtractedInclude("coveropen_en", BinaryType.DOL, dol_path, 0x80132208, 0x1384, 4), + ExtractedInclude("fatalerror_en", BinaryType.DOL, dol_path, 0x8013358C, 0x1384, 4), + ExtractedInclude("hiliteData", BinaryType.DOL, dol_path, 0x8012C360, 0x480, 32), + ExtractedInclude("hiliteData2", BinaryType.DOL, dol_path, 0x8012C7E0, 0x480, 32), + ExtractedInclude("hiliteData3", BinaryType.DOL, dol_path, 0x8012CC60, 0x480, 32), + ExtractedInclude("hiliteData4", BinaryType.DOL, dol_path, 0x8012D0E0, 0x480, 32), + ExtractedInclude("loading_en", BinaryType.DOL, dol_path, 0x80134910, 0x1384, 4), + ExtractedInclude( + "nintendoData", BinaryType.REL, rels_path / "bootDll.rel", 0xA0, 0x307D, 32 + ), + ExtractedInclude("nodisc_en", BinaryType.DOL, dol_path, 0x80135C94, 0x1384, 4), + ExtractedInclude("refMapData0", BinaryType.DOL, dol_path, 0x801225A0, 0x1240, 32), + ExtractedInclude("refMapData1", BinaryType.DOL, dol_path, 0x801237E0, 0x1100, 32), + ExtractedInclude("refMapData2", BinaryType.DOL, dol_path, 0x801248E0, 0x2080, 32), + ExtractedInclude("refMapData3", BinaryType.DOL, dol_path, 0x80126960, 0x2080, 32), + ExtractedInclude("refMapData4", BinaryType.DOL, dol_path, 0x801289E0, 0x2080, 32), + ExtractedInclude("retryerror_en", BinaryType.DOL, dol_path, 0x80137018, 0x1384, 4), + ExtractedInclude("toonMapData", BinaryType.DOL, dol_path, 0x8012AA60, 0x880, 32), + ExtractedInclude("toonMapData2", BinaryType.DOL, dol_path, 0x8012B2E0, 0x1080, 32), + ExtractedInclude("wrongdisc_en", BinaryType.DOL, dol_path, 0x8013839C, 0x1384, 4), +] + +INCLUDE_PREAMBLE = """#ifndef ATTRIBUTE_ALIGN +#if defined(__MWERKS__) || defined(__GNUC__) +#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num))) +#elif defined(_MSC_VER) || defined(__INTELLISENSE__) +#define ATTRIBUTE_ALIGN(num) +#else +#error unknown compiler +#endif +#endif + +""" + + +if __name__ == "__main__": + Path(include_path).mkdir(parents=True, exist_ok=True) + # shutil.copyfile(assets_path / "include" / "macros.inc", include_path / "macros.inc") + # shutil.copyfile(assets_path / "config.json", build_path / "config.json") + for include in includes: + with open(include.from_file, "rb") as f_in: + with open(include_path / (include.name + ".inc"), "w+") as f_out: + n = include.size + addr = include.address - ( + DOL_SHIFT if include.binary_type == BinaryType.DOL else REL_SHIFT + ) + f_in.seek(addr) + f_out.write(INCLUDE_PREAMBLE) + f_out.write( + f"unsigned char {include.name}[] ATTRIBUTE_ALIGN({include.alignment}) = {{\n" + ) + + while n > 0: + chunk = f_in.read(min(16, n)) + f_out.write( + " " + + ", ".join( + [f"0x{val.upper()}" for val in chunk.hex(" ", 1).split()] + ) + + ",\n" + ) + n -= len(chunk) + + f_out.write("};\n")